如何授予对/ somedir的快照访问


20

我只是很快就弄湿了。我已经安装了vlc,并想尝试使用它。我所有的媒体都安装在/storeNFS挂载下。而且快照不允许访问该目录。

谷歌搜索后,我终于明白,我可以在访问文件/home/peter:home接口和/media:removable-media接口。

但是我实际上喜欢/store并且不想改变它为/media/store/home/peter/store以外的任何东西/store

有没有办法让snap允许我的snap(或可能只是vlc)访问/store,因此snap符合我的命名约定,还是我被迫转换为snap的首选项?

这似乎很不灵活,我希望有一些我想念的东西。


1
您可以尝试删除按扣(sudo snap remove vlc),然后使用经典选项重新安装。可能有帮助,但可能没有。.(sudo snap install vlc --classic

1
谢谢。我试着--classic--devmode-既不工作。但我也想明确地提供访问权限,/store但不提供类似的权限/supersecret
Peter V.Mørch'18

2
是否有任何待售票/错误/功能请求可以打开?我也想要那个功能!
克拉韦米尔

1
我真的很讨厌快照。
斯蒂芬·波士顿,

@kravemir:参见Launchpad 1643706版
Peter

Answers:


9

令我惊讶的是,它确实看起来像是/home硬编码的。 mount-support.c包含:

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

哇。这令我惊讶。但是你现在有了。

编辑:另请参阅启动板问题1643706


1
嘿,负责的代码开发人员在这里。令您惊讶的是,这实际上是正确的事情。我们无法复制主机文件系统及其可能包含的任何随机目录。虽然您可能使用/ store,但其他人可能会使用/ stash或/ whatever,但通常无法实现该功能。我的建议是简单地将媒体安装在所需的位置,无论是在/ home / ...还是/ media中。然后,它将属于管理数据和事物应该正常运行的现有系统。
Zygmunt Krynicki

@ZygmuntKrynicki或/ mnt下,如果已为该快照连接了可移动媒体接口。
jarno

5
@ZygmuntKrynicki我也很惊讶。默认安装点应通过配置文件进行配置,而不应强制执行。
markhor

3
@ZygmuntKrynicki感谢您弹出并解释该代码符合您的意图。我恭敬地完全不同意你写的东西。硬编码路径是非常差的做法,即使以安全的名义,也无法合理地证明其合理性。这只是基本的僵化。
StéphaneGourichon

1

因此,要扩展我上面的迷你回答,没有办法做到一般,安全和合理。我知道每个人都喜欢自定义文件系统,但这要花一些钱,这就是其中之一。

最终,通过XDG门户网站上的工作,某些应用程序(尤其是图形应用程序)可以访问任意位置的文件,前提是这些应用程序使用了一些最近引入的GTK API。在受限条件下运行时,这将联系受信任的帮助程序,弹出看起来像文件选择器的受信任UI,与特殊的FUSE文件系统对话,以将文件(在任何位置)公开为/ run /中的特殊内容。 ..应用程序可以看到的某个地方,事情可能会正常进行。

这是为诸如媒体播放器或文字编辑器之类的文件选择友好的对象而设计的。不过,您托管在的Linux树/codez无法正常运行。


2
嗨,齐格蒙特,感谢您的回答。我感到惊讶。您说:“我知道每个人都喜欢自定义文件系统,但这要付出一些代价,这就是其中之一。” 正是这样,我明白了:您意识到但选择忽略这是一件常见的事情吗?在过去的15年中,我不知道此命名约定会产生任何其他费用。
彼得·V·莫希

3
有什么理由不能将extradirs=/store:/other/location或之类的线放在/etc/snapd.conf或中/etc/snapd/conf.d/vlc.conf。就像其他大量的Linux应用程序一样。对于Docker来说似乎工作正常。这就像是要硬编码的apache DocumentRoot /var/www
彼得·V·莫希

1
但是,我确实非常感谢您抽出宝贵的时间在这里写信,齐格蒙特。谢谢。
彼得·V·莫希

这不是那么容易。主要问题不是apparmor,而是实际上在运行时应用程序在其他根文件系统中运行的事实。从该过程的角度来看,/ store不存在-不是不是未安装,而是根本不是目录。snap-confine所做的就是将某些路径从主机系统引入到应用程序安装名称空间中。由于快照中的根文件系统是只读的,因此我们无法轻松注入新的安装点(例如/ store)。
Zygmunt Krynicki

@PeterV.Mørch您可以在/ mnt下安装或移动这些文件,确保已连接了可移动媒体接口以进行管理,并且可以根据需要在原始位置创建符号链接。
jarno

1

/home/*/snap/提到将目标目录安装到其中是一种选择;简单的绑定安装对我不起作用,硬链接或目标文件或目录到建议的快照目录或其任何子目录的符号链接也不起作用。此限制可能是由于目标文件存在于/home/*/目录外部,我没有测试对/home/*/前缀glob中文件的挂载/硬/符号链接。

但是,一种解决方法:将完整的文件复制进去/home/<myuser>/snap/<appname>/<somenewdirectory>确实对我有用。对于我来说,维护完整的数据集副本还不可行,但是有很多工具可以解决这种限制。如果数据集很小甚至是原子的,则可以选择在使用快照之前进行手动递归复制,然后再将修改后的文件复制回去

列举一些可以帮助您的文件复制实用程序:

  • cp --verbose --archive --recursive /somedir ~/snap/somedir,源/目标反之亦然
  • tar -C / -c somedir | tar -C ~/snap/ -xv 是基于tar的文件复制示例
  • rsync --archive /somedir ~/snap/somedir,rsync很流行,并且具有许多包装器/扩展名

  • 任何基于文件的备份效用(图形示例:)grsync都应该可用,因为整个目标是根据需要向前和向后复制数据集

  • git clones可能是这样,但是默认情况下本地克隆使用硬链接,因此,如果您使用git将文件系统io管理到快照中,请谨慎考虑在克隆时不禁用硬链接的情况下git clone可能无法访问。


1
在装有NFS的多TB NAS驱动器的常见用例中,这将不起作用。
彼得五世·莫希

1

我无法发表评论,因为我没有足够的声誉,但是我可以发表答案..?

无论如何,这不是最初的问题,但是如果像我这样的人到这里来寻找如何使对/ media的访问迅速(例如使用Darktable,如果没有它,这基本上是没有用的),您可以做到通过快照存储界面,或通过在命令行上将可移动媒体“插件”添加到快照应用中。一些文档在这里:https : //snapcraft.io/docs/interface-management


1
您好,欢迎来到Ask Ubuntu!不鼓励仅链接的答案,因为如果链接将来过期,它们可能会过时。我可以建议您在帖子中添加一些细节(例如,总结使用的步骤/建议)吗?
海军报
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.