รวมคำสั่งที่ผ่านจริง
สำหรับเปิดดูหลังเข้าใจแล้ว — เหตุผลของแต่ละคำสั่งอยู่ในไฟล์ 01–10
Tested commands only, in execution order
ตารางค่าเฉพาะเครื่องนี้
| ค่า | P15 |
|---|---|
| ดิสก์ | /dev/nvme0n1 (ESP p1, LUKS p2) |
| LUKS UUID | <LUKS-UUID> |
| btrfs UUID | <BTRFS-UUID> |
| ESP PARTUUID | <ESP-PARTUUID> |
| NVIDIA PCI | 0000:01:00.0 (class 0x030000), 01:00.1 (0x040300) |
| GEMAUDIO | XX:XX:XX:XX:XX:XX |
| IP (LAN) | <P15-IP> |
เตรียม (บนเครื่องอื่น)
pacman-key -v archlinux-*.iso.sig
lsblk -d -o NAME,SIZE,MODEL,TRAN
sudo dd bs=4M if=archlinux-2026.09.01-x86_64.iso of=/dev/sdX conv=fsync oflag=direct status=progress
script -a ~/p15-install-$(date +%F).log && ssh root@<IP>ดิสก์ (ISO)
cat /sys/firmware/efi/fw_platform_size
timedatectl
smartctl -H -A /dev/nvme0
blkdiscard -f /dev/nvme0n1 && wipefs /dev/nvme0n1
sgdisk -o /dev/nvme0n1
sgdisk -n 1:0:+1G -t 1:ef00 -c 1:ESP /dev/nvme0n1
sgdisk -n 2:0:0 -t 2:8309 -c 2:LUKS /dev/nvme0n1
sgdisk -p /dev/nvme0n1
mkfs.fat -F 32 -n ESP /dev/nvme0n1p1
cryptsetup luksFormat --verbose /dev/nvme0n1p2
cryptsetup open --allow-discards --persistent /dev/nvme0n1p2 cryptroot
cryptsetup status cryptroot
mkfs.btrfs -L ARCH /dev/mapper/cryptroot
mount /dev/mapper/cryptroot /mnt
btrfs subvolume create /mnt/@ /mnt/@home /mnt/@snapshots /mnt/@log /mnt/@pkg
umount /mnt
mount -o noatime,compress=zstd:1,subvol=@ /dev/mapper/cryptroot /mnt
mkdir -p /mnt/{home,.snapshots,var/log,var/cache/pacman/pkg,boot}
mount -o noatime,compress=zstd:1,subvol=@home /dev/mapper/cryptroot /mnt/home
mount -o noatime,compress=zstd:1,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots
mount -o noatime,compress=zstd:1,subvol=@log /dev/mapper/cryptroot /mnt/var/log
mount -o noatime,compress=zstd:1,subvol=@pkg /dev/mapper/cryptroot /mnt/var/cache/pacman/pkg
mount -o fmask=0077,dmask=0077 /dev/nvme0n1p1 /mnt/boot
findmnt -R /mntติดตั้ง + boot chain
pacstrap -K /mnt base linux linux-lts linux-firmware intel-ucode btrfs-progs cryptsetup networkmanager neovim sudo zsh man-db
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && hwclock --systohc
printf 'en_US.UTF-8 UTF-8\nth_TH.UTF-8 UTF-8\n' >> /etc/locale.gen && locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
echo 'p15' > /etc/hostname
useradd -m -G wheel -s /bin/zsh green && passwd green
echo '%wheel ALL=(ALL:ALL) ALL' > /etc/sudoers.d/10-wheel && chmod 440 /etc/sudoers.d/10-wheel && visudo -c
passwd
systemctl enable NetworkManager
sed -i 's/^HOOKS=.*/HOOKS=(base systemd autodetect microcode modconf keyboard sd-vconsole block sd-encrypt filesystems fsck)/' /etc/mkinitcpio.conf
echo 'KEYMAP=us' > /etc/vconsole.conf
mkinitcpio -P
bootctl install
printf 'default arch.conf\ntimeout 3\nconsole-mode max\neditor no\n' > /boot/loader/loader.conf
# entries: ดูไฟล์ 03
exit
efibootmgr -b 0000 -B
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Linux Boot Manager" --loader '\EFI\systemd\systemd-bootx64.efi'
umount -R /mnt && cryptsetup close cryptroot && rebootบูตครั้งแรก
sudo pacman -S openssh kitty-terminfo && sudo systemctl enable --now sshdsnapper
sudo pacman -S snapper
sudo umount /.snapshots && sudo rmdir /.snapshots
sudo snapper -c root create-config /
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots && sudo mount -a && sudo chmod 750 /.snapshots
sudo snapper list-configs
sudo pacman -S snap-pac linux-headers linux-lts-headers
sudo snapper -c root set-config TIMELINE_CREATE=no
sudo systemctl disable --now snapper-timeline.timer
sudo systemctl enable --now snapper-cleanup.timer
sudo snapper -c root create -d "..." # ทุกครั้งที่แก้ไฟล์ระบบด้วยมือNVIDIA
sudo pacman -S nvidia-open-dkms nvidia-utils nvidia-prime && dkms status
echo 'options nvidia "NVreg_DynamicPowerManagement=0x02"' | sudo tee /etc/modprobe.d/nvidia-pm.conf
# udev rule: ดูไฟล์ 05
cat /sys/bus/pci/devices/0000:01:00.0/power/{control,runtime_status}
grep -i 'runtime d3' /proc/driver/nvidia/gpus/0000:01:00.0/powerdotfiles
ssh-keygen -t ed25519 -C "<user>@p15" -f ~/.ssh/id_ed25519_personal
git clone git@github-personal:<github-user>/dotfiles.git ~/dotfiles
{ grep -vxE 'lib32-nvidia-utils|pulseaudio|xf86-video-intel' ~/dotfiles/packages-pacman.txt | grep -Fxf <(pacman -Slq); printf '%s\n' pipewire pipewire-pulse pipewire-alsa pipewire-jack wireplumber ollama-cuda; } | sudo pacman -S --needed -
mkdir -p ~/.config ~/.local/bin
cd ~/dotfiles && stow -t ~ -v git i3 i3status-rust kitty nvim x11 zsh mpv yt-dlp bin
sudo pacman -S --needed dex xss-lock picom pavucontrol rtkit dunst python-mutagen
sudo systemctl enable ly@tty2.service
systemctl --user enable --now ssh-agent.socketภาษาไทย
sudo pacman -S noto-fonts
yay -S ttf-sarabun ttf-tlwg
sudo localectl set-x11-keymap us,th pc105 "" grp:alt_shift_toggle
kitty --debug-font-fallbackBT
sudo systemctl enable --now bluetooth.service
bluetoothctl pairable on
bluetoothctl --timeout 10 scan on && bluetoothctl pair XX:XX:XX:XX:XX:XX
bluetoothctl trust XX:XX:XX:XX:XX:XX && bluetoothctl pairable off
bluetoothctl connect XX:XX:XX:XX:XX:XX
pactl set-default-sink bluez_output.XX_XX_XX_XX_XX_XX.1
wpctl statusฮาร์ดแวร์
sudo dmidecode -t memory | grep -E '^\s+(Size|Locator|Speed|Configured Memory Speed|Part Number):'
zramctl; swapon --show
echo 80 | sudo tee /sys/class/power_supply/BAT0/charge_control_end_threshold
echo 75 | sudo tee /sys/class/power_supply/BAT0/charge_control_start_threshold
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file /tmp/p15-luks-header.img
fprintd-enroll && fprintd-verify
pkexec echo okกู้ระบบ (บูต USB)
cryptsetup open /dev/nvme0n1p2 cryptroot
mount -o subvol=@ /dev/mapper/cryptroot /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mntคำถามชวนคิด
- ถ้าต้องติดตั้งเครื่องที่สองให้ทีมจากไฟล์นี้อย่างเดียว ค่าในตาราง “ค่าเฉพาะเครื่อง” ค่าไหนบ้างที่ต้องหาใหม่ และหาด้วยคำสั่งอะไร
- คำสั่งไหนในไฟล์นี้ที่ “ย้อนกลับไม่ได้” ลองทำเครื่องหมายไว้ แล้วเรียงลำดับตามความอันตราย
- ทำไมไฟล์นี้ต้องอยู่ “ท้ายสุด” และแยกจากไฟล์อธิบาย — ถ้าคนใหม่เปิดไฟล์นี้ก่อนจะเกิดอะไรขึ้น