Почему файлы моментальных снимков не могут быть изменены каким-либо образом?

14

Я долго пытался изменить значок Blender, но независимо от того, что я делаю, мне не разрешено ничего редактировать /snap/blender-tpaw/3/.

Вот что я попробовал:

  • Редактирование файлов nautilusизвне sudo.
  • Редактирование файлов с nautilusпомощью sudo( sudo nautilusв терминале).
  • Использование терминальных команд, таких как cpили rmбез 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), чтобы изменить значок, но я все еще хочу знать, почему я не могу изменить любой файл привязки.

Tooniis
источник

Ответы:

12

Невозможно изменить содержимое оснастки, не восстанавливая оснастку. Это прежде всего мера безопасности, чтобы гарантировать, что оснастка не была подделана.

Однако упомянутый значок, вероятно, находится в файле рабочего стола, blender-tpaw_blender.desktopкоторый называется редактируемым, и его можно найти в /var/lib/snapd/desktop/applications.

Вы можете изменить следующую строку, чтобы обновить значок: -

Icon=/snap/blender-tpaw/3/meta/gui/icon.svg
попей
источник
Это «невозможно изменить» вещь с привязкой очень - я имею в виду, очень - раздражает! Основная причина, по которой я хотел бы использовать оснастку, заключается в том, что я хочу выполнить параллельные установки одной и той же программы (например, Firefox), а затем провести эксперименты с установкой «копия», не мешая основной установке. Кстати, изменение файла .desktop не сработало в случае Firefox.
Альмир Кампос
13

Хотя предпосылка вопроса технически правильна (вы не можете изменить файлы оснастки), есть способы обойти это.

Одним из таких способов является использование этой --bindопции в сочетании с mountперемонтированием существующей файловой иерархии в другое место.

Например, если вы хотите, чтобы ваши снимки использовали системные сертификаты вместо установленных в них сертификатов core, вы можете смонтировать каталог, содержащий системные сертификаты, на хосте поверх каталога системных сертификатов coreс помощью следующей команды:

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

Это на самом деле не меняет файловую систему привязки. Если вы размонтируете папку, старая папка займет ее место:

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

Взято отсюда .

Уилер
источник
Отличное решение, спасибо v. Большое! Всего лишь одно замечание: более новые версии systemd (18.04 на момент написания этой статьи) больше не допускают монтирования поверх путей, содержащих soft-ссылки; К счастью, приведенный выше конфиг может быть заменен строкой /etc/fstab, например: echo -e "/etc/ssl/certs\t/snap/core/current/etc/ssl/certs\tnone\tbind,nodev,ro\t0 2" | sudo tee -a /etc/fstab- source
sxc731