سرانجام آرمان قاسمی سرافرازانه اعلام میکند در پورپ جستاری با نام «چگونه یک مخزن بسازم» که در آن قول داده بود نوشتاری را در این زمینه به فارسی برگرداند نامبرده پس از سپری شدن امتحانات پایان ترم و گذر از فرایند گشادی این عمل را انجام دادوباشد که مقبول افتد
یک انبار دبیان دستهای از بستههای دبیان است که در یک پوشه درختی ویژه سازماندهی شده است و همچنین دربردارنده شمار کمی فایلهای اضافی است که دارای نشانگرها و checksum های بسته میباشد.
اگر کاربر یک انبار را به فایل /etc/apt/sources.list بیفزاید میتواند به آسانی همگی بستههای در دسترس را مشاهده و نصب کند،درست همانند بستههای که در انبارهای دبیان میباشد.
همچنین یک انبار میتواند به صورت online و offline باشد(برای نمونه روی CD) اگرچه حالت نخست(online) بیشتر رایج است.
انبارها چگونه کار میکنند
یک انبار دستکم دارای یک پوشه با مقداری بستههای DEB و دو فایل ویژه به نامهای packages.gz برای بستههای دودویی(binary) و source.gz برای سورس بستهها میباشد.
اگر انبار شما به درستی در sources.list فهرستبندی شده باشد.(بیشتر در اینباره خواهیم گفت)
apt-get نشانگر packages.gz را برای بستههای دودویی واکشی خواهد کرد (با بهرهگیری از واژه کلیدی deb) و source.gz را برای سورس بسته با بهرهگیری از واژه کلیدی deb-src واکشی خواهد کرد.
packages.gz دربردارنده نام،نسخه،اندازه،توصیفی کوتاه یا بلند و وابستگیهای هر بسته افزون بر اندکی اطلاعات اضافی که برای ما جالب نیستند میباشد.
همگی این اطلاعات توسط برنامههای مدیریت بسته دبیان مانند synaptic,adept,aptitude,dselectو... فهرستبندی میشوند.
source.gz نیز دربردارنده نام،نسخه و وابستگیهای ساخت (بستههای که نیاز به ساختن دارند) هر بسته است.(افزون بر برخی اطلاعات اضافی که باز برای ما جالب نیست)این اطلاعات توسط ابزارهایی مانند apt-get source و یا ابزارهایی همانند آن به کار میرود.
همچنین یک فایل اختیاری دیگر نیز با نام release وجود دارد که دارای برخی اطلاعات درباره انبارهای شماست که برای «سنجاقکردن» (pinning) به کار میرود.ترفند جالبی است که من نمیخواهم آن را وارد این نوشتار کنم.برای اطلاعات بیشتر دباره سنجاقکردن به راهنمای APT HOWTO مراجعه کنید.
پس زمانی که شما انبار خود را نصب کردید،میتوانید همگی بستههای خود را همراه با انبارهای موجود در دبیان نصب کنید.
اگر شما یک بسته را به روز رسانی (update) کنید آن بسته هنگام کاربرد این دستورها
apt-get update && apt-get upgrade ارتقا مییابد(upgrade) و میتوانید توصیفی کوتاه را به همراه دیگر اطلاعات مهم بسته ببینید.
اما چیزهای بیشتری هم هست! اگر انبارها به درستی ساخته شده باشند،میتوانند بستههای متفاوتی را برای هر توزیع و معماری پشتیبانی شده ارایه کنند.
apt به طور خودکار انبار مناسب را برای ماشین کاربر واکشی میکند بدون اینکه حتی او را وادار سازد درباره معماریهای گوناگون چیزی بداند.همچنین اجازه میدهد که بستههایتان را به اجزای(component) گوناگونی گروهبندی کنید.درست همانگونه که بستههای دبیان به اجزای main،none-free و contrib تقسیم شده است.پس به ویژه اگر نرمافزار شما "رها از سکو”(cross-platform) است شما دلبستهی انبارهای بسته خواهید شد!
چگونه باید یک انبار بسازمدو گونه از انبارها وجود دارند.
۱-انبارهای پیچیده که در آن کاربر تنها باید مسیر پایه را برای انبار،توزیع و اجزای را که میخواهد، مشخص کند(apt به طور خودکار انبارها را اگر در دسترس باشد برای هر معماری واکشی میکند).
۲-انبارهای سادهتر که کاربر باید مسیر دقیق را مشخص کند (و apt هیچ کار شگفتانگیزی برای یافتن اینکه کدام بستهها،بستههای درست هستند انجام نمیدهد.)
روش نخست اندکی برای برپاسازی پیچیدهتر است اما برای کاربرد آسانتر میباشد وهمیشه میبایست برای انبارهای پیچیده یا رها از سکو به کار رود.
روش دوم برای برپاسازی سادهتر میباشد اما تنها میبایست برای انبارهای کوچک یا انبارهای که تک معماری هستند به کار رود.
اگرچه این نامگذاری به راستی درست نیست.اما گونه نخست را انبارهای خودکار و گونه دوم را انبارهای جزیی مینامییم.
انبارهای خودکار
ساختار پوشهای یک انبار خودکار با معماریها و اجزای استاندارد دبیان همانند این است.
نمونه نخست: یک انبار استاندارد دبیان
(
your repository root)
|
+-dists
|
|-stable
| |-main
| | |-binary-alpha
| | |-binary-arm
| | |-binary-...
| | +-source
| |-contrib
| | |-binary-alpha
| | |-binary-arm
| | |-binary-...
| | +-source
| +-non-free
| |-binary-alpha
| |-binary-arm
| |-binary-...
| +-source
|
|-testing
| |-main
| | |-binary-alpha
| | |-binary-arm
| | |-binary-...
| | +-source
| |-contrib
| | |-binary-alpha
| | |-binary-arm
| | |-binary-...
| | +-source
| +-non-free
| |-binary-alpha
| |-binary-arm
| |-binary-...
| +-source
|
+-unstable
|-main
| |-binary-alpha
| |-binary-arm
| |-binary-...
| +-source
|-contrib
| |-binary-alpha
| |-binary-arm
| |-binary-...
| +-source
+-non-free
|-binary-alpha
|-binary-arm
|-binary-...
+-source
بستههای آزاد در بخش main،غیرآزادها در non-free و بستههای آزادی که به بستههای غیرآزاد وابسته هستند در contrib جای میگیرند.
در زمان کنونی، دبیان ۱۱ معماری را پشتیبانی میکند که تنها چکیدهای از آن را در تصویر بالا به شما نمایش دادهام.
هر پوشه binary-* دارای یک package.gz و یک فایل release اختیاری است. همچنین هر پوشه source دارای یک sources.gz و یک فایل release اختیاری دیگر است.گوشزد میکنم که بسته مجبور نیست که در همان پوشهای باشد که فایل نشانگر حضور دارد زیرا فایلهای نشانگر دارای مسیرهای به بستههای منحصر به فرد هستند.در واقع،آنها میتوانند هر جای انبار باشند.اینکار آنها را برای ساخت poolها ممکن میسازد.
شما آزاد هستید که هر توزیع و اجزای آن را هر گونه که میخواهید نامگذاری کنید.انبارهایی را که من در این نمونه به کار بردم.همان انبارهایی هستند که درست در دبیان به کار میرود.برای نمونه،شما میتوانستید توزیعهای current و beta را به جای stable , testing ,unstable بسازید و به جای اجزای non-free,contrib,main از foo,bar,baz و qux بهره ببرید.
انبارهای جزییانبارهای جزیی دارای یک پوشهی ریشه و به شمار دلخواهی زیرپوشه است.چون کاربران مجبور به مشخص کردن مسیر به ریشه انبار و مسیر مرتبط میان ریشه و پوشه با فایلهای نشانگر در آن هستند،شما آزاد هستید که هر آنچه را میخواهید انجام دهید(حتی گذاشتن هر چیزی در ریشه انبار)سپس مسیر مرتبط بهسادگی / خواهد بود.
نمونه۲:یک انبار جزیی با دو زیرپوشه
(
your repository root)
|
|-binary
+-source
ساخت فایلهای نشانگر
dpkg-scanpackages فایل بستهها و dpkg-scansources فایل سورسها را میسازد.هر دوی آنها خروجی خود را به stdout میفرستند.پس میتوانیم برای ساخت فایلهای فشرده از فرمان ترکیبی زیر سود ببریم.
dpkg-scanpackages arguments | gzip -9c > Packages.gz
هر دو ابزار به یک روش کار میکنند،هر دوی آنها دو آرگومان میگیرند (در واقع،آنها بیشتر هستند.اما من در اینجا نمیخواهم وارد جزییات آن شوم.شما میتوانید صفحه راهنما را در صورتی که میخواهید درباره آنها بیشتر بدانید مطالعه کنید.)
نخستین آرگومان ورودی پوشهای است که در آن بستهها هستند و دومی فایل رونوشت شده است.
ما به فایلهای رونوشت برای انبارهای ساده نیاز نداریم.اما چون این یک آرگومان ِ لازم است ما به آسانی /dev/null را به آن میدهیم تا از آن بگذریم.
dpkg-scanpackages بستههای .deb و dpkg-scansources فایلهای .dsc را میپوید.
پس گذاشتن فایلهای .orig.gz و .diff.gz و .dsc لازم است و فایلهای .chanegs نیاز نیست.
پس اگر شما یک انبار جزیی دارید همانند نمونه دوم میتوانید دو فایل نشانگر مانند زیر بسازید.
$cd my-repository
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz
اگر شما انباری به پیچیدگی نمونهی نخست دارید میبایستی اسکریپتهایی را برای خودکارسازی این فرآیند بنویسید.
همچنین میتوانید از آرگومان patchfix این دو ابزار برای ساده سازی اندکی از syntax بهره ببرید.این را به عنوان یک تمرین به خواننده واگذار میکنم.(در راهنماها مستند شده است)
ساخت فایلهای اختیاری
اگر میخواهید کاربران انبارتان توانایی به کارگیری «سنجاق کردن» به انبارتان را دهید میبایست یک فایل اختیاری را در هر پوشهای که دربردارنده یک فایل نشانگر است جای دهید.(میتوانید درباره سنجاق کردن به راهنمای APTHOWTO مراجعه کنید).
فایلهای اختیاری فایلهای متنی کوتاه و سادهای هستند همانند زیر:
Archive: archive
Component: component
Origin: YourCompany
Label: YourCompany Debian repository
Architecture: architecture
Archive
نام توزیع دبیانی که بستههای در آن پوشه متعلق به(یا طراحی شده برای) stable,testing وunstable هستند.
Component
جز بستههای درون پوشه برای نمونه main،none-free و contib است
Origin
نام سازنده بسته
Label
برچسبهایی برای بستهها یا انبارتان
Architecture
معماری بستههای درون پوشه
مهم است که Archive و Architecture را درست بدهیم.زیرا آنها بسیار برای سنجاق کردن به کار میروند.دیگر گزینهها کمتر اهمیت دارند.
ساخت poolهابا انبارهای خودکار،پخش کردن بستهها در پوشههای گوناگون به تندی تبدیل به یک جانوار ناآرام میگردد.همچنین مایهی هرز رفتن فضا و پهنایباند میشود زیرا بستههای بسیاری (مانند،بستههای راهنما) که برای همگی معماریها یکی است در آن جای دارد.
در این حالت،راهکار پیش رو pool است.یک pool پوشهای اضافی است که در زیر ریشه انباری است که دربردارنده همه بستههاست.(دودوییهایی برای همگی معماریها،توزیعها،اجزا و همه منابع)
poolها تنها برای انبارهای بزرگ مناسب هستند.من هرگز یکی از آنها را نساختهام و گمان هم نمیکنم در آینده نزدیک به آنها نیاز داشته باشم و این دلیلی برای عدم توضیح دادن چگونگی ساخت آنها است.
اگر گمان میکنید که چنین بخشی لازم است آزادید که یکی به آن بیفزایید.
(این تیکه را درست متوجه نشدم.اگر متوجه شدید آن را ویرایش کنید.)
ابزارها
ابزارهای گوناگونی برای خودکارسازی و آسانسازی آرشیوهای دبیان میباشد.من سرشناسترین آنها را اینجا فهرستبندی میکنم.
(این بخش پایین را درست متوجه نشدم اگر شما درست متوجه شدید آن را ویرایش کنید)
apt-ftparchive برای جابهجای مجموعهای از فایلهای بسته دبیان به ساختار هرمی مناسبی به کارمیرود همانگونه که در آرشیو رسمی دبیان است همچنین apt-ftparchive بخشی از بسته apt-utils میباشد.
apt-ftparchive is used to move a collection of Debian package files into a proper archive hierarchy as is used in the official Debian archive. It is part of the apt-utils package.
apt-move برای جابهجای مجموعهای از فایلهای بسته دبیان بهکارمیرود.همانند آرشیو رسمی دبیان
apt-move is used to move a collection of Debian package files into a proper archive hierarchy as is used in the official Debian archive.
بهکارگیری انبار
کاربرد یک انبار بسیار ساده است اما به نوع انباری که شما ساختهاید بستگی دارد اینکه دودویی یا سورس و خودکار یا جزیی
هر انباری در فایل sources.list یک خط را به خود اختصاص میدهد.برای دودوییها فرمان deb و برای سورس فرمان deb-src را به کار برید.
هر خط سینتکسی مانند این دارد
deb|deb-src uri distribution [component1] [component2] [...]
که uri نشانی اینترنتی(URI) ریشه انبار است مانند
ftp://ftp.yoursite.com/debian,
http://yoursite.com/debian یا برای فایلهای که بر روی دیسک سخت هستند file::///home/joe/my-debian-repository
The trailing slash is optional(hdk il (این هم نفهمیدم)
برای انبارهای خودکار میبایست نام یک توزیع و همچنین نام یک یا چند جز را مشخص کرد توزیع میبایست با یک الش پایان پذیرد.
نمونه سوم:دو انبار خودکار از فایل sources.list من
deb
ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free
deb-src
ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free
این دو خطوط یک انبار سورسی و دودویی را با ریشه
ftp://sunsite.cnlab-switch.ch/mirror/debian/ مشخص میکند که توزیع آن unstable و اجزای آن main,contribو non-free میباشد.
اگر انبار خودکار نباشد آنگاه توزیع مسیر مرتبط به فایلهای نشانگر را نشخص میکند و میبایست با یک اسلش پایان پذیرد و هیچ جزیی نمیخواهد که مشخص شود.
نمونه ۴:
دو انبار جزیی از فایل sources.list من
deb file:///home/aisotton/rep-exact binary/
deb-src file:///home/aisotton/rep-exact source/
خط نخست یک انبار دودویی را مشخص میکند که در جای با این نشانی
/home/aisotton/rep-exact/binary بر روی رایانه من است.و دومی با انباری سورسی را با این نشانی /home/aisotton/rep-exact/source.
واژگانManual:رهنما
Index file:فایل نشانگر
Override file:فایل رونوشت
Repository:انبار
Pinning:سنجاق کردن-پیوستکردن
Automatic Repository:انبار خودکار
Trivial Repository:انبار جزی
Distribution:توزیع که در دبیان سه تا هستند stable,unstable, testing
Cross-platform:رها از سکو
منبع
http://www.debian.org/doc/manuals/repository-howto/repository-howto.en.html