Ari Rantala -> Oppaat -> Apache Web-palvelin: muistiinpanot

2 . Asennus ja käyttöönotto

Kaksi tapaa asentaa Apache

Apache Web-palvelin on saatavissa joko

  • valmiiksi käännettynä pakettina erilaisille alustoille
    • lähdekoodina, jolloin palvelin pitää itse kääntää

      Lähes kaikessa käytössä pärjää valmiiksi käännetyllä versiolla. Jos kuitenkin halutaan räätälöidä mukaan vain halutut ominaisuudet ja/tai käyttää sellaisia moduleita (valmiita tai itse tehtyjä), joita ei valmiiksi käännetyssä ole mukana, on palvelin käännettävä itse.

    Ubuntu 16.04 LTS:n mukana tuleva Apache

    • Helpoin tapa asentaa
    Onnistunut asennus voidaan tarkistaa Linuxin asennuksen jälkeen komentoriviltä rpm-ohjelman listauksesta.

    sudo aptitude search ~iapache
    i apache2 - Apache HTTP Server
    i A apache2-bin - Apache HTTP Server (modules and other binary files)
    i A apache2-data - Apache HTTP Server (common files)
    i A apache2-utils - Apache HTTP Server (utility programs for web servers)


    // tai

    dpkg --get-selections | grep apache2
    apache2 install
    apache2-bin install
    apache2-data install
    apache2-utils install
    Apache2 voidaan asentaa helposti jälkikäteen:

    sudo apt install apache2

    Onko Web-palvelin käynnissä?

    Kun ohjelmat on asennettu, voidaan tarkistaa onko Web-palvelin päällä. Tämän voi tehdä tutkimalla palvelimen kuuntelemia tcp-portteja  netstat-komennolla:

    sudo netstat -an | grep :80
    ...
    tcp6 0 0 :::80 :::* LISTEN
    Palvelimen prosessilistaa tutkimalla voidaan myös selvittää, onko Web-palvelin käynnissä. Jos tiedetään, että Web-palvelinohjelmiston käynnistyskomennossa on merkkijono apache2, voidaan kaikki tällaisen merkkijonon sisältämät rivit suodattaa näkyviin prosessilistauksesta ps-komennolla:

    ps aux | grep [a]pache2
    root 4177 0.0 0.1 71584 4232 ? Ss 20:42 0:00 /usr/sbin/apache2 -k start
    www-data 4180 0.0 0.1 360740 6092 ? Sl 20:42 0:00 /usr/sbin/apache2 -k start
    www-data 4181 0.0 0.1 360740 6092 ? Sl 20:42 0:00 /usr/sbin/apache2 -k start

    $ pstree -p 4177
    apache2(4177)-+-apache2(4180)-+-{apache2}(4185)
    | |-{apache2}(4187)
    | |-{apache2}(4189)
    ...
    `-apache2(4181)-+-{apache2}(4184)
    |-{apache2}(4186)
    |-{apache2}(4188)
    ...

    Web-palvelin käynnistymään automaattisesti

    Jos HTTP-protokollan oletuksena käyttämä TCP-portti 80 ei ole kuunneltujen joukossa, niin Web-palvelin ei mitä todennäköisimmin ole käynnissä. Aluksi Web-palvelin kannattaa määritellä käynnistymään automaattisesti järjestelmän käynnistyksen yhteydessä käytetylle oletusajotasolle esimerkiksi komennolla:

    sudo systemctl enabled apache2.service
    Tuloksen voi tarkistaa komennolla:
    sudo systemctl is-enabled apache2.service
    enabled
    • Huom: Ubuntu 16.04 LTS:ssä edelliset pitäisi olla oletusarvoisesti päällä

    Edellä mainittujen toimenpiteiden jälkeen Web-palvelimen tulisi olla käynnissä seuraavien käyttöjärjestelmän uudelleenkäynnistysten jälkeen automaattisesti.

    Web-palvelimen käynnistäminen ja sammuttaminen

    Kun Web-palvelimen asetustiedostoja (konfigurointitiedostoja) on muokattu, Web-palvelin on käynnistettävä uudelleen asetusten aktivoimiseksi. Tätä tarvitaan esimerkiksi edellä mainitun ServerName-direktiivi -muutoksen käyttöönottamiseksi. Jos Web-palvelin ei ole käynnissä, yleensä riittää pelkkä käynnistys. Tarvittavat komennot ovat seuraavat:

    Web-palvelimen käynnistys:

    sudo systemctl start apache2.service

    Web-palvelimen sammutus:

    sudo systemctl stop apache2.service

    Web-palvelimen uudelleenkäynnistys:

    sudo systemctl restart apache2.service

    Komentojen jälkeen voidaan tarkkailla vaikkapa netstat-komennolla, onko Web-palvelin kulloinkin käynnissä.

    Web-palvelimen perustoiminnan varmistaminen HTML-dokumentein

    • Luodaan ja tallennetaan /var/www/html -hakemistoon hello.html -niminen dokumentti esim:

      <title>Tavallinen HTML-dokumentti: hello.html</title>
      <h1>Terve!</h1>
      Olen tavallinen HTML-dokumentti: hello.html
    • Varmistetaan/huolehditaan lukuoikeudet dokumentille hello.htm (esim chmod o+r hello.html)
    • Tarkistetaan selaimella, näkyykö sivu osoitteesta http://localhost/hello.htm  Jos kone on laajemmin verkossa näkyvillä, sivua voidaan katsella myös muualta korvaamalla localhost Linux-palvelimen ip-numerolla tai FQDN-nimellä

    Tavallisen käyttäjän web-dokumentit

    Ubuntu 16.04 LTS -järjestelmässä tavallisten käyttäjien julkiset web-hakemistot eivät ole oletusarvoisesti käytössä; ne pitää aktivoida ennen käyttöönottoa seuraavasti
    sudo a2enmod userdir
    sudo systemctl restart apache2.service
    Tämän jälkeen tavalliset käyttäjät voivat tarjota myös web-dokumenttejaan. Vakiintuneen käytännön mukaan tavalliset käyttäjät tallentavat web-dokumenttinsa kotihakemistonsa alle luotuun public_html -nimiseen hakemistoon.

    Asetusten toimivuuden voit testata seuraavasti. Aluksi luodaan tarvittaessa käyttäjätunnus testi ja annetaan samalla uusi salasana:
    sudo useradd -s /bin/bash -m testi
    sudo passwd testi
    Kun uusi käyttäjätunnus on luotu, voidaan esimerkiksi su-komennolla (substitute user) vaihtaa käyttäjätilaa
    su - testi
    Luodaan tarvittaessa public_html-hakemisto ja lisätään kotihakemistolle tarvittava suoritusoikeus (käyttöoikeus) muille, jotta public_html-hakemistosta olevia tiedostoja voidaan käyttää. Tarvittavat toimenpiteet tehdään seuraavasti
    mkdir public_html
    chmod 755 ~
    Kopioidaan tai luodaan hello.htm-dokumentti public_html-hakemistoon ja katsotaan tulosta osoitteesta http://localhost/~testi/hello.html Tarvittaessa voidaan palata pääkäyttäjäksi exit-komennolla.

    Informaatiota palvelimesta ja sen tilasta

    Joitakin raportteja saat esille osoitteesta http://localhost/server-status ja http://localhost/server-info Määritykset ovat tiedostossa /etc/apache2/mods-enabled/status.conf ja /etc/apache2/mods-enabled/info.conf. Info-moduuli pitää aktioida erikseen

    sudo a2enmod info
    sudo systemctl restart apache2.service

    Apachen kääntäminen ja asentaminen lähdekoodeista

    Suurimmaksi osaksi pärjätään Apache Web-palvelimen valmiiksi käännetyllä versiolla. Jos kuitenkin halutaan räätälöidä mukaan vain halutut ominaisuudet ja/tai käyttää sellaisia moduuleita (valmiita tai itse tehtyjä), joita ei valmiiksi käännetyssä ole mukana, on palvelin käännettävä itse.

    GNU-ohjelman kääntäminen lähdekoodeista

    Huom: Tämän osion yksityiskohdat testattu Ubuntu 16.04 LTS -järjestelmässä

    • Tarvitaan ohjelmointivälineet (GNU-projektin gcc, joka sisältää sekä C- että C++-kääntäjän; lisäksi tarvitaan make-ohjelma). Nämä sisältyvät lähes kaikkiin Linux-jakelupaketteihin. Ubuntu 16.04 Server LTS -järjestelmä sisältää tarvittavat välineet perusasennuksen jäljiltä:

      sudo aptitude search ~igcc
      i gcc - GNU C compiler
      ...
      sudo aptitude search ~imake
      i make - utility for directing compilation

    • Lähes kaikki Linuxiin tarjolla olevat ohjelmat ovat saatavilla myös lähdekoodimuodossa (GNU GPL-lisenssi).
    • Kääntäjän tehtävänä on kääntää "selväkielinen" lähdekoodi tietokonetta varten konekieliseen (binääriseen) ajokelpoiseen muotoon. Tätä sanotaan ohjelmiston kääntämiseksi. Ohjelmiston kääntäminen onnistuu ilman ohjelmointitaitojakin, kunhan lähdekoodit ja kääntäjä ovat käytettävissä, kuten Linux-ympäristössä.


    Syitä ohjelmistojen kääntämiseen lähdekoodeista ovat mm. seuraavat:

    • Halutaan mukaan toiminnallisuutta, jota valmiiksi käännettyyn kokoonpanoon ei ole mahdollista lisätä ilman runsasta lisätyötä.
    • Erittäin harvoin myös suorituskykyyn liittyvät asiat.
    • Ohjelmistojen aivan uusimmat versiot ovat yleensä saatavilla vain lähdekoodeina

    Pienen ohjelmiston kääntäminen

    • Yksittäiset lähdekoodit käännetään objektitiedostoiksi
    • Tuloksena syntyneet objektitiedostot ja valmiit kirjastot linkitetään ajokelpoiseksi ohjelmaksi.
    Vaihe vaiheelta se voisi näyttää seuraavalta:
    gcc -c ohjelman_osa1.c
    gcc -c ohjelman_osa2.c
    gcc ohjelman_osa1.c ohjelman_osa2.c -o toimiva_softa

    Kaksi ensimmäistä riviä on ohjelman erillisten lähdekoodien kääntämistä ja viimeinen rivi niiden linkittäminen ajokelpoiseksi ohjelmaksi nimeltä toimiva_softa.

    Isomman ohjelmiston kääntäminen

    Isoissa ohjelmistoissa on valtavasti käännettäviä ohjelmia erilaisine käännösvaihtoehtoineen. GNU-projekti on luonut standardin, jota lähes kaikki yleisesti käytettävät GNU-ohjelmat noudattavat. Tämän avulla erilaisten GNU-ohjelmien kääntäminen (koko käännösprosessi) noudattaa samaa yleistä periaatetta.

    Laajojen, useista erillisistä moduuleista koostuvien ohjelmien kääntämiseen käytetään make-ohjelmaa. GNU make käyttää joitain seuraavan nimisistä tiedostoista kääntämisessä: GNUMakefile, Makefile tai makefile. Jos ohjelmahakemistossa on configure-skripti, se suoritetaan ennen varsinaista kääntämistä. Se luo järjestelmän asetusten perusteella sopivan makefile-tiedoston ja tarkastaa samalla onko järjestelmässä vaadittavat kirjastot, ohjelmat sekä otsikkotiedostot asennettu. Lopuksi make-komento kääntää ohjelman ja make install asentaa ohjelman toimintakuntoon.

    Seuraavassa vaiheistettuna normaalin "isohkon" palvelinohjelmiston asentaminen kääntämällä lähdekoodeista.

    • cd /usr/local/src
      Yleensä itse asennettavien ohjelmistojen lähdekoodit puretaan tänne.

    • tar -xzvf polku/ paku_1.2.3.tar.gz
      Yleensä lähdekoodit on pakattu gzip-kompressoituun tar-pakettiin. Tässä purkukomento. Paketti sinänsä voi sijaita missä tahansa, kunhan siihen on lukuoikeudet.

    • cd paku_1.2.3
      Yleensä lähdekoodit "purkautuu" hakemistoon, jonka nimi on sama kuin paketin nimi ilman päätteitä.

    • Lue päähakemistosta löytyvät README- INSTALL-, tms. tiedostot Nämä sisältävät yleensä tiedot ohjelmiston käyttötarkoituksesta, lisenssistä sekä asennusohjeet.

    • ./configure
      configure-skripti selvittää, millaisessa ympäristössä ohjelmaa ollaan kääntämässä ja luo tämän perusteella mm. Makefilen. Tarvittaessa tehdään erillinen "konffaa"-skripti, joka kutsuu configurea tarvittavin parametrein.

    • make
      Varsinainen ohjelmiston käännös Makefile-tiedoston "ohjeiden" mukaan.

    • make install
      Ohjelmiston asennus. Ajokelpoiset ohjelmat, konfigurointitiedostot yms. kopioidaan paikoilleen. Yleensä ainakin tämä vaihe on tehtävä pääkäyttäjänä.

    • Käynnistetään ohjelma

    Esimerkki Apache Web-palvelinohjelmiston kääntämisestä
    Testattu toimivaksi Ubuntu 16.04 LTS -järjestelmässä!

    1. Haetaan ohjelmistopaketti esim. wget-ohjelmalla tallentaen se /tmp-hakemistoon:
     wget http://www.apache.org/dist/httpd/httpd-2.2.34.tar.gz

    2. Puretaan tar- ja gzip-ohjelmilla pakattu lähdekoodi hakemistoon /usr/local/src:

    cd /usr/local/src
    sudo tar -xzvf /tmp/httpd-2.2.34.tar.gz
    cd httpd-2.2.34

    3. Valmistellaan ohjelman asennus (eli luodaan makefile-tiedosto) ajamalla configure-skripti:

    sudo ./configure
    Jos configure-skriptin optioissa on mukana --show-layout, niin asentuva konfiguraatio näytetään, mutta mitään ei "oikeasti" tehdä! Lisätietoja configure-skriptin optioista saadaan komennolla ./configure –help

    4. Käännetään ohjelma (make) ja lopuksi annetaan make install -komento binääristen ohjelmatiedostojen, konfigurointitiedostojen ja ohjesivujen kopioimiseksi oikeaan paikkaan.
    sudo make
    sudo make install

    Vinkki: Konfiguroinnin, käännöksen ja asennuksen voi suorittaa myös taustalla. Esimerkiksi käännös voidaan suorittaa komennoilla:

    make >& make.log &
    tail -f make.log

    Tällöin make-ohjelma ajetaan taustalla ja sen ilmoitukset virheineen ohjataan tiedostoon make.log. Tail-komennon -f -optiota käyttäen voidaan katsella käännöksen aikana make.log -tiedoston viimeisiä rivejä. Se ei ole mitenkään välttämätöntä. Tail-komennon voi lopettaa missä tahansa vaiheessa esim. CTRL+C -näppäinyhdistelmällä.

    5. Avaa tiedosto /usr/local/apache2/conf/httpd.conf haluaamasi editoriin ja muuta rivi

    Listen 80

    muotoon

    Listen 8080

    jolloin kääntämäsi Web-palvelin ei toivottavasti kuuntele samaa porttia kuin järjestelmässäsi varsinaisesta pakettivarastosta asennettu ja toiminnassa oleva toinen Apache.

    6. Käynnistä komennolla

    $ sudo /usr/local/apache2/bin/apachectl start

    7. Testaa: Toiminnassa olevan Web-palvelimen indeksisivu on nähtävissä osoitteessa http://localhost:8080/

    Huomaa, että järjestelmässä voi olla asennettuna samaan aikaan sekä paketinhallinnalla asennettu versio että itse käännetty versio ohjelmasta. Tarkempia ohjeita Apachen kääntämiseksi löytyy tarvittaessa osoitteesta http://httpd.apache.org/docs-2.0/install.html