So geben Sie Snaps Zugriff auf / somedir

19

Ich mache nur meine Füße nass mit Schnappschuss. Ich habe vlc installiert und möchte versuchen, es zu verwenden. Alle meine Medien sind unter /storeeinem NFS-Mount installiert . Und Snaps erlauben keinen Zugriff auf dieses Verzeichnis.

Nach dem Googeln habe ich verstanden, dass ich auf Dateien /home/peterfür die :homeSchnittstelle und /mediafür die :removable-mediaSchnittstellen zugreifen kann .

Aber ich mag das wirklich /storeund möchte es nicht ändern, um /media/storeoder /home/peter/storeoder irgendetwas anderes zu sein /store.

Gibt es eine Möglichkeit, Snap zu erhalten, um meinen Snaps (oder vielleicht nur VLC) Zugriff zu gewähren /store, sodass Snap meinen Namenskonventionen entspricht, oder bin ich gezwungen, in die Einstellungen von Snap zu konvertieren?

Das scheint sehr unflexibel und ich hoffe, dass ich etwas verpasst habe.

Peter V. Mørch
quelle
1
Sie können versuchen, snap ( sudo snap remove vlc) zu entfernen und dann mit der klassischen Option neu zu installieren. Kann helfen, kann nicht .. ( sudo snap install vlc --classic)
Doug
1
Vielen Dank. Ich habe es versucht --classicund --devmode- keiner hat funktioniert. Aber auch ich möchte explizit Zugang geben, /storeaber nicht alles wie/supersecret
Peter V. Mørch
2
Gibt es eine Ticket- / Bug- / Feature-Anfrage, die für den Snap geöffnet ist? Ich würde diese Funktion auch mögen!
Kravemir
1
Ich bekomme einen echten Hass auf Schnappschüsse.
Stephen Boston
@kravemir: Siehe Launchpad Ausgabe 1643706
Peter V. Mørch

Antworten:

9

Zu meinem Erstaunen sieht es wirklich so aus, als wäre /homees fest codiert. mount-support.c enthält:

    const struct sc_mount mounts[] = {
        {"/dev"},   // because it contains devices on host OS
        {"/etc"},   // because that's where /etc/resolv.conf lives, perhaps a bad idea
        {"/home"},  // to support /home/*/snap and home interface
    ...

Beeindruckend. Das wundert mich. Aber da hast du es.

Bearbeiten: Siehe auch Launchpad-Ausgabe 1643706

Peter V. Mørch
quelle
1
Hey, SnapD-Entwickler hier, der für diesen Code verantwortlich ist. Zu Ihrem Erstaunen ist das eigentlich das Richtige. Wir können das Host-Dateisystem und die darin enthaltenen zufälligen Verzeichnisse nicht replizieren. Während Sie möglicherweise / speichern, kann jemand anderes / stash oder / was auch immer verwenden, und es gibt keine Möglichkeit, dies im Allgemeinen zum Laufen zu bringen. Meine Empfehlung ist, Ihre Medien einfach an dem gewünschten Ort zu mounten, entweder in / home / ... oder in / media. Dann fällt es unter bestehende Systeme, die diese Daten verwalten, und die Dinge sollten korrekt funktionieren.
Zygmunt Krynicki
@ZygmuntKrynicki oder unter / mnt, wenn für den Snap eine Wechselmedienschnittstelle angeschlossen wurde.
Jarno
5
@ZygmuntKrynicki Ich bin auch erstaunt. Die Standard-Mount-Punkte sollten über eine Konfigurationsdatei konfiguriert und nicht erzwungen werden.
Markhor
3
@ZygmuntKrynicki Vielen Dank, dass Sie vorbeigekommen sind und erklärt haben, dass der Code das tut, was Sie beabsichtigen. Ich bin respektvoll und völlig anderer Meinung als Sie. Das Hardcodieren von Pfaden ist eine sehr schlechte Praxis und kann selbst im Namen der Sicherheit nicht sinnvoll gerechtfertigt werden. Es ist nur grundlegende Inflexibilität.
Stéphane Gourichon
1

Um meine obige Mini-Antwort zu erweitern, gibt es keine Möglichkeit, dies allgemein, sicher und solide zu tun. Ich weiß, dass jeder gerne sein Dateisystem anpasst, aber das hat einige Kosten und dies ist einer von ihnen.

Durch die Arbeit an XDG-Portalen können bestimmte Anwendungen (insbesondere grafische Anwendungen) schließlich an beliebigen Stellen auf Dateien zugreifen, wenn diese Anwendungen einige der kürzlich eingeführten GTK-APIs verwenden. Wenn Sie unter eingeschränkten Bedingungen ausgeführt werden, wenden Sie sich an einen vertrauenswürdigen Helfer, öffnen eine vertrauenswürdige Benutzeroberfläche, die wie eine Dateiauswahl aussieht, und sprechen mit einem speziellen FUSE-Dateisystem, um die Datei (an einem beliebigen Speicherort) als besondere Sache in / run / verfügbar zu machen. .. irgendwo, wo die Anwendung sieht und die Dinge gut funktionieren können.

Dies ist für Dateiauswahl-freundliche Dinge wie Mediaplayer oder Worteditoren konzipiert. Ihr Linux-Baum, auf dem gehostet /codezwird, funktioniert jedoch nicht so gut.

Zygmunt Krynicki
quelle
2
Hallo Zygmunt, danke für die Antwort. Mein Erstaunen steht. Sie sagen: "Ich weiß, dass jeder gerne sein Dateisystem anpasst, aber das hat einige Kosten und dies ist einer von ihnen." Nur damit ich verstehe: Sie erkennen, aber ignorieren Sie, dass dies eine häufige Sache ist, die Sie tun möchten? Mir sind keine weiteren Kosten für diese Namenskonvention in den letzten 15 Jahren bekannt.
Peter V. Mørch
3
Gibt es einen Grund , warum man nicht eine Zeile wie setzen könnte extradirs=/store:/other/locationoder etwas in /etc/snapd.confoder /etc/snapd/conf.d/vlc.conf. Genau wie Tonnen anderer Linux-Anwendungen da draußen. Es scheint gut zu funktionieren für zB Docker. Dies ist, als ob Apache zu hartem Code wäre DocumentRoot /var/www.
Peter V. Mørch
1
Ich weiß es jedoch sehr zu schätzen, dass Sie sich die Zeit genommen haben, hier zu schreiben, Zygmunt. Vielen Dank.
Peter V. Mørch
Es ist nicht so einfach. Das Hauptproblem ist nicht Apparmor, sondern die Tatsache, dass die Anwendung zur Laufzeit in einem anderen Root-Dateisystem ausgeführt wird. Unter diesem Gesichtspunkt existiert / speichert es nicht - es ist nicht so, dass es nicht gemountet ist, es ist einfach überhaupt kein Verzeichnis. Snap-Confine bringt einige Pfade vom Host-System in den Application Mount-Namespace. Da das Root-Dateisystem in Snaps schreibgeschützt ist, können neue Mount-Punkte (z. B. für / store) nicht einfach eingefügt werden.
Zygmunt Krynicki
@ PeterV.Mørch Sie können diese Dateien unter / mnt mounten oder verschieben, sicherstellen, dass die Wechselmedienschnittstelle für den Snap verbunden ist, und bei Bedarf Symlinks an den ursprünglichen Speicherorten erstellen.
Jarno
1

Das Mounten des Zielverzeichnisses/home/*/snap/ wird optional erwähnt. Ein einfaches Bind-Mount hat bei mir nicht funktioniert, ebenso wenig wie ein Hardlink oder ein Symlink der Zieldateien oder Verzeichnisse in das vorgeschlagene Snap-Verzeichnis oder ein Unterverzeichnis davon. Diese Einschränkung kann auf die Zieldateien zurückzuführen sein, die außerhalb eines /home/*/Verzeichnisses vorhanden sind. Ich habe mounts / hard / symlinks nicht auf Dateien innerhalb des /home/*/Präfix-Glob getestet.

Eine Problemumgehung: Eine vollständige Dateikopie in /home/<myuser>/snap/<appname>/<somenewdirectory>hat bei mir funktioniert. Das Verwalten vollständiger Datensatzkopien war für mich noch nicht möglich, aber es gibt viele Tools, die helfen, mit einer solchen Einschränkung umzugehen. Eine manuelle rekursive Kopie vor der Verwendung des Snaps und das erneute Kopieren der geänderten Dateien ist eine Option, wenn Ihr Dataset klein oder sogar atomar ist

Um einige Dienstprogramme zum Kopieren von Dateien zu nennen, die Ihnen helfen könnten:

  • cp --verbose --archive --recursive /somedir ~/snap/somedirund Quelle / Ziel umgekehrt
  • tar -C / -c somedir | tar -C ~/snap/ -xv ist ein Beispiel für eine tar-basierte Dateikopie
  • rsync --archive /somedir ~/snap/somedir, rsync ist beliebt und hat viele Wrapper / Erweiterungen

  • Jedes dateibasierte Sicherungsprogramm (grafisches Beispiel :)grsync sollte verwendbar sein, da das gesamte Ziel darin besteht, das Dataset nach Bedarf vorwärts und rückwärts zu duplizieren

  • Git-Klone, möglicherweise, jedoch verwenden lokale Klone standardmäßig Hardlinks. Wenn Sie also Git verwenden, um das Dateisystem io in einem Snap zu verwalten, sollten Sie vorsichtig sein, dass der Git-Klon ohne Deaktivierung der Hardlinks zum Zeitpunkt des Klons möglicherweise nicht auf den Snap zugreifen kann.

ThorSummoner
quelle
1
Dies funktioniert im allgemeinen Anwendungsfall eines NFS-gemounteten Multi-Terabyte-NAS-Laufwerks nicht.
Peter V. Mørch
1

Ich kann keinen Kommentar posten, weil ich nicht genug Ruf habe, aber ich kann eine Antwort posten ..?

Wie auch immer, dies ist nicht das ursprüngliche Problem, aber wenn jemand wie ich hierher gekommen ist, um herauszufinden, wie man einem Snap Zugriff auf / media gewährt (z. B. um Darktable zu verwenden, das ohne es im Grunde genommen nutzlos ist), können Sie es tun Entweder über die Snap-Store-Oberfläche oder durch Hinzufügen des 'Plug' für Wechselmedien zu Ihrer Snap-App in der Befehlszeile. Einige Dokumente hier: https://snapcraft.io/docs/interface-management

Daniel Murray
quelle
1
Hallo und willkommen auf Ask Ubuntu! Antworten nur auf Links werden nicht empfohlen, da sie möglicherweise veraltet sind, wenn der Link in Zukunft abläuft. Darf ich Ihnen vorschlagen, Ihrem Beitrag einige Details hinzuzufügen (z. B. Zusammenfassung der zu verwendenden Schritte / Empfehlungen)?
FloT