मुझे आपको प्रलेखन का जिक्र करने में परेशानी हो रही है, जिसका अर्थ है कि मैंने या तो अभी तक अपनी कॉफी नहीं ली है (सच है) या हम कुछ दस्तावेज गायब कर रहे हैं ( अपडेट : अन्य दस्तावेज )
जब आप अपने में ऐप्स घोषित करते हैं snapcraft.yaml
, तो यह एक बाइनरी रैपर के रूप में उत्पन्न होता है /snap/bin/
, जो आपके पैकेज और ऐप के नाम पर स्थापित किया जाता है और नोट किया जाता है (ध्यान दें कि यदि ऐप एक सेवा है, तो यह रैपर सिस्टमड .service फ़ाइल के बजाय) है।
उस आवरण में अधिकांश वातावरण होता है जिसके अंतर्गत अनुप्रयोग चलेगा। दो पर्यावरण चर जो इस प्रश्न के लिए सबसे अधिक प्रासंगिक हैं SNAP_DATA
और हैं SNAP_USER_DATA
।
SNAP_DATA
एक प्रणाली चौड़ा लेखन क्षेत्र (में /var/snap/
) है। उदाहरण के लिए, सेवाओं के लिए लॉग होस्ट करने के लिए इसका उपयोग किया जा सकता है।
SNAP_USER_DATA
एप्लिकेशन (विशेष रूप से /home/<user>/snap/
) चलाने वाले उपयोगकर्ता की होम निर्देशिका में उपयोगकर्ता-विशिष्ट लेखन क्षेत्र है । इसका उपयोग उपयोगकर्ता-विशिष्ट कॉन्फ़िगरेशन फ़ाइलों आदि के लिए किया जा सकता है।
इन दोनों निर्देशिकाओं को अपग्रेड / रोलबैक कार्यक्षमता के लिए बहुत महत्वपूर्ण है, क्योंकि ये दोनों संस्करण हैं । यही है, किसी दिए गए स्नैप के प्रत्येक संस्करण की इन निर्देशिकाओं की अपनी प्रति है। एक उदाहरण से समझाता हूं।
कहते हैं कि आप "फू" स्नैप के संस्करण 1 को स्थापित करते हैं। इससे दो निर्देशिकाएँ बनेंगी:
/var/snap/foo/1
( SNAP_DATA
)
/home/<user>/snap/foo/1
( SNAP_USER_DATA
)
अब कहते हैं "फू" इन दोनों का उपयोग करता है। हो सकता है कि इसमें एक सेवा हो जो एक डेटाबेस को होस्ट करती है SNAP_DATA
, और एक द्विआधारी जो कॉन्फ़िगर फ़ाइलों का उपयोग करता है SNAP_USER_DATA
।
अब "फू" का संस्करण 2 जारी किया गया है, और यह स्वचालित रूप से अपडेट हो गया है। पहली चीज जो होती है वह /var/snap/foo/1
है /var/snap/foo/2
और इसमें /home/<user>/snap/foo/1
कॉपी किया जाता है /home/<user>/snap/foo/2
। फिर नया संस्करण निकाल दिया जाता है। यह ध्यान रखना चाहिए कि यह पुराने डेटा पर चल रहा है, और हो सकता है कि इसमें डेटाबेस को चलाने के लिए कुछ डेटाबेस माइग्रेशन हों SNAP_DATA
। यह ऐसा करता है, और दूर चला जाता है।
अब कहते हैं कि जो भी माइग्रेशन विफल हो जाते हैं वे किसी भी कारण से होते हैं, और इस एप्लिकेशन को वापस रोल करने की आवश्यकता होती है। यह / स्नैप / फू एप्लिकेशन के पुराने संस्करण का उपयोग करना शुरू करता है, जहां 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
, लेकिन विशेष रूप से बिना फैला हुआ है । विशिष्ट स्नैप के प्रत्येक संशोधन में इस निर्देशिका तक पहुंच होती है, इसलिए इसे अपग्रेड / रोलबैक आदि पर कॉपी नहीं किया जाता है। इसका उपयोग विशेष रूप से बड़ी, बिना फ़ाइलों वाली (जैसे कच्चे डेटा जो वास्तव में संस्करण-विशिष्ट नहीं है) के लिए किया जा सकता है।
SNAP_USER_COMMON
साथ बैठता है SNAP_USER_DATA
, लेकिन फिर से विशेष रूप से बिना फैला हुआ है । इसका उपयोग प्रति उपयोगकर्ता गैर-संस्करण-विशिष्ट डेटा संग्रहीत करने के लिए किया जा सकता है।
V2.15 के लिए अद्यतन करें:
भीतर रखी गई फाइलें /snap/bin
अब रैपर नहीं हैं जो पर्यावरण को परिभाषित करती हैं, लेकिन सहानुभूति रखती हैं /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
स्नैप द्वारा स्वचालित रूप से बनाया नहीं जा रहा है? लॉन्चर स्क्रिप्ट/snap/bin/
इसे बनाता नहीं है, और इसे स्नैप के अंदर मैन्युअल रूप से बनाना विफल रहता है (अनुमति अस्वीकृत)। रनिंगsnap run app
उस फ़ोल्डर को बनाता है, हालांकि (लेकिन कमांड विफल रहता हैexecv failed: No such file or directory
... मुझे नहीं पता कि उस कमांड का उपयोग कैसे करें)।