বৈশিষ্ট্য
ccam আপডেট করা
এই পাতাটি ইংরেজি থেকে মেশিনে অনুবাদ করা হয়েছে। সংশোধন স্বাগত। GitHub-এ এই পাতা সম্পাদনা করুন
ccam update GitHub থেকে একটি ccam রিলিজ ডাউনলোড করে, রিলিজের checksums.txt-এর সঙ্গে সেটি যাচাই করে এবং একটি rename-এ চলমান বাইনারি প্রতিস্থাপন করে। ইনস্টল স্ক্রিপ্ট দিয়ে বা আর্কাইভ থেকে ccam ইনস্টল করে থাকলে এটি ব্যবহার করুন। ccam কখনও নিজে থেকে আপডেট খোঁজে না: শুধু এই কমান্ডটি GitHub-এর সঙ্গে যোগাযোগ করে, তাই বাকি প্রতিটি কমান্ড অফলাইনেও একইভাবে কাজ করে।
ব্যবহার
ccam update # install the latest release
ccam update --check # only say whether a newer release exists
ccam update --version v0.3.0 # install that release, also an older one
ccam --dry-run update # show what would be downloaded and replaced$ ccam update --check
ccam 0.5.0 is available (you have 0.4.0). Run `ccam update`.
$ ccam --dry-run update
Would update ccam 0.4.0 → 0.5.0:
download https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
verify with https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/checksums.txt
replace /home/you/.local/bin/ccam
$ ccam update
→ downloading https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
✓ Updated ccam 0.4.0 → 0.5.0 (/home/you/.local/bin/ccam)নতুনতর কোনো রিলিজ না থাকলে ccam প্রিন্ট করে ccam 0.4.0 is up to date. এবং কিছু বদলায় না। --version-এ আপনার বর্তমানে চলমান সংস্করণটি দিলে এটি প্রিন্ট করে ccam 0.4.0 is already installed.
অপশন
| অপশন | কী করে | ডিফল্ট |
|---|---|---|
--check |
শুধু জানায় নতুনতর রিলিজ আছে কি না | বন্ধ |
--version <tag> |
এই রিলিজ ট্যাগ ইনস্টল করে, যেমন v0.3.0, বর্তমানটির চেয়ে নতুন বা পুরোনো |
সর্বশেষ |
--dry-run |
মানা হয়: সর্বশেষ ট্যাগ খোঁজে (যদি না --version কোনোটির নাম দেয়), বাইনারিতে একই যাচাইগুলো চালায়, এবং ডাউনলোড না করে ডাউনলোড, চেকসাম ও প্রতিস্থাপনের পাথ প্রিন্ট করে |
বন্ধ |
--check ও --version একসঙ্গে ব্যবহার করা যায় না। ট্যাগটি অবশ্যই vMAJOR.MINOR.PATCH-এর মতো হতে হবে, ঐচ্ছিক প্রি-রিলিজ বা বিল্ড প্রত্যয়সহ; সামনের v বাদ দেওয়া যায়। অন্য কিছু ব্যর্থ হয়, যেমন --version takes a release tag such as v0.3.0, not "1.2"।
এনভায়রনমেন্ট ভেরিয়েবল CCAM_RELEASES_URL মিরর বা পরীক্ষার জন্য https://github.com/jhyunwoo/ccam/releases-এর জায়গা নেয়। এটি অবশ্যই একইভাবে সাজানো হতে হবে: <url>/latest <url>/tag/<tag>-এ রিডাইরেক্ট করে, আর অ্যাসেটগুলো থাকে <url>/download/<tag>/<asset>-এ।
এটি কীভাবে কাজ করে
কোডটি আছে internal/update-এ, যা শুধু ccam update ইমপোর্ট করে। চালু করার পথ কখনও এটি ডাকে না।
cli.updateCmdos.Executableদিয়ে চলমান বাইনারি খুঁজে বের করে এবংfilepath.EvalSymlinksদিয়ে সিমলিংকগুলো অনুসরণ করে। সেই আসল পাথটিই প্রতিস্থাপিত হয়।--versionছাড়াUpdater.Latestরিডাইরেক্ট অনুসরণ না করে<releases>/latest-এ অনুরোধ পাঠায়, এবংLocationহেডার থেকে ট্যাগটি পড়ে (…/tag/v0.5.0)। এটি GitHub API-এর বদলে রিলিজ পেজ ব্যবহার করে, তাই API-এর ঘণ্টায় ৬০টি অনুরোধের সীমা প্রযোজ্য হয় না। খোঁজার জন্য সময় ১০ সেকেন্ড।parseVersionট্যাগটিকে একটি কঠোর প্যাটার্নের সঙ্গে যাচাই করে। ট্যাগটি ডাউনলোড URL-এ এবং প্রিন্ট করা শেল কমান্ডে যায়, তাই/,%, স্পেস বা শেলের অক্ষরসহ কিছুই পেরোয় না।compareVersionsএটিকে চলমান সংস্করণের সঙ্গে তুলনা করে; প্রি-রিলিজ তার রিলিজের আগে সাজানো হয়।managed()ওwritable()ঠিক করে ccam আদৌ বাইনারিটি প্রতিস্থাপন করতে পারবে কি না (নিচে দেখুন)।Updater.Fetchএকই সময়েccam_<os>_<arch>.tar.gzওchecksums.txtডাউনলোড করে, দুটির জন্য মোট ২ মিনিট। প্রতিটি ডাউনলোড সর্বোচ্চ 256 MB।- অন্য কিছু ঘটার আগে আর্কাইভের SHA-256 অবশ্যই
checksums.txt-এর সংশ্লিষ্ট লাইনের সঙ্গে মিলতে হবে। লাইন না থাকলে বা চেকসাম আলাদা হলে আপডেটnothing was changedদিয়ে থেমে যায়। extract()tar পড়ে এবংccamনামের প্রথম সাধারণ ফাইলটি নেয়। ডিরেক্টরি, লিংক ও অন্যান্য এন্ট্রি উপেক্ষা করা হয়, এবং বাইনারিও সর্বোচ্চ 256 MB।Updater.Installfsutil.AtomicWriteদিয়ে নতুন বাইনারি লেখে: বাইনারির পাশে একটি অস্থায়ী ফাইল.ccam.tmp*, পুরোনো ফাইলের অনুমতি বিটসহ, ডিস্কে ফ্লাশ করে পুরোনোটির ওপর rename করা হয়।
ট্যাগ খোঁজা থেকে rename পর্যন্ত পুরো পাইপলাইন:
আর্কাইভ ও checksums.txt পাশাপাশি ডাউনলোড হয়, এবং চেকসাম না মেলা পর্যন্ত কিছুই লেখা হয় না। rename অ্যাটমিক, তাই ক্র্যাশ বা ভরা ডিস্কের পরে থাকে হয় পুরোনো বাইনারি নয়তো নতুনটি, কখনও অর্ধেক নয়। ~/.local/bin/ccwork-এর মতো শর্টকাট কমান্ড ccam বাইনারির সিমলিংক, তাই কোনো পরিবর্তন ছাড়াই সেগুলো নতুন সংস্করণ চালায়।
প্যাকেজ ম্যানেজারের ইনস্টল
.deb থেকে ইনস্টল করা ccam apt-এর অধীনে, এবং apt-এর অজান্তে সেটি প্রতিস্থাপন করলে প্যাকেজ ডেটাবেস ভুল থেকে যেত। ডাউনলোডের আগে ccam যাচাই করে বাইনারিটি কার:
/usr/bin,/bin,/usr/sbinবা/sbin-এ থাকা বাইনারি প্যাকেজ-পরিচালিত বলে গণ্য হয়।- অন্য জায়গায়,
dpkgইনস্টল থাকলে এবংdpkg -S <path>সফল হলে সেটিও প্যাকেজ-পরিচালিত বলে গণ্য হয়। - অন্যথায় ccam সেখানে লিখতে পারে কি না নিশ্চিত করতে বাইনারির পাশে একটি অস্থায়ী
.ccam-update-*ফাইল তৈরি করে আবার সরায়।
প্যাকেজ-পরিচালিত বাইনারির জন্য ccam থেমে যায় এবং apt-এর ধাপগুলো প্রিন্ট করে:
$ ccam update
ccam: /usr/bin/ccam was installed by a package, so `ccam update` leaves it alone.
To update the .deb, download ccam_0.5.0_linux_amd64.deb from https://github.com/jhyunwoo/ccam/releases/tag/v0.5.0 and run:
sudo apt install ./ccam_0.5.0_linux_amd64.deb
Or install a copy in ~/.local/bin with the install script:
curl -fsSL https://raw.githubusercontent.com/jhyunwoo/ccam/main/install.sh | shLinux ছাড়া অন্য সিস্টেমে শুধু ইনস্টল স্ক্রিপ্টের লাইনটি প্রিন্ট হয়। ফোল্ডারে লেখা না গেলে ccam ইনস্টল স্ক্রিপ্টটি আবার চালানোর পরামর্শ দেয়, যা ~/.local/bin-এ ccam ইনস্টল করে।
নিরাপত্তা ও বিশেষ ক্ষেত্র
- ডেভেলপমেন্ট বিল্ড তার সংস্করণ
devহিসেবে জানায় এবং তুলনা করার মতো কোনো রিলিজ নেই, তাইccam updateওccam update --checkএটি প্রত্যাখ্যান করে।ccam update --version vX.Y.Zএর ওপর একটি রিলিজ ইনস্টল করে। - ব্যর্থ ডাউনলোড, আপনার প্ল্যাটফর্মের অ্যাসেট না থাকা, বা চেকসাম না মেলা ইনস্টল করা বাইনারি আগের মতোই রাখে।
- যে রিলিজ নেই সেটি
there is no release <tag>দিয়ে ব্যর্থ হয়। GitHub HTTP 403 বা 429 দিয়ে প্রত্যাখ্যান করলে ccam জানায় এটি সম্ভবত রেট লিমিট এবং পরে আবার চেষ্টা করতে বলে। --checkশুধু পড়ে। বাইনারিটি প্যাকেজ-পরিচালিত বা লেখার যোগ্য কি না তা এটি যাচাই করে না।- পুরোনো ট্যাগসহ
--versionদিয়েই আগের সংস্করণে ফেরা যায়।