ABIDB(1) Libabigail ABIDB(1)

abidb - بررسی باینری‌ها در برابر پیکرهٔ abixml یا ثبت داده‌های جدید

دستور abidb یک مخزن git از فایل‌های abixml توصیف‌کنندهٔ کتابخانه‌های اشتراکی را مدیریت می‌کند و باینری‌ها را در برابر آن‌ها بررسی می‌نماید. برنامه‌های elfutils و libabigail برای پرس‌وجو و پردازش باینری‌ها به کار می‌روند. abidb برای دریافت خودکار محتوای DWARF مورد نیاز، به‌خوبی با debuginfod هماهنگ می‌شود.

abidb [OPTIONS] [--submit PATH1 PATH2 ...] [--check PATH1 PATH2 ...]

  • --abicompat PATH

    مسیر برنامهٔ abicompat مورد استفاده را مشخص می‌کند. در صورت عدم استفاده از این گزینه، به‌طور پیش‌فرض برنامهٔ abicompat موجود در دایرکتوری‌های فهرست‌شده در متغیر محیطی $PATH به کار گرفته می‌شود.

  • --abidw PATH

    مسیر برنامهٔ abidw مورد استفاده را مشخص می‌کند. در صورت عدم استفاده از این گزینه، به‌طور پیش‌فرض برنامهٔ abidw موجود در دایرکتوری‌های فهرست‌شده در متغیر محیطی $PATH به کار گرفته می‌شود.

  • --distrobranch BRANCH

    شاخهٔ git مربوط به فایل‌های abixml را در مخزن git مشخص می‌کند. مقدار پیش‌فرض رشته‌ای مانند DISTRO/VERSION/ARCHITECTURE است که از محیط در حال اجرا محاسبه می‌شود.

  • --git REPO

    درخت کاری git از پیش موجود را برای ارسال به آن یا بررسی در برابر آن توسط abidb مشخص می‌کند. مقدار پیش‌فرض، دایرکتوری کاری فعلی است. این درخت می‌تواند به‌طور هم‌زمان توسط چندین عملیات "check" استفاده شود، اما در یک زمان تنها یک عملیات "submit" مجاز است.

  • --help | -h

    نمایش راهنمای کوتاه دربارهٔ دستور و خروج.

  • --loglevel LOGLEVEL

    سطح عیب‌یابی پیام‌ها برای ارسال به stderr را مشخص می‌کند. یکی از مقادیر debug، info، warning، error یا critical؛ بدون حساسیت به حروف کوچک و بزرگ. مقدار پیش‌فرض info است.

  • --timeout SECONDS

    حداکثر زمان مجاز اجرا (به ثانیه) را برای برنامه‌های اجرایی abidw و abicompat تعیین می‌کند. به‌طور پیش‌فرض، هیچ محدودیتی برای زمان اجرای این برنامه‌ها در نظر گرفته نشده است.

  • --allow-no-debug-info

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

  • --archive | -Z .EXT[=CMD]

    مسیرهای (PATH) با پسوند .EXT را مشخص می‌کند تا به عنوان آرشیو با آن‌ها رفتار شود. اگر CMD مشخص شده باشد، PATH از طریق لوله به دستور شل داده‌شده فرستاده می‌شود، در غیر این صورت گویی از طریق cat عبور داده می‌شود. جریان دادهٔ حاصل سپس توسط libarchive باز می‌شود تا محتویات طیف گسترده‌ای از قالب‌های فایلی آرشیو ممکن را فهرست‌بندی کند. هر فایل درون آرشیو به‌طور جداگانه پردازش شده و به abixml تبدیل می‌شود.

    برای نمونه، -Z .zip هر فایل درون یک فایل zip را پردازش می‌کند و -Z .deb='dpkg-deb --fsys-tarfile' هر فایل محموله (payload) را درون یک آرشیو دبیان پردازش خواهد کرد.

  • --filter REGEX

    فایل‌های انتخاب‌شده برای استخراج abixml را به مواردی که با عبارت باقاعدهٔ مشخص‌شده همخوانی دارند محدود می‌کند. مقدار پیش‌فرض /lib.*\.so است که به عنوان یک روش تجربی برای شناسایی کتابخانه‌های اشتراکی استفاده می‌شود.

  • --submit PATH1 PATH2 ...

    با استفاده از abidw، با در نظر گرفتن فیلتر نام فایل و گزینه‌های رمزگشایی آرشیو، abixml را برای هر یک از فایل‌های مشخص‌شده (عموماً کتابخانه‌های اشتراکی) استخراج می‌کند. خروجی هر بار اجرای abidw در شاخهٔ توزیع (distrobranch) انتخاب‌شده از مخزن git مورد نظر ذخیره می‌شود. اگر هر دو گزینهٔ --submit و --check داده شوند، ابتدا عملیات‌های ثبت انجام می‌پذیرند.

  • --sysroot PREFIX مسیر پیشوندی را مشخص می‌کند که باید از نام فایل‌های ثبت‌شده حذف شود.

  • --check PATH1 PATH2 ...

    با استفاده از abidiff، هر یک از فایل‌های مشخص‌شده (عموماً فایل‌های اجرایی) را در برابر اسناد abixml نسخه‌های انتخاب‌شده برای تمام کتابخانه‌های اشتراکی مورد نیاز آن فایل اجرایی مقایسه می‌کند. این کتابخانه‌ها با برشمردن تگ‌های بخش پویای DT_NEEDED فایل اجرایی مشخص می‌شوند.

  • --ld-library-path DIR1:DIR2:DIR3...

    مسیرهای جستجوی اسناد abixml را برای مکان‌یابی هر SONAME خاص تعیین می‌کند. نخستین دایرکتوری مشخص‌شده اولویت دارد. با این حال، تمام نسخه‌های مربوط به یک SONAME در آن دایرکتوری برای مقایسه انتخاب می‌شوند. حالت پیش‌فرض نامشخص است؛ بدین معنی که بدون در نظر گرفتن دایرکتوری خاص، برای تمام ورودی‌های مطابق با SONAME در شاخهٔ توزیع جستجو می‌شود.

در صورت ثبت و/یا بررسی موفقیت‌آمیز تمام مسیرها، کد خروج 0 است.

در صورت بروز خطا، کد خروج abidb غیر صفر بوده و فهرست کوتاهی از باینری‌هایی که ثبت و/یا بررسی آن‌ها با شکست مواجه شده است چاپ می‌شود.

دستور abidb اسناد abixml را با طرح نام‌گذاری زیر در شاخهٔ توزیع (distrobranch) درون یک مخزن git ذخیره می‌کند:

1.
مسیر دایرکتوری منتهی به فایل کتابخانهٔ اشتراکی
2.
مقدار SONAME فایل کتابخانهٔ اشتراکی، به عنوان نام زیردایرکتوری
3.
فایلی به نام BUILDID.xml، که در آن BUILDID یادداشتِ هگزادسیمالِ ELF build-id کتابخانهٔ اشتراکی است.

برای نمونه:

نام فایل کتابخانهٔ اشتراکی مسیر abixml در git
/usr/lib64/libc.so.6.2.32 /usr/lib64/libc.so.6.2.33 /lib/ld-linux.so.2 /usr/lib64/libc.so.6/788cdd41a15985bf8e0a48d213a46e07d58822df.xml /usr/lib64/libc.so.6/e2ca832f1c2112aea9d7b9bc639e97e873a6b516.xml /lib/ld-linux.so.2/b65f3c15b129f33f44f504da1719926aec03c07d.xml

هدف از گنجاندن buildid در نام این است که در صورت به‌روزرسانی توزیع با نسخه‌های متعدد از یک کتابخانهٔ اشتراکی مشخص، این نسخه‌ها بتوانند در کنار یکدیگر و بدون تداخل نگهداری شوند. SONAME در جزء ماقبل آخر نام به کار رفته که این رفتار از ld.so و ldconfig الهام گرفته شده است؛ برنامه‌هایی که برای نگاشت ارجاعات از SONAME به یک فایل واقعی، به پیوندهای نمادین تکیه دارند.

Frank Ch. Eigler

2014-2025, Red Hat, Inc.

May 1, 2026