Avainsanaan ‘Apache’ liitetyt artikkelit

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

Harjoitustehtävä 6: Sisällönhallinta

1.10.2012

Harjoitustehtävän aiheena oli WordPress sisällönhallintajärjestelmän asentaminen Xubuntu Linux käyttöjärjestelmään. Sisällönhallintajärjestelmää varten asennettiin Apache ja MySQL palvelimet sekä PHP. Sisällönhallintajärjestelmää muokattiin asentamalla siihen ulkoasuteema ja toiminnallinen lisäosa (plugin).

Harjoitusympäristö

Harjoitus suoritettiin 30.09.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
  • Kiintolevylle asennettu käyttöjärjestelmä: Xubuntu versio 12.04 32-bittinen

Apache palvelimen asennus

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

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Ensiksi asensin Apache palvelimen komennolla:

$sudo apt-get install apache2

Testasin Apache asennuksen avaamalla Firefox selaimessa osoitteen “localhost”:

Totesin Apachen toimivan. Seuraavaksi otin käyttöön käyttäjäkohtaiset public_html kansiot Apachessa komennolla:

$sudo a2enmod userdir

Käynnistin Apachen uudelleen komennolla:

$sudo service apache restart

Siirryin käyttäjähakemistoon ja tein kansion public_html komennoilla:

$cd
$mkdir public_html

Siirryin public_html hakemistoon ja tein nano editorilla testi-HTML tiedoston komennoilla:

$cd public_html
$nano index.html

Tiedoston sisällöksi tuli:

Hei, maailma!

Testasin käyttäjäkohtaisen public_html kansion toimintaa avaamalla Firefox selaimessa sivun “localhost/~xubuntu”:

Totesin käyttäjäjä kohtaisten public_html kansioiden toimivan.

PHP:n asennus

Seuraavaksi asensin PHP:n komennolla:

$sudo apt-get install libapache2-mod-php5

Seuraavaksi muutin Apachen PHP lisäosan asetuksia niin, että PHP:tä voidaan ajaa käyttäjäkohtaisesta public_html kansiosta:

$sudo nano /etc/apache2/mods-enabled/php5.conf

Asetustiedostosta kommentoitiin ulos seuraavat rivit lisäämällä rivien alkuun ristikkomerkki #:

<IfModule mod_userdir.c>
      <Directory /home/*/public_html>
           php_admin_value engine Off
      </Directory>
</IfModule>

Käynnistin Apache palvelimen uudelleen komennolla:

$sudo service apache2 restart

Testakseni PHP:n toimivuutta, tein kotihakemistoni public_html kansioon testi.php tiedoston komennolla:

$nano ~/public_html/testi.php

Tiedoston sisällöksi tuli:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<?php
print_r('<h1>Terve taas, maailma!</h1>');
?>

Seuraavaksi avasin Firefox selaimessa osoitteen “localhost/~xubuntu/testi.php”:

Totesin PHP:n toimivan käyttäjäkohtaisissa public_html kansioissa.

MySQL palvelimen ja phpMyAdmin työkalun asennus

Asensin MySQL palvelimen sekä tarvittavat Apache ja PHP rajapinnat komennolla:

$sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

MySQL asennuksen aikana määritin salasanan MySQL root käyttäjälle:

Asensin phpMyAdmin työkalun, joka tarjoaa graafisen käyttöliittymän MySQL palvelimelle komennolla:

$sudo apt-get install phpmyadmin

phpMyAdmin asennuksessa valitsin liittämisen Apache palvelimeen:

Seuraavaksi määritin phpMyAdmin työkalun käyttämän tietokannan:

phpMyAdmin työkalun omalle tietokantakäyttäjälle piti määrittää salana ja sen jälkeen antaa MySQL palvelimen root käyttäjän salasana, jotta phpMyAdmin työkalun käyttämä tietokanta voitiin luoda:

Testasin phpMyAdmin työkalun asennuksen avaamalla Firefox selaimella osoitteen “localhost/phpmyadmin”:

Totesin phpMyAdmin työkalun toimivan. Seuraavaksi kirjauduin sisään MySQL palvelimen root käyttäjänä:

Tietokantakäyttäjän ja tietokannan luominen sisällönhallintajärjestelmälle phpMyAdmin työkalulla

Siirryin valikkoon Privileges ja valitsin Add a new User:

Valitsin tietokantakäyttäjän nimeksi “wpeliimatt” ja palvelimeksi “localhost”. Generoin satunnaisen salasanan valinnalla Generate. Valitsin “Create database with same name and grant all privileges”, jolla tietokantakäyttäjälle luotiin samanniminen tietokanta ja annettiin siihen täydet oikeudet. Valinnalla Create User tein uuden tietokantakäyttäjän ja tietokannan:

Totesin uuden tietokantakäyttäjän luomisen onnistuneen, koska valikosta Users voidaan havaita uusi tietokantakäyttäjä “wpeliimatt” ja vasemman laidan navigointialueella on uusi tietokanta “wpeliimatt”:

Kirjauduin ulos phpMyAdmin työkalun käyttöliittymästä.

WordPress sisällönhallintajärjestelmän asennus

Aloitin asennuksen avaamalla Firefox selaimella sivun “www.wordpress.org”:

Valitsin latauslinkin Download WordPress 3.4.2:

Valitsin .tar.gz tyyppisen asennuspaketin, koska siinä Linuxin tiedostojen käyttöoikeudet säilyvät toimivina. Tiedoston latauduttua purin asennuspaketin käyttäjäkohtaisen public_html kansioon komennoilla:

$cd ~/public_html
$tar -xzvf ~/Downloads/wordpress-3.4.2.tar.gz

Seuraavaksi avasin Firefox selaimessa osoitteen “localhost/~xubuntu/wordpress/wp-admin/install.php”:

WordPress asennusohjelma kertoi, että tarvittava asetustiedosto puuttui. Tehdäkseni uuden asennustiedoston valitsin Create Configuration File:

Seuravassa ikkunassa syötin aikaisemmin luomani tietokantakäyttäjän ja tietokannan tiedot. Lisäksi muutin tietoturvasyistä tietokannassa käytettävien taulujen etuliitettä:

Asennusohjelma antoi seuraavaksi valmiin asetustiedoston pohjan:

Kopioin asetustiedoston pohjan leikepöydälle ja siirryin komentokehotteeesen. Siirryin wordpress kansioon ja avasin uuden asetustiedoston nano editorilla komennoilla:

$cd ~/public_html/wordpress
$nano wp-config.php

Liitin asetustiedoston pohjan leikepöydältä nano editoriin ja tallensin tiedoston:

Palasin takaisin Firefox selaimeen ja valitsin Run Install. Seuravassa ikkunassa annoin otsikkonimen WordPress sivustolle. Muutin oletuskäyttäjän “admin” nimen ja annoin oman sähköpostiosoitteeni. Jätin salasanakentän tyhjäksi, jotta WordPress generoi satunnaisen salasanan. Jätin myös päälle valinnan “Allow search engines to index this site”:

Seuraavassa ikkunassa asennusohjelma kertoi asennuksen olevan valmis ja antoi generoimansa salasanan:

Valitsin Log In. Avautuneessa kirjautumisikkunassa syötin luomani käyttäjätunnuksen ja salasanan:

Kirjautumisen jälkeen pääsin WordPress sisällönhallintajärjestelmän ohjausnäkymään:

Totesin WordPress sisällöhallintajärjestelmän asennuksen onnistuneen.

PermaLinks asetuksen ottaminen käyttöön WordPress sivustolla

Siirryin WordPress ohjausnäkymässä kohtaan Settings. Muutin ensi General välilehdellä aika- ja päivämääräasetuksia:

Seuraavaksi siirryin PermaLinks välilehdelle. Otin käyttöön Day and Name asetuksen, joka muuttaa blogikirjoitusten linkit päivämäärän ja kirjoituksen nimen muotoiseksi:

WordPress ilmoitti, että Apachen mod_rewrite asetukset ei ole käytössä:

Siirryin komentokehotteeseen korjaamaan asetukset kuntoon. Otin Apachen mod_rewrite moduulin käyttöön komennolla:

$sudo a2enmod rewrite

Seuraavaksi muokkasin Apachen käyttäjäkohtaisten public_html kansioiden asetustiedostoa nano editorilla komennolla:

$sudo nano /etc/apache2/mods-enabled/userdir.conf

Muutin asetusten käsittelyä lohkon <Directory /home/*/public_html> sisällä:

AllowOverride all

Siirryin WordPress asennushakemistoon ja avasin tiedoston .htaccess nano editorilla:

$cd ~/public_html/wordpress
$nano .htaccess

Kopioin WordPress ohjausnäkymän sivulla esitetyt .htaccess tiedoston asetukset leikepöydälle ja sieltä
nano editorissa avattuun tiedostoon:

Muutos 6.10.2012: poistettu kuvaus .htaccess tiedoston oikeuksien muuttamisesta, joka on tarpeetonta WordPressin PermaLinks asetusten toiminnalle  sekä muodostaa tietoturvariskin.

Muutin .htaccess tiedoston oikeuksia, jotta WordPress voi päivittää niitä automaattisesti:

$chmod 666 .htaccess

Käynnistin Apachen uudelleen komennolla:

$sudo service apache2 restart

Tallensin uudestaan PermaLinks asetuksen WordPress ohjausnäkymässä. Tällä kertaa se onnistui:

Testasin PermaLinks toimintoa avaamalla Firefox selaimella WordPress sivuston osoitteen “localhost/~xubuntu/wordpress”:

Totesin asetuksen onnistuneen, koska PermaLinks osoitteet näkyivät selaimessa.

Ulkoasuteeman asentaminen WordPress sivustolle

Avasin Firefox selaimella osoitteen “http://wordpress.org/extend/themes/“, jonne on koottu WordPress teemoja:

Valitsin teeman nimeltä Montezuma ja latasin sen omalle koneelleni. Purin paketin kansioon ~/public_html/wordpress/wp-content/themes komennolla:

$unzip ~/Downloads/montezuma.1.1.3.zip -d ~/public_html/wordpress/wp-content/themes/

Siiryin WordPress ohjausnäkymässä valikkoon Appearance ja välilehdelle Themes, josta löytyy uusi Montezuma teema:

Otin uuden teeman käyttöön valitsemalla Activate. Testasin teemaa avaamalla Firefox selaimella Firefox selaimella WordPress sivuston osoitteen “localhost/~xubuntu/wordpress”:

Totesin uuden teeman toimivan.

Pluginin asentaminen WordPress sivustolle

Avasin Firefox selaimella osoitteen “http://wordpress.org/extend/plugins/“, jonne on koottu WordPress plugineja:

Valitsin pluginin nimeltä TinyMCE Advanced, joka on kehittyneempi versio WordPress artikkelieditorista, ja latasin sen omalle koneelleni. Purin paketin kansioon ~/public_html/wordpress/wp-content/plugins komennolla:

$unzip ~/Downloads/tinymce-advanced.3.4.9.zip -d ~/public_html/wordpress/wp-content/plugins

Siirryin WordPress ohjausnäkymässä valikkoon Plugins, josta löytyy uusi TinyMCE Advanced plugin:

Otin pluginin käyttöön valitsemalla Activate. Testasin pluginia kokeilemalla uuden artikkelin kirjoittamista WordPress ohjausnäkymässä:

Totesin uuden pluginin toimivan.

Lähteet

Emphatic Nonsense 2011. Enabling Apache’s PHP execution in User Directories on Ubuntu Lucid.
http://emphaticnonsense.com/2011/10/06/enabling-apache-php-execution-in-user-directories-on-ubuntu-lucid/

Techy Talk.info 2011. Enable Apache mod_rewrite on Ubuntu Linux system
http://www.techytalk.info/enable-apache-mod_rewrite-on-ubuntu-linux/

Karvinen, Tero 2012. Linux palvelimena ICT4TN003-4 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-4-ja-ict4tn003-6-syksylla-2012

Ubuntu Community Help Wiki 2012. ApacheMySQLPHP.
https://help.ubuntu.com/community/ApacheMySQLPHP

WordPress Codex 2012.
http://codex.wordpress.org/

WordPress Plugin Directory 2012.
http://wordpress.org/extend/plugins

WordPress Themes Directory 2012.
http://wordpress.org/extend/themes/

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

Harjoitustehtävä 5: Apache

24.9.2012

Harjoitustehtävän aiheena oli nimipohjaisten “virtuaalipalvelimien” (name based virtual host) määritteleminen Apache HTTP palvelimella.
Harjoituksessa määriteltiin neljä virtuaalipalvelinta, joille annettiin erilaisia asetuksia liittyen PHP:n käyttöön sekä automaattiseen
hakemistolistaukseen. Lisäksi tutkittiin Apachen lokitiedostoista erilaisia HTTP statuskoodeja.

Harjoitusympäristö

Harjoitus suoritettiin 23.09.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, johon oli asennettu Xubuntu versio 12.04 32-bittinen Linux käyttöjärjestelmä.

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

Virtuaalipalvelimen määrittely Apache palvelimessa

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

$sudo apt-get update

Pakettivarastojen päivitys kesti muutamia sekunteja.

Apache palvelin oli jo valmiiksi asennettuna koneella ja siihen oli otettu käyttöön käyttäjäkohtaiset public_html kansiot. Tein omaan kotihakemistooni kansion Apachen “virtuaalipalvelinta” varten komennolla:

$mkdir ~/public_html/eliimatt.com

Seuraavaksi siirryin muokkaamaan /etc/hosts tiedostoa komennolla:

$sudo nano /etc/hosts

Määrittelin /etc/hosts tiedostoon “virtuaalipalvelimen” nimitiedot lisäämällä rivit:

192.168.xxx.xxx www.eliimatt.com
192.168.xxx.xxx eliimatt.com

Määrittelyn mukaan “www.eliimatt.com” ja “eliimatt.com” viittaavat harjoitusympäristön tietokoneen paikalliseen IP-osoitteeseen.

Seuraavaksi ryhdyin muokkaamaan Apache:n asetustiedostoja. Siirryin Apache:n asetuskansioon sites-available, johon Apachen “virtuaalipalvelimet” määritellään:

$cd /etc/apache2/sites-available/

Tein Apachen oletuspalvelimen default tiedostosta eliimatt.com nimisen kopion:

$sudo cp default eliimatt.com

Muokkasin eliimatt.com tiedostoa nano editorilla:

$sudo nano eliimatt.com

Tiedoston sisällöksi tuli:

<VirtualHost *:80>
        ServerName www.eliimatt.com
        ServerAlias eliimatt.com
        DocumentRoot /home/eino/public_html/eliimatt.com
</VirtualHost>

Apachen asetusdirektiivit tarkoittavat seuraavaa:

• VirtualHost lohkon sisällä on varsinainen “virtuaalipalvelimen” määrittely. Asteriskimerkki * merkitsee kaikkia tietokoneen IP-osoitteita ja “:80″ TCP porttia 80, josta tämä “virtuaalipalvelin” ottaa vastaan HTTP liikennettä.

• ServerName on “virtuaalipalvelimen” nimi, jolle osoitettuun HTTP liikenteeseen tämä virtuaalipalvelin “vastaa”.

• ServerAlias on “virtuaalipalvelimen” vaihtoehtoinen nimi, johon “virtuaalipalvelin” myös reagoi.

• DocumentRoot viittaa tiedostojärjestelmän polkuun, jossa “virtuaalipalvelimen” sisältö sijaitsee.

Seuraavaksi tein testisivun “virtuaalipalvelimelle” komennolla:

$sudo nano ~/public_html/eliimatt.com/index.html

Tiedosto sisällön pohjana käytettiin Tero Karvisen lyhyttä HTML5 testisivua:

<!doctype html>
<html>
<head>
	<title>www.eliimatt.com</title>
	<meta charset="utf-8" />
</head>
<body>
	<h1>www.eliimatt.com</h1>
	<p>Terve, maailma! Tämä on Apachen nimipohjainen "virtuaalipalvelin"</p>
</body>
</html>

Tämän jälkeen otin käyttöön uuden “virtuaalipalvelimen” komennolla:

$sudo a2ensite eliimatt.com

Käynnistin Apache palvelimen uudelleen komennolla:

$sudo service apache2 reload

Testasin “virtuaalipalvelimen” toimivuutta Firefox selaimessa avaamalla osoitteen “www.eliimatt.com” sekä “eliimatt.com”:


Testi osoitti, että “virtuaalipalvelin” toimii molemmilla nimillään.

PHP:n asentaminen Apache palvelinta varten

Asensin PHP:n komennolla:

$sudo apt-get install libapache2-mod-php5

Seuraavaksi muutin Apachen PHP lisäosan asetuksia niin, että PHP:tä voidaan ajaa käyttäjäkohtaisesta public_html kansiosta:

$sudo nano /etc/apache2/mods-enabled/php5.conf

Asetustiedostosta kommentoitiin ulos seuraavat rivit lisäämällä rivien alkuun ristikkomerkki #:

<IfModule mod_userdir.c>
      <Directory /home/*/public_html>
           php_admin_value engine Off
      </Directory>
</IfModule>

Käynnistin Apache palvelimen uudelleen komennolla:

$sudo service apache2 reload

Testakseni PHP:n toimivuutta, tein kotihakemistoni public_html kansioon index.php tiedoston komennolla:

$nano ~/public_html/index.php

Tiedoston sisällöksi tuli:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<?php
print_r('<h1>Terve maailma</h1>');
print_r('<p>Käyttämäsi selaimen tiedot:</p>');
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";
?>

Seuraavaksi avasin Firefox selaimessa osoitteen “localhost/~eino”:

Testi osoitti, että PHP sivut toimivat käyttäjäkohtaisessa public_html kansiossa.

Virtuaalipalvelinten lisääminen Apachen käyttöön

Harjoitustehtävää jatkettiin ottamalla käyttöön lisää Apachen virtuaalipalvelimia. Tehtävänä oli määrittää virtuaalipalvelin,jossa voitiin suorittaa PHP koodia sekä toinen, jossa se oli kiellettyä. Palautin aikaisemmin tekemäni Apachen PHP lisäosaan tekemäni asetuksen, joka salli käyttäjäkohtaisessa public_html kansiossa ajettavan PHP koodin. Tein kaksi uutta virtuaalipalvelinta tätä tarkoitusta varten samalla tavoin kuin ensimmäisenkin. Lisäsin molempien virtuaalipalvelimien asetustiedostoihin <Directory> lohkon, jossa määriteltiin PHP kieltäminen tai salliminen asetusdirektiivillä php_admin_value engine Off/1(On):

1. Virtuaalipalvelin nonphp.com – PHP koodin suoritus kielletty

Sisältökansion luominen:

$mkdir ~/public_html/nonphp.com

Nimitiedot /etc/hosts tiedostossa:

192.168.xxx.xxx www.nonphp.com
192.168.xxx.xxx nonphp.com

/etc/apache2/sites-available/nonphp.com tiedoston sisältö:

 <VirtualHost *:80> 
    ServerName www.nonphp.com 
    ServerAlias nonphp.com 
    DocumentRoot /home/eino/public_html/nonphp.com 
        <Directory /home/eino/public_html/nonphp.com>
            php_admin_value engine Off
        &lt/Directory>

</VirtualHost>

Käyttöön ottaminen komennolla:

$sudo a2ensite nonphp.com
2. Virtuaalipalvelin phpsite.com – PHP koodin suoritus sallittu

Sisältökansion luominen:

$mkdir ~/public_html/phpsite.com

Nimitiedot /etc/hosts tiedostossa:

192.168.xxx.xxx www.phpsite.com
192.168.xxx.xxx phpsite.com

/etc/apache2/sites-available/phpsite.com tiedoston sisältö:

 <VirtualHost *:80> 
    ServerName www.phpsite.com 
    ServerAlias phpsite.com 
   DocumentRoot /home/eino/public_html/phpsite.com 
        <Directory /home/eino/public_html/phpsite.com>
            php_admin_value engine 1
        &lt/Directory>
</VirtualHost>

Käyttöön ottaminen komennolla

$sudo a2ensite phpsite.com

Kopioin molempiin virtuaalipalvelinten sisältökansioihin aikaisemmin tekemäni index.php tiedoston komennoilla:

$cp ~/index.php ~/nonphp.com/
$cp ~/index.php ~/phpsite.com/

Käynnistin Apache palvelimen uudelleen komennolla:

$sudo service apache2 reload

Testasin virtuaalipalvelinten PHP asetuksia Firefox selaimessa avaamalla osoitteen “www.nonphp.com” sekä “www.phpsite.com”:

Testi osoitti, että virtuaalipalvelimille määritellyt PHP asetukset toimivat kuten oli suunniteltu.

Hakemistolistauksen kieltäminen virtuaalipalvelimessa

Tein kolmannen Apache virtuaalipalvelimen, jossa estettiin automaattisen hakemistolistauksen näyttäminen kun index.html tiedostoa ei löydy. Automaattinen hakemistolistaus estetetään asetusdirektiivillä Options -Indexes.

3. Virtuaalipalvelin noindex.com – automaattinen hakemistolistaus estetty

Sisältökansion luominen:

$mkdir ~/public_html/noindex.com

Nimitiedot /etc/hosts tiedostossa:

192.168.xxx.xxx www.noindex.com
192.168.xxx.xxx noindex.com

/etc/apache2/sites-available/noindex.com tiedoston sisältö:

 <VirtualHost *:80> 
    ServerName www.noindex.com 
    ServerAlias noindex.com 
   DocumentRoot /home/eino/public_html/noindex.com 
        <Directory /home/eino/public_html/noindex.com>
            Options -Indexes
        </Directory>
</VirtualHost>

Käyttöön ottaminen komennolla

$sudo a2ensite noindex.com

Käynnistin Apache palvelimen uudelleen komennolla:

$sudo service apache2 reload

En tehnyt virtuaalipalvelimen sisältökansioon mitään tiedostoja. Testasin virtuaalipalvelinta avaamalla Firefox selaimessa osoitteen “www.noindex.com”:

Testi osoitti, että virtuaalipalvelimen asetukset estivät automaattisen hakemistolistauksen tekemisen.

HTTP statukset lokitiedostossa

HTTP Status 200 – OK

• Avasin Firefox selaimella osoitteen “www.eliimatt.com”. Sivu latautui normaalisti:


Lokitiedosto /var/log/apache2/other_vhosts_access.log sisältää merkinnän:

eliimatt.com:80 192.168.100.102 - - [24/Sep/2012:00:07:38 +0300] "GET / HTTP/1.1" 200 517 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"

Osoite eliimatt.com viittaa virtuaalipalvelimen nimeen. GET / viittaa HTTP pyyntöön, jolla pyydetään juuridokumenttia kun erillistä sivua ei ole määritelty selaimen osoiterivillä. 200 viittaa HTTP statukseen, joka kertoo että sivupyyntöön on vastattu onnistuneesti. Loppuosassa näkyvät selaimen tiedot.

HTTP Status 404 – Not Found

• Avasin Firefox selaimella osoitteen “www.eliimatt.com/omasivu”. Selain ilmoitti, että sivua ei löydy:


Lokitiedosto /var/log/apache2/other_vhosts_access.log sisältää merkinnän::

eliimatt.com:80 192.168.100.102 - - [24/Sep/2012:00:23:45 +0300] "GET /omasivu HTTP/1.1" 404 503 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"

Osoite eliimatt.com viittaa virtuaalipalvelimen nimeen. GET /omasivu viittaa HTTP pyyntöön, jolla pyydetään omasivu nimistä dokumenttia. 404 viittaa HTTP statukseen, joka kertoo että sivua ei löydy. Loppuosassa näkyvät selaimen tiedot.

HTTP Status 403 – Forbidden

• Avasin Firefox selaimella osoitteen “www.noindex.com”. Selain ilmoitti, että oikeudet sivun avaamiseen puuttuvat:


Lokitiedosto /var/log/apache2/other_vhosts_access.log sisältää merkinnän::

www.noindex.com:80 192.168.100.102 - - [24/Sep/2012:00:37:59 +0300] "GET / HTTP/1.1" 403 499 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"

Osoite eliimatt.com viittaa virtuaalipalvelimen nimeen. GET / viittaa HTTP pyyntöön, jolla pyydetään juuridokumenttia kun erillistä sivua ei ole määritelty selaimen osoiterivillä.. 403 viittaa HTTP statukseen, joka kertoo että oikeudet sivun avaamiseen puuttuvat. Loppuosassa näkyvät selaimen tiedot.

HTTP Status 500 – Internal Server Error

• Tein “huonoa” koodia sisältävän PHP tiedoston badcode.php, jonka sisältö oli:

<?php echo !"#%; ?>

Kopioin tiedoston kotihakemistoni ~/public_html/phpsite.com kansioon. Avasin Firefox selaimella osoitteen “www.phpsite.com/badcode.php”. Selain näytti vain tyhjää ikkunaa:


Lokitiedosto /var/log/apache2/other_vhosts_access.log sisältää merkinnän::

phpsite.com:80 192.168.100.102 - - [24/Sep/2012:01:08:14 +0300] "GET /badcode.php HTTP/1.1" 500 275 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"

Osoite eliimatt.com viittaa virtuaalipalvelimen nimeen. GET /badcode.php viittaa HTTP pyyntöön, jolla pyydetään badcode.php nimistää dokumenttia. 500 viittaa HTTP statukseen, joka kertoo että sivun lataamisessa sattui serverin sisäinen virhe. Loppuosassa näkyvät selaimen tiedot.

Lähteet

The Apache Software Foundation 2012. Apache HTTP Server Version 2.4 Documentation.
http://httpd.apache.org/docs/2.4/

Cohen, James 2011. How to Avoid Character Encoding Problems in PHP.
http://webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/

Edwards, Christer 2008. Setting Up Name Based Virtual Hosting.
http://ubuntu-tutorials.com/2008/01/09/setting-up-name-based-virtual-hosting/

Emphatic Nonsense 2011. Enabling Apache’s PHP execution in User Directories on Ubuntu Lucid.
http://emphaticnonsense.com/2011/10/06/enabling-apache-php-execution-in-user-directories-on-ubuntu-lucid/

Karvinen, Tero 2012a. Short HTML5 page.
http://terokarvinen.com/2012/short-html5-page

Karvinen, Tero 2012b. Linux palvelimena ICT4TN003-4 kurssin kotisivu.
http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-4-ja-ict4tn003-6-syksylla-2012

PHP Manual 2012. Runtime Configuration.
http://php.net/manual/en/apache.configuration.php#ini.engine

Stackoverflow 2012. How to trigger 500 Internal Server Error in PHP?
http://stackoverflow.com/questions/8687390/how-to-trigger-500-internal-server-error-in-php

Ubuntu Community Help Wiki 2012. ApacheMySQLPHP.
https://help.ubuntu.com/community/ApacheMySQLPHP

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.