بستهها و تجدیدپذیری
پیرو بعضی از بحثها داخل ماستادون، تصمیم گرفتم تا توضیحاتی رو درباره ساختار بستهٔها و بستهٔهای توی مخازن پارچ بدم.
بستههای داخل مخازن پارچ به ۳ دسته تقسیم میشن:
۱- اسکریپت
۲- برنامه
۳- بستههایی از aur
اسکریپتها به صورت پیشفرض سورسشون داخل گیتهاب پارچ در دسترس هستش، برنامههای پارچ هم به همین ترتیب (فعلاً تنها برنامههای نوشته شده برای پارچ درود و نامبان هستند) و بستههای aur هم میشه از توی خود aur فایلبیلدشون رو گرفت.
ساختار بستههای آرچ/پارچ
بستههای آرچ معمولاً با پسوند tar و فشردهسازی zstd هستن، که این موجب میشه راحتتر بشه اونهارو برسی کرد.
چطور میشه برسیشون کرد؟
شما میتونید یک بسته رو به دلخواه دریافت کنید، با tar یا مدیرآرشیو خودتون استخراجش کنید و محتویاتش رو ببینید.
به صورت کلی، هر بسته ای که ساخته میشه برای آرچ جز فایل های باینری وغیره، ۳ تا ۴ تا فایل داخل خودش داره، یکی از اونها که فایل install هستش و اسکریپت های بعد نصب رو اجرا میکنه که کاملا قابل دیدن هستن.
۲ تا از این فایل ها خیلی مهم هستن، buildinfo که نشون میده بسته کجا روی چه سیستمی ساخته شده و mtree که نشون میده این بسته چه کار هایی انجام میده. pkginfo هم یک سری آرایه برای مدیربسته هستن که اسم بسته و نگارش داخلش هست:
هر بسته یک هش بخصوص داره که اون هش فقط تحت چند شرط ثابته که بعداً توضیح میدم، محل بیلد بسته، محل دریافت سورس و همینطور فلگهایی که این بسته باهاش بیلد شده رو نشون میده:
فایل mtree لیست فایل هایی که داخل بسته هستن با هش هاشون و همینطور محلی که بعد نصب میرن و سطحدسترسی هاشون رو نشون میده.
به چه دردی میخوره؟ برفرض مثال فردی یک بستهای رو میاد داخلش یک فایل مخرب قرار میده که اصلا توی این فایل mtree ثبت نشده، مدیر بسته از نصب این بسته خودداری میکنه.
و فایل pkginfo که جزئیات فنی رو به مدیر بسته نشون میده. نگارش بسته، حجم بسته لینک بسته و ….
همون خروجی ای هستش که pacman -Si و pacman -Qi بعد نصب اون بسته نشون میدن:
درمورد سایرفایلها که اسم بردم مثل فایل install، محتویاتش به این صورت هستش، مثلاً فایل install برای مخازن chaoticAUR:
شروط تجدیدپذیر بودن یک بسته:
در سایت https://reproducible.archlinux.org اگر نگاهی بندازید، لیست بستههایی که نمیتونن دوباره با یک هش یکسان بیلد بشن رو میبینید، به صورت کلی:
۱- بستههایی که از یک کامیت گیت بیلد میشن
۲- بستههایی که با پایتون بیلد میشن
۳- کرنل
۴- کتابخانههای زبانهای برنامهنویسی مثل (هسکل و پایتون)
بستههایی که این شروط رو داشته باشن بعد از هر بیلد مجدد هش یکسانی رو به کاربر نمیدن.
برای مثال برنامهٔکاربراتور رو از aur بیلد میکنیم:
همونطور که میبینید، این برنامه بعد از بیلد مجدد هش خروجی اش با هش خروجی همون نسخه که قبل تر بیلد شده یکسان نیست! خودتون هم برای اطمینان میتونید این مراحل رو تکرار کنید.
مخزن PCP:
مخزن PCP یا مخزنجامعهٔکاربری پارچ، مخزنی هستش که برنامههای داخلش همه از aur بیلد میشن، درحال حاضر این فرآیند دستی هستش، تمامی برنامههای داخل این مخزن آزموده شدن و بعد روی مخزن قرار گرفتن، حتی در مواردیکه یک برنامهنسخه جدیدترش خطاهای زیادی داشته مثلاً windescribe، این برنامه روی نسخه بدون مشکل تا عرضه نسخه جدید فریز شده.
ما گامهایی رو برای خودکار کردن فرایند بیلد این مخزن داریم طی میکنیم، مهمترین و بزرگترین معضلی که برای این کار داریم زمان پیادهسازی این حرکت هستش. پیادهسازی این نوع ساختار زمان و انرژی زیادی میخواد و حتی در مراحل ابتدایی پیادهسازی ممکنه خطاهای زیادی داشته باشه که کارکرد کل مخزن رو برای یک مدت زمانی مختل کنه.
همینطور پیادهسازی این ساختار، قبلش نیاز داره تا ساختار پورتال توسعهدهنده پارچ پیادهسازی بشه، تا توسعهدهندههایی که میخوان بستشون رو اینجا ثبت کنن، اونجا برای آزموده شدن توسط ماشین آزمایش بشن و بعدش وارد چرخه بیلد، مخزن آزمون (فعلاً ایجاد نشده) و بعد مخزن اصلی بشن.
اینها توضیحاتی بودند که لازم بود بدم درمورد ساختار بستهها، تجدیدپذیری و …..
همینطور لازمهستش که ذکر کنم، پروژه اوپنسورس هدف اولیه ایجادش رفع مشکلات توسعهدهنده خودش هست، هیچکس نمیاد توی خونهای که زندگی میکنه مین بکاره.
سهراب، توسعهدهنده توزیع پارچ
۱۹ خردادماه سال ۱۴۰۳