Linux E X P R E S

Facebook

Domácí počítačová síť - 8

sit.png

Aktuálním tématem seriálu bude LAMP server. Pokusím se popsat jednotlivé problémy, které mohou při jeho instalaci nastat a nad kterými někdy kroutí hlavou jak začátečníci, tak i ostřílení linuxáci. Dále si řekneme něco o tom, kterak využít vlastní skript k monitorování linky za pomocí nástroje MRTG.


Instalace MySQL

V první řadě si nainstalujeme MySQL. Tento databázový systém v budoucnu můžeme využít ve spojení s několika desítkami programů nebo například při tvorbě webového portálu. Pro správnou a plnohodnotnou funkci MySQL budeme potřebovat tři balíčky – mysql-server, mysql-client a libmysqlclient15-dev. Instalace serveru a veškerých potřebných utilit spočívá v zadání příkazu

apt-get install mysql-server mysql-client libmysqlclient15-dev

Možné problémy s MySQL

Integrace MySQL do systému by měla proběhnou v pořádku a bez jakéhokoliv chybového hlášení. V opačném případě (většinou při přechodu na novější verzi MySQL) se v logu (soubor /var/log/daemon.log) objeví chybová hláška typu: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'. Nejčastější příčinou tohoto hlášení jsou špatně nastavená práva, nevhodně vytvořená databáze, popřípadě chybějící loopback interface. Nejprve tedy zkontrolujeme práva MySQL. Adresář /var/run/mysqld by měl mít práva pro uživatele mysql a skupinu root. Soubory v tomto adresáři musí mít práva uživatele mysql a skupiny mysql. V případě, že tomu tak není, napravíme to příkazem

chown mysql:root /var/run/mysqld && chown -R mysql:mysql /var/run/mysqld/*

Dalším adresářem, kterému věnujeme svou pozornost, je /var/lib/mysql. Nejprve zkontrolujeme jeho obsah. Pokud neobsahuje žádné soubory, znamená to, že MySQL nemá vytvořenou žádnou databázi. To napravíme příkazem mysql_install_db. Jelikož tuto operaci děláme pod superuživatelským účtem, nezapomeneme nastavit správné atributy adresáři i jednotlivým souborům příkazem

chown mysql:mysql /var/lib/mysql && chown -R mysql:mysql /var/lib/mysql/*

Jakmile máme hotovo, restartujeme MySQL (/etc/init.d/mysql restart). Pakliže i teď zpozorujeme chybové hlášení, pokusíme se veškeré soubory týkající se MySQL odstranit a následně nainstalovat znovu. Aktuálně nainstalované soubory týkající se MySQL zjistíme příkazem dpkg -l | grep mysql. Ve výpisu bychom měli vidět přibližně následující.

ii  libdbd-mysql-perl        3.0008-1                        A Perl5 database interface to the MySQL data
ii  libmysqlclient15-dev     5.0.32-7etch1                   mysql database development files
ii  libmysqlclient15off      5.0.32-7etch1                   mysql database client library
ii  mysql-client             5.0.32-7etch1                   mysql database client (meta package dependin
ii  mysql-client-5.0         5.0.32-7etch1                   mysql database client binaries
ii  mysql-common             5.0.32-7etch1                   mysql database common files (e.g. /etc/mysql
ii  mysql-server             5.0.32-7etch1                   mysql database server (meta package dependin
ii  mysql-server-5.0         5.0.32-7etch1                   mysql database server binaries

Standardně se balíčky v systému odebírají příkazem apt-get remove. Ten však nemaže jednotlivé konfigurační soubory, a proto mu zadáme ještě parametr --purge, který tak učiní. V případě, že bych chtěl ze svého systému odstranit kompletní MySQL, napsal bych podle výše uvedeného výpisu:

apt-get --purge remove libdbd-mysql-perl libmysqlclient15-dev libmysqlclient15off mysql-client mysql-client-5.0 mysql-common mysql-server mysql-server-5.0

Po úspěšném odebrání balíčků se pokusíme MySQL opět nainstalovat za pomoci

apt-get install mysql-server mysql-client libmysqlclient15-dev

Pakliže nenastane žádný problém, MySQL démon by měl na naslouchat na některém z vnitřních portů počítače. Tento stav lehce ověříme zadáním netstat -lnp --unix|grep mysql . Terminál by nám měl odpovědět přibližně takovýmto hlášením:

unix  2      [ ACC ]     STREAM     NASLOUCHÁ    21282    9161/mysqld         /var/run/mysqld/mysqld.sock

Konfigurace MySQL

Posledním krokem při instalaci MySQL serveru je konfigurace databáze. Tu provedeme pomocí mysql_secure_installation. Vzhledem k tomu, že detailní popis tohoto programu vyšel v minulém čísle časopisu LinuxEXPRES pod názvem MySQL pro zelenáče, je celkem zbytečné ho zde opakovat.

LAMP server

Doslova hitem posledních let je „věc“ skrývající se pod zkratkou LAMP. Ta označuje výtečné spojení operačního systému Linux, webového serveru Apache, databázového serveru MySQL a programovacího jazyka PHP (nebo Perlu či Pythonu). Protože Linux a MySQL na počítači máme, zbývá nám tedy doinstalovat Apache server s podporou PHP.

PHP (rekurzivní zkratka PHP: Hypertext Preprocessor, „PHP: Hypertextový preprocesor“, původně Personal Home Page) je skriptovací programovací jazyk, určený především pro programování dynamických internetových stránek. Nejčastěji se začleňuje přímo do struktury jazyka HTML, XHTML či WML, což je velmi výhodné pro tvorbu webových aplikací. PHP lze ovšem také použít i k tvorbě konzolových a desktopových aplikací. Zdroj: http://cs.wikipedia.org/wiki/Php

Instalace Apache serveru

Pro základní instalaci webového serveru obvykle postačuje do terminálu zadat apt-get install apache2 . Vzhledem k tomu, že na našem stroji ale poběží také PHP, které nepodporuje takzvaný threading, bude vhodné defaultní jádro Apache (mpm-worker) nahradit jiným – a to konkrétně tím z balíčku apache2-mpm-prefork. S výhledem do budoucna je ještě záhodno nainstalovat balíčky apache2-utils a apache2-doc. První z balíčků obsahuje například utility pro práci s logy či autorizačními soubory, ve druhém pak nalezneme poměrně obsáhlou dokumentaci k serveru. Kompletní instalace se spustí po odentrování

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils

Je možné, že po instalaci potřebných balíčků (nebo při restartu Apache serveru) uvidíte následující hlášku:

Forcing reload of web server (apache2)...apache2: apr_sockaddr_info_get() failed for gateway
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
apache2: apr_sockaddr_info_get() failed for gateway
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Nepodléhejte panice. Apache nám tím značí, že nedokázal rozpoznat FQDN serveru. To můžeme napravit dvěma způsoby. Prvním z nich je přímá editace hlavního konfiguračního souboru Apache (/etc/apache2/apache2.conf). Na konec tohoto souboru dopíšeme řetězec ServerName a FQDN našeho serveru. U mě tento řádek vypadá následovně:

ServerName gateway.hodza.net

Druhou možností je zeditovat soubor /etc/hosts, kam napíšeme adresu 127.0.1.1 a FQDN stroje například takto: 127.0.1.1 gateway.hodza.net . Nakonec nezapomeneme Apache server restartovat (/etc/init.d/apache2 restart), aby se změna projevila. Funkčnost ověříme, jestliže si nainstalujeme jeden z textových prohlížečů stránek (apt-get install links nebo apt-get install lynx) a zadáme do něj adresu našeho web serveru (links gateway.hodza.net). V případě, že jsme byli úspěšní, přivítá nás poněkud komická výchozí stránka.

Obrázek:  1.jpg

Prostě funguje!

Instalace PHP

Apache server máme funkční a zbývá přidat podporu pro jazyk PHP. Nejdůležitější jsou pro nás balíčky libapache2-mod-php5, php5, php5-common. Tyto balíčky obsahují samotný interpreter jazyka a modul pro integraci do Apache serveru. My si však nainstalujeme ještě další knihovny, které základní možnosti jazyka PHP rozšíří například o funkce pro práci s grafikou, e-mailem či právě MySQL. Provedeme tak příkazem

Technická poznámka: Celý výpis je na jeden řádek (odstraňte znak \ ).

apt-get install libapache2-mod-php5 php5 php5-common php5-curl \
php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json \
php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps \
php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Jak je u Debian Linuxu zvykem, celý proces instalace proběhne automaticky, pouze v jednom kroku budeme dotázání, zda-li chceme instalovat balík libc-client s podporou či bez podpory Maildiru. Vybereme volbu Ano a necháme průvodce, aby instalaci dokončil.

Obrázek:  2.jpg

Podpora Maildir u libc-client

Test funkčnosti

Bývá vhodné vyzkoušet, zda-li je PHP funkční. Asi nejrychlejší metodou, jak to zjistit, je vytvoření nového PHP souboru na serveru. To provedeme zadáním touch /var/www/index.php . Je zbytečné, aby soubor měl práva superuživatele, a proto je opravíme příkazem

chown www-data:www-data /var/www/index.php

Pomocí oblíbeného editoru pak do souboru index.php vložíme krátký řetězec <?php phpinfo(); ?> . Jedná se o funkci, která vypíše základní informace o serveru, konfiguraci PHP a jeho aktivních modulech. Abychom však na tento soubor mohli přistupovat, je ještě potřeba v souboru /etc/apache2/sites-available/default zakomentovat znakem # řádek, ve kterém se vyskytuje řetězec RedirectMatch ^/$ /apache2-default/ (zakomentovaný příkaz se stará o to, aby veškeré požadavky byly přesměrovány na stránku „It Works“). Po uložení a rychlém restartu Apache (/etc/init.d/apache2 force-reload) se nám musí po zadání IP adresy či doménového jména zobrazit stránka PHPinfo. Pokud tuto stránku vidíte, gratuluji vám – máte úspěšně nainstalovaný LAMP server.

Obrázek:  3.jpg

Informace o PHP

Monitoring s MRTG

S ohledem na to, že další díl seriálu budete číst až za měsíc, je zbytečné, abychom nevyužili potenciál nainstalovaného serveru. Za pomocí jednoho skriptu se pokusíme sledovat kvalitu linky k našemu stroji. Možná tak odhalíme, že náš provider mívá drobné výpadky, které by v budoucnu – v „ostrém provozu“ mohly znamenat velký problém.

Pro monitoring linuxových strojů a jejich služeb se velmi často používá MRTG. Jedná se o sadu perlovských skriptů, které jsou schopny ze správně dodaných textových informací vytvořit kýžený graf. MRTG „nalákáme“ do systému příkazem apt-get install mrtg. Při instalaci budeme dotázáni, zda-li má být jeho hlavní konfigurační soubor vytvořen pouze s právy uživatele MRTG. Tuto volbu potvrdíme stiskem tlačítka Ano, neboť konfigurační soubor bude později obsahovat citlivé údaje.

Obrázek:  4.jpg

Nastavení práv pouze pro uživatele MRTG

Po samotné instalaci se nám vytvoří v adresáři /var/www/ adresář mrtg, do kterého bude program ukládat veškerá svá data včetně vygenerovaných grafů. Tento adresář prozatím necháme ležet ladem. Vytvoříme si pouze například v adresáři /usr/local/bin spustitelný skript, pomocí něhož se budeme dotazovat na dostupnost nějaké adresy.

Nástroj ping (Packet InterNet Groper) je program určený pro detekci času odezvy počítače (nebo síťového zařízení) v počítačové síti typu IP. Názvem ping se označuje i vlastní metoda určení času odezvy síťového zařízení. Nástroj ping je standardní nástroj pro správu IP sítí. Zdroj: http://cs.wikipedia.org/wiki/Ping_(počítačová_síť)

touch /usr/local/bin/mrtg_ping.sh
chmod +x /usr/local/bin/mrtg_ping.sh

Jeho obsah bude následující:

#!/bin/bash
PING="/bin/ping"
ADDR="$1"
DATA=`$PING -c 15 -s 500 $ADDR -q `
LOSS=`echo $DATA | awk '{ lost=gensub("^.* ([0-9]+)% packet loss.*$","\\\\1","g"); print lost; }'`
echo $LOSS
if [ $LOSS == "100" ];
then        echo 0
else        echo $DATA | awk -F/ '{print $5 }'
fi

Popis skriptu

Na začátku definujeme příkazový interpreter, přes který skript poběží (v našem případě /bin/bash) a dále pak cestu k binárnímu souboru ping. Řádkem začínajícím slovem DATA určujeme parametry pingu. V tomto případě se provede 15 pingů o velikosti 500 bajtů. Parametr -q značí, že ping nebude „ukecaný“. Ostatní řádky se postarají o to, aby byl zobrazen pouze výsledek (nebo 0 v případě neúspěchu). Za povšimnutí stojí program awk, který se stará o filtraci dat. Ten totiž v systému ještě nemáme, což se však dá velice rychle napravit (apt-get install gawk). Jakmile máte skript vytvořený, otestujte ho napsáním /usr/local/bin/mrtg_ping.sh www.google.com . Odpověď skriptu musí být dvě čísla pod sebou. V opačném případě jste skript špatně opsali nebo nejste funkčně připojeni do internetu.

Jakmile máme odladěno, pokračujeme dalším krokem, což je editace hlavního konfiguračního souboru MRTG (/etc/mrtg.cfg). Jeho veškerý obsah vymažeme a vložíme do něj následující text.

EnableIPv6: no
WorkDir: /var/www/mrtg
Title[localhost_ping-google]: <H1>Round Trip Time pro www.google.com</H1>
Target[localhost_ping-google]: `/usr/local/bin/mrtg_ping.sh www.google.com`
SetEnv[localhost_ping-google]: MRTG_INT_IP=""
MRTG_INT_DESCR="www.google.com"
MaxBytes[localhost_ping-google]: 2000
Options[localhost_ping-google]: growright,unknaszero,nopercent,gauge
PageTop[localhost_ping-google]: <H1>Round Trip Time pro www.google.com</H1>
LegendI[localhost_ping-google]: Ztrata paketu %
LegendO[localhost_ping-google]: Prumerny RTT
Legend1[localhost_ping-google]: Maximalni RTT (ms)
Legend2[localhost_ping-google]: Minimalni RTT (ms)
YLegend[localhost_ping-google]: RTT (ms)

Jakmile soubor uložíte, systém začne po patnácti minutách postupně vytvářet grafy dostupnosti serveru www.google.com. Tyto grafy naleznete v adresáři /var/www/mrtg. Abychom si mohli data pohodlně zobrazovat v okně svého prohlížeče, vytvoříme ještě takzvanou indexovou stránku. Celý proces spočívá v zadání

/usr/bin/indexmaker --output=/var/www/mrtg/index.html --title="Statistiky site" /etc/mrtg.cfg

Tímto povelem MRTG načte ze svého konfiguračního souboru (/etc/mrtg.cfg) podstatné informace a vygeneruje statickou HTML stránku, kterou umístí do adresáře /var/www/mrtg. Vygenerovaná stránka obsahuje různé statistické údaje, popisky a hlavně grafy RTT.

Obrázek:  5.jpg

Grafy MRTG

Jestliže je vše v pořádku, objeví se vám po zadání adresy vašeho serveru/mrtg v prohlížeči (u mě http://gateway.hodza.net/mrtg) první graf. Po jeho rozkliknutí můžete zhlédnout dokonce statistiky a grafy za různá období podobně, jako je tomu na následujícím obrázku.

Obrázek:  6.jpg

Podrobné grafy MRTG

Dnes jsem se snažil popsat nejčastější problémy, se kterými jsem se během své praxe při instalaci Apache a MySQL serveru setkal. Do budoucna se budeme těmto dvěma tématům ještě mnohokrát věnovat a na jednotlivých příkladech si popíšeme desítky nových konfiguračních voleb, o kterých zatím ještě nevíte. Nechte se ale překvapit. Prozatím vám mohu alespoň slíbit, že příště budeme pokračovat v detailnějším povídání o MRTG.

Diskuze (14) Nahoru