Raspberry Pi + Seafile (cz. 2)

Egon zawsze ma plan!

Będąc dzieckiem lubiłem oglądać duński kryminalny serial komediowy o gangu sympatycznych przestępców-nieudaczników - Gang Olsena. Wspomnienie postaci głównego bohatera wywołuje uśmiech także dzisiaj. Jeden z bohaterów - Egon Olsen zawsze posiadał szczegółowo opracowany plan działania, opierający się na wykorzystaniu tak prozaicznych przedmiotów jak choćby gumka recepturka, kanapka, rękawiczki…

Przekonanie o zaletach drobiazgowego planowania utrwaliło mi się w wieku dorosłym. Na szczęście łącznie z założeniem, że do życia należy mieć dystans. Biorąc pod uwagę powyższe założenie proponuję rozpocząć naszą przygodę od sporządzenia planu działania. Potrzebujemy: mikrokomputera Raspberry Pi, zasilacza, karty SD i dostępu do sieci.

Cel jest następujący - zbudowanie prostego i w pełni funkcjonalnego dysku sieciowego Seafile.

Konsekwencją tak postawionego celu jest wybór jako nośnika danych karty SD/microSD (w zależności od wersji Maliny). Oczywiście nic nie stoi na przeszkodzie, aby nośnikiem danych był zewnętrzy dysk USB, jeden lub kilka dysków - jeśli ktoś pokusiłby się o zbudowanie urządzenia NAS z prawdziwego zdarzenia (takiego z RAID’em). Za wyborem karty SD jako nośnika przemawia prostota konstrukcji i brak plątaniny kabli. To rozwiązanie ma jedną podstawową wadę - pierwszy lepszy zewnętrzny dysk USB będzie miał przynajmniej kilkakrotnie większą pojemność od karty SD. Największe pod względem pojemności karty pamięci a do tego szybkie są dość drogie. Z drugiej strony - nie zawsze potrzebujemy dostępu do wszystkich swoich danych zgromadzonych na jednym dużym dysku sieciowym. Z mojego punktu widzenia wykorzystanie jako nośnika karty SD gwarantuje kilkakrotnie większą pojemność w stosunku do tego, co oferuje np. Dropbox, przy zachowaniu porównywalnej użyteczności.

Za wyborem karty SD przemawia inny argument - zużycie energii.

Tak wygląda porównanie zużycia energii Raspberry Pi wyposażonego tylko w kartę SD i Raspberry Pi wyposażonego w kartę oraz dysk zewnętrzny USB (do pomiaru został użyty dysk WD 500GB 2MB 5400rpm USB 2,5cala). Wykres przedstawia moment uruchomienia urządzenia do zalogowania się na niego poprzez SSH.

rpi01

W przypadku urządzenia z podłączonym dyskiem USB po kilkudziesięciu sekundach, gdy dysk zaparkuje, zużycie energii spada do 3,5 W. Wielkość ta pozostanie niezmienna do momentu rozpoczęcia używania dysku, czyli wykonywania odczytu i zapisu danych z dysku. O ile sama czynność odczytu czy zapisu trwa ułamki sekund, to uruchomiony w ten sposób dysk pozostawi na woltomierzu następujący wykres:

rpi02

Zostaję więc przy samej karcie SD/microSD jako nośniku danych. Co do wyboru karty - krótko - im szybsza i większa, tym lepiej. Karty SD dzielimy m.in. na tzw. klasy. Klasa określa minimalną prędkość zapisu danych na pustej karcie w MB/s (klasa 4 oznacza możliwość zapisywania danych z prędkością co najmniej 4 MB/s). W sumie biorąc pod uwagę przeznaczenie nie ma co oszczędzać na wyborze karty. Jedynie należy pamiętać, że modele A i B posiadają gniazdo na kartę SD, natomiast kolejne modele (od B+ w górę) posiadają gniazdo na kartę microSD.

W kwestii wyboru samej Maliny, to mogę tylko potwierdzić, że używany przeze mnie model B z 512 MB pamięci oraz z jednordzeniowym procesorem ARM 700 MHz działał w roli serwera Seafile (i działa nadal) bardzo przyzwoicie, pracując bezawaryjnie przez prawie rok czasu. Nie wiem jak powyższe rozwiązanie sprawdzałoby się na modelu A z 256 MB pamięci RAM. Pozostałe wersje Raspberry Pi są pewniakami.

Do prawidłowego działania każdego modelu Raspberry Pi wystarczy dowolny zasilacz z wtyczką (lub przejściówką) microUSB o napięciu 4,75-5,25 V i natężeniu od 0,5 A (model A) do nawet 2,5 A (model 3). Sprawa komplikuje się w momencie, kiedy będziemy chcieli podłączyć jeden lub więcej dysków zewnętrznych. Nie ma z tym większych problemów, pod warunkiem zapewnienia odpowiedniego zasilania. O ile jest szansa na podłączenie i uruchomienie jednego dysku USB 2,5”, to podłączenie większej ilości wymaga użycia aktywnego huba USB. W przypadku potrzeby podłączenia jednego dysku zewnętrznego należy w pliku /boot/config dopisać linię o wartości:

max_usb_current=1

Powinno zadziałać.

Przygotowanie karty SD/microSD

Zaczynam od pobrania obrazu Raspbiana - dystrybucji systemu GNU/Linux bazującej na Debianie i przeznaczonej na urządzenia Raspberry Pi.

Wybieram obraz minimalny - Raspbian Jessie Lite (wydanie z dnia 18 marca 2016 r.). Dla mnie jest to optymalny wybór. Dawniej musiałem w zainstalowanym systemie usuwać wiele niepotrzebnych aplikacji. Teraz mam idealnie odchudzoną dystrybucję.

Warto jeszcze sprawdzić czy pobrany obraz jest prawidłowy poprzez policzenie i porównanie sumy kontrolnej SHA-1:

sha1sum 2016-03-18-raspbian-jessie-lite.zip

Wynik ma być identyczny jak ten na stronie. Teraz mogę rozpakować obraz.

Sprawdzam jaki plik urządzenia reprezentuje moją kartę pamięci SD/microSD. W tym celu w konsoli wydaję polecenie:

lsblk

Dostaję spis urządzeń blokowych. Moją kartę reprezentuje plik o nazwie: /dev/sdb.

Najprostsza metoda instalacji systemu to zapisanie obrazu na kartę poleceniem dd.

sudo dd if=$HOME/Pobrane/2016-03-18-raspbian-jessie-lite.img of=/dev/sdb

Dla tych, którzy nie przepadają za posługiwaniem się konsolą, jest np. program Dyski (gnome-disk-utility). Z poziomu aplikacji wystarczy wybrać opcję Przywróć obraz dysku…,

rpi03

a następnie Rozpocznij przywracanie….

rpi04

Po chwili mam prawie gotowy nośnik.

rpi05

Prawie, bo pozostanie jeszcze dokończenie konfiguracji nośnika już na samej Malinie. W tym celu należy ją uruchomić.

Pierwsze uruchomienie Raspberry Pi

Aby po raz pierwszy uruchomić Raspberry Pi wkładamy przygotowaną kartę SD/microSD do gniazda nośnika, podłączamy kabel sieciowy i kabel zasilający. Po kilkudziesięciu sekundach można zalogować się na Malinę poprzez SSH. Muszę jednak znać adres urządzenia.

W celu ustalenia z jakiego adresu w sieci korzysta Raspberry Pi wystarczy, że przepytam sieć z adresów wszystkich urządzeń, które posiadają otwarty port 22 (domyślny port SSH).

nmap -p 22 --open -sV 192.168.1.0/24

Dla zwolenników aplikacji z graficznym interfejsem jest np. nakładka graficzna na nmap o nazwie Zenmap.

rpi06

Pozostaje jeszcze jedna metoda - można po prostu przejrzeć statystyki LAN routera.

rpi07

Obojętnie jaką metodę wybiorę, wiadomo, że w tym przypadku należy zalogować się na adres 192.168.1.140, użytkownik - pi.

ssh pi@192.168.1.140

Domyślne hasło to: raspberry. Gotowe!

Zaczynam od wylistowania urządzeń blokowych Raspberry Pi.

lsblk

Wynik:

pi@raspberrypi:~ $ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.8G  0 disk 
|-mmcblk0p1 179:1    0   60M  0 part /boot
`-mmcblk0p2 179:2    0  1.2G  0 part /
pi@raspberrypi:~ $ 

Dzięki temu wiem jak nazywa się dysk - mmcblk0 oraz jakie partycje są dostępne.

Pora na dokończenie konfiguracji nośnika. W tym celu posłużę się aplikacją cfdisk.

sudo cfdisk /dev/mmcblk0

Wykorzystam całą wolną przestrzeń - ustawiam się kursorem na pozycji wskazującą na wolną przestrzeń i wybieram New. Następnie zatwierdzam wielkość dostępnej przestrzeni i wybieram rodzaj partycji - partycję główną.

rpi08

Jeżeli typ partycji nie zostanie automatycznie ustawiony jako 83 - linux, mogę zrobić to wybierając opcję Type. Tak ustawioną partycję należy zapisać - Write. Można wyjść - Quit.

sudo reboot

Partycję mam ustawioną, pora ją sformatować:

sudo mkfs.ext4 /dev/mmcblk0p3 -L rpidata

Teraz dokonam edycji pliku /etc/fstab

sudo nano /etc/fstab

dodając wiersz:

/dev/mmcblk0p3  /mnt            ext4    defaults        0       0

Konfiguruję stały adres IP edytując plik /etc/network/interfaces. Powiedzmy, że adresy w mojej sieci LAN 100-150, to adresy DHCP, dalsze to adresy stałe wybranych urządzeń. W takim razie moje Raspberry Pi będzie miało adres 192.168.1.151. Plik będzie wylądał następująco:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.151
netmask 255.255.255.0
network 192.168.1.0
broadcast 255.255.255.255
gateway 192.168.1.1

Wcześniej podałem prosty przykład sprawdzenia wszystkich urządzeń posiadających otwarty domyślny port SSH. Najwyższy czas na jego zmianę. Edytuję plik /etc/ssh/sshd_config, zmieniając wiersz

Port 22

na inną wartość, najlepiej powyżej 5000.

Port 51111

Od tej pory logując się poprzez SSH muszę wskazać port:

ssh -p 51111 pi@192.168.1.151

Ostatnią rzeczą do zmiany jest hasło użytkownika pi.

passwd pi

Pozostała już tylko aktualizacja systemu:

sudo apt-get update

sudo apt-get upgrade

Zobaczmy, jaki wynik zwróci komenda df:

df

Czyszczę lokalne repozytorium:

sudo apt-get clean

Ponownie wydaję polecenie df. Wynik? Główny system plików /dev/root zmniejszył swoją objętość z 81% do 75% powierzchni partycji, tj. lekko ponad 60 MB pamięci. Opłaca się czyścić lokalne repozytorium, szczególnie dysponując tak skromnym dyskiem.

W ten sposób mam gotowe do pracy i wstępnie skonfigurowane urządzenie, na którym będę mógł zainstalować Seafile…

greyseal

comments powered by Disqus