Warum können Snap-Dateien in keiner Weise geändert werden?

14

Ich habe lange versucht, das Symbol von Blender zu ändern, aber egal was ich mache, ich darf nichts in bearbeiten /snap/blender-tpaw/3/.

Folgendes habe ich versucht:

  • Bearbeiten der Dateien von nautilusaußen sudo.
  • Bearbeiten der Dateien von nautilusmit sudo( sudo nautilusim Terminal).
  • Verwenden von Terminalbefehlen wie cpoder rmohne sudo.
  • Terminalbefehle mit sudo(wie sudo cp <source> /snap/blender-tpaw/3/oder sudo rm /snap/blender-tpaw/3/<filename.ext>) verwenden
  • Alles oben in einem Root-Terminal machen (using sudo -i)

In jedem Fall erhalte ich folgende Fehlermeldung:

cannot remove/copy '/snap/blender-tpaw/3/filename.ext': Read-only file system

Dabei ist Dateiname die Datei und .ext die Erweiterung.

Dies gilt auch für andere Snaps-Dateien, nicht nur für Blender.

Mache ich hier etwas falsch? Oder ist es einfach unmöglich, diese Dateien zu ändern? Obwohl ich es nicht für unmöglich halte, da hier von Ubuntu bis Blender alles Open Source ist, haben sie keinen Grund, uns daran zu hindern, diese Dateien zu ändern.

BEARBEITEN:

Ich habe das Hauptmenü (alacarte) verwendet, um das Symbol zu ändern, möchte aber trotzdem wissen, warum ich keine Snap-Datei ändern kann.

Tooniis
quelle

Antworten:

12

Es ist unmöglich, den Inhalt des Snaps zu ändern, ohne den Snap neu zu erstellen. Dies ist in erster Linie eine Sicherheitsmaßnahme, um sicherzustellen, dass der Verschluss nicht manipuliert wurde.

Das Symbol, auf das verwiesen wird, befindet sich jedoch wahrscheinlich in einer Desktop-Datei, blender-tpaw_blender.desktopdie als bearbeitbar bezeichnet wird, und befindet sich in /var/lib/snapd/desktop/applications.

Sie können die folgende Zeile ändern, um das Symbol zu aktualisieren: -

Icon=/snap/blender-tpaw/3/meta/gui/icon.svg
Popey
quelle
Diese "unmöglich zu ändern" Sache mit dem Schnappen ist sehr - ich meine, SEHR - ärgerlich! Der Hauptgrund, warum ich snap verwenden möchte, ist, dass ich das gleiche Programm (z. B. Firefox) parallel installieren und dann mit der "Kopie" -Installation experimentieren möchte, ohne die Hauptinstallation zu beschädigen. Übrigens hat die Änderung an der .desktop-Datei bei Firefox nicht funktioniert.
Almir Campos
13

Obwohl die Prämisse der Frage technisch korrekt ist (Sie können keine Dateien im Handumdrehen ändern), gibt es Möglichkeiten, dies zu umgehen.

Eine Möglichkeit besteht darin, die --bindOption in Verbindung mit zu verwenden mount, um die vorhandene Dateihierarchie an einer anderen Stelle erneut bereitzustellen.

Wenn Sie beispielsweise möchten, dass Ihre Snaps die Systemzertifikate anstelle der installierten Zertifikate verwenden core, können Sie das Verzeichnis mit den Systemzertifikaten auf dem Host über dem Systemzertifikatverzeichnis coremit dem folgenden Befehl anhängen:

sudo mount --bind -o nodev,ro /etc/ssl/certs /snap/core/current/etc/ssl/certs/

Das Snap-Dateisystem wird dadurch nicht geändert. Wenn Sie den Ordner aushängen, wird der alte Ordner ersetzt:

sudo umount /snap/core/current/etc/ssl/certs

Hinweis: Bereitstellungen werden zwischen Neustarts nicht beibehalten. Es gibt verschiedene Möglichkeiten, die Bereitstellung nach einem Neustart aufrechtzuerhalten. Eine Möglichkeit besteht darin, ein systemdStartskript zu erstellen :

$ cat <<-EOF | sudo tee /etc/systemd/system/snap-core-current-etc-ssl-certs.mount
[Unit]
Description=Mount unit to fix etc ssl certs in core package
After=snapd.service

[Mount]
What=/etc/ssl/certs
Where=/snap/core/current/etc/ssl/certs
Type=none
Options=bind,nodev,ro

[Install]
WantedBy=multi-user.target
EOF
$ systemctl enable snap-core-current-etc-ssl-certs.mount

Von hier genommen .

Geschäftemacher
quelle
Tolle Lösung, vielen Dank! Nur ein Witz: Neuere systemd-Versionen (die Version vom 18.04. Zum jetzigen Zeitpunkt) akzeptieren keine Bereitstellungen auf Pfaden mit Softlinks mehr. Zum Glück konnte die obige Konfiguration durch eine Zeile in ersetzt werden /etc/fstab, zB: echo -e "/etc/ssl/certs\t/snap/core/current/etc/ssl/certs\tnone\tbind,nodev,ro\t0 2" | sudo tee -a /etc/fstab- source
sxc731