当 $HOME 不是 /home/$USER 时如何使用 Snap 包?

pLu*_*umo 6 16.04 snap

尝试使用任何快照包,我遇到以下问题:

$ gimp
cannot create user data directory: /local/home/user/snap/gimp/40: Read-only file system
Run Code Online (Sandbox Code Playgroud)

(Gimp 只是一个例子)。

我有我$HOME/local/home/$USER/(我无法改变这个!)并发现人们在 snap-store 论坛上有同样的问题: https: //forum.snapcraft.io/t/how-can-i-use-snap-when- i-dont-use-home-user/3352https://bugs.launchpad.net/snapcraft/+bug/1620771

在这个线程中,人们说/home是硬编码的snap,他们建议使用绑定安装来解决这个问题。

我尝试过的:

$ sudo mount --bind $HOME /home/$USER
Run Code Online (Sandbox Code Playgroud)

ls正确列出我的内容$HOME

$ ls /home/$USER
Run Code Online (Sandbox Code Playgroud)

我还将额外的主目录添加到/etc/apparmor.d/tunables/home.d/my-homes

$ cat /etc/apparmor.d/tunables/home.d/my-homes
@{HOMEDIRS}+=/local/home/
Run Code Online (Sandbox Code Playgroud)

/var/lib/snapd/apparmor/snap-confine/my-homes

$ cat /var/lib/snapd/apparmor/snap-confine/my-homes
mount options=(rw rbind) @{HOMEDIRS}/ -> /tmp/snap.rootfs_*/home/,
Run Code Online (Sandbox Code Playgroud)

使用bind-mount AND 以及OR 更改文件再次运行快照,会出现与之前相同的错误。
我该如何解决这个问题?


$ snap list gimp
Name  Version  Rev  Tracking  Developer     Notes
gimp  2.10.0   40   stable    snapcrafters  -

$ snap --version
snap    2.32.9
snapd   2.32.9
series  16
ubuntu  16.04
kernel  4.4.0-127-generic
Run Code Online (Sandbox Code Playgroud)

小智 1

从 2.59 开始,Snapd 有一个homedirs系统选项来处理这个问题。要升级到工作版本,您可以使用命令:

snap refresh --channel=latest/edge snapd

我什至不必随后设置主目录,但以防万一您可以使用:

snap set system homedirs=/local/home/


Zyg*_*cki -2

快照开发者在这里

很抱歉,这对您来说是个问题,因为您没有提供有关您正在使用的 snapd 版本的详细信息(提示,运行snap version并粘贴到此处)或您的真实主目录所在的详细安排(它可悲的是也很重要)。

我自己还没有亲自尝试过,但是使用这样的绑定安装应该足够好:

sudo mount --bind /some/random/place/home/zyga /home/zyga

如果将其添加到文件中,则可以使其永久化/etc/fstab。此后,您还必须将主目录更改为真正的位置/home/zyga,而不是原始位置。

如果失败,请snap install hello-world添加以下命令的输出:

SNAP_CONFINE_DEBUG=yes hello-world dmesg | grep DENIED