2013. április 6.

Tiny Tiny RSS szerver telepítése Raspberry Pi alá (a Google Reader helyett)

Nyáron bezár a Google Reader, ezért keresem a többplatformos RSS olvasó alternatívákat. A Tiny Tiny RSS, más néven tt-rss egy szerverre telepíthető webes és mobilwebes kimenetet biztosító megoldás, mely szinte egy az egyben klón. A Raspberry Pi egy kisméretű olcsó szerver, melyből RSS olvasó webszervert készítettem.
Megjegyzés: Ez a bejegyzés kifejezetten annak rögzítésére szolgál, milyen lépéseket kell egy nagyon kezdő usernek végrehajtania a fent említett vason. Így nem nagyon fogok kitérni se a Raspi-ra, se a tt-rss használatára, csak vázlatosan említek meg pár dolgot. Az alábbi telepítési útmutató részleteit a netről halásztam össze, és sokat segített +Ferenc Nagy támogatása. Ezúton köszönöm meg újra és újra azt a sok segítséget, amit a Linux világába lépve a Raspi kapcsán nyújtott.

Raspberry Pi szerver

Raspberry Pi egy okostelefon tudásával felruházott, SD kártyás, USB portos, HDMI és RCA videó, illetve 3,5" sztereó hangkimenetes mini PC. Az alap operációs rendszere egy rá portolt Debian Linux, azonban még Android port is létezik rá. Az általam használt "B" verziós modell 512 MB RAM-mal van szerelve, és az alap CPU órajele 700MHz-es, és egy 8GB SD-n van a rendszer. A LAN Ethernet kábellel érhető el, wifi nincsen benne. A http://malnapc.hu/yis/malna-pc-es-tartozekai/kit oldalon akadtam rá, de van több beszerzési forrása is, akár külföldről is. Panelekkel akár robot szintig bővíthető. Az alap szett ára bruttó 15.000 és 25.000 Ft között mozog. Azonban az alacsony ára nem azt jelenti, hogy teljesen kivált egy célra szabott média lejátszót, vagy egy az egyben megfelel egy két- vagy négymagos Android mini PC-nek. Nem. A rpi egy oktatási céllal készült, hogy fejlesszék az arra hivatott műszaki érdeklődésűek tudásukat, és kitaláljanak olyan eszközöket, melyek csak drágán érhetőek el nagyobb vagy célraszabottabb tudással.
A hivatalos weboldal: http://www.raspberrypi.org

A Tiny Tiny RSS szerver

A tt-rss.org projektet egy fejlesztő készíti, a támogatásokból tartja fenn magát. A szerver szoftver tehát ingyenes. Egy az egyben igyekszik kielégíteni a Google Reader hírolvasót körülvevő geek igényeket. Azaz ami megszűnt létezni abban, az még ebben is benne van, és tovább is fejleszthető, pluginekkel bővíthető, a kinézet egyszerűen CSS módosításokkal átalakítható. A frissítése egyszerű, a telepítése azonban már nehezebb. A folyamatos újdonságok során felbukkannak új hibák, és erős módosítások, így komolyabb utókövetést követel meg. Azonban nagyon stabil, nagyon jól használható, és nagyon tetszik. Többet tud és okosabb mint a Selfoss.

Én konkrétan már ezt használom, mert:
A RaspBerry Pi-t nem igen terheli meg, mindössze a feed frissítés lassítja a vasat. Azonban a hírek olvasása ekkor sem lassabb, mint a Feedly féle erőforrás zabáló Chrome vagy Firefox kiegészítője. A webes felületről, majd a mobilosról, és az Android szoftverről képek:

  

Webszerver és adatbázis telepítése és beállítása

  • Terminál ablakban telepítettem a lighttpd, php5, mysql komponenseket:
sudo apt-get install lighttpd php5-cgi php5-common php5-gd php5-mysql php5-sqlite mysql-client mysql-common mysql-server sqlite php5-cli phpmyadmin
  • Ha letöltésnél a telepítés előtt rákérdez, a nyelvtől függően "I" vagy "Y" gomb, majd "Enter" és megy tovább.
  • mysql majd kér egy jelszót kék ablakban, ami a mysql jelszava lesz. Jegyezd meg, kell majd.
  • lighttpd beállítása a következő lépés. A nano segítségével megnyitottam a konfigurációs fájlt szerkesztésre:
sudo nano /etc/lighttpd/lighttpd.conf
  • Engedélyeztem az alábbi modulokat, ami nem volt ott, azt felvezettem, a sor elejei #-t töröltem:
server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
        "mod_rewrite",
        "mod_fastcgi",
)
  • lighttpd.conf fájlban a server.port sorban a portot módosíthatod 80-ról 8080-ra, ha azon át akarod a webes elérhetőséget biztosítani.
  • A konfigurációs fájl végére mentem, és felvezettem a php engedélyezéséhez szükséges sorokat:
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))
  • Ezután elmentettem a fájlt (CTRL+O, majd Enter), majd kiléptem a szerkesztésből (CTRL+X).
  • lighttpd újraindítása következett:
sudo service lighttpd restart
  • Ha volt más is, és nem jutott eszembe, bocs. Pótolni fogom! :)

A tt-rss telepítse

  • Hozz létre egy könyvtárat tt-rss néven a webszerveren (ez lesz egyeben az elérése http://your.site.com/tt-rss/install/ alakban, így más nevet is adhatsz, de figyelj arra, ha máshol ezt a paramétert majd módosítanod kell az eltérő név miatt):
cd /var/www/
sudo mkdir tt-rss
  • Töltsd le a legfrissebb tt-rss telepítőt (a lap alján találod a linket): http://tt-rss.org
  • Valami ilyesmi lesz a fájl neve: Tiny-Tiny-RSS-1.x.x.tar.gz
  • Így is töltheted le és csomagolhatod ki terminálból, ha tudod a fájl nevét (végén letöltött fájl törlése):
cd /var/www/tt-rss/
wget http://tt-rss.org/download/tt-rss-1.x.x.tar.gz
tar xfv tt-rss-1.x.x.tar.gz
mv tt-rss-1.x.x/* .
rm -r tt-rss-1.x.x

  • Osszuk ki a megfelelő jogokat a szükséges könyvtárakhoz:
sudo chmod 777 feed-icon
sudo chmod 777 lock
  • Ha jól sikerült a művelet, akkor be is léphetsz a telepítést segítő install könyvtárba böngészőből (ha a szervered IP címe 192.168.0.5, akkor http://192.168.0.5/tt-rss/install):
http://your.site.com/tt-rss/install/
  • Hajtsd végre a telepítés egyszerű utasításait. A folyamat vége egy /tt-rss/config.php fájlt lesz, melyben bármikor módosíthatod utólag is a beállításokat így:
sudo nano /var/www/tt-rss/config.php
  • A szabályos install után beléphetsz a tt-rss webfelületére (felhasználónév: admin, jelszó: password):
http://your.site.com/tt-rss/
  • A jobb felső menüben keresd a Műveletek / Preferences... / Beállítások / Személyes adatok / Azonosítás menüt, majd módosítsd a jelszavad, illetve adj hozzá újabb felhasználókat. Én az admint nem használom olvasásra, csak a rendszer frissítésére. 
  • Vegyél fel kézzel RSS feedeket, próbálgasd a beállításokat. A Google Reader-ből az importról és a feed-ek frisítéséről később esik szó.

Google Reader OPML import

A Google Reader alatt használt feedjeidet viszonylag könnyen, egyszerűen importálhatod a tt-rss alá. Lesz pár, amire hibát jelezd a rendszer, ezek vagy rosszak tényleg, vagy a Reader lekezelte az esetleges más helyre költözésüket, vagy nagyon szabványtalanok. Ha fontos lenne az az 1-2 eldobott feed, keress rá jobb formátumot.
  • A google.com/takeout oldalra lépj be a Google accountoddal.
  • A Szolgáltatások kiválasztása fülön kattintsd le az Olvasó gombját, majd ha betöltött annak számlálója, akkor kattints a lap aljára tekerve az Archívum létrehozása gombra.
  • Utána a Google szervereinek terheltségétől függően elkészítve megtalálod idővel a Letöltések fül alatt a pár napig letölthető csomagot. Töltsd le, majd csomagold ki a fájlokat.
  • subscriptions.xml fájlra lesz szükséged.  
  • Lépj be a tt-rss-ben abba a fiókba, ahová importálni szeretnéd a feedjeidet.
  • Menj a Műveletek / Preferences... / Hírcsatornák / OPML menübe.
  • A Fájl kiválasztása menüvel keresd meg a subscriptions.xml fájlt, majd az OPML importálása gombbal importáld.
  • Kapni fogsz egy összegző ablakot még, és innentől kezdve már bent lesz az összes eddig használt feed a tt-rss-ben.
  • Ha a Google Reader alatt mindet elolvastál eddig, akkor itt is állítsd olvasottra az összes hírt, így nulláról indulhatsz.

Google Reader Shared, Starred import

A Google Reader alatt ha eddig sűrűn használtad a megosztás és csillagozás funkciókat, és ezentúl is archiválás vagy RSS továbbosztás miatt jó lenne, ha meglennének a régiek, akkor importálhatóak azok.  Két módszer létezik:
  1. Webfelületen át importálható json fájlok. Ez nekem nem működött, mert több MB-os fájlokkal kiakad az import plugin.
  2. Terminálból importálható .json fájlok. Ebből is két módszer létezik: 1, 2. Mikor az elsővel elakadtam, a másodikkal sikerrel jártam, de a kódtábla konverzió rossz volt, és mivel nem értek az Sql-hez, ezért hagytam is. Közben meg sikerült az első eljárás, mely mellesleg a fejlesztő saját pluginja. Ezt ismertetem.
Mindenképpen telepítened kell a szükséges googlereaderimport plugint.
  • Hozd létre a szükséges plugin könyvtárat:
cd /var/www/tt-rss/plugins
sudo mkdir googlereaderimport
  • Az alábbi két fájlt töltsd le és másold be a most létrehozott mappába:
cd googlereaderimport
sudo wget http://goo.gl/zoZTV
sudo wget http://goo.gl/D4Qub
  • A Külső API engedélyezése menüt kapcsold be a Műveletek / Preferences... / Beállítások / Beállítások menüben:
  • Töltsd be újra a tt-rss-t, majd ellenőrizd, hogy a tt-rss-ben a plugin telepítve lett-e a Műveletek / Preferences... / Beállítások / Plugins menü alatt:
  • Nem emlékszem, hogy ezt az admin felhasználóval engedélyeztem, és azért nem kapcsolható ki, vagy azért, mert ott van és kész. :)
Most kipróbálhatod, hogy sikerül-e az 1. módszerben leírt egyszerű menüs importálás:
  • Keresd meg az új Import starred/shared from Google Reader menüt itt:
  • A korábban már a Google Takeout alól letöltött fájlokból keresd ki a shared.json és starred.json fájlokat. A Fájl kiválasztása gombbal töltsd be az egyiket, majd Import gomb.
  • Ha sikerrel jártál, jöhet a másik fájl is.
Ha nem jártál sikerrel, jöhet a második módszer:
  • Vidd a két .json fájlt a /tt-rss mappába:
sudo mv shared.json /var/www/tt-rss
sudo mv starred.json /var/www/tt-rss
  • Importáld a fájlokat:

cd /var/www/tt-rss
./update.php --greader_import shared.json
./update.php --greader_import starred.json

  • Ha nem találja a .json fájlt, akkor másold be a /plugins/googlereaderimport mappába is.
sudo cp shared.json /var/www/tt-rss/plugins/googlereaderimport
sudo cp starred.json /var/www/tt-rss/plugins/googlereaderimport
    • Ha ekkor sem megy, akkor lehet hogy segít az, ami párunknak is:
    sudo nano /var/www/tt-rss/plugins/googlereaderimport/init.php
    • Az alábbi kódot vezesd fel  a fájlvizsgálat után:
    if (!file_exists($file)) {
             $file = "./shared.json";
             }
    • Én felvittem a starred.json és a shared.json fájlokat is, de "#" karaktert vittem fel az éppen nem importált elé:
    • Mentsd el CTRL+O gombokkal, majd kilépés CTRL+X gombokkal.
    • Ezután próbáld meg importálni a fenti kód alapján a shared.json fájlt.
    Nekem percekig tartott az importálás.
    • Ha netán ezt a műveletet a CRON beállítása után hajtanád végre, akkor állítsd le:
    sudo /etc/init.d/cron stop
    • Utána indítsd újra:
    sudo /etc/init.d/cron start
    • Ha a böngésződ frissít, akkor abban kapcsold ki a frissítést ideiglenesen.
    • Ha biztosra akarsz menni, akkor készíts az importálás előtt biztonsági mentést az eddigiekről. Ebbe nem megyek bele, erre tényleg keress rá.

    Feed, hírek frissítése

    Két módszer létezik a hírek frissítésére:
    1. Egyszerűbb: Futó böngésző mellett maga a tt-rss a beállításban megadott időközönként elindít egy lekérdezést a  szervertől. Ez elég egyszerű, és nem is rossz, ha mindig megy egy böngészőablakban a tt-rss.
    2. Profibb: A szerver a háttérben CRON segítségével is tudja frissíteni a híreket. Ennek beállítása szerver függő, kicsit macerásabb. Most ezt fejtem ki bővebben.
    • A CRON felhasználónként és rootként is külön képes időzített parancsokat futtatni. Ha pi felhasználóval telepítetted a tt-rss-t, akkor sudo nélkül vidd fel az alábbi időzítést a crontabba így, mely egésztől számítva 30 percenként elindít egy feed lekérdezést:
    crontab -e
    •  Menj a szerkesztőben a legalsó sorba, majd vezesd fel ezt:
    */30 * * * * cd /var/www/tt-rss && /usr/bin/php /var/www/tt-rss/update.php --feeds --quiet >/dev/null 2>&1
    • Ha más fajta webszervert használsz, vagy más a konfigurációd, akkor az elérési útvonalak el fognak térni.
    • A végén CTRL+O a mentés, majd CTRL+X a kilépés a szerkesztésből. Ezzel ellenőrizheted, hogy bent-van e a helyén a sor:
    crontab -l
    • Ügyelj a szóközökre és a csillagok számáravalamint az elérési útvonalak helyességére, a dupla kötőjelekre, stb... Ha nem menne elsőre, a hibakeresést segíti, ha kihagyod a --quite kapcsolót. Azonban ha fut a CRON, akkor tedd vissza, hogy feleslegesen ne fárassza az SD kártyát a RasPi-ban a log írás.
    • A hibakeresést az is segíti, ha manuálisan futtatod le a feed frissítést (az elő addig fut egy perces szünetekkel a frissítések között, amíg rá nem unsz, kiszállás belőle ctrl+c gombokkal, a második leáll magától):
    cd /var/www/tt-rss
    php .update.php --daemon
    • vagy
    /usr/bin/php /var/www/tt-rss/update.php --feeds
    • Várj!!! Várj!!! Mondom, várj!!! Az első futás alkalmával - ha grafikus felületen is látod a RasPi-t -, látni fogod, hogy CPU 100%-on dolgozik. A legelső futás tovább tart, akár 5 percig is. Legyél türelemmel. A többi futás kevesebb időt vesz igénybe. A "B" verziós RasPi-n nekem .cca 1-2 perc maximum a 110 db feed csatorna frissítéseinek vizsgálata.
    • Ha netán a ttrs-ben megjelenne rendre egy piros Update daemon is not running. (X) hibaüzenet, akkor ez segíthet a téves üzenet megszüntetésében (forrás):
    cd /var/www/tt-rss/lock
    sudo rm update_daemon.lock
    • Ha biztos akarsz abban lenni, hogy a CRON egyáltalán elindult-e, akkor ezzel tudod lekérni a legutóbbi logokat (azaz a "CRON" szót keresed a logokban):
    grep CRON /var/log/syslog
    • Ezzel láthatod, hogy a pi userre fut-e egyáltalán a kérés, vagy csak más dolgok root-ként.
    • A "tt-rss" pedig azt adja ki, hogy konkrétan lefutott-e a tt-rss mappájára a CRON vagy sem:
    grep tt-rss /var/log/syslog
      • Ha fut pi-ként, akkor ezzel várhatóan csak a tt-rss-nek futókat látod.
      • Azt sem árt ellenőrizned, hogy a CGI PHP rendben van-e telepítve:
      which php
      /usr/bin/php
      • majd
      whereis php
      php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
      • Több tippem egyelőre nincs a hibakereséshez, nekem csak annyi volt a gond, hogy root-ként indítottam a CRON-t első alkalommal, és --feed helyett -feed volt a string (régebbi verzióra még az volt a jó, közben változott a helyzet).
      (Én még az 1.7.5 verziót telepítettem, majd az 1.7.8-ra frissítettem a napokban.)

      Kapcsolódó linkek