उबंटू स्नैप्स डेटा कहाँ लिख सकते हैं?


30

उबंटू में स्नैप्स के रूप में पैक किए गए एप्लिकेशन /snap/$SNAPPNAMEलोकेशन के तहत इंस्टॉल किए गए (माउंट किए गए) हैं । इसके तहत सब कुछ /snapकेवल-पढ़ने के लिए फाइल सिस्टम के रूप में मुहैया कराया जाता है, इस प्रकार एप्लिकेशन उस स्थान को नहीं लिख सकते हैं, न तो अन्य एप्लिकेशन की निर्देशिका में और न ही अपने में।

हालांकि एक ऐसा home इंटरफ़ेस है जो स्नैप उपयोगकर्ता के होम डायरेक्टरी को पढ़ने / लिखने के लिए निर्दिष्ट कर सकता है, यह सुरक्षा कारणों से आरक्षित है और उपयोगकर्ता द्वारा मैन्युअल रूप से कनेक्ट (सक्षम) किए जाने की आवश्यकता है।

तो एक स्नैप के अंदर का ऐप अपने कॉन्फिग, डेटा और अन्य फाइलों को कहां लिख सकता है? क्या विशेष लेखन योग्य स्थानों तक पहुंचने के लिए एपीआई हैं?

जवाबों:


41

मुझे आपको प्रलेखन का जिक्र करने में परेशानी हो रही है, जिसका अर्थ है कि मैंने या तो अभी तक अपनी कॉफी नहीं ली है (सच है) या हम कुछ दस्तावेज गायब कर रहे हैं ( अपडेट : अन्य दस्तावेज )

जब आप अपने में ऐप्स घोषित करते हैं 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

1
क्या SNAP_USER_COMMONस्नैप द्वारा स्वचालित रूप से बनाया नहीं जा रहा है? लॉन्चर स्क्रिप्ट /snap/bin/इसे बनाता नहीं है, और इसे स्नैप के अंदर मैन्युअल रूप से बनाना विफल रहता है (अनुमति अस्वीकृत)। रनिंग snap run appउस फ़ोल्डर को बनाता है, हालांकि (लेकिन कमांड विफल रहता है execv failed: No such file or directory... मुझे नहीं पता कि उस कमांड का उपयोग कैसे करें)।

1
हां, यह होना चाहिए, लेकिन यह (बग जो आगामी रिलीज में तय किया गया है कि कहां snap runउपयोग किया जाता है) नहीं है।
काइल

1
ध्यान दें कि स्नैप रन का उपयोग v2.15 के रूप में किया जाता है।
काइल

2
इस अद्यतन को देखें, यहाँ रेफरी पेज Snapcraft.io/docs/reference/env
user.dz

2
दो साल बाद - क्या आपने अभी तक कॉफी पी है? अभी भी कोई दस्तावेज नहीं है जहां स्नैप एप्लिकेशन (वर्चुअल या होस्ट) फ़ाइल सिस्टम में डेटा लिख ​​सकते हैं। यह मुझे बहुत प्रेरणा नहीं देता है क्योंकि मैं स्नैक्स के बारे में बुनियादी स्पष्ट विवरणों को समझने की कोशिश करता हूं।
डैन निसेनबाम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.