dpkg-architecture(1) dpkg suite dpkg-architecture(1)

dpkg-architecture - تنظیم و تعیین معماری ماشین برای ساخت بسته

dpkg-architecture [گزینه...] [دستور]

dpkg-architecture امکانی را برای تعیین و تنظیم معماری ساخت و معماری میزبان جهت ساخت بسته‌ها فراهم می‌کند.

معماری ساخت همیشه از طریق متغیر DEB_BUILD_ARCH در صورت تنظیم بودن (و عدم تعیین --force) یا از طریق یک فراخوانی بیرونی به dpkg(1) تعیین می‌شود و امکان تنظیم آن از طریق خط فرمان وجود ندارد.

می‌توانید معماری میزبان را با مشخص کردن یک یا هر دو گزینه --host-arch و --host-type تعیین کنید، در غیر این صورت متغیر DEB_HOST_ARCH در صورت تنظیم بودن (و عدم تعیین --force) استفاده می‌شود. مقدار پیش‌فرض از طریق یک فراخوانی بیرونی به gcc(1) تعیین می‌گردد، یا در صورتی که CC یا gcc هر دو در دسترس نباشند، یکسان با معماری ساخت در نظر گرفته می‌شود. تعیین یکی از گزینه‌های --host-arch یا --host-type کافی است و مقدار دیگری روی یک مقدار پیش‌فرض قابل استفاده تنظیم خواهد شد. در واقع، اغلب بهتر است تنها یکی را مشخص کنید، زیرا اگر انتخاب شما با مقدار پیش‌فرض همخوانی نداشته باشد، dpkg-architecture به شما هشدار خواهد داد.

چاپ متغیرهای محیطی، هر کدام در یک سطر، با قالب VARIABLE=value. این عملیات پیش‌فرض است.
بررسی برابری معماری (از نسخه 1.13.13 dpkg). این دستور معماری میزبان دبیان فعلی یا مشخص‌شده را با architecture مقایسه می‌کند تا برابری آن‌ها را بررسی نماید. این عمل الگوهای عام معماری (wildcards) را بسط نمی‌دهد. در صورت تطابق، دستور با وضعیت خروج 0 و در صورت عدم تطابق با وضعیت 1 به پایان می‌رسد.
بررسی همسانی معماری (از نسخه 1.13.13 dpkg). این دستور معماری میزبان دبیان فعلی یا مشخص‌شده را پس از بسط دادن architecture-wildcard به عنوان یک الگوی عام معماری مقایسه می‌کند تا تطابق آن‌ها را بررسی نماید. در صورت تطابق، دستور با وضعیت خروج 0 و در صورت عدم تطابق با وضعیت 1 به پایان می‌رسد.
چاپ مقدار یک متغیر منفرد.
چاپ یک دستور export. می‌توان از این خروجی برای تنظیم متغیرهای محیطی با استفاده از eval در شل POSIX یا make (بسته به قالب خروجی) استفاده کرد.
چاپ دستوری مشابه --print-set اما برای لغو تنظیم (unset) تمام متغیرها.
اجرای یک command-string در محیطی که تمام متغیرها روی مقادیر تعیین‌شده تنظیم شده‌اند.

اگر command-string شامل نویسه‌های کنترلی شل (metacharacters) باشد، از طریق شل bourne سیستم فراخوانی خواهد شد.

چاپ فهرستی از نام‌های معتبر معماری. ممکن است توسط یک یا چند گزینه تطبیق --match-wildcard، --match-bits یا --match-endian محدود شود (از نسخه 1.17.14 dpkg).
-?, --help
نمایش پیام راهنما و خروج.
نمایش نگارش و خروج.

تنظیم معماری دبیان میزبان (host).
تنظیم نوع سیستم گنو برای میزبان (host).
تنظیم معماری دبیان هدف (target) (از نسخه 1.17.14 dpkg).
تنظیم نوع سیستم گنو برای هدف (target) (از نسخه 1.17.14 dpkg).
محدود کردن معماری‌های فهرست‌شده توسط --list-known به مواردی که با الگوی عام معماری مشخص‌شده تطابق دارند (از نسخه 1.17.14 dpkg).
محدود کردن معماری‌های فهرست‌شده توسط --list-known به مواردی با تعداد بیت‌های مشخص پردازنده (از نسخه 1.17.14 dpkg). مقدار می‌تواند 32 یا 64 باشد.
محدود کردن معماری‌های فهرست‌شده توسط --list-known به مواردی با ترتیب بایت مشخص (endianness) (از نسخه 1.17.14 dpkg). مقدار می‌تواند little (کم‌ارزش به پرارزش) یا big (پرارزش به کم‌ارزش) باشد.
تنظیم قالب خروجی برای --print-set و --print-unset (از نسخه 1.20.6 dpkg)، به یکی از دو مقدار shell (پیش‌فرض) یا make.
مقادیر تنظیم‌شده توسط متغیرهای محیطی موجود با همان نام مورد استفاده توسط اسکریپت‌ها محترم شمرده می‌شوند (یعنی توسط dpkg-architecture استفاده می‌گردند)، مگر اینکه این فلگ اجبار (force) مشخص شده باشد. این کار به کاربر امکان می‌دهد حتی زمانی که فراخوانی dpkg-architecture درون اسکریپت دیگری تعبیه شده است (برای نمونه dpkg-buildpackage(1))، مقدار را بازنویسی و جایگزین کند.

ماشین ساخت (build machine)
ماشینی که بسته روی آن ساخته می‌شود.
ماشین میزبان (host machine)
ماشینی که بسته برای اجرا روی آن ساخته می‌شود.
ماشین هدف (target machine)
ماشینی که کامپایلر برای آن کد می‌سازد، یا شبیه‌ساز کد را برای آن اجرا خواهد کرد. این مورد فقط هنگام ساخت یک زنجیره ابزار همگردانی متقابل (یا شبیه‌ساز) نیاز است؛ زنجیره‌ای که روی معماری ساخت ساخته می‌شود تا روی معماری میزبان اجرا گردد، و خودش برای معماری هدف کد تولید می‌کند (یا شبیه‌سازی را اجرا می‌نماید).
معماری دبیان (Debian architecture)
یک معماری دبیان یک “ماشین” را توصیف می‌کند (با در نظر گرفتن آن به عنوان یک مفهوم انتزاعی که الزاماً به یک دستگاه فیزیکی واقعی وابسته نیست) که نمایانگر یک محیط اجرایی خاص است، شامل پردازنده و ویژگی‌های آن (مانند ترتیب بایت‌ها و اندازه بیت)، یک سیستم‌عامل (معمولاً یک هسته، اما الگوهای دیگر با استفاده از سرویس‌های فضای کاربر نیز ممکن است) و رابط‌های آن به سمت فضای کاربر شامل قالب فایل‌های اجرایی و ABI آن‌ها، و همچنین یک کتابخانه libc و ABI مربوط به آن.

معماری ویژه all نشان‌دهنده یک محیط اجرایی مستقل از معماری است، که برای مواردی مانند اسکریپت‌های پوسته و پرل یا مستندات استفاده می‌شود.

یک معماری دبیان در فراداده بسته‌های باینری و نام فایل‌ها (که درخت باینری را در یک مخزن بسته مشخص می‌کند) به کار می‌رود و می‌تواند در روابط و وابستگی‌های بسته ظاهر شود.

نام معماری باید با یک نویسه الفبایی‌عددی (“0-9a-zA-Z”) شروع شود و در ادامه نویسه‌های الفبایی‌عددی یا خط پیوند (“-”) بیایند.

مثال‌ها: amd64، i386، sparc64، hurd-amd64، musl-linux-riscv64.

چندتایی معماری دبیان (Debian architecture tuple)
چندتایی معماری دبیان، معماری کاملاً مشخص همراه با تصریح تمام اجزای تشکیل‌دهنده آن است. این مورد با معماری دبیان تفاوت دارد زیرا دست‌کم جزء cpu شامل abi نمی‌شود. چندتایی کنونی دارای قالب abi-libc-os-cpu است.

مثال‌ها: base-gnu-linux-amd64، eabihf-musl-linux-arm.

الگوی عام معماری دبیان (Debian architecture wildcard)
الگوی عام معماری دبیان یک معماری ویژه است که به عنوان الگو عمل می‌کند و با هر معماری ”ماشین” که بخشی از آن باشد تطابق می‌یابد (به جز all).

شکل عمومی آن یک چندتایی معماری دبیان با چهار عنصر یا کمتر است که دست‌کم یکی از آن‌ها any می‌باشد. عناصر غایب چندتایی به طور ضمنی با پیشوند any در نظر گرفته می‌شوند، بنابراین جفت‌های زیر معادل یکدیگر هستند:

مثال‌ها: linux-any، any-i386، hurd-any، eabi-any-any-arm، musl-any-any.

نوع سیستم گنو (GNU system type)
یک رشته تعیین معماری گنو که از دو بخش تشکیل شده و با یک خط پیوند از هم جدا می‌شوند: پردازنده (CPU) و سیستم (system).

بخش پردازنده هرگز شامل خط پیوند نیست، در حالی که بخش سیستم ممکن است خود حاوی خط پیوند برای تفکیک یک هسته از ABI عمومی آن باشد، جایی که ABI عمومی ممکن است شامل مشخص‌کننده‌های ABI زمان اجرا (مانند libc) و فایل اجرایی باشد که بدون خط پیوند به هم پیوسته‌اند.

مثال‌ها: i586-linux-gnu، sparc64-linux-gnu، i686-gnu، x86_64-netbsd.

سه‌تایی چندمعماری (multiarch triplet)
نوع سیستم شفاف‌سازی‌شده گنو، که برای مسیرهای سیستم‌فایل استفاده می‌شود. این سه‌تایی حتی زمانی که خط مبنای ISA ارتقا می‌یابد تغییر نمی‌کند، تا مسیرهای حاصل در طول زمان پایدار بمانند. تنها تفاوت کنونی آن با نوع سیستم گنو این است که بخش پردازنده برای سیستم‌های مبتنی بر i386 همیشه i386 است.

مثال‌ها: i386-linux-gnu، x86_64-linux-gnu. مسیرهای نمونه: /lib/powerpc64le-linux-gnu/، /usr/lib/i386-gnu/.

متغیرهای زیر از محیط خوانده می‌شوند (مگر اینکه --force مشخص شده باشد) و توسط dpkg-architecture تنظیم می‌گردند (برای توضیحات مربوط به طرح نام‌گذاری، بخش اصطلاحات (TERMINOLOGY) را ببینید):

معماری دبیان ماشین ساخت.

نکته: اگر ابزارهایی نمی‌سازید که لازم باشد در حین فرآیند ساخت اجرا شوند، این‌ها احتمالاً متغیرهایی نیستند که به دنبالشان هستید. لطفاً برای آگاهی از مفهوم این اصطلاحات به بخش "اصطلاحات (TERMINOLOGY)" مراجعه کنید.

نام ABI دبیان برای ماشین ساخت (از نسخه 1.18.11 dpkg).
نام libc دبیان برای ماشین ساخت (از نسخه 1.18.11 dpkg).
نام سیستم دبیان برای ماشین ساخت (از نسخه 1.13.2 dpkg).
نام پردازنده دبیان برای ماشین ساخت (از نسخه 1.13.2 dpkg).
اندازه اشاره‌گر ماشین ساخت (بر حسب بیت؛ از نسخه 1.15.4 dpkg).
ترتیب بایت ماشین ساخت (little / big؛ از نسخه 1.15.4 dpkg).
بخش پردازنده گنو از DEB_BUILD_GNU_TYPE.
بخش سیستم گنو از DEB_BUILD_GNU_TYPE.
نوع سیستم گنو برای ماشین ساخت.
نوع سیستم شفاف‌سازی‌شده گنو برای ماشین ساخت، مورد استفاده در مسیرهای سیستم‌فایل (از نسخه 1.16.0 dpkg).
معماری دبیان ماشین میزبان.
نام ABI دبیان برای ماشین میزبان (از نسخه 1.18.11 dpkg).
نام libc دبیان برای ماشین میزبان (از نسخه 1.18.11 dpkg).
نام سیستم دبیان برای ماشین میزبان (از نسخه 1.13.2 dpkg).
نام پردازنده دبیان برای ماشین میزبان (از نسخه 1.13.2 dpkg).
اندازه اشاره‌گر ماشین میزبان (بر حسب بیت؛ از نسخه 1.15.4 dpkg).
ترتیب بایت ماشین میزبان (little / big؛ از نسخه 1.15.4 dpkg).
بخش پردازنده گنو از DEB_HOST_GNU_TYPE.
بخش سیستم گنو از DEB_HOST_GNU_TYPE.
نوع سیستم گنو برای ماشین میزبان.
نوع سیستم شفاف‌سازی‌شده گنو برای ماشین میزبان، مورد استفاده در مسیرهای سیستم‌فایل (از نسخه 1.16.0 dpkg).
معماری دبیان ماشین هدف (از نسخه 1.17.14 dpkg).

نکته: اگر زنجیره‌های ابزار همگردانی متقابل (یا شبیه‌سازها) را نمی‌سازید، این‌ها احتمالاً متغیرهایی نیستند که به دنبالشان هستید. لطفاً برای آگاهی از مفهوم این اصطلاحات به بخش "اصطلاحات (TERMINOLOGY)" مراجعه کنید.

نام ABI دبیان برای ماشین هدف (از نسخه 1.18.11 dpkg).
نام libc دبیان برای ماشین هدف (از نسخه 1.18.11 dpkg).
نام سیستم دبیان برای ماشین هدف (از نسخه 1.17.14 dpkg).
نام پردازنده دبیان برای ماشین هدف (از نسخه 1.17.14 dpkg).
اندازه اشاره‌گر ماشین هدف (بر حسب بیت؛ از نسخه 1.17.14 dpkg).
ترتیب بایت ماشین هدف (little / big؛ از نسخه 1.17.14 dpkg).
بخش پردازنده گنو از DEB_TARGET_GNU_TYPE (از نسخه 1.17.14 dpkg).
بخش سیستم گنو از DEB_TARGET_GNU_TYPE (از نسخه 1.17.14 dpkg).
نوع سیستم گنو برای ماشین هدف (از نسخه 1.17.14 dpkg).
نوع سیستم شفاف‌سازی‌شده گنو برای ماشین هدف، مورد استفاده در مسیرهای سیستم‌فایل (از نسخه 1.17.14 dpkg).

تمام این فایل‌ها باید موجود باشند تا dpkg-architecture کار کند. مکان آن‌ها را می‌توان در زمان اجرا با متغیر محیطی DPKG_DATADIR بازنویسی کرد. این جدول‌ها حاوی یک شبه‌فیلد Version قالب در سطر اول خود هستند تا قالب آن‌ها مشخص شود و تجزیه‌کننده‌ها بتوانند بررسی کنند که آیا آن را پشتیبانی می‌کنند یا خیر، مانند "# Version=1.0".

/usr/share/dpkg/cputable
جدول نام‌های شناخته‌شده پردازنده و نگاشت به نام گنوی آن‌ها. نسخه قالب 1.0 (از نسخه 1.13.2 dpkg).
/usr/share/dpkg/ostable
جدول نام‌های شناخته‌شده سیستم‌عامل و نگاشت به نام گنوی آن‌ها. نسخه قالب 2.0 (از نسخه 1.18.11 dpkg).
/usr/share/dpkg/tupletable
نگاشت میان چندتایی‌های معماری دبیان و نام‌های معماری دبیان. نسخه قالب 1.0 (از نسخه 1.18.11 dpkg).
/usr/share/dpkg/abitable
جدول بازنویسی‌های ویژگی ABI معماری دبیان. نسخه قالب 2.0 (از نسخه 1.18.11 dpkg).

/usr/share/dpkg/architecture.mk
قطعه‌کد Makefile که به درستی تمام متغیرهایی را که dpkg-architecture خروجی می‌دهد تنظیم و صادر (export) می‌کند (از نسخه 1.16.1 dpkg).

دستور dpkg-buildpackage گزینه -a را می‌پذیرد و آن را به dpkg-architecture پاس می‌دهد. سایر مثال‌ها:

CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
eval $(dpkg-architecture -u)

بررسی اینکه آیا معماری میزبان فعلی یا مشخص‌شده با یک معماری برابر است یا خیر:

dpkg-architecture -elinux-arm64
dpkg-architecture -ariscv64 -elinux-riscv64

بررسی اینکه آیا معماری میزبان فعلی یا مشخص‌شده یک سیستم لینوکس است یا خیر:

dpkg-architecture -ilinux-any
dpkg-architecture -aamd64 -ilinux-any

متغیرهای محیطی تنظیم‌شده توسط dpkg-architecture به عنوان متغیرهای make به debian/rules ارسال می‌شوند (مستندات make را ببینید). با این حال، نباید به آن‌ها اتکا کنید، زیرا این کار مانع فراخوانی دستی اسکریپت می‌شود. در عوض، همیشه باید آن‌ها را با استفاده از dpkg-architecture همراه با گزینه -q مقداردهی اولیه کنید. در اینجا چند مثال آورده شده است که نشان می‌دهد چگونه می‌توانید پشتیبانی از همگردانی متقابل (cross compilation) را در بسته خود بهبود ببخشید:

دریافت نوع سیستم گنو و ارسال آن به ./configure:

DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
[...]
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  confflags += --build=$(DEB_HOST_GNU_TYPE)
else
  confflags += --build=$(DEB_BUILD_GNU_TYPE) \
               --host=$(DEB_HOST_GNU_TYPE)
endif
[...]
./configure $(confflags)

انجام یک عملیات منحصراً برای یک معماری خاص:

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
ifeq ($(DEB_HOST_ARCH),arm64)
  [...]
endif

یا اگر فقط نیاز به بررسی پردازنده یا نوع سیستم‌عامل دارید، از متغیرهای DEB_HOST_ARCH_CPU یا DEB_HOST_ARCH_OS استفاده کنید.

توجه داشته باشید که همچنین می‌توانید به یک قطعه‌کد خارجی Makefile تکیه کنید تا به درستی تمام متغیرهایی را که dpkg-architecture می‌تواند فراهم کند، تنظیم نماید:

include /usr/share/dpkg/architecture.mk
ifeq ($(DEB_HOST_ARCH),arm64)
  [...]
endif

در هر صورت، در هنگام ساخت یک بسته هرگز نباید از dpkg --print-architecture برای دریافت اطلاعات معماری استفاده کنید.

در صورت تنظیم بودن، به عنوان دایرکتوری داده‌های dpkg که جدول‌های معماری در آن قرار دارند استفاده می‌شود (از نسخه 1.14.17 dpkg). پیش‌فرض آن «/usr/share/dpkg» است.
حالت رنگی را تنظیم می‌کند (از نسخه 1.18.5 dpkg). مقادیر پذیرفته‌شده فعلی عبارتند از: auto (پیش‌فرض)، always و never.
در صورت تنظیم بودن، برای تعیین اینکه آیا پشتیبانی از زبان مادری (Native Language Support) که به عنوان بین‌المللی‌سازی (یا i18n) نیز شناخته می‌شود فعال شود یا خیر، استفاده خواهد شد (از نسخه 1.19.0 dpkg). مقادیر پذیرفته‌شده عبارتند از: 0 و 1 (پیش‌فرض).

تمام نام‌های طولانی دستورات و گزینه‌ها تنها از نسخه 1.17.17 dpkg در دسترس هستند.

dpkg-buildpackage(1).

2026-03-06 1.23.7-dirty