تجربیاتی که از اولین مشارکتم در یک پروژه نرم افزار آزاد کسب کردم ۳

چگونه توزیع مردم را به فنا بدهیم؟ (به طور غیر عمدی) ۲

درود

خب تا اینجای کار یه یاد‌آوری بکنیم. در قسمت اول تجربیات اولین مشارکت درست حسابیم من قضیه‌ی ثبتنام در Codeberg و اولین درخواست واکشیم به پروژه Phoenix رو براتون گفتم. در قسمت دوم هم از اسکریپت هایی که برای نصب و حذف Phoenix ایجاد کردم و مشکلات پیش‌آمده در استفاده از اون ها براتون گفتم.

در این قسمت میخوام از قضیه استفاده‌ی ما از روش بسته‌بندی خود توزیع ها برای نصب و حذف Phoenix بگم.

قبل از هر چیز بذارید من داستان این ققنوسی که برای عکس این نوشته انتخاب کردم رو بگم. در ابتدای راه پروژه Phoenix هیچ نشان و نمادی نداشت، این ققنوسی که میبینیدو من با تغیر نقشک بازی xonotic در مجموعه نقشک های Flat Remix ایجاد کردم و به Celenity پیشنهاد کردم که اونو به عنوان نماد Phoenix انتخاب کنه و اونم اینو قبول کرد. داشتن یک نماد برای یک پروژه به اون یک هویت میده و برای همینم چیز بسیار مهمیه. اینم که ساختن هویت یک پروژه به نام تو ثبت شه اونم با یک تغیر خیلی ساده و موزیانه هم خیلی خوبه. :))))))))

حالا بریم سر اصل مطلب این قسمت. به‌مرور زمان مشکلات استفاده از کدنوشته ها بیشترو بیشتر می‌شد و این مشکلات داشت کمر پروژه رو میشکوند، الآنو نگاه نکنید در صفحه کدبرگ Phoenix نوشته که بیش از ۹۰٪ درصدش با جاوا اسکریپته، اون زمان بیش از ۵۰٪ درصد پروژه با پوسته‌ی بش بود. بعد از این مشکل خود Celenity شروع کرد به بسته‌بندی کردن پروژه. اون برای آرچ از AUR، برای فدورا از COPR و برای دبیان هم از makedeb استفاده کرد و پروژه‌ی خودشو با قالب خود توزیع ها بسته بندی کرد.

این خوب بود، واقعا پیشرفت بزرگی به حساب میومد و خب در اون زمان هم تمام زحمات من برای پروژه با یک کامیت حذف شد. :/ اما خب مهم توسعه‌ی پروژه هست. البته کدنوشته‌های من از نظر خودم واقعا تمیز بودن ولی خب این روش از پایه مشکل دار بود.

اما این بسته‌بندی کردن هم باز مشکلات خودشو داشت، خود makedeb علاوه بر اینکه ابزاری بود برای ساخب بسته‌‌های DEB بود، مخزنی هم برای ارائه‌ی اون بسته ها داشت. ولی بعد از مدتی دیگه حاضر نشد که بسته‌ی Phoenix رو در مخزن خودش قرار بده و اونو حذف کرد! این واقعا چیز بدی بود، ما برای دبیان دیگه نمیتونستیم هیچ کاری بکنیم! پروژه اینقدر بزرگ شده بود که استفاده‌ از کدنوشته ها برای حذف و نصب اون باتوجه به مشکالات این روش که کابوس بود. موارد زیادی رو امتحان کردیم، اوایل سعی کردیم که از Launchpad برای توزیع بستمون استفاده کنیم ولی Launchpad تنها از ppa ها پشتیبانی میکرد و ppa ها هم بدرد دبیان نمیخوردن. امکان ایجاد یک مخزن شخصی هم نبود.

به دلیل شرایط بالا برای چنیدن ماه پروژه از توزیع های دبیان پایه پشتیبانی نمیکرد و این خیلی بد بود. بعد از مدتها خود Celenity به من OBS (Open Build System) رو معرفی کرد و قرار ما بر این شد که بسته مونو با OBS برای دبیان ارائه بدیم. به طور شخصی Celenity چندین بار تلاش کرده بود که بتونه از سازوکار OBS سر در بیاره و بتونه بسته رو درون اون بسازه که البته ناموفق بود و برای همینم از من کمک خواست. من تا اون زمان از ساختن بسته های DEB اصلا چیز نمیدونستم برای همینم چنیدن روزو برای یادگیری نحوه ساختن بسته های DEB صرف کردم و منابع زیادی رو مطالعه کردم.

گذشتو گذشت، آزمایش پشت آزمایش تا بالاخره ما تونستیم یک ساخت موفق داشته باشم. Phoenix از این به بعد میتونست بر روی دبیان هم نصب بشه و این واقعا عالی بود.

اما این راه هم اصلا بدون مشکل نبود. این راه حتی از روش قبلی هم برای ما مشکلات بیشتری رو درست کرد. اصلی ترین مشکل خود ما بودیم، بسته‌‌بندی قلق ها و استاندارد های خاص خودشو داره که ما در بسیاری از موارد اصلا اون هارو رعایت نمی‌کردیم.

بسته‌بندی ما بسیار کثیف بود و این باعث بروز مشکلات زیادی شد. خودتون میتونید debian/rulesی که ما هنوز هم ازش استفاده میکنیم رو ببینید. خیلی کثیفه نه؟ :))))))

در اینجا من چنتا از مشکلاتی که داشتیمو براتون میگم.

همانطور که انتظار میرفت من یکبار مسیری که یک از پرونده ها باید در اونجا قرار میگرفتو در debian/rules اشتباهی تنظیم کردم و این باعث می‌شد که بسته‌ کارشو درست انجام نده.

یکبار Celenity سعی داشت پرونده‌ی etc/apt/sources.list.d/home:celenity.list/ رو که مخزن OBS پروژه در اون قرار داشت رو با خود بسته‌بندی پیوند های اونو از http به https تغیر بده و چون این پرونده قبلا توسط کاربر ایجاد شده بود، کاربر در هنگام بروزرسانی خطای Overwrite دریافت میکرد. که البته با گذارش کاربر حل شد.

به تازگی فرایند ساخت بسته‌هایی که Celenity میساخت به صورت عجیبی شکست میخورد و بعدش ما فهمیدیم که مشکل از رایانه‌ی Celenity بوده. خودتون برید مشکلو ببنید.

https://build.opensuse.org/source/home:celenity/phoenix/phoenix_2025.05.11.1-1.debian.tar.xz?rev=a2576fd51eaaac20107f1598226b27b3

به طرز عجیبی در پرونده‌‌های tar مورد نیاز ساخت بسته از هر پرونده یک پرونده‌ی دیگه با همون نام به صورت مخفی ایجاد شده بود و این فرایند ساخت رو با مشکل مواجه کرده بود.

به تازگی هم اینم اضافه شده.

Warning: https://download.opensuse.org/repositories/home:/celenity/Debian_12/InRelease: Policy will reject signature within a year, see --audit for details

مشکلات بسیار زیادی وجود داشته که ما از اونها عبور کردیم و مشکلات بسیار زیاد دیگه‌ای هم هست که قرار در سر راهمون سبز بشه. اینکه من میگم مشکل حالا کسی ندونه خیال میکنه وای چی بوده. در حقیقت بیشتر مشکلات ما بخاطر خنگولیت‌‌های خودمون بودن و خواهد بود.

من شاید نتونستم به خوبی مشکلاتو براتون توضیح بدم و ممکنه شما بسیاری از چیز هارو متوجه نشده باشید ولی خب همینه دیگه، این یکی نوشتم خیلی ماست مالی شد اینم به‌خاطر این بود که من از قبل در ذهن داشتم که همه چیزو بهتون بگم اونم با ذوقو شوق ولی خب، من نمیتونم به خوبی حس و حال خاطراتمو همونطوری که در حرف میتونم بگم در نوشته هم انتقال بدم، قطعا اگه شما اینا رو از خودم بشنوید هم خیلی بیشتر بهتون میگم، هم خیلی بیشتر میفهمید و هم خیلی بیشتر لذت میبرید. تازه از شر غلاطای املایی من خلاص میشد.

از من به شما نصیحت، بسته‌ی خارج از مخازن رسمی نصب نکنید حتی اگه Phoenix باشه!