ปรับแต่งฮาร์ดแวร์และความปลอดภัยรอบเครื่อง
งานหลังติดตั้ง: แรม 48GB, memtest, zram, เพดานชาร์จ, สำรอง LUKS header, ลายนิ้วมือ, แจ้งเตือน
Post-install hardware and safety tasks
1. สำรอง LUKS header
header 16 MiB เก็บ master key ที่เข้ารหัสด้วยรหัสของเรา → เสีย = ข้อมูลทั้งดิสก์หาย แม้จำรหัสได้
# บน P15
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p2 --header-backup-file /tmp/p15-luks-header.img
ls -l /tmp/p15-luks-header.img # 16777216 = 32768 sector × 512
sudo chown green: /tmp/p15-luks-header.img
# บน MSI (ดู prompt ก่อน!)
scp <user>@<P15-IP>:/tmp/p15-luks-header.img ~/
sha256sum ~/p15-luks-header.img; ssh <user>@<P15-IP> sha256sum /tmp/p15-luks-header.img
# บน P15
rm -f /tmp/p15-luks-header.img/tmpอยู่ใน RAM = ไฟล์ลับไม่ถูกเขียนลง SSD- เปลี่ยนรหัส LUKS เมื่อไหร่ ต้องสำรองใหม่ (ไฟล์เก่า + รหัสเก่า ยังเปิดได้)
- เก็บไว้ USB แยก ไม่แขวนกุญแจสำรองไว้ที่ประตู
2. แรม 48GB
sudo dmidecode -t memory | grep -E '^\s+(Size|Locator|Speed|Configured Memory Speed|Part Number):'| ช่อง | แผง | ใช้งานจริง |
|---|---|---|
| A-DIMM0 | Crucial 2667 | 2133 |
| A-DIMM1 | ว่าง (ใต้คีย์บอร์ด) | |
| B-DIMM0 | Samsung 2667 | 2133 |
| B-DIMM1 | แผงเดิมร้าน 3200 | 2133 |
- ลดเหลือ 2133 (ทายไว้ 2666): 2 แผงในช่อง B (2DPC) + สามยี่ห้อ → BIOS เลือกค่าปลอดภัย
- ช่อง A 16 / ช่อง B 32 → flex mode (32GB dual + 16GB single channel)
- Ollama บน CPU ขึ้นกับแบนด์วิดท์แรม → วัด tokens/วินาที เทียบก่อนตัดสินใจจัดใหม่
- หลังหมดประกัน: จัดให้สองช่องเท่ากัน (แผงที่ 4 → 64GB dual)
3. memtest86+
sudo pacman -S memtest86+-efi
pacman -Ql memtest86+-efi # /boot/memtest86+/memtest.efi
printf 'title Memtest86+\nefi /memtest86+/memtest.efi\n' | sudo tee /boot/loader/entries/memtest.conf
sudo bootctl listefi= chain-load ส่งต่อทั้งหมดให้ .efi อื่น (ต่างจากlinux+initrd)- ผล: 1 pass, 0 errors ✓
- ลบแพ็กเกจต้องลบ entry เองด้วย (pacman ไม่รู้จักไฟล์ที่เราเขียน)
4. zram
sudo tee /etc/systemd/zram-generator.conf <<'EOF'
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100
EOF
sudo systemctl daemon-reload && sudo systemctl start systemd-zram-setup@zram0.service
zramctl; swapon --show- generator = systemd สร้าง unit จาก config ให้เอง ไม่ต้อง enable
- ได้ 23.4G (ทายไว้ 7.6G) → เพราะ อัพแรมเป็น 48GB แล้ว config ถูกต้อง
5. เพดานชาร์จแบต (ThinkPad)
cat /sys/class/power_supply/BAT0/charge_control_{start,end}_threshold
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- ตั้ง end ก่อน start
- ช่องว่าง 75–80 = hysteresis (เหมือน route flap dampening)
- ค่าเก็บใน EC → ยังต้องพิสูจน์หลังรีบูต
6. ลายนิ้วมือ (ใช้กับหน้าต่าง polkit เท่านั้น)
lsusb | grep -iE 'finger|synaptics|broadcom|goodix|validity|elan' # 06cb:00bd Synaptics
fprintd-enroll # ⚠️ รันใน kitty ที่อยู่ใน i3 (ไม่ใช่ SSH)
fprintd-verify
pacman -Ql polkit | grep pam.d # /usr/lib/pam.d/polkit-1
sudo cp /usr/lib/pam.d/polkit-1 /etc/pam.d/polkit-1
sudo sed -i '/^auth *include *system-auth/i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
pkexec echo "ผ่านด้วยลายนิ้วมือ"PAM = AAA method list: sufficient pam_fprintd = ลองนิ้วก่อน ไม่ผ่านไปถามรหัส
| ใช้กับ | ตัดสินใจ | เหตุผล |
|---|---|---|
| polkit (ใช้เมาส์) | ✅ | สะดวก ผ่าน login มาแล้ว |
| sudo (พิมพ์) | ❌ | รอสแกนก่อนถามรหัส = ช้าลง |
| login / ปลดล็อกจอ | ❌ | ถูกบังคับแตะนิ้วได้ |
หลัก /etc ทับ /usr/lib: แก้ไฟล์ใน /etc เสมอ แต่ต้องตรวจเป็นระยะ:
diff /usr/lib/pam.d/polkit-1 /etc/pam.d/polkit-1 # ต้องต่างแค่บรรทัด fprintd7. แจ้งเตือน (dunst)
sudo pacman -S dunst
notify-send "ทดสอบ" "สวัสดีจาก P15" # ใน i3
pgrep -a dunst # D-Bus ปลุกขึ้นมาเอง (activation)ค้างทำ (ยังไม่ได้ทดสอบ — ไม่ใส่คำสั่ง)
- SSH เข้า P15 ด้วย key อย่างเดียว (sshd_config.d)
- ปิด Network Boot ใน BIOS (PXE, LENOVO CLOUD)
- รหัส Supervisor ของ BIOS (ลืม = เปลี่ยนเมนบอร์ด)
- gnome-keyring ให้ Chrome (cookie ถูกเข้ารหัสด้วยกุญแจที่ฝังในโปรแกรม = เสี่ยง infostealer)
ปัญหาที่เคยเจอ & สิ่งที่ทายผิด (Troubleshooting)
| เหตุการณ์ | บทเรียน |
|---|---|
| scp รันบน P15 เอง (495 MB/s) | ความเร็วที่เป็นไปไม่ได้คือหลักฐาน ดู prompt ก่อนกด Enter |
rm ถามเรื่อง write-protected | ไฟล์ r-------- → rm ถามตามมารยาท ใช้ rm -f เมื่อแน่ใจ |
| memtest ดับกลางทาง (99%) | แบตหมด (AC = 0) → รันตอนเสียบสายเท่านั้น |
| zram 23.4G ไม่ตรงทาย | ตรวจ “ข้อมูลนำเข้า” (แรมเปลี่ยน) ไม่ใช่แค่ config |
fprintd-enroll Timeout | polkit ปฏิเสธ SSH session → ทำที่หน้าเครื่อง |
ไม่มี /etc/pam.d/polkit-1 | อยู่ใน /usr/lib/pam.d/ → copy มาแก้ใน /etc |
| ไดรเวอร์ Broadcom ในรายการ | ของเครื่อง Dell เดิม ตรวจด้วย lsusb |
คำถามชวนคิด
- ถ้าเครื่องค้างแบบสุ่มหลังใส่แรมสามยี่ห้อ คุณจะใช้ memtest + การถอดทีละแผงหาตัวเสียอย่างไร ให้ใช้รอบทดสอบน้อยที่สุด
- ไฟล์สำรอง LUKS header ตกไปอยู่ในมือคนอื่น แต่เขาไม่รู้รหัส ความเสี่ยงคืออะไร และถ้าวันหนึ่งรหัสหลุดด้วย ต้องทำอะไรบ้าง
- ทำไม polkit ถึงแยก “คนหน้าเครื่อง” ออกจาก “คนที่ SSH เข้ามา” ลองเปรียบกับนโยบาย console vs VTY บนอุปกรณ์ network