ทำไมไฟล์ snap ไม่สามารถแก้ไขได้ แต่อย่างใด


14

ฉันพยายามเปลี่ยนไอคอนของ Blender มานานแล้ว แต่ไม่ว่าฉันจะทำอะไรฉันก็ไม่ได้รับอนุญาตให้แก้ไขอะไร/snap/blender-tpaw/3/เลย

นี่คือสิ่งที่ฉันพยายาม:

  • แก้ไขไฟล์จากโดยไม่ต้องnautilussudo
  • การแก้ไขไฟล์จากnautilusด้วยsudo( sudo nautilusในเทอร์มินัล)
  • โดยใช้คำสั่งขั้วเช่นcpหรือโดยไม่ต้องrmsudo
  • การใช้คำสั่งเทอร์มินัลด้วย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 เป็นไฟล์และ. text เป็นส่วนขยาย

นอกจากนี้ยังนำไปใช้กับไฟล์ snaps อื่น ๆ ไม่เพียง แต่ Blender

ฉันทำอะไรผิดที่นี่เหรอ? หรือเป็นไปไม่ได้ที่จะเปลี่ยนไฟล์เหล่านั้น? แม้ว่าฉันจะไม่คิดว่ามันเป็นไปไม่ได้เพราะทุกอย่างที่นี่จาก Ubuntu เป็น Blender เป็นโอเพ่นซอร์สดังนั้นพวกเขาจึงไม่มีเหตุผลที่จะปิดกั้นเราจากการแก้ไขไฟล์เหล่านั้น

แก้ไข:

ฉันใช้เมนูหลัก (alacarte) เพื่อเปลี่ยนไอคอน แต่ฉันยังต้องการทราบว่าทำไมฉันไม่สามารถแก้ไขไฟล์ snap ใด ๆ

คำตอบ:


12

เป็นไปไม่ได้ที่จะเปลี่ยนเนื้อหาของสแน็ปโดยไม่ต้องสร้างสแน็ปใหม่ นี่เป็นมาตรการรักษาความปลอดภัยเป็นหลักเพื่อให้แน่ใจว่าสแน็ปไม่ได้ถูกดัดแปลง

อย่างไรก็ตามไอคอนที่อ้างถึงมีแนวโน้มในไฟล์สก์ท็อปที่เรียกว่าblender-tpaw_blender.desktopซึ่งเป็น/var/lib/snapd/desktop/applicationsที่สามารถแก้ไขได้และสามารถพบได้ใน

คุณสามารถเปลี่ยนบรรทัดต่อไปนี้เพื่ออัพเดตไอคอน: -

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

สิ่งนี้ "เป็นไปไม่ได้ที่จะเปลี่ยนแปลง" ด้วย snap เป็นอย่างมาก - ฉันหมายถึงมาก - น่ารำคาญ! เหตุผลหลักที่ฉันต้องการใช้ snap คือฉันต้องการทำการติดตั้งแบบขนานของโปรแกรมเดียวกัน (เช่น Firefox) แล้วทำการทดลองกับการติดตั้ง "คัดลอก" โดยไม่ทำให้การติดตั้งหลักยุ่งยาก อย่างไรก็ตามการเปลี่ยนแปลงในไฟล์ .desktop ไม่ทำงานในกรณีของ Firefox
Almir Campos

13

ในขณะที่หลักฐานของคำถามนั้นถูกต้องทางเทคนิค (คุณไม่สามารถเปลี่ยนไฟล์ของสแน็ปอิน) ได้ แต่มีวิธีแก้ไขปัญหานี้

วิธีหนึ่งดังกล่าวคือการใช้--bindตัวเลือกร่วมกับmountเพื่อกำหนดลำดับชั้นของไฟล์ที่มีอยู่ไปยังที่อื่น

ตัวอย่างเช่นถ้าคุณต้องการให้ snaps ของคุณใช้ใบรับรองระบบแทนที่จะเป็นใบรับรองที่ติดตั้งcoreคุณสามารถเมานท์ไดเร็กทอรีที่มีใบรับรองระบบบนโฮสต์ที่ด้านบนของไดเรกทอรีใบรับรองระบบcoreด้วยคำสั่งต่อไปนี้:

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

สิ่งนี้ไม่ได้เปลี่ยนระบบไฟล์ snap หากคุณ unmount โฟลเดอร์โฟลเดอร์เก่าจะเข้าแทนที่:

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

ที่นำมาจากที่นี่


ทางออกที่ดีขอบคุณมาก! เพียงหนึ่ง niggle: systemd รุ่นที่ใหม่กว่า (อันที่ 18.04 ณ ตอนที่เขียนนี้) ไม่ยอมรับการเมานบนเส้นทางบนยอดที่มีซอฟต์ลิงค์; Thankfully การตั้งค่าด้านบนสามารถแทนที่ด้วยบรรทัดใน/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.