ประสบการณ์ท้าทาย Alpine Linux ของผู้ใช้ BSD
(rubenerd.com)-
ประวัติของ Alpine Linux
- Alpine Linux เป็นดิสทริบิวชัน Linux แบบอิสระ ไม่แสวงหากำไร และใช้งานทั่วไป ออกแบบมาสำหรับผู้ใช้ระดับสูงที่ให้ความสำคัญกับความปลอดภัย ความเรียบง่าย และการใช้ทรัพยากรอย่างมีประสิทธิภาพ
- ไบนารีใน userland ทั้งหมดคอมไพล์เป็น PIE (Position Independent Executables) และเปิดใช้ stack smashing protection เพื่อป้องกันการโจมตีทั้งกลุ่ม เช่น ช่องโหว่แบบ zero-day ได้ล่วงหน้า
- ในปี 2005 Natanael Copa ได้เริ่มพูดคุยถึงการเริ่มต้นโครงการ และเช่นเดียวกับ BSD มันถูกใช้ทั้งในระบบฝังตัว เราเตอร์ อุปกรณ์พกพา รวมถึงเซิร์ฟเวอร์และเดสก์ท็อปทั่วไป
- ด้วยขนาดที่กะทัดรัดและการพึ่งพา dependency ที่จำกัด จึงเป็นที่นิยมในฐานะเบสของคอนเทนเนอร์ Linux ด้วย
- ยังมี toolchain ที่สามารถรันใน
chroot(8)ได้อย่างง่ายดาย จึงน่าสนใจสำหรับผู้ที่ใช้ NetBSD chroots(8) และ FreeBSD jail อย่างกว้างขวาง
-
การติดตั้ง Alpine Linux
- มีให้เลือกหลายรุ่น รวมถึงบิลด์สำหรับ ARM, PPC64, x86 และ x86_64
- กระบวนการติดตั้งเรียบง่ายมาก เพียงเข้าสู่ระบบเป็น
rootในสภาพแวดล้อม live แล้วรันsetup-alpine - จะมีคำถามพื้นฐานเกี่ยวกับ keymap, เครือข่าย, เขตเวลา, การยืนยันตัวตนของ root เป็นต้น และยังสามารถใส่ SSH key ได้ตั้งแต่ต้น จึงมีประโยชน์เมื่อใช้เครื่องมือ orchestration เพื่อกระจาย VM หรือกลุ่มเซิร์ฟเวอร์ หรือเมื่อต้องดีพลอยกับผู้ให้บริการโฮสติงที่ไม่จัดเตรียมสื่อให้
- สามารถเลือกได้จาก SSH server และ NTP client หลายตัว เช่น OpenSSH ที่ชอบและ openntpd อีกทั้งยังตรวจพบการทำงานบน Xen ได้อย่างถูกต้อง
- สามารถตั้งค่า LVM ได้เช่นกัน แต่ตอนนี้ยังยึดตามพาร์ทิชันมาตรฐานแบบ
sysของ Alpine ที่ใช้ext4
-
การสำรวจหลังติดตั้ง
- เมื่อบูต Alpine ครั้งแรก ก็จะเข้าใจได้ทันทีว่าทำไม:
dmesg(1)บอกว่ากำลังรัน OpenRC อยู่ - มันพกพาได้ เล็ก เร็ว มีประสิทธิภาพ โปร่งใส และปลอดภัย
- สำหรับผู้ใช้ BSD ที่คุ้นเคยกับการเขียน rc script จะรู้สึกคุ้นมือมาก
- การมีอยู่ของ
/etc/rc.confและcrond(8)ทำให้น่ายินดี - เป็นเรื่องน่าดีใจมากที่ได้เห็นสิ่งนี้ในดิสทริบิวชัน Linux อย่าง Devuan, Gentoo และ Alpine และมันทำให้ Linux กลับมาสนุกอีกครั้ง
- พร้อมกับ OpenRC ยังมี musl และ busybox ที่มากับระบบ ช่วยลดขนาดของระบบพื้นฐานและลดพื้นที่การโจมตีลงอีก
- ยังใช้งาน llvm และ MirBSD Korn shell ซึ่งเป็นหนึ่งใน interactive shell ที่ชอบได้ด้วย
- เมื่อบูต Alpine ครั้งแรก ก็จะเข้าใจได้ทันทีว่าทำไม:
-
แพ็กเกจ
- ตัวจัดการแพ็กเกจหลักของ Alpine คือ apk และมันจัดการอัปเดตโดยไม่แยกระหว่างระบบพื้นฐานกับแพ็กเกจทั้งหมด เหมือนที่พบได้ทั่วไปใน Linux
- อยากลองดูเหมือนกันว่าสามารถรันสำเนาแบบไม่ใช้สิทธิ์พิเศษได้เหมือนใน BSD หรือไม่ แต่ยังไม่ได้ตรวจสอบ และก็มี pkgsrc อยู่แล้วจึงไม่ใช่ปัญหา
- การตั้งค่าอยู่ที่
/etc/apk/repositoriesและสามารถเปิดใช้คลัง community ได้ด้วยการเอาคอมเมนต์ออกจาก URL ตัวที่สองที่โปรแกรมติดตั้งเตรียมไว้ให้ - Alpine ยังมีคลัง
testingและสามารถเพิ่มคลังของตัวเองได้ด้วย - วิธีใช้งานง่าย แต่เพราะความเคยชินเก่า ๆ ก็ยังพิมพ์
apt installผิดแทนapk addอยู่บ่อยครั้ง - มีเว็บอินเทอร์เฟซทางการ และคลังของ Alpine ก็อยู่บน pkgs.org
- แพ็กเกจ zfs คือสิ่งที่น่าประหลาดใจที่สุด เพราะใช้เพียงสองคำสั่งก็สามารถติดตั้งและโหลดเคอร์เนลโมดูลได้แล้ว (แต่ root on ZFS น่าจะซับซ้อนกว่านั้น)
-
บทสรุป
- แม้จะเพิ่งลองแบบผิวเผิน แต่ก็มีเหตุผลมากพอให้พิจารณาอย่างจริงจังว่าจะเปลี่ยนมาใช้เป็นดิสทริบิวชัน Linux หลักสำหรับงานทดสอบและเซิร์ฟเวอร์
- ชอบที่
htop(1)และlsof(1)แสดงรายการโปรเซสที่พอมองรู้เรื่องได้เพียงเล็กน้อย ใช้ OpenRC การจัดการแพ็กเกจดูเรียบง่าย และการตั้งค่าก็ตรงไปตรงมามาก - เคยสงสัยว่า “Occam's Linux” ที่ทันสมัยและใช้งานได้จริงจะมีหน้าตาอย่างไร และนี่ก็คือสิ่งนั้น
- ถ้าต้องการมากกว่า busybox ก็อยากลองดูว่า uutils ใช้งานได้ไหม แต่สำหรับเซิร์ฟเวอร์ยังไม่ค่อยแน่ใจ
ความเห็นของ GN⁺
-
Alpine Linux ถูกปรับให้เหมาะกับการดีพลอยแบบคอนเทนเนอร์ จึงถูกใช้อย่างแพร่หลายในแพลตฟอร์มคอนเทนเนอร์อย่าง Docker นับว่าเป็นดิสทริบิวชันที่น่าพิจารณาเมื่อจะทำสถาปัตยกรรมไมโครเซอร์วิสด้วยคอนเทนเนอร์
-
การใช้ musl libc เป็นค่าเริ่มต้นอาจเป็นได้ทั้งข้อดีและข้อเสีย musl มีจุดเด่นด้านความเบาและความปลอดภัยเมื่อเทียบกับ glibc แต่ก็อาจมีปัญหาด้านความเข้ากันได้กับบางแอปพลิเคชัน จึงควรตรวจสอบความเข้ากันได้ของแอปที่จะใช้งานล่วงหน้า
-
การใช้ ash เป็นเชลล์เริ่มต้นก็เป็นอีกจุดที่น่าสนใจ ash มีความสามารถจำกัดกว่า bash แต่เบาและเร็วมาก จึงน่าจะเหมาะกับสภาพแวดล้อมที่ทรัพยากรจำกัด เช่น ระบบฝังตัว ขณะเดียวกันสำหรับผู้ใช้ทั่วไปก็อาจไม่ค่อยสะดวกนัก
-
หากเป็นผู้ที่ใช้งานระบบปฏิบัติการสาย BSD เป็นหลักอยู่แล้ว Alpine Linux ที่มอบสภาพแวดล้อมคุ้นเคยน่าจะดูมีเสน่ห์ไม่น้อย แต่ดูเหมือนว่าการรองรับสภาพแวดล้อมเดสก์ท็อปยังไม่สมบูรณ์นัก จึงน่าจะเหมาะกับการใช้งานด้านเซิร์ฟเวอร์หรือระบบฝังตัวมากกว่า
-
โดยรวมแล้ว Alpine Linux ดูเป็นดิสทริบิวชันที่เบาและเน้นความปลอดภัยซึ่งมีจุดยืนของตัวเองพอสมควร อย่างไรก็ตาม เนื่องจากระบบนิเวศของมันยังไม่ใหญ่มากนัก เมื่อต้องเจอปัญหาอาจได้รับการสนับสนุนจากชุมชนไม่มากเท่าที่ควร แต่ก็คาดว่าเมื่อเวลาผ่านไป จุดแข็งของ Alpine Linux จะช่วยดึงดูดผู้ใช้เพิ่มขึ้นเรื่อย ๆ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สรุป:
ไบนารีของ Linux ถูกคอมไพล์แบบ PIE (Position Independent Executable) จึงมีความปลอดภัยสูงกว่า
GLIBC มีการทำฮีปที่เสริมความแข็งแกร่งมากที่สุด จึงมีฟังก์ชันบรรเทาช่องโหว่ของฮีป เช่น การ free ซ้ำ ได้มากกว่า
Alpine ใช้ musl จึงปลอดภัยน้อยกว่า GLIBC อย่างไรก็ตาม ระบบที่เล็กและเข้าใจง่ายก็ช่วยด้านความปลอดภัยได้
Illumos (OpenSolaris) ทำให้ทุกอย่างเรียบง่ายขึ้นมากหลังจากใช้ Linux มาหลายสิบปี
สิ่งที่เคยทำงานบน Solaris 10 ส่วนใหญ่ยังใช้ได้ถึงปัจจุบันด้วยการแก้ไขเพียงเล็กน้อย
zone ดีกว่า Docker container 10 เท่า และมี ZFS ในตัว
จัดการบริการด้วย SMF ข้อเสียอย่างเดียวคือคอนฟิกด้วย XML
มีการแชร์ประสบการณ์ใช้งานเซิร์ฟเวอร์ OmniOS และ SmartOS
ในฐานะผู้ใช้ BSD ได้ลองรัน Alpine บน bhyve เป็นครั้งแรก
ด้วยพื้นฐานจาก busybox ยูทิลิตีใน /bin และ /sbin ไม่จำเป็นต้องเป็นไบนารีแยกกัน ทำให้ user space เล็กและบูตได้เร็ว
มี tmux และ zsh ก็เพียงพอสำหรับการใช้งานแบบยูนิกซ์ส่วนใหญ่
แม้ต้องติดตั้งแพ็กเกจ apk เพิ่มจำนวนมาก แต่โดยรวมแล้วเป็นประสบการณ์ Linux ที่ดีที่สุด
อยากให้มี ZFS ในตัวและรองรับ virtio binding สำหรับ bhyve
แนะนำ Void Linux ให้ผู้ใช้ BSD เช่นกัน สร้างโดยนักพัฒนา NetBSD มีทั้งเวอร์ชัน glibc และ musl และใช้ runit เป็นระบบ init
สามารถ build แพ็กเกจจากซอร์สได้ด้วย
xbps-srcไม่ชอบใช้ Alpine เพราะไม่มี man page มาให้โดยค่าเริ่มต้น
สงสัยว่ามีตัวเลือกให้ติดตั้งเอกสารอัตโนมัติเมื่อ install แพ็กเกจหรือไม่
เคยมีโพสต์เกี่ยวกับประสิทธิภาพของ Alpine บน Docker หลายโพสต์ และแนะนำให้ใช้ Debian/Ubuntu
สงสัยว่าเนื้อหาเหล่านี้ยังใช้ได้อยู่หรือไม่
ไม่เข้าใจว่าเหตุใด OpenRC และสิ่งคล้ายกันจึงน่าสนใจ มองว่าตัวเลือกแบบมี supervisor ดีกว่าการจัดการ PID file
ยอมรับว่าการไม่รีสตาร์ตอัตโนมัติเป็นข้อดีอย่างหนึ่ง
การพึ่งพา syslog อย่างมากก็เป็นเทคโนโลยียุค 80 เช่นกัน
เห็นด้วยว่าควรปรับปรุงมุมมองแบบรวมศูนย์เพื่อดูลำดับเหตุการณ์ของหลายเครื่องมือ
ข้อดีของ Alpine: จัดการแพ็กเกจแบบ declarative ได้โดยไม่ต้องใช้ Nix เพียงแก้ไข /etc/apk/world แล้วรัน
apk fixSlackware คือทางสายกลางระหว่าง BSD กับ Linux มีความเป็น Unix และไม่ซับซ้อน พร้อมพอร์ตทรีที่อุดมสมบูรณ์ผ่าน Slackbuilds
musl ไม่รองรับ pthread_attr_setaffinity_np จึงทำให้ซอฟต์แวร์บางตัว เช่น PyTorch รันไม่ได้