Почему файлы моментальных снимков не могут быть изменены каким-либо образом?
Я долго пытался изменить значок 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), чтобы изменить значок, но я все еще хочу знать, почему я не могу изменить любой файл привязки.
3 ответа
Невозможно изменить содержимое оснастки, не восстанавливая оснастку. Это прежде всего мера безопасности, чтобы гарантировать, что оснастка не была подделана.
Однако упомянутый значок, скорее всего, находится в файле рабочего стола под названием blender-tpaw_blender.desktop
который можно редактировать, и можно найти в /var/lib/snapd/desktop/applications
,
Вы можете изменить следующую строку, чтобы обновить значок:-
Icon=/snap/blender-tpaw/3/meta/gui/icon.svg
Хотя предпосылка вопроса технически правильна (вы не можете изменить файлы оснастки), есть способы обойти это.
Одним из таких способов является использование --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
Взято отсюда.
На самом деле можно распаковать Edit и запустить Snap, используяsnap try
команда. Вот пример для 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
по-прежнему.