wikibackup/fa/packaging-guideline.md

209 lines
No EOL
8.1 KiB
Markdown

---
title: راهنمای بسته‌بندی برای توسعه‌دهندگان
description:
published: true
date: 2024-11-22T10:28:35.788Z
tags:
editor: markdown
dateCreated: 2024-11-22T10:28:31.070Z
---
## **راهنمای جامع بسته‌بندی در پارچ لینوکس**
### **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)** در مسیرهای مناسب قرار گیرند:
- **باینری‌ها:** `/usr/bin`
- **کتابخانه‌ها:** `/usr/lib` یا `/usr/lib64`
- **فونت‌ها:** `/usr/share/fonts/<نوع>`
- **داده‌های عمومی:** `/usr/share/<نام‌بسته>`
- **پیکربندی‌ها:** `/etc/<نام‌بسته>`
---
### **3. ساختار کلی PKGBUILD**
برای تمامی بسته‌ها، فایل PKGBUILD باید شامل این متغیرها باشد:
```bash
pkgname=<نام بسته>
pkgver=<نسخه>
pkgrel=<شماره انتشار>
pkgdesc="<توضیح مختصر بسته>"
arch=('x86_64' 'armv7h' 'aarch64') # یا هر معماری پشتیبانی‌شده
url="<آدرس پروژه>"
license=('GPL' 'MIT' 'custom')
depends=('فهرست بسته‌های وابسته')
makedepends=('فهرست ابزارهای لازم برای ساخت')
source=("آدرس سورس کد یا فایل")
sha256sums=('چک‌سام فایل‌ها')
```
---
### **4. بسته‌بندی فونت‌ها**
#### **قواعد نام‌گذاری:**
- **TrueType:** `ttf-fontname`
- **OpenType:** `otf-fontname`
- **Bitmap:** `bdf-fontname`
#### **مثال کامل برای فونت TrueType:**
بسته‌بندی فونت DejaVu:
```bash
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/"
}
```
#### **تست و فعال‌سازی فونت:**
- پس از نصب بسته، اطمینان حاصل کنید که فایل‌های فونت با دستور `fc-cache` در دسترس هستند:
```bash
post_install() {
fc-cache -f
}
```
---
### **5. بسته‌بندی برنامه‌های Wine**
#### **قواعد خاص برای Wine:**
- **نام‌گذاری:** برنامه‌های Wine باید به صورت `<نام-بسته>-wine` نام‌گذاری شوند.
- مثال: `notepad-wine`, `winrar-wine`.
- **وابستگی‌ها:**
- تمام بسته‌های Wine به `wine`, `winetricks`، و وابستگی‌های خاص خود نیاز دارند.
- **محل فایل‌ها:**
- باینری‌های قابل اجرا باید در `/opt/<نام-بسته>` قرار گیرند.
- در صورت نیاز به پیکربندی Wine، باید فایل‌های تنظیمات در `/etc/<نام-بسته>` ذخیره شوند.
#### **مثال PKGBUILD برای یک برنامه ساده در Wine:**
فرض کنیم می‌خواهید بسته **Notepad++** را در Wine بسته‌بندی کنید:
```bash
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:**
- **نام‌گذاری:** بسته‌های اندرویدی باید به صورت `<نام-برنامه>-waydroid` نام‌گذاری شوند.
- مثال: `whatsapp-waydroid`, `vlc-waydroid`.
- **فرمت APK:** فایل‌های APK به عنوان منبع بسته‌بندی استفاده می‌شوند.
- **وابستگی‌ها:** تمامی بسته‌ها به `waydroid` نیاز دارند.
#### **مثال PKGBUILD برای برنامه اندروید:**
فرض کنیم می‌خواهید برنامه WhatsApp را بسته‌بندی کنید:
```bash
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:**
برای نصب خودکار برنامه، می‌توانید اسکریپتی اضافه کنید:
```bash
post_install() {
waydroid app install /usr/share/waydroid/apps/WhatsApp-${pkgver}.apk
}
```
---
### **7. مدیریت وابستگی‌ها**
- **وابستگی‌های اجرا (depends):** بسته‌هایی که نرم‌افزار به آن‌ها نیاز دارد (مثل `wine`, `fontconfig`, `waydroid`).
- **وابستگی‌های ساخت (makedepends):** ابزارهایی که فقط برای ساخت بسته موردنیاز هستند (مثل `gcc`, `cmake`).
---
### **8. تست بسته‌ها**
1. **تست با `namcap`:**
```bash
namcap PKGBUILD
namcap <نام-بسته>.pkg.tar.zst
```
2. **تست اجرا روی Waydroid یا Wine:**
- Waydroid:
```bash
waydroid app install <نام-فایل-APK>
waydroid app launch <نام-برنامه>
```
- Wine:
```bash
wine /opt/<نام-برنامه>/<فایل-اجرایی>
```
---
### **9. ارسال بسته‌ها به مخازن**
- در گیت‌لب پارچ حساب بسازید
- بسته‌خود را با توجه به بسته‌بندی های موجود در مخزن pkgbuilds پارچ به صورت یک درخواست ادغام ارائه دهید.
- تا تأیید و تست‌های تیم پارچ صبر کنید.
- پس از تأیید توسط تیم پارچ بسته شما با توجه به نوع در یکی از مخازن ppr و pcp بارگذاری می‌شود