Przenieś pakiety Snap do innej lokalizacji / katalogu

13

Chcę przenieść zainstalowane pakiety przystawek do katalogu domowego. Pakiety Snap są nieco większe niż pakiety .deb, dlatego zajmują miejsce na mojej partycji root. Wiem, że paczki się znajdują /var/lib/snapd/snapsi pracują z montażem paczki /snap/app_dir. Próbowałem utworzyć łącze, ale to nie zadziałało.

ultimatex
źródło

Odpowiedzi:

15

Zmień katalog instalacyjny Snap

Jest to częsty problem, o który prosi wielu. Wygląda na to, że programiści nie zamierzają go wkrótce rozwiązać, dlatego zaproponowano kilka rozwiązań.

Pierwszym rozwiązaniem , któremu społeczność zdecydowanie odmówiła, ale nie próbowałem, jest użycie dowiązań symbolicznych do połączenia katalogów prowadzących do przyciągania. Ta metoda wydaje się nie działać, ponieważ odpowiedzi społeczności mówią, że apparmom nie działa z dowiązaniami symbolicznymi.

Drugim rozwiązaniem jest mount --bindkatalog, /val/lib/snapd/snapsktóry działa dla mnie dobrze z już zainstalowanymi aplikacjami, ale nie udało się zainstalować nowych aplikacji, ponieważ przenosiłem katalog na inną partycję. To dało mi błąd dotyczący twardego połączenia aplikacji Snap z katalogiem pamięci podręcznej, który znajduje się w /var/lib/snapd/cache. Nie wiem, czy to rozwiązanie może działać, jeśli lokalizacja znajduje się na tej samej partycji, czy nie; ale to jest powód, dla którego przenoszę katalog Snap, aby zwolnić miejsce z partycji na inną.

Trzecią i działającą opcją jest przeniesienie /var/lib/snapdkatalogu jako całości, a następnie przeniesienie mount --bindgo z innej lokalizacji i to działało dla mnie i oto kroki.

Tylko mała uwaga, już wiesz, że po wykonaniu rsync w poniższych krokach możesz wykonać kopię zapasową danych w /var/lib/snapdinnej lokalizacji, dopóki cały proces nie zostanie pomyślnie zakończony, a następnie możesz usunąć dane kopii zapasowej, jeśli chcesz zwolnić więcej miejsca.

##############################################################################
# Take Care this section may break the System !!!
##############################################################################
##Move snap folder to Home instead of root.
#Create the directory : you can change the location
mkdir /home/$USER/snap/snapd

#Copy the data
sudo rsync -avzP /var/lib/snapd/  /home/$USER/snap/snapd/

#Do backups
sudo mv /var/lib/snapd /var/lib/snapd.bak
sudo cp /etc/fstab /etc/fstab.bak

#Change fstab (Change $USER with your name or change the path totally)
echo "/home/$USER/snap/snapd /var/lib/snapd none bind 0 0" | sudo tee -a /etc/fstab

#remount fstab Or reboot.
sudo mkdir /var/lib/snapd
sudo mount -a

if ls  /var/lib/snapd/ | grep snaps
then
    echo "Re-mounting snapd folder is done successfully. !!!!"
    sudo rm -rf /var/lib/snapd.bak
else
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "

    # Trying to revert automatically
    sudo cp /etc/fstab.bak /etc/fstab

    sudo mount -a
    sudo umount /var/lib/snapd

    sudo mv /var/lib/snapd.bak /var/lib/snapd

    echo "Files located at ~/snap/snapd should be removed, but it keeped for
    recovery until you ,manually, reboot the system and make sure the service
    is running correctly then manually you can remove that folder ~/snap/snapd
    !!!!!!!!!!!!!!, you should do that manually."

fi
##############################################################################
# Take Care the pervious section may break the System !!!
##############################################################################

Bibliografia

  1. Niestandardowa lokalizacja dysku dla niektórych problemów ze snapami
  2. zadaj ubuntu Pytanie (Nie najlepsze rozwiązanie) Link
  3. Sugeruje się użycie bind mount zamiast dowiązań symbolicznych w ruchomych katalogach przyciągania Link
  4. Różnice między mocowaniem binda a linkami symbolicznymi Link
  5. Ustaw permenant na stałe
Muhammad Yusuf
źródło
1
Działa świetnie dla mnie. Dziękuję Ci! Musiałem (ponownie) utworzyć katalog / var / lib / snapd po przeniesieniu go do .bak, aby mount -a działał
Salim
@Salim, masz rację, przegapiłem ten krok, który dodam do skryptu
Muhammad Yusuf
11

W końcu znalazłem sposób.

  • Najpierw przenieś pakiet przystawki do żądanej lokalizacji. Niech snap_app.snapjako aplikacja, którą chcesz przenieść. Przenieś paczkę z /var/lib/snapd/snaps/snap_app.snapna ~/snaps/snap_app.snap.
  • Następnie musisz zmienić opcję montowania w /etc/systemd/system/snap-snap_app-90.mount, liczba w nazwie pliku może się różnić. Ma dyrektywę na What=/snap_app_loactionmocy [Mount]. Zmień go na nową lokalizację pakietu przystawki.
  • Na koniec musisz dowiązać symbolicznie pakiet snap do /var/lib/snapd/snaps/.
    Dawny: ln -s ~/snaps/snap_app.snap /var/lib/snapd/snaps/snap_app.snap

Pakiet Snap jest oryginalnie zamontowany w /snap/snap_appkatalogu. możesz to sprawdzić za pomocą mount. Uruchom ponownie komputer i gotowe.

ultimatex
źródło
forum.snapcraft.io/t/… może być również pomocne
Adam Monsen