15 February 2025 by

Mengenal NixOS | Part 1


Nix

GitHub - NixOS/nix: Nix, the purely functional package manager

Sebelum membahas NixOS saya akan menjelaskan apa itu Nix terlebih dahulu. Nix adalah manajer paket fungsional yang memungkinkan instalasi, pengelolaan, dan pembaruan perangkat lunak dengan cara yang deklaratif dan reproducible. Berbeda dengan manager paket seperti apt atau yang lainnya, Nix mengisolasi setiap paket di direktori uniknya sendiri di /nix/store/, ini berguna untuk mencegah konflik antar dependensi dan memungkinkan rollback dengan mudah.

Konsep utama dalam Nix
  • Berbasis Hash

        Setiap paket diinstal dalam path unik /nix/store/<hash>-<nama-paket>, dengan tujuan untuk mencegah konflik versi.

  • Deklaratif

        Paket dan lingkungan bisa didefinisikan dalam file .nix, bukan hanya dengan perintah imperatif seperti nix-env.

  • Reproducibility

        Paket selalu dibangun dengan dependensi yang eksplisit, memastikan hasil yang sama di setiap sistem.

  • Garbage Collection 
        Paket yang tidak lagi digunakan dapat dibersihkan tanpa mempengaruhi sistem.

 

NixOS

    NixOS menurut saya telah merevolusi cara mengelola sistem operasi. Kalau dilihat NixOS berakar pada prinsip pure functional programming, di mana setiap bagian sistem dideklarasikan secara eksplisit, hasilnya menjadi deterministik dan dapat direproduksi tanpa khawatir jika terjadi kesalahan. Artinya dia memposisikan sistem sebagai kode bukan perintah imperatif. 

- Deklaratif

Di distribusi Linux lain, pengaturan sistem dilakukan dengan perintah imperatif 

 

Sehingga jika saya ingin menduplikasi sistem ini di komputer lain, saya harus mengingat dan menjalankan ulang semua perintah di atas dengan urutan yang tepat. Di NixOS, sistem tidak dikonfigurasi secara imperatif, tetapi dideklarasikan dalam satu file bernama configuration.nix .

Cukup satu file ini untuk mendefinisikan seluruh konfigurasi, dan sistem akan self-healing, sehingga memastikan hanya ada satu keadaan yang valid tanpa melakukan proses manual dan tidak akan ada konfigurasi yang hilang, konfigurasi yang saling tumpang tindih dan jika sistem rusak, cukup rollback ke versi sebelumnya.

- Pure Functional

Jika di beberapa sistem operasi lain rentan terhadap "dependency hell" karena berbasis state global, di NixOS sepertinya saya tidak perlu khawatir, karena tidak akan ada "works on my machine" bug. Setiap versi paket dijamin identik di semua sistem.

misalnya : 

 

Dengan teknik diatas Python akan diinstal ke lokasi global seperti /usr/bin/python, dan semua program di sistem akan menggunakan versi yang sama. NixOS menghindari masalah ini dengan pure functional package management seperti berikut :

 

Dengan cara tersebut NixOS tidak mengganti versi Python global, tetapi menginstal Python di direktori unik berbasis hash. 

 

Setiap paket memiliki dependensi yang terisolasi sehingga :

  • Multiple versions secara bersamaan (Python 3.8, 3.10, 3.11 bisa ada tanpa konflik).
  • Reproducibility (Setiap sistem akan mendapatkan hash unik yang sama).
  • Keamanan lebih baik (Tidak ada modifikasi state global yang bisa merusak sistem).
- Reproducibility

Sebelum saya memakai NixOs saya melakukan beberapa hal jika ingin menginstal ulang sistem.

  •     Menginstal paket satu per satu.
  •     Menyesuaikan file konfigurasi secara manual.
  •     Berharap tidak ada drift atau perubahan kecil yang merusak sistem. 

Setelah saya menggunakan NixOS, saya cukup memindahkan satu file konfigurasi ke sistem baru dan menjalankan " nixos-rebuild switch ". Maka yang terjadi adalah sistem baru akan persis sama seperti sebelumnya, tidak ada perubahan yang tidak diinginkan, Backup sistem jadi lebih sederhana, migrasi server jadi lebih cepatdan semua perubahan terdokumentasi dalam kode.

- Atomicity & Rollback

Masalah yang sering saya alami pada distro linux sebelumnya adalah setiap update paket, kadang bisa menyebabkan error jika terjadi koneksi error atau ada perubahan yang belum selesai. Hasilnya? Sistem bisa rusak atau berada dalam keadaan yang tidak stabil. Di NixOS saat update sistem, perubahan hanya diterapkan jika semua proses berhasil. Dan jika gagal, sistem tetap berada dalam kondisi sebelumnya. Bahkan, saya bisa langsung rollback ke versi sebelumnya dengan " nixos-rebuild switch --rollback "

- Garbage Collection

Saat menginstal dan menghapus paket, biasanya dependensi lama bisa tetap tertinggal dan memakan ruang. Di NixOS, saya bisa membersihkan sistem dengan satu perintah " nix-collect-garbage -d ". Semua paket lama yang tidak lagi direferensikan akan dihapus otomatis, sehingga akan menghemat ruang penyimpanan dan tidak ada file konfigurasi sisa, sistem selalu bersih dan efisien.

- Immutable Infrastructure

Di server linux sebelunya, administrator sering kali mengedit file konfigurasi secara langsung, yang bisa menyebabkan drift dan konfigurasi yang tidak terdokumentasi. Di NixOS, konfigurasi hanya bisa diubah lewat configuration.nix. Semua perubahan harus dideklarasikan secara eksplisit dan diterapkan dengan nixos-rebuild switch. Artinya tidak ada konfigurasi yang berubah tanpa dokumentasi. Semua perubahan bisa direproduksi kapan saja.

Untuk perkenalan NixOS mungkin cukup sampai disini dulu. untuk berikutnya saya akan membahas beberapa hal yang telah saya coba pada NixOS yang saya pakai.

No comments:

Post a Comment