این فصل به بررسی ساختار و محتوای بستههای “binary” و “source” میپردازد. اولی شامل فایلهای .deb است که به صورت مستقیم توسط dpkg استفاده میشود و دومی شامل سورس کد و دستورالعملهایی است که برای ساخت بستههای باینری لازم میباشند.
5.1. ساختار یک بسته باینری
قالب بستههای دبیان طوری طراحی شده است که محتوای آن روی هر سیستم یونیکس با دستورات کلاسیک ar، tar و gzip (گاهی اوقات xz یا bzip2) قابل خواندن باشد. این ویژگی، برای قابلیت حمل بستهها و بازیابی آنها در شرایط بحرانی بسیار اهمیت دارد.
برای نمونه، تصور کنید که به اشتباه برنامه
dpkg را پاک کردهاید و بنابراین دیگر نمیتوانید بستههای دبیان را نصب کنید.
dpkg خود یک بسته دبیان است و اینطور بنظر میرسد که کار سیستم شما تمام شده باشد... خوشبختانه، شما قالب یک بسته را میشناسید و میتوانید با دانلود کردن فایل
.deb بسته
dpkg آن را به صورت دستی نصب نمایید (قسمت
ابزار dpkg، APT و ar را مشاهده کنید). اگر به بخت بد، برخی از برنامههای
ar و
tar یا
gzip و
bzip2 محو شده باشند، تنها کافی است از سیستم دیگری تنها همان برنامه را کپی کنید (چراکه این بستهها هیچ وابستگی دیگری ندارند و تنها یک کپی کافی از آنها کافی است). اگر شرایط بدتری از این داشتید و حتی اینکار نیز به شما کمک نمیکند (شاید برخی کتابخانههای سیستمی حذف شده باشند؟) باید نسخه ایستا از
busybox را امتحان کنید (که در بسته
busybox-static قرار دارد) که خود شامل دستورات
busybox ar،
busybox tar، و
busybox gunzip است.
بیایید نگاهی به محتوای درون فایل .deb بیندازیم:
$ ar t dpkg_1.17.23_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$ ar x dpkg_1.17.23_amd64.deb
$ ls
control.tar.gz data.tar.gz debian-binary dpkg_1.17.23_amd64.deb
$ tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$ tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm
$ cat debian-binary
2.0
همانطور که مشاهده میکنید، آرشیو ar یک بسته دبیان از سه فایل تشکیل شده است:
debian-binary. این یک فای متنی است که تنها نسخه فایل .deb را نمایش میدهد.
control.tar.gz. این فایل آرشیو شامل تمام اطلاعات جانبی مربوط به بسته است، مانند نام و نسخه آن. برخی از این اطلاعات به ابزار مدیریت بسته امکان تشخیص قابل نصب یا حذف بودن بسته را میدهد، برای نمونه بر اساس فهرست بستههای موجود در سیستم.
data.tar.gz. این آرشیو شامل تمام فایلهای قابل استخراج از بسته است؛ این جایی است که فایلهای باینری، مستندات و موارد دیگر قرار دارند. بعضی بستهها ممکن است از قالبهای فشردهساز دیگری استفاده کنند که در این مورد نام فایل متفاوت خواهد بود (data.tar.bz2 برای bzip2 و data.tar.xz برای xz).