Tehtävänanto:
h8. Tee ensimmäinen versio omasta modulista.
Tehtävien ohje otettu: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016
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
Alustavat valmistelut:
Seuraavat toimet suoritan aina, kun alan tekemään linux-harjoitusten eri osioita.
Boottasin Xubuntu-livetikulle valitsemalla USB-muistitikun käynnistyksen yhteydessä bootattavaksi levyksi. Kun kysyttiin haluanko testata Xubuntua vaiko asentaa sen, valitsin vaihtoehdon “Try Xubuntu without installing“. Lyhyen latauksen päästä pääsin työpöydälle.
Yhdistin heti kotini langattomaan verkkoon työpöydän oikeasta yläkulmasta sekä muutin näppäimmistön layoutin suomiversioksi komennolla terminaalin komennolla “$ setxkbmap fi”.
Seuraavaksi syötin komennon “$ sudo apt-get update“. Kyseinen komento päivittää pakettivarastot, ja se kannattaa suorittaa aina ennen kuin hyödyntää paketinhallintaa mihinkään.
Tehtävän kuvaus
Meidän tuli keksiä aihe omalle moduulille tai kokonaisen koneen tai verkon konfiguraatiolle. Päätin ottaa aiheekseni LAMP-stackin asennukset ja konfiguroinnin Puppettia käyttäen.
Harjoituksen aloitus
Asensin Puppetin $ sudo apt-get install puppet.
Tein Palvelinten hallinta – Harjoitus 6:ssa moduulin, joka asensi Apachen, Php:n ja muita ohjelmia. Tarkoituksena olisi nyt lisätä paketettiin toimiva MySQL tietokanta. Harjoitus 6:ssa moduuli asensi myös jotain toivottuja IoT-kehitystyökaluja, mutta karsin ne tästä lopullisesta moduulista pois, sillä niille ei ole tarvetta.
Jatketaan siis siitä, mihin jäätiin aiemmassa harjoituksessa: https://markuspyharanta.wordpress.com/2016/11/12/palvelinten-hallinta-harjoitus-6/.
Tilanne on siis seuraava:
Moduulin classin nimeksi on muutettu lamp. Tarpeettomat IoT työkalut ja Munin on poistettu, mutta Geditin asennan silti, koska sillä on kätevä kirjoittaa html ja php-koodia.
Sijainnista /etc/puppet/modules/lamp/, löytyy kansiot manifests ja templates.
Init.pp tiedosto sisältää itse lamp-moduulin, ja se sijaitsee manifests kansiossa. Asennettavaksi packageksi on lisätty mysql-server ja mysql-client.
class lamp { Package {ensure => "installed", allowcdrom => "true"} package { "apache2":} package { "libapache2-mod-php":} package { "php":} package { "mysql-server:} package { "mysql-client:} package { "gedit":} file { "/var/www/html/index.html": content => "It's working!", } file { "/home/xubuntu/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", } service { "mysql": ensure => "true", enable => "true", require => Package["mysql-server"], } }
Templates kansiosta löytyy tiedostot index.php ja php7.0.conf.
Php7.0.conf tiedoston sisälle on kopioitu sijainnista /etc/apache2/mods-available/php7.0.conf alla oleva sisältö, josta on vielä kommsudentoitu ifmodulet pois. (#)
Index.php sisältää halutun html ja php-koodin.
Sijainnista /etc/puppet/ löytyy site.pp – tiedosto, joka pitää sisällään vain seuraavan rivin:
class {lamp:}
MySQL
service { "mysql": ensure => "true", enable => "true", require => Package["mysql-server"], }
Ylläoleva pätkä moduulista tuottaa virheen:
Error: /Stage[main]/Lamp/Service[mysql]: Could not evaluate: Execution of '/sbin/status mysql' returned 1: status: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
En tiedä miksi.
Tarkoituksena olisi nyt myöhemmin saada moduuli asettamaan MySQL root-salasana ilman, että asennuksen jälkeen pongahtaa alla olevan näköinen ruutu.
https://forge.puppet.com/puppetlabs/mysql#mysqlserver
http://stackoverflow.com/questions/37014161/install-mysql-server-with-puppet
https://awaseroot.wordpress.com/2012/04/30/puppet-module-for-lamp-installation/
Tutkin yllä olevia lähteitä ja pyrin niiden pohjalta saamaan tämän aikaiseksi.
Work in progress…
Skel/public_html
Haluan, että kaikille käyttäjille tehdään automaattisesti public_html kansio sekä index.php tiedosto.
file { "/etc/skel/public_html": ensure => "directory", } file { "/etc/skel/public_html/index.php": content => template ("lamp/index.php"), }
Moduulin pitäisi nyt myös kopioida template-kansiosta index.php:n sisältö skeliin käyttäjien public_html:ään.
Tein uuden käyttäjän nimeltä Testi ja suoritin moduulin $ sudo puppet apply -e ‘class {lamp:}’
Public_html ja index.php on kopioitu Testin kotihakemistoon:
Yhteenveto
Tässä harjoituksessa tehtiin ensimmäinen version suunnittelemastani moduulista. Moduuliin lisätty mysql-server ja -client paketit, mutta tietokannan konfigurointi on yhä kesken. Index.php ja public_html ovat laajennettu kaikkien käyttäjien saataville.
class lamp { Package {ensure => "installed", allowcdrom => "true"} package { "apache2":} package { "libapache2-mod-php":} package { "php":} package { "mysql-server":} package { "mysql-client":} package { "gedit":} file { "/var/www/html/index.html": content => "It's working!", } 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", } service { "mysql": ensure => "true", enable => "true", require => Package["mysql-server"], } }
Lähteet:
Harjoituksen ohjeet
URL: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016
Harjoitus 6
URL: https://markuspyharanta.wordpress.com/2016/11/12/palvelinten-hallinta-harjoitus-6/
Pingback: Palvelinten hallinta – Oma moduuli – Markus Pyhäranta