Comment donner un accès instantané à / somedir

19

Je mouille juste les pieds avec un claquement. J'ai installé vlc et je veux essayer de l'utiliser. Tous mes médias sont installés sous /store, un montage NFS. Et les snaps ne permettent pas d'accéder à ce répertoire.

Après avoir googlé, j'ai compris que je pouvais accéder aux fichiers sous /home/peterpour l' :homeinterface et /mediapour les :removable-mediainterfaces.

Mais j'aime vraiment /storeet je ne veux pas que cela soit /media/storeou /home/peter/storeou autre chose que /store.

Existe-t-il un moyen d'obtenir snap pour autoriser l'accès à mes snaps (ou peut-être simplement vlc) /store, afin que snap soit conforme à mes conventions de dénomination ou suis-je obligé de convertir les préférences de snap?

Cela semble très rigide et j'espère qu'il y a quelque chose que j'ai manqué.

Peter V. Mørch
la source
1
Vous pouvez essayer de supprimer le composant logiciel enfichable ( sudo snap remove vlc) puis réinstaller avec l'option classique. Peut aider, peut ne pas .. ( sudo snap install vlc --classic)
doug
1
Merci. J'ai essayé --classicet --devmode- ni travaillé. Mais je veux aussi donner un accès explicite à /storemais pas tout comme/supersecret
Peter V. Mørch
2
Y a-t-il un ticket / bug / demande de fonctionnalité ouvert pour snap? J'aimerais aussi cette fonctionnalité!
kravemir
1
Je reçois une véritable haine pour les snaps.
Stephen Boston le
@kravemir: Voir Launchpad issue 1643706
Peter V. Mørch

Réponses:

9

À mon grand étonnement, on dirait vraiment qu'il /homeest codé en dur. mount-support.c contient:

    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
    ...

Sensationnel. Cela m'étonne. Mais là vous l'avez.

Edit: Voir aussi Launchpad issue 1643706

Peter V. Mørch
la source
1
Hé, développeur snapd ici responsable de ce code. À votre grand étonnement, c'est en fait la bonne chose à faire. Nous ne pouvons pas répliquer le système de fichiers hôte et aucun des répertoires aléatoires qu'il peut contenir. Bien que vous puissiez utiliser / stocker quelqu'un d'autre peut utiliser / stash ou / quoi que ce soit et il n'y a aucun moyen de faire fonctionner cela en général. Ma recommandation est de simplement monter vos médias à l'emplacement que vous désirez, soit dans / home / ... ou dans / media. Ensuite, il appartiendra aux systèmes existants qui gèrent que les données et les choses devraient fonctionner correctement.
Zygmunt Krynicki,
@ZygmuntKrynicki ou sous / mnt, si l'interface de support amovible a été connectée pour le snap.
jarno
5
@ZygmuntKrynicki Je suis aussi étonné. Les points de montage par défaut doivent être configurés via un fichier de configuration et non appliqués.
Markhor
3
@ZygmuntKrynicki Merci d'être intervenu et d'avoir expliqué que le code fait ce que vous voulez. Je suis respectueusement et totalement en désaccord avec ce que vous écrivez. Le codage en dur est une pratique très médiocre et ne peut être justifié de manière significative, même au nom de la sécurité. C'est juste une inflexibilité de base.
Stéphane Gourichon
1

Donc, pour développer ma mini-réponse ci-dessus, il n'y a aucun moyen de le faire qui soit général, sûr et sain. Je sais que tout le monde aime personnaliser son système de fichiers mais cela a un certain coût et c'est l'un d'entre eux.

Finalement, grâce au travail sur les portails XDG, certaines applications (en particulier les applications graphiques) peuvent accéder à des fichiers à des endroits arbitraires si ces applications utilisent certaines des API GTK récemment introduites. Cela, lors de l'exécution sous confinement, atteindra un assistant de confiance, affichera une interface utilisateur fiable qui ressemble à un sélecteur de fichiers, parlera à un système de fichiers FUSE spécial pour exposer le fichier (à n'importe quel endroit) en tant que chose spéciale dans / run /. .. quelque part que l'application voit et les choses peuvent bien fonctionner.

Ceci est conçu pour les choses conviviales de sélection de fichiers comme les lecteurs multimédias ou les éditeurs de mots. Votre arbre Linux hébergé sur /codezne fonctionnera pas si bien cependant.

Zygmunt Krynicki
la source
2
Salut Zygmunt, merci d'avoir répondu. Mon étonnement tient. Vous dites: "Je sais que tout le monde aime personnaliser son système de fichiers mais cela a un certain coût et c'est l'un d'entre eux." Juste pour que je comprenne: vous vous rendez compte mais choisissez d'ignorer que c'est une chose courante à vouloir faire? Je ne connais aucun autre coût pour cette convention de dénomination au cours des 15 dernières années.
Peter V. Mørch
3
Y a-t-il une raison pour laquelle on ne pourrait pas mettre une ligne comme extradirs=/store:/other/locationou quelque chose dans /etc/snapd.confou /etc/snapd/conf.d/vlc.conf. Tout comme des tonnes d'autres applications Linux. Cela semble bien fonctionner, par exemple pour Docker. C'est comme si apache devait coder en dur DocumentRoot /var/www.
Peter V. Mørch
1
Cependant, j'apprécie vraiment que vous ayez pris le temps d'écrire ici, Zygmunt. Je vous remercie.
Peter V. Mørch
Ce n'est pas si facile. Le problème principal n'est pas l'Apparmor mais en fait le fait qu'au moment de l'exécution, l'application s'exécute dans un système de fichiers racine différent. De ce point de vue du processus / magasin n'existe pas - ce n'est pas qu'il n'est pas monté, ce n'est tout simplement pas un répertoire du tout. Ce que fait snap-confine, c'est d'apporter des chemins du système hôte dans l'espace de noms de montage d'application. Étant donné que le système de fichiers racine dans les snaps est en lecture seule, nous ne pouvons pas facilement injecter de nouveaux points de montage (par exemple pour / store).
Zygmunt Krynicki
@ PeterV.Mørch vous pouvez monter ou déplacer ces fichiers sous / mnt, assurez-vous que l'interface de support amovible a été connectée pour le snap, et créez des liens symboliques dans les emplacements d'origine, si vous le souhaitez.
jarno
1

le montage du répertoire cible dans/home/*/snap/ est mentionné en option; un montage de liaison simple ne fonctionnait pas pour moi, pas plus qu'un lien physique, ou un lien symbolique des fichiers ou répertoires cibles dans le répertoire d'accrochage proposé, ou un de ses sous-répertoires. Cette limitation pourrait être due aux fichiers cibles existant en dehors d'un /home/*/répertoire, je n'ai pas testé les montages / disques durs / liens symboliques vers des fichiers dans le /home/*/préfixe glob.

Cependant, une solution de contournement: une copie complète du fichier dans /home/<myuser>/snap/<appname>/<somenewdirectory>a fonctionné pour moi. Maintenir des copies complètes de l'ensemble de données était encore impossible pour moi, mais il existe de nombreux outils pour aider à faire face à une telle contrainte; une copie récursive manuelle avant d'utiliser l'accrochage, et la copie des fichiers modifiés après est une option si votre jeu de données est petit ou même atomique

Pour nommer quelques utilitaires de copie de fichiers qui pourraient vous aider:

  • cp --verbose --archive --recursive /somedir ~/snap/somedir, et source / cible vice versa
  • tar -C / -c somedir | tar -C ~/snap/ -xv est un exemple de copie de fichier basé sur tar
  • rsync --archive /somedir ~/snap/somedir, rsync est populaire et possède de nombreux wrappers / extensions

  • n'importe quelle utilité de sauvegarde basée sur un fichier (exemple graphique :)grsync devrait être utilisable car l'objectif global est de dupliquer le jeu de données en avant et en arrière selon les besoins

  • les clones git, éventuellement, cependant les clones locaux utilisent par défaut des liens physiques, donc si vous utilisez git pour gérer le système de fichiers io dans un snap, soyez prudent de la possibilité que sans désactiver les liens durs au moment du clone, ce clone git puisse être inaccessible au snap.

ThorSummoner
la source
1
Cela ne fonctionnera pas dans le cas d'utilisation courant d'un lecteur NAS multi-téraoctets monté sur NFS.
Peter V. Mørch
1

Je ne peux pas poster de commentaire car je n'ai pas assez de réputation, mais je peux poster une réponse ..?

Quoi qu'il en soit, ce n'est pas le problème d'origine, mais si quelqu'un d'autre, comme moi, est venu chercher comment donner accès à / media à un snap (par exemple pour utiliser Darktable, qui est fondamentalement inutile sans lui), vous pouvez le faire soit via l'interface snap-store, soit en ajoutant la «prise» de support amovible à votre application snap sur la ligne de commande. Quelques documents ici: https://snapcraft.io/docs/interface-management

Daniel Murray
la source
1
Bonjour et bienvenue sur Ask Ubuntu! Les réponses de lien uniquement sont déconseillées car elles pourraient devenir obsolètes si le lien expire à l'avenir. Puis-je vous suggérer d'ajouter quelques détails à votre message (par exemple, résumant les étapes / recommande d'utiliser)?
FloT