مقدمة
في هذه المقالة، سنقوم بتثبيت نظام Arch Linux الأساسي على خادم يعمل حاليًا بنظام تشغيل من ذاكرة الوصول العشوائي (RAM) أو نسخة ISO حية. ستعمل أي توزيعة لينكس طالما لم يتم استخدام الأقراص. في هذا البرنامج التعليمي، سأستخدم خادم Hetzner Cloud المُشغّل بنظام Rescue System.
معلومات هامة
يتطلب هذا البرنامج التعليمي تشغيل أوامر في جذر مختلف. هذا يسمح لنا بإعادة توجيه دليل الجذر الظاهري إلى موقع جديد وتشغيل الأوامر كما لو كنا قد شغّلنا النظام.
سأُعلمك عند تغيير الجذر. سأستخدم أيضًا نص المطالبة لإظهار الجذر الذي نستخدمه حاليًا.
- root@rescue ~ # يعرض الأمر الذي يتم تنفيذه بدون chroot.
- [root@bootstrap /]# سيكون داخل بيئة Bootstrap.
- [root@chroot /]# داخل تثبيت Arch Linux على القرص
الخطوة 1 - إعداد بيئة Bootstrap
سنبدأ بتنزيل صورة التمهيد الحالية من مرآة Arch Linux موثوقة. سيوفر لنا هذا الأدوات اللازمة لتثبيت Arch. أثناء ذلك، سننزّل أيضًا التوقيع المناسب ونتحقق من الصورة قبل متابعة التثبيت.
root@rescue ~ # curl -LO 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 164M 100 164M 0 0 115M 0 0:00:01 0:00:01 --:--:-- 115Mroot@rescue ~ # curl -LO 'https://archlinux.org/iso/latest/archlinux-bootstrap-x86_64.tar.zst.sig'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 331 100 331 0 0 4728 0 --:--:-- --:--:-- --:--:-- 4728root@rescue ~ # gpg --keyserver keyserver.ubuntu.com --keyserver-options auto-key-retrieve --verify archlinux-bootstrap-x86_64.tar.zst.sig
gpg: Signature made Sun 01 Sep 2024 02:43:27 PM CEST
gpg: using EDDSA key 3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C
gpg: issuer "[email protected]"
gpg: key 7F2D434B9741E8AC: public key "Pierre Schmitz <[email protected]>" imported
gpg: key 76A5EF9054449A5C: public key "Pierre Schmitz <[email protected]>" imported
gpg: Total number processed: 2
gpg: imported: 2
gpg: no ultimately trusted keys found
gpg: Good signature from "Pierre Schmitz <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3E80 CA1A 8B89 F69C BA57 D98A 76A5 EF90 5444 9A5Cعندما لا تحدث أي أخطاء، يمكننا المضي قدمًا في تفريغ الصورة.
root@rescue ~ # tar xf archlinux-bootstrap-x86_64.tar.zst
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'بعد الاستخراج، نحتاج إلى تثبيت المجلد على جهازنا. نفعل ذلك حتى لا يعتقد PackStrap أن هناك مساحة فارغة على هذا الجهاز.
root@rescue ~ # mount --bind root.x86_64 root.x86_64
الخطوة 2 - إنشاء قرص تمهيد وتثبيت Arch Linux
من الآن فصاعدًا، علينا العمل من داخل بيئة التمهيد التي أنشأناها للتو. نفعل ذلك باستخدام arch-chroot.
root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64
أولاً، نحتاج إلى تقسيم القرص. سأستخدم gdisk هنا، ولكن يمكنك أيضاً استخدام أي أداة تقسيم أخرى تدعم GPT. مع ذلك، gdisk غير مُثبّت في صورة التمهيد. للقيام بذلك، نحتاج أولاً إلى تهيئة نسخة مُتطابقة وإعداد مفتاح Pacman، ثم تثبيت gdisk:
[root@bootstrap /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@bootstrap /]# pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key...
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/AFB2F3A83C28CC51C20E0752282AC1A0C5C2A266.rev'
gpg: Done
==> Updating trust database...
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u[root@bootstrap /]# pacman-key --populate archlinux
==> Appending keys from archlinux.gpg...
==> Locally signing trusted keys in keyring...
-> Locally signed 5 keys.
==> Importing owner trust values...
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring...
-> Disabled 45 keys.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 101 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 77 signed: 22 trust: 77-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2024-11-09[root@bootstrap /]# pacman --noconfirm -Sy gdisk
الآن يمكننا المضي قدمًا في تقسيم القرص. تأتي خوادم Hetzner السحابية مزودة بقرص واحد فقط مُتصل، ويُسمى هذا القرص /dev/sda. قد يختلف اسم القرص لديك، لذا تأكد من تعديل الأمر وفقًا لذلك. يُرجى العلم أن هذا سيؤدي إلى حذف جميع الأقسام، وبالتالي جعل أي بيانات عليها عديمة الفائدة.
تقسيم القرص الصلب هنا بسيط للغاية. نحتاج كحد أدنى إلى قسم تمهيد (بحجم 1 ميجابايت) وقسم جذر (باقي القرص الصلب في حالتنا).
[root@bootstrap /]# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-40001502, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-40001502, default = 39999487) or {+-}size{KMGTP}: +1M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-40001502, default = 4096) or {+-}size{KMGTP}:
Last sector (4096-40001502, default = 39999487) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.ثم نقوم بتهيئة قسم الجذر الخاص بنا باستخدام نظام الملفات ext4:
[root@bootstrap /]# mkfs.ext4 /dev/sda2
mke2fs 1.47.1 (20-May-2024)
/dev/sda2 contains a vfat file system
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 4999424 4k blocks and 1250928 inodes
Filesystem UUID: c14d23b8-5754-49bc-bc27-d1cb48bd76e3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: doneثم نقوم بتثبيته على /mnt وننشئ ملف fstab منه:
[root@bootstrap /]# mount /dev/sda2 /mnt
[root@bootstrap /]# genfstab -U /mnt >> /etc/fstabالآن يُمكننا تثبيت Arch Linux عبر pacstrap. سنستغل هذه الفرصة لتثبيت OpenSSH، لأننا سنحتاجه لاحقًا للاتصال بخادمنا. قد يستغرق هذا بعض الوقت حسب سرعة اتصالك بالإنترنت وسرعة القرص الصلب.
[root@bootstrap /]# pacstrap -G -M /mnt base grub linux linux-firmware openssh
==> Creating install root at /mnt
==> Installing packages to /mnt
:: Synchronizing package databases...
core 117.2 KiB 514 KiB/s 00:00 [########################################] 100% extra 7.4 MiB 37.0 MiB/s 00:00 [########################################] 100%resolving dependencies...
:: There are 2 providers available for libxtables.so=12-64:
:: Repository core
1) iptables 2) iptables-nft
Enter a number (default=1):
:: There are 3 providers available for initramfs:
:: Repository core
1) mkinitcpio
:: Repository extra
2) booster 3) dracut
Enter a number (default=1):
looking for conflicting packages...
[...]
Total Download Size: 520.45 MiB
Total Installed Size: 992.49 MiB
[...]
(13/13) Reloading system bus configuration...
Skipped: Running in chroot.الخطوة 3 – التثبيت النهائي لـ Arch Linux
الآن يمكننا الخروج من بيئة التمهيد وتغيير الجذر إلى النظام المثبت لإنهاء التمهيد:
[root@bootstrap /]# exit
root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64/mntنبدأ مرة أخرى بتكوين المرآة وتهيئة مفتاح Pacman:
[root@chroot /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@chroot /]# pacman-key --init
[root@chroot /]# pacman-key --populate archlinuxالآن حان الوقت لتثبيت أداة تحميل التشغيل على محرك الأقراص الخاص بك.
[root@chroot /]# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@chroot /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
doneستتم إدارة الشبكة بواسطة systemd-networkd. لتفعيلها، نحتاج إلى إنشاء الملف /etc/systemd/network/ether.network بالمحتوى التالي:
cat << EOF > /etc/systemd/network/ether.network
[Match]
Type=ether
[Network]
DHCP=yes
EOFيؤدي هذا إلى تكوين جميع واجهات شبكة Ethernet لـ DHCP.
الآن نقوم بتفعيل الخدمات المطلوبة:
[root@chroot /]# systemctl enable systemd-networkd
Created symlink '/etc/systemd/system/dbus-org.freedesktop.network1.service' → '/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/systemd-networkd.service' → '/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/sockets.target.wants/systemd-networkd.socket' → '/usr/lib/systemd/system/systemd-networkd.socket'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-network-generator.service' → '/usr/lib/systemd/system/systemd-network-generator.service'.
Created symlink '/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service' → '/usr/lib/systemd/system/systemd-networkd-wait-online.service'.
[root@chroot /]# systemctl enable systemd-resolved
Created symlink '/etc/systemd/system/dbus-org.freedesktop.resolve1.service' → '/usr/lib/systemd/system/systemd-resolved.service'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-resolved.service' → '/usr/lib/systemd/system/systemd-resolved.service'.أخيرًا، نريد الوصول إلى نظامنا عبر SSH. للقيام بذلك، أنشئ ملف مفاتيح مُصرّح بها في /root/.ssh/authorized_keys واكتب مفتاح SSH العام فيه. لا تنسَ تفعيل sshd وإلا فلن يبدأ خادم SSH بعد إعادة التشغيل.
[root@chroot /]# mkdir /root/.ssh
[root@chroot /]# echo "<your-ssh-pub-key>" >> /root/.ssh/authorized_keys
[root@chroot /]# systemctl enable sshd
Created symlink '/etc/systemd/system/multi-user.target.wants/sshd.service' → '/usr/lib/systemd/system/sshd.service'.الآن يمكننا الخروج من الجذر وإعادة تشغيل نظامنا. بعد بضع ثوانٍ، سيكون خادمك جاهزًا للعمل على نظام Arch Linux المُثبّت حديثًا، ويمكن الوصول إليه عبر SSH على المنفذ 22 باستخدام مفتاحك العام.
نتيجة
تهانينا! لديك الآن تثبيت بسيط لنظام Arch Linux على خادمك. من هنا، يمكنك البدء بتثبيت خدمات إضافية مثل Docker وnginx وK8S وغيرها.









