راهنمای جامع بسته‌بندی در پارچ لینوکس

1. مقدمه

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


2. پیش‌نیازها

ابزارهای اصلی ساخت بسته

  1. ابزارهای ضروری:

    • base-devel: شامل ابزارهایی مانند gcc, make, patch.
    • git: برای دریافت سورس‌ها از مخازن.
    • waydroid (برای تست برنامه‌های اندرویدی، در صورت نیاز).
  2. ابزارهای خاص:

    • برای Wine: نصب wine و winetricks.
    • برای Waydroid: نصب Waydroid از مخازن رسمی (یا AUR).
  3. ساختار فایل PKGBUILD:
    فایل PKGBUILD باید در بالاترین سطح شامل متغیرهای زیر باشد:

    • نام بسته (pkgname)، نسخه (pkgver)، شماره انتشار (pkgrel)، معماری (arch).
    • وابستگی‌ها (depends, makedepends)، لایسنس، توضیحات، و سورس.

آشنایی با استاندارد FHS

فایل‌ها باید طبق استاندارد Filesystem Hierarchy Standard (FHS) در مسیرهای مناسب قرار گیرند:


3. ساختار کلی PKGBUILD

برای تمامی بسته‌ها، فایل PKGBUILD باید شامل این متغیرها باشد:

pkgname=<نام بسته>
pkgver=<نسخه>
pkgrel=<شماره انتشار>
pkgdesc="<توضیح مختصر بسته>"
arch=('x86_64' 'armv7h' 'aarch64') # یا هر معماری پشتیبانی‌شده
url="<آدرس پروژه>"
license=('GPL' 'MIT' 'custom')
depends=('فهرست بسته‌های وابسته')
makedepends=('فهرست ابزارهای لازم برای ساخت')
source=("آدرس سورس کد یا فایل")
sha256sums=('چک‌سام فایل‌ها')

4. بسته‌بندی فونت‌ها

قواعد نام‌گذاری:

مثال کامل برای فونت TrueType:

بسته‌بندی فونت DejaVu:

pkgname=ttf-dejavu
pkgver=2.37
pkgrel=1
arch=('any')
pkgdesc="فونت‌های DejaVu با پشتیبانی گسترده."
license=('custom:Bitstream Vera')
source=("https://sourceforge.net/projects/dejavu/files/dejavu/${pkgver}/dejavu-fonts-ttf-${pkgver}.tar.bz2")
sha256sums=('fa9ca4efc0e2907e723aad11dc8f71c1f7b79be15f4f9b2c1214eeeaefa0f4dd')

package() {
    cd "${srcdir}/dejavu-fonts-ttf-${pkgver}"
    install -dm755 "${pkgdir}/usr/share/fonts/ttf-dejavu"
    install -m644 ttf/*.ttf "${pkgdir}/usr/share/fonts/ttf-dejavu/"
}

تست و فعال‌سازی فونت:


5. بسته‌بندی برنامه‌های Wine

قواعد خاص برای Wine:

مثال PKGBUILD برای یک برنامه ساده در Wine:

فرض کنیم می‌خواهید بسته Notepad++ را در Wine بسته‌بندی کنید:

pkgname=notepadplusplus-wine
pkgver=8.5
pkgrel=1
arch=('x86_64')
pkgdesc="ویرایشگر متن Notepad++ برای اجرا تحت Wine"
license=('GPL')
depends=('wine' 'winetricks')
source=("https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v${pkgver}/npp.${pkgver}.Installer.exe")
sha256sums=('d7e62d70d5d1dc0c4e31e9da57edb937d8a6e3c5457e405fc41d1e1dbb2b34cf')

package() {
    install -Dm755 "$srcdir/npp.${pkgver}.Installer.exe" "$pkgdir/usr/share/notepadplusplus/installer.exe"
    echo '#!/bin/bash' > "$pkgdir/usr/bin/notepadplusplus"
    echo 'wine /usr/share/notepadplusplus/installer.exe' >> "$pkgdir/usr/bin/notepadplusplus"
    chmod +x "$pkgdir/usr/bin/notepadplusplus"
}

6. بسته‌بندی برنامه‌های اندروید برای Waydroid

قواعد خاص برای Waydroid:

مثال PKGBUILD برای برنامه اندروید:

فرض کنیم می‌خواهید برنامه WhatsApp را بسته‌بندی کنید:

pkgname=whatsapp-waydroid
pkgver=2.23.12.76
pkgrel=1
arch=('any')
pkgdesc="WhatsApp Messenger برای اجرا تحت Waydroid"
license=('custom')
depends=('waydroid')
source=("https://www.whatsapp.com/android/current/WhatsApp-${pkgver}.apk")
sha256sums=('4a5d8a6f2c54b6f6fa7e652ff8a5eb37c68a1299f65863b0af8b5d3ef4e3c91b')

package() {
    install -Dm644 "$srcdir/WhatsApp-${pkgver}.apk" "$pkgdir/usr/share/waydroid/apps/WhatsApp-${pkgver}.apk"
}

نصب و اجرای APK در Waydroid:

برای نصب خودکار برنامه، می‌توانید اسکریپتی اضافه کنید:

post_install() {
    waydroid app install /usr/share/waydroid/apps/WhatsApp-${pkgver}.apk
}

7. مدیریت وابستگی‌ها


8. تست بسته‌ها

  1. تست با namcap:

    namcap PKGBUILD
    namcap <نام-بسته>.pkg.tar.zst
    
  2. تست اجرا روی Waydroid یا Wine:

    • Waydroid:
      waydroid app install <نام-فایل-APK>
      waydroid app launch <نام-برنامه>
      
    • Wine:
      wine /opt/<نام-برنامه>/<فایل-اجرایی>
      

9. ارسال بسته‌ها به مخازن