Como dar acesso a snaps a / somedir

19

Só estou molhando meus pés com estalo. Eu instalei o vlc e quero tentar usá-lo. Toda a minha mídia está instalada em /storeuma montagem NFS. E os snaps não permitem acesso a esse diretório.

Após pesquisar no Google, entendi que posso acessar os arquivos /home/peterda :homeinterface e /mediadas :removable-mediainterfaces.

Mas eu realmente gosto /storee não quero mudar isso para ser /media/storeou /home/peter/storeou qualquer outra coisa que não /store.

Existe uma maneira de obter snap para permitir que meus snaps (ou talvez apenas o vlc) acessem /store, para que o snap esteja em conformidade com minhas convenções de nomenclatura ou sou obrigado a converter para as preferências do snap?

Isso parece muito inflexível, e espero que haja algo que perdi.

Peter V. Mørch
fonte
1
Você pode tentar remover o snap ( sudo snap remove vlc) e reinstalar com a opção clássica. Pode ajudar, não pode .. ( sudo snap install vlc --classic)
Doug
1
Obrigado. Eu tentei --classice --devmode- nem funcionou. Mas também quero dar acesso explicitamente /store, mas não tudo como/supersecret
Peter V. Mørch
2
Existe algum pedido de ticket / bug / recurso aberto para snap? Eu também gostaria desse recurso!
Kravemir
1
Estou tendo um verdadeiro ódio por snaps.
Stephen Boston
@kravemir: Veja a edição 1643706 do Launchpad
Peter V. Mørch

Respostas:

9

Para minha surpresa, realmente parece que /homeestá codificado. mount-support.c contém:

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

Uau. Isso me surpreende. Mas aí está.

Editar: Consulte também edição 1643706 da barra de ativação

Peter V. Mørch
fonte
1
Ei, desenvolvedor snapd aqui responsável por esse código. Para sua surpresa, isso é realmente a coisa certa a fazer. Não podemos replicar o sistema de arquivos host e nenhum dos diretórios aleatórios que ele possa conter. Enquanto você pode usar / armazenar alguém pode usar / stash ou / o que quer que seja, e não há como fazer isso funcionar em geral. Minha recomendação é simplesmente montar sua mídia no local desejado, em / home / ... ou em / media. Em seguida, ele cairá nos sistemas existentes que gerenciam esses dados e as coisas devem funcionar corretamente.
Zygmunt Krynicki
@ZygmuntKrynicki ou em / mnt, se a interface de mídia removível estiver conectada para o snap.
Jar19
5
@ZygmuntKrynicki Também estou surpreso. Os pontos de montagem padrão devem ser configurados através de um arquivo de configuração e não impostos.
markhor
3
@ZygmuntKrynicki Obrigado por entrar e explicar que o código faz o que você pretende. Eu respeitoso e totalmente discordo do que você escreve. Caminhos codificados são práticas muito precárias e não podem ser significativamente justificadas, mesmo em nome da segurança. É apenas inflexibilidade básica.
Stéphane Gourichon
1

Portanto, para expandir minha mini-resposta acima, não há como fazer isso de maneira geral, sã e salva. Eu sei que todo mundo gosta de personalizar seu sistema de arquivos, mas isso tem algum custo e esse é um deles.

Eventualmente, através do trabalho em portais XDG, certos aplicativos (especialmente aplicativos gráficos) podem obter acesso a arquivos em locais arbitrários se esses aplicativos usarem algumas das APIs GTK introduzidas recentemente. Isso, quando executado sob confinamento, alcança um assistente confiável, exibe uma interface confiável que se parece com um seletor de arquivos, conversa com um sistema de arquivos FUSE especial para expor o arquivo (em qualquer local) como algo especial em / run /. .. em algum lugar que o aplicativo vê e as coisas podem funcionar bem.

Ele foi projetado para coisas amigáveis ​​para o seletor de arquivos, como players de mídia ou editores de palavras. Sua árvore linux hospedada em /codeznão funcionará tão bem.

Zygmunt Krynicki
fonte
2
Oi Zygmunt, obrigado por responder. Meu espanto se mantém. Você diz: "Eu sei que todo mundo gosta de personalizar seu sistema de arquivos, mas isso tem algum custo e esse é um deles." Só para eu entender: você percebe, mas escolhe ignorar que isso é algo comum a se fazer? Não conheço outros custos para esta convenção de nomes nos últimos 15 anos.
Peter V. Mørch
3
Existe alguma razão pela qual não se pode colocar uma linha como extradirs=/store:/other/locationou algo em /etc/snapd.confou /etc/snapd/conf.d/vlc.conf. Assim como muitas outras aplicações Linux disponíveis. Parece funcionar bem para, por exemplo, o Docker. É como se o apache fosse codificado DocumentRoot /var/www.
Peter V. Mørch
1
No entanto, realmente aprecio o seu tempo para escrever aqui, Zygmunt. Obrigado.
Peter V. Mørch
Não é tão fácil. O principal problema não é aparentemente, mas na verdade o fato de que, em tempo de execução, o aplicativo está sendo executado em um sistema de arquivos raiz diferente. A partir desse processo, o ponto de vista / armazenamento não existe - não é que ele não esteja montado, apenas não é um diretório. O que o snap-confine está fazendo é trazer alguns caminhos do sistema host para o namespace de montagem do aplicativo. Como o sistema de arquivos raiz nos snaps é somente leitura, não podemos injetar facilmente novos pontos de montagem (por exemplo, para / store).
Zygmunt Krynicki
@ PeterV.Mørch você pode montar ou mover esses arquivos em / mnt, verifique se a interface de mídia removível foi conectada para o snap e, se desejar, crie links simbólicos nos locais originais.
Jar19
1

a montagem do diretório de destino/home/*/snap/ é mencionada como uma opção; uma montagem de ligação simples não funcionou para mim, nem um link físico ou um link simbólico dos arquivos ou diretórios de destino no diretório de snap proposto ou qualquer subdiretório. Essa limitação pode dever-se aos arquivos de destino existentes fora de um /home/*/diretório, não testei montagens / hard / symlinks para arquivos dentro do /home/*/prefixo glob.

No entanto, uma solução alternativa: uma cópia completa do arquivo /home/<myuser>/snap/<appname>/<somenewdirectory>funcionou para mim. Manter cópias completas de conjuntos de dados ainda era inviável para mim, mas existem muitas ferramentas para ajudar a lidar com essa restrição; uma cópia recursiva manual antes de usar o snap e a cópia posterior dos arquivos modificados é uma opção se o conjunto de dados for pequeno ou atômico

Para citar alguns utilitários de cópia de arquivos que podem ajudá-lo:

  • cp --verbose --archive --recursive /somedir ~/snap/somedire origem / destino vice-versa
  • tar -C / -c somedir | tar -C ~/snap/ -xv é um exemplo de cópia de arquivo baseado em tar
  • rsync --archive /somedir ~/snap/somedir, o rsync é popular e possui muitas extensões / wrapper

  • qualquer utilidade de backup baseada em arquivo (exemplo gráfico :)grsync deve ser utilizável, pois todo o objetivo é duplicar o conjunto de dados para frente e para trás, conforme necessário

  • clones git, possivelmente, no entanto, por padrão, os clones locais usam hardlinks; portanto, se você estiver usando o git para gerenciar o sistema de arquivos io em um piscar de olhos, tenha cuidado com a possibilidade de que, sem desativar os hard links no momento do clone, esse clone do git possa ficar inacessível ao snap.

ThorSummoner
fonte
1
Isso não funcionará no caso de uso comum de uma unidade NAS de vários terabytes montada em NFS.
Peter V. Mørch 28/04/19
1

Não posso postar um comentário porque não tenho reputação suficiente, mas posso postar uma resposta ..?

Enfim, esse não é o problema original, mas se alguém como eu chegou aqui procurando como dar acesso a / media rapidamente (por exemplo, para usar o Darktable, que é basicamente inútil sem ele), você pode fazê-lo através da interface da snap-store ou adicionando o 'plug' de mídia removível ao seu aplicativo snap na linha de comando. Alguns documentos aqui: https://snapcraft.io/docs/interface-management

Daniel Murray
fonte
1
Olá e bem-vindo ao Ask Ubuntu! As respostas apenas ao link são desencorajadas, pois podem se tornar obsoletas se o link expirar no futuro. Posso sugerir que você adicione alguns detalhes à sua postagem (por exemplo, resumindo as etapas / recomendações para uso)?
FloT 29/02