| ARCHINSTALL(1) | python-archinstall | ARCHINSTALL(1) |
نام (NAME)
archinstall - نصاب متنی هدایتشده و کتابخانه پایتون برای آرچ لینوکس
archinstall یک کتابخانه است که میتواند برای نصب آرچ لینوکس مورد استفاده قرار گیرد. این کتابخانه همراه با نصابهای از پیش پیکربندیشده گوناگون ارائه میشود، مانند نصاب پیشفرض نصب هدایتشده <#guided>.
برخی از ویژگیهای Archinstall عبارتند از:
- سازگار با زمینه (Context friendly): این کتابخانه فراخوانیها را همواره به ترتیب متوالی اجرا میکند تا اطمینان حاصل شود مراحل نصب با یکدیگر تداخل ندارند یا با ترتیب اشتباه اجرا نمیشوند. این کتابخانه همچنین از بستهبندهای زمینهای (context wrappers) برای اطمینان از پاکسازی و فراخوانی وظایف نهایی مانند mkinitcpio در زمان نیاز پشتیبانی (و استفاده) میکند.
- شفافیت کامل: گزارشها و جزئیات عملکردی را میتوان در مسیر /var/log/archinstall هم در ایزوی زنده (Live ISO) و هم تا حدودی در سیستم نصبشده یافت.
- سازگار با قابلیتهای دسترسی: به لطف استفاده از رابط کاربری متنی (TUI)، نرمافزار Archinstall با espeakup و سایر ابزارهای دسترسیپذیری کار میکند.
نصب هدایتشده (GUIDED INSTALLATION)
نرمافزار Archinstall همراه با یک نصاب هدایتشده از پیش برنامهریزیشده https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py عرضه میشود که شما را در مراحل اجباری و همچنین برخی پیکربندیهای اختیاری ممکن راهنمایی میکند.
نکته:
نکته:
هشدار:
اجرای نصب هدایتشده (Running the guided installation)
برای شروع نصاب، دستور زیر را در جدیدترین ISO آرچ لینوکس اجرا کنید:
archinstall
از آنجا که نصاب هدایتشده https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py اسکریپت پیشفرض است، اجرای این دستور معادل اجرای archinstall guided میباشد.
نصب هدایتشده همچنین از نصب با پاسخهای از پیش پیکربندیشده برای تمام مراحل هدایتشده پشتیبانی میکند. این روش میتواند شیوهای سریع و راحت برای اجرای دوباره یک یا چند نصب باشد.
دو فایل پیکربندی وجود دارد که استفاده از هر دوی آنها اختیاری است.
--config
این پارامتر یک فایل محلی .json را به عنوان آرگومان میپذیرد و شامل پیکربندی کلی و پاسخهای منوها برای نصاب هدایتشده است.
--config-url
این پارامتر یک فایل راه دور .json را به عنوان آرگومان میپذیرد و شامل پیکربندی کلی و پاسخهای منوها برای نصاب هدایتشده است.
نکته:
نمونههای کاربردی (Example usage)
archinstall --config config.json
archinstall --config-url https://domain.lan/config.json
محتویات فایل https://domain.lan/config.json:
{
"additional-repositories": [],
"archinstall-language": "English",
"audio_config": null,
"bootloader_config": {
"bootloader": "Systemd-boot",
"uki": false,
"removable": false
},
"bootloader": "Systemd-boot",
"debug": false,
"disk_config": {
"config_type": "manual_partitioning",
"device_modifications": [
{
"device": "/dev/sda",
"partitions": [
{
"btrfs": [],
"flags": [
"boot"
],
"fs_type": "fat32",
"length": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 99982592
},
"mount_options": [],
"mountpoint": "/boot",
"obj_id": "369f31a8-2781-4d6b-96e7-75680552b7c9",
"start": {
"sector_size": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 512
},
"total_size": null,
"unit": "sectors",
"value": 34
},
"status": "create",
"type": "primary"
},
{
"btrfs": [],
"flags": [],
"fs_type": "fat32",
"length": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 100000000
},
"mount_options": [],
"mountpoint": "/efi",
"obj_id": "13cf2c96-8b0f-4ade-abaa-c530be589aad",
"start": {
"sector_size": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 512
},
"total_size": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 16106127360
},
"unit": "MB",
"value": 100
},
"status": "create",
"type": "primary"
},
{
"btrfs": [],
"flags": [],
"fs_type": "ext4",
"length": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 15805127360
},
"mount_options": [],
"mountpoint": "/",
"obj_id": "3e75d045-21a4-429d-897e-8ec19a006e8b",
"start": {
"sector_size": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 512
},
"total_size": {
"sector_size": null,
"total_size": null,
"unit": "B",
"value": 16106127360
},
"unit": "MB",
"value": 301
},
"status": "create",
"type": "primary"
}
],
"wipe": false
}
]
},
"disk_encryption": {
"encryption_type": "luks",
"partitions": [
"3e75d045-21a4-429d-897e-8ec19a006e8b"
]
},
"hostname": "archlinux",
"kernels": [
"linux"
],
"locale_config": {
"kb_layout": "us",
"sys_enc": "UTF-8",
"sys_lang": "en_US"
},
"mirror_config": {
"custom_servers": [
{
"url": "https://mymirror.com/$repo/os/$arch"
}
],
"mirror_regions": {
"Australia": [
"http://archlinux.mirror.digitalpacific.com.au/$repo/os/$arch"
]
},
"optional_repositories": [
"testing"
],
"custom_repositories": [
{
"name": "myrepo",
"url": "https://myrepo.com/$repo/os/$arch",
"sign_check": "Required",
"sign_option": "TrustAll"
}
]
},
"network_config": {},
"no_pkg_lookups": false,
"ntp": true,
"offline": false,
"packages": [],
"parallel downloads": 0,
"profile_config": null,
"save_config": null,
"script": "guided",
"silent": false,
"swap": true,
"timezone": "UTC",
"version": "2.6.0"
}
گزینههای --config
هشدار:
نکته:
گزینههای JSON
| کلید | مقدار(ها) | توضیحات | الزامی |
| additional-repositories | [ multilib https://wiki.archlinux.org/title/Official_repositories#multilib, testing https://wiki.archlinux.org/title/Official_repositories#Testing_repositories ] | فعالسازی یک یا چند مورد از مخازن testing و multilib پیش از ادامه فرآیند نصب | خیر |
| archinstall-language | lang https://github.com/archlinux/archinstall/blob/master/archinstall/locales/languages.json | زبان مورد استفاده در رابط کاربری متنی (TUI) را تنظیم میکند (اطمینان حاصل کنید که از مقدار ``lang`` استفاده کنید نه ``abbr``) | خیر |
| audio_config | pipewire https://wiki.archlinux.org/title/PipeWire, pulseaudio https://wiki.archlinux.org/title/PulseAudio | سرور صوتی که باید نصب شود | خیر |
| bootloader_config | { bootloader: Systemd-boot https://wiki.archlinux.org/title/Systemd-boot, grub https://wiki.archlinux.org/title/GRUB, limine https://wiki.archlinux.org/title/Limine, uki: true/false, removable: true/false } | پیکربندی لودر بوت (بوتلودر). گزینه bootloader مشخص میکند کدام بوتلودر نصب شود (استفاده از grub/limine در حالت BIOS اجباری است). گزینه uki تصاویر یکپارچه هسته (unified kernel images) را فعال میکند (فقط UEFI، فقط systemd-boot/limine). گزینه removable به جای NVRAM، در مسیر پیشفرض رسانههای جداشدنی /EFI/BOOT/ نصب را انجام میدهد (فقط UEFI، فقط grub/limine) | بله |
| debug | true, false | فعالسازی خروجی اشکالزدایی (دیباگ) | خیر |
| disk_config | اطلاعات بیشتر در بخش پیکربندی دیسک <#disk-config> | شامل پیکربندی دیسک مورد نظر برای استفاده در طول نصب است | خیر |
| disk_encryption | اطلاعات بیشتر در بخش رمزنگاری دیسک <#disk-encryption> | پارامترهای رمزنگاری دیسک که علاوه بر disk_config اعمال میشوند | خیر |
| hostname | str | رشتهای که نام میزبان (hostname) دستگاه شما را در شبکه تعیین میکند (پیشفرض ``archinstall`` است) | خیر |
| kernels | [ linux https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels, linux-hardened https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels, linux-lts https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels, linux-rt https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels, linux-rt-lts https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels, linux-zen https://wiki.archlinux.org/title/Kernel#Officially_supported_kernels ] | تعیین میکند کدام هستهها باید نصب شده و در گزینههای بوتلودر پیکربندی شوند | بله |
| custom_commands | اطلاعات بیشتر در بخش دستورات سفارشی <#custom-commands> | دستورات سفارشی که پس از نصب بهصورت chroot در داخل سیستم نصبشده اجرا خواهند شد | خیر |
| locale_config | {kb_layout: lang https://wiki.archlinux.org/title/Linux_console/Keyboard_configuration, sys_enc: Character encoding https://wiki.archlinux.org/title/Locale, sys_lang: locale https://wiki.archlinux.org/title/Locale} | چیدمان کلیدهای صفحهکلید، کدگذاری سیستم و لوکال سیستم را مشخص میکند | خیر |
| mirror_config | {custom_mirrors: [ <https://>... ], mirror_regions: { "Worldwide": [ "https://geo.mirror.pkgbuild.com/$repo/os/$arch" ] } } | مخازن آینهای (میرورها) گوناگون را تنظیم میکند (در صورت عدم تعیین، به صورت پیشفرض از ``/etc/pacman.d/mirrors`` در ISO استفاده میشود) | خیر |
| network_config | `مشاهده گزینهها در بخش پیکربندی شبکه` | مشخص میکند که چه نوع پیکربندی شبکهای (در صورت وجود) باید استفاده شود | خیر |
| no_pkg_lookups | true, false | غیرفعال کردن بررسی بستهها در https://archlinux.org/packages | خیر |
| ntp | true, false | پروتکل زمان شبکه NTP https://wiki.archlinux.org/title/Network_Time_Protocol_daemon را در طول نصب فعال یا غیرفعال میکند | خیر |
| offline | true, false | بررسیهای آنلاین خاص مانند در دسترس بودن مخازن آینهای و غیره را فعال یا غیرفعال میکند | خیر |
| packages | [ <package1>, <package2>, ... ] | فهرستی از بستهها برای نصب در طول فرآیند نصب | خیر |
| parallel downloads | 0-∞ | تعداد دانلودهای موازی مورد استفاده توسط pacman https://wiki.archlinux.org/title/Pacman#Enabling_parallel_downloads را تعیین میکند | خیر |
| profile_config | `اطلاعات بیشتر در بخش پروفایلها` | در صورت تعریف، پروفایل مشخصشده را نصب میکند | خیر |
| script | guided https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py (پیشفرض), minimal https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/minimal.py, only_hdd https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/only_hdd.py | هنگامی که برای اجرای خودکار نصب استفاده میشود، مشخص میکند که با کدام اسکریپت اجرای خودکار انجام شود | خیر |
| silent | true, false | پرسشهای کاربری با استفاده از رابط متنی (TUI) را غیرفعال یا فعال میکند | خیر |
| swap | true, false | فضای تعویض (swap) را فعال یا غیرفعال میکند | خیر |
| timezone | timezone https://wiki.archlinux.org/title/System_time#Time_zone | منطقه زمانی را برای سیستم نصبشده تنظیم میکند | خیر |
نکته:
گزینههای مربوط به --creds
فایل creds یک فایل پیکربندی جداگانه است تا گزینههای عادی را از دادههای حساستر مانند گذرواژهها تفکیک کند. در زیر نمونهای از نحوه تنظیم گذرواژه ریشه آورده شده و در ادامه، توضیحات سایر مقادیر قابل تنظیم آمده است.
{
"root_enc_password" : "SecretSanta2022"
}
گزینههای --creds
| کلید | مقادیر | توضیحات | الزامی |
| !encryption-password | str | گذرواژه برای رمزنگاری دیسک؛ اگر گذرواژه ارائه نشود دیسک رمزنگاری نخواهد شد | خیر |
| root_enc_password | str | گذرواژه حساب کاربری ریشه (root) | خیر |
| users | 0.0 3.5 { "username": "<USERNAME>", "enc_password": "<PASSWORD_HASH>", "sudo": false } 168u 168u | فهرست اطلاعات اعتباری کاربران عادی؛ برای راهنمایی به بخش پیکربندی مراجعه کنید | مشروط |
نکته:
مسائل و مشکلات شناختهشده (KNOWN ISSUES)
برخی مسائل خارج از حوزه پروژه archinstall https://github.com/archlinux/archinstall هستند و مواردی که ما از آنها مطلع هستیم در زیر فهرست شدهاند.
https://github.com/archlinux/archinstall/issues/2144'>انتظار برای همگامسازی زمان (Waiting for time sync) #2144 https://github.com/archlinux/archinstall/issues/2144
علت ریشهای معمول این مشکل، توپولوژی شبکه است. بهطور خاص، timedatectl show https://github.com/archlinux/archinstall/blob/e6344f93f7e476d05bbcd642f2ed91fdde545870/archinstall/lib/installer.py#L136 نمیتواند یک همگامسازی صحیح زمان را در برابر سرورهای پیشفرض انجام دهد.
راهاندازی مجدد systemd-timesyncd.service ممکن است کارساز باشد، اما در بیشتر مواقع لازم است فایل /etc/systemd/timesyncd.conf را متناسب با ساختار شبکه خود پیکربندی کنید.
نکته:
https://github.com/archlinux/archinstall/issues/2679'>انتظار برای اتمام همگامسازی جاکلیدی آرچ لینوکس (archlinux-keyring-wkd-sync) #2679 https://github.com/archlinux/archinstall/issues/2679
سرویس archlinux-keyring-wkd-sync.service یا تایمر archlinux-keyring-wkd-sync.timer ممکن است گاهی اوقات "برای همیشه" معلق بماند (هنگ کند). این وضعیت معمولاً به دلیل عدم امکان دسترسی به سرورهای کلید یا کندی اتصال به آنها رخ میدهد.
اسکریپت /usr/bin/archlinux-keyring-wkd-sync را میتوان به صورت دستی اجرا کرد تا مشخص شود آیا به کندی اجرا میشود یا خیر.
اگر دستور systemctl show --property=ActiveEnterTimestamp --no-pager archlinux-keyring-wkd-sync.timer چیزی نشان ندهد، به این معنی است که همگامسازی داخلی هرگز به پایان نرسیده است. به همین ترتیب، دستور systemctl show --no-pager -p SubState --value archlinux-keyring-wkd-sync.service به احتمال زیاد مقدار dead را نشان میدهد که یعنی سرویس هرگز تکمیل نشده است.
برای رفع این مشکل، موارد زیر را امتحان کنید:
# killall gpg-agent # rm -rf /etc/pacman.d/gnupg # pacman-key --init # pacman-key --populate # pacman -Sy archlinux-keyring # systemctl restart archlinux-keyring-wkd-sync.timer
نکته:
اگر از همگامسازی WKD صرفنظر کنید، ممکن است با خطای زیر مواجه شوید:
> error: archinstall: signature from "Anton Hvornum (Torxed) <torxed@archlinux.org>" is unknown trust > :: File /var/cache/pacman/pkg/archinstall-1.2.3-4-x86_64.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)). > Do you want to delete it? [Y/n]
https://github.com/archlinux/archinstall/issues/2002'>نبود درایور اختصاصی انویدیا (Missing Nvidia Proprietary Driver) #2002 https://github.com/archlinux/archinstall/issues/2002
در برخی موارد، ممکن است درایور nvidia تمام بستههای لازم را به صورت نصبشده نداشته باشد. این موضوع به دلیل انتخاب هسته (کرنل) و/یا تنظیمات سختافزاری است که برای عملکرد صحیح نیاز به بستههای اضافی دارند.
یک راهکار معمول، نصب بسته linux-headers https://archlinux.org/packages/core/x86_64/linux-headers و nvidia-dkms https://archlinux.org/packages/extra/x86_64/nvidia-dkms است.
https://github.com/archlinux/archinstall/issues/1686،_#2185_https://github.com/archlinux/archinstall/issues/2185'>خطای پردازندههای ARM، ۳۲ بیتی و سایر انواع پردازنده #1686 https://github.com/archlinux/archinstall/issues/1686، #2185 https://github.com/archlinux/archinstall/issues/2185
این یک مسئله شناختهشده تا حدی فراگیر و کلی است. بهطور رسمی تنها معماری x86_64 <https://wiki.archlinux.org/title/Frequently_asked_questions#What_architectures_does_Arch_support?> توسط آرچ لینوکس پشتیبانی میشود. از این رو، تلاش چندانی برای پشتیبانی از سایر پلتفرمها صورت نگرفته است.
از نظر تئوری، سایر معماریها باید کار کنند اما ممکن است اشکالات و رفتارهای پیشبینینشدهای رخ دهند.
درخواستهای ادغام (PR) مورد استقبال قرار میگیرند، اما لطفاً تأخیر در ادغام آنها را پذیرا باشید. سایر اصلاحات، مسائل یا ویژگیها به دلایل فوق در اولویت قرار خواهند گرفت.
https://github.com/archlinux/archinstall/issues/2213'>قدیمی بودن جاکلیدی (Keyring is out of date) #2213 https://github.com/archlinux/archinstall/issues/2213
مشکلات مربوط به کلیدهای مفقود معمولاً به دلیل قدیمی بودن بسته archlinux-keyring https://archlinux.org/packages/core/any/archlinux-keyring است که اغلب در نتیجه یک ISO قدیمی رخ میدهد. تلاشی از سوی پروژه بالادست برای رفع این مشکل صورت گرفته است که همان سرویس archlinux-keyring-wkd-sync.service https://gitlab.archlinux.org/archlinux/archlinux-keyring/-/blob/7e672dad10652a80d1cc575d75cdb46442cd7f96/wkd_sync/archlinux-keyring-wkd-sync.service.in میباشد.
این سرویس تقریباً بلافاصله در حین بوت شروع به کار میکند و اگر شبکه به موقع پیکربندی نشود — سرویس با شکست مواجه میشود. متعاقباً، با وجود فعال بودن سرویس بهروزرسانی برای این کار، ممکن است اجرای archinstall با یک جاکلیدی قدیمی انجام شود.
در عمل هیچ راه پایدار و قابل اعتمادی در طول زمان برای رفع این مشکل در درون archinstall وجود ندارد. در عوض، تلاشها برای بهبود سرویس بالادست و/یا عدم انقضای کلیدها در تعداد معقولی از نسخههای ISO باید به عنوان راهکار اصلی مد نظر قرار گیرد.
نکته:
نکته:
بستههای مخزن کاربری آرچ (AUR packages)
این نیز یک موضوع کلی و فراگیر است. مخزن AUR پشتیبانی نمیشود https://wiki.archlinux.org/title/Arch_User_Repository#Updating_packages و تا زمانی که این وضعیت تغییر نکند، نمیتوانیم از بستههای AUR برای حل درخواستهای قابلیت در archinstall استفاده کنیم.
این بدان معناست که امکان افزودن درخواستهای قابلیتی مانند پشتیبانی از سیستمهای پرونده نظیر ZFS https://aur.archlinux.org/packages/zfs-linux وجود ندارد و مشکلات نیز با استفاده از بستههای AUR قابل حل نیستند.
نکته:
پروژه torxed/archinstall-aur https://github.com/torxed/archinstall-aur یک پیادهسازی مرجع برای پلاگینها است:
# archinstall --plugin https://archlinux.life/aur-plugin
پروژه phisch/archinstall-aur https://github.com/phisch/archinstall-aur یک جایگزین دیگر است:
# archinstall --plugin https://raw.githubusercontent.com/phisch/archinstall-aur/master/archinstall-aur.py
هشدار:
گزارش مشکلات و باگها (REPORT ISSUES & BUGS)
مشکلات و باگها باید در نشانی https://github.com/archlinux/archinstall/issues گزارش شوند.
سوالات عمومی، پیشنهادات بهبود و مسائل امنیتی را نیز میتوان در آنجا گزارش کرد. برای مشکلات فوری یا در صورت نیاز به راهنمایی، به سرور دیسکورد که دارای کانال راهنمایی است مراجعه کنید.
فایلهای گزارش (Log files)
هنگام ارسال تیکت راهنمایی، لطفاً فایل /var/log/archinstall/install.log را ضمیمه کنید. این فایل هم در محیط زنده (Live ISO) و هم در سیستم پرونده نصبشده (در صورتی که بستههای پایه نصب شده باشند) قابل دسترسی است.
نکته کاربردی:
یک روش آسان برای ارسال گزارشها استفاده از دستور archinstall share-log است که فایل install.log را در paste.rs آپلود کرده و یک پیوند قابل اشتراکگذاری چاپ میکند. هنگام ارسال سایر فایلهای گزارش احتیاط کنید، اما archinstall تضمین میکند که install.log برای انتشار عمومی ایمن باشد!
فایلهای گزارش دیگری در مسیر /var/log/archinstall/ وجود دارند که میتوانند مفید باشند:
- /var/log/archinstall/user_configuration.json - اکثر پاسخهای راهنماییشده در نصاب را ذخیره میکند
- /var/log/archinstall/user_credentials.json - هرگونه نام کاربری یا گذرواژه را ذخیره میکند و میتواند به --creds ارسال شود
- /var/log/archinstall/user_disk_layouts.json - دیسکهای انتخابشده و چیدمان آنها را ذخیره میکند
- /var/log/archinstall/install.log - فایل گزارش از مراحلی که توسط archinstall پیموده شده است
- /var/log/archinstall/cmd_history.txt - تاریخچه کامل دستورات اجراشده به ترتیب
- /var/log/archinstall/cmd_output.txt - خروجی خام تمام دستوراتی که توسط archinstall اجرا شدهاند
هشدار:
دیسکورد (DISCORD)
یک کانال دیسکورد وجود دارد که برخی از مشارکتکنندگان در آن حضور دارند https://github.com/archlinux/archinstall/graphs/contributors.
برای پیوستن به سرور، به پیوند https://discord.gg/aDeMffrxNg بروید و ملحق شوید. قوانین چندانی به جز عقل سلیم و احترام به دیگران وجود ندارد. بخش گفتگوی عمومی برای مباحث متفرقه (off-topic) نیز در دسترس است.
نقش @Party Animals در صورتی که مایل به دریافت اعلانهای انتشار نسخههای جدید هستید در دسترس است که در کانال #Release Party ارسال میشود. همچنین نقش @Contributors میتواند توسط مشارکتکنندگان با نوشتن !verify و دنبال کردن مراحل تأیید هویت فعال شود.
ملحق شوید، امیدواریم شما را آنجا ببینیم! : )
کتابخانه پایتون (PYTHON LIBRARY)
کتابخانه archinstall در PyPi https://pypi.org با نام بسته archinstall https://pypi.org/project/archinstall عرضه میشود. اما این کتابخانه را میتوان به صورت دستی نیز نصب کرد.
هشدار:
نصب با pacman (Installing with pacman)
بسته Archinstall در مخازن رسمی https://wiki.archlinux.org/index.php/Official_repositories موجود است. و همچنین archinstall را به عنوان یک کتابخانه پایتون نصب خواهد کرد.
برای نصب همزمان کتابخانه و اسکریپت archinstall:
pacman -S archinstall
همچنین میتوانید با استفاده از بسته python-archinstall تنها کتابخانه را بدون فایل اجرایی کمکی نصب کنید.
نصب از PyPI (Installing from PyPI)
مفهوم پایه PyPI با استفاده از pip اعمال میشود.
pip install archinstall
نصب با استفاده از کد منبع (Install using source code)
همچنین میتوانید برنامه را با استفاده از کد منبع نصب کنید. برای سادگی در این مثال از git clone استفاده میکنیم.
git clone https://github.com/archlinux/archinstall
میتوانید پوشه را به درون پروژه خود منتقل کرده و به سادگی دستور زیر را اجرا کنید:
import archinstall
یا میتوانید از ابزارهای build https://github.com/pypa/build و installer https://github.com/pypa/installer مربوط به PyPA برای نصب آن در مسیر ماژولهای پایتون استفاده کنید.
$ cd archinstall $ python -m build . $ python -m installer dist/*.whl
ماژول پایتون (PYTHON MODULE)
برنامه archinstall از اجرا در حالت ماژول https://docs.python.org/3/library/__main__.html پشتیبانی میکند. روش فراخوانی کتابخانه در حالت ماژول به اجرای اسکریپتهای موجود در پوشه scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts محدود است.
بنابراین مهم است که پیش از ساخت و نصب، هر اسکریپت یا نمایهای را که مایل به فراخوانی آن هستید در پوشه examples قرار دهید.
پیشنیازها (Pre-requisites)
فرض میکنیم که روش «نصب با استفاده از کد منبع» <#installing-python-manual> را دنبال کردهاید. پیش از نصب واقعی کتابخانه، لازم است اسکریپتهای نصب سفارشی خود را به صورت یک فایل پایتون در پوشه scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts قرار دهید.
توضیحات بیشتر در مورد نحوه ساخت این اسکریپتها در بخش بعدی آمده است.
هشدار:
ایجاد یک اسکریپت (Creating a script)
بیایید به عنوان مثال یک نصاب test_installer ایجاد کنیم. با این فرض که پوشه ./archinstall یک کلون گیت از مخزن اصلی است. کار را با ایجاد "scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts/test_installer.py" آغاز میکنیم. جایگذاری این فایل بعداً حائز اهمیت خواهد بود.
این اسکریپت اکنون پس از نصب موفقیتآمیز خود کتابخانه، میتواند با استفاده از python -m archinstall --script test_installer فراخوانی شود. اما این اسکریپت کار زیادی انجام نخواهد داد. بنابراین به عنوان نمونه کار سادهای مانند فهرست کردن تمام دیسکهای سخت را انجام میدهیم.
برای این کار، با وارد کردن archinstall در "scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts/test_installer.py" شروع کرده و تابعی را درون archinstall فراخوانی میکنیم.
from archinstall.lib.disk.device_handler import device_handler from pprint import pprint pprint(device_handler.devices)
اکنون به روش «نصب با استفاده از کد منبع» <#installing-python-manual> مراجعه فرمایید. پس از اجرای python -m archinstall test_installer باید خروجیای مشابه زیر چاپ شود:
[
BDevice(
disk=<parted.disk.Disk object at 0x7fbe17156050>,
device_info=_DeviceInfo(
model='PC801 NVMe SK hynix 512GB',
path=PosixPath('/dev/nvme0n1'),
type='nvme',
total_size=Size(value=512110190592, unit=<Unit.B: 1>,
sector_size=SectorSize(value=512, unit=<Unit.B: 1>)),
free_space_regions=[
<archinstall.lib.disk.device.DeviceGeometry object at 0x7fbe166c4250>,
<archinstall.lib.disk.device.DeviceGeometry object at 0x7fbe166c4c50>,
<archinstall.lib.disk.device.DeviceGeometry object at 0x7fbe166c4a10>],
sector_size=SectorSize(value=512, unit=<Unit.B: 1>),
read_only=False,
dirty=False
),
partition_infos=[
_PartitionInfo(
partition=<parted.partition.Partition object at 0x7fbe166c4a90>,
name='primary',
type=<PartitionType.PRIMARY: 'primary'>,
fs_type=<FilesystemType.FAT32: 'fat32'>,
path='/dev/nvme0n1p1',
start=Size(value=2048, unit=<Unit.sectors: 'sectors'>, sector_size=SectorSize(value=512, unit=<Unit.B: 1>)),
length=Size(value=535822336, unit=<Unit.B: 1>, sector_size=SectorSize(value=512, unit=<Unit.B: 1>)),
flags=[
<PartitionFlag.BOOT: flag_id=1, alias=None>,
<PartitionFlag.ESP: flag_id=18, alias=None>
],
partn=1,
partuuid='a26be943-c193-41f4-9930-9341cf5f6b19',
uuid='6EE9-2C00',
disk=<parted.disk.Disk object at 0x7fbe17156050>,
mountpoints=[
PosixPath('/boot')
],
btrfs_subvol_infos=[]
),
_PartitionInfo(...)
]
)
]
این بدان معناست که اسکریپت شما در مکان درستی قرار دارد و archinstall مطابق انتظار عمل میکند.
نکته:
افزونههای پایتون (PYTHON PLUGINS)
برنامه archinstall از طریق دو روش از افزونهها پشتیبانی میکند.
روش نخست مستقیماً از طریق پارامتر --plugin هنگام اجرا به عنوان یک ابزار خط فرمان (CLI) است. این کار یک افزونه مشخص را به صورت محلی یا از راه دور از طریق یک مسیر بارگذاری میکند.
روش دوم از طریق سازوکار داخلی کشف افزونه در پایتون https://packaging.python.org/en/latest/specifications/entry-points با استفاده از نقاط ورود (entry points) https://docs.python.org/3/library/importlib.metadata.html#entry-points دستهبندی شده به عنوان archinstall.plugin است.
پارامتر --plugin
این پارامتر این مزیت را دارد که در وضعیت --conf ذخیره میشود؛ به این معنا که هنگام اجرای مجدد یک فرآیند نصب، افزونه به طور خودکار بارگذاری خواهد شد. محدودیت آن این است که نیازمند مشخص بودن و وارد کردن یک مسیر اولیه است که میتواند کمی دشوار باشد.
شناسایی افزونه (Plugin Discovery)
این روش امکان بارگذاری چندین افزونه را فراهم میکند، با این محدودیت که افزونهها باید از قبل بر روی سیستمی که archinstall را اجرا میکند نصب شده باشند. این روش عمدتاً کسانی را هدف قرار میدهد که ایمیجهای ISO اختصاصی خود را میسازند و پیکربندیهای خاصی را برای نیازهای خود بستهبندی میکنند.
چه مواردی پشتیبانی میشوند؟ (What's supported?)
در حال حاضر مستندات مربوط به این بخش محدود است. تا زمانی که این موضوع برطرف شود، بهترین راه برای یافتن ویژگیهای پشتیبانیشده جستجوی عبارات plugin.on_ در کد منبع <https://github.com/search?q=repo%3Aarchlinux%2Farchinstall+%22plugin.on_%22&type=code> است؛ چرا که این کار تصویر روشنی از فراخوانیهای انجامشده به افزونهها ارائه میدهد.
چگونه کار میکند؟ (How does it work?)
افزونههای archinstall از رویکرد مبتنی بر کشف (discovery-driven) استفاده میکنند که در آن توابع خاصی از افزونهها استعلام میشوند. به عنوان مثال، اگر یک افزونه تابع زیر را داشته باشد:
def on_pacstrap(*packages):
...
تابع archinstall.Pacman().strap(["some packages"]) به صورت ثابت روی افزونهها پیمایش کرده و به دنبال on_pacstrap در افزونه میگردد. اگر تابع موجود باشد، .strap() تابع افزونه را فراخوانی کرده و لیست اولیه بستهها را با نتیجه دریافتی از افزونه جایگزین میکند.
بهترین شیوه برای مستندسازی این فراخوانیها در حال حاضر مشخص نیست، زیرا مستندسازی پویای این رفتار دشوار است.
نوشتن افزونه خودتان؟ (Writing your own?)
سادهترین راه در حال حاضر بررسی پیادهسازیهای مرجع یا نمونههای جامعه کاربری است. دو مورد از آنها عبارتاند از:
- torxed/archinstall-aur https://github.com/torxed/archinstall-aur
- phisch/archinstall-aur https://github.com/phisch/archinstall-aur
همچنین میتوانید به جستجوی plugin.on_ در مخزن کد <https://github.com/search?q=repo%3Aarchlinux%2Farchinstall+%22plugin.on_%22&type=code> بپردازید تا ببینید archinstall به دنبال چه چیزهایی میگردد. از درخواستهای ادغام (PR) برای گسترش این پشتیبانی استقبال میشود.
نصاب ARCHINSTALL (ARCHINSTALL.INSTALLER)
نصاب (installer) کلاس اصلی برای دسترسی به یک نمونه از فرآیند نصب (installation-instance) است. میتوانید به این کلاس به عنوان فرآیند نصبی که انجام دادهاید یا انجام خواهید داد نگاه کنید.
هر آنچه مربوط به درون فرآیند نصب باشد، در این کلاس یافت میشود.
نویسنده (Author)
Anton Hvornum
کپیرایت (Copyright)
2022, Anton Hvornum
| June 28, 2026 |