Verschieben Sie Snap-Pakete an einen anderen Speicherort / in ein anderes Verzeichnis

13

Ich möchte installierte Snap-Pakete in das Ausgangsverzeichnis verschieben. Snap-Pakete sind etwas größer als .deb-Pakete und belegen daher Speicherplatz in meiner Root-Partition. Ich weiß, dass sich Pakete in befinden /var/lib/snapd/snapsund mit dem Mounten des Pakets arbeiten /snap/app_dir. Ich habe versucht, eine Verbindung herzustellen, aber es hat nicht funktioniert.

Ultimatex
quelle

Antworten:

13

Ändern Sie das Snaps-Installationsverzeichnis

Dies ist ein häufiges Problem, nach dem viele fragen. Es scheint, dass Snap-Entwickler nicht beabsichtigen, es bald zu lösen, daher wurden einige Lösungen vorgeschlagen.

Die erste Lösung , die von der Community stark abgelehnt wurde, aber ich habe es nicht versucht, besteht darin, symbolische Links zu verwenden, um die Verzeichnisse zu verknüpfen, die zu Snaps führen. Diese Methode scheint nicht zu funktionieren, da die Community-Antworten besagen, dass Apparmom nicht mit symbolischen Links funktioniert.

Die zweite Lösung ist mount --binddas Verzeichnis, /val/lib/snapd/snapsdas für mich mit den bereits installierten Anwendungen gut funktioniert, aber keine neuen Anwendungen installieren konnte, weil ich das Verzeichnis auf eine andere Partition verschoben habe. Das gab mir einen Fehler bezüglich der harten Verknüpfung der Snap-Anwendung mit dem Cache-Verzeichnis, in dem sich befindet /var/lib/snapd/cache. Ich weiß nicht, ob diese Lösung funktioniert, wenn sich der Speicherort auf derselben Partition befindet oder nicht. Dies ist jedoch der Grund, warum ich das Snap-Verzeichnis verschiebe, um Speicherplatz von der Partition auf eine andere freizugeben.

Die dritte und funktionierende Option besteht darin, das /var/lib/snapdVerzeichnis als Ganzes mount --bindvon einem anderen Speicherort dorthin zu verschieben. Das hat bei mir funktioniert, und hier sind die Schritte.

Nur eine kleine Anmerkung, Sie wissen bereits, nachdem die rsync in den folgenden Schritten ausgeführt wurde, können Sie die Daten /var/lib/snapdan einem anderen Speicherort sichern, bis der gesamte Prozess erfolgreich abgeschlossen ist. Anschließend können Sie die Sicherungsdaten entfernen, wenn Sie mehr Speicherplatz freigeben möchten.

##############################################################################
# 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 !!!
##############################################################################

Verweise

  1. Benutzerdefinierte Plattenposition für bestimmte Snaps Ausgabe
  2. Ubuntu-Frage stellen (Nicht die beste Lösung) Link
  3. Vorschlag zur Verwendung Bindehalterung anstelle von symbolischen Links in bewegten Schnapp Verzeichnissen Verbindung
  4. Unterschiede zwischen Bind Mount und symbolischen Links Link
  5. Binden Sie Mount Mount dauerhaft
Muhammad Yusuf
quelle
1
Funktioniert super für mich. Vielen Dank! Ich musste das Verzeichnis / var / lib / snapd erst (neu) erstellen, nachdem ich es nach .bak verschoben hatte, damit mount -a funktioniert
Salim
@ Salim, Sie haben Recht, ich habe diesen Schritt verpasst, den ich dem Skript hinzufügen werde
Muhammad Yusuf
10

Ich habe endlich einen Weg gefunden.

  • Bewegen Sie zuerst das Snap-Paket an den gewünschten Ort. Lassen Sie snap_app.snapals App Sie verschieben. Verschieben Sie das Paket von /var/lib/snapd/snaps/snap_app.snapnach ~/snaps/snap_app.snap.
  • Dann müssen Sie die Mount-Option in ändern /etc/systemd/system/snap-snap_app-90.mount. Die Nummer im Dateinamen kann variieren. Es hat Richtlinie What=/snap_app_loactionunter [Mount]. Ändern Sie es in Ihren neuen Snap-Paketspeicherort.
  • Schließlich müssen Sie das Snap-Paket mit verknüpfen /var/lib/snapd/snaps/.
    Ex: ln -s ~/snaps/snap_app.snap /var/lib/snapd/snaps/snap_app.snap

Das Snap-Paket wird ursprünglich in das /snap/snap_appVerzeichnis eingebunden . Sie können es mit überprüfen mount. Starten Sie Ihren Computer neu und Sie sind fertig.

Ultimatex
quelle
forum.snapcraft.io/t/… kann auch hilfreich sein
Adam Monsen