ฉันมีปัญหาในการอ้างถึงเอกสารซึ่งหมายความว่าฉันยังไม่มีกาแฟ (จริง) หรือเราไม่มีเอกสาร ( อัปเดต : เอกสารบางอย่างที่นี่ )
เมื่อคุณประกาศแอปในของคุณsnapcraft.yamlมันจะส่งผลให้เกิด wrapper แบบไบนารีที่สร้างขึ้นเมื่อติดตั้งและ/snap/bin/ตั้งชื่อตามแพ็คเกจและชื่อแอปของคุณ (โปรดทราบว่าหากแอปเป็นบริการแล้ว wrapper นี้จะเป็นไฟล์ systemd .service
wrapper นั้นมีสภาพแวดล้อมส่วนใหญ่ที่แอพพลิเคชั่นจะทำงาน ทั้งสองตัวแปรสภาพแวดล้อมที่มีความเกี่ยวข้องมากที่สุดกับคำถามนี้และSNAP_DATASNAP_USER_DATA
SNAP_DATAเป็นพื้นที่ที่สามารถเขียนได้ทั้งระบบ (ใน/var/snap/) สิ่งนี้อาจถูกใช้เพื่อโฮสต์บันทึกสำหรับบริการตัวอย่างเช่น
SNAP_USER_DATAเป็นพื้นที่ที่ผู้ใช้สามารถเขียนได้เฉพาะในโฮมไดเร็กทอรีของผู้ใช้ที่เรียกใช้แอปพลิเคชัน (โดยเฉพาะ/home/<user>/snap/) อาจใช้สำหรับไฟล์การกำหนดค่าเฉพาะผู้ใช้เป็นต้น
ทั้งของไดเรกทอรีเหล่านี้เป็นสิ่งที่สำคัญมากในการอัพเกรด / ย้อนกลับเพราะทั้งสองของพวกเขาจะversioned นั่นคือแต่ละเวอร์ชันของ snap ที่กำหนดมีสำเนาของไดเร็กทอรีเหล่านี้ ให้ฉันอธิบายด้วยตัวอย่าง
สมมติว่าคุณติดตั้งสแน็ป "foo" รุ่น 1 ที่จะสร้างสองไดเรกทอรี:
/var/snap/foo/1( SNAP_DATA)
/home/<user>/snap/foo/1( SNAP_USER_DATA)
ตอนนี้พูดว่า "foo" ใช้ทั้งสองอย่างนี้ อาจมีบริการที่โฮสต์ฐานข้อมูลSNAP_DATAและไบนารีที่ใช้ไฟล์SNAP_USER_DATAกำหนดค่า
ตอนนี้ "foo" เวอร์ชัน 2 วางจำหน่ายแล้วและได้รับการอัปเดตโดยอัตโนมัติ สิ่งแรกที่เกิดขึ้นเป็นที่/var/snap/foo/1ถูกคัดลอกลง/var/snap/foo/2และถูกคัดลอกลง/home/<user>/snap/foo/1 /home/<user>/snap/foo/2จากนั้นเวอร์ชั่นใหม่จะเริ่มทำงาน SNAP_DATAมันควรจะสังเกตเห็นว่ามันทำงานกับข้อมูลเก่าและบางทีมันอาจจะมีการโยกย้ายฐานข้อมูลบางอย่างที่จะทำงานกับฐานข้อมูลใน มันทำอย่างนั้นและไปมันไป
ตอนนี้พูดว่าการโยกย้ายเหล่านั้นล้มเหลวด้วยเหตุผลใดก็ตามและแอปพลิเคชันนี้จะต้องย้อนกลับ มันเริ่มต้นใช้รุ่นเก่า / สแน็ป application / foo ที่SNAP_DATAถูกชี้ไป/var/snap/foo/1และได้รับการชี้ไปที่SNAP_USER_DATA /home/<user>/snap/foo/1สิ่งนี้จะช่วยเลือกรุ่นเก่าที่จุดก่อนที่จะทำการโยกย้ายเนื่องจากการดำเนินการเหล่านั้นถูกเรียกใช้บนสำเนาของข้อมูล
เรื่องสั้นสั้น ๆ : อย่าใช้homeอินเทอร์เฟซเพื่อจัดเก็บข้อมูลที่คุณสามารถจัดเก็บในSNAP_DATAหรือSNAP_USER_DATAเนื่องจากเป็นส่วนหนึ่งของกลยุทธ์การอัพเกรด / ย้อนกลับ ใช้ประโยชน์จากพวกเขา!
อัปเดตสำหรับ v2.0.10:
มีการแนะนำไดเรกทอรีข้อมูลใหม่สองรายการ:
SNAP_COMMONนั่งอยู่ข้างSNAP_DATAแต่เฉพาะunversioned การแก้ไข snap เฉพาะทุกครั้งจะสามารถเข้าถึงไดเรกทอรีนี้ได้ดังนั้นจึงไม่ถูกคัดลอกเมื่ออัปเกรด / ย้อนกลับเป็นต้นซึ่งอาจใช้สำหรับไฟล์ขนาดใหญ่ที่ไม่มีการเปลี่ยนแปลง (เช่นข้อมูลดิบที่ไม่ใช่รุ่นเฉพาะ)
SNAP_USER_COMMONนั่งอยู่ข้างSNAP_USER_DATAแต่เป็นอีกครั้งโดยเฉพาะunversioned มันอาจจะใช้สำหรับการจัดเก็บข้อมูลที่ไม่เฉพาะรุ่นต่อผู้ใช้
อัปเดตสำหรับ v2.15:
ไฟล์ที่อยู่ภายใน/snap/binเป็นห่อไม่ที่กำหนดสภาพแวดล้อม แต่ symlinks /usr/bin/snapไป ดังนั้นวิธีการตรวจสอบสภาพแวดล้อมที่แอปพลิเคชันทำงานจะต้องใช้snap run --shell <snap>.<app>ตัวอย่างเช่น:
$ sudo snap install hello-world
$ snap run --shell hello-world
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$ env | grep SNAP
SNAP_USER_COMMON=/home/kyrofa/snap/hello-world/common
SNAP_REEXEC=
SNAP_LIBRARY_PATH=/var/lib/snapd/lib/gl:
SNAP_COMMON=/var/snap/hello-world/common
SNAP_USER_DATA=/home/kyrofa/snap/hello-world/27
SNAP_DATA=/var/snap/hello-world/27
SNAP_REVISION=27
SNAP_NAME=hello-world
SNAP_ARCH=amd64
SNAP_VERSION=6.3
SNAP=/snap/hello-world/27
SNAP_USER_COMMONสร้าง dir โดยอัตโนมัติด้วย snapd? สคริปต์ตัวเรียกใช้งาน/snap/bin/ไม่ได้สร้างขึ้นและการสร้างด้วยตนเองภายในสแน็ปล้มเหลว (ปฏิเสธสิทธิ์) การเรียกใช้snap run appสร้างโฟลเดอร์นั้น (แต่คำสั่งล้มเหลวด้วยexecv failed: No such file or directory... ฉันไม่รู้ว่าจะใช้คำสั่งนั้นอย่างไร)