59 votes

Comment donner à snaps l'accès à /somedir

Je commence juste à me mouiller les pieds avec Snap. 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 l'accès à ce répertoire.

Après avoir cherché sur Google, j'ai compris que je pouvais accéder aux fichiers sous le nom de /home/peter pour le :home et l'interface /media pour le :removable-media interfaces.

Mais j'aime bien /store et je ne veux pas changer ça pour être /media/store o /home/peter/store ou tout autre chose que /store .

Y a-t-il un moyen de faire en sorte que snap autorise mes snaps (ou peut-être juste vlc) à accéder à /store Pour que snap se conforme à mes conventions de nommage ou suis-je obligé de me convertir aux préférences de snap ?

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

32voto

Peter V. Mørch Points 4081

A mon grand étonnement, ça ressemble vraiment à /home est codée 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
    ...

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

Edit : Voir aussi Problème de la tablette de lancement 1643706

5voto

Steadicat Points 315

Exécutez l'application comme si ce n'était pas un snap. \o /

Ainsi, par exemple chrome

  1. Utilisez un éditeur de menu, par exemple "Menu principal", pour ajouter un "élément de menu" chromium personnalisé (c'est ce qu'utilise ubuntu pour trouver des applications lorsque vous appuyez sur super+a) :
  2. Nom de l'ensemble eg.. : Chromium Unsnapped
  3. Définir la commande : /snap/chromium/current/usr/lib/chromium-browser/chrome --user-data-dir=~/ChrUnsnapped --class="ChrUnsnapped" %U
  4. Définir une icône, par exemple télécharger un logo rétro chrome
  5. sauver/fermer
  6. super+a (ou l'icône Afficher les applications en bas à gauche) trouver votre nouvel élément et faire un clic droit pour l'ajouter aux favoris enter image description here

<rant>

Je suis tellement frustré par snap que je ne peux pas configurer mon répertoire /stf personnel comme je le fais depuis 15 ans. Merci pour ce hack, il semble que je vais devoir le faire pour chaque application snap :'( .

Oui, je sais que c'est mauvais, mais jusqu'à ce qu'il y ait une configuration de liste blanche, cela semble être la seule façon pour que les choses reviennent à la normale. Je ne veux vraiment pas mettre mes affaires dans /home, /mnt, /media s'il vous plaît ne détestez pas vos utilisateurs.

</rant>

3voto

jonjbar Points 1894

Donc, deux choses.

Premier : Linux et Unix ont une norme de hiérarchie des systèmes de fichiers que Ubuntu et Snaps suivent. https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

Deuxièmement : si l'on choisit de s'écarter de la norme mondiale en vigueur depuis 1979, c'est parfaitement bien, mais il faut alors relier le répertoire non standard pour que snap puisse le trouver.

mount --bind /nonstandard_mountpoint /media/$USER/directory

ou

mount --bind /nonstandard_mountpoint /home/$USER/directory

alors vous pouvez continuer à utiliser votre point de montage non standard ET en même temps tous vos snaps peuvent trouver vos données de point de montage non standard.

Il est même possible de rendre ce montage permanent en l'ajoutant à votre FSTab.

sudo nano /etc/fstab

ajouter la ligne

/source /destination none defaults,bind 0 0

pour sauvegarder et quitter

CTRL+X y

Voici un exemple : Fichiers de musique stockés dans /srv/dsmusic

créez d'abord un répertoire dans /home/$USER/Music/dsmusic

mkdir /home/$USER/Music/dsmusic

puis lier la musique mount /srv/ds à ce répertoire

sudo mount --bind /srv/dsmusic /home/$USER/Music/dsmusic

Ensuite, tous vos programmes de musique instantanée trouveront automatiquement et magiquement les fichiers musicaux.

pour poursuivre l'exemple de la musique :

sudo nano /etc/fstab

ajouter la ligne

/srv/dsmusic    /home/username/Music/dsmusic    none    defaults,bind    0 0

** Unmounting **

si vous voulez démonter, vous pouvez utiliser la commande umount normale comme pour un point de montage normal.

sudo umount /home/$USER/Music/dsmusic

Pour plus d'informations, veuillez consulter : https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount

SystemD

** Veuillez noter qu'il existe un moyen plus moderne de faire cela dans SystemD au lieu d'utiliser fstab.

Pour créer des montages liés dans SystemD, vous devez créer un fichier .mount avec le chemin vers le point de montage non standard séparé par - (moins) au lieu de barres obliques (/).

sudo systemctl edit --full --force path-nonstandard.mount

après ce qui suit et modifier les points de montage

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target

[Mount]
    What=/some/old/dir
    Where=/the/new/dir
    Type=none
    Options=bind

[Install]
WantedBy=local-fs.target

si nano est l'éditeur par défaut CTRL+X y (pour nano) :wq (pour vim)

activer le fichier systemD

sudo systemctl enable path-nonstandard.mount

puis recharger le démon SystemD

sudo systemctl daemon-reload

Ensuite, commencez votre montage avec

sudo systemctl start path-nonstandard.mount

Si vous avez besoin de le modifier à nouveau, il suffit de

sudo systemctl edit --full path-nonstandard.mount

Exemple : Pour reprendre l'exemple de la musique :

sudo systemctl edit --full --force srv-dsmusic.mount

ceci ouvrira un éditeur vide et créera un nouveau fichier .mount dans le bon dossier système auquel on ajoutera les lignes suivantes

pour un point de montage local sur le même matériel :

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target

[Mount]
    What=/srv/dsmusic
    Where=/home/username/Music/dsmusic
    Type=none
    Options=bind

[Install]
WantedBy=local-fs.target

Veuillez noter que si votre point de montage non standard est un NAS ou un autre périphérique distant, vous devrez utiliser remote-fs.target et non local-fs.target.

pour un point de montage distant sur un matériel différent tel qu'un NAS

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=remote-fs.target umount.target

[Mount]
    What=/srv/dsmusic
    Where=/home/username/Music/dsmusic
    Type=none
    Options=bind

[Install]
WantedBy=remote-fs.target

puis quittez l'éditeur CTRL+X y (pour nano) :wq (pour vim)

activer le fichier systemD

sudo systemctl enable srv-dsmusic.mount

Puis recharger le démon systemD

sudo systemctl daemon-reload

puis démarrez votre nouveau point de montage

sudo systemctl start srv-dsmusic.mount

pour démonter le bindmount juste

sudo systemctl stop srv-dsmusic.mount

Vous pouvez maintenant trouver des miroirs de vos données dans /srv/dsmusic et snap pourra trouver les mêmes données dans /home/$USER/Music/dsmusic.

pour plus d'informations, veuillez consulter : https://utcc.utoronto.ca/~cks/space/blog/linux/SystemdBindMountUnits et https://www.freedesktop.org/software/systemd/man/systemd.mount.html

2voto

Zygmunt Krynicki Points 4501

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 solide. Je sais que tout le monde aime personnaliser son système de fichiers mais cela a un coût et c'est l'un d'entre eux.

Finalement, grâce au travail sur les portails XDG, certaines applications (notamment les applications graphiques) peuvent avoir accès à des fichiers situés à des endroits arbitraires. si Ces applications utilisent certaines des API GTK récemment introduites. Lorsqu'il est exécuté sous confinement, il se connecte à un assistant de confiance, fait apparaître une interface utilisateur de confiance qui ressemble à un sélecteur de fichiers, parle à un système de fichiers FUSE spécial pour exposer le fichier (à n'importe quel emplacement) comme une chose spéciale dans /run/... quelque part que l'application voit et les choses peuvent fonctionner correctement.

Il est conçu pour les dispositifs de sélection de fichiers comme les lecteurs multimédias ou les éditeurs de texte. Votre arbre linux est hébergé à /codez ne fonctionnera pas si bien que ça.

1voto

ThorSummoner Points 2831

en montant le répertoire cible dans /home/*/snap/ est mentionné comme une option ; un simple bind mount n'a pas fonctionné pour moi, pas plus qu'un hardlink, ou un symlink des fichiers ou répertoires cibles dans le répertoire snap proposé, ou tout sous-répertoire de celui-ci. Cette limitation pourrait être due au fait que les fichiers cibles existent en dehors d'un répertoire de type /home/*/ je n'ai pas testé les montages/liens symboliques durs vers les fichiers du répertoire /home/*/ préfixe glob.

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

Pour ne citer que 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.

  • toute utilité de sauvegarde basée sur les fichiers (exemple graphique : grsync ) devrait être utilisable puisque le but est de dupliquer l'ensemble de données en avant et en arrière selon les besoins.

  • les clones git, éventuellement, mais les clones locaux utilisent par défaut les hardlinks, donc si vous utilisez git pour gérer les entrées/sorties du système de fichiers dans un snap, faites attention à la possibilité que, sans désactiver les hardlinks au moment du clone, ce clone git puisse être inaccessible au snap.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X