ฉันมีปัญหาในการอ้างถึงเอกสารซึ่งหมายความว่าฉันยังไม่มีกาแฟ (จริง) หรือเราไม่มีเอกสาร ( อัปเดต : เอกสารบางอย่างที่นี่ )
เมื่อคุณประกาศแอปในของคุณsnapcraft.yaml
มันจะส่งผลให้เกิด wrapper แบบไบนารีที่สร้างขึ้นเมื่อติดตั้งและ/snap/bin/
ตั้งชื่อตามแพ็คเกจและชื่อแอปของคุณ (โปรดทราบว่าหากแอปเป็นบริการแล้ว wrapper นี้จะเป็นไฟล์ systemd .service
wrapper นั้นมีสภาพแวดล้อมส่วนใหญ่ที่แอพพลิเคชั่นจะทำงาน ทั้งสองตัวแปรสภาพแวดล้อมที่มีความเกี่ยวข้องมากที่สุดกับคำถามนี้และSNAP_DATA
SNAP_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
... ฉันไม่รู้ว่าจะใช้คำสั่งนั้นอย่างไร)