Tehtävänanto
Oma moduli, tai kokonaisen koneen tai verkon konfiguraatio. Voi olla jokin työ- tai hupiprojekti, jonka tarvitset muutenkin.
Tehtävänannon ohje: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016#comment-21977
Esipuhe
Osana Tero Karvisen Palvelinten Hallinta – kurssia minun tuli tehdä Puppetilla oma moduulin valitsemastani aiheesta. Oman mielikuvituksen puutteessa valitsin aiheekseni vapaaseen lähdekoodiin perustuvat LAMP-stackin eli Linux, Apache, MySQL ja Php – asennuksen. Lisäksi lisäsin joukkoon Gedit tekstieditorin digitaalisten palveluiden kehittämiseen.
Harjoituksessa käytetty laitteisto/ohjelmisto:
- 16GB Kingston DataTraveler 100 G3 USB 3.0 muistitikku
- Tietokone (Asus Z170-A, i7-6700K , 16GB DDR4 3200MHz, Evga 1070 sc)
- Oheishärpäkkeet
- Xubuntu 16.04.1 LTS
- Puppet versio: 3.8.5
Kuvaus perustoiminnasta ja moduulin esittelystä
Tässä raportissa kuvataan ainoastaan moduulin rakenne ja toiminnot. Tämä ei ole raportti sen rakentamisprosessista. Jos haluaa tarkemman kuvauksen siitä, miten Puppetilla tehdään näitä moduuleita, niin Harjoitus 8:ssa tehtiin ensimmäinen versio tästä moduulista. Sen jälkeen siihen on lisätty joitakin ominaisuuksia.
GitHub: https://github.com/PyhaMarkus/puppet-lamp-module
Asentaa seuraavat ohjelmat:
- Apache palvelinohjelma
- Php-ohjelmointikoodi
- PuppetLabs MySQL tietokanta
- Gedit tekstieditori
Lisäksi tekee seuraavat asiat:
- Ottaa käyttöön käyttäjän kotihakemiston Apachea varten
- Mahdollistaa PHP-koodin käytön käyttäjän kotihakemistossa
- Tekee käyttäjän kotihakemistoon valmiin index.php pohjan
- Asettaa MySQL tietokannan ROOT-salasanan asennuksen yhteydessä
- Muokkaa Geditin asetustiedostoja
Moduulin Tree-rakenne
Class ja pakettien asennus
Init.pp:
class lamp { Package {ensure => "installed", allowcdrom => "true"} package { "apache2":} package { "libapache2-mod-php":} package { "php":} package { "gedit":}
Classin nimi on sama kuin manifests-kansion sisältävä kansio. Asentaa Apachen, PHP:n, ja Geditin.
Site.pp:
class {lamp:}
Apache
file { "/etc/apache2/mods-enabled/userdir.conf": ensure => "link", target => "../mods-available/userdir.conf", notify => Service ["apache2"], } file { "/etc/apache2/mods-enabled/userdir.load": ensure => "link", target => "../mods-available/userdir.load", notify => Service ["apache2"], } service { "apache2": ensure => "true", enable => "true", }
Userdir-moduulin käyttöönotto.
Php
file { "/etc/apache2/mods-available/php7.0.conf": content => template ("lamp/php7.0.conf"), notify => Service ["apache2"], }
Templates kansiosta kopioidaan php7.0.conf apachen mods-available kansioon.
Public_html ja index.php
file { "/var/www/html/index.php": content => template ("lamp/index.php"), ensure => "directory", } file { "/etc/skel/public_html": ensure => "directory", } file { "/etc/skel/public_html/index.php": content => template ("lamp/index.php"), }
Skel-kansioon kopioidaan automaattisesti templates kansiosta index.php. Tällöin se menee automaattisesti kaikkien käyttäjien kotihakemistoon.
Templates
Templates-kansio pitää sisällään php:tä varten tiedostot index.php ja php7.0.conf
Index.php:
Yllä perus html-pohja, joka näkyy kaikille käyttäjille. Se tulostaa “Hello World in php!” php:llä. Liitetty kuvana, koska WordPress hölmöilee muuten sen kanssa.
php7.0.conf
Ylläoleva conf-tiedosto sallii siis php-koodin käyttöönoton käyttäjän kotihakemistossa. Oletuksena se on estetty.
MySQL
Tämä oli haastavin osuus koko moduulissa. Ensin oli tarkoitus laittaa moduuli asentamaan mysql-server ja -client packaget sekä määrittää tietokannan-root käyttäjälle salasana moduulin “suorittamisen” yhteydessä. Tämä ilmenikin yllättävän hankalaksi, enkä itsetehtyä moduuliosioita rakennettua, joka asettaisi myös sen rootin salasanan. Tämän vuoksi jouduin turvautumaan puppetlabsin mysql moduuliin.
Ensin ajattelin sisällyttää puppetlabsin moduulin suoraan omaan manifestiini, mutta sekin päätyi olemaan turhan monimutkaisesti toteutettava. Olisi nimittäin ilmeisesti vaatinut toisen moduulin asennuksen Puppet Forgesta, ennen kuin saan moduulin asennettua manifestista suoraan.
Tämän vuoksi ennen tätä oman LAMP-moduulin käyttöönottoa tulee ladata PuppetLabsin MySQL moduuli. Tämä onnistuu nopeasti terminaalin komennolla:
$ sudo puppet module install puppetlabs-mysql
Ainoa, mitä tuon lisäksi tarvitaan, että päästään muokkamaan tietokantaa, on root-salasanan määritys site.pp tiedostossa:
class {'mysql::server': root_password => 'ICT-PalveluAlustanikohan-Z170!-96', }
Koska itse teen kaiken Linuxiin liittyvän livetikulta, niin init.pp:ssä lisätään “allowcdrom” PuppetLabs MySQL moduulin install.pp tiedostoon.
init.pp:
file { "/etc/puppet/modules/mysql/manifests/server/install.pp": ensure => "directory", content => template ("lamp/install.pp"), }
install.pp sisältö templates kansiossa:
# class mysql::server::install { if $mysql::server::package_manage { package { 'mysql-server': ensure => $mysql::server::package_ensure, install_options => $mysql::server::install_options, name => $mysql::server::package_name, allowcdrom => "true", } } }
Gedit
exec {'gsettings set org.gnome gedit preferences.editor': command => "gsettings set org.gnome.gedit.preferences.editor scheme \'Oblivion\'", require => Package ["gedit"], path => ['/bin/','/sbin/','/usr/bin/','/usr/sbin/'] } }
Tämä osuus muokkaa Geditin asetustiedostoista väriteeman cobaltiksi eli vakio vaaleasta teemasta tummempaan.
Moduuli kokonaisuudessaan
Manifests sisältö:
Init.pp
class lamp { Package {ensure => "installed", allowcdrom => "true"} package { "apache2":} package { "libapache2-mod-php":} package { "php":} package { "gedit":} file { "/var/www/html/index.php": content => template ("lamp/index.php"), ensure => "directory", } file { "/etc/skel/public_html": ensure => "directory", } file { "/etc/skel/public_html/index.php": content => template ("lamp/index.php"), } file { "/etc/apache2/mods-enabled/userdir.conf": ensure => "link", target => "../mods-available/userdir.conf", notify => Service ["apache2"], } file { "/etc/apache2/mods-enabled/userdir.load": ensure => "link", target => "../mods-available/userdir.load", notify => Service ["apache2"], } file { "/etc/apache2/mods-available/php7.0.conf": content => template ("lamp/php7.0.conf"), notify => Service ["apache2"], } service { "apache2": ensure => "true", enable => "true", } file { "/etc/puppet/modules/mysql/manifests/server/install.pp": ensure ?> "directory", content => template ("lamp/install.pp"), } exec {"gsettings set org.gnome.gedit.preferences.editor": command => "gsettings set org.gnome.gedit.preferences.editor scheme \'Oblivion\'", require => Package ["gedit"], path => ['/bin/','/sbin/','/usr/bin/','/usr/sbin/'], } }
Site.pp
class {lamp:} class {'mysql::server': root_password => 'ICT-PalveluAlustanikohan-Z170!-96', }
Templates sisältö:
Index.php
Php7.0.conf
Install.pp
# class mysql::server::install { if $mysql::server::package_manage { package { 'mysql-server': ensure => $mysql::server::package_ensure, install_options => $mysql::server::install_options, name => $mysql::server::package_name, allowcdrom => "true", } } }
Asennus
PuppetLabs MySQL moduuli oli asennettu:
$ sudo puppet module install puppetlabs-mysql
Oman LAMP-moduulin asennus:
$ sudo puppet apply -e ‘class {lamp:}’
Moduuli tuli suorittaa kahdesti, jotta käyttäjähakemistot toimivat.
Apache ja php
Gedit
MySQL
Yritin kirjautua sisään:
$ mysql -u root -p
The program 'mysql' can be found in the following packages: * mysql-client-core-5.7 * mariadb-client-core-10.0 Try: sudo apt install
$ sudo puppet module install puppetlabs-mysql
xubuntu@xubuntu:/etc/puppet/modules/lamp/templates$ sudo puppet module install puppetlabs-mysql Notice: Preparing to install into /etc/puppet/modules ... Notice: Module puppetlabs-mysql 3.10.0 is already installed.
PuppetLabsin MySQL moduuli on asennettuna, mutta jostain syystä kirjautumista yrittäessäni, se ei ikäänkuin löytäisi asennusta. En osaa sanoa, mikä tässä meni pieleen…
Lähteet
Harjoituksen ohjeet
URL: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016
Install Multiple Packages
URL: https://www.puppetcookbook.com/posts/install-multiple-packages.html
Apache userdir
URL: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016#comment-21937
PHP koodi
URL: http://php.net/manual/en/tutorial.firstpage.php
Lyhyt HTML
URL: http://terokarvinen.com/2012/short-html5-page
PuppetLabs MySQL
URL: https://forge.puppet.com/puppetlabs/mysql/2.2.3
MySQL asennus ja konfigurointi
URL: https://www.digitalocean.com/community/tutorials/how-to-create-a-puppet-module-to-automate-wordpress-installation-on-ubuntu-14-04
Gedit Preferences
URL: http://askubuntu.com/questions/375049/where-are-gedits-preferences
Pingback: Linuxin keskitetty hallinta, oma moduli – Alex Fredriksson