2 điểm bởi GN⁺ 8 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Là một hệ điều hành máy chủ Linux được thiết kế chuyên cho container Docker, chỉ cần boot từ ISO là sẽ vào ngay môi trường Docker Engine
  • Giữ hệ thống lõi ở dạng bất biến và phi trạng thái, đồng thời tách /etc, /var, /home và dữ liệu Docker sang các vùng ghi riêng, giúp giảm đáng kể gánh nặng cài đặt và cấu hình ban đầu
  • Hệ thống tệp dữ liệu mặc định là bộ nhớ lưu trữ tạm thời dựa trên tmpfs; khi bật tính bền vững, hệ thống sẽ tự động phát hiện thiết bị lưu trữ riêng, phân vùng, định dạng, mount và khi cần còn có thể cấu hình Btrfs RAID1
  • Sử dụng root chỉ đọc dựa trên squashfs và các thành phần tối thiểu để giảm bề mặt phơi nhiễm trước mã độc hoặc các sửa đổi ngoài ý muốn, đồng thời hạ mức sử dụng tài nguyên và điện năng tiêu thụ
  • Chỉ dành cho x86-64, chạy được trên bare metal và máy ảo, giúp bạn tập trung ngay vào việc chạy container và vận hành self-hosting thay vì quản trị máy chủ

Tổng quan

  • Đây là một hệ điều hành máy chủ Linux được thiết kế chuyên cho container Docker; khi live boot bằng ISO, bạn sẽ vào ngay môi trường Docker Engine
  • Để giảm gánh nặng cài đặt và cấu hình ban đầu, hệ thống lõi được giữ ở dạng bất biến, còn dữ liệu và các tùy biến của người dùng được tách sang vùng lưu trữ riêng
  • Hướng đến homelab, bare metal, môi trường ảo hóa, edge node và cả cluster, nhưng kiến trúc được hỗ trợ chỉ giới hạn ở x86-64
  • Ưu tiên cấu hình tối thiểu và tính dễ dùng, giúp bạn tập trung vào việc chạy và vận hành container hơn là quản trị máy chủ

Tính năng chính

  • Theo kiểu plug and play, chỉ cần tải ISO và boot là Docker Engine kèm các công cụ cần thiết đã sẵn sàng ngay
  • Tối giản thành phần để giảm gánh nặng học tập và giúp bạn nhanh chóng nắm được cách hệ thống vận hành
  • Dùng lõi bất biến và phi trạng thái để giảm bề mặt phơi nhiễm với mã độc và các thay đổi ngoài ý muốn, đồng thời mỗi lần khởi động đều trở về cùng một trạng thái
  • Cung cấp tính bền vững tùy chọn; hệ thống tệp dữ liệu mặc định là tmpfs tạm thời trong RAM, và khi bật tính bền vững thì hệ thống sẽ tự phát hiện, phân vùng, định dạng và mount thiết bị lưu trữ riêng
  • Giảm các tiến trình không cần thiết để hạ mức sử dụng tài nguyên và điện năng tiêu thụ, giúp kéo dài thời gian tận dụng các thiết bị cũ hoặc cấu hình thấp
  • Giúp việc self-hosting trở nên dễ vận hành hơn, thoát khỏi sự phụ thuộc vào Big Tech và cho phép tự quản lý dữ liệu cũng như quyền riêng tư

Cách bắt đầu

  • Có thể tải ISO mới nhất hoặc lấy image từ mục tải xuống, ghi vào USB rồi boot
  • Trên một số hệ thống, có thể cần tắt safe boot trong BIOS trước khi khởi động
  • Đăng nhập mặc định là tên người dùng op, mật khẩu opsecret; trước khi đưa máy ra Internet, tối thiểu bạn nên đổi mật khẩu
  • Wi‑Fi có thể được cấu hình tùy chọn bằng setup-wifi
  • Việc chạy container giống như dùng Docker thông thường; ví dụ sử dụng docker run -it --rm busybox ps
  • Khi kích hoạt tính bền vững, bạn phải ghi magic header vào thiết bị khối chứ không phải phân vùng, và quá trình này sẽ xóa dữ liệu hiện có

Cấu trúc khởi động và vận hành

  • ISO có thể boot trên bare metal và máy ảo, hỗ trợ cả UEFI lẫn BIOS truyền thống
  • Quá trình khởi động dùng hệ thống init kiểu sysv để giữ luồng boot đơn giản và minh bạch
  • Sau khi bootloader nạp Linux kernel và root filesystem vào bộ nhớ, kernel sẽ khởi tạo phần cứng và chuyển quyền điều khiển cho /init
  • init đọc /etc/inittab, mount tmpfs cho /tmp/run, rồi thực thi các script trong /etc/init.d
  • Ở giai đoạn đầu, data filesystem sẽ được mount để cung cấp dữ liệu Docker và lớp trên có thể ghi của overlay cho /etc, /var, /home
  • Sau khi mọi filesystem và overlay đã sẵn sàng, các dịch vụ còn lại mới được khởi động, và từ thời điểm đó có thể phục vụ container

Thiết kế bất biến

  • Root filesystem được cung cấp dưới dạng image tĩnh squashfs đã nén, có cấu trúc không thể tự sửa đổi
  • Nhờ cấu trúc này, phần mềm và cấu hình thiết yếu được đóng gói sẵn, tạo thành một image tự cung tự cấp có thể boot mà không cần quy trình cài đặt
  • Tránh được package manager, quản lý phụ thuộc và cuộc đua cập nhật với hệ thống hiện có, thay thế việc cài lại thứ vốn đã chạy được bằng một lần khởi động lại
  • Các tệp trong root filesystem không thể bị xóa nhầm hoặc bị virus chỉnh sửa, và không bị phơi ra trạng thái có thể sửa đổi toàn bộ kernel cùng các binary nền tảng như ở hệ thống truyền thống
  • Cấu trúc root chỉ đọc cũng ngăn việc tích tụ linh tinh làm hại backup, hiệu năng và tình trạng gọn gàng của hệ thống khi vận hành lâu dài
  • Bạn có thể tự do thử nghiệm trên VM cục bộ hoặc máy tính khác, rồi hoàn tác thay đổi bằng cách khởi động lại
  • Trên phương tiện khởi động không có thông tin quan trọng và trạng thái đó được duy trì nhờ tính bất biến, nên nếu thiết bị hỏng hoặc thất lạc vẫn có thể khôi phục bằng một bản sao mới

Cấu trúc tính bền vững

  • Để cài/chạy container, thay đổi cấu hình và ghi dữ liệu, cần có filesystem có thể ghi; nếu muốn giữ lại sau khi reboot thì cần bật tính bền vững
  • Một subsystem tự động chạy ở giai đoạn boot đầu sẽ mount data filesystem tại /mnt/lightwhale-data
  • Dữ liệu do Lightwhale ghi sẽ được gom dưới /mnt/lightwhale-data/lightwhale-state, và thư mục này trở thành lớp trên có thể ghi của overlayfs
  • Mặc định là tmpfs tạm thời; khi bật tính bền vững, data filesystem sẽ được chuyển sang nằm trên thiết bị lưu trữ riêng
  • Thay vì chồng lên toàn bộ root, hệ thống chỉ overlay có chọn lọc với /etc, /var, /home để giữ đúng mục tiêu của tính bất biến
    • /etc dùng cho các tùy biến cấu hình hệ thống như mạng, mật khẩu, sshd
    • /var dùng cho log và các dữ liệu ứng dụng khác
    • /home dùng cho các tùy biến của người dùng như SSH authorized keys, clone kho Git, quản lý stack Docker và Swarm
  • Data root của Docker nằm trực tiếp tại /mnt/lightwhale-data/lightwhale-state/docker, nơi lưu image, container, volume và trạng thái mạng

Kích hoạt tính bền vững và các bước xử lý tự động

  • Tính bền vững chỉ được bật rõ ràng bằng cách ghi magic header vào thiết bị lưu trữ, ví dụ echo "lightwhale-please-format-me" | sudo dd conv=notrunc of=/dev/sdx
  • Có thể ghi magic header lên nhiều thiết bị lưu trữ; khi đó chúng sẽ được kết hợp thành volume Btrfs RAID1
  • Ở lần boot tiếp theo, hệ thống sẽ phát hiện magic disk, định dạng và dùng nó làm data filesystem
  • persistence subsystem được khởi động từ /etc/init.d/S11persistence
  • Phát hiện data filesystem

    • Quét mọi đĩa để tìm phân vùng có nhãn filesystem là lightwhale-data
    • Nếu tìm thấy, hệ thống sẽ dùng nó làm data filesystem và bỏ qua các bước mount sau đó
  • Phát hiện magic disk và tạo phân vùng

    • Xác định magic disk bằng cách tìm chuỗi byte lightwhale-please-format-me ở đầu đĩa
    • Với mỗi magic disk, hệ thống sẽ tạo một phân vùng swap mang nhãn lightwhale-swap và một phân vùng Linux mang nhãn lightwhale-data sử dụng toàn bộ phần dung lượng còn lại
  • Tạo filesystem

    • Phân vùng swap magic sẽ được định dạng rồi gắn nhãn lightwhale-swap
    • Nếu chỉ có một phân vùng dữ liệu magic thì sẽ định dạng bằng btrfs --data single --metadata dup
    • Nếu có nhiều phân vùng thì chúng sẽ được ghép RAID1 và định dạng bằng btrfs --data raid1 --metadata raid1cn
    • Tạo các subvolume @lightwhale-data, @lightwhale-state, @lightwhale-state-snapshots
  • Mount và cấu hình overlay

    • Nếu có data filesystem thì mount @lightwhale-data vào /mnt/lightwhale-data, còn nếu không sẽ mount tmpfs thay thế
    • Lớp dưới bất biến sẽ bind mount /etc vào /run/lightwhale/overlay/lower/etc và chuẩn bị cây thư mục root filesystem theo dạng mirror
    • Lớp trên có thể ghi sẽ được chuẩn bị ở các đường dẫn như /mnt/lightwhale-data/lightwhale-state/overlay/upper/etc
    • Sau đó dùng overlayfs để hợp nhất hai lớp và mount vào /etc, rồi lặp lại cách tương tự cho /var, /home

Các giới hạn và điểm chính trong FAQ

  • Phần cứng được hỗ trợ là chỉ x86-64, hỗ trợ cả BIOS lẫn EFI
  • Raspberry Pi hiện chưa được hỗ trợ và đang nằm trong backlog
  • Apple M-series không được hỗ trợ ở dạng bare metal, nhưng vẫn có thể chạy ảo hóa
  • Có thể chạy trong các môi trường ảo như VMWare/ESX/Proxmox/cloud, đồng thời bao gồm guest agent cho QEMU/KVM và VMware ESXi
  • Phần mềm chỉ có thể được cài dưới dạng container Docker; không thể cài trực tiếp vào root filesystem
  • Hệ thống lõi là bất biến, nhưng cấu hình, tùy biến và dữ liệu container mặc định được ghi vào bộ nhớ và chỉ được giữ lại sau reboot khi bật tính bền vững
  • Hostname mặc định có kèm machine ID để tránh xung đột mạng; nếu đổi bằng setup-hostname thì thay đổi sẽ có hiệu lực ngay, trừ shell hiện tại
  • Không có bảo hành, và trách nhiệm về kết quả sử dụng thuộc về người dùng
  • Dự án không hướng tới việc thêm các công cụ ưa thích như wget, nano vào root filesystem, mà giữ nguyên ràng buộc của một hệ điều hành máy chủ tối thiểu chuyên biệt theo mục đích
  • Tóm tắt chính sách quyền riêng tư: không thu thập dữ liệu cá nhân; chỉ khi đồng ý với telemetry thì mới thu thập dữ liệu ẩn danh, và bạn cũng có thể xem nội dung đó
  • Việc tuân thủ các quy định liên quan đến độ tuổi không thuộc trách nhiệm của bản thân OS, mà là trách nhiệm của dịch vụ do người dùng triển khai trên đó

Liên kết liên quan

1 bình luận

 
Ý kiến trên Hacker News
  • Việc thực sự phát hành được một thứ gì đó là điều đáng chúc mừng, nhưng tôi vẫn chưa thấy rõ vì sao lại phải dùng cái này
    Đã có sẵn những lựa chọn thay thế với mục tiêu tương tự như Flatcar Container Linux, Fedora CoreOS, Talos Linux, IncusOS, và chúng có vẻ cũng có cộng đồng lẫn hậu thuẫn thương mại vững hơn
    Có lẽ cần giải thích rõ hơn điểm khác biệt thì mới thuyết phục được

    • Tôi đang dùng IncusOS trong homelab, và trải nghiệm cấu hình cũng như sử dụng thực sự rất tốt
      Tôi đã chuyển từ Proxmox sang và đang quản lý toàn bộ VM, đồng thời tận dụng mạnh các trợ lý lập trình để tự động hóa cấu hình CLI của IncusOS, chuyển image Docker-Compose sang Incus, và viết script bash để khởi tạo container mới mà vẫn thấy yên tâm ngay cả khi dùng --dangerously-skip-permissions
      Điều tôi thích nhất là có thể quản lý bằng file khai báo, nên cấu hình mạng hay thiết lập tài nguyên lúc nào cũng rất dễ nắm bắt
      Nếu cùng nhu cầu tương tự thì IncusOS rất đáng để xem thử
    • Những công cụ kiểu đó thường mất vài giờ để cấu hình, còn cái này thì chỉ cần boot lên là chạy ngay
  • Chỉ cần còn phần mềm thì không thể bỏ qua bảo trì
    Không có gì là không có lỗi, và nếu nói rằng chẳng cần nâng cấp, vá lỗi hay quản trị gì cả thì rất dễ trở thành con đường ngắn nhất dẫn tới hệ thống bị xâm nhập

    • Tôi không nghĩ OS này đang nói là không cần bảo trì
      Nó gần giống như giúp giảm đi phần lớn những việc bảo trì vốn phải lo trên một hệ thống nền truyền thống, vì 1) gần như không cài gì thêm và 2) việc nâng cấp hệ nền rất dễ, chỉ cần reboot rồi chạy lại container là xong
      Dĩ nhiên phần mềm chạy bên trên vẫn cần được nâng cấp, nhưng nếu dựa trên Docker thì layer đó thường được quản ở nơi khác, nên chỉ cần lấy container mới về rồi khởi động lại, còn OS chủ yếu đóng vai trò đảm bảo dữ liệu được gắn vào đúng vị trí
      Nếu bạn thấy ổn khi chạy mọi phần mềm bằng Docker thì nó có vẻ là một lựa chọn tiến thêm một bước so với Debian hay Redhat, đồng thời bớt phức tạp theo kiểu thủ tục hơn CoreOS
      Mức độ tiện dùng trong thực tế, nhất là ở phần quản lý lưu trữ, tôi vẫn hơi băn khoăn, nhưng ít nhất thì họ muốn bán điều gì là rất rõ ràng
    • Câu chuyện này đã được nói suốt nhiều năm nay
      Tự host thì làm được, nhưng đổi lại là bạn gần như phải tự gánh SLA cả trong thời gian rảnh ngoài giờ làm
      Vì thế từ lâu tôi đã dọn sạch mọi thứ có hơn 1 người dùng
    • Dĩ nhiên không có gì hoàn toàn không lỗi
      Nhưng việc tồn tại những dự án như Talos là có lý do
      Không terminal, không SSH, không package manager, filesystem chỉ đọc, bỏ cả systemd và giảm số lượng file thực thi xuống mức tối thiểu thì bề mặt tấn công rõ ràng sẽ nhỏ hơn
      Tôi không nói riêng về dự án này, nhưng những hệ thống vừa an toàn hơn vừa cần ít bảo trì hơn là có thật
      Dù sao cũng không thể an toàn 100%, nhưng kiểu suy nghĩ rằng vậy thì cứ YOLO nhận luôn cả npm package mới được sửa cách đây 3 phút cũng không phải lời giải
  • Khá thú vị, nhưng tôi tò mò không biết họ xử lý bản vá, nâng cấp và cả tự build ISO như thế nào
    Nhìn vào kho mã nguồn cũng gần như không thấy phần đó

    The actual repository here hosts the source code for Lightwhale, and is not of any interest for most people.

    https://bitbucket.org/asklandd/lightwhale/src/master/

    • Kho này có vẻ đã cũ
      Commit cuối là từ 2 năm trước, và có vẻ không có mã nguồn của phiên bản 3.0
  • Cái này không phải OS mà là một bản phân phối Linux à?

    • Nếu không phải Linux distro thì tôi cũng muốn hỏi ngược lại thứ gì mới được gọi là OS
  • Tôi cảm thấy mình gần như là người mới trong mảng này, nhưng đã tự host hơn 10 năm và từ khoảng 2019 thì chuyển sang Unraid
    Nó dễ dùng và cũng dễ bảo trì nhờ xoay quanh cổng web
    Tôi tò mò không biết tương tác với hệ điều hành máy chủ gia đình này sẽ như thế nào
    Nhìn trang web không có hình ảnh gì nên tôi đoán có phải mọi thứ đều phải thao tác qua terminal không

  • Tôi vừa cài Docker trên Ubuntu Server bằng một dòng lệnh và bắt đầu dùng ngay, nên chưa hiểu chính xác ở đây khác gì, giá trị cốt lõi là gì
    Tôi cũng muốn biết cụ thể bảo trì ở đây nghĩa là gì, và liệu đây có phải kiểu server được làm gọn nhẹ hơn để chạy trên phần cứng yếu hơn không
    Tôi mới bắt đầu dựng homelab nên thực sự chỉ muốn hiểu xem lợi ích của nó là gì

    • Tôi cũng làm y như vậy
      Người ta thường nói lợi thế của cách làm immutable nằm ở chuyện cập nhật: nếu lên phiên bản image mới mà có vấn đề thì chỉ cần boot lại bản cũ là quay về được
      Nhưng về mặt chức năng thì tôi cũng thấy Ubuntu Server là đủ
      Mỗi năm chỉ cần chạy apt update và nâng cấp vài lần, và chỉ truy cập nội bộ qua Tailscale
      Những OS immutable kiểu này với tôi lại hấp dẫn hơn ở laptop hay desktop thay vì homelab
      Chỉ có thư mục home là ghi được nên tôi kỳ vọng OS sẽ ổn định hơn và khó bị phá hỏng hơn
  • Tôi tò mò không biết dữ liệu container chạy trên Lightwhale thì nên được sao lưu định kỳ theo cách nào là khuyến nghị

  • Tôi không rõ lắm
    Nếu chỉ chạy Docker thì tôi không hiểu vì sao cần immutable, và cũng không hiểu vì sao phải cần một biến thể Debian đặc biệt thay vì Debian hay Ubuntu, nơi chỉ mất vài phút để dựng Docker
    Chuyện bảo trì vốn dĩ chẳng phải chỉ là quản lý kho của distro hoặc kho Docker chính thức bằng package manager hay sao
    Tôi thật sự mong cái trào lưu immutable này bớt đi, và flatpak hay snap cũng vậy
    Linux vốn dĩ từ trước đến nay đã làm được những gì các giải pháp này nói là chúng sẽ giải quyết
    Người dùng không có quyền root thì không thể động vào hệ nền, còn ứng dụng thì chỉ cần cài dependency vào /usr/lib là được

    • Với tôi thì Debian stable cùng podman/Docker đã là đủ immutable rồi
      Ngay cả khi gặp sự cố thì việc dễ tìm được trợ giúp cũng là một lớp bảo hiểm rất lớn
      Có thể làm nhỏ hơn nữa thật, nhưng khi nó đã chạy tốt cả trên phần cứng kỳ lạ như BananaPi cấu hình thấp hay RISC-V giá rẻ thì tôi không thấy có nhiều lý do để muốn thứ khác
  • Kiểu này có vẻ khá hợp với cụm Swarm mode
    Tôi không rõ họ có chỉ tập trung vào homelab không, nhưng tôi sẽ tiếp tục theo dõi
    Dự án trông rất ổn

    • Hiện giờ homelab là mảng mà mọi người dễ thử nhất nên chúng tôi chỉ quảng bá theo hướng đó
      Nhưng Lightwhale thực ra đã chạy trong production, và cũng cực kỳ phù hợp cho cụm Swarm
  • Trông cực kỳ gọn gàng
    Với góc nhìn của người mới, đây đúng là kiểu cách tiếp cận tôi cần để khỏi làm hỏng cấu hình, nên nhất định sẽ thử