Raspberry Pi (jedną sztukę) wykorzystuje również jako serwer DLNA. Wprawdzie mój TV ma taką funkcję, mój domowy router ma taką funkcję, a nawet konsola – to jednak MiniDLNA (obecnie jako ReadyMedia) na Raspberry Pi jakoś najbardziej mi przypadło do gustu (dodatkowo nie ma problemów z różnymi formatami mediów, ani z napisami).

Oczywiście multimediów nie trzymam na karcie pamięci, a na dysku USB – ale sam dysk nie jest wpięty bezpośrednio do Pi (nawet nie przez aktywnego HUBa) ze względu na relatywnie mały transfer jaki wyciąga tak podłączony dysk (USB 2.0 + LAN 100 Mbps, i to jako jeden układ), co przy oglądaniu/słuchaniu nie ma znaczenia, to przy kopiowaniu materiałów już jak najbardziej.

Dlatego MiniDLNA korzysta z dysku twardego, który jest podłączony do routera (1000 Mbps), i następnie zamontowany w Raspberry Pi jako zasób sieciowy.

To wszystko (montowanie zasobów sieciowych – Samba) oczywiście odbywa się przy starcie systemu, tak by było gotowe przed uruchomieniem się procesu MiniDLNA.

I wszystko pięknie działało za czasów Debiana 7 (Wheezy), a przestało wraz z nadejściem Debiana 8 (Jessie), zarówno jako aktualizacja systemu, jak i nowa instalacja, więc postanowiłem sięgnąć po alternatywne rozwiązanie…

Automatyczne montowanie zasobów sieciowych w Raspbian/Debian 8 Jessie

Z samym MiniDLNA nie było większych problemów (poza zmianą nazwy procesu), to dyski sieciowe za nic nie chciały się podłączyć prawidłowo podczas startu systemu – nie pomogły zaklęcia w pliku „fstab” ani „rc.local” (ręczne wywołanie już po starcie normalnie montowało zasoby, więc tu raczej wszystko OK).

Przeszukałem internet – nie tylko ja miałem taki problem… Stron z poradami pełno, tyle, że w większości ciągle pojawiały się te same – a dodatkowo, u mnie żadna albo nie chciała działać, lub działanie pozostawiało wiele do życzenia.

Problem można też rozwiązać za pomocą opcji „Wait for Network at Boot” jaka pojawiła się w aplikacji raspi-config (wtedy nie ma potrzeby korzystania ze skryptu, zadziałają standardowe metody).

LSBInitScripts przychodzi z pomocą

Tak więc trzeba było podejść do sprawy trochę mniej konwencjonalnie, i napisać skrypt, który będzie się uruchamiał automatycznie podczas startu – jako usługa (LSBInitScripts).

Nie będę tutaj opisywał podstaw – jeśli ktoś zainteresowany to zapraszam do wcześniejszych wpisów, w tym np. tego dotyczącego automatycznego uruchamiania skryptów/poleceń podczas startu systemu Linux.

Przykładowy skrypt – przerobiony tak, by można go było upublicznić – wygląda tak:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          mount-smb
# Required-Start:    $all
# Required-Stop:     $local_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Mount SMB @ system start + miniDLNA start
# Description:       Mount SMB @ system start + miniDLNA start
### END INIT INFO

## -----
## Script URL:
## https://webinsider.pl/add/download/?link=mount-smb
## Info URL (@PL):
## http://Webinsider.pl/debian-8-jessie-automatyczne-montowanie-zasobow-sieciowych
## -----

NAME=mount-smb
SCRIPTNAME=/etc/init.d/$NAME

COMMANDS="{start|stop|restart|install|uninstall}"

$USER_NAME= webinsider.pl # Samba user name 
$USER_PASSWORD= 123456 ;-) # Samba user password

REMOTE_FS= //10.0.0.1/hdd01 # Remote dir
LOCAL_FS= /media/smb01 # Local mount dir

f_install()
{
	sudo cp -r $0 /etc/init.d
	# Debian 7 Wheezy:
	#sudo update-rc.d $NAME defaults
	# Debian 8 Jessie:
	sudo insserv $NAME
	sudo /etc/init.d/$NAME start
	sudo ln -s /etc/init.d/$NAME /bin/$NAME
	exit 0
}

f_uninstall()
{
	sudo /etc/init.d/$NAME stop
	sudo update-rc.d $NAME remove
	sudo rm /etc/init.d/$NAME
	sudo rm /bin/$NAME
	exit 0
}


f_start()
{
	sudo mount -t cifs -o username=$USER_NAME,password=$USER_PASSWORD $REMOTE_FS $LOCAL_FS
	#sudo service minidlna start
	exit 0
}

f_stop()
{
	sudo umount -l $LOCAL_FS
	exit 0
}

# f_restart() only restart) ...


case "$1" in
  start)
	f_start
	;;
  stop)
	f_stop
	;;
  restart)
	f_stop
	f_start
	;;
  install)
	f_install
	;;
  uninstall)
	f_uninstall
	;;
  *)
	echo "Use: "$SCRIPTNAME $COMMANDS
	exit
	;;
esac

exit 0

MiniDLNA

A jeśli tak jak ja chcecie dodatkowo – po zamontowaniu zasobów sieciowych – uruchamiać serwer miniDLNA, to wystarczy lekko zmodyfikować sekcję „f_start”, dodając:

sudo service minidlna start

Czyli całość (sama sekcja „f_start”) będzie wyglądała tak:

f_start()
{
	sudo mount -t cifs -o username=$USER_NAME,password=$USER_PASSWORD $REMOTE_FS $LOCAL_FS
	sudo service minidlna start
	exit 0
}

Pamiętajcie tylko by w takiej sytuacji wyłączyć automatyczny start usługi miniDLNA:

sudo update-rc.d -f minidlna remove

Konfiguracja

Pamiętajcie tylko, by wpisać swoje ustawienia/dane między te 2 linijki:

# START CONFIG HERE:

# END CONFIG

Po instalacji konfiguracja możliwa jest za pomocą polecenia:

sudo nano /etc/init.d/mount-smb

I ew restart:

sudo /etc/init.d/mount-smb restart

Instalacja

Skrypt możecie utworzyć np. za pomocą polecenia:

sudo nano mount-smb

Otworzy Wam się edytor, do którego należy wkleić kod skryptu (zmieniając odpowiednio ustawienia).

Możecie też pobrać skrypt za pomocą polecenia:

sudo wget https://webinsider.pl/add/download/?link=mount-smb -O mount-smb

I pamiętajcie o edycji ustawień/parametrów:

sudo nano mount-smb

Następnie wystarczy zapisać i zainstalować:

sudo chmod +x mount-smb

sudo mount-smb install

I to właściwie tyle  – sprawdziłem u siebie, wreszcie rozwiązanie które w 100% działa :-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk