উবুন্টু কোথায় কোথায় তথ্য লিখতে পারে?


30

উবুন্টুতে স্ন্যাপ হিসাবে প্যাকেজড অ্যাপ্লিকেশনগুলি /snap/$SNAPPNAMEস্থানের নীচে ইনস্টল করা (মাউন্ট করা) । এর অধীনে /snapথাকা সমস্ত কিছুই কেবল পঠনযোগ্য ফাইল সিস্টেম হিসাবে মাউন্ট করা হয়, সুতরাং অ্যাপ্লিকেশনগুলি সেই জায়গাতে লিখতে পারে না, অন্য অ্যাপের ডিরেক্টরিতে বা তাদের নিজস্ব হিসাবে নয়।

যখন একটি home ইন্টারফেস রয়েছে যা স্ন্যাপগুলি ব্যবহারকারীর হোম ডিরেক্টরিটি পড়তে / লিখতে নির্দিষ্ট করতে পারে তবে এটি সুরক্ষার কারণে সংরক্ষিত এবং ব্যবহারকারীর দ্বারা ম্যানুয়ালি সংযুক্ত হওয়া (সক্ষম) করা দরকার।

তাহলে কোনও স্ন্যাপের ভিতরে থাকা কোনও অ্যাপ্লিকেশন তার কনফিগারেশন, ডেটা এবং অন্যান্য ফাইলগুলি কোথায় লিখতে পারে? বিশেষ লিখনযোগ্য অবস্থানগুলিতে অ্যাক্সেসের জন্য কি এপিআই রয়েছে?

উত্তর:


41

আপনাকে ডকুমেন্টেশনের সাথে উল্লেখ করতে আমার সমস্যা হচ্ছে, যার অর্থ আমার কাছে এখনও আমার কফি পান হয়নি (সত্য) অথবা আমরা কিছু ডকুমেন্টেশন মিস করছি ( আপডেট : এখানে কিছু ডকুমেন্টেশন )

আপনি যখন আপনার অ্যাপ্লিকেশনগুলি ঘোষণা করেন snapcraft.yaml, এটি /snap/bin/আপনার প্যাকেজ এবং অ্যাপের নাম অনুসারে ইনস্টল করার সময় একটি বাইনারি মোড়ক তৈরি করা হয় এবং এতে স্থাপন করা হয় (নোট করুন যে অ্যাপ্লিকেশনটি যদি কোনও পরিষেবা হয় তবে এই মোড়কটি পরিবর্তে একটি সিস্টেমড। পরিষেবা ফাইল)।

এই মোড়কে বেশিরভাগ পরিবেশ রয়েছে যার অধীনে অ্যাপ্লিকেশনটি চলবে। এই প্রশ্নের সাথে সর্বাধিক প্রাসঙ্গিক দুটি পরিবেশের ভেরিয়েবল 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)

এখন বলে "ফু" এই দুটি ব্যবহার করে uses সম্ভবত এটিতে একটি পরিষেবা রয়েছে যা একটি ডাটাবেস হোস্ট করে 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। এটি এটি করে, এবং এটি চলে যায়।

এখন বলুন যে কোনও কারণেই এই স্থানান্তরগুলি ব্যর্থ হয়েছে এবং এই অ্যাপ্লিকেশনটি আবার ফিরিয়ে নেওয়া দরকার। এটি / স্ন্যাপ / 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, তবে বিশেষত রূপান্তরিত নয় । নির্দিষ্ট স্ন্যাপের প্রতিটি সংশোধনীর এই ডিরেক্টরিতে অ্যাক্সেস রয়েছে, সুতরাং এটি আপগ্রেড / রোলব্যাক ইত্যাদির উপর অনুলিপি করা হয়নি। এটি বিশেষত বড়, রূপান্তরিত ফাইলগুলির জন্য ব্যবহার করা যেতে পারে (যেমন কাঁচা ডেটা যা সত্যই সংস্করণ-নির্দিষ্ট নয়)।

  • 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ব্যবহৃত হবে সেখানে এটি সমাধান করা হবে) g
কাইল

1
দ্রষ্টব্য যে স্ন্যাপ রান v2.15 হিসাবে ব্যবহৃত হয়।
কাইল

2
মনে ডক আপডেট এখানে সুত্র পৃষ্ঠা snapcraft.io/docs/reference/env
user.dz

2
দু'বছর পরে - আপনার এখনও কফি আছে? স্ন্যাপ অ্যাপ্লিকেশনগুলি (ভার্চুয়াল বা হোস্ট) ফাইল সিস্টেমে কোথায় ডেটা লিখতে পারে সে সম্পর্কে কোনও নথিপত্র নেই। আমি স্ন্যাপগুলি সম্পর্কে মৌলিক সুস্পষ্ট বিবরণগুলি বোঝার চেষ্টা করায় এটি আমার পক্ষে মহান অনুপ্রেরণা দেয় না।
ড্যান নিসেনবাউল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.