Saya perlu memasang Ubuntu 24.04 pada tiga server Dell R440 untuk lab OpenStack dan Kubernetes saya, tanpa berdiri di depan rak. Lesen iDRAC pada server ini ialah Express, yang tidak termasuk virtual console. Tetapi ia tidak diperlukan: PXE boot ditambah kawalan kuasa IPMI sudah mencukupi, dan itulah yang MAAS (Metal as a Service) lakukan.

Catatan ini merekod setup MAAS satu mesin (region dan rack controller bersama) dengan PostgreSQL dalam Docker.

Ringkasan (empat arahan utama)

sudo systemctl enable --now snapd
sudo snap install maas
sudo maas init region+rack --maas-url http://<maas-host>:5240/MAAS
sudo maas createadmin --username <admin> --email <email>

Di antara arahan kedua dan ketiga, MAAS perlukan pangkalan data PostgreSQL. Bahagian itu diterangkan di Langkah 2 (kaedah maas init di atas ialah versi ringkas).

Prasyarat

  • Satu host Ubuntu 24.04 dengan SSH dan sudo
  • iDRAC ketiga-tiga server Dell boleh dicapai dari rangkaian itu
  • Pengguna dan kata laluan IPMI iDRAC (tahap admin)
  • Alamat MAC bagi NIC yang digunakan untuk PXE boot
  • Pada switch, NIC PXE mesti berada pada L2 yang sama dengan host MAAS

Jangan simpan kata laluan iDRAC dalam nota atau dokumen. Simpan dalam password manager, dan beri kepada MAAS hanya melalui borang atau pembolehubah persekitaran.


Langkah 1 — Pasang MAAS

sudo systemctl enable --now snapd
sudo snap install maas
snap list maas          # versi 3.x = OK

Guna pakej snap rasmi. Semua image MAAS dalam Docker yang saya temui (dari sekitar 2018, versi 2.x) sudah EOL, jadi jangan gunakannya.

Langkah 2 — PostgreSQL dalam Docker

MAAS memerlukan PostgreSQL. Saya jalankan postgres:16 dalam Docker pada host yang sama, dengan volume supaya data kekal.

cd ~/docker/maas-postgres && docker-compose up -d

docker inspect --format '{{.State.Health.Status}}' maas-postgres   # ulang sehingga "healthy"

Beberapa pilihan yang disengajakan:

  • Kelayakan disimpan dalam .env (chmod 600): pengguna maas, pangkalan data maas, dan kata laluan rawak 32-hex
  • PostgreSQL bind ke 127.0.0.1:5432 sahaja, tidak terdedah ke LAN
  • Data berada dalam volume bernama, jadi kekal apabila container restart

Langkah 2b — Init region dan rack controller

cd ~/docker/maas-postgres
sudo maas init region+rack --maas-url http://<maas-host>:5240/MAAS \
  --database-uri "postgres://$(grep POSTGRES_USER .env | cut -d= -f2):$(grep POSTGRES_PASSWORD .env | cut -d= -f2)@127.0.0.1:5432/$(grep POSTGRES_DB .env | cut -d= -f2)"
sudo maas status        # semua service mesti "running"

Subshell $(grep ...) membaca kata laluan dari .env, jadi ia tidak masuk ke shell history.

Langkah 3 — Cipta pengguna admin

sudo maas createadmin --username <admin> --email <email>

Ia akan meminta kata laluan (taip sendiri) dan sama ada mahu import kunci SSH (boleh skip dahulu).

Langkah 4 — Simpan API key

Supaya skrip dan CLI boleh mengkonfigurasi MAAS tanpa sudo setiap kali:

echo "MAAS_API_KEY=$(sudo maas apikey --username <admin>)" > ~/.env.maas && chmod 600 ~/.env.maas

Format kunci ialah login:key:secret. Ia rahsia.

Langkah 5 — Sahkan Web UI

Buka http://<maas-host>:5240/MAAS, log masuk, dan dashboard kosong bermakna sedia.


Langkah 6 — Subnet dan DHCP (titik keputusan)

Adakah VLAN ini sudah ada DHCP server?

  • Tiada → hidupkan MAAS managed DHCP pada VLAN itu (paling mudah).
  • Ada (contohnya router) → jangan hidupkan DHCP MAAS pada subnet yang sama, kerana ia akan bertembung. Gunakan subnet khusus untuk PXE, atau mod proxyDHCP.

Melalui UI (paling selamat):

  1. Subnets → pilih subnet; tetapkan Gateway IP dan DNS (DNS menunjuk ke host MAAS).
  2. Tab VLAN → Enable DHCP (Managed) → simpan.
  3. Reserved ranges → tambah julat dinamik (contohnya .200–.250) yang tidak bertindih dengan IP statik sedia ada.

Pengesahan: DHCPACK muncul dalam event log MAAS apabila node boot.

Langkah 7 — Daftar BMC / mesin

Melalui UI: Machines → Add chassis → pilih IPMI, isi alamat iDRAC, pengguna dan kata laluan. Atau melalui CLI:

maas login <profile> http://<maas-host>:5240/MAAS      # masukkan API key
maas <profile> machines create \
  mac_addresses="<MAC_PXE_NIC>" \
  power_type=ipmi \
  power_parameters_power_address=<idrac-ip> \
  power_parameters_power_user=<ipmi_user> \
  power_parameters_power_pass=<ipmi_pass>

Langkah 8 — Commission

Machines → pilih ketiga-tiga server → Actions → Commission.

Apa yang berlaku: MAAS boot node ke OS ephemeral, mengumpul inventori perkakasan (CPU, RAM, disk, NIC), mendaftarkannya, kemudian mematikan node. Ia mengambil sekitar 10–15 minit setiap node. Status bertukar kepada Ready apabila berjaya.

maas <profile> machines read | jq '.[] | {system_id, hostname}'
maas <profile> machine commission <system_id>

Langkah 9 — Deploy Ubuntu 24.04

  1. Images → Ubuntu 24.04 LTS → fetch (sekali sahaja, sekitar 1 GB).
  2. Machines → pilih server → Actions → Deploy → Ubuntu 24.04.
  3. MAAS memasang melalui curtin secara tanpa pemantauan, jadi tiada skrin diperlukan.

Selepas siap: ssh ubuntu@<ip-server> dengan kunci SSH yang diimport.


Troubleshooting

MasalahPuncaPenyelesaian
maas init gagal atau port 5240 tidak terbukaFirewall (ufw pada Ubuntu)sudo ufw allow 5240/tcp; semak ss -tlnp
PXE boot tidak jumpa MAASDHCP/TFTP tidak sampaiPastikan subnet dan DHCP aktif, dan NIC PXE pada L2 yang sama
Node tersangkut pada CommissioningKelayakan IPMI iDRAC salahipmitool -I lanplus -H <idrac-ip> -U <user> -P <pass> power status
Konflik port 53systemd-resolved memegang 127.0.0.53MAAS perlukan port 53; semak dengan ss -tlnp
Image MAAS DockerSemua sudah EOLGuna snap rasmi