به نام خدا
در این مقاله سعی میکنم توضیحات نسبتا کاملی درباره روش آپگرید آفلاین لینوکس بدم.
آپگرید چیست؟
همونطور که میدونیم، نرم افزار ها در لینوکس بصورت پکیج هایی نصب میشن. برنامه نویسان پس از نوشتن برنامه های اوپن سورس، سورس آن را در اینترنت منتشر میکنن و سپس توسعه دهندگان توزیع های مختلف لینوکسی (مثلا اوبونتو و فدورا و ...)، این سورس ها را گرفته و پس از کامپایل و پکیج بندی، در مخازن خودشون قرار میدن. هر پکیجی داخلش یه سری کد نرم افزار هست و هم یک سری اطلاعات مربوط به خود پکیج. از جمله ی این اطلاعات میشه به اطلاعات وابستگی (دیپندنسی) و اطلاعات مربوط به ورژن پکیج اشاره کرد، چون هر پکیجی که داخل مخازن قرار میگیره باید ورژن داشته باشه. وقتی شما یک پکیج رو روی سیستمون نصب میکنید، پس از مدتی ممکنه ورژن جدید اون پکیج روی مخازن قرار بگیره و شما باید پکیج به روز شده رو روی سیستم خودتون نصب کنید. به فرایند به روز رسانی بسته های نصب شده در سیستم، آپگرید میگن.
منظور از مخازن ( repository ) در توزیع های لینوکسی چیست؟
همونطور که در این پست مختصرا توضیح دادم، هر توزیع لینوکسی، نرم افزار های اوپن سورس موجود رو برای توزیع خودش کامپایل و پکیج بندی میکنه و سپس تمام این نرم افزار ها رو در یک سرور در روی اینترنت قرار میده، به این سرور اصطلاحا میگن، مخازن. مثلا توزیع اوبونتو و یا فدورا هر کدوم برای خودشون مخازنی دارن
سیستم apt، آدرس مخازن رو از کجا می دونه؟
ادرس مخازنی که پکیج ها از اونها دانلود میشن، در فایل متنی در ادرس ---------- ذخیره شده. شما خودتون هم میتونید ادرس مخزن مورد نیاز رو بصورت دستی در این فایل متنی وارد کنید(فقط حتما باید بعد از ویرایش این فایل متنی، دستور sudo apt-get update رو بزنید تا سیستم apt، لیست پکیج ها رو از مخازن (از جمله مخزنی که تازه اضافه کردید) بگیره). انشاالله در یک پست دیگر، به نحوه ی ویرایش این فایل و اضافه کردن مخزن بصورت دستی میپردازم.
فرآیند آپگرید چگونه است؟
آپگرید، توسط دستور sudo apt-get upgrade در ترمینال انجام میشه. اول این رو بگم، سیستم apt، در دیتابیس خودش، لیست تمام پکیج هایی که روی سیستم شما نصب شده رو داره، و همچنین هر پکیجی که در آینده نصب کنید رو در دیتابیس خودش ذخیره میکنه، و همچنین یک لیست از پکیج هایی که روی مخازن هست رو داره.
قبل اینکه شما بخواید آپگرید کنید، ابتدا باید کاری کنید که سیستم apt، لیست جدید ترین پکیج های موجود در مخازن رو بگیره، اینکار با استفاده از دستور update انجام میشه، به شکل زیر:
sudo apt-get update
البته ممکنه خود سیستم عامل هم هر از چند گاهی بطور اتوماتیک این دستور رو اجرا کنه تا سیستم apt، لیست جدید ترین ورژن پکیج های موجود در مخازن رو داشته باشه، به هر حال، بهتره شما قبل آپگرید، خودتون بطور دستی دستور sudo apt-get update رو بزنید تا مطمعن بشید.
پس از اینکه سیستم apt، لیست جدید ترین پکیج های موجود در مخازن رو گرفت، شما باید دستور آپگرید رو بزنید، به این شکل:
sudo apt-get upgrade
با زدن این دستور، سیستم apt میاد و لیست پکیج های دریافت شده از مخازن رو با پکیج های نصب شده روی سیستم عامل مقایسه میکنه، اگه یه پکیج با ورژن بالاتر در مخازن موجود باشه، ابتدا میره پوشه ی
var/apt/cache/archive/
رو سرچ میکنه، اگه اون پکیجی که میخاد دانلود کنه در این پوشه وجود داشته باشه، دیگه اونو دانلود نمیکنه، از همینجا نصبش میکنه، اما اگه وجود نداشته باشه، اونو دانلود و در همون مسیر
var/apt/cache/archive/
ذخیره میکنه و سپس اون هارو روی سیستم نصب میکنه. نکته مهمش همینجاست، اگه ما بیایم اون پکیج های مورد نیاز رو، بصورت دستی دانلود کنیم و بریزیم داخل پوشه ی
var/apt/cache/archive/
و سپس دستور آپگرید رو بزنیم، دیگه دانلود نمیکنه و از توی همینجا نصب میکنه :)
پس کاری که ما باید انجام بدیم اینه:
1- ابتدا لینک این بسته هایی که در طی فرایند آپگرید قراره دانلود بشه رو پیدا کنیم
2- سپس این بسته هارو بصورت دستی دانلود کنیم ( در ساعاتی که دانلود شبانه دارید :)
3- و بعدش اونارو بریزیم داخل پوشه ی var/apt/cache/archive/
4- و بعدش دستور آپگرید رو بزنیم تا سیستم ما بصورت آفلاین و بدون نیاز به اینترنت، آپگرید بشه :) به همین راحتی!
چجوری لینک بسته ایی که میخاد دانلود بشه رو پیدا کنم؟
خیلی راحت! ما با استفاده از آپشن --print-uris ، به سیستم apt میگیم که هر بسته ای که میخاد دانلود کنه رو لینکش رو هم توی خروجی به ما نشون بده!
با استفاده از دستور زیر اینکارو میکنیم
sudo apt-get --print-uris upgrade
دقت کنید، وقتی آپشن print-uris-- رو به کار ببرید، دیگه بسته ها دانلود و نصب نمیشن، فقط لینک دانلود اونها توی خروجی نشون داده میشن، مثل عکس زیر ( من توی عکس ادرس یکی از بسته های deb رو هایلایت کردم)
چجوری لینک تمام بسته هارو از عکس بالایی استخراج کنم؟
خب، اگر شما تمام مراحل بالا رو انجام دادید و به مرحله ای که من توی عکس بالا رسیدم رسیدید، دوتا کار می تونید انجام بدید، یکی اینکه تمام متن موجود در ترمینال رو کپی کنید و توی یه ویرایشگر متن مثل sublime پیست کنید و اونجا با استفاده از یک regex expression ( اگه نمیدونید رجکس اکسپرشن چیه سرچ کنید)، تمام رشته هایی که با http شروع و به deb. ختم میشن رو استخراج کنید که میشن همون ادرس فایل های deb.
راه دوم که اسونتره اینه که توی همین ترمینال، به راحتی و با استفاده از دستور grep، تمام اون ادرس هارو استخراج کنید.
برای اینکار کافیه از دستور زیر استفاده کنید
sudo apt-get -y --print-uris upgrade | grep -o "http.*deb'"
که خروجیش میشه مثل عکس زیر
توضیحات دستور " 'grep -o "http.*deb |
علامت | ( بخوانید پایپ) که میدونید چیه، با استفاد از این کاراکتر، ما میایم و خروجی دستور قبل از | رو به عنوان ورودی به دستور grep میدیم. آپشن -o هم باعث میشه که فقط اون رشته هایی که با regex expression مچ میشن رو برگردونه. اون عبارت هم که داخل کوتیشن مارک نوشته شده هم همون regex expression ماست که باعث میشه دستور grep بر اساس اون بتونه رشته هایی که با http شروع و با deb ختم میشن رو برگردونه.
در خروجی نهایی ( همونطور که در عکس هم مشخصه)، فقط یدونه علامت ' مونده که میتونید متن توی ترمینال رو کپی کنید و توی یه تکست ادیتور پیست کنید و اون single qutation mark رو حذف کنید. تبریک میگم! شما با موفقیت تونستید ادرس فایل های deb رو بدست بیارید، حالا می تونید این فایل ها رو در ساعاتی که اینترنت رایگان دارید با استفاده از یک دانلود منیجر دانلود کنید و به روشی که در این اموزش گفته شد روی سیستمتون نصب کنید تا اوبونتو به روز رسانی بشه. امیدوارم موفق باشید :)
باز نشر این مطلب فقط با ذکر ادرس این وبلاک مجاز است.