无法修改`snap`安装的文件

我已经使用snap安装了一个包,我需要修改其中一个文件但是当我尝试更改其所有权或权限时,我总是收到以下消息:

 sudo chmod +x ./my_file.js chmod: changing permissions of '/snap/my_app/my_file.js': Read-only file system 

如何修改通过snap安装的文件?

Snap分区使用 SquashFS ,它基本上是一种压缩的只读磁盘映像格式,通常用于创建Live CD / DVD。 SquashFS根本不是设计用于读写的。 要编辑内容,即使是像更改文件权限这样简单的内容也无法通过简单的重新安装来完成。

你的选择是:

  • 重建SquashFS文件系统。 以下资源应该有所帮助:

    • 修改squashfs
    • 如何修改squashfs图像
  • 使用OverlayFS分别保存更改。

如果您想成为Snap开发人员,您可能希望从本教程开始创建第一个快照 。

Snap的程序文件受到保护,不会发生变化。 这是通过将受保护文件作为只读方式安装在其特定空间中的过程来完成的。

该过程还具有用于配置数据的特定空间,其包括用户针对数据和配置的特定家庭空间( /home/user/snap )以及用于全球数据的空间( /var/snap )。

所有全球范围的快照文件都可通过/snap区域的符号链接读取和访问。

您可以使用以下命令validation实际位置以及空间的链接方式。

用于查看snap的受保护装载示例的命令:

 $ mount | egrep snap | egrep ro, /var/lib/snapd/snaps/core_4486.snap on /snap/core/4486 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/communitheme_185.snap on /snap/communitheme/185 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/hello-world_27.snap on /snap/hello-world/27 type squashfs (ro,nodev,relatime) /var/lib/snapd/snaps/core_4407.snap on /snap/core/4407 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/communitheme_124.snap on /snap/communitheme/124 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/core_4571.snap on /snap/core/4571 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/communitheme_246.snap on /snap/communitheme/246 type squashfs (ro,nodev,relatime,x-gdu.hide) /var/lib/snapd/snaps/vlc_190.snap on /snap/vlc/190 type squashfs (ro,nodev,relatime,x-gdu.hide) 

一个命令,用于查看未写保护的snap的空格示例:

 $ mount | egrep snap | egrep -v ro, tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,noexec,relatime,size=3293156k,mode=755) nsfs on /run/snapd/ns/hello-world.mnt type nsfs (rw) nsfs on /run/snapd/ns/vlc.mnt type nsfs (rw) 

通过您的错误消息,您尝试对程序员可编程保护的文件进行更改。 您的问题表明您是应用程序的程序员。 因此,您必须使用snap的编程配置function来确定将哪些文件放在哪里。

我该如何解决这个问题?

正如我在评论中所建议的那样,在开发环境中以普通用户的身份设计程序会更安全,更常见…通常在您自己的个人空间中,然后使用snap的开发系统来安装新版本。

我不是一个快速程序员,也无法详细说明使用过程的设计和导出如何与snap一起工作。 但我可以想象它可能类似于设计Android或Java程序,开发人员将使用某种类型的导出或发布方法来运行或在已安装的配置中测试新版本。

您可以尝试重新安装受保护的只读文件系统以进行读/写。 我不建议它,因为它可能会破坏快照系统的完整性,或者由于修改系统本身而导致应用程序可能无法按预期运行时出现意外行为。