Jak nainstalovat GIT na zařízení NAS D-Link DNS-323

Rubrika: Počítače

gitJako správná ajťácká rodina máme doma několik počítačů a jako hlavní datové úložiště nám v kumbálu spokojeně vrní diskové zařízení typu NAS. Z jednotlivých počítačů pak můžeme na soubory přistupovat, jsou tam nastavena nižší práva pro děti (aby jen tak něco nesmazali), je to velmi příjemné a pohodlné. Takový NAS je ovšem ve skutečnosti opravdový počítač. Sice nemá třeba žádný výstup na monitor, ale stále na něm lze rozjet i další služby, než jenom sdílení souborů. Já jsem se rozhodl na svém NASu rozjet verzovací systém git a tento článeček popisuje, jak to udělat, kdybyste se rozhodli to taky zkusit.

Co to je git? Při programování, ale nejen při něm, se používají takzvané verzovací systémy. Pokud jste o nich nic neslyšeli, tak Vám to rychle vysvětlím: Napíšete kus programu a uložíte ho do verzovacího programu. Pak napíšete další kousek a uložíte novou verzi. A další verzi. A pak přijdete na to, že ta verze o týden zpátky byla lepší než to, jak jste ji předělali v posledních dnech, tak si z verzovacího systému vytáhnete tu předchozí. Jednoduše si můžete zobrazit rozdíly mezi jednotlivými verzemi – kde co přibylo a kde je co jinak. Navíc verzovací systémy podporují přístup více uživatelů najednou, takže kousek programu změní Franta, kousek Pepa a kousek Venca a v tom verzovacím systému se to všechno potká a sloučí dohromady. A tak dále. Takže verzovací systém má dva přínosy: uchovává všechny historické verze programu a můžete se k nim kdykoliv znova vracet a navíc usnadňuje týmovou práci. Verzovacích systému je samozřejmě více, já jsem si vybral git a to z toho důvodu, že umí ukládat nové verze nebo se vracet ke starším i v okamžiku, kdy jste offline (třeba s notebookem na chalupě) a on nemá spojení na hlavní úložiště (na server), jelikož má plnou kopii celého úložiště na každém počítači, na kterém se s ním pracuje.

NAS D-Link DNS-323NAS, který doma máme, je zařízení D-Link DNS-323, což je malá krabička, do které se vejdou dva harddisky, připojí se k elektrice 230V a počítačové síti a spokojeně poskytuje své služby, nic víc není zapotřebí. Vyjdeme tedy ze situace, že máte úplně stejné zařízení a zatím jste do něj neprováděli žádné speciální zásahy, používáte ho tedy jen k těm funkcím, které nabízí tzv. z výroby (sdílení souborů, sdílení tiskáren, torrent klient). Předpokládám, že na zařízení je nainstalován (v této chvíli) firmware alespoň ve verzi 1.06. Dále, pokud budu v následujícím textu uvádět přístup na toto zařízení, budu ho nazývat NAS, takže např. souborový přístup ve Windows bude \\NAS\.

Na tomto zařízení ve skutečnosti běží systém Linux, speciálně připravený pro něj. Tento Linux ale ve výchozím stavu není nijak přístupný a to musíme změnit. Musíme ho odemknout. Naštěstí na to existuje velmi jednoduchý postup. Stáhněte si následující dva soubory a oba nahrajte do \\NAS\Volume_1.

fun_plug 2008-Sep-03 18:53:10 1.7K application/octet-stream
fun_plug.tgz 2009-May-20 01:11:56 10.3M application/x-tgz

Zařízení pak restartujte z administrační webové stránky. To bude chvíli trvat (asi dvě minuty). Až zařízení znova naběhne, je odemčené a připravené na další postup. POZOR: Je ale odemčené naprosto pro každého, dostane se na něj kdokoliv, nevyžaduje ani zadání hesla, proto by bylo nerozumné ho například v této chvíli vystavovat na internet, to až později.

Zde se NAS restartuje

Takže, když je odemčené, jak se do něj dostat. Protože se nám později bude hodit klient PuTTy, který toho umí hodně, tak si ho stáhněte a budeme používat ten. Takže spusťte PuTTy, do políčka Host Name zadejte jméno zařízení, Connection Type přepněte na Telnet a zmáčkněte Open. Objeví se černé okénko, které očekává na Vaše příkazy. Jste tam!

PuTTy

No, zařízení je sice odemčené, běží na něm Linux, ale moc toho neumí. Proto bude dobré, když si pro začátek stáhnete a nainstalujete balíčky asi 100 základních aplikací. Pokud jste zkušení linuxáci, poradíte si sami a můžete si vybírat, které si chcete stáhnout a naopak, které potřebovat nebudete. Pokud ale zkušení nejste, stáhněte všechno, ono to na Vašem disku celé nainstalované zabere necelých 500MB, což je dnes zanedbatelné množství prostoru — věřím, že pokud NAS máte, tak jste do něj vložili disky o několik řádů větší. Takže pro stažení a základních balíčků zadejte do toho černého okýnka Putty následující příkazy:

cd /mnt/HD_a2
rsync -av inreto.de::dns323/fun-plug/0.5/packages .

Tak, a je to, stáhli jsme spoustu aplikací. Jenže pro rozjetí gitu je zapotřebí ještě jedna aplikace, která v tom základním balíčku není. Nazývá se perl a zkušení vědí, že se jedná o speciální programovací jazyk. Takže další příkazy, aby se vám perl také stáhnul:

cd packages
wget http://www.inreto.de/dns323/fun-plug/0.5/extra-packages/perl/perl-5.10-2.tgz

Nyní máme ty aplikace stažené, ale ještě je potřebujeme nainstalovat. Takže další příkaz je nainstaluje, bude to chvíli trvat:

funpkg -i *.tgz

Výborně, paráda. Akorát rozběhnutí gitu bude předpokládat, že najde výše zmiňovaný perl na tradičním umístění /usr/bin/perl. Jenže perl se nám nainstaloval jinam (a měl pro to dobrý důvod, totiž na to původní místo by se instalace nevlezla). Takže dalším příkazem vytvoříme symbolický odkaz tak, že když se jakákoliv aplikace pokusí spustit perl z toho tradičního umístění, tak to nevypíše chybu, ale systém ho spustí z toho skutečného:

ln -s /ffp/bin/perl /usr/bin/perl

Můžete si zkontrolovat, že je vše v pořádku příkazem /usr/bin/perl --version, mělo by Vám to vypsat pár řádků informací.

Nyní máme vše, co potřebujeme, abychom si git na našem NASu sami zkompilovali. Cože? Zkompilovali? Ano, tento NAS neobsahuje procesor od firem Intel nebo AMD a předpřipravené Linuxové programy na něm nespustíte. Nebojte se, není to nic složitého, skoro všechno už máme připraveno. Takže si stáhneme zdrojáky gitu a to přímo ze stránek Linuxu (git je dítě tohoto systému). Pokud se podíváte na tuto webovou stránku, můžete zkontrolovat, zda-li v této chvíli již není novější verze a zkusit si stáhnout tu (otázkou ale je, jestli se v ní neobjeví něco nového, kvůli čemu by nešla zkompilovat) snadnou úpravou příkazu uvedeného níže. A nebo prostě stáhnete tu verzi, kterou jsem stáhl já, která se mi překompilovat podařila a funguje, je to jen na Vás.

cd /mnt/HD_a2
wget http://kernel.org/pub/software/scm/git/git-1.6.5.3.tar.bz2
tar xjf git-1.6.5.3.tar.bz2
rm git-1.6.5.3.tar.bz2
cd git-1.6.5.3/

Takže jsme stáhli a rozbalili zdrojové kódy gitu. Nyní musíme připravit kompilaci a to provedeme následujícím příkazem (pár minut to poběží):

./configure

./configure

Tak, teoreticky je vše připraveno, jenže kdybyste nyní spustili kompilaci, chvíli by to pracovalo, ale po nějaké době by to vypsalo chybu, konkrétně na kompilaci CC read-cache.o. Git není pro náš speciální systém od D-Linku připraven, musíme proto poeditovat soubor Makefile a něco do něj přidat, aby to proběhlo správně. Nyní nastává ta nejvíce hardcore část naší práce. Otevřete si soubor Makefile v textovém editoru vi tímto příkazem:

vi Makefile

Nyní se můžete v souboru pohybovat kurzorovými šipkami, to by ale bylo příliš pomalé k nalezení toho správného místa. Proto zmáčkněte klávesu / (lomítko, to v tomto editoru spouští vyhledávání) a zadejte maintaining a stiskněte Enter. Mělo by Vám to najít tento kus souboru:

# We choose to avoid "if .. else if .. else .. endif endif"
# because maintaining the nesting to match is a pain.  If
# we had "elif" things would have been much nicer...

ifeq ($(uname_S),Linux)
    NO_STRLCPY = YesPlease
    NO_MKSTEMPS = YesPlease
    THREADED_DELTA_SEARCH = YesPlease

Kurzorem se posuňte na ten prázdný řádek, stiskněte klávesu i (to spustí režim vkládání nových znaků) a připište tam řádek, který je zvýrazněn žlutě:

# We choose to avoid "if .. else if .. else .. endif endif"
# because maintaining the nesting to match is a pain.  If
# we had "elif" things would have been much nicer...
NO_NSEC = YesPlease
ifeq ($(uname_S),Linux)
    NO_STRLCPY = YesPlease
    NO_MKSTEMPS = YesPlease
    THREADED_DELTA_SEARCH = YesPlease

Až to budete mít, zmáčkněte klávesu Esc (ukončí režim vkládání znaků), pak zmáčkněte klávesu : (dvojtečka, režim příkazů), napište w a stiskněte Enter – tím se upravený soubor zapíše na disk. Pak znovu zmáčkněte klávesu : a tentokrát napište q a stiskněte Enter, tím se editor ukončí.

Tak, a už jsme připraveni spustit kompilaci, ale musíme ji spustit s dvěma parametry. Tím prvním řekneme, kam bude nakonec git nainstalován – už výše jsme si vysvětlili, že kvůli dostupnosti diskového místa ho nemůžeme umístit do tradičního adresáře, ale musíme zvolit jiný. No a druhým parametrem zajistíme linkování určitých souborů, bez kterých by kompilace opět selhala a to na příkazu LINK git-fast-import. Takže pokud spustíte kompilaci s následujícími parametry, bude to v pořádku a žádné chyby se nedočkáme:

make prefix=/ffp CFLAGS="-liconv"

Během kompilace to bude kvůli tomu druhému parametru vypisovat spoustu varování při kompilaci soborů, které knihovnu nepoužívají. Chybová hláška zní cc: -liconv: linker input file unused because linking not done. Nevšímejte si toho, je to v pořádku, nic není špatně.

Upozorním, že naše zařízení má procesor, který svým výkonem odpovídá přibližně Pentiu na 200MHz. To znamená, že kompilace nebude blesková, ale slušnou dobu potrvá. Připomnělo mi to dávné časy, kdy jsem si sám kompiloval jádro linux-68k na počítači Amiga 1200 s procesorem 68030 na 50MHz. Jo, to byly časy — než kompilace proběhla, vyšla nová verze softwaru. Konec vtípků, očekávejte, že git se bude kompilovat přibližně hodinu. Když vše proběhne OK a nedočkáte se žádné chybové hlášky, budete moci git nainstalovat do svého systému příkazem:

make prefix=/ffp CFLAGS="-liconv" install

Ten druhý parametr tam asi tentokrát už není zapotřebí, ale nic neuškodí tomu, když ho tam necháme. Soubory se nakopírují na správná místa a hurá! GIT je nainstalován! Můžete si ověřit, že ho tam máte, zadáním příkazu git --version

Rozběhnutý git na D-Link DNS-323

Nekončíme! Určitě si vzpomínáte, že jsem hodně nahoře uvedl, že teď máme NAS odemčený tak, že do něj může každý, bez znalosti jakéhokoliv hesla. To musíme změnit! Navíc protokol telnet není příliš bezpečný a tak ho vypneme a místo něho na NASu rozjedeme SSH. Což je dobré i pro git, protože právě protokol SSH tento verzovací systém používá jako výchozí pro přístup ke vzdáleným úložištím a to z bezpečnostních důvodů.

Takže nejprve si vymyslete nějaké heslo pro uživatele root, protože prázdné mu nenecháme. Až ho budete mít vymyšlené, spusťte následující příkazy a zedejte nové heslo:

pwconv
passwd

Dále nastavíme shell pro uživatele root, pokud byste na NASu ještě v budoucnu pracovali, na bash:

usermod -s /ffp/bin/bash root

Dále spustíme kontroly na hesla a skupiny:

pwck
grpck

Vyzkoušejte, že Vaše nové heslo funguje! Zadejte příkaz

login

a přihlašte se. Když se to podaří, zase se vraťte nazpět

exit

Pokud vše fungovalo, uložte heslo napevno do systému:

store-passwd.sh

Nastartujte SSH

cd /ffp/start
sh sshd.sh start

Nyní si spusťte ještě jednou Putty (vedle toho stávajícího) a zkuste se přihlásit, akorát již ponechejte Connection Type na SSH. Mělo by to fungovat, měli byste se do systému dostat zabezpečenou cestou. Pokud se to podařilo, tak úplně nakonec nastavíme, aby se při startu systému právě SSH spustilo a Telnet nikoliv

cd /ffp/start
chmod a-x telnetd.sh
chmod a+x sshd.sh

No a nyní na závěr je zapotřebí zrušit již běžící proces telnetu, aby tam nebyl a my případně mohli celý systém otevřít do internetu. Zkušení linuxáci to udělají příkazem kill, pro všechny ostatní bude stačit systém restartovat úplně stejným postupem, jaký jsme provedli již na začátku tohoto návodu.

Naklonování úložiště z NASu na lokální počítač

Hurá! Git je nainstalovaný, dostupný přes SSH a vy můžete začít verzovat své zdrojáky. Zde se již více rozepisovat nebudu, protože možností je spousta, ale jednoduše musíte si git nainstalovat i na svůj pracovní počítač, zde již bude záležet, jestli používáte Windows, Linux nebo ještě nějaký jiný systém, a i tak jsou ještě různé možnosti, např. na Windows lze git spouštět z příkazového řádku, dále si můžete stáhnout TortoiseGit (integraci do souborového Průzkumníka), případně některá vývojová prostředí podporují Git buď přímo a nebo pomocí nějakého rozšíření (např. Eclipse). Ale o tom tento článeček být neměl, pokud se potřebujete s Gitem naučit pracovat, bude dobré, když si přečtete nějaký tutoriál a nebo knížku ProGit. My jsme si zde připravili funkční instalaci gitu na serveru (teda na NASu) tak, abychom na ni mohli přistupovat na dálku a díky tomu ji používat buď jako zálohu, nebo z více počítačů současně (desktop i notebook), případně s několika uživateli najednou – a nebo všechno toto dohromady! Přeji hodně štěstí v užívání!

A to nejlepší nakonec. Poté, co se mi podařilo git zkompilovat a rozběhnout, po hledání, proč některé kompilace končí chybou a jak to vyřešit, tak po tom všem jsem zjistil, že pro D-Link DNS-323 ještě existuje i balík aplikací nazvaný Optware a v něm najdete i git, již předkompilovaný, a to v poslední (pár dní staré) verzi. Tak teď je pouze na Vás, jestli se rozhodnete postupovat stejně jako já a git si sami zkompilujete, a nebo budete používat Optware.