Otthoni webszerver Raspberry PI-ből

A napelemes PI-szerver

Igazán összetett és érdekes alkalmazás az, melynek folyamatosan érő (futó) gyümölcsét a pi.qcontinuum.com/ weboldalon csodálhatjuk meg. Ez az oldal ugyanis teljes mértékben egy Raspberry PI alapú webszerverre épül, melynek energiaellátását napelemek biztosítják. Az oldal meglepően fürge, és saját élettörténetét szolgáltatja: miként és milyen komponensekből építették fel, közben mikor és milyen problémákkal kellett megküzdeni. 2012-ben indult a kísérlet, melynek célja kideríteni, hogy hány éven keresztül lehet gyakorlatilag folyamatosan üzemeltetni egy PI-t webszerverként. Részletes beszámolókat találunk a leállásokról is.

Raspberry PI webszerver

Mivel a PI tápegység legfeljebb 3,5 W teljesítményt vehet fel, ezért igazán jelképes energiamennyiséggel is megy a rendszer. Bármelyik napelemtábla megtette volna, de a konstruktőrnek számolnia kellett azzal is, hogy a napfény nem áll rendelkezésre napi 24 órában, és a felhős időszakokban kevesebb energiát lehet kinyerni belőle. Végül 45 wattos panel mellett döntött, melyet egy 80 AH-s akkumulátor szolgál ki, és melynek töltöttségét úgy tudja megőrizni a rendszer, ha legalább naponta 2,4 órás hasznosítható mértékben napfényes időszak áll rendelkezésre. Az áramellátó rendszer feszültségét egy Arduino Unóból épített egység továbbítja a PI-hez, így a monitorozás is megoldott.

Raspberry PI webszerver

Néhány hónap után akkumulátorhiba miatt történt egy leállás, majd egy hónapra rá kiderült, hogy az energiaellátó rendszer nyáron kiválóan helytáll, de télen már nem. (A panelek nyugatra néztek, csak kevés fényt kaptak, azt is rossz szögben). A napelem nagyobbra cserélésével és délebbre tájolásával megoldódott a probléma. Amint látható, jelenleg a rendszer jó állapotú, stabil, tartalékokkal és nincsenek napi rendszerességű kilengések.

A Debian Squeeze kézi átkonfigurálásával és a tighttpd HTTP kiszolgálóval építették fel a rendszert szerveroldalról. Az indulást késleltette, hogy mikor a pi.qcontinium.com indult, akkor még a Raspberry PI hardverre is négy hónapot kellett várni. Érdekes tanulmányozni a projekt honlapját, mert az úttörő jellegű tapasztalatai más rendszerek felépítésekor is jól jöhetnek.

Olcsó webszervert tessék!

Az alapeset mégis csak az, hogy van áram a környéken. Ilyenkor leginkább az a kérdés merül fel, hogy miféle kiszolgálót szeretnénk faragni a Raspberry PI-ből. Leggyakrabban HTTP szervert építenek belőle, mivel ehhez nem feltétlenül szükséges semmiféle extra kiegészítő, csupán egy SD kártya, amin a rendszer is less, és aminek kapacitásáig gazdálkodhat majd a webkiszolgálónk is. Lehet persze bővíteni wifiadapterrel, vagy épp kamerával, saját tápellátású USB merevlemezzel, de most maradjunk a szimpla SD-kártyás szervernél. Az alábbi példában végigvezetünk egy középszintű felhasználót a telepítés lépésein. Nem árt, ha az olvasó látott már Linux rendszert, bár ez sem feltétlenül szükséges. Grafikus felületen puhított felhasználóknak szólunk, hogy a Parancssorban (Terminal) sokat kell majd gépelnünk, de ha valaki végigmássza a betűkupacot, közben óhatatlanul felismer összefüggéseket, így a túra akár még hasznos is lehet. Mellesleg a példa lényegi része (SSH, hálózat konfigurálása és a további lépések) nem csak PI-n, hanem számos Debian-alapú Linux disztribúción bevethető. A végeredmény egy Apache2 feltelepítve, mely egy statikus honlapot szolgáltat. Számos finomítás hiányzik a példából, ezért elnézést is kérünk, de kellő érdeklődés esetén folytathatjuk is – mondjuk a MySQL feltelepítésével, amire akár egy Wordpresst is húzhatnánk, ha épp erre van igény. Mindenesetre ez mély víz, kezdők számára elkel a sokat látott haladók és profik segítsége akár itt, a hozzászólásokban is. (Előre is köszönjük!)

Raspberry PI webszerver

Alaprendszernek megteszi a Raspbian (Debian Wheezy portja PI-re), ami a NOOBS installer révén telepíthető fel legkönnyebben: az SD kártyára: letöltjük a NOOBS rendszert, ami egy ZIP archívum, majd szemérmetlen egyszerűséggel rámásoljuk az üres, lehetőleg frissen FAT32-re formázott SD kártyára. A NOOBS használatát már ismertettük legutóbbi cikkünkben, nem lesz nehéz. Fogadjuk meg a telepítő ajánlását, és válasszuk a Raspbiant. Innentől elég egyértelmű a folyamat a már meglévő leírásunk további fejezetei alapján.

Ha jobban bíznánk a hagyományos módszerekben, akkor letölthetjük kapásból a Raspbian képállományt is. A ZIP archívumból persze ki kell bontani az img kiterjesztésű lemezkép állományt, majd Windows alatt a Win32 Diskimager, vagy Linux alatt a dd parancs segítségével írjuk ki egy SDHC kártyára. A hivatalos minimum a 2 GB, de jobban járunk, ha legalább 6 GB-os kártyával próbálkozunk.

Raspberry PI webszerver

A Diskimager használata teljesen magától értetődő, az Image file melletti fájlmegnyitás ikonra bökve válasszuk ki az imént letöltött img állományt, a device listából pedig azt a meghajtót, mely a felülírandó SD kártyát rejti. Célszerű nem eltéveszteni, hogy melyik meghajtó is az, mivel annak tartalmát törli a program. Ezután csak meg kell nyomni a Write gombot, és kivárni a műveletet: ez jó néhány percig eltarthat.

A dd parancs használata kicsit több jártasságot kíván meg, így, lévén mindenre kapható blokkmásoló eszköz, kezdőknek nem ajánljuk. Itt is fontos, hogy tudjuk a célmeghajtó (nem partíció!) nevét, amit a grafikus felülethez szokott linuxozók a Lemezek alkalmazásban deríthetnek ki. Példánk esetében ez a /dev/sdb lesz.

Raspberry PI webszerver

Az első lépések

A legegyszerűbb, ha felkeressük a Letöltések mappát, és ott a jobb egérgombos menüből indítjuk a Megnyitás terminálban pontot, így egyből ott találjuk magunkat. A dd parancs if paramétere a bemeneti, az of pedig a kimeneti állomány megadására szolgál – az alábbi példában látható, hogy miként paraméterezendő az aktuális Raspbian verziót letöltve. (A sudo parancs és a jelszó a rendszergazdai jogosultság kedvéért szükséges.) A sikeres jelszóbevitel után csak a kurzort láthatjuk, semmilyen progressziókijelzés nincs, de ne essünk kétségbe, tíz percig is eltarthat a művelet.

Raspberry PI webszerver

Telepítsük fel a Raspbbiant, ahogy azt előző cikkünkben már részleteztük, adjuk meg a módját a nyelv, billentyűzet, unicode beállításával. Néhány Raspbian-verzióval ezelőtt még be kellett volna kapcsolnunk az SSH szolgáltatást is, de ez a legújabb rendszerben már alapértelmezetten aktív, hagyjuk is úgy. Ez segít majd abban, hogy monitor, billentyűzet és egér használata nélkül, egy másik gépről érhessük el a PI kezelőfelületét.

Miután az SSH már adott, ne mulasszuk el a hostname beállítását, ez az a név, amin elérhetővé teszi magát a PI a helyi hálózaton. Ha grafikus módban indulna el a Raspbian, akkor egy Terminal ablakba gépeljük be az alábbiakat, egyébként úgyis a parancsor van előttünk. Idézőjelek között szedtük, amit be kell írnunk (minden sor végén kell Enter persze) – a Linux-guruk jól megmosolyognak minket, de a többieknek hasznosak lehetnek a magyarázatok.

  • "sudo -i" – Az ezután következő parancsokat rendszergazdai jogosultsággal futtatja a rendszert, ezért be is kéri az admin jelszavát.
  • "nano /etc/dhcp/dhclient.conf" – Elindul a szövegszerkesztő. Keressük meg a "#send host-name "xxxxxx";" (mostanában az xxxxxx helyén isandare.fugue.com olvasható), majd távolítsuk el a "#" jelet a sor elejéről. A # ugyanis kommtezéssé minősíti a sort, amit a jel kitörlésével élesítettünk.

Írjuk át az xxx-et egy könnyen megjegyezhető névre, legyen pl. “raspberrypi”.

A változtatások a <Ctrl+X> billentyűkombinációkkal menthetők. A program rákérdez a mentésre (<i> magyar, <y> angol billentyűzetkiosztás esetén ment).

Ahhoz, hogy érvényre jussanak a változtatások, újra kell indítani a hálózati adaptert, ha vezetékes hálózaton trónol a PI, akkor az alábbi parancsokkal lehet rendre leállítani és újraindítani azt:

“ifdown eth0”

“ifup eth0”

Az adapter elindul, címet kér, és végül visszaadja a promptot, azaz gépelhetünk. A “halt” paranccsal állítsuk le a PI-t, ez eltarthat néhány másodpercig. Ha kész, akkor húzzuk ki a tápkábelt, majd úgy öt másodperc várakozás után csatlakoztassuk újra. Most már nem lesz szükségünk a monitorra és a beviteli eszközökre, a megadott kiszolgálónévvel elérhető lesz az eszköz SSH kliensekből.

Putty

Mi a Putty-ra esküszünk, mely ingyenes eszköz, rendelkezésre áll Linux és Windows alatt is. Ha mégsem találja meg a kliens, akkor meg lehet nézni a router DHCP táblájában, hogy melyik IP címet kapta a PI (pl. 192.168.1.104), és ennek megadásával csatlakozni. Az alapértelmezett SSH protokoll és a 22 port fix. Ja, ha a router nem kínálna listát a csatlakozott kliensekről (pl. LAN setup, DHCP clients, clients list vagy más menüpontban), akkor áramtalanítsuk, válasszuk le, tapossuk meg és dobjuk ki. Ebben a sorrendben, és szerezzünk helyette egy normálisat.

Raspberry PI webszerver

Raspberry PI webszerver

Az első alkalommal biztonsági figyelmeztetést kapunk, miszerint a titkosítókulcs nem tanúsított, vagyis nem lehetünk biztosak abban, hogy az eszköz az, akinek vallja magát. Helyi hálózatról lévén szó, most higgyünk neki, és a Yes megnyomásával fogadjuk el a kulcsot. Innentől a Putty (vagy más SSH-kliens) úgy működik, mint egy terminálablak, amit a PI-n nyitottunk. Be kell lépnünk a felhasználónevünkkel és jelszavunkkal, ez utóbbit egyébként nem árt megváltoztatni a “passwd” paranccsal. Ne felejtsük előle a “sudo”-t sem, vagyis a teljes parancs “sudo passwd pi”!

Raspberry PI webszerver

Az automatikus csomagfrissítéshez adjuk ki a “sudo apt-get update” parancsot. Ha hibaüzenettel megszakadna a művelet, akkor később próbálkozzunk újra.

Ezután jöhet a webkiszolgáló komponensek telepítése a következő elegáns mantrával: “sudo apt-get install apache2 php5 libapache2-mod-php5”. A felsorolt komponensek bekerülnek a rendszerünkbe, ha a közben felmerülő kérdésekre igennel (<i> vagy <y> nyelvtől függően) válaszolunk. Ha a webfelhasználó jogosultságaival kapcsolatos hibát írna ki a rendszer, akkor futtassuk a következő sorokat:

“sudo groupadd www-data”

“sudo usermod -g www-data www-data”

“sudo service apache2 restart”

Ha minden rendben ment, akkor a hostname vagy IP cím böngészőbe gépelésére fel kell tűnnie az Apache üzenetnek:

Raspberry PI webszerver

<

Még néhány teendő

Ezután a htacces kedvéért át kell írnunk a konfigurációs állományt. Gépeljük be a Putty parancssorába a “sudo nano /etc/apache2/sites-enabled/000-default” parancsot és kedvenc szövegszerkesztőnkben keressük meg az AllowOverride bejegyzést. Ezt AllowOverride None-ról állítsuk át AllowOverride ALL-ra. Kilépéskor mentsünk (<Ctrl><x> majd <i> vagy <y>, aztán <ENTER>). Hogy a változások a webszerverre is kihassanak, ahhoz kell egy Apache-újraindítás is, amit a “sudo service apache2 restart” paranccsal kezdeményezhetünk.

Raspberry PI webszerver

Nem lenne hátrány, ha a weblapot valahogy fel is tudnánk tölteni a szerverre, amihez az FTP-kiszolgáló az egyik legkényelmesebb eszköz, például konkrétan a vsftp. Telepítése előtt legjobb, ha átállítjuk a www-data mappa és almappái tulajdonosát a következőképp: “sudo chown -R pi /var/www”. (Ettől a pi felhasználó lesz a www-data könyvtár tulajdonosa, így tudunk majd feltölteni.) Ezután jöhet a vsftp telepítése: “sudo apt-get install vsftpd”. Ha elkészült, akkor kell egy keveset matatni a konfigurációs fájlban, amit ismét a nano segítségével szerkeszthetünk elegánsan ezzel a paranccsal: “sudo nano /etc/vsftpd.conf”. Az alábbiakat változtassuk meg:

  • az “anonymous_enable=YES” bejegyzést állítsuk “anonymous_enable=NO”-ra.
  • szedjük ki a duplakeresztet (#) a “local_enable=YES” bejegyzés elől, azaz élesítsük.
  • tegyük ugyanezt a “write_enable=YES” sorral is.
  • adjunk hozzá egy sort a fájl legaljához, ezzel a tartalommal: “force_dot_files=YES”
  • kilépéskor mentsünk (<Ctrl><x> majd <i> vagy <y>, aztán <ENTER>).

Raspberry PI webszerver

Raspberry PI webszerver

Kész!

Jöhet a szerver újraindítása: “sudo service vsftpd restart”.

Ezt követően már csak fel kell tölteni statikus weblapunkat a szerverre, a “var/www” mappába. Nekünk a FileZilla kliens vált be, de gyakorlatilag bármilyen FTP-szerzet megteszi. Csatlakozzunk az eszköztár gyorssávjával (host-name vagy IP, “pi” loginnév és az általunk megadott jelszó kell, port a 21-es), majd vontassuk át az előre elkészített honlapunk fájljait, felülírva a szerver mintaként ott állomásozó index.html állományát.

Raspberry PI webszerver

Ezután már csak be kell állítanunk a feltöltött fájlok engedélyeit, ezt megtehetjük a FileZilla szerveroldali paneljén a már feltöltött állományokat kijelölve, a jobb gombos egérmenü Engedélyek pontjával.

Raspberry PI webszerver

Ha beállítjuk a csoportos és nyilvános engedélyekre az olvasást, akkor már böngészőből is meg tudjuk nézni a weboldalt.

Raspberry PI webszerver

Raspberry PI webszerver

Azóta történt

Előzmények

  • Nagyon durva hiba miatt kerültek veszélybe a webszerverek

    A OpenSSL-t használó szerverek esetében a támadók gyakorlatilag minden fontos adathoz hozzájuthatnak.