Published: 20. 2. 2007   Category: GNU/Linux

Trable se vzdálenými filesystémy

To bylo tak. Potřeboval jsem sdílet disky s okolními počítači. Normálně soubory hravě přenáším z počítače na počítač přes scp, sftp, ftp, rsync i jinak, ale teď vznikl důvod mít disk s daty z jiného počítače přímo připojené a nezdržovat se kopírováním.

Server je samozřejmě GNU/Linux (Fedora 7, zachvilku 8), jeden klient je GNU/Linux (Suse 8.1), druhý opět GNU/Linux (Fedora 8) a třetí, teď se podržte opravdové Microsoft Windows XP nainstalované na virtuálním stroji VMWare 6.0. Na viruálním stroji mám ještě Windows 95 OSR2, Windows 98 SE. Poťouchlý Mikrosofťák se škodolibě raduje, hele na něj na Linuxáka, všude ma narvaný Linuxy a stejně se bez Windows neobejde. Ano, je to pravda, v asi 0,001 % případů se bez Windows opravdu neobejdu, takže pokaždé když pustím Windows, začnou se horečně dotazovat, zda mají změnit čas na letní nebo zimní, podle toho do kterého půlroku se trefím. Ty Win95 jsem potřeboval do školy kvůli WinDLX, simulátoru pajplajny virtuálního procesoru DLX, ty Win98 za dva roky potom kvůli vývojovému prostředí od Microchipu zase do školy a teď WinXP kvůli OrCADu, jak jinak, zase do školy (ČVUT FEL). Školo, zvol si příště multiplatformní nástroje, ve zbytku předmětů problém nemám! Microsofte, proč se nepřihlásím na server s danou aplikací a nepřesměřuji si GUI výstup, když to všude jinde přes ssh/X11 to jde tak snadno? Ale jedeme dál, už odbočuji příliš.

Doby kdy se GNU/Linux konfiguroval z příkazové řádky jsou někde v minulosti. Dneska už nenastavujete IP adresu během 5 sekund napsáním ifconfig eth0 add…, ale šáhnete na myš, lokalizujete kurzor, jedete přes půl obrazovky do menu Systém, pak Nastavení, pak chvilku čumíte a uvědomíte si, že jste se měli vydat do Správa a hele Síť, heslo roota a ješte pár klikanců, nesmyslná hláška o restaru systému, když stačí restarovat jenom službu a je to! Poznali jste, že používám Gnome? :-) A tak jsem místo editace /etc/samba/smb.conf opět zabrousil do útrob meníček a potřebný disk nasdílel   bez hesla pouze pro čtení a tradá. A teď k tomu jak, se s tím poprali jednotliví klienti (budiž to i jako mírný návod):

  1. Postarší SuSe Linux 8.1:
    mount -t smbfs \\\\192.168.2.1\\Data /mnt/smb_data 
    
    Ještě upravit /etc/fstab a bylo vymalováno.
  2. Notebook s Fedora 7, nejnovější do poslední aktualizace. Je třeba podotknout, že zde už se neříká Samba, ale CIFS, tedy Common Internet File System. Takže po chvilce pátrání v manuálových stránkách místo smbfs napíšete cifs a ono vás to sprdne:
    mount error 13 = Permission denied
    Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)
    
    Čtete manpage, kroutíte hlavou: „dyť to kurva v SuSE jede a žádný heslo tam není!“ A zkusíte si vypsat sdílené složky: smbclient -L 192.168.2.1, zkusíte se připojit: smbclient \\\\192.168.2.1\\Data. Zjistíte, že to funguje. A jdete dál studovat manpage.
    Ten smbclient, to je taková šikovná utilitka, jednou jsem byl nucen nahrávat něco na Windowsový počítač v daný čas z Linuxu. Windowsák si nařídí budík a když se blíží 15 minuta v hodině začne být nervózní a pak si to okliká. Linuxák si nastaví crontab, který pak pouští skriptík, přibližně v tomhle smyslu:
    SMB_USER=uzivatel
    SMB_PASS=heslo
    SMB_SERVER=\\\\pocitac\\mount
    
    smbclient $SMB_SERVER $SMB_PASS -U$SMB_USER <<EOF
       lcd /home/moje
       put soubor.txt
       EOF
    
    Každopádně to pořád neřeší problém s mountem. A tak přijde na řadu strejda Google a hned několikátá odpověď na dobře položený dotaz, mě ujistí v tom, že menpejdže, se mají číst pečlivěji:
    mount --verbose -t cifs \\\\192.168.2.1\\Data /mnt/smb_data -o 'ro,guest,sec=none'
    
    Schválně tam nechávám to verbose, tedy ukecaný výstup, protože rád vím, co se děje, hlavní rozdíl je v přidání sec=none, v případě pokud není vyžadováno heslo. A je to. Sice jsem přišel o 4 minuty života, ale jsem zase o něco chytřejší, GNU/Linux vás prostě nenechá zakrnět.
  3. Notebook s Fedora 8, po té co jsem začátkem týdne upgradnul distro. Rozdíl je v tom, že nová verze CIFS už nevyžaduje to sec=none, asi si uživatelé stěžovali. A je to fakt, když není vyžadováno heslo, tak ho tam prostě nepíšu a klientovi to navíc neříkám, to je přeci logické :)
    Každopádně vyvstal jiný problém, tedy ne že by vyhřeznul s novou verzí, on tam prostě byl už dřív, ale zrovna teď jsem potřeboval soubory, které jsou na serveru ve sdíleném adresáři připojeny jako symbolický link. CIFS, nasdílí link, opravdu jako link, který pochopitelně na klientovi míří někam do pryč. Za všechno můžou Linux Extensions. Určitě to má svůj smysl, každopádně já jsem symlinky nechtěl a to řeší vypnutí extenzí (opět radil strejda Google):
    echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled
    
    Člověk si říká, čím modernější, tím snadnější, ale tendlecten následovník Samby CIFS, mě přesvědčil o opaku.
  4. Virtuální Windows Xenofobní Padavka. A teď to začlo, nebudu zastírat to, že Windowsy skoro nepoužívám, neumím v nich, ale znám principy, takže v nich většinou zvládnu naklikat co potřebuji a když se do nich nainstaluje cygwin, tak se stanou i docela použitelné.
    Ovšem to neplatí v případě Okolních počítačů. Chcete se připojit, tak kouknete, zda se někde objeví ikonka daného počítače v okolní síti. Neobjeví. Takže se snažíte ručně připojit, zkoušíte \\192.168.2.1\Data, zkoušíte \\Linux\Data. Chvilku to šrotuje a pak to řekne, ať si zkontroluji překlepy. Safra porte, Linuxy jsou v klidu, ale tahle věc poháněná černou magií a nadávkami uživatelů nechce dělat nic. Inu, začínám masit Google a nic. Ptám se na IRC na #linux.cz těch, co užívají podobojí, a buď to lidem funguje a nebo jsou na tom stejně jako já a řeší to jinak. Dokonce přichází na řadu i editování smb.conf, zkouším dobré rady jako, nastavit stejnou pracovní skupinu a další. Objevuji zajímavou utilitku pro příkazovou řádku net a zkouším různé net use…, net view… A nic. Hodiny ubíhají. Začínám uvažovat o tom, že se v noci vkradu k Billovi do ložnice a narvu mu do prdele MFM harddisk s instalací CP/M.
    Naprostá beznaděj. Možná zapříčiněná mojí blbostí, ale snažím se problém řešit unixovou filozofií, administrátorskou lstivostí, kritickým myšlením a RTFM. Zkouším, se připojit na SMB/CIFS server telnetem přes port 445, když hravě posílám mejly telnetem přes port 25, třeba pořeším něco i se sdílením. Každopádně alespoň zjistím, že na daný port se připojím, takže odpadá varianta blbne síť nebo zlotřilý firewall.
    Druhý den jsem na to šel jinak. Vyprdnu se ne Sambu a speciálně pro Windóze rozchodím NFS (Network Filesystem). Na straně serveru je to otázka několika klikanců. A na straně Windows?
    Nejdříve je nutné sehnat NFS klienta, tedy optám se Googlu a hned na prvním místě na mě vypadne odkaz na Windows Services for UNIX. Stáhnu tedy celý 250megový balík, což na agregované 512kbps lince chvilku trvá. A dám se do instalování, očekávaje několik Next, Next, klik a Next.
    Držel jsem se Windowsích zvyklostí a utilitky začal instalovat do adresáře Program Files, načež jsem dostal pojeb, že jako NÉ, a že vadí mezera v názvu. Tak proč jí tam softwarový inženýři doprčič narvali? Po volbě nového adresáře dostávám pojeb číslo dvě. Filesystém není NTFS, ale FAT32. Bleuáááhpičifix! A proč se to nejdřív ptá na prkotinu a až pak to řeší systémové záležitosti, nó?!!
    Já si tam dám staré dobré FAT32, protože znám nářek Windousáků, když se jim posere NTFS (většinou naprosto) a teď jsem kvůli tomu v řiti. Naštěstí z googlu opět získávám informaci, a konsternovaně konvertuji z FAT32 na NTFS. Tarem a bzip2 zálohuji adresář s virtuálním strojem (velice prozíravé, neboť jsem si vzápětí při jiné příležitosti rozmrdal registry [né ty pole flip-flopů na křemíku, ale windouzí]).
    Každopádně poté již instalace proběhla, čímž jsem získal přenádhernou utilitku mount a vítězoslavně si připojil \\192.168.2.1:/mnt/sdisk1 jako disk E:. Ale předtím jsem opět musel použít google. Ovšem jenom kvůli tomu, že onen windowzí mount --help, tedy pardón překlep, správně mount /? vypisuje, že mám použít syntaxi \\computername\sharename a ono je to ve skutečnosti \\computername:sharename. Také jsem zjistil, že NFS server nenasdílel symlinky, takže jsem raději nasdílel i další disk jako F:, ale třeba mi někdo poradí jak na to (za předpokládané link_relative v /etc/exports jsem dostal vynadáno) a únavou jsem se už nezmohl na nějaké obsáhlejší RTFM.
    Ať se mi někdo diví, že s Windows nejsem kamarád :( Podobných zážitků, začarovaných kruhů ze kterých nejde vystoupit a nedeterministického chování jsem s nimi v letech 1995 až 1998 zažíval plno.

A to je pro dnešek z úžasného světa vzdálených filesystémů vše.