Cómo dar acceso a snaps a / somedir

19

Me estoy mojando los pies de golpe. He instalado vlc y quiero intentar usarlo. Todos mis medios están instalados bajo /storeun soporte NFS. Y las instantáneas no permiten el acceso a ese directorio.

Después de buscar en Google, he llegado a comprender que puedo acceder a los archivos /home/peterde la :homeinterfaz y /medialas :removable-mediainterfaces.

Pero en realidad me gusta /storey no quiero cambiar eso para ser /media/storeo /home/peter/storeo cualquier otra cosa que /store.

¿Hay alguna manera de obtener snap para permitir el acceso a mis snaps (o tal vez solo vlc) /store, por lo que snap se ajusta a mis convenciones de nomenclatura o me veo obligado a convertir a las preferencias de snap?

Eso parece muy inflexible, y espero que haya algo que me haya perdido.

Peter V. Mørch
fuente
1
Puede intentar eliminar el complemento ( sudo snap remove vlc) y luego reinstalarlo con la opción clásica. Puede ayudar, puede que no ... ( sudo snap install vlc --classic)
doug
1
Gracias. Lo intenté --classicy --devmode... ninguno funcionó. Pero también quiero dar acceso explícito a /store/supersecret
Peter V. Mørch,
2
¿Hay alguna solicitud de ticket / error / función abierta para snap? ¡Me gustaría esa característica también!
Kravemir
1
Estoy recibiendo un verdadero odio por las instantáneas.
Stephen Boston el
@kravemir: Ver el número de Launchpad 1643706
Peter V. Mørch

Respuestas:

9

Para mi asombro, realmente parece que /homeestá codificado. mount-support.c contiene:

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

Guau. Eso me asombra. Pero ahí lo tienes.

Editar: Véase también el problema de Launchpad 1643706

Peter V. Mørch
fuente
1
Hola, desarrollador snapd aquí responsable de ese código. Para su asombro, eso es lo correcto. No podemos replicar el sistema de archivos del host y ninguno de los directorios aleatorios que pueda contener. Si bien puede usar / almacenar a otra persona, puede usar / stash o / lo que sea y no hay forma de hacer que funcione en general. Mi recomendación es simplemente montar sus medios en la ubicación que desee, ya sea en / home / ... o en / media. Luego caerá en los sistemas existentes que administran esos datos y las cosas deberían funcionar correctamente.
Zygmunt Krynicki
@ZygmuntKrynicki o under / mnt, si se ha conectado la interfaz de medios extraíbles para el complemento.
jarno
55
@ZygmuntKrynicki También estoy asombrado. Los puntos de montaje predeterminados deben configurarse a través de un archivo de configuración y no aplicarse.
markhor
3
@ZygmuntKrynicki Gracias por aparecer y explicar que el código hace lo que pretendes. Respetuosa y totalmente en desacuerdo con lo que escribes. La codificación de rutas es una práctica muy pobre y no puede justificarse significativamente, incluso en nombre de la seguridad. Es solo inflexibilidad básica.
Stéphane Gourichon
1

Entonces, para ampliar mi mini respuesta anterior, no hay forma de hacer eso de manera general, segura y sólida. Sé que a todos les encanta personalizar su sistema de archivos, pero eso tiene un costo y este es uno de ellos.

Eventualmente, a través del trabajo en portales XDG, ciertas aplicaciones (especialmente aplicaciones gráficas) pueden obtener acceso a archivos en lugares arbitrarios si dichas aplicaciones usan algunas de las API GTK recientemente introducidas. Esto, cuando se ejecuta bajo confinamiento, se acercará a un ayudante de confianza, abrirá una IU de confianza que se parece a un selector de archivos, hablará con un sistema de archivos FUSE especial para exponer el archivo (en cualquier ubicación) como algo especial en / run /. .. en algún lugar que la aplicación vea y las cosas funcionen bien.

Esto está diseñado para cosas amigables para la selección de archivos como reproductores multimedia o editores de palabras. Sin /codezembargo, su árbol de Linux alojado en no funcionará tan bien.

Zygmunt Krynicki
fuente
2
Hola Zygmunt, gracias por responder. Mi asombro se mantiene. Usted dice: "Sé que a todos les encanta personalizar su sistema de archivos, pero eso tiene un costo y este es uno de ellos". Para que lo entienda: ¿Te das cuenta pero eliges ignorar que esto es algo común que quieres hacer? No conozco ningún otro costo para esta convención de nombres en los últimos 15 años.
Peter V. Mørch
3
¿Hay alguna razón por la que uno no pueda poner una línea como extradirs=/store:/other/locationo algo en /etc/snapd.confo /etc/snapd/conf.d/vlc.conf? Al igual que toneladas de otras aplicaciones de Linux por ahí. Parece funcionar bien, por ejemplo, Docker. Esto es como si apache fuera un código duro DocumentRoot /var/www.
Peter V. Mørch
1
Sin embargo, realmente aprecio que te hayas tomado el tiempo para escribir aquí, Zygmunt. Gracias.
Peter V. Mørch
No es así de fácil. El principal problema no es la aparición, sino el hecho de que, en tiempo de ejecución, la aplicación se ejecuta en un sistema de archivos raíz diferente. Desde ese punto de vista del proceso / tienda no existe: no es que no esté montado, simplemente no es un directorio en absoluto. Lo que está haciendo Snap-Confine es traer algunas rutas del sistema host al espacio de nombres de montaje de la aplicación. Dado que el sistema de archivos raíz en las instantáneas es de solo lectura, no podemos inyectar fácilmente nuevos puntos de montaje (por ejemplo, para / store).
Zygmunt Krynicki
@ PeterV.Mørch puede montar o mover esos archivos en / mnt, asegúrese de que la interfaz de medios extraíbles se haya conectado para el complemento y cree enlaces simbólicos en las ubicaciones originales, si lo desea.
jarno
1

montar el directorio de destino en/home/*/snap/ se menciona como una opción; un simple montaje de enlace no funcionó para mí, tampoco lo hizo un enlace duro o un enlace simbólico de los archivos o directorios de destino en el directorio de complemento propuesto, o cualquier subdirectorio de los mismos. Esta limitación podría deberse a los archivos de destino existentes fuera de un /home/*/directorio, no probé montajes / hard / symlinks a archivos dentro del /home/*/prefijo global.

Sin embargo, una solución alternativa: una copia completa del archivo /home/<myuser>/snap/<appname>/<somenewdirectory>funcionó para mí. Mantener copias completas del conjunto de datos todavía no era factible para mí, pero hay muchas herramientas para ayudar a lidiar con esta restricción; una copia recursiva manual antes de usar el complemento, y copiar los archivos modificados nuevamente después es una opción si su conjunto de datos es pequeño o incluso atómico

Para nombrar algunas utilidades de copia de archivos que podrían ayudarlo:

  • cp --verbose --archive --recursive /somedir ~/snap/somediry fuente / destino viceversa
  • tar -C / -c somedir | tar -C ~/snap/ -xv es un ejemplo de copia de archivo basado en tar
  • rsync --archive /somedir ~/snap/somedir, rsync es popular y tiene muchas envolturas / extensiones

  • cualquier utilidad de copia de seguridad basada en archivos (ejemplo gráfico :)grsync debe ser utilizable ya que el objetivo es duplicar el conjunto de datos hacia adelante y hacia atrás según sea necesario

  • git clones, posiblemente, sin embargo, los clones locales por defecto usan enlaces duros, por lo que si está usando git para administrar el sistema de archivos io en un instante, tenga cuidado con la posibilidad de que sin deshabilitar los enlaces duros en el momento de la clonación, ese clon git podría ser inaccesible para el complemento.

ThorSummoner
fuente
1
Esto no funcionará en el caso de uso común de un disco NAS de varios terabytes montado en NFS.
Peter V. Mørch
1

No puedo publicar un comentario porque no tengo suficiente reputación, pero puedo publicar una respuesta ...

De todos modos, este no es el problema original, pero si alguien más, como yo, llegó aquí buscando cómo dar acceso a / medios en un instante (por ejemplo, para usar Darktable, que es básicamente inútil sin él), puede hacerlo ya sea a través de la interfaz de la tienda de instantáneas o agregando el 'complemento' de medios extraíbles a su aplicación instantánea en la línea de comandos. Algunos documentos aquí: https://snapcraft.io/docs/interface-management

Daniel Murray
fuente
1
Hola y bienvenidos en Ask Ubuntu! Se desaconsejan las respuestas de solo enlace, ya que pueden quedar obsoletas si el enlace caduca en el futuro. ¿Puedo sugerirle que agregue algunos detalles a su publicación (por ejemplo, resumen de los pasos / recomendaciones para usar)?
FloT