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