Palvelinten hallinta – Oma moduuli

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
Screenshot_2016-12-10_20-37-07.png

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:
html kuva raporttia varten.JPG
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
Screenshot_2016-12-10_19-28-40.png
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
html kuva raporttia varten.JPG
Php7.0.conf
Screenshot_2016-12-10_19-28-40.png
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
screenshot_2016-12-10_20-00-54
Gedit
Screenshot_2016-12-10_20-26-00.png

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

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html” Markus Pyhäranta

1 thought on “Palvelinten hallinta – Oma moduuli”

  1. Pingback: Linuxin keskitetty hallinta, oma moduli – Alex Fredriksson

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top