Poziomka jako Serwer NFS.¶

2021/01/22
NFS to Network File System.
Poziomka zaś to Raspberry PI.
Ta historyjka zaczyna się jakieś 8 lat temu. Zależy, co przyjąć za jej początek. Być może ona zaczęta być powinna jeszcze przed moim urodzeniem? Gdy wujek Henio, brat mamy, poszedł dobrowolnie w kamasze, ale poszedł uczyć się, na oficera? O ile wiem, wysłano jego (z wioski pod Zamościem) aż pod daleki Wrocław. Może pod Legnicę, która słynęła z tego, że była bastionem Armii Radzieckiej, najbardziej wysuniętego na zachód oddziału uderzeniowego wojsk lotniczych? Niestety, te poczatki tkwią w niepamięci, niewiedzy, niemożliwości łatwego zweryfikowania faktów, bowiem ich główni aktorzy i świadkowie patrzą na mnie i nas wszystkich już tylko z drugiej strony tęczy.
Dla jasności: wujek Henio był, że tak powiem, patriotą. Poszedł do LWP, bo takie tylko było. Nigdy do partii nie zapisał się. Był krytyczny wobec systemu (we mnie we krwi jest coś z tego). Być może, gdyby nie był, skończyłby wyżej niż pułkownik. Wspomniałem kiedyś: w Kanadzie spotkałem razu jednego pewne środowisko młodych ludzi. Wiedzieli o nim. Ale to było środowisko bardzo zmanierowane i wcale nie myślące o Polsce. Oni śmieli się z niego.
Przypuszczać mogę, zgadywać, że to wujek Henio zaintrygował mnie elektroniką. Jednoznaczne to jednak nie jest, ale prawdopodobne. Nie jest też wcale proste zrozumienie, dlaczego? Jak to się stało?
Wujek Henio umiał reperować telewizory. Powiedzmy sobie szczerze - wcale nie umiał, ale lubił. Sam zajmował się organizacją łaczności radiowej w lotnictwie na poziomie armii. Za naprawę TV sąsiadom z wioski swojej mamy a bojej babci pieniędzy nie brał, gdy tymczasem specjaliści pożal się Boże ze wsi obok brali bezczelnie wielkie sumy, czasem na granicy możliwości klienta, albo powyżej. W tym też sensie był prekursorem idei, że wiedza jest za darmo (w sensie, że ten, który ją ma, powinien dzielić się ze społeczeństwem, także dzielić się umięjętnościami, pomagać, bezpłatnie; Jakby nie było - wykształcenie i pozycję zdobył nie za pieniądze). Może i po cześci stąd, z tej przekory i chęci dzielenia się wynika moje wręcz uwielbienie dla otwartego oprogramowania, Linuksa, pisywania bezinteresownie po internecie (przecież z tego nic nie mam).
Zainteresowanie elektroniką tkwiło we mnie długo. Samodzielnie zupełnie zdobyłem spore doświadczenie, które potem przez całe życie owocowało na różne sposoby. Przede wszystkim w pracy jako fizyk doświadczalny. Nie uważam ludzi zajmujących się fizyką doświadczalną a nie mających pojęcia o elektronice za ludzi poważnych.
W pewnym momencie, gdy zaistniały komputery do użytku domowego, powoli przerzuciłem zainteresowania na nie. Elektronika to budowanie z elementów. Komputer zaś, programowanie, to też budowanie z elementów. Kto zaś z nas nie zajmował się w dzieciństwie budowaniem domków, szałasów? Jest w zajmowaniu się elektroniką coś z tej atawistycznej pozostałości.
Przeskakujemy do roku około 2012.

Wtedy to mniej więcej uczyłem w rosyjskim prywatnym gimnazjum. Było to moje dodatkowe zajęcie, raz w tygodniu przez kilka godzin. Miałem pomóc uczniom w przygotowaniu się do olimpiady z fizyki. Szkoła za dyrektorką była ambitna, uczniowie w zasadzie wyłącznie z zamożnych rodzin. Co mnie pozytywnie zaskoczyło - u nich bez wyjątku była ogromna chęć do nauki i z entuzjazmem przychodzili na te nieobowiązkowe zajęcia. Warunki jednak zbyt dobre nie były, szkolne laboratorium skromnie wyposażone. To nie był problem dla mnie. Ciekawe eksperymenty, pokazy z aktywnym uczestnictwem dzieci można wykonać bardzo niewielkimi środkami. Zwykle zajmowało mi około jednego dnia przygotowanie się merytorycznie zaś w kuchni przygotowanie prostych doświadczeń.
Jakie to były doświadczenia? Na przykład pomiar ciepła topnienia lodu (zimą zamiast lodu przynieśliśmy śniegu z podwórka). Zdziwicie się, ale to takiego pomiaru wystarczy… bateryjka, opornik, parę przewodów… i zegarek mierzący czas.
Albo wyprowadzenie wzoru na okres wahań wahdadła przy pomocy czysto abstrakcyjnych rozważań i analizy wymiarowej. Potem oczywiście mogliśmy sprawdzić doświadczalnie, czy nasz wzór jest poprawny.
Albo bawienie się w ogniwa elektryczne (jedna z metod polegała na włożeniu w cytrynę gwoździa i kawałeczka blaszki miedzianej; cytrynę potem zjadł jeden z uczniów).
Zaś wtedy, gdy opowiadałem im o fraktalach i rozmiarze Hausdorfa (ależ te dzieci wszystko rozumiały!) przynosiłem na zajęcia słonecznik i kalafior, jako ilustracje struktur fraktalnych w przyrodzie…
Na zdjęciu wyżej dzieci wyznaczają rozkład potencjału elektrycznego w elektrolicie (woda z solą kuchenną) metodą wymyśloną przeze mnie.
Wtedy właśnie pomyślałem, że wartoby uczniom pokazać trochę komputera… Kupiłem Raspberry Pi oraz Arduino - były rozprowadzane przez sklep w Moskwie.

Rysunek powyżej przedstawia Raspberry Pi 3 Model B+ (wersja obecnie używana przeze mnie) oraz płytkę Arduino. Obie są wielkości dokładnie takiej, jak karta płatnicza. Raspberry to w istocie pełny komputer z dodatkową możliwością obsługi wejść I/O. Arduino zaś to zaawansowany sterownik mogący pracować w super-złożonych urządzeniach (Arduino używano chociażby na Międzynarodowej Stacji Kosmicznej).
Rok 2013/2014, Rzeszów




Z lewej: Gabrysia Urban ze swoją prezentacją na temat Raspberry Pi w styczniu 2014 roku.
Z prawej: Łukasz Wielgosz (brat Marka) prezentujący swój łazik sterowany przez Wi-Fi. Zdjęcie jest kadrem z filmu umieszczonego na stronie rzeszowskich Nowin z 24 października 2014: https://nowiny24.pl/lazik-lukasza-jest-najlepszy-wideo/ar/c3-5788879 . Łukasz używa tutaj Raspberry Pi otrzymanego od Marka, zaś Marek dostał płytkę ode mnie… Łukasz wcześniej, latem, pokazywał mnie i innym swój łazik w Nowym Borku przy okazji ogniska jakie zorganizowałem wspólnie z właścicielami posesji.
Cytuję:
Wojewódzki Urząd Pracy w Rzeszowie rozstrzygnął konkurs „Pokaż co potrafisz” dla uczniów techników i zasadniczych szkól zawodowych na Podkarpaciu. Wygrał Łukasz Wielgosz z Zespołu Szkół Elektronicznych w Rzeszowie, ze swoim łazikiem sterowanym poprzez WiFi.
Rok 2016, lato, pod Warszawą

Na rysunku z prawej: Dysk twardy Seagate Mobile HDD 1000 GB SATA III 2,5” 1 TB pojemności. Na Allegro obecnie za około 200 zł.
Przy okazji przeprowadzki z Józefowa do Falenicy dokonałem gruntownego czyszczenia swego laptopa. Na tyle było ono dobre, że za przyczyną zapewne wody laptop działać przestał…
A ja forsy nie mam na naprawę… Kupiłem na kredyt nowy laptop. Na starym jednak pozostał przecie dysk z danymi… Żal ogromny, ale wtedy nie wiedziałem, jak problem rozwiązać.
Dopiero po 4 latach zacząłem ponownie rozmyślać i działać w sprawie starego laptopa. Okazało się, że rozebranie laptopa wcale nie jest znowu tak wielkim problemem. Bez większego trudu można też wymontować dysk twardy.
I tu okazało się, że taki dysk to skarb prawdziwy. Można taki dysk połaczyć poprzez USB! Potrzebne jest specjalne łącze z kablem SATA/USB, do kupienia za około 50 zł w każdym sklepie komputerowym albo przez internet. W moim przypadku wybrałem specjalny zestaw firmy Natec, zawierający oprócz modułu elektronicznego SATA/USB także specjalistyczny kabel (z jednej strony USB) oraz metalową obudowę do dysku. W sumie wygląda i działa super-duper! Ja zaś odzyskałem dane z dysku z przed 4 lat!
Dysk w obudowie i z kablem USB pokazany jest na rysunku niżej, w środku z napisem Natec na obudowie.


Apetyt, jak wiadomo, rośnie w miarę jedzenia. U mnie na nowym ale już przecie starym laptopie miejsca na dysku ubywa dramatycznie. Nowe laptopy w sklepach swymi cenami ani parametrami zupełnie mi nie imponują. Pomyślałem więc:
Zbuduję server NFS na Raspberry Pi
Będzie pełnił funkcję backupu ale też jako miejsce składowania muzyki i filmów, które regularnie (prawie codziennie) namiętnie oglądamy wieczorami razem z żoną…
A oprócz tego potestuję urządzenie w praktyce z perspektywą zbudowania micro-super-komputera, z wielu płytek Raspberry Pi współpracujących ze sobą. Takie centrum obliczeniowe.
Do tego celu, oprócz Poziomki potrzebna jest mikro-karta z pamięcią SSD, parę kabli.
Najwygodniej jest kupić gotowy zestaw, jak na zdjęciu powyżej.
Wybrałem firmę Botland: https://botland.com.pl/moduly-i-zestawy-raspberry-pi-3b-plus/13140-zestaw-raspberry-pi-3b-wifi-32gb-microsd-akcesoria-5903351240468.html Zestaw kosztował około 250 zł. Zawiera wszystkie potrzebne kable, pamięć SSD 32 GB, pudełko plastikowe na Poziomkę i jej zasilacz 5V.

Tak oto wygląda wszystko już po złożeniu razem, na parapecie okna, razem z routerem w pobliżu.
Budowanie serwera NFS
Początkowo kierowałem się wskazówkami na tej stronie:
https://www.deviceplus.com/raspberry-pi/setting-up-raspberry-pi-as-a-home-media-server/
Zauważmy: mam Poziomkę, ale nie mam możliwości podłączenia monitora (w tym domu odbiornik TV - nowoczesne można do tego wykorzystać - nie jest urządzeniem, za którym tęsknimy).
Całą instalację i konfigurację Poziomki należy więc przeprowadzić bez… monitora!
Oczywiście, że jest to możliwe i na tym właśnie polega piękno całego przedsięwzięcia.
Pomijam opis niektórych kroków. Dokumentacji na ten temat jest w internecie ogromna ilość. Proponuję zaczynać z opisu jak na wymienionej stronie. Tutaj podaję tylko najważniejsze zanotowane uwagi.
Od 2016 roku nowsze wersje Raspberry nie pozwalają na automatyczne połaczenie ssh.
Aby połaczyc się poprzez ssh należy stworzyć plik w bootowalnej partycji SSD. Plik musi mieć nazwę ssh (bez rozszerzenia) i dowolną zawartość (może byc pusty).
The default username to log in to a raspberry pi is pi and the password is raspberry
Wykonujemy z laptopu pierwsze połaczenie z Poziomką:
>>>
ssh pi@192.168.8.143
jako password: raspberry
Po pierwszym logowaniu plik ssh jest usuwany. Nie będzie więcej możliwości wlogowania się poprzez ssh. Chyba, że wykonamy następujące komendy:
>>>
sudo systemctl enable ssh
sudo systemctl start ssh
W tym momencie jest też właściwy moment na zmianę hasła dostępu (nie tyle z potrzeby, co z bardzo poważnej, silnej i niegłupiej zasady obowiązującej w świecie komputerowym), poprzez wykonanie komendy passwd.
Aby doinstalować nowe oprogramowanie, wykonuję komendę apt-get. W tym przypadku instaluję Midnight Commander, do którego przywykłem:
>>>
sudo apt-get install mc
Wygodnie jest posiadać dostęp do PI nie wymagający wpisywania hasła. Można wtedy łatwo korzystać z różnego rodzaju skryptów automatyzujących prace wymagające komunikacji między laptopem a PI, przesyłu plików czy wykonywania komend zdalnie. Sposób na uzyskanie dostępu bez konieczności wpisywania hasła jest taki sam, jak w przypadku innych platform linuksowych; Dokładny opis jest łatwy do odnalezienia w dokumentacjach czy w internecie, np. tutaj: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-2
Po zalogowaniu widzimy komunikat:
Wi-Fi is currently blocked by rfkill. Use raspi-config to set the country before use.
Należy więc wykonać konfigurację nowego systemu:
>>>
sudo raspi-config
Na pewno nie zaszkodzi odnowić system operacyjny (bo ten zainstalowany ma już pewien czas życia):
>>>
sudo apt-get update
sudo apt-get upgrade
Zbliżamy się do istotnego momentu, celu naszej pracy, do instalacji NFS (Network File System)
Powtarzam za opisem na stronie https://pimylifeup.com/raspberry-pi-nfs/
>>>
sudo nano /etc/exports
Wpisz tam linie (to jest tylko przykład):
>>>
/media/pi/8be3d9c9-e79d-4c68-aaab-8b54bd1ec134/NFS *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)
Po czym:
>>>
sudo exportfs -ra
Chcielibyśmy mieć dostęp do NFS ze strony klienta (laptopa). Opis jest tutaj: https://linuxize.com/post/how-to-mount-an-nfs-share-in-linux/ Należy wukonać na laptopie następujące komendy:
>>>
sudo apt install nfs-common
Po czym:
>>>
sudo mkdir /media/NFS
sudo mount -t nfs -o nfsvers=3 -vvvv 192.168.8.143:/media/pi/8be3d9c9-e79d-4c68-aaab-8b54bd1ec134/NFS /media/NFS
Aby NFS był automatycznie przyłączany przy starcie laptopa należy w pliku /etc/fstab wpisać coś takiego (to tylko przykład):
>>>
192.168.8.146:/media/pi/8be3d9c9-e79d-4c68-aaab-8b54bd1ec134/NFS /media/NFS nfs defaults 0 0
Dokładny opis konfiguracji dostępu Wi-Fi opisano na stronie: https://pimylifeup.com/setting-up-raspberry-pi-wifi/
Chcielibyśmy, aby Poziomka posiadała statyczny adres IP podczas łączenia przez Wi-Fi. W naszym przypadku należy dopisać kilka linii w pliku /etc/dhcpcd.conf:
>>>
sudo nano /etc/dhcpcd.conf
U mnie wygląda to tak (wymuszam otrzymanie konkretnego adresu IP 192.168.8.146 z serwera DHCP na routerze):
>>>
interface wlan0
static ip_address=192.168.8.146/24
static routers=192.168.8.1
static domain_name_servers=192.168.8.1
Należy jedynie upewnić się wcześniej, że adres 192.168.8.146 nie jest zajęty przez inne urządzenie.
Teraz można restartować PI:
>>>
sudo reboot
Na routerze warto też ustawić statyczny adres IP dla PI, by uniknąć systuacji przydzielenia tego adresu innemu lokalnemu urządzeniu.
Proste?
Proste, jak drut do snopowiązałki!
Na razie rozwiązanie służy mi wyśmienicie. Połączenie Wi-Fi między Poziomką w laptopem, dla intensywnego przenoszenia dużych plików jest nieco wolne: lepiej użyć kabla między PI a routerem. Dla oglądania filmów nie ma to znaczenia.
W razie problemów z NFS, sprawdzić należy, czy serwer NFS na Poziomce jest uruchomiony, po jej wystartowaniu:
>>>
sudo systemctl restart nfs-kernel-server
Po stronie zaś klienta (laptopa) można ręcznie przeprowadzić podłaczenie:
>>>
sudo mount -t nfs -v -o nfsvers=3 192.168.8.146:/media/pi/8be3d9c9-e79d-4c68-aaab-8b54bd1ec134/NFS /media/NFS