- Beranda
- Linux dan OS Selain Microsoft & Mac
NixOS & Nix Package Manager: Reproducible, Declarative, Reliable
...
TS
User telah dihapus
NixOS & Nix Package Manager: Reproducible, Declarative, Reliable
Quote:
Halo Agan-Sista penghuni subforum Linux dan OS Selain Microsoft & Mac, di sini saya ingin memperkenalkan dan membuka wadah diskusi (berhubung saya cari belum ada di Kaskus ini) bagi OS berbasis kernel Linux yang sebenarnya sudah cukup lama beredar, tapi baru naik daun akhir-akhir ini di beberapa komunitas dan menarik perhatian saya untuk distro hopping ke sini karena keunikan dari segi manajemen sistemnya. Perkenalkan, NixOS.
Quote:
Berkenalan dengan NixOS
NixOSadalah distro Linux yang menggunakan sistem pengelolaan paket (package management system) dan sistem bangun (build system) Nix. NixOS mendukung manajemen pengaturan sistem deklaratif yang reproducible. Deklaratif di sini artinya manajemen sistem dilakukan dengan mendeklarasikan suatu variabel dengan nilai tertentu di berkas konfigurasi (config file), sedangkan reproducible berarti berkas konfigurasi ini bisa dibawa ke sistem lain dan bekerja di sana tanpa perubahan atau dengan perubahan yang minimal.
Selain dukungan di atas, NixOS juga mendukung pembaruan sistem secara atomic, yang berarti pembaruan dilakukan berdasarkan unit terkecil yang dimiliki oleh sistem atau paket yang dilakukan pembaruan. Tidak hanya pembaruan, NixOS pun mendukung gulir balik (rollback) yang juga berlaku secara atomic, sehingga apabila ada masalah yang ditimbulkan oleh proses pembaruan, pengguna dapat menggulir sistem kembali ke posisi sebelum pembaruan dilakukan.
Pada NixOS, semua komponen - termasuk kernel, paket yang terpasang, dan berkas-berkas konfigurasi sistem - dibangun oleh Nix dari fungsi murni yang disebut "Nix expressions".
Pengelola paket Nix menggunakan teknik "binary caching", yang menawarkan titik tengah (kompromi) di antara solusi "binary-oriented" seperti Debian dan solusi "source-oriented" seperti Gentoo. Paket binary dapat digunakan untuk komponen standar dan kompilasi dari kode sumber juga dapat digunakan apabila paket binary yang sudah jadi tidak tersedia.
NixOS terdiri dari rilis poin (point release) yang dirilis setahun dua kali dan rilis bergulir (rolling release) yang selalu tersedia sepanjang tahun. NixOS dibuat oleh Eelco Dolstra dan Armijn Hemel, dirilis pertama kali pada tahun 2003 silam, dan dikembangkan oleh komunitas serta dipelihara di bawah naungan NixOS Foundation.
Sebagian besar dari tulisan ini disadur dari https://nixos.wiki/wiki/Overview_of_...x_distribution
Quote:
Poin-Poin Penting dari NixOS dan Nix Package Manager

Reproducible
Nix membangun setiap paket dalam lingkungan terisolasi, yang menjamin mereka dapat direproduksi dan tidak memiliki dependensi tersembunyi. Jadi, jika suatu paket bisa berjalan pada satu mesin, paket tersebut juga akan bisa berjalan pada mesin lainnya.
Declarative
Nix memudahkan untuk membagikan lingkungan pengembangan dan pembangunan(development and build enviromnent) projek Anda, tidak peduli apa bahasa pemrograman dan alat yang Anda gunakan.
Reliable
Nix menjamin bahwa memasang atau memperbarui satu paket tidak dapat mengganggu paket lainnya. Dengan Nix, Anda dapat melakukan gulir balik ke versi sebelumnya, dan menjamin tidak ada paket yang dalam kondisi tidak konsisten saat proses pembaruan.
Quote:
Mengunduh dan Memasang NixOS/Nix Package Manager
https://nixos.org/download.html
Ada dua pilihan:
1. Menggunakan pengelola paket Nix pada sembarang distro Linux yang menggunakan sistem init systemd.
2. Menggunakan NixOS di mesin virtual atau bare metal
Karena jiwa distro-hoppingsaya sedang bergairah, saat ini saya memilih opsi kedua.
Ada beberapa pilihan ISO NixOS yang bisa dicoba:
1. Live ISO dengan lingkungan desktop GNOME untuk Intel/AMD 64-bit
2. Live ISO dengan lingkungan desktop GNOME untuk ARM 64-bit
3. Live ISO dengan lingkungan desktop Plasma untuk Intel/AMD 64-bit
4. Live ISO dengan lingkungan desktop Plasma untuk ARM 64-bit
5. Minimal ISO untuk Intel/AMD 64-bit
6. Minimal ISO untuk ARM 64-bit
Agan dapat memilih Live ISO jika ingin merasakan NixOS terlebih dahulu sebelum/tanpa memasangnya ke diska.
Baik Live ISO maupun Minimal ISO membutuhkan koneksi internet untuk proses instalasi, jadi pastikan Agan memiliki akses ke koneksi internet, baik secara perangkat keras maupun secara jaringan.
Oh iya, walaupun Live ISO memiliki lingkungan desktop tertentu, Agan dapat memilih lingkungan desktop yang diinginkan saat proses instalasi.
Tutorial instalasi sistem secara minimal ada di REPLY #4
Tutorial instalasi dengan lingkungan desktop, menyusul gan

UNDER CONSTRUCTION
Quote:
Konfigurasi Nix
Konfigurasi Nix pada sistem NixOS terletak di `/etc/nixos/configuration.nix`. Agan dapat mengubah berkas teks ini sebagai root/superuser untuk menkonfigurasi sistem NixOS Agan.
Contoh konfigurasi yang lengkap bisa dicek di https://nixos.wiki/wiki/Configuration_Collection.
Setelah mengubah berkas konfigurasi, eksekusi perintah ini sebagai superuser untuk menetapkan perubahan:
Code:
# nixos-rebuild switch
Beberapa perubahan mungkin membutuhkan koneksi internet!
Quote:
Repositori Nix
Repositori Nix/NixOS dikelola dengan perintah `nix-channel`. Misal untuk menampilkan repositori yang dipakai, gunakan perintah:
Code:
# nix-channel --list
Agan akan melihat repositori yang dipakai, contoh:
Code:
nixos https://nixos.org/channels/nixos-23.05
Contoh di atas apabila Agan memasang NixOS versi rilis poin 23.05. Misalkan Agan mau pindah ke rilis bergulir unstable, gunakan perintah:
Code:
# nix-channel --add https://nixos.org/channels/nixos-unstable nixos
Lalu, eksekusi perintah ini untuk menetapkan perubahan tersebut:
Code:
# nixos-rebuild switch --upgrade
Tunggu beberapa saat, dan sistem Agan sudah terbaharui ke rilis bergulir!
Quote:
Memasang Paket di NixOS
Agan akan menemukan blok kode seperti ini di berkas konfigurasi:
Code:
{
...
environment.systemPackages = with pkgs; [
# nama paket di sini
];
...
}Di dalam blok `environment.systemPackages`, Agan dapat menambahkan paket yang Agan butuh terinstal secara system-wide.
Atau, jika yang Agan butuhkan adalah paket yang terinstal untuk satu pengguna, cari blok kode seperti ini:
Code:
{
...
users.user.namaUserAgan = {
# konfigurasi lainnya
packages = with pkgs; [
# nama paket di sini
];
};
...
}Di dalam braket kotak setelah `packages` itulah Agan mengisi nama paket yang dibutuhkan.
Setelah mengubah `configuration.nix`, jangan lupa untuk mengaplikasikannya.
Code:
# nixos-rebuild switch --upgrade
Alternatif lain untuk satu pengguna, bisa dengan memanfaatkan Home Manager
Quote:
Home Manager
Home Manager adalah projek untuk menangani pengelolaan paket dan dotfilesuntuk satu pengguna di Nix.
Detail mengenai Home Manager bisa Agan baca di https://github.com/nix-community/home-manager
Cara instalasi Home Manager di NixOS bisa Agan baca di https://nix-community.github.io/home...all-standalone
Berkas konfigurasi Home Manager ada di `/home/<nama user Agan>/.config/home-manager/home.nix`.
Untuk menambah paket baru untuk satu user, dapat ditambah di dalam blok ini:
Code:
{
...
home.packages = with pkgs; [
# tambah nama paket di sini
];
...
}Untuk mengaplikasikan perubahan di berkas konfigurasi Home Manager, eksekusi perintah ini sebagai pengguna biasa:
Code:
$ home-manager switch
Manajemen dotfiles, nanti ya, saya juga masih belajar.
UNDER CONSTRUCTION
Quote:
Kesimpulan
NixOS menawarkan keunikan bukan di segi tampilan, tapi di segi manajemen paket dan sistem yang inovatif, serta proses pembaruan dan gulir balik yang atomic. Kalau Agan merasa bosan dengan manajemen paket yang ada di distro Linux yang Agan pakai, boleh dicoba nih NixOS.
Mari diskusi di sini Gan sesama pengguna NixOS

Diubah oleh User telah dihapus 23-06-2023 23:41
Benyamin90 dan User telah dihapus memberi reputasi
2
2.8K
Kutip
19
Balasan
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Linux dan OS Selain Microsoft & Mac
4.5KThread•2.8KAnggota
Tampilkan semua post
TS
User telah dihapus
#4
Quote:
Tutorial Instalasi NixOS (dari Minimal ISO)
Karena Live ISO sudah ada installerberbasis GUI yang tinggal next-next saja, mungkin kurang "menantang" bagi sebagian orang. Oleh karena itu, saya akan memberi tutorial untuk instalasi dengan Minimal ISO

Sebagian tulisan dari tutorial ini disadur dari https://nixos.org/manual/nixos/stabl...h-installation.
Asumsi dan batasan yang dibuat untuk tutorial instalasi ini adalah sebagai berikut.
- Tutorial instalasi ini dibuat berdasarkan instalasi ke mesin virtual QEMU/KVM. Beberapa langkah mungkin harus disesuaikan jika instalasi dilakukan dengan target bare metal.
- Mesin virtual yang digunakan telah dikonfigurasi untuk menggunakan firmware UEFI, jika Agan menggunakan BIOS mohon membaca tautan di atas untuk informasi lebih lanjut.
- Tutorial ini dipraktikkan dengan NixOS versi 23.05 (kernel Linux versi 6.1 LTS). Pastikan perangkat keras yang Agan punya (terutama networking untuk koneksi Internet) kompatibel.
- Agan harus sudah tahu cara menggunakan file ISO untuk instalasi sistem operasi. Entah di-mount ke mesin virtual atau di-burn ke media instalasi seperti keping diska atau USB pendrive.
- Tutorial ini dilakukan pada penyimpanan yang kosong dan tidak membahas cara multi-boot dengan sistem operasi lain.
Unduh ISO-nya dari tautan di OP. Untuk sebagian besar sistem yang ada sekarang bisa memilih Minimal ISO yang 64-bit Intel/AMD.
Boot ISO-nya, dan akan muncul tampilan seperti ini (spoiler 1):
Spoiler for 1:
Tekan Enter saja, dan Agan akan diarahkan ke tampilan konsol (spoiler 2).
Spoiler for 2:
Jika Agan butuh bantuan di tampilan konsol ini, perintah `nixos-help` mungkin berguna.
Untuk Agan yang melakukan instalasi dengan memanfaatkan jaringan Wi-Fi, dapat mengkonfigurasi koneksi internet dengan `wpa_cli`. Langkah-langkahnya kira-kira seperti yang ada di manual (spoiler 3).
Spoiler for 3:
Jalankan`wpa_cli`, kemudian ikuti langkah-langkah ini (ganti "myhomenetwork" dan "mypassword" dengan SSID dan password Wi-Fi Agan)

Jika sudah berhasil, jalankan `quit` untuk keluar

Jika sudah berhasil, jalankan `quit` untuk keluar
Jalankan `lsblk` untuk melihat konfigurasi diska penyimpanan Agan (spoiler 4).
Spoiler for 4:
Di sini terlihat penyimpanan utama sistem ini adalah `vda`. Sesuaikan dengan output yang tertera di sistem Agan.
Jalankan `cfdisk /dev/<namaPenyimpanan>` (misal `cfdisk /dev/vda`) untuk mempartisi penyimpanan Agan. Pilih "gpt" (sesuai batasan tutorial ini) kan muncul tampilan seperti pada spoiler 5.
Spoiler for 5:
Buat partisi EFI dengan memilih "New" > ketik "512M". Setelah itu, sembari partisi yang baru dibuat ter-highlight, pilih "Type" > pilih "EFI System".
Setelah itu, buat partisi `root` dan/atau `home` (jika Agan menginginkan partisi `home` terpisah, maka buatlah secara terpisah. Jika tidak, cukup buat partisi `root`) dan atur tipenya menjadi "Linux Filesystem". Kalau perlu, buat juga partisi `swap` dengan ukuran secukupnya dan atur tipenya menjadi "Linux Swap"
Hasilnya kurang-lebih seperti di dalam spoiler 6.
Spoiler for 6:
Pilih "Write" untuk menulis konfigurasi partisi, kemudian "Quit" untuk keluar.
Cek lagi partisi yang sudah dibuat dengan `lsblk` (spoiler 7).
Spoiler for 7:

Partisi yang dibuat sebelumnya terdiri dari `/dev/vda1` (partisi EFI), `/dev/vda2` (partisi root), dan `/dev/vda3` (partisi swap)
Format partisi EFI
Code:
$ sudo mkfs.vfat -F 32 /dev/vda1
Format partisi root
Code:
$ sudo mkfs.ext4 /dev/vda2
Format partisi swap
Code:
$ sudo mkswap /dev/vda3
Seperti di spoiler 8.
Spoiler for 8:
Kemudian, proses mounting. Pertama, mountpartisi root di `/mnt`:
Code:
$ sudo mount /dev/vda2 /mnt
Kedua, buat direktori untuk partisi EFI/boot:
Code:
$ sudo mkdir /mnt/boot
Ketiga, mountpartisi EFI pada direktori yang baru dibuat:
Code:
$ sudo mount /dev/vda1 /mnt/boot
Jika ada partisi swap, aktifkan:
Code:
$ sudo swapon /dev/vda3
Cek lagi dengan `lsblk` untuk memastikan proses mountingsudah benar (spoiler 9).
Spoiler for 9:
Berikutnya, lakukan generasi berkas konfigurasi dengan menjalankan:
Code:
$ sudo nixos-generate-config --root /mnt
Langkah ini akan membuat berkas teks `/mnt/etc/nixos/configuration.nix` yang mungkin harus kita sunting sebelum mengeksekusi instalasi. Jalankan
Code:
$ sudoedit /mnt/etc/nixos/configuration.nix
Beberapa baris/blok kode yang mungkin harus diubah , misalnya:
- `networking.wireless.enable` untuk dapat mengkonfigurasi jaringan nirkabel dengan wpa_supplicant, ATAU `networking.networkmanager.enable` untuk NetworkManager. Jika Agan menggunakan Wi-Fi, saya rekomendasi menggunakan NetworkManager. Jika Agan menggunakan koneksi kabel Ethernet, USB tethering, atau koneksi virtual (seperti di mesin virtual), Agan dapat membiarkan keduanya ter-comment.
- `time.timeZone` untuk menentukan zona waktu. Uncommentdan isi dengan zona waktu Agan, misal "Asia/Jakarta"
- `services.xserver.enable = true;` untuk mengaktifkan layanan X (untuk GUI). Jika Agan berniat memasang lingkungan desktop (desktop environment) dari sekarang, uncomment baris ini.
- `sound.enable = true;` untuk mengaktifkan keluaran suara. Opsi ini harus dikombinasikan dengan layanan peladen keluaran suara seperti PulseAudio seperti yang ada di baris `hardware.pulseaudio.enable = true;`. Jika Agan memasang lingkungan desktop dan ingin ada keluaran suara, uncomment kedua baris ini. KECUALI jika Agan ingin menggunakan peladen PipeWire yang lebih baru (misal untuk lingkungan desktop GNOME atau pengatur jendela SwayWM), baris pulseaudio di atas tidak berlaku dan ada blok kode yang perlu ditambahkan lagi.
- `service.xserver.libinput.enable = true;` untuk mengaktifkan dukungan pada perangkat touchpad laptop. Jika Agan mau menggunakan gestur pada touchpad laptop Agan, uncomment baris ini.
- `users.users.alice = { ... }` blok ini adalah untuk menambahkan akun pengguna biasa pada instalasi. nama "alice" bisa diganti sesuai preferensi Agan.
Opsi lain pada blok ini:
1. `isNormalUser = true;` = uncomment saja
2. `extraGroups = [ "wheel" ];` = uncomment dan tambahkan grup yang diperlukan, misal "networkmanager" (jika Agan menggunakan NetworkManager, tambahkan grup ini), "audio", "video", "input", dsb. "wheel" jangan dihapus kalau Agan mau pengguna tersebut bisa menggunakan `sudo`
3. `packages = with pkgs; [ ];` = ini untuk menambahkan paket khusus untuk pengguna tersebut. Pada tutorial kali ini saya biarkan ini ter-comment
Jangan lupa uncomment braket di bawahnya.
- `environment.systemPackages = with pkgs; [ ];` untuk menambahkan paket yang akan terpasang secara system-wide. Saya contohkan untuk memasang `vim` dan `wget`.
Contoh punya saya ada di spoiler 10:
Spoiler for 10:
Yang lainnya, bisa Agan eksplorasi sendiri.
Kalau sudah, save and exit.
Untuk memasang NixOS berdasarkan konfigurasi tersebut, jalankan
Code:
$ sudo nixos-install
Kalau berkas konfigurasi dan koneksi internet Agan tidak bermasalah, tinggal tunggu hingga selesai.
Saat proses instalasi berada di penghujungnya, Agan akan diminta sandi untuk `root`. Masukkan.
Spoiler for 11:
Instalasi selesai. Jalankan:
Code:
$ sudo reboot
untuk memulai ulang sistem. Pastikan sistem bootke instalasi baru kita, bukan ke media instalasi lagi.
Login dengan nama pengguna `root` dan sandi yang dibuat tadi. Lalu tambahkan sandi untuk pengguna biasa yang kita definisikan di berkas konfigurasi tadi
Code:
# passwd namaUserAgan
Spoiler for 12:
Selesai! Agan bisa mengetik `exit` untuk keluar dari akun root dan masuk dengan akun pengguna biasa yang sandinya Agan buat tadi.
Berikutnya, instalasi lingkungan desktop (menyusul)
Diubah oleh User telah dihapus 23-06-2023 23:36
User telah dihapus memberi reputasi
1
Kutip
Balas