Arkisto kategorialle ‘ICT4TN011-2 Linuxin keskitetty hallinta’

Läksy w49: Oman Puppet modulin julkaiseminen

13.12.2012

Harjoitustehtävän aiheena oli oman Puppet modulin julkaiseminen. Julkaistava moduli sisältää edellisessä harjoitustehtävässä kuvatun Puppet modulin toteutuksen mukaiset tiedostot. Nyt julkaistavaa Puppet modulia voidaan käyttää Linux käyttöjärjestelmän käyttäjienhallinnan perustehtäviin suorittamiseen Puppet Agent koneilla. Modulia voidaan myös helposti laajentaa erilaisten käyttötarpeiden mukaisesti.

Puppet moduli on ladattavissa Dropbox linkistä https://www.dropbox.com/s/1e9eiqo7alrnggw/eliimatt-usermgt-0.0.1.tar.gz

Harjoitusympäristö

Harjoitus suoritettiin 12.12.2012 opiskelijan kotona käyttäen Haaga-Helian TIKO-kannettavaa. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Haaga-Helian TIKO-kannettavan käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Haaga-Helian TIKO-kannettava HP EliteBook 2560p kokoonpano:

  • Suoritin:Intel Core i5-2450M @2.50GHz
  • Keskusmuisti: 8 Gt DDR3
  • Kiintolevy: 500 Gt SATA300 7200rpm
  • Käyttöjärjestelmä: Windows 7 Professional 64-bittinen

Puppet modulin julkaiseminen

Palautin ensiksi edellisen harjoitustehtävän yhteydessä käytetyt tiedostot tekemistäni varmuuskopioista Xubuntu live-cd:n käyttäjän xubuntu kotihakemistoon. Kirjoitin modulille tekstimuotoisen README tiedoston käyttäen edellisen harjoitustehtävä tekstejä pohjana. Nimesin modulin hakemiston Puppet Forge tyylillä tekijä-moduli_nimi-versio_numero. Modulin eliimatt-usermgt-0.0.1 julkaisuhakemiston rakenne on seuraava:

├── eliimatt-usermgt-0.0.1
│   ├── files
│   │   ├── bash_aliases
│   │   └── profile
│   ├── lib
│   │   └── puppet
│   │       └── parser
│   │           └── functions
│   │               └── hashpw.rb
│   ├── manifests
│   │   ├── change_password.pp
│   │   ├── create_user.pp
│   │   ├── remove_user.pp
│   │   └── setup_etcskel.pp
│   └── README

Pakkasin modulin hakemiston tar ohjelmalla komennolla:

$ tar czvf eliimatt-usermgt-0.0.1.tar.gz eliimatt-usermgt-0.0.1/

Tein itselleni Dropbox tilin ja siirsin modulipaketin Dropbox hakemistoon. Otin Dropbox linkin talteen ja lisäsin sen tähän blogikirjoitukseen. Modulin kehittämisessä käytetyt lähteet esitetään vielä kertauksena.

Puppet modulin asennusohjeet

Pura modulin asennuspaketti Puppet Master koneella hakemistoon /etc/puppet/modules ja muuta hakemiston nimi muotoon usermgt komennolla:

$ mv eliimatt-usermgt-0.0.1/ usermgt

Modulia suositellaan käytettäviksi tiedostojen /etc/puppet/manifests/site.pp ja /etc/puppet/manifests/nodes.pp avulla. Näiden tiedostojen käyttämisestä
on esimerkki edellisessä harjoitustehtävässä.

Lähteet

Cooper, M. 2012. Advanced Bash-Scripting Guide. Appendix M. Sample .bashrc and .bash_profile Files.
http://tldp.org/LDP/abs/html/sample-bashrc.html

Finninday.net 2011. Zero to puppet in one day. Puppet master configs.
http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day#Puppet_master_configs

Karvinen, Tero 2012a. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Karvinen, Tero 2012b. PuppetMaster on Ubuntu 12.04.
http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04

Liimatta, Eino 2012. Läksy w48: Oman Puppet modulin toteuttaminen.
http://eliimatt.wordpress.com/2012/12/05/laksy-w48-oman-puppet-modulin-toteuttaminen/

Liimatta, Eino 2012. Läksy w45: Muotit, parametrisoidut luokat ja määritellyt tyypit.
http://eliimatt.wordpress.com/2012/11/15/laksy-w45-muotit-parametrisoidut-luokat-ja-maaritellyt-tyypit

Ortega, Felipe 2012. [Puppet Users] rand losing its randomness after using fqdn_rand.
https://groups.google.com/forum/#!msg/puppet-users/kc_KJwLwHvo/FjokplF1IuoJ

Pereira, Jude 2012. Use Ruby to Generate your Shadow Password.
http://judepereira.com/blog/use-ruby-to-generate-your-shadow-password/

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w48: Oman Puppet modulin toteuttaminen

5.12.2012

Harjoitustehtävän aiheena oli oman Puppet modulin toteuttaminen. Moduli toteutettiin edellisen harjoitustehtävän suunnitelman mukaisesti. Toteutettua Puppet modulia voidaan käyttää Linux käyttöjärjestelmän käyttäjienhallinnan perustehtäviin suorittamiseen orjakoneilla. Modulia voidaan myös helposti laajentaa erilaisten käyttötarpeiden mukaisesti.

Harjoitusympäristö

Harjoitusta suoritettiin 4.12. – 5.12.2012 opiskelijan kotona käyttäen 1 henkilökohtaista tietokonetta ja 1 Haaga-Helian TIKO-kannettavaa. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta ja sen kiintolevylle asennettua Xubuntu 12.04  32-bittistä Linux käyttöjärjestelmää. Haaga-Helian TIKO-kannettavan käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen. Tietokoneet olivat kytkettyinä VDSL modeemin reitittimeen ja ne olivat samassa lähiverkossa 192.168.100.0/24.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Haaga-Helian TIKO-kannettava HP EliteBook 2560p kokoonpano:

  • Suoritin:Intel Core i5-2450M @2.50GHz
  • Keskusmuisti: 8 Gt DDR3
  • Kiintolevy: 500 Gt SATA300 7200rpm
  • Käyttöjärjestelmä: Windows 7 Professional 64-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.

Oman Puppet modulin toteutus

Toteutin oman Puppet modulin, jolla voidaan suorittaa Linux käyttöjärjestelmän käyttäjähallinnan perustehtäviä Puppet Agent koneilla. Modulin ominaisuuksiin kuuluvat uusien käyttäjien luominen, käyttäjäprofiilin tiedostojen ja hakemiston hallinta,  käyttäjien salasanojen ylläpitäminen sekä käyttäjäprofiileihin kopioitavien oletustiedostojen syöttämisen /etc/skel hakemistoon. Puppet modulini perustuu  määriteltyjen tyyppien hyödyntämiseen käyttäjähallinnan tehtävien suorittamiseksi. Modulissa ei ole init.pp lähtökohtaa ja kaikki modulin osat toimivat itsenäisesti.

Puppet modulini nimi on usermgt.  Modulin rakenne /etc/puppet/modules hakemistossa Puppet Master koneella on seuraavanlainen:


xubuntu@xubuntu:/etc/puppet/modules/usermgt$ tree
.
├── files  
|   ├── bash_aliases
|   └── profile
├── lib
│   └── puppet
│       └── parser
│           └── functions
│               └── hashpw.rb
└── manifests
    ├── change_password.pp
    ├── create_user.pp
    ├── remove_user.pp
    └── setup_etcskel.pp

6 directories, 7 files

Kuvaus modulin tiedostoista:

Tiedostonimi Lyhyt kuvaus tiedostosta ja sen käyttötarkoituksesta
bash_aliases Bash komentotulkin aliases määritykset, jotka kopioidaan orjakoneen tiedostoon /etc/skel/.bash_aliases
profile profile tiedosto, joka kopioidaan orjakoneen käyttäjän kotihakemistoon tiedostoon .profile
hashpw.rb Omatekoinen Ruby funktio hashpw, joka generoi selväkielisestä salasanasta SHA-512 tiivisteen, joka on sopii Linux käyttöjärjestelmän salasanatiivisteeksi
create_user.pp Määritelty tyyppi usermgt::create_user, jolla luodaan käyttäjä orjakoneelle uusi käyttäjä
setup_etcskel.pp Luokka usermgt::setup_etcskel, jolla kopioidaan käyttäjän oletusasetustiedostot orjakoneen /etc/skel hakemistoon
change_password.pp Määritelty tyyppi usermgt::change_password, jolla vaihdetaan orjakoneen käyttäjän salasana. Uusi salasana voidaan antaa joko selväkielisenä tai SHA-512 tiivisteenä
remove_user.pp Määritelty tyyppi usermgt::remove_user, jolla poistetaan orjakoneen käyttäjä. Samalla voidaan poistaa myös käyttäjän kotihakemisto.

Tiedoston files/bash_aliases sisältö, joka on lainattu Advanced Bash-Scripting Guide dokumentin osasta Appendix M Sample .bashrc and .bash_profile Files:


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

alias h='history'
alias j='jobs -l'
alias which='type -a'
alias ..='cd ..'

Tiedoston files/profile sisältö, johon on lisätty umask 077 eli käyttäjän luomat tiedostoihin annetaan oikeudet vain käyttäjälle itselleen:


# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.

umask 077

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Tiedoston lib/puppet/parser/functions/hashpw.rb sisältö. Salasanatiivisteen generointi koodi on lainattu Jude Pereiran ja Felipe Ortegan  julkaisemista esimerkkikoodeista:

module Puppet::Parser::Functions
  newfunction(:hashpw, :type => :rvalue) do |args|
    passwd = args[0]
    hashtype = '$6$'
    salt = rand(36**8).to_s(36)
    hash = passwd.crypt(hashtype + salt)
  end 
end

Tiedoston manifests/create_user.pp sisältö:


define usermgt::create_user($username = $title,$shell = '/bin/bash',$passwordtype = 'cleartext',$password, $secure_homedir=false) {

    if $passwordtype == 'cleartext' {
        $shadowpw = hashpw($password)
    }
    elsif $passwordtype == 'hash' {
        $shadowpw = $password
    }

    user { $username:
      ensure     => present,
      gid        => $username,
      shell      => $shell,
      password   => $shadowpw,
      home       => "/home/${username}",
      managehome => true,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

    if $secure_homedir == true {

          file { "/home/${username}":
               ensure  => directory,
                owner   => $home_owner,
                group   => $home_group,
                mode    => 700, 
                recurse => true,
                replace => true,
                force   => true,
                require   => User["${username}"],
          }

         file { "/home/${username}/.profile":
               mode => 700,
               owner   => $username,
               group   => $username,      
               source  => "puppet:///modules/usermgt/profile",
               require => File["/home/${username}"],
         }

    }
}

Tiedoston manifests/setup_etcskel.pp sisältö:

class usermgt::setup_etcskel {

    file { "/etc/skel/.bash_aliases":
        mode => 0700,
        owner   => root,
        group   => root,
        source => ["puppet:///modules/usermgt/bash_aliases"],
    }
}

Tiedoston manifests/change_password.pp sisältö:

define usermgt::set_password($username = $title,$passwordtype = 'cleartext',$password) {

    if $passwordtype == 'cleartext' {
        $shadowpw = hashpw($password)
    }
    elsif $passwordtype == 'hash' {
        $shadowpw = $password
    }

    user { $username:
      ensure     => present,
      password   => $shadowpw,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

}

Tiedoston manifests/remove_user.pp sisältö:

define usermgt::remove_user($username = $title, $remove_home_dir=false) {

    if $remove_home_dir == true {

        file { "/home/${username}":
                ensure  => absent,
                recurse => true,
                force   => true,
        }
    }

    user { $username:
      ensure     => absent,
    }

    group { "$username":
        ensure    => absent,
    }

}

Modulin toiminnan kuvaus

Määritelty tyyppi usermgt::create_user lisää uuden käyttäjän orjakoneelle. Samalla luodaan käyttäjänimeä vastaava ryhmä. Käyttäjän salasana generoidaan selväkielisestä merkkijonosta tai käytetään valmista SHA-512 tiivistettä parametrin password_type mukaisesti. Käyttäjän kotihakemiston ja sen tiedostojen oikeudet voidaan rajoittaa vain käyttäjälle itselleen parametrilla secure_homedir.
Parametrit: name = käyttäjänimi, shell = komentotulkin polku, password_type = cleartext | hash, password = selväkielinen salasana tai SHA-512 tiiviste, secure_homedir= true | false

Omatekoinen funktio hashpw generoi selväkielisestä merkkijonosta salasanojen tallentamiseen Linuxissa yleiseti käytetyn SHA-512 tiivisteen. Parametrit: selväkielinen merkkijono. Palautusarvo: SHA-512 tiiviste merkkijonona

Luokka usermgt::setup_etcskel siirtää Puppet modulin tiedostoresursseista käyttäprofiilin oletustiedostoja orjakoneen /etc/skel hakemistoon. Moduli siirtää tällä hetkellä vain tiedoston .bash_aliases orjakoneelle, mutta siihen voidaan helposti lisätä uusia tiedostoja. Luokalla ei ole parametreja.

Määritelty tyyppi usermgt::change_password vaihtaa käyttäjän salasana orjakoneelle. Käyttäjän uusi salasana generoidaan selväkielisestä merkkijonosta tai käytetään valmista SHA-512 tiivistettä parametrin password_type mukaisesti.
Parametrit: name = käyttäjänimi, password_type = cleartext | hash, password = selväkielinen salasana tai SHA-512 tiiviste

Määritelty tyyppi usermgt::remove_user poistaa käyttäjän orjakoneelle. Samalla poistetaan käyttäjänimeä vastaava ryhmä. Käyttäjän kotihakemiston ja sen tiedostot voidaan samalla poistaa asettamalla parametri remove_homedir.
Parametrit: name = käyttäjänimi, remove_homedir= true | false

Puppet Master/Agent testiympäristön pystyttäminen

Testasin oma moduliani Puppet Master/Agent testiympäristössä, jossa Haaga-Helian TIKO-kannettava oli Puppet Master koneena ja Lenovo R 60 kannettava tietokone oli orjakoneena. Käytin koneiden .local nimiä Avahi palvelun kautta. Puppet Master koneen nimi oli xubuntu.local (IP-osoite 192.168.100.101) ja orjakoneen eino-ThinkPad-R60.local (IP-osoite 192.168.100.100).

Asensin Puppet Master palvelun xubuntu.local koneelle komennolla:

$ sudo apt-get install puppetmaster

Poistin vanhan SSL-sertfikaatin Puppet Master koneelle komennoilla:

$ sudo service puppetmaster stop
$ sudo rm -r /var/lib/puppet/ssl

Muokkasin Puppet Masterin asetuksiin xubuntu.local koneen nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [master] lohkon sisään rivin:

dns_alt_names = puppet, xubuntu.local, puppet.xubuntu.local

Käynnistin Puppet Master palvelun uudelleen komennolla:

$ sudo service puppetmaster start

Tarkistin uuden SSL-sertifikaatin komennoilla:

xubuntu$ sudo ls /var/lib/puppet/ssl/certs/
ca.pem	xubuntu.pem
xubuntugt$ sudo openssl x509 -in /var/lib/puppet/ssl/certs/xubuntu.pem  -text | grep -i dns
DNS:puppet, DNS:puppet.xubuntu.local, DNS:xubuntu, DNS:xubuntu.local

Asensin Puppetin orjakoneelle komennolla:

$ sudo apt-get install puppetmaster

Muokkasin Puppetin asetuksiin Puppet Master koneen xubuntu.local nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [agent] lohkon sisään rivin:

server = xubuntu.local

Muokkasin Puppetin oletusasetuksia tiedostossa /etc/default/puppet.conf:

$ sudo nano /etc/default/puppet.conf

Muutin seuraavan rivin:

START=yes

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:

$ sudo service puppet restart

Allekirjoitin orjakoneen sertifikaatin Puppet Master koneella komennoilla:

xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --list
  "eino-thinkpad-r60" (51:92:00:89:8B:2D:B7:1C:27:97:0F:43:F6:99:66:CB)
xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --sign eino-thinkpad-r60
notice: Signed certificate request for eino-thinkpad-r60
notice: Removing file Puppet::SSL::CertificateRequest eino-thinkpad-r60 at '/var/lib/puppet/ssl/ca/requests/eino-thinkpad-r60.pem'

Oman modulin testaaminen orjakoneella käyttäen nodes.pp konfiguraatiota

Loin Puppet Master koneelle tiedostot /etc/puppet/manifests/site.pp ja /etc/puppet/manifests/nodes.pp, joilla orjakoneella ajettavat asetukset määritellään.

Tiedoston /etc/puppet/manifests/site.pp sisältö:

import "nodes"

Tiedoston /etc/puppet/manifests/nodes.pp sisältö:

node default {

}

node manageusers {

        require usermgt::setup_etcskel
}

node 'eino-thinkpad-r60' inherits manageusers {

       usermgt::create_user{"testuser1":
            password => 'x0WaR2Id5Ows',
            secure_homedir => true,
       }

}

Tiedostossa nodes.pp luotiin orjakoneella eino-thinkpad-r60.local uusi käyttäjä testuser1, jolle määriteltiin salasana sekä kotihakemiston tiedosto-oikeudet rajoitettiin vain käyttäjälle itselleen. Lisäksi orjakoneen /etc/skel hakemistoon siirrettiin tiedosto .bash_aliases, joka kopioituu automaattisesti kaikille orjakoneella luotaville käyttäjille.

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:


$ sudo service puppet restart
* Restarting puppet agent                                               [ OK ] 

Tutkin orjakoneen /home kansion sisältöä komennolla:


$ ls -l /home/ | grep testuser
drwx------  2 testuser1 testuser1 4096 joulu  5 23:47 testuser1

Puppet moduli oli onnistuneesti luonut käyttäjän testuser1 ja kotihakemiston. Tutkin käyttäjän testuser1 kotihakemiston sisältöä komennolla:


$ sudo ls -lA /home/testuser1
total 24
-rwx------ 1 testuser1 testuser1  195 joulu  4 22:21 .bash_aliases
-rwx------ 1 testuser1 testuser1  220 huhti  3  2012 .bash_logout
-rwx------ 1 testuser1 testuser1 3486 huhti  3  2012 .bashrc
-rwx------ 1 testuser1 testuser1  674 joulu  5 23:47 .profile
-rwx------ 1 testuser1 testuser1 1601 helmi  4  2012 .Xdefaults
-rwx------ 1 testuser1 testuser1   14 marra 19  2011 .xscreensaver

Käyttäjän testuser1 tiedostojen oikeudet oli määritelty Puppet modulin mukaan, niin että vain käyttäjälle oli täydet oikeudet tiedostoihin. Tutkin tiedoston /home/testuser1/.bash_aliases sisältöä komennolla:


$ sudo cat /home/testuser1/.bash_aliases
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

alias h='history'
alias j='jobs -l'
alias which='type -a'
alias ..='cd ..'

Tiedoston .bash_aliases sisältö oli Puppet modulin määritysten mukainen. Testasin myös SSH kirjautumista käyttäjänä testuser1 komennolla:


$ ssh testuser1@localhost
testuser1@localhost's password: 
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-31-generic i686)

 * Documentation:  https://help.ubuntu.com/

155 packages can be updated.
74 updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

testuser1@eino-ThinkPad-R60:~$ 

Käyttäjänä testuser1 kirjautuminen onnistui Puppetilla määritellyllä salasanalla. Totesin Puppet modulin toimivan kuten oli suunniteltu.

Lähteet

Cooper, M. 2012. Advanced Bash-Scripting Guide. Appendix M. Sample .bashrc and .bash_profile Files.
http://tldp.org/LDP/abs/html/sample-bashrc.html

Finninday.net 2011. Zero to puppet in one day. Puppet master configs.
http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day#Puppet_master_configs

Karvinen, Tero 2012a. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Karvinen, Tero 2012b. PuppetMaster on Ubuntu 12.04.
http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04

Liimatta, Eino 2012. Läksy w45: Muotit, parametrisoidut luokat ja määritellyt tyypit.
http://eliimatt.wordpress.com/2012/11/15/laksy-w45-muotit-parametrisoidut-luokat-ja-maaritellyt-tyypit

Ortega, Felipe 2012. [Puppet Users] rand losing its randomness after using fqdn_rand.
https://groups.google.com/forum/#!msg/puppet-users/kc_KJwLwHvo/FjokplF1IuoJ

Pereira, Jude 2012. Use Ruby to Generate your Shadow Password.
http://judepereira.com/blog/use-ruby-to-generate-your-shadow-password/

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w47: Oman Puppet modulin suunnitteleminen ja nodes.pp:n kokeileminen

29.11.2012

Harjoitustehtävän aiheena oli oman Puppet modulin suunniteleminen ja nodes.pp:n kokeileminen Käytännön harjoituksena tehtiin testiversioita oman Puppet ominaisuuksist sekä kokeiltiin nodes.pp:tä kahden tietokoneen Puppet Master/Agent testiympäristössä.

Harjoitusympäristö

Harjoitusta suoritettiin 29.11.2012 opiskelijan kotona käyttäen 1 henkilökohtaista tietokonetta ja 1 Haaga-Helian TIKO-kannettavaa. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta ja sen kiintolevylle asennettua Xubuntu 12.04  32-bittistä Linux käyttöjärjestelmää. Haaga-Helian TIKO-kannettavan käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen. Tietokoneet olivat kytkettyinä VDSL modeemin reitittimeen ja ne olivat samassa lähiverkossa 192.168.100.0/24.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Haaga-Helian TIKO-kannettava HP EliteBook 2560p kokoonpano:

  • Suoritin:Intel Core i5-2450M @2.50GHz
  • Keskusmuisti: 8 Gt DDR3
  • Kiintolevy: 500 Gt SATA300 7200rpm
  • Käyttöjärjestelmä: Windows 7 Professional 64-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.

Oman Puppet modulin suunnittelu

Valitsin oman Puppet modulin aiheeksi käyttäjien hallinnan Puppet Agent koneilla. Modulin ominaisuuksiin suunnittelin käyttäjien luomisen, käyttäjäprofiilin tiedostojen ja hakemiston hallinnan, salasanojen ylläpitämisen sekä käyttäjien oletusasetusten syöttämisen /etc/skel hakemistoon. Olin tehnyt aikaisemmissa kotitehtävissä käyttäjien hallintaan liittyviä Puppet moduleja ja ajattelin hyödyntää niitä oman Puppet modulin suunnittelussa. Olin myös tutustunut valmiisiin käyttäjien hallintaan tarkoitettuihin Puppet moduleihin ja niistä erityisesti Daniel Sobralin dscobral/users moduli vaikutti parhaimmalta toteutukselta.

Annoin modulille työnimen usermgt. Suunniteltu modulin rakenne /etc/puppet/modules hakemistossa Puppet Master koneella:


xubuntu@xubuntu:/etc/puppet/modules/usermgt$ tree
.
├── files
│   └── bash_aliases
├── lib
│   └── puppet
│       └── parser
│           └── functions
│               └── hashpw.rb
└── manifests
    ├── account.pp
    ├── etcskel.pp
    └── init.pp

6 directories, 5 files

Kuvaus modulin tiedostoista:

Tiedostonimi Lyhyt kuvaus tiedostosta ja sen käyttötarkoituksesta
bash_aliases Bash komentotulkin aliases määritykset, jotka kopioidaan orjakoneen tiedostoon /etc/skel/.bash_aliases
hashpw.rb Omatekoinen Ruby funktio hashpw, joka generoi selväkielisestä salasanasta SHA-512 tiivisteen, joka on sopii Linux käyttöjärjestelmän salasanatiivisteeksi
account.pp Määritelty tyyppi usermgt::account, jolla luodaan käyttäjä orjakoneelle uusi käyttäjä
etcskel.pp Luokka usermgt::etcskel, jolla kopioidaan käyttäjän oletusasetustiedostot orjakoneen /etc/skel hakemistoon
init.pp Modulin tulokohta, sisältää vain tyhjän luokan usermgt

Tiedoston files/bash_aliases sisältö, joka on lainattu Advanced Bash-Scripting Guide dokumentin osasta Appendix M Sample .bashrc and .bash_profile Files:


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

alias h='history'
alias j='jobs -l'
alias which='type -a'
alias ..='cd ..'

Tiedoston lib/puppet/parser/functions/hashpw.rb sisältö:

module Puppet::Parser::Functions
  newfunction(:hashpw, :type => :rvalue) do |args|
    passwd = args[0]
    hashtype = '$6$'
    salt = rand(36**8).to_s(36)
    hash = passwd.crypt(hashtype + salt)
  end 
end

Tiedoston manifests/account.pp sisältö:


define usermgt::account($username = $title,$shell = '/bin/bash',$passwordtype='cleartext',$password) {

    if $passwordtype == 'cleartext' {
        $shadowpw = hashpw($password)
    }
    elsif $passwordtype ='hash' {
        $shadowpw = $password
    }

    user { $username:
      ensure     => present,
      gid        => $username,
      shell      => $shell,
      password   => $shadowpw,
      home       => "/home/${username}",
      managehome => true,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

}

Tiedoston manifests/etcskel.pp sisältö:


class usermgt::etcskel {

    file { "/etc/skel/.bash_aliases":
        mode => 0755,
        owner   => root,
        group   => root,
        source => ["puppet:///modules/usermgt/bash_aliases"],
    }
}

Tiedoston manifests/init.pp sisältö:


class usermgt  {

}

Puppet Master/Agent testiympäristön pystyttäminen

Testasin oma moduliani Puppet Master/Agent testiympäristössä, jossa Haaga-Helian TIKO-kannettava oli Puppet Master koneena ja Lenovo R 60 kannettava tietokone oli orjakoneena. Käytin koneiden .local nimiä Avahi palvelun kautta. Puppet Master koneen nimi oli xubuntu.local (IP-osoite 192.168.100.100) ja orjakoneen eino-ThinkPad-R60.local (IP-osoite 192.168.100.101).

Asensin Puppet Master palvelun xubuntu.local koneelle komennolla:

$ sudo apt-get install puppetmaster

Poistin vanhan SSL-sertfikaatin Puppet Master koneelle komennoilla:

$ sudo service puppetmaster stop
$ sudo rm -r /var/lib/puppet/ssl

Muokkasin Puppet Masterin asetuksiin xubuntu.local koneen nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [master] lohkon sisään rivin:

dns_alt_names = puppet, xubuntu.local, puppet.xubuntu.local

Käynnistin Puppet Master palvelun uudelleen komennolla:

$ sudo service puppetmaster start

Tarkistin uuden SSL-sertifikaatin komennoilla:

xubuntu$ sudo ls /var/lib/puppet/ssl/certs/
ca.pem	xubuntu.pem
xubuntugt$ sudo openssl x509 -in /var/lib/puppet/ssl/certs/xubuntu.pem  -text | grep -i dns
DNS:puppet, DNS:puppet.xubuntu.local, DNS:xubuntu, DNS:xubuntu.local

Asensin Puppetin orjakoneelle komennolla:

$ sudo apt-get install puppetmaster

Muokkasin Puppetin asetuksiin Puppet Master koneen xubuntu.local nimen:

$ sudo nano /etc/puppet/puppet.conf

Lisäsin [agent] lohkon sisään rivin:

server = xubuntu.local

Muokkasin Puppetin oletusasetuksia tiedostossa /etc/default/puppet.conf:

$ sudo nano /etc/default/puppet.conf

Muutin seuraavan rivin:

START=yes

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:

$ sudo service puppet restart

Allekirjoitin orjakoneen sertifikaatin Puppet Master koneella komennoilla:

xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --list
  "eino-thinkpad-r60" (51:92:00:89:8B:2D:B7:1C:27:97:0F:43:F6:99:66:CB)
xubuntu@xubuntu:/etc/puppet/modules/usermgt$ sudo puppet cert --sign eino-thinkpad-r60
notice: Signed certificate request for eino-thinkpad-r60
notice: Removing file Puppet::SSL::CertificateRequest eino-thinkpad-r60 at '/var/lib/puppet/ssl/ca/requests/eino-thinkpad-r60.pem'

Oman modulin työversion kokeileminen nodes.pp konfiguraatiolla

Loin Puppet Master koneelle tiedostot /etc/puppet/manifests/site.pp ja /etc/puppet/manifests/nodes.pp, joilla orjakoneella ajettavat asetukset määritellään.
Tiedoston site.pp sisältö:

import "nodes"

Tiedoston nodes.pp sisältö:

node default {

}

node manageusers {
	include usermgt
        include usermgt::etcskel
}

node 'eino-thinkpad-r60' inherits manageusers {

       usermgt::account{"testuser1":
            password => 'x0WaR2Id5Ows',
       }
}

Käynnistin Puppet palvelun uudelleen orjakoneella komennolla:


$ sudo service puppet restart

Uuden käyttäjän luominen orjakoneelle ei kuitenkaan onnistunut. Puppet moduli vaatii lisäkehitystyötä, jotta toiminta voitaisiin korjata.

Lähteet

Cooper, M. 2012. Advanced Bash-Scripting Guide. Appendix M. Sample .bashrc and .bash_profile Files.
http://tldp.org/LDP/abs/html/sample-bashrc.html

Finninday.net 2011. Zero to puppet in one day. Puppet master configs.
http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day#Puppet_master_configs

Karvinen, Tero 2012a. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Karvinen, Tero 2012b. PuppetMaster on Ubuntu 12.04.
http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04

Liimatta, Eino 2012. Läksy w45: Muotit, parametrisoidut luokat ja määritellyt tyypit.
http://eliimatt.wordpress.com/2012/11/15/laksy-w45-muotit-parametrisoidut-luokat-ja-maaritellyt-tyypit

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w46: Valmiin Puppet modulin käyttäminen ja Puppet Cookbook

22.11.2012

Harjoitustehtävän aiheena oli tutustua Puppet Forgesta tai GitHubista saataviin valmiisiin Puppet moduleihin sekä Puppet Cookbook ohjekokoelmaan. Käytännön harjoituksena analysoitiin valmista Puppet modulia sekä tehtiin lyhyitä Puppet ohjelmia edellä mainitun Puppet Cookbook dokumentaation teemoista.

Harjoitusympäristö

Harjoitusta suoritettiin 22.11.2012 opiskelijan kotona käyttäen henkilökohtaista tietokonetta. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta. Käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.about:config

Valmiin Puppet modulin käyttäminen

Aluksin tein hakemiston puppet ja sen alihakemiston modules:

xubuntu@xubuntu:~$ cd
xubuntu@xubuntu:~$ mkdir puppet
xubuntu@xubuntu:~$ cd puppet/
xubuntu@xubuntu:~/puppet$ mkdir modules
xubuntu@xubuntu:~/puppet$

Valitsin tutkittavaksi Puppet moduliksi GitHubista saatavan R.I. Pieenarin kehittämän puppet-concat modulin, jolla voidaan koota tekstimuotoisia konfiguraatiotiedostoja pienemmistä osatiedostoista. Osatiedostoja säilytetään modulin työhakemistossa ja ne voidaan numeroida kokoamisjärjestyksen mukaisesti. Osatiedostojen numerointikäytäntö vastaa /etc hakemiston asetustiedostoissa yleisesti käytettyä mallia. jossa tiedostonimen alkuun lisätty numero kuvaa tiedoston lukemisen prioriteettijärjestystä. Pienempi numero merkitsee suurempaa prioriteettia. Latasin modulin ZIP pakettina ja purin hakemistoon $HOME/puppet/modules. Modulin rakenne oli seuraavanlainen:

xubuntu@xubuntu:~/puppet/modules/concat$ tree
.
├── CHANGELOG
├── files
│   ├── concatfragments.sh
│   └── null
├── lib
│   └── facter
│       └── concat_basedir.rb
├── LICENSE
├── manifests
│   ├── fragment.pp
│   ├── init.pp
│   └── setup.pp
├── Modulefile
├── Rakefile
├── README.markdown
└── spec
    ├── defines
    │   └── init_spec.rb
    ├── fixtures
    │   └── manifests
    │       └── site.pp
    └── spec_helper.rb

9 directories, 13 files

Modulissa käytetyt tiedostot:

Tiedostonimi Lyhyt kuvaus tiedostosta ja sen käyttötarkoituksesta
concatfragments.sh Shell skripti, jota käytetään kokoamaan tekstimuotoinen konfiguraatiotiedosto alihakemistossa olevista lyhyistä numeroidusta osista. Skriptille voidaan antaa parametriksi erilaisia komentolippuja
concat_basedir.rb Kustomoitu Puppet fact, joka palauttaa modulin väliaikaistiedostojen hakemistopolun, joka on Puppetin työhakemisto vardir/concat
fragment.pp Puppet modulin määritelty tyyppi concat::fragment, joka kopioi määritellyn konfiguraatiotiedoston osatiedostot modulin työhakemistoon
init.pp Puppet modulin tulokohta, jossa kuvataan konfiguraatiotiedostojen kokoamiseen käytettävä määritelty tyyyppi concat.
setup.pp Puppet modulin apuluokka concat::setup, jossa asetetaan modulin tarvitsemia resursseja. Käyttää kustomoitua Fact funktiota concat_basedir työhakemiston määritykseen ja asentaa shell skriptin concatfragments.sh modulin työhakemistoon
Modulefile Puppet modulin DSL kuvaus
Rakefile Puppet modulin RSpec testien ohjaustiedosto
Licence Puppet modulin lisenssi, joka Apache Licence v2.0
Changelog Puppet modulin muutoshistoria
README.markdown Puppet modulin lyhyt esittely, joka on kirjoitettu markdown työkalun formaatissa
init_spec.rb Puppet modulin RSpec testitiedosto
site.pp Tyhjä site.pp RSpec testejä varten
site.pp Tyhjä site.pp RSpec testejä varten
spec_helper.rb spec_helper työkalu RSPec testejä varten

Testasin puppet-concat modulia tekemällä sitä käyttävän testconcat modulin, joka kokoaa kahdesta osasta tiedoston /tmp/testfile.txt. Modulin rakenne oli seuraava:

xubuntu@xubuntu:~/puppet/modules/testconcat$ tree
.
└── manifests
    └── init.pp

1 directory, 1 file

Tiedoston init.pp sisältö:

class testconcat {
  
  include concat::setup
  
  concat{"/tmp/testfile.txt":

  }

  concat::fragment{"file_fragment_1":
    target  => "/tmp/testfile.txt",
    order   => 10,
    content => "\nThis is the first fragment of this file\n",
  }
  concat::fragment{"file_fragment_2":
    target  => "/tmp/testfile.txt",
    order   => 12,
    content => "\nThis is the second fragment of this file\n",

  }

}

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testconcat'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Testconcat/Concat[/tmp/testfile.txt]/File[/tmp/testfile.txt]/ensure: defined content as '{md5}540b3047e9d90d715b20045e724653c3'
notice: Finished catalog run in 0.28 seconds

Tiedoston /tmp/testfile.txt sisältö:

xubuntu@xubuntu:~/puppet$ cat /tmp/testfile.txt 

This is the first fragment of this file

This is the second fragment of this file

Osatiedostot modulin työhakemistossa:

xubuntu@xubuntu:~/puppet$ sudo tree /var/lib/puppet/concat
/var/lib/puppet/concat
├── bin
│   └── concatfragments.sh
└── _tmp_testfile.txt
    ├── fragments
    │   ├── 10_file_fragment_1
    │   └── 12_file_fragment_2
    ├── fragments.concat
    └── fragments.concat.out

3 directories, 5 files

Modulille ei löytynyt kunnollista vertailukohdetta, koska suurimmaksi osaksi kaikki GitHubin vastaavat Puppet modulit olivat tämän modulin fork-versioita. Modulin tekninen toteutus on korkeatasoinen ja toteutuksessa on otettu monipuolisesti erilaisia käyttötapauksia huomioon. Modulin rakenne on modulaarinen ja toimiva.

Puppet Cookbook dokumentaation käyttäminen modulien kirjoittamisessa

Tein Puppet modulin, jossa käytettiin kahta Puppet Cookbook dokumentaation ohjetta Create a directory tree ja Only manage absent files. Moduli tekee oman hakemistopuun /tmp hakemistoon ja luo tiedoston, joka ei ole Puppetin ylläpidettävänä. Modulin rakenne on seuraava:

xubuntu@xubuntu:~/puppet/modules/testdir$ tree
.
└── manifests
    └── init.pp

1 directory, 1 file

Tiedoston init.pp sisältö:

class testdir {

   file { [ "/tmp/testdir", "/tmp/testdir/node1",
         "/tmp/testdir/node2", "/tmp/testdir/node2/docs" ]:

        ensure => "directory",
        mode   => 750,
        recurse => true,
        owner => 'xubuntu',
        group => 'xubuntu',

   }

   file { "/tmp/testdir/node2/unmaintained.txt":

        replace => "no",
        ensure  => "present",
        owner => 'xubuntu',
        group => 'xubuntu',
        content => "This file is not maintained by Puppet\n",
        require => File['/tmp/testdir/node2'],

    }
}

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testdir'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Testdir/File[/tmp/testdir]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node1]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2/docs]/ensure: created
notice: /Stage[main]/Testdir/File[/tmp/testdir/node2/unmaintained.txt]/ensure: created
notice: Finished catalog run in 0.09 seconds

Hakemisto puu /tmp/testdir:

xubuntu@xubuntu:~/puppet$ tree /tmp/testdir
/tmp/testdir
├── node1
└── node2
    ├── docs
    └── unmaintained.txt

3 directories, 1 file

Tiedoston /tmp/node2/unmaintained.txt muuttaminen:

xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
This file is not maintained by Puppet
xubuntu@xubuntu:~/puppet$ echo "Making local changes to file" > /tmp/testdir/node2/unmaintained.txt 
xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
Making local changes to file
xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include testdir'
warning: Could not retrieve fact fqdn
notice: Finished catalog run in 0.20 seconds
xubuntu@xubuntu:~/puppet$ cat /tmp/testdir/node2/unmaintained.txt 
Making local changes to file

Lähteet

Karvinen, Tero 2012. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Pienaar, R.I. 2012. ripienaar/puppet-concat. GitHub.
https://github.com/ripienaar/puppet-concat

Puppet Labs 2011. Docs: Publishing Modules on the Puppet Forge.
http://docs.puppetlabs.com/puppet/2.7/reference/modules_publishing.html

Sharpe, Tim 2012. rspec-puppet
http://rspec-puppet.com/

Soimasysadmin 2012. Simple facts with Puppet.
http://soimasysadmin.wordpress.com/2012/09/12/simple-facts-with-puppet/

Wilson, Dean 2011. Puppet Cookbook.
http://www.puppetcookbook.com/

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Linux keskitty hallinta kurssilla 9.11.2012 tehty template tiedostoa käyttävä Puppet moduli

16.11.2012

Moduli käyttää template tiedostoa, joka käytetään pohjana /tmp/templatetest.txt tiedostolle.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules$ tree
.
└── templatetest
    ├── manifests
    │   └── init.pp
    └── templates
        └── templatetest.txt.erb

Modulin init.pp tiedoston sisältö:

class templatetest {
   $banner= "---------------------"

  file { '/tmp/templatetest.txt':
    ensure => file,
    content => template('templatetest/templatetest.txt.erb'), 
  }
}

Tiedoston templatetest.txt.erb sisältö:

Testing Puppet templates
<%=banner %>
System uptime is <%= @uptime%>
<%=DateTime.now.strftime('%D %R') %>

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include templatetest'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include templatetest'
notice: /Stage[main]/Templatetest/File[/tmp/templatetest.txt]/ensure: defined content as '{md5}86f01e6e2ab88b5e6fb152eb0816bc3f'
notice: Finished catalog run in 0.02 seconds

Tiedoston /tmp/template.txt sisältö:

Testing Puppet templates
---------------------
System uptime is 1:19 hours
11/16/12 09:31
About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w45: Muotit, parametrisoidut luokat ja määritellyt tyypit

15.11.2012

Harjoitustehtävän aiheena oli tutustua Puppet palvelinautomaatio järjestelmän Learning Pupppet dokumentaation lukuihin Templates, Parameterized Classes (Modules, Part Two) ja Defined Types sekä awaseroot blogiin. Käytännön harjoituksena tehtiin lyhyitä Puppet ohjelmia edellä mainitun dokumentaation teemoista.

Harjoitusympäristö

Harjoitusta suoritettiin 15.11. opiskelijan kotona käyttäen henkilökohtaista tietokonetta. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta. Käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.

Muottien (templates) käyttäminen Puppet modulissa

Aluksin tein hakemiston puppet ja sen alihakemiston modules:

xubuntu@xubuntu:~$ cd
xubuntu@xubuntu:~$ mkdir puppet
xubuntu@xubuntu:~$ cd puppet/
xubuntu@xubuntu:~/puppet$ mkdir modules
xubuntu@xubuntu:~/puppet$

Kokeillakseni templates ominaisuuden käyttöä Puppetissa tein modulin, joka kirjoittaa tekstitiedostoon tietoja järjestelmästä käyttäen template pohjaa ja Facterin tietoja. Tein modules hakemistoon alihakemiston sysinfo Puppet modulia varten.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules/sysinfo$ tree
.
├── manifests
│   └── init.pp
└── templates
    └── sysinfo.txt.erb

2 directories, 2 files

Modulin init.pp tiedoston sisältö:

class sysinfo {
  $banner= "\nSystem information\n---------------------\n"

  file { '/tmp/sysinfo.txt':
    ensure => file,
    content => template('sysinfo/sysinfo.txt.erb'), 
  }
}

Tiedoston sysinfo.txt.erb sisältö:

<%=banner %>
Current time is <%=DateTime.now.strftime('%D %R') %>
System uptime is <%= @uptime%>

System architecture: <%= @architecture%>
Computer manufacurer: <%= @manufacturer%>
Computer model: <%= @productname%>
Computer serialnumber: <%= @serialnumber%>

Total memory: <%= @memorytotal%>

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sysinfo'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sysinfo'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Sysinfo/File[/tmp/sysinfo.txt]/ensure: defined content as '{md5}97d638409b07e5c232298ec3b025efac'
notice: Finished catalog run in 0.06 seconds

Modulin tekemän raporttitiedoston /tmp/sysinfo.txt sisältö:

xubuntu@xubuntu:~/puppet$ cat /tmp/sysinfo.txt 

System information
---------------------

Current time is 11/15/12 18:52
System uptime is 1:39 hours

System architecture: i386
Computer manufacurer: LENOVO
Computer model: 9461DXG
Computer serialnumber: L3BC786

Total memory: 2.95 GB

Parametrisoitujen luokkien käyttäminen Puppet modulissa

Kokeillakseni parametrisoitujen luokkien käyttöä Puppetissa, tein SSH palvelimen asentavan modulin, jolle voidaan antaa parametriksi SSH porttinumero sekä SSH paketin sekä palvelun tila. Oletusarvoisesti SSH portti on 22, SSH paketti on asennettuna ja SSH taustaprosessi on käynnissä.Tein modules hakemistoon alihakemiston sshport Puppet modulia varten.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules/sshport$ tree
.
└── manifests
    └── init.pp

1 directory, 1 file

Modulin init.pp tiedoston sisältö:

class sshport ($port='22', $enable = true, $ensure = running) {

  package { 'openssh-server':
    ensure => present,
     allowcdrom => true,
  }

  file { '/etc/ssh/sshd_config':
    ensure => file,
    require => Package['openssh-server'],
  }

  augeas{"set_port":
    context => "/files/etc/ssh/sshd_config",
    changes => "set Port $port",
    require => File['etc/ssh/sshd_config'],
   }

  service { 'ssh':
    ensure    => $running,
    enable    => $enable,
    hasstatus => true,
    subscribe => [Package['openssh-server'], File['/etc/ssh/sshd_config']],
    require   => File['/etc/ssh/sshd_config'],
  }
}

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sshport'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sshport'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Sshport/Package[openssh-server]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Sshport/Service[ssh]/enable: enable changed 'false' to 'true'
notice: /Stage[main]/Sshport/Service[ssh]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 21.38 seconds

Oletuksena avattu ssh portti netstat listauksessa:

xubuntu@xubuntu:~/puppet/modules/sshport$ netstat -l -t -n
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:34264         0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN 

SSH yhteyden kokeileminen:

xubuntu@xubuntu:~/puppet/modules/sshport$ ssh xubuntu@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is dc:25:50:0c:e1:01:0e:01:d6:2d:e2:d6:68:fc:c9:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
xubuntu@localhost's password: 
Permission denied, please try again.
xubuntu@localhost's password:

Määriteltyjen tyyppien käyttäminen Puppet modulissa

Kokeillakseni määriteltyjen tyypppien käyttöä Puppetissa, tein uuden version aikaisemman harjoitustehtävän uusien  käyttäjätunnuksen luomiseen tarkoitetusta Puppet modulista. Uusi versio käyttää määriteltyä tyypppiä human::account, jolla voidaan luoda uusi käyttäjätunnus ja parametriksi voidaan antaa haluttu komentotulkki ja selväkielinen salasana. Salasanasta luodaan omatekoisella funktiolla hashpw Linuxin /etc/shadow tiedoston formaattiin sopiva SHA-512 tiiviste. Tein modules hakemistoon alihakemiston human Puppet modulia varten.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules/human$ tree
.
├── lib
│   └── puppet
│       └── parser
│           └── functions
│               └── hashpw.rb
└── manifests
    ├── account.pp
    └── init.pp

5 directories, 3 files

Modulin hashpw.rb tiedoston sisältö:

module Puppet::Parser::Functions
  newfunction(:hashpw, :type => :rvalue) do |args|
    passwd = args[0]
    hashtype = '$6$'
    salt = rand(36**8).to_s(36)
    hash = passwd.crypt(hashtype + salt)
  end 
end

Modulin init.pp tiedoston sisältö:

class human  {

  human::account { 'humanuser1':
     shell => '/bin/zsh',
  } 

}

Modulin account.pp tiedoston sisältö:

define human::account($shell = '/bin/bash',$password='pA$$w0rd') {
    $username = $title
    $shadowpw = hashpw($password)
    user { $username:
      ensure     => present,
      gid        => $username,
      shell      => $shell,
      password   => $shadowpw,
      home       => "/home/${username}",
      managehome => true,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

    file { "/home/${username}":
      ensure  => directory,
      owner   => $username,
      group   => $username,
      recurse => true,
      replace => true,
      force   => true,
      require   => User["${username}"],
    }

    file { "/home/${username}/.bash_history":
        mode => 600,
        owner   => $username,
        group   => $username,
        require => File["/home/${username}"],
    }

    file { "/home/${username}/.ssh":
        ensure  => directory,
        owner   => $username,
        group   => $username,
        mode    => 700,
        require => File["/home/${username}"],
    }

}

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include human'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include human'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Human/Human::Account[humanuser1]/Group[humanuser1]/ensure: created
notice: /Stage[main]/Human/Human::Account[humanuser1]/User[humanuser1]/ensure: created
notice: /Stage[main]/Human/Human::Account[humanuser1]/File[/home/humanuser1/.ssh]/ensure: created
notice: Finished catalog run in 0.29 seconds

Testikäyttäjän “humanuser1″ salasanatiiviste /etc/shadow tiedostossa:

humanuser1:$6$vicoxo86$iLh8A21dSjSRZanv9qRo.jlNp5bSK9KiMmERkMtQLoSE/fiHghD04BxevD.46pqvGRCTYdu8EDk5xVAb/ue1n0:15659:0:99999:7:::

Testikäyttäjän “humanuser1″ tiedot /etc/passwd tiedostossa:

humanuser1:x:1000:1000::/home/humanuser1:/bin/zsh

SSH yhteyden kokeileminen:

xubuntu@xubuntu:~/puppet$ ssh humanuser1@localhost
humanuser1@localhost's password: 
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic i686)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

humanuser1@xubuntu ~ % 

Mount resurssin käyttäminen Puppet modulissa

Kokeillakseni awaseroot blogissa esiteltyä Puppetin mount resurssia, tein määriteltyä tyyppiä mount resurssin yhteydessä käyttävän Puppet modulin. Tein modules hakemistoon alihakemiston mountdev Puppet modulia varten.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules/mountdev$ tree
.
└── manifests
    ├── init.pp
    └── mounter.pp

1 directory, 2 files

Modulin init.pp tiedoston sisältö:

class mountdev  {

  mountdev::mounter { '/dev/sr0':
     mountpoint => '/cdrom'',
     fstype => 'iso9660',
     ensure => 'unmounted',
  } 

}

Modulin mounter.pp tiedoston sisältö:

define mountdev::mounter($mountpoint,$ensure,$fstype,$options="defaults") {
    mount { $mountpoint :
        device  => $title,
        fstype  => $fstype,
    ensure  => $ensure,
    options => $options,
    }
}

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include mountdev'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include mountdev'
warning: Could not retrieve fact fqdn
err: /Stage[main]/Mountdev/Mountdev::Mounter[/dev/sr0]/Mount[/cdrom]/ensure: change from ghost to unmounted failed: Execution of '/bin/umount /cdrom' returned 1: umount: /cdrom: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

notice: Finished catalog run in 0.29 seconds

Xubuntun live-cd:n unmounttaaminen ei onnistunut, koska live-cd on käytössä.

Lähteet

Karvinen, Tero 2012. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Ortega, Felipe 2012. [Puppet Users] rand losing its randomness after using fqdn_rand.
https://groups.google.com/forum/#!msg/puppet-users/kc_KJwLwHvo/FjokplF1IuoJ

Pereira, Jude 2012. Use Ruby to Generate your Shadow Password.
http://judepereira.com/blog/use-ruby-to-generate-your-shadow-password/

Puppet Labs 2012. Docs: Type Reference.
http://docs.puppetlabs.com/references/latest/type.html

Puppet Labs 2011. Docs: Learning — Defined Types.
http://docs.puppetlabs.com/learning/definedtypes.html

Puppet Labs 2011. Docs: Learning — Parameterized Classes (Modules, Part Two).
http://docs.puppetlabs.com/learning/modules2.html

Puppet Labs 2011. Docs: Learning — Templates.
http://docs.puppetlabs.com/learning/templates.html

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

Movsesjans, Armens 2012. Puppet module for /etc/fstab mounts.
https://awaseroot.wordpress.com/2012/11/03/puppet-module-for-etcfstab-mounts/

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Linux keskitetty hallinta kurssilla 9.11.2012 tehty SSH palvelimen asentava Puppet moduli

9.11.2012

Puppet moduli, joka asentaa SSH palvelimen. Moduli asettaa myös SSH palvelimen asetustiedoston, jossa SSH palvelun porttinumero on vaihdettu 2222:n.

Modulin perusversio

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules$ tree
.
└── sshport
    ├── files
    │   └── sshd_config
    └── manifests
        └── init.pp

3 directories, 2 files

Modulin init.pp tiedoston sisältö:

class sshport {

   package { 'openssh-server':
     ensure => present,
     allowcdrom => true,
   }

   file { '/etc/ssh/sshd_config':
     ensure => file,
     source =>"puppet:///modules/sshport/sshd_config",
     require => Package['openssh-server'],
   }

   service { 'ssh':
     ensure => running,
     enable => true,
     hasstatus => true,
     subscribe => [Package['openssh-server'], File['/etc/ssh/sshd_config']],
     require => File['/etc/ssh/sshd_config'],
   }
}

Modulin suorittaminen:
xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sshport'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet/modules/sshport$ ssh -p 2222 xubuntu@localhost xubuntu@localhost's password: 
Permission denied, please try again.

Modulin toteutus template tiedostoa käyttämällä

Vaihtoehtoinen toteutus modulista, jossa SSH palvelimen asetustiedosto luodaan käyttämällä template tiedostoa. Template tiedostossa porttimäärityksen sisältävä riville tehdään interpolaatio modulissa käytetystä muuttujasta. SSH portin numero määritetään modulissa muuttujalla $port.

Modulin rakenne:

xubuntu@xubuntu:~/puppet/modules$ tree
.
└── sshport
    ├── files
    │   └── sshd_config
    ├── manifests
    │   └── init.pp
    └── templates
        └── sshd_config.erb

Modulin init.pp tiedoston sisältö:

class sshport {

  $port='2562'

  package { 'openssh-server':
     ensure => present,
     allowcdrom => true,
  }

  file { '/etc/ssh/sshd_config':
    ensure => file,
    content => template('sshport/sshd_config.erb'),
    require => Package['openssh-server'],
  }

  service { 'ssh':
    ensure    => running,
    enable    => true,
    hasstatus => true,
    subscribe => [Package['openssh-server'], File['/etc/ssh/sshd_config']],
    require   => File['/etc/ssh/sshd_config'],
  }
}

Modulin sshd_config.erb tiedosto on samanlainen kuin normaali SSH palvelimen asetustiedosto. Poikkeuksena porttimäärityksen sisältä rivi, jossa on seuraavanlainen muuttuja interpolaatio:

Port <%= port %>

Modulin suorittaminen:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include sshport'

Modulin testaaminen:

xubuntu@xubuntu:~/puppet$ ssh -p 2562 xubuntu@localhost 
xubuntu@localhost's password: 
Permission denied, please try again.

Lähteet

Vogeraal, Bram 2012. Module attachmentgenie/ssh. Puppet Forge.
http://forge.puppetlabs.com/attachmentgenie/ssh

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w44: Resurssien järjestäminen ja Puppet modulien kirjoittaminen

8.11.2012

Harjoitustehtävän aiheena oli tutustua Puppet palvelinautomaatio järjestelmän Learning Pupppet dokumentaation lukuihin Ordering ja Modules and Classes (Part One). Käytännön harjoituksena tehtiin lyhyitä Puppet ohjelmia edellä mainitun dokumentaation teemoista.

Harjoitusympäristö

Harjoitusta suoritettiin 6.11, 7.11, ja 8.11.2012 opiskelijan kotona käyttäen henkilökohtaista tietokonetta. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta. Käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.

Resurssien järjestäminen Puppet manifestissa

Aluksin tein hakemiston puppet ja sen alihakemiston manifests:

xubuntu@xubuntu:~$ cd
xubuntu@xubuntu:~$ mkdir puppet
xubuntu@xubuntu:~$ cd puppet/
xubuntu@xubuntu:~/puppet$ mkdir manifests
xubuntu@xubuntu:~/puppet$

Puppet resurssien suoritusjärjestys voidaan määrittää manifestissa. Kokeillakseni resurssien suoritusjärjestyksen määrittämistä, kirjoitin resurssien metaparametreja käyttävän Puppet manifestin nano-editorilla:

$nano manifests/meld.pp

Sen sisällöksi tuli seuraava:

package { "meld":

        ensure => installed,
        allowcdrom => true,
        before => File["/tmp/meld.txt"],
}

file { "/tmp/meld.txt":

        ensure => file,
        content => "Package meld was installed when system current uptime was ${uptime}",
        require => Package["meld"],
}

notify {"alreadyinstalled":
   message => 'Package meld is already installed in system.',
   subscribe => Package["meld"],
}

Tämä esimerkki-manifesti asentaa meld tiedostovertailu ohjelman Xubuntun paketinhallinnan kautta. Lisäksi manifesti kirjoittaa /tmp/meld.txt tiedoston, kun ohjelman asennus suoritetaan ensimmäisen kerran ja tulostaa ilmoituksen Puppetin ajonaikaiseen lokiin aina kun manifesti suoritetaan. Näiden kolmen resurssin suoritusjärjestys määritetään metaparametreilla. Ohjelmapaketin asentava package resurssilla on before metaparametri, jonka mukaan package resurssi on suoritettava aina ennen /tmp/meld.txt tiedoston luomisesta vastaavaa file resurssia.

File resurssilla on puolestaan require metaparametri, jonka mukaan package resurssi on suoritettava aina ennen file resurssia. Resurssien package ja file metaparametrien määrityksillä estetään /tmp/meld.txt tiedoston luominen jokaisella manifestin suorituskerralla. File resurssin content määrityksessä on käytetty interpolaatiota, jossa Puppetin järjestelmämuuttuja (fact) $uptime upotetaan merkkijonon sisälle. Muuttuja $uptime palauttaa tietokoneen yhtäkestoisen käynnissäolo-ajan (uptime) päivien, tuntien ja minuuttien tarkkuudella.  Tarkoituksena on että tiedosto /tmp/meld.txt luodaan vain package resurssin ensimmäisellä suorituskerralla. Manifestissa on myös notify resurssi, jolla on subscribe metaparametri. Metaparametrilla määritetään, että notify resurssi suoritetaan aina kun package resurssi suoritetaan.

Testaamista varten ajoin manifestin komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply manifests/meld.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Package[meld]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]//File[/tmp/meld.txt]/ensure: defined content as '{md5}7c1752f363e811261c4bcf29361c17c2'
notice: Package meld is already installed in system.
notice: /Stage[main]//Notify[alreadyinstalled]/message: defined 'message' as 'Package meld is already installed in system.'
notice: Finished catalog run in 13.57 seconds

Puppet manifesti asensi meld ohjelmapaketin, kirjoitti /tmp/meld.txt tiedoston ja ilmoitti notify resurssin kautta että meld paketti on jo asennettu. Resurssi notify tulosti ilmoituksensa jo ensimmäisellä kerralla, vaikka ajatuksena oli että ilmoitus annettaisiin vasta kun manifestia ajetaan seuraavan. Puppet manifesti toimi itsessään oikein ja vika oli enemmän sovelluslogiikassa, jota kehittämällä manifestin toimintaa voitaisiin parantaa. Seuraavaksi tarkistin, että meld ohjelmapaketti on asennettu dpkg komennon avulla:

xubuntu@xubuntu:~/puppet$ dpkg -l meld
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-=====================
ii  meld           1.5.3-1ubuntu1 graphical tool to diff and merge files

Ohjelmapaketin meld status on asennettu, joten asennus siis onnistui. Seuraavaksi katsoin tiedoston /tmp/meld.txt sisältöä komennolla:

xubuntu@xubuntu:~/puppet$ cat /tmp/meld.txt
Package meld was installed when system current uptime was 1:11 hours

Tiedoston sisällössä kerrottiin, että meld paketti oli asennettu kun tietokone oli ollut käynnissä 1 tunnin ja 11 minuuttia. Tiedoston luominen oli onnistunut, samoin kuin järjestelmämuuttujan interpolaatio tiedoston sisältöön. Jatkoin testaamista suorittamalla manifestin uudestaan komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply manifests/meld.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//File[/tmp/meld.txt]/content: content changed '{md5}7c1752f363e811261c4bcf29361c17c2' to '{md5}e4b6995766ecac5c4126cbf0e0ebd3fc'
notice: Package meld is already installed in system.
notice: /Stage[main]//Notify[alreadyinstalled]/message: defined 'message' as 'Package meld is already installed in system.'
notice: Finished catalog run in 0.23 seconds

Nyt ohjelmapakettia ei ajettua enää uudestaan, mutta notify resurssilla annettiin ilmoitus ja tiedosto /tmp/meld.txt kirjoitettiin uudestaan. Tämä ei ollut toivottu tulos. Katsoin uudestaan tiedoston /tmp/meld.txt sisältöä komennolla:

xubuntu@xubuntu:~/puppet$ cat /tmp/meld.txt 
Package meld was installed when system current uptime was 1:33 hours

Järjestelmämuuttujan arvo oli päivittynyt tiedostoon sisältöön, joten file resurssin tekemä tiedoston uudelleenkirjoitus oli todettavissa. Kokeilin vielä kolmannen kerran suorittaa Puppet manifestin komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply manifests/meld.pp
Package meld was installed when system current uptime was 1:41 hours

Tiedoston sisältö oli taas päivittynyt. Tässä vaiheessa totesin ohjelman toimivan toisin kuin suunnitellut ja päätin pysäyttää manifestin kehittämisen, koska olin kuitenkin onnistunut kokeilemaan metaparametrien käyttöä. Arvioin manifestin jatkokehityksen tarvittavan työmäärän liian korkeaksi suhteutettuna käytössäni olevaan, kotitehtävien tekemiseen varattuun aikaan. Jatkoin Puppetin harjoittelua kotitehtäviin kuuluvilla toisilla aiheilla.

Puppet modulin kirjoittaminen

Aluksin tein hakemistoon puppet alihakemiston modules omia Puppet moduleja varten:

xubuntu@xubuntu:~/puppet$ mkdir modules

Päätin tehdä Apache palvelimen asentavan Puppet modulin. Tein modules hakemistoon alihakemiston apache ja sille alihakemiston manifests:

xubuntu@xubuntu:~/puppet$ cd modules/
xubuntu@xubuntu:~/puppet/modules$ mkdir apache
xubuntu@xubuntu:~/puppet/modules$ cd apache/
xubuntu@xubuntu:~/puppet/modules/apache$ mkdir manifests
xubuntu@xubuntu:~/puppet/modules/apache$

Kirjoitin modulin käynnistävän init.pp tiedoston nano-editoria käyttäen:

xubuntu@xubuntu:~/puppet/modules/apache$ nano manifests/init.pp

Puppet modulin sisällöstä tuli seuraava:

class apache {
      package { "apache2":
        ensure => installed,
        allowcdrom => true,
      }

      service { "apache2":
        enable => true,
        ensure => stopped,
        hasrestart => true,
        hasstatus => true,
        require => Package["apache2"]
      }

}

Puppet modulissa käytetään class määrittelyä, jolla useita resursseja voidaan kootaa yhtenäiseksi ryhmäksi. Puppetin class määrittely ei suoranaisesti tarkoita olio-ohjelmoinnin luokkaa, vaan se on enemmänkin toisiinsa liittyvien resurssien hallintaan käytetty “säiliö”. Tässä Puppet modulissa class määrittelyn sisällä on Apachen palvelimen asentava package resurssi ja Apache palvelimen taustaprosessin suorittamista ohjaava service resurssi. Metaparametrilla require service resurssin suorittaminen saadaan riippuvaiseksi package resurssin suorittamisesta. Resurssissa service Apachen taustaprosessin määritetään pysäytetyksi.

Testasin Puppet modulia komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include apache'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Apache/Package[apache2]/ensure: ensure changed 'purged' to 'present'
notice: /Stage[main]/Apache/Service[apache2]/ensure: ensure changed 'running' to 'stopped'
notice: Finished catalog run in 9.29 seconds

Puppet moduli asensi Apache palvelimen ja asettti sen taustaprosessin pysäytettyyn tilaan.  Seuraavaksi tarkistin, että Apache palvelin oli asennettu dpkg komennon avulla:

xubuntu@xubuntu:~/puppet$ dpkg -l apache2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version               Description
+++-=====================-=====================-===========
ii  apache2               2.2.22-1ubuntu1       Apache HTTP Server metapackage

Metapaketin apache2 status on asennettu, joten Apache palvelimen asennus siis onnistui.Testasin myös Apachen palvelimen toimintaa avaamalla Firefox selaimella osoitteen “localhost”:

Selain ilmoitti, että paikalliseen www-palvelimeen ei saada yhteyttä. Apache palvelin ei siis ollut käynnissä kuten Puppet modulissa oli määritelty. Jatkoin testaamista käynnistämällä Apache palvelimen komennolla:

xubuntu@xubuntu:~/puppet$ sudo service apache2 start

Kokeilin nyt uudestaan avata osoitteen “localhost” selaimella:


Nyt selaimeen avautui Apache palvelimen tyhjä juurihakemisto. Seuraavaksi suoritin uudestaan Puppet modulin komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include apache'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Apache/Service[apache2]/ensure: ensure changed 'running' to 'stopped'
notice: Finished catalog run in 2.72 seconds

Nyt Puppet moduli pysäytti manuaalisesti käynnistetyn Apache palvelimen taustaprosessin, koska Apache palvelimen taustaprosessin tavoitetila oli määritelty pysäytetyksi. Tarkistin vielä selaimella osoitteen “localhost”:

Apache palvelimeen ei saatu yhteyttä, koska se oli pysäytetty. Totesin Puppet modulin toimivan niin kuin oli suunniteltu.

Tiedosto-oikeuksien käsittely Puppet modulissa

Kokeillakseni tiedosto-oikeuksien hallintaa tein Puppet modulin, joka luo uuden käyttäjän ja sille kotihakemiston. Käyttäjälle määriteltiin salasana, joka annettiin SHA-512 tiivisteenä. Kotihakemistoon tiettyihin tiedostoihin  määritellään ennnalta haluttuja tiedosto-oikeuksia. Tein modules hakemistoon alihakemiston userfile ja sille alihakemiston manifests:

xubuntu@xubuntu:~/puppet$ cd modules/
xubuntu@xubuntu:~/puppet/modules$ mkdir userfile
xubuntu@xubuntu:~/puppet/modules$ cd userfile/
xubuntu@xubuntu:~/puppet/modules/userfile$ mkdir manifests
xubuntu@xubuntu:~/puppet/modules/userfile$

Kirjoitin modulin käynnistävän init.pp tiedoston nano-editoria käyttäen:

xubuntu@xubuntu:~/puppet/modules/userfile$ nano manifests/init.pp

Puppet modulin sisällöstä tuli seuraava:

class userfile {
    $userpw = '$6$mOMTmBdk$pCTLLq7mbII1Ggr5YTG.0EdLQcqEfxWeTogpgFXQsvkNKZQ6qS.MemOTXywzGQZi5HTbn07xwAR0/77mx2nYq1'
    $username = "filetestuser"

    user { $username:
      ensure     => present,
      gid        => $username,
      shell      => '/bin/bash',
      home       => "/home/${username}",
      managehome => true,
      password   => $userpw,
      require    => Group["$username"],
    }

    group { "$username":
        ensure    => present,
        allowdupe => false,
    }

    file { "/home/${username}":
      ensure  => directory,
      owner   => $username,
      group   => $username,
      recurse => true,
      replace => true,
      force   => true,
      require   => User["${username}"],
    }

    file { "/home/${username}/.bash_history":
        mode => 600,
        owner   => $username,
        group   => $username,
        require => File["/home/${username}"],
    }

    file { "/home/${username}/.ssh":
        ensure  => directory,
        owner   => $username,
        group   => $username,
        mode    => 700,
        require => File["/home/${username}"],
    }

}

Puppet modulissa luodaan käyttäjä nimeltä filetestuser, jolle määritellään myös salasana. Salasana annettiin SHA-512 tiivisteenä. Käyttäjälle luodaan kotihakemisto /home/filetestuser. Kotihakemistoon luodaan tiedosto .bash_history sekä hakemisto .ssh, joiden tiedosto-oikeudet määritellään. Tiedostolle .bash_history määritellään tiedoston omistajaksi filetestuser ja samoin ryhmäksi filetestuser. Mode määrittelyllä kuvataan tiedosto-oikeudet, jotka esitetään oktaalimuodossa 600. Käyttäjälle on luku- ja kirjoitusoikeudet tiedostoon (6), ryhmällä ei mitään oikeuksia (0), samoin kuin kaikilla muillakaan käyttäjillä (0).

Hakemistolle .ssh määritellään tiedoston omistajaksi filetestuser ja samoin ryhmäksi filetestuser. Mode määrittelyllä kuvataan hakemiston tiedosto-oikeudet, jotka esitetään oktaalimuodossa 700. Käyttäjälle on luku-, kirjoitus- ja suoritusoikeudet hakemistoon (7), ryhmällä ei mitään oikeuksia (0), samoin kuin ei muillakaan käyttäjillä (0).

Testasin Puppet modulia komennolla:

xubuntu@xubuntu:~/puppet$ sudo puppet apply --modulepath modules/ -e 'include userfile'
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Userfile/Group[filetestuser]/ensure: created
notice: /Stage[main]/Userfile/User[filetestuser]/ensure: created
notice: /Stage[main]/Userfile/File[/home/filetestuser/.ssh]/ensure: created
notice: Finished catalog run in 0.27 seconds

Puppet moduli loi ryhmän filetestuser ja käyttäjän filetestuser sekä teki käyttäjän kotihakemistoon .ssh hakemiston. Seuraavaksi tarkastin käyttäjän tiedot /etc/passwd tiedostosta komennolla:

xubuntu@xubuntu:~/puppet$ cat /etc/passwd | grep filetestuser
filetestuser:x:1000:1000::/home/filetestuser:/bin/bash

Käyttäjän tiedot löytyivät järjestelmän salasanatietokannasta, joten käyttäjä oli luotu kuten Puppet modulissa määriteltiin. Seuraavaksi katsoin ls komennolla käyttäjän kotihakemistoa:

xubuntu@xubuntu:~/puppet$ ls -lA /home/filetestuser/
total 20
-rw-r--r-- 1 filetestuser filetestuser  220 Apr  3  2012 .bash_logout
-rw-r--r-- 1 filetestuser filetestuser 3486 Apr  3  2012 .bashrc
-rw-r--r-- 1 filetestuser filetestuser  675 Apr  3  2012 .profile
drwx------ 2 filetestuser filetestuser   40 Nov  8 20:17 .ssh
-rw-r--r-- 1 filetestuser filetestuser 1601 Feb  4  2012 .Xdefaults
-rw-r--r-- 1 filetestuser filetestuser   14 Nov 19  2011 .xscreensaver

Hakemiston .ssh tiedosto-oikeudet olivat Puppet modulin määritysten mukaiset. Tiedostoa .bash_history ei näkynyt listauksessa, koska käyttäjä ei ollut koskaan kirjautunut komentokehotteeseen. Kokeilin myös kirjautua filetestuser käyttäjänä komennolla:

xubuntu@xubuntu:~/puppet$ su - filetestuser
Password: 
filetestuser@xubuntu:~$

Kirjautuminen onnistui Puppet modulissa määriteltyä salasanaa käyttäen. Totesin Puppet modulin toimivan kuten oli suunniteltu.

Lähteet

Honeycutt, Garrett 2010. Module ghoneycutt/apache. Puppet Forge.
http://forge.puppetlabs.com/ghoneycutt/apache

Karvinen, Tero 2012. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Puppet Labs 2012. Docs: Type Reference.
http://docs.puppetlabs.com/references/latest/type.html

Puppet Labs 2011. Learning — Modules and Classes (Part One)
http://docs.puppetlabs.com/learning/modules1.html

Puppet Labs 2011. Docs: Learning — Resource Ordering.
http://docs.puppetlabs.com/learning/ordering.html

Sobral, Daniel 2010. Module dcsobral/users. Puppet Forge.
http://forge.puppetlabs.com/dcsobral/users

Vogeraal, Bram 2012. Module attachmentgenie/ssh. Puppet Forge.
http://forge.puppetlabs.com/attachmentgenie/ssh

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen

Läksy w43: Puppet palvelinautomaatio järjestelmän perusteita

28.10.2012

Harjoitustehtävän aiheena oli tutustua Puppet palvelinautomaatio järjestelmän Learning Pupppet dokumentaation ensimmäisiin lukuihin Resources and the RAL ja Manifests. Käytännön harjoituksena asennettiin Puppet palvelinautomaatio järjestelmä Xubuntu versio 12. 04 käyttöjärjestelmään ja tehtiin lyhyitä Puppet ohjelmia (manifest) edellä mainitun dokumentaation teemoista.

Harjoitusympäristö

Harjoitus suoritettiin 28.10.2012 opiskelijan kotona käyttäen henkilökohtaista tietokonetta. Internet-yhteytenä oli Elisa Oyj:n tarjoama VDSL tyyppinen 100/10 mbit kiinteä laajakaistayhteys. Harjoituksessa käytettiin Lenovo R60 kannettavaa tietokonetta. Käyttöjärjestelmä ladattiin Xubuntu versio 12.04 32-bittinen Linux live-cd:ltä. Tietokoneen kiintolevylle asennettua käyttöjärjestelmää ei käytetty harjoitustehtävän suorittamiseen.

Lenovo R60 kokoonpano:

  • Suoritin: Intel Core 2 Duo T56000 @1.83 Ghz
  • Keskusmuisti: 4 Gt DDR2
  • Kiintolevy: 100 Gt SATA150 54000rpm
  • Käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Puppet palvelinautomaatio järjestelmän asentaminen

Aloitin harjoitustehtävän tekemisen päivittämällä Ubuntun pakettivarastot komennolla:

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Asensin Puppet järjestelmän komennolla:

$sudo apt-get install puppet

Testasin asennuksen ajamalla komennon puppet komentoriviltä:

$puppet

Komento antoi tulosteen:

See 'puppet help' for help on available puppet subcommands

Totesin puppet asennuksen onnistuneen.

Puppet resource työkalun kokeileminen

Kokeilin puppet resource työkalua komennolla, joka tulostaa käyttäjän xubuntu tiedot:

$puppet resource user xubuntu

Komento antoi tulosteen:

user { 'xubuntu':
  ensure  => 'present',
  comment => 'Live session user,,,',
  gid     => '999',
  groups  => ['adm', 'cdrom', 'sudo', 'dip', 'plugdev', 'lpadmin', 'sambashare'],
  home    => '/home/xubuntu',
  shell   => '/bin/bash',
  uid     => '999',
}

Seuraavaksi loin käyttäjän puppet_tester käyttämällä puppet resource komentoa:

$sudo puppet resource user puppet_tester ensure=present shell="/bin/bash" home="/home/puppet_tester" managehome=true

Komento antoi tulosteen:

notice: /User[puppet_tester]/ensure: created
user { 'puppet_tester':
  ensure => 'present',
  home   => '/home/puppet_tester',
  shell  => '/bin/bash',
}

Testasin uuden käyttäjän luomista tutkimalla /home hakemiston tiedostolistausta komennolla:

$ls -l /home

Komento antoi tulosteen:

total 0
drwxr-xr-x  2 puppet_tester puppet_tester 140 Oct 28 17:48 puppet_tester
drwxr-xr-x 23 xubuntu       xubuntu       700 Oct 28 17:47 xubuntu

Kokeilin kirjautumista puppet_tester käyttäjänä luomalla ensin salasanan passwd ja vaihtamalla käyttäjää su komennolla:

xubuntu@xubuntu:~$ sudo passwd puppet_tester
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
xubuntu@xubuntu:~$ su - puppet_tester
Password: 
puppet_tester@xubuntu:~$ 

Pääsin kirjautumaan puppet_tester käyttäjänä ja totesin puppet resource komennon onnistuneen. Seuraavaksi kokeilin pupper resource komennon –edit valitsinta, jolla resurssia pystyy muokkaamaan tekstieditorissa:

$sudo puppet resource user puppet_tester --edit

Komento avasi puppet_tester user resurssin vim editorissa muokattavaksi. Muutin ensure rivin muotoon, jolla käyttäjä poistetaan:

ensure           => 'absent',

Tallensin muutokset ja poistun vim editorista komennolla ‘:x’ ja seuraavaksi puppet poisti käyttäjän:

warning: Could not retrieve fact fqdn
info: Applying configuration version '1351440883'
notice: /Stage[main]//User[puppet_tester]/ensure: removed
notice: Finished catalog run in 2.94 seconds

Testasin käyttäjän poistamista tutkimalla /home hakemiston tiedostolistausta komennolla:

$ls -l /home

Komento antoi tulosteen:

total 0
drwxr-xr-x  2    1000    1000 160 Oct 28 18:01 puppet_tester
drwxr-xr-x 23 xubuntu xubuntu 700 Oct 28 18:14 xubuntu

Käyttäjän puppet_tester kotihakemistoa ei oltu poistettu. Kokeilin seuraavaksi kirjautumista puppet_tester käyttäjänä luomalla ensin salasanan passwd ja vaihtamalla käyttäjää su komennolla:

xubuntu@xubuntu:~$ sudo passwd puppet_tester
passwd: user 'puppet_tester' does not exist
xubuntu@xubuntu:~$ su - puppet_tester
Unknown id: puppet_tester

Salasanan vaihtaminen ja kirjautuminen puppet_tester käyttäjänä ei onnistunut, koska puppet_tester käyttäjää ei ollut enää olemassa. Totesin puppet resource –edit komennon onnistuneen, vaikka se ei poistanut käyttäjän kotihakemistoa. Seuraavaksi kokeilin poistaa puppet_tester käyttäjän kotihakemiston komennolla:

xubuntu@xubuntu:~$ sudo puppet resource file '/home/puppet_tester' ensure=absent recurse=true
notice: /File[/home/puppet_tester]: Not removing directory; use 'force' to override
notice: /File[/home/puppet_tester]/ensure: removed
file { '/home/puppet_tester':
  ensure => 'directory',
}
xubuntu@xubuntu:~$ ls -l /home/
total 0
drwxr-xr-x  2    1000    1000 160 Oct 28 18:01 puppet_tester
drwxr-xr-x 23 xubuntu xubuntu 700 Oct 28 18:14 xubuntu

Hakemistoa ei poistettua, jonka myös ls komento vahvisti. Seuraavaksi kokeilin lisätä edelliseen puppet resource komentoon force=true määrityksen:

xubuntu@xubuntu:~$ sudo puppet resource file '/home/puppet_tester' ensure=absent force=true recurse=true
notice: /File[/home/puppet_tester]/ensure: removed
file { '/home/puppet_tester':
  ensure => 'absent',
}
xubuntu@xubuntu:~$ ls -l /home
total 0
drwxr-xr-x 23 xubuntu xubuntu 700 Oct 28 18:14 xubuntu

Tällä kertaa puppet_tester käyttäjän kotihakemiston poistaminen onnistui.

Puppet manifestin kirjoittaminen

Aluksin tein hakemiston puppet ja sen alihakemiston manifests:

xubuntu@xubuntu:~$ cd
xubuntu@xubuntu:~$ mkdir puppet
xubuntu@xubuntu:~$ cd puppet/
xubuntu@xubuntu:~/puppet$ mkdir manifests
xubuntu@xubuntu:~/puppet$

Kirjoitin Puppet manifestin käyttämällä nano editoria:

$nano manifests/site.pp

Puppet manifestin sisältö oli seuraava:

file {"/etc/motd":
   ensure  => link,
   target  => "/var/run/motd",
}  

file {"/var/run/motd":
   ensure => present,
   content => "Tervetuloa Xubuntu 12.04.1 LTS Linuxiin.\n\n* Dokumentaatio:  https://help.ubuntu.com/\n\n\n",
}

Puppet manifest muuttaa kirjautumisen yhteydessä näytetyn /etc/motd tiedoston sisällön suomenkieliseksi. Ajoin Puppet manifestin komennolla:

$ sudo puppet apply manifests/site.pp
warning: Could not retrieve fact fqdn
notice: /Stage[main]//File[/var/run/motd]/content: content changed '{md5}12a60eba83a333eddefc6ec1342ebf0e' to '{md5}b7a50b4ef95b24e4e7bc6b9733788edd'
notice: Finished catalog run in 0.06 seconds

Testasin Puppet manifestin toimivuutta komennolla:

xubuntu@xubuntu:~$ cat /etc/motd
Tervetuloa Xubuntu 12.04.1 LTS Linuxiin.

* Dokumentaatio:  https://help.ubuntu.com/

Totesin Puppet manifestin toimivaksi.

Apache palvelimen asentaminen Puppet manifestilla

Kirjoitin toisen Puppet manifestin Apache palvelimen asentamiseksi nano editorilla:

$nano manifests/site.pp

Manifestin sisällöstä tuli seuraava:

package { "apache2":

ensure => installed,
allowcdrom => true,
}

service { "apache2":

ensure => running,
enable => true,
}

Ajoin Puppet manifestin komennolla:

$ sudo puppet apply manifests/apache.pp 
warning: Could not retrieve fact fqdn
err: /Stage[main]//Service[apache2]: Could not evaluate: Could not find init script for 'apache2'
notice: /Stage[main]//Package[apache2]/ensure: ensure changed 'purged' to 'present'
notice: Finished catalog run in 13.02 seconds

Puppet ilmoitti, että se ei löydä taustaprosessin käynnistysskriptiä (init script) “apache2″ palvelulle. Apache palvelin kuitenkin asennettiin.
Ajoin uudestaan saman komennon:

$ sudo puppet apply manifests/apache.pp 
warning: Could not retrieve fact fqdn
notice: Finished catalog run in 0.39 seconds

Tällä kertaa Apachen käynnistysskripti löytyi, koska se oli asennettu kun Puppet manifesti ajettiin ensimmäisen kerran. Testasin Apache pavelimen toimivuutta avaamalla Firefox selaimella osoitteen “localhost”:

Totesin Apache asennuksen toimivaksi. Seuraavaksi muutin Puppet manifestia niin, että Apache taustaprosessin sammutetaan:

service { "apache2":

ensure => stopped,
enable => true,
}

Ajoin uudestaan Puppet manifestin, jotta Apache taustaprosessin tila päivitettiin:

$ sudo puppet apply manifests/apache.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Service[apache2]/ensure: ensure changed 'running' to 'stopped'
notice: Finished catalog run in 1.60 seconds

Testasin Apache pavelimen toimivuutta uudestaan avaamalla Firefox selaimella osoitteen “localhost”:

Yhteyttä localhost palvelimeen ei saatu, koska Apache taustaprosessi oli sammutettu. Totesin Puppet manifestiin tehdyn muutoksen toimivan.

Lähteet

Karvinen, Tero 2012a. Hello Puppet – on Ubuntu 12.04 LTS.
http://terokarvinen.com/2012/hello-puppet-on-ubuntu-12-04-lts

Karvinen, Tero 2012b. Linux keskitetty hallinta ICT4TN011-2 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet

Puppet Labs 2011. Docs: Learning — Resources and the RAL.
http://docs.puppetlabs.com/learning/ral.html

Puppet Labs 2011. Docs: Learning — Manifests
http://docs.puppetlabs.com/learning/manifests.html

About

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti.
http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen


Seuraa

Get every new post delivered to your Inbox.