Instalacja pakietów na zewnętrznym nośniku i wszystkie wynikłe z tego problemy
Ostatnia zmiana: 2013-11-26 18:43

Założenie - dysk jest poprawnie podłączony i zamontowany w /mnt/sda1.

Ze względu na specyfikę dowiązań, system plików musi być ext2, ext3 lub ext4 - w przypadku vfat brak jest możliwości nadawania uprawnień, dowiązań symbolicznych itd, więc nie nadaje się do tego celu.

Konfiguracja



    # echo "dest usb /mnt/sda1" >> /etc/opkg.conf

Oznacza to że robimy "cel" o nazwie usb wskazujący na /mnt/sda1. Wszystkie niezbędne katalogi na /mnt/sda1 wykonają się samodzielnie podczas instalacji pakietów więc nie ma potrzeby ich tworzyć ręcznie.

Instalacja pakietów

Instalując pakiet należy jawnie wskazać gdzie ma być instalowany przez podanie opcji -d, np.


    # opkg -d usb install wget

I to wszystko. Cała zawartość pakietu zostanie zainstalowała względem /mnt/sda1 a nie / jak się dzieje normalnie.

Problemy

Biblioteki

Większość programów binarnych wymaga do działania określonych bibliotek. Ponieważ podczas instalacji programu mogą też instalować się biblioteki, należy określić gdzie system ma ich szukać. Można to wykonać na dwa sposoby:

- ustawienie zmiennych środowiskowych


    # export LD_LIBRARY_PATH=/mnt/sda1/lib:/mnt/sda1/usr/lib:$LD_LIBRARY_PATH

w pliku /etc/profile

- lub wykonanie dowiązań symbolicznych


    # ln -s /mnt/sda1/lib/* /lib
    # mkdir -p /usr/lib
    # ln -s /mnt/sda1/usr/lib/* /usr/lib

Dostęp do programów

Aby program można było uruchomić trzeba podać pełną ścieżkę do niego lub musi być na ścieżkach które są przeszukiwane.
Do ustawienie w zmiennych środowiskowych


    # export PATH=/mnt/sda1/bin:/mnt/sda1/sbin:/mnt/sda1/usr/bin:/mnt/sda1/usr/sbin:$PATH

w pliku /etc/profile lub należy wykonać odpowiednie dowiązania symboliczne:


    # ln -s /mnt/sda1/bin/* /bin
    # mkdir -p /usr/bin
    # ln -s /mnt/sda1/usr/bin/* /usr/bin

Pliki z danymi

Niektóre programy szukają swoich plików (np. z danymi, konfiguracji) w ściśle określonym miejscu. Przykładem jest samba, która wymaga pliku konfiguracyjnego w /etc/samba.conf. Jeżeli zainstalujemy sambę na zewnętrznym nośniku, to ten plik zostanie zainstalowany w /mnt/sda1/etc/samba.conf, a sam program nie będzie wiedział że ten plik tam się znajduje (bo i niby skąd). Rozwiązanie problemu - odpowiednie dowiązanie


    # ln -s /mnt/sda1/etc/* /etc

Tak samo należy postąpić z innym danymi. Np. program dctcs wymaga plików z grafiką w /usr/share/dctcs. Instalując go na nośniku zewnętrznym
należy zadać o to, że program widział swoje dane, więc w tym konkretnym przypadku należy wykonać


    # ln -s /mnt/sda1/usr/share/dctcs /usr/share

I należy tak postąpić z każdym plikiem/katalogiem wymaganym przez program!

Skrypty startowe

Oczywiście skrypty startowe instalują się też na zewnętrznym nośniku, więc należy zadbać o ich odpowiednie uruchomienie jeżeli chcemy mieć autostat zainstalowanego programu.
Wystarczy


    # ln -s /mnt/sda1/etc/init.d/* /etc/init.d/

oraz wykonać


    # /etc/init.d/program start

Ale uwaga - czasami w skryptach startowych jest na stałe zapisane, że program uruchamia się z /usr/bin! więc należy odpowiednio zmodyfikować ten skrypt (zainstalowany program znajduje się w /mnt/sda1/usr/bin a nie /usr/bin) lub zrobić odpowiednie dowiązania symboliczne

Inne problemy

Może zdarzyć się sytuacja, że program wywołuje inny program lub testuje jego obecność podając jego pełną ścieżkę. Niestety nie ma jak tego sprawdzić bezpośrednio. Jedną z metod jest wyszukanie czego program może szukać w ścieżce bin poleceniem


    # strings program | grep bin

i sprawdzić wynik. Jeżeli będą tam wpisy typu /usr/bin/program to prawie na pewno musi on tam się znaleźć. Rozwiązanie jest tylko jedno - przenieść program do określonej lokalizacji lub zrobić dowiązanie symboliczne do programu. Tak jest w przypadku dctcs który uruchamia ctorrenta podając pełną ścieżkę: /usr/bin/ctorrent.

Inną metodą jest przeanalizowanie źródeł programu (!).

Niekiedy ścieżki dostępu do danych lub programów są określone w plikach konfiguracyjnych - należy wtedy więc odpowiednio je zmodyfikować uwzględniając zainstalowane pakiety na zewnętrznym nośniku.

Podsumowanie

Jak widać, instalacja pakietów na zewnętrznym nośniku może przysporzyć wielu problemów gdyż programy mogą mieć na stałe zaszyte informacje gdzie szukać innych programów czy danych. Być może lepiej jest zrobić główny system plików na zewnętrznym nośniku.