为什么无法以任何方式修改 snap 文件?

为什么无法以任何方式修改 snap 文件?

我一直试图改变 Blender 的图标,但无论我做什么,我都无法编辑任何内容/snap/blender-tpaw/3/

以下是我尝试过的:

  • nautilus从外部编辑文件sudo
  • nautilus使用sudosudo nautilus在终端中)编辑文件。
  • 使用诸如cprm不带 的终端命令sudo
  • 使用终端命令sudo(例如sudo cp <source> /snap/blender-tpaw/3/sudo rm /snap/blender-tpaw/3/<filename.ext>
  • 在根终端上执行上述所有操作(使用sudo -i

在每种情况下我都会收到以下错误:

cannot remove/copy '/snap/blender-tpaw/3/filename.ext': Read-only file system

其中 filename 是文件,.ext 是其扩展名。

这也适用于其他快照文件,而不仅仅是 Blender。

我在这里做错了什么吗?还是根本就无法更改这些文件?虽然我不认为这是不可能的,因为从 Ubuntu 到 Blender 的一切都开源,所以他们没有理由阻止我们修改这些文件。

编辑:

我使用主菜单(alacarte)来更改图标,但我仍然想知道为什么我无法修改任何快照文件。

答案1

虽然这个问题的前提在技术上是正确的(你不能更改快照文件),但仍有办法解决这个问题。

其中一种方法是将--bind选项与 结合使用mount,将现有文件层次结构重新挂载到其他位置。

例如,如果您希望 snap 使用系统证书而不是安装在 中的证书core,您可以在主机上挂载包含系统证书的目录在之上core使用以下命令进入系统证书目录:

sudo mount --bind -o nodev,ro /etc/ssl/certs /snap/core/current/etc/ssl/certs/

这实际上不会改变 snap 文件系统。如果你卸载该文件夹,旧文件夹将取代它:

sudo umount /snap/core/current/etc/ssl/certs

注意:挂载在重新启动后不会保留。有几种方法可以使挂载在重新启动后保留。其中一种方法是创建systemd启动脚本:

$ cat <<-EOF | sudo tee /etc/systemd/system/snap-core-current-etc-ssl-certs.mount
[Unit]
Description=Mount unit to fix etc ssl certs in core package
After=snapd.service

[Mount]
What=/etc/ssl/certs
Where=/snap/core/current/etc/ssl/certs
Type=none
Options=bind,nodev,ro

[Install]
WantedBy=multi-user.target
EOF
$ systemctl enable snap-core-current-etc-ssl-certs.mount

取自这里

答案2

如果不重建 snap,就无法更改 snap 的内容。这主要是一种安全措施,以确保 snap 没有被篡改。

但是,所指的图标很可能位于blender-tpaw_blender.desktop名为可编辑,可在 中找到/var/lib/snapd/desktop/applications

您可以更改以下行来更新图标:-

Icon=/snap/blender-tpaw/3/meta/gui/icon.svg

答案3

事实上可以使用snap try命令解压编辑并运行 snap。以下是 Microstack 的示例:

# Remove existing installation:
sudo snap remove --purge microstack

# download and unpack tree
mkdir ~/snap-repo
cd ~/snap-repo
snap download microstack --beta
mkdir ~/snap-tree
cd ~/snap-tree
sudo unsquashfs ../snap-repo/microstack_245.snap 

现在您可以自由编辑下的文件~/snap-tree/squashfs-root。准备就绪后,您可以使用以下命令运行 snap 并进行更改:

sudo snap try ~/snap-tree/squashfs-root/

snap list microstack

Name        Version  Rev  Tracking  Publisher  Notes
microstack  ussuri   x1   -         -          try

完成后你就可以snap remove PACKAGE照常运行。

参考:https://snapcraft.io/docs/snap-try

相关内容