
NixOS: Quản Lý Hệ Thống Khai Báo Kiểu Functional Trên Linux
NixOS là một phân phối Linux độc đáo sử dụng ngôn ngữ khai báo Nix để quản lý toàn bộ hệ thống tập trung (centralized), đảm bảo mọi thay đổi đều reproducible, atomic và có thể rollback.
Với triết lý functional programming applied vào quản lý hệ thống, NixOS đã trở thành lựa chọn phổ biến cho developers, DevOps engineer và những ai cần reproducible environment cho phát triển phần mềm. Tài liệu chính thức tại nixos.org/learn cung cấp hướng dẫn toàn diện từ cài đặt đến nâng cao.
Tại Sao Chọn NixOS?
Hầu hết các phân phối Linux (Ubuntu, Fedora, Arch) quản lý hệ thống qua package manager truyền thống (apt, dnf, pacman) với các scripts shell imperatif. Điều này tạo ra:
- Drift hệ thống: Hai máy cài cùng package nhưng ở trạng thái khác nhau
- Rollback phức tạp: Gỡ package không sạch sẽ, dependency conflicts
- Không reproducible: Không thể tạo lại chính xác môi trường trên máy khác
- Upgrade risk: Nâng cấp package có thể phá vỡ system-wide dependencies
NixOS giải quyết tất cả vấn đề trên bằng cách:
- Lưu mọi package trong
/nix/storevới hash name duy nhất - Khai báo trạng thái hệ thống qua file
/etc/nixos/configuration.nix - Thực hiện upgrades atomic: hoặc thành công hoàn toàn hoặc không thay đổi gì
- Cho phép rollback tức thì về phiên bản hệ thống trước đó
Cách Thức Hoạt Động
Nix Store và Derivations
Mọi package trong NixOS được lưu tại /nix/store với tên chứa hash duy nhất (unique hash). Ví dụ: /nix/store/abc123-python-3.11.0 đảm bảo phiên bản package đó không bao giờ thay đổi. Derivation là script Nix mô tả cách build một package từ source, và mọi package đều reproducible.
Configuration-as-Code
Toàn bộ hệ thống được định nghĩa trong /etc/nixos/configuration.nix:
{ config, pkgs, ... }:
{
# Bootloader
boot.loader.systemd-boot.enable = true;
# Networking
networking.hostName = "my-machine";
# Desktop environment
services.xserver = {
enable = true;
desktopManager.gnome.enable = true;
};
# Users
users.users.hung = {
isNormalUser = true;
extraGroups = [ "wheel" "docker" ];
};
# System packages
environment.systemPackages = with pkgs; [
firefox neovim git docker vscode
];
# Services
services.openssh.enable = true;
virtualisation.docker.enable = true;
}
Sau khi sửa file, chạy sudo nixos-rebuild switch để áp dụng. Hệ thống sẽ build và kích hoạt cấu hình mới atomically.
Generations và Rollback
Mỗi lần rebuild, NixOS tạo một “generation” mới. Boot menu hiển thị tất cả generations và cho phép chọn phiên bản muốn boot. Rollback đơn giản:
# Rollback về generation trước
sudo nixos-rebuild switch --rollback
# Liệt kê tất cả generations
nix-env --list-generations
# Xóa generations cũ để giải phóng dung lượng
sudo nix-collect-garbage -d
Nix: Package Manager Cho Mọi Linux
Ngoài NixOS, ngôn ngữ Nix còn có thể dùng trên mọi Linux (và macOS) qua package manager nix:
# Cài đặt Nix trên Ubuntu/Fedora
curl -L https://nixos.org/nix/install | sh
# Cài package reproducible
nix-shell -p python311 nodejs cargo
# Môi trường development reproducible
nix develop .#devShells.x86_64-linux.default
Điều này cực kỳ hữu ích cho các đội ngũ phát triển cần môi trường chuẩn trên mọi máy thành viên.
Flakes: Hệ Thống Mô-Đun Hiện Đại
Nix Flakes là hệ thống module mới nhất, cung cấp:
- flake.nix: Entry point mô tả dependencies và outputs
- Inputs: Nguồn dependencies (các package, template, runner)
- Outputs: Các package, development shells, configurations
- Lock file: Đóng băng versions để đảm bảo reproducibility
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = nixpkgs.legacyPackages.${system}; in {
devShells.default = pkgs.mkShell {
buildInputs = [ pkgs.python3 pkgs.nodejs pkgs.docker ];
};
}
);
}
Chỉ cần nix develop là có toàn bộ environment reproducible giống hệt đồng nghiệp.
NixOS Cho DevOps và CI/CD
NixOS đặc biệt mạnh trong môi trường CI/CD:
- Cachix: Nguồn binary cache chia sẻ builds sẵn có
- Determinite CI: GitHub Actions sử dụng Nix cho builds reproducible
- Devbox: Toolbox xây dựng trên Nix, dễ sử dụng cho teams
- devenv: Development environment manager sử dụng Nix
Thách Thức và Đường Dốc Học Tập
NixOS có đường dốc học tập khá dốc vì:
- Ngôn ngữ Nix: Functional language không giống shell script thông thường
- Tài liệu: Hiện tại vẫn chưa đủ đầy đủ cho beginners
- Không có imperitive install: Cần thay đổi mindset từ “apt install” sang khai báo
- Debug: Hiểu cơ chế evaluation và build cần thời gian
Tuy nhiên, một khi đã làm quen, NixOS mang lại trải nghiệm quản lý hệ thống hoàn toàn khác biệt và vượt trội về reproducibility.
Kết Luận
NixOS và hệ sinh thái Nix mang đến paradigma mới trong quản lý hệ thống Linux. Với reproducibility, atomic upgrades và rollback tức thì, nó là công cụ mạnh mẽ cho developers, DevOps engineer và bất kỳ ai cần môi trường system reproducible.
Dù có đường dốc học tập steep, lợi ích dài hạn về reproducibility và khả năng quản lý hệ thống một cách khai báomakes NixOS trở thành investment đáng giá cho bất kỳ ai đang nghiêm túc về infrastructure engineering.



