ARCHINSTALL(1) python-archinstall ARCHINSTALL(1)

archinstall - نصاب متنی هدایت‌شده و کتابخانه پایتون برای آرچ لینوکس

archinstall یک کتابخانه است که می‌تواند برای نصب آرچ لینوکس مورد استفاده قرار گیرد. این کتابخانه همراه با نصاب‌های از پیش پیکربندی‌شده گوناگون ارائه می‌شود، مانند نصاب پیش‌فرض نصب هدایت‌شده <#guided>.

برخی از ویژگی‌های Archinstall عبارتند از:

  • سازگار با زمینه (Context friendly): این کتابخانه فراخوانی‌ها را همواره به ترتیب متوالی اجرا می‌کند تا اطمینان حاصل شود مراحل نصب با یکدیگر تداخل ندارند یا با ترتیب اشتباه اجرا نمی‌شوند. این کتابخانه همچنین از بسته‌بندهای زمینه‌ای (context wrappers) برای اطمینان از پاک‌سازی و فراخوانی وظایف نهایی مانند mkinitcpio در زمان نیاز پشتیبانی (و استفاده) می‌کند.
  • شفافیت کامل: گزارش‌ها و جزئیات عملکردی را می‌توان در مسیر /var/log/archinstall هم در ایزوی زنده (Live ISO) و هم تا حدودی در سیستم نصب‌شده یافت.
  • سازگار با قابلیت‌های دسترسی: به لطف استفاده از رابط کاربری متنی (TUI)، نرم‌افزار Archinstall با espeakup و سایر ابزارهای دسترسی‌پذیری کار می‌کند.

نرم‌افزار Archinstall همراه با یک نصاب هدایت‌شده از پیش برنامه‌ریزی‌شده https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py عرضه می‌شود که شما را در مراحل اجباری و همچنین برخی پیکربندی‌های اختیاری ممکن راهنمایی می‌کند.

نکته:

سایر اسکریپت‌های از پیش برنامه‌ریزی‌شده را می‌توان با اجرای archinstall --script <script> (بدون .py) فراخوانی کرد. برای مشاهده فهرست کامل اسکریپت‌ها، دستور archinstall --script list را اجرا کنید یا دایرکتوری اسکریپت‌های سورس‌کد https://github.com/archlinux/archinstall/tree/master/archinstall/scripts را بررسی نمایید.

نکته:

توصیه می‌شود archinstall را از روی ایمیج رسمی ISO آرچ لینوکس اجرا کنید.

هشدار:

نصاب پیش از شروع فرآیند نصب، وای‌فای (WiFi) را پیکربندی نخواهد کرد. لازم است پیش از ادامه، راهنمای پیکربندی شبکه در آرچ لینوکس https://wiki.archlinux.org/index.php/Network_configuration را مطالعه کنید.

برای شروع نصاب، دستور زیر را در جدیدترین ISO آرچ لینوکس اجرا کنید:

archinstall

از آنجا که نصاب هدایت‌شده https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py اسکریپت پیش‌فرض است، اجرای این دستور معادل اجرای archinstall guided می‌باشد.

نصب هدایت‌شده همچنین از نصب با پاسخ‌های از پیش پیکربندی‌شده برای تمام مراحل هدایت‌شده پشتیبانی می‌کند. این روش می‌تواند شیوه‌ای سریع و راحت برای اجرای دوباره یک یا چند نصب باشد.

دو فایل پیکربندی وجود دارد که استفاده از هر دوی آن‌ها اختیاری است.

این پارامتر یک فایل محلی .json را به عنوان آرگومان می‌پذیرد و شامل پیکربندی کلی و پاسخ‌های منوها برای نصاب هدایت‌شده است.

این پارامتر یک فایل راه دور .json را به عنوان آرگومان می‌پذیرد و شامل پیکربندی کلی و پاسخ‌های منوها برای نصاب هدایت‌شده است.

نکته:

همواره می‌توانید با دستور archinstall --dry-run جدیدترین گزینه‌ها را برای این فایل به دست آورید؛ این فرمان نصاب هدایت‌شده را در یک حالت ایمن اجرا می‌کند که در آن هیچ اقدام دائمی روی سیستم شما اعمال نمی‌شود، بلکه یک اجرای شبیه‌سازی‌شده انجام شده و پیکربندی روی دیسک ذخیره می‌گردد.

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"
}

هشدار:

تمامی ورودی‌های کلید و مقدار باید با استاندارد JSON مطابقت داشته باشند. در ادامه، نمونه‌هایی خوانا برای انسان همراه با پیوندها آورده شده است که ساختار نحوی معتبر JSON را می‌شکنند. توضیحات زیر را متناسب با نیازهای خود و قالب استاندارد 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 منطقه زمانی را برای سیستم نصب‌شده تنظیم می‌کند خیر

نکته:

اگر هیچ ورودی در disk_config یافت نشود، نصب هدایت‌شده archinstall بدون انجام هیچ‌گونه عملیات روی دیسک، از هر آنچه که در حال حاضر زیر مسیر /mnt/archinstall سوار (mount) شده است استفاده خواهد کرد.

فایل creds یک فایل پیکربندی جداگانه است تا گزینه‌های عادی را از داده‌های حساس‌تر مانند گذرواژه‌ها تفکیک کند. در زیر نمونه‌ای از نحوه تنظیم گذرواژه ریشه آورده شده و در ادامه، توضیحات سایر مقادیر قابل تنظیم آمده است.

{
    "root_enc_password" : "SecretSanta2022"
}

کلید مقادیر توضیحات الزامی
!encryption-password str گذرواژه برای رمزنگاری دیسک؛ اگر گذرواژه ارائه نشود دیسک رمزنگاری نخواهد شد خیر
root_enc_password str گذرواژه حساب کاربری ریشه (root) خیر
users 0.0 3.5 { "username": "<USERNAME>", "enc_password": "<PASSWORD_HASH>", "sudo": false } 168u 168u فهرست اطلاعات اعتباری کاربران عادی؛ برای راهنمایی به بخش پیکربندی مراجعه کنید مشروط

نکته:

تنظیم users تنها در صورتی اختیاری است که root_enc_password تعیین شده باشد. در غیر این صورت، تنظیم users اجباری خواهد بود و حداقل تعداد کاربران مورد نیاز با امتیازات sudo روی ۱ تنظیم می‌شود.

برخی مسائل خارج از حوزه پروژه archinstall https://github.com/archlinux/archinstall هستند و مواردی که ما از آن‌ها مطلع هستیم در زیر فهرست شده‌اند.

'>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 را متناسب با ساختار شبکه خود پیکربندی کنید.

نکته:

اگر می‌دانید زمان روی دستگاه شما دقیق است، می‌توانید دستور archinstall --skip-ntp را برای نادیده گرفتن همگام‌سازی زمان اجرا کنید.

'>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

نکته:

اگر مطمئن هستید که ISO آخرین نسخه است و کلیدهای معتبر GPG دارید، دستور archinstall --skip-wkd را برای صرف‌نظر از انتظار جهت همگام‌سازی امتحان کنید.

اگر از همگام‌سازی 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

در برخی موارد، ممکن است درایور 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

این یک مسئله شناخته‌شده تا حدی فراگیر و کلی است. به‌طور رسمی تنها معماری x86_64 <https://wiki.archlinux.org/title/Frequently_asked_questions#What_architectures_does_Arch_support?> توسط آرچ لینوکس پشتیبانی می‌شود. از این رو، تلاش چندانی برای پشتیبانی از سایر پلتفرم‌ها صورت نگرفته است.

از نظر تئوری، سایر معماری‌ها باید کار کنند اما ممکن است اشکالات و رفتارهای پیش‌بینی‌نشده‌ای رخ دهند.

درخواست‌های ادغام (PR) مورد استقبال قرار می‌گیرند، اما لطفاً تأخیر در ادغام آن‌ها را پذیرا باشید. سایر اصلاحات، مسائل یا ویژگی‌ها به دلایل فوق در اولویت قرار خواهند گرفت.

'>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 باید به عنوان راهکار اصلی مد نظر قرار گیرد.

نکته:

این مشکل حتی در ISOهای جدید نیز می‌تواند رخ دهد، حتی چند روز پس از انتشار؛ چرا که برخی کلیدها ممکن است بلافاصله پس از آنکه جاکلیدی روی تصویر ISO "تثبیت شد" منقضی شوند.

نکته:

مسئله رایج دیگری که به عدم پیکربندی شبکه مربوط می‌شود این است که ممکن است زمان سیستم به درستی تنظیم نشده باشد - در نتیجه جاکلیدی قادر به به‌روزرسانی نخواهد بود. به بخش انتظار برای همگام‌سازی زمان #2144 مراجعه کنید.

این نیز یک موضوع کلی و فراگیر است. مخزن AUR پشتیبانی نمی‌شود https://wiki.archlinux.org/title/Arch_User_Repository#Updating_packages و تا زمانی که این وضعیت تغییر نکند، نمی‌توانیم از بسته‌های AUR برای حل درخواست‌های قابلیت در archinstall استفاده کنیم.

این بدان معناست که امکان افزودن درخواست‌های قابلیتی مانند پشتیبانی از سیستم‌های پرونده نظیر ZFS https://aur.archlinux.org/packages/zfs-linux وجود ندارد و مشکلات نیز با استفاده از بسته‌های AUR قابل حل نیستند.

نکته:

اما در جهت ارائه حق انتخاب به جامعه کاربری، archinstall از پلاگین‌های پایتون پشتیبانی می‌کند <#archinstall-plugins>، به این معنی که می‌توانید archinstall --plugin <url> را اجرا کرده و از یک پلاگین 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

هشدار:

این کار استفاده پشتیبانی‌نشده از AUR را در طول فرایند نصب ممکن می‌سازد.

مشکلات و باگ‌ها باید در نشانی https://github.com/archlinux/archinstall/issues گزارش شوند.

سوالات عمومی، پیشنهادات بهبود و مسائل امنیتی را نیز می‌توان در آنجا گزارش کرد. برای مشکلات فوری یا در صورت نیاز به راهنمایی، به سرور دیسکورد که دارای کانال راهنمایی است مراجعه کنید.

هنگام ارسال تیکت راهنمایی، لطفاً فایل /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 اجرا شده‌اند

هشدار:

ما فقط تضمین می‌کنیم که /var/log/archinstall/install.log فاقد اطلاعات حساس است. هر فایل گزارش دیگری باید با نهایت احتیاط ارسال شود!

یک کانال دیسکورد وجود دارد که برخی از مشارکت‌کنندگان در آن حضور دارند https://github.com/archlinux/archinstall/graphs/contributors.

برای پیوستن به سرور، به پیوند https://discord.gg/aDeMffrxNg بروید و ملحق شوید. قوانین چندانی به جز عقل سلیم و احترام به دیگران وجود ندارد. بخش گفتگوی عمومی برای مباحث متفرقه (off-topic) نیز در دسترس است.

نقش @Party Animals در صورتی که مایل به دریافت اعلان‌های انتشار نسخه‌های جدید هستید در دسترس است که در کانال #Release Party ارسال می‌شود. همچنین نقش @Contributors می‌تواند توسط مشارکت‌کنندگان با نوشتن !verify و دنبال کردن مراحل تأیید هویت فعال شود.

ملحق شوید، امیدواریم شما را آنجا ببینیم! : )

کتابخانه archinstall در PyPi https://pypi.org با نام بسته archinstall https://pypi.org/project/archinstall عرضه می‌شود. اما این کتابخانه را می‌توان به صورت دستی نیز نصب کرد.

هشدار:

اگر قصد دارید از archinstall بر روی ایمیج رسمی ISO آرچ لینوکس استفاده کنید، نیازی به انجام این مراحل نیست.

بسته Archinstall در مخازن رسمی https://wiki.archlinux.org/index.php/Official_repositories موجود است. و همچنین archinstall را به عنوان یک کتابخانه پایتون نصب خواهد کرد.

برای نصب هم‌زمان کتابخانه و اسکریپت archinstall:

pacman -S archinstall

همچنین می‌توانید با استفاده از بسته python-archinstall تنها کتابخانه را بدون فایل اجرایی کمکی نصب کنید.

مفهوم پایه PyPI با استفاده از pip اعمال می‌شود.

pip install archinstall

همچنین می‌توانید برنامه را با استفاده از کد منبع نصب کنید. برای سادگی در این مثال از 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

برنامه archinstall از اجرا در حالت ماژول https://docs.python.org/3/library/__main__.html پشتیبانی می‌کند. روش فراخوانی کتابخانه در حالت ماژول به اجرای اسکریپت‌های موجود در پوشه scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts محدود است.

بنابراین مهم است که پیش از ساخت و نصب، هر اسکریپت یا نمایه‌ای را که مایل به فراخوانی آن هستید در پوشه examples قرار دهید.

فرض می‌کنیم که روش «نصب با استفاده از کد منبع» <#installing-python-manual> را دنبال کرده‌اید. پیش از نصب واقعی کتابخانه، لازم است اسکریپت‌های نصب سفارشی خود را به صورت یک فایل پایتون در پوشه scripts https://github.com/archlinux/archinstall/tree/master/archinstall/scripts قرار دهید.

توضیحات بیشتر در مورد نحوه ساخت این اسکریپت‌ها در بخش بعدی آمده است.

هشدار:

این مورد ممکن است در آینده تغییر کند چرا که این روش در حال حاضر کمی انعطاف‌ناپذیر است. مسیر اسکریپت به یک پارامتر تبدیل خواهد شد. اما در حال حاضر، این ساختار بر اساس طراحی فعلی است.

بیایید به عنوان مثال یک نصاب 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 مطابق انتظار عمل می‌کند.

نکته:

بیشتر فراخوانی‌ها، از جمله مورد بالا، نیازمند دسترسی‌های کاربر ارشد (root) https://en.wikipedia.org/wiki/Superuser هستند.

برنامه 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 است.

این پارامتر این مزیت را دارد که در وضعیت --conf ذخیره می‌شود؛ به این معنا که هنگام اجرای مجدد یک فرآیند نصب، افزونه به طور خودکار بارگذاری خواهد شد. محدودیت آن این است که نیازمند مشخص بودن و وارد کردن یک مسیر اولیه است که می‌تواند کمی دشوار باشد.

این روش امکان بارگذاری چندین افزونه را فراهم می‌کند، با این محدودیت که افزونه‌ها باید از قبل بر روی سیستمی که archinstall را اجرا می‌کند نصب شده باشند. این روش عمدتاً کسانی را هدف قرار می‌دهد که ایمیج‌های ISO اختصاصی خود را می‌سازند و پیکربندی‌های خاصی را برای نیازهای خود بسته‌بندی می‌کنند.

در حال حاضر مستندات مربوط به این بخش محدود است. تا زمانی که این موضوع برطرف شود، بهترین راه برای یافتن ویژگی‌های پشتیبانی‌شده جستجوی عبارات plugin.on_ در کد منبع <https://github.com/search?q=repo%3Aarchlinux%2Farchinstall+%22plugin.on_%22&type=code> است؛ چرا که این کار تصویر روشنی از فراخوانی‌های انجام‌شده به افزونه‌ها ارائه می‌دهد.

افزونه‌های archinstall از رویکرد مبتنی بر کشف (discovery-driven) استفاده می‌کنند که در آن توابع خاصی از افزونه‌ها استعلام می‌شوند. به عنوان مثال، اگر یک افزونه تابع زیر را داشته باشد:

def on_pacstrap(*packages):
    ...

تابع archinstall.Pacman().strap(["some packages"]) به صورت ثابت روی افزونه‌ها پیمایش کرده و به دنبال on_pacstrap در افزونه می‌گردد. اگر تابع موجود باشد، .strap() تابع افزونه را فراخوانی کرده و لیست اولیه بسته‌ها را با نتیجه دریافتی از افزونه جایگزین می‌کند.

بهترین شیوه برای مستندسازی این فراخوانی‌ها در حال حاضر مشخص نیست، زیرا مستندسازی پویای این رفتار دشوار است.

ساده‌ترین راه در حال حاضر بررسی پیاده‌سازی‌های مرجع یا نمونه‌های جامعه کاربری است. دو مورد از آن‌ها عبارت‌اند از:

همچنین می‌توانید به جستجوی plugin.on_ در مخزن کد <https://github.com/search?q=repo%3Aarchlinux%2Farchinstall+%22plugin.on_%22&type=code> بپردازید تا ببینید archinstall به دنبال چه چیزهایی می‌گردد. از درخواست‌های ادغام (PR) برای گسترش این پشتیبانی استقبال می‌شود.

نصاب (installer) کلاس اصلی برای دسترسی به یک نمونه از فرآیند نصب (installation-instance) است. می‌توانید به این کلاس به عنوان فرآیند نصبی که انجام داده‌اید یا انجام خواهید داد نگاه کنید.

هر آنچه مربوط به درون فرآیند نصب باشد، در این کلاس یافت می‌شود.

Anton Hvornum

2022, Anton Hvornum

June 28, 2026