Panduan ini menyiapkan NixOS minimal di VMware sampai bisa SSH, dengan akun:
nixos/nixosroot/nixos
Catatan: password ini sengaja lemah untuk VM lokal agar minim kendala.
- Unduh ISO NixOS Minimal (64-bit).
- Buat VM baru di VMware:
- Guest OS: Linux -> Other 64-bit (atau "NixOS" jika ada).
- CPU: 2, RAM: 4 GB (boleh lebih/kurang).
- Disk: 20 GB (atau sesuai kebutuhan).
- Firmware: UEFI (disarankan).
- Boot VM dari ISO NixOS.
Masuk ke root shell:
sudo -iLihat disk (contoh NVMe: /dev/nvme0n1):
lsblkContoh partisi sederhana (EFI + root) di /dev/nvme0n1:
cfdisk /dev/nvme0n1Pada saat cfdisk terbuka:
- Pilih label
gptjika diminta. - Buat:
nvme0n1p1512M type EFI Systemnvme0n1p2sisa disk type Linux filesystem
- Pilih menu
Write, ketikyes, laluQuit.
Jika muncul pesan did not write partition table to disk:
- Pastikan sudah
Writedan mengetikyes. - Pastikan disk tidak dalam keadaan read-only atau ter-mount:
Jika ada yang ter-mount, unmount dulu:
lsblk -f mount | grep nvme0n1Jika disk masih menolak ditulis, bersihkan signature lama (hati-hati, ini menghapus label/FS lama):umount /dev/nvme0n1p1 /dev/nvme0n1p2
wipefs -a /dev/nvme0n1
Format dan mount:
mkfs.fat -F 32 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
mount /dev/nvme0n1p2 /mnt
mkdir -p /mnt/boot
mount /dev/nvme0n1p1 /mnt/bootnixos-generate-config --root /mntEdit /mnt/etc/nixos/configuration.nix dan tambahkan/ubah bagian berikut:
{ config, pkgs, ... }:
{
networking.hostName = "nixos-vm";
networking.useDHCP = true;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.efi.efiSysMountPoint = "/boot";
console.keyMap = "us";
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = true;
PermitRootLogin = "yes";
};
};
users.users.nixos = {
isNormalUser = true;
extraGroups = [ "wheel" ];
initialPassword = "nixos";
};
users.users.root.initialPassword = "nixos";
}Jika keyboard layout tidak cocok saat instalasi (misal tombol tidak sesuai):
loadkeys usGanti us dengan layout lain bila perlu (misal id).
nixos-install
rebootKeluarkan ISO dari VM saat reboot agar boot dari disk.
Jika muncul Out of memory (OOM), biasanya RAM VM terlalu kecil.
Solusi cepat:
- Naikkan RAM VM ke minimal 2–4 GB.
- Tambahkan swap sementara sebelum
nixos-install:fallocate -l 2G /mnt/swapfile chmod 600 /mnt/swapfile mkswap /mnt/swapfile swapon /mnt/swapfile free -h
- Kurangi paralel build:
nixos-install --cores 1 --max-jobs 1
Jika VM gagal boot EFI:
- Pastikan firmware VM diset ke UEFI dan bukan BIOS.
- Pastikan ISO sudah dilepas setelah instalasi.
- Pastikan partisi EFI ter-mount ke
/bootsaat install. - Rebuild konfigurasi dan reinstall bootloader:
nixos-install
- Jika masih gagal, cek di console VMware:
- Gunakan menu VMware
Send Ctrl+Alt+Deluntuk reboot. - Periksa
lsblk -fapakahnvme0n1p1bertipevfat.
- Gunakan menu VMware
Format error configuration.nix:143:1 artinya:
- File:
/mnt/etc/nixos/configuration.nix - Baris: 143
- Kolom: 1 (awal baris)
Cara cek baris itu:
nl -ba /mnt/etc/nixos/configuration.nix | sed -n '143p'Atau buka editor dan lompat ke baris 143 (misal di nano):
nano +143 /mnt/etc/nixos/configuration.nixIni hampir selalu berarti ada baris yang kurang ; atau blok { ... }/( )/[ ] tidak tertutup.
Lakukan cek cepat:
nl -ba /mnt/etc/nixos/configuration.nix | sed -n '130,150p'Checklist perbaikan:
- Pastikan setiap assignment berakhir dengan
;:- Contoh benar:
services.openssh.enable = true;
- Contoh benar:
- Pastikan setiap
{punya pasangan}. - Pastikan setiap
[punya pasangan]. - Pastikan tidak ada baris
}atau]yang hilang setelah menambahkan blok.
Contoh yang sering salah:
users.users.root.initialPassword = "nixos" # salah: kurang ;Perbaiki menjadi:
users.users.root.initialPassword = "nixos";Login di console VM sebagai nixos (password nixos), lalu cek IP:
ip aDari host, lakukan SSH:
ssh nixos@<IP_VM>
ssh root@<IP_VM>Salin script dari host ke VM (contoh menggunakan scp):
scp /path/ke/script.sh nixos@<IP_VM>:/home/nixos/Masuk ke VM dan jalankan:
ssh nixos@<IP_VM>
chmod +x /home/nixos/script.sh
/home/nixos/script.shGanti /path/ke/script.sh dan script.sh sesuai nama script yang dimaksud.
Jika ingin mengirim folder efa ke /home/nixos/ di VM (contoh IP 172.16.247.134):
scp -r /path/ke/efa root@172.16.247.134:/home/nixos/Alternatif lebih cepat dan bisa resume (rsync):
rsync -av --progress /path/ke/efa/ root@172.16.247.134:/home/nixos/efa/rsync -av --progress efa/ root@172.16.247.134:/home/nixos/efa/Setelah folder efa sudah ada di VM/host, jalankan build sesuai arsitektur:
x86_64 (Intel/AMD):
nix --extra-experimental-features "nix-command flakes" \
build .#nixosConfigurations.efaVm.config.system.build.vmARM/aarch64 (Apple Silicon/ARM64):
nix --extra-experimental-features "nix-command flakes" \
build .#nixosConfigurations.efaVmAarch64.config.system.build.vmJalankan VM:
./result/bin/run-efa-vmJika muncul error:
failed to initialize kvm: VM host tidak punya KVM (nested virt). QEMU akan fallback ke TCG (lebih lambat) tapi tetap bisa jalan.cannot set up guest memory: RAM host kurang. Kurangi RAM VM di flake:efaVmAarch64sudah diset 1024 MB.- Jika masih gagal, turunkan lagi (misal 768).
gtk initialization failed: VM berjalan tanpa GUI. Untuk ARM, diset headless otomatis. Rebuild lalu run ulang.
Jika VM tidak boot, semua port (25/80/443/587) tidak akan listen. Pastikan VM benar-benar jalan dulu baru cek port.
run-efa-vm membuat VM baru di dalam VM (nested). Jika tidak sengaja jalan, hentikan:
- Kembali ke terminal yang menjalankan
run-efa-vmlalu tekanCtrl+C. - Jika masih jalan, matikan proses QEMU:
pkill -f qemu-system-aarch64 pkill -f qemu-system-x86_64
- Pastikan sudah berhenti:
pgrep -a qemu-system-aarch64 pgrep -a qemu-system-x86_64
- Jika kamu masih berada di konsol QEMU:
- Tekan
Ctrl+AlaluXuntuk keluar dari QEMU.
- Tekan
Kalau tujuanmu install & menjalankan eFa langsung di VM sekarang, pakai:
nix --extra-experimental-features "nix-command flakes" \
nixos-rebuild switch --flake .#efaUntuk ARM/aarch64:
nix --extra-experimental-features "nix-command flakes" \
nixos-rebuild switch --flake .#efaAarch64Setelah itu, cek layanan & port:
systemctl status postfix rspamd nginx mariadb
ss -lntpJika muncul error nixos-rebuild is not a recognised command:
- Kamu bukan sedang di NixOS (misal Arch/Ubuntu).
nixos-rebuildhanya ada di NixOS. - Solusinya: jalankan di VM NixOS (setelah instal NixOS), atau gunakan
run-efa-vmuntuk testing.
Catatan penting: nixos-rebuild bukan subcommand nix. Jalankan langsung seperti ini:
sudo nixos-rebuild switch --flake .#efaUntuk ARM:
sudo nixos-rebuild switch --flake .#efaAarch64Jika muncul error fileSystems/boot.loader.grub.devices/ACME:
-
Konfigurasi fileSystems (wajib):
Opsi A: Import hardware configuration (paling mudah):
mkdir -p /home/nixos/efa/hosts sudo cp /etc/nixos/hardware-configuration.nix /home/nixos/efa/hosts/nixos-vm.nix
flake.nixsudah otomatis meng‑include./hosts/nixos-vm.nixjika file ada.Opsi B: Customize langsung di flake.nix:
- Cari UUID disk dengan:
lsblk -fataublkid - Edit
flake.nix, bagianfileSystemsdi konfigurasiefa - Ganti
CHANGE-THIS-TO-YOUR-ROOT-UUIDdanCHANGE-THIS-TO-YOUR-EFI-UUIDdengan UUID aktual
Opsi C: Gunakan helper script:
./scripts/find-disk-uuids.sh
Lalu edit
flake.nixatau buathosts/nixos-vm.nixberdasarkan template dihosts/nixos-vm.nix.example - Cari UUID disk dengan:
-
ACME: Jika belum punya email/SSL, matikan dulu:
efa.web.enableACME = false; efa.web.forceSSL = false;
Atau set email & terms:
security.acme.defaults.email = "you@example.com"; security.acme.acceptTerms = true;
-
Jika masih muncul error
boot.loader.grub.devices:- Pastikan
boot.loader.systemd-boot.enable = true; - Pastikan
boot.loader.efi.canTouchEfiVariables = true; - Pastikan
boot.loader.efi.efiSysMountPoint = "/boot";
- Pastikan
Untuk instal lokal cepat, efa.database.bootstrapSecrets = true; akan membuat
password default (nixos) di /run/secrets/*-db-pass jika belum ada.
Jika kamu menjalankan run-efa-vm (VM QEMU), login konsolnya:
root/nixos- atau
nixos/nixos
Jika login masih incorrect, pastikan kamu:
- Sync repo terbaru ke VM.
- Rebuild
efaVmAarch64/efaVm. - Jalankan ulang
run-efa-vm.
Akses UI eFa:
- Jika pakai
run-efa-vm(port forward di host):http://localhost:8080/https://localhost:8443/
- Jika pakai VM biasa (bukan VM nested), buka:
http://<IP_VM>/https://<IP_VM>/
Jika muncul Failed to start PHP FastCGI Process Manager service for pool mailwatch:
- Ini bukan masalah login; itu service PHP‑FPM MailWatch yang belum start.
- Untuk detail di VM QEMU:
systemctl status phpfpm-mailwatch.servicedanjournalctl -u phpfpm-mailwatch. - Jika tujuanmu adalah menjalankan eFa di VM utama, hentikan
run-efa-vmdan pakai langkah di bagian 11.
Jika ada error The HOME or COMPOSER_HOME environment variable must be set:
- Pastikan repo terbaru tersync (module sudah set
HOMEdanCOMPOSER_HOME). - Rebuild:
sudo nixos-rebuild switch --flake .#efaAarch64
Jika masih gagal karena symfony-cmd/auto-scripts:
- Composer sekarang dijalankan dengan
--no-scripts. - Alternatif: matikan composer penuh dengan set:
efa.web.efaInitRunComposer = false;
Sering terjadi karena resource kecil di VM. Untuk ARM kami override buffer InnoDB ke 256M. Jika masih gagal:
- Lihat log:
systemctl status mysql journalctl -u mysql -b
- Reset data dir (menghapus data lama, hanya lakukan jika masih baru):
sudo systemctl stop mysql sudo rm -rf /var/lib/mysql sudo systemctl start mysql
Jika log menunjukkan error Cannot change ownership of .../lib/mysql/plugin/...:
- Modul MariaDB sekarang menyalin plugin ke
/var/lib/mysql/plugin(writeable). - Sync repo terbaru lalu
sudo nixos-rebuild switch --flake .#efaAarch64. Jika log menunjukkanskip-host-cachedengan argumen: - Hapus konfigurasi legacy
/etc/my.cnfatau/etc/my.cnf.d/mariadb-server.cnf. - Ini sekarang dilakukan otomatis saat
nixos-rebuild.
- Lihat log detail:
systemctl status rspamd journalctl -u rspamd -b
- Validasi konfigurasi:
rspamd -t -c /etc/rspamd/rspamd.conf
- Jika perlu sementara (agar sistem stabil), matikan Rspamd:
lalu
efa.rspamd.enable = false;
sudo nixos-rebuild switch --flake .#efaAarch64.