Người dùng BSD thử sức với Alpine Linux
(rubenerd.com)-
Lịch sử của Alpine Linux
- Alpine Linux là một bản phân phối Linux đa dụng, độc lập và phi thương mại, được thiết kế cho người dùng nâng cao coi trọng bảo mật, sự đơn giản và hiệu quả tài nguyên
- Tất cả các binary userland đều được biên dịch dưới dạng PIE (Position Independent Executables) và áp dụng stack smashing protection, giúp ngăn chặn trước việc khai thác cả một lớp lỗ hổng như zero-day
- Năm 2005, Natanael Copa đã thảo luận về việc khởi động dự án; tương tự BSD, nó được dùng trên hệ thống nhúng, router, thiết bị di động, cũng như máy chủ và máy tính để bàn đa dụng
- Nhờ kích thước gọn nhẹ và phụ thuộc hạn chế, nó cũng phổ biến làm nền tảng cho Linux container
- Nó cũng cung cấp toolchain có thể chạy dễ dàng trong
chroot(8), nên khá thú vị với những người sử dụng rộng rãi NetBSD chroots(8) và FreeBSD jail
-
Cài đặt Alpine Linux
- Có nhiều phiên bản, bao gồm các bản build cho ARM, PPC64, x86 và x86_64
- Quá trình cài đặt rất đơn giản: đăng nhập bằng
roottrong môi trường live và chạysetup-alpine - Hệ thống sẽ hỏi các câu hỏi cơ bản như keymap, mạng, múi giờ, xác thực root; bạn cũng có thể chèn SSH key ngay từ đầu, rất hữu ích khi triển khai VM hay cụm máy chủ bằng công cụ điều phối hoặc triển khai tới nhà cung cấp hosting không cung cấp phương tiện cài đặt
- Có thể chọn giữa một số SSH server và NTP client, bao gồm cả OpenSSH và openntpd mà tác giả ưa thích, đồng thời hệ thống cũng nhận diện chính xác việc đang chạy trên Xen
- Bạn cũng có thể cấu hình LVM, nhưng hiện tại tác giả vẫn dùng phân vùng
systiêu chuẩn của Alpine vớiext4
-
Khám phá sau khi cài đặt
- Khi khởi động Alpine lần đầu, bạn sẽ hiểu lý do đặc biệt:
dmesg(1)cho biết hệ thống đang chạy OpenRC - Nó có tính cơ động, nhỏ gọn, nhanh, hiệu quả, minh bạch và an toàn
- Rất quen thuộc với người dùng BSD vốn quen viết rc script
- Sự hiện diện của
/etc/rc.confvàcrond(8)mang lại cảm giác vui thích - Việc thấy nó được dùng trong các bản phân phối Linux như Devuan, Gentoo và Alpine là điều rất đáng mừng, khiến Linux trở nên thú vị trở lại
- Cùng với OpenRC, musl và busybox cũng được đóng gói sẵn, giúp giảm thêm kích thước hệ thống cơ bản và bề mặt tấn công
- llvm cũng có sẵn, cũng như MirBSD Korn shell, một trong những shell tương tác mà tác giả ưa thích
- Khi khởi động Alpine lần đầu, bạn sẽ hiểu lý do đặc biệt:
-
Gói phần mềm
- Trình quản lý gói mặc định của Alpine là apk, và như thường thấy trên Linux, nó xử lý cập nhật mà không tách biệt hệ thống cơ bản với toàn bộ gói phần mềm
- Tác giả muốn kiểm tra xem có thể chạy bản sao không đặc quyền như trên BSD hay không, nhưng chưa xác minh; ngoài ra còn có pkgsrc nên cũng không thành vấn đề
- Cấu hình nằm trong
/etc/apk/repositories, và bạn có thể bật kho community bằng cách bỏ chú thích URL thứ hai do trình cài đặt cung cấp - Alpine cũng có kho
testing, và bạn cũng có thể thêm kho riêng của mình - Cách dùng rất dễ, nhưng vì thói quen cũ nên tác giả vẫn hay gõ nhầm
apt installthay vìapk add - Có giao diện web chính thức, và kho Alpine cũng có trên pkgs.org
- Gói zfs là điều gây ngạc nhiên nhất; chỉ cần hai lệnh để cài và nạp kernel module (dù root on ZFS có lẽ sẽ phức tạp hơn)
-
Kết luận
- Mới chỉ chạm nhẹ vào bề mặt, nhưng đã có đủ lý do để nghiêm túc cân nhắc chuyển sang dùng nó làm bản phân phối Linux chính cho môi trường thử nghiệm và máy chủ
- Tác giả thích việc
htop(1)vàlsof(1)chỉ hiển thị một danh sách ngắn các tiến trình có thể nhận diện, hệ thống dùng OpenRC, quản lý gói có vẻ đơn giản và cấu hình rất tối giản - Tác giả từng tự hỏi một “Occam's Linux” hiện đại và hữu dụng sẽ trông như thế nào, và đây chính là nó
- Nếu cần nhiều hơn những gì busybox cung cấp, tác giả muốn xem liệu uutils có chạy được hay không, nhưng với máy chủ thì vẫn còn nghi ngờ
Ý kiến của GN⁺
-
Alpine Linux được tối ưu cho triển khai dựa trên container, nên được sử dụng rộng rãi trên các nền tảng container như Docker. Đây là bản phân phối đáng cân nhắc khi triển khai kiến trúc microservice tận dụng container.
-
Việc dùng musl libc mặc định vừa là ưu điểm vừa là nhược điểm. musl nhẹ hơn và có lợi thế về bảo mật so với glibc, nhưng có thể gặp vấn đề tương thích với một số ứng dụng. Vì vậy, nên kiểm tra trước khả năng tương thích của ứng dụng sẽ sử dụng.
-
Việc dùng ash làm shell mặc định cũng là một điểm đặc biệt. ash có ít tính năng hơn bash nhưng là shell rất nhẹ và nhanh, phù hợp với môi trường tài nguyên hạn chế như hệ thống nhúng. Ngược lại, với người dùng phổ thông thì có thể hơi bất tiện.
-
Nếu bạn chủ yếu dùng các hệ điều hành họ BSD, Alpine Linux có thể sẽ tạo cảm giác hấp dẫn nhờ mang lại một môi trường quen thuộc. Tuy vậy, hỗ trợ cho môi trường desktop dường như vẫn còn hạn chế, nên có vẻ phù hợp hơn cho mục đích máy chủ hoặc nhúng.
-
Nhìn chung, Alpine Linux có vẻ là một bản phân phối nhẹ và tối ưu cho bảo mật với bản sắc riêng. Tuy nhiên, hệ sinh thái của nó chưa quá lớn nên khi phát sinh sự cố, hỗ trợ từ cộng đồng có thể còn phần nào hạn chế. Dù vậy, theo thời gian, nhờ những ưu điểm của mình, Alpine Linux được kỳ vọng sẽ thu hút ngày càng nhiều người dùng hơn.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt:
Nhị phân Linux được biên dịch dưới dạng PIE (Position Independent Executable) nên có tính bảo mật cao hơn
GLIBC có cơ chế triển khai heap được gia cố tốt nhất, nên có nhiều biện pháp giảm thiểu hơn trước các lỗ hổng heap như giải phóng kép
Alpine dùng musl nên kém an toàn hơn GLIBC. Một hệ thống nhỏ gọn, dễ hiểu cũng giúp ích cho bảo mật
Illumos (OpenSolaris) trở nên đơn giản hơn hẳn sau hàng chục năm dùng Linux
Phần lớn những gì chạy trên Solaris 10 vẫn áp dụng được đến nay chỉ với một vài chỉnh sửa nhỏ
zone tốt hơn Docker container gấp 10 lần, đồng thời có sẵn hỗ trợ ZFS
Quản lý dịch vụ bằng SMF. Điểm trừ duy nhất là cấu hình bằng XML
Chia sẻ trải nghiệm dùng máy chủ OmniOS và SmartOS
Với tư cách là người dùng BSD, lần đầu tiên chạy Alpine trên bhyve
Dựa trên busybox nên các tiện ích /bin, /sbin không cần phải là các nhị phân tách rời, giúp không gian người dùng nhỏ gọn và khởi động nhanh
tmux, zsh là đủ cho hầu hết nhu cầu Unix
Dù phải cài khá nhiều gói bằng apk, nhìn chung đây là trải nghiệm Linux tốt nhất
Sẽ tốt hơn nếu có ZFS tích hợp sẵn và hỗ trợ binding virtio cho bhyve
Void Linux cũng được khuyên dùng cho người dùng BSD. Do một lập trình viên NetBSD tạo ra, có bản glibc/musl. Dùng runit làm hệ thống init
Có thể build gói từ mã nguồn bằng
xbps-srcKhông thích dùng Alpine vì mặc định không kèm theo man page
Tò mò không biết có tùy chọn nào để tự động cài tài liệu khi cài gói hay không
Đã từng có các bài viết về hiệu năng của Alpine trên Docker. Khuyến nghị dùng Debian/Ubuntu
Tò mò không biết nội dung này còn đúng đến hiện tại hay không
Không rõ vì sao OpenRC và các lựa chọn tương tự lại hấp dẫn. Quan điểm là các tùy chọn dựa trên giám sát tốt hơn việc quản lý file PID
Đồng ý rằng không tự động khởi động lại là một ưu điểm
Việc phụ thuộc quá nhiều vào syslog cũng là công nghệ từ thập niên 80
Đồng ý rằng cần cải thiện góc nhìn tập trung để biết thứ tự sự kiện giữa nhiều công cụ
Ưu điểm của Alpine: có thể quản lý gói theo kiểu khai báo mà không cần Nix bằng cách chỉnh sửa /etc/apk/world rồi chạy
apk fixSlackware là phương án dung hòa giữa BSD và Linux. Đậm chất Unix và không quá phức tạp. Có cây port phong phú thông qua Slackbuilds
musl không hỗ trợ pthread_attr_setaffinity_np nên một số phần mềm như PyTorch không thể chạy