سامانه ساخت آرچ (ABS)

از ArchWiki پارسی
پرش به: ناوبری، جستجو


این مقاله یک بررسی اجمالی درباره سامانه ساخت آرچ به اختصار ABS و گذری کوتاه برای مبتدیان است و قرار نیست یک راهنمای مرجع کامل باشد.

سامانه ساخت آرچ چیست؟

سامنه ساخت آرچ یک سامانه شبه پورت برای ساخت و بسته بندی نرم افزار از کد منبع است. درحالی که pacman یک ابزار سفارشی شده آرچ لینوکسی برای مدیریت بسته‌ها است که شامل بسته‌های که با ABS ساخته می‌شوند, هم می‌شود، ABS نیز مجموعه‌ از ابزارهایی است که برای کامپایل کردن کد منبع و ساخت بسته‌ با قالب pkg.tar.xz به‌ کار می‌رود.

سامانه شبه پورت چیست؟

از سامانه ports برای خودکار ساختن بسته‌ها از کد منبع استفاده می‌شود. سامانه از یک پورت برای دانلود، بازکردن، وصله زدن، کامپایل کردن و نصب نرم افزاری که به آن داده شده استفاده می‌کند. خود port صرفا یک شاخه در کامپیوتر کاربر است که مطابق نامش نرم افزاری که باید نصب شود را نامگذاری می‌کند و شامل چندین پرونده با دستور العمل‌های لازم برای ساخت (PKGBUILD) و نصب نرم افزار از کد منبع است. این سامانه, نصب نرم افزار را چنان ساده می‌کند که با نوشتن ‌فرمان make یا make install clean در داخل شاخه مربوط به نرم افزار می‌توانید آن‌ را به راحتی نصب کنید.


ABS یک مفهوم مشابه است

ABS یک سری شاخه است که می‌تواند با سامانه کنترل نسخه SVN بررسی شود, این شاخه‌ها فقط نمایانگر نرم افزارهای رسمی آرچ است اما همه نرم افزارهای رسمی نیز در آن قرار ندارد. درون زیرشاخه‌های بسته نرم افزاری یا کد منبعی وجود ندارد به جز پرونده‌ی PKGBUILD و گاهی چند پرونده‌ی دیگر. با بکارگیری makepkg در داخل همان شاخه‌ای که PKGBUILD در آن قرار گرفته، نرم افزار ابتدا کامپایل شده و سپس با بسته بندی می‌شود. حال شما می‌توانید با pacman بسته را نصب یا بروزرسانی کنید.


برسی اجمالی ABS

ABS را می‌توان مانند یک چتر در نظر گرفت چرا که از چند جزء کوچک‌تر دیگر شکل گرفته است. بنابراین، هرچند از لحاظ فنی کاملا دقیق نیست اما ABS می‌تواند ابزارهای زیر را یک مجموعه ابزار کامل برای ساخت در نظر بگیرد:

درخت سامانه کنترل نسخه SVN tree

ساختار این شاخه محتوی پرونده‌هایی است که برای ساخت بسته‌های رسمی لازم هستند اما خود بسته‌ها یا کد منبع‌شان در این شاخه وجود ندارد بلکه در مخازن svn و git موجود است.

PKGBUILD

یک بَش اسکریپ که حاوی URL کد منبع به همراه شیوه کامپایل شدن و بسته بندی است.

makepkg

یک فرمان پوسته (شِل) است که PKGBUILDها را می‌خواند، بصورت خودکار کدهای منبع آن‌ ها را بارگیری می‌کند و آرایه PKGEXT که در makepkg.conf وجود دارد، یک .pkg.tar* می‌سازد. همچنین ممکن است شما از makepkg برای ساخت بسته‌های مدنظرتان از طریق AUR یا از طریق کدهای منبع شخص ثالث استفاده کنید.


pacman

ابزار پکمن به کلی جدای ازین قضیه است اما makepkg یا خود کاربر بصورت دستی برای نصب یا لغو نصب یک بسته و همچنین برای رفع وابستگی‌های بسته آنرا فرابخواند و از آن استفاده کند.

AUR

AUR مخفف Arch User Repository به معنی مخزن کاربر آرچ، از ABS جداست اما PKGBUILDهای AUR از makepkg برای گرداوری و بسته بندی نرم افزار استفاده می‌کنند, در مقابلِ درخت ABSی که روی ماشین محلی شما وجود دارد هرچند AUR دارای رابط وبسایت است. AUR شامل هزاران PKGBUILD برای نرم افزارهاست که بصورت شخصی توسط کاربران توسعه داده شده است که در مخازن رسمی وجود ندارند. اگر می‌خواهید یک بسته را خارج از بدنه اصلی آرچ بسازید AUR ایده‌ی مناسبی برای این کار است.

هشدار: PKGBUILDهای رسمی را اینگونه در نظر می‌ گیرند که بسته هایی که ساخته اید به درستی chroot شده اند. زیرا اگر این کار بدرسته انجام نشود ممکن است برنامه به کلی کار نکند یا در حین اجرا به مشکلات پیش بینی نشده ای برخورد کند. زیرا اگر سامانه ساخت وابستگی‌ها را بصورت پویا تشخیص دهد، نتیجه کار به بسته‌های موجود در سیستم بستگی خواهد داشت.

درخت سامانه کنترل نسخه

مخازن core,extra و testing برای وارسی در مخزن کنترل نسخه packages هستند. مخازن community و mulilib در مخزن کنترل نسخه community هستند. هر بسته زیرشاخه‌های خود را دارد و به همراه این، شاخه‌های repos و trunk وجود داردند که از شاخه‌ی repos یک شاخه‌ی دیگر به نام مخزن (مثلا core) و معماری مشتق می‌شود. PKGBUILDها و فایل‌های موجود در repos در ساخت‌های رسمی استفاده می‌شوند. پرونده‌های موجود در شاخه‌ی trunk پیش از انتقال به repos توسط توسعه دهندگان بررسی و آماده می‌شوند. بعنوان مثال درختچه acl چیزی شبیه این است:

acl
acl/repos
acl/repos/core-i686
acl/repos/core-i686/PKGBUILD
acl/repos/core-x86_64
acl/repos/core-x86_64/PKGBUILD
acl/trunk
acl/trunk/PKGBUILD

چرا باید از ABS استفاده کنم؟

سامانه ساخت آرچ برای موارد زیر استفاده میشود:

  • کامپایل یا کامپایل مجدد یک بسته به هر دلیلی
  • ساخت و نصب بسته‌های جدید از طریق کد منبع برای نرم افزارهایی که هنوز هیچ بسته ای برایشان در دسترس نیست
  • شخصی سازی بسته‌های موجود مطابق با نیازهایتان (فعال یا غیر فعال سازی برخی گزینه ها، وصله زدن)
  • بازسازی کل سیستم با فلگ‌های کامپایلر خودتان (مثلا packbuilder-svn aur که دیگر در دسترس نیست)
  • ساخت تر و تمیز و نصب کرنل شخصی سازی شده خودتان
  • کامپایل و نصب اسان نسخه جدیدتر، قدیمی تر، بتا یا در دست توسعه یک بسته آرچ با تغییر شماره نسخه در PKGBUILD

استفاده از ABS در آرچ لینوکس لازم نیست هرچند که برای خودکار سازی کارهایی معین مربوط به کامپایل کردن کد‌های منبع مفید است.

چطوری از ABS استفاده کنم؟

برای بازیابی PKGBUILDی که برای ساخت یک بسته از کدمنبع لازم است، میتوانید با رویکرد svn یا مبتنی بر git از بسته asp استفاده کنید، که یک پوشه حول مخازن svntogit است. در ادامه هر دو روش مبتنی بر svn و مبتنی بر git تشریح خواهد شد.


بازیابی منبع PKGBUILD با استفاده از Svn

نصب پیش‌نیاز‌ها:

sudo pacman -S subversion

وارسی غیر بازگشتی:

هشدار: کل مخزن را دانلود نکنید؛ فقط طبق دستورالعمل‌های زیر پیش بروید. کل مخزن svn خیلی حجیم است. علاوه بر اینکه حجم زیادی از دیسک حافظه شما را پر میکند، هزینه های مالیاتی ناخوشایندی بر دوش سرور archlinux.org خواهد گذاشت. اگر از این سرویس سوء استفاده کنید، آدرس شما مسدود می‌شود. هرگز از svn عمومی برای اسکریپتینگ استفاده نکنید..

برای وارسی مخازن core, extra و testing:

svn checkout --depth=empty svn://svn.archlinux.org/packages

برای وارسی مخازن community و multilib:

svn checkout --depth=empty svn://svn.archlinux.org/community

در هر دو مورد یک شاخه‌ی خالی برای بررسی svn ساخته می‌شود.


وارسی یک بسته

در شاخه‌ی حاوی مخزن svnی که برای بررسی ساخته اید ( مثلا community یا packages) این کار را انجام دهید:

svn update package-name

این دستور بسته درخواستی را به شاخه وارسی بیرون می‌کشد (pull می‌کند). از هم اکنون هر زمان در سطح بالاتر فرمان svn update را اجرا کنید svn این بسته نیز به روز می‌شود. اگر بسته ای را درخواست کنید که وجود نداشته باشد svn به شما اخطاری نمیدهد، بلکه فقط چیزی شبیه "At revision 115847" را بدون ساختن هیچ پرونده‌ای به شما نشان می‌دهد.اگر چنین اتفاقی افتاد:

  • بررسی کنید که غلط املایی در نوشتن نام بسته نداشته باشید
  • بررسی کنید که بسته به مخزن دیگری منتقل نشده باشد(مثلا از مخزن community به مخزن main)
  • آدرس https://www.archlinux.org/packages را بررسی کنید و ببینید که بسته مورد نظر شما از بسته پایه‌ای دیگری مشتق نشده باشد, مثلا بسته python-tensorflow از PKGBUILDی به نام tensor ساخته شده است!

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

svn update

بازیابی PKGBUILD با استفاده از git

بعنوان یک پیش نیاز بسته asp را نصب کنید. برای شبیه سازی مخزن svntogit یک بسته خاص، فرمان زیر را اجرا کنید:

asp checkout pkgname

این دستور مخزن git بسته مورد نظر را در یک دایرکتوری با نام بسته شبیه سازی میکند. برای بروزرسانی مخزن git شبیه سازی شده از دستور asp update و بدنبال آن دستور git pull در داخل مخزن git استفاده کنید. علاوه بر این می‌توانید از تمام دستورات git برای بررسی نسخه قدیمی تر یا رهگیری تغییری بخصوص استفاده کنید.برای کسب اطلاعات بیشتر در مورد کار با git، صفحه git را ببینید. چنانچه میخواهید یک تصویرآنی از PKGBUILD کنونی یک بسته خاص داشته باشید از این استفاده کنید:

asp export pkgname


ساخت بسته

برای اطلاع از چگونگی تنظیم makepkg برای ساخت بسته‌ای که PKGBUILD آن را وارسی کرده اید قسمت پیکربندی را در صفحه‌ی makepkg مطالعه کنید. سپس شاخه‌ی حاوی PKGBUILDی را که میخواهید اصلاح کنید در مکانی دیگر کپی کنید. حالا تغییرات و اصلاحات خود را اعمال کرده و از makepkg طبق آنچه که در makepkg#نحوه استفاده گفته شد استفاده کرده تا بسته خود را ساخته و نصب کنید.

نکات و ترفندها

نگهداری بسته‌های اصلاح شده

به روز رسانی سیستم با pacman باعث میشود که بسته هایی را که با ABS ساخته اید با بسته های همنامشان در مخازن رسمی جایگزین شود. برای جلوگیری ازین حالت راهکارهای آتی را بخوانید. آرایه گروه را در PKGBUILD قرار دهید وبسته را به گروهی که modified نامید میشود، اضافه کنید.

PKGBUILD
groups=('modified')

این گروه را به قسمت IgnoreGroup در/etc/pacman.conf اضافه کنید.

/etc/pacman.conf
IgnoreGroup = modified

اگر نسخه جدیدتری ازین بسته در مخازن رسمی وجود داشته باشد، pacman در زمان به روزرسانی سیستم اعلانی مبنی بر نادیده گرفتن به روز آوری این بسته به شما نشان میدهد.زیرا این بسته در قسمت IgnoreGroup است. حال برای جلوگیری از تاثیر بروزرسانیهای جزئی باید بسته را از طریق ABS مجددا بازسازی کنید.

وارسی نسخه‌های قدیمی‌تر از یک بسته

ابتدا داخل مخزن svnی که قبلا مطابق انچه در قسمت #وارسی غیر بازگشتی گفته شد، وارسی کرده اید(مثلا مخزن package یا community)، لاگ را بررسی کنید:

svn log package-name

با بررسی کردن تاریخچه تغییرات، نسخه مدنظرتان را پیدا کنید. فرض کنیم شما میخواهید نسخه r1729 را وارسی کنید:

svn update -r1729 package-name

این دستور یک کپی از بسته شما را به نسخه مشخص شده به روز آوری میکند. همچنین شما میتوانید تاریخ تعیین کنید. اگر در تاریخ یاد شده ویرایشی یافت نشد، svn بطور خودکار نزدیکترین تاریخِ قبل از تاریخ مدنظر را برای شما پیدا میکند. بعنوان مثال پیدا کردن نگارشی در تاریخ 2009-03-03 مربوط به یک بسته:

svn update -r{20090303} package-name

همچنین شما میتوانید به وارسی نگارش بسته ها قبل از انتقال به مخزنی دیگر بپردازید. برای این کار لاگ را به دقت بخوانید تا تاریخ انتقال به مخزن جدید یا تغییر به نسخه نهایی را بیابید.

دیگر ابزارها

اpbget-بازیابی مستقیم PKGBUILD بسته های واحد از طریق رابط وب.شامل AUR اasp-ابزاری برای مدیریت ساخت فایلهای منبعی که در ساخت آرچ لینوکس استفاده میشود. این ابزار از رابط git استفاده میکند که طبیعتا منابع به روزتری هستند.