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

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

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

$ gimp
cannot create user data directory: /local/home/user/snap/gimp/40: Read-only file system

(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

ls正确列出了我的内容$HOME

$ ls /home/$USER

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

$ cat /etc/apparmor.d/tunables/home.d/my-homes
@{HOMEDIRS}+=/local/home/

/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/,

再次使用 bind-mount 和 / 或更改文件运行 snap,出现与之前相同的错误。
我该如何解决这个问题?


$ 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

答案1

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

snap refresh --channel=latest/edge snapd

我甚至不需要设置主目录之后,但以防万一你可以使用:

snap set system homedirs=/local/home/

答案2

snapd 开发人员在这里

很抱歉这对您来说是一个问题,因为您没有提供有关您正在使用的 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

相关内容