LXC (Linux Containers)
Proyek Linux Containers mencakup empat subproyek utama:
| Subproyek | Keterangan |
|---|---|
| LXC | Inti dari Linux Containers |
| LXCFS | Filesystem virtual untuk container |
| Incus | Fork komunitas dari LXD, dikelola oleh kreator asli LXD |
| distrobuilder | Tool untuk membangun image container |
Catatan: CGManager sudah deprecated (digantikan oleh CGroup namespace di kernel modern). LXD kini menjadi proyek Canonical — Incus hadir sebagai alternatif berbasis komunitas.
Container Unprivileged
Container unprivileged meningkatkan keamanan dengan memetakan UID/GID di dalam container ke range yang tidak digunakan oleh host.
Delegasi UID/GID Subordinat
Edit /etc/subuid dan /etc/subgid untuk mendelegasikan range:
root:1000000:65536
user:2000000:65536
Format setiap baris: <user>:<id_awal>:<jumlah_id>
| Field | Keterangan |
|---|---|
user | Pengguna yang mendapat delegasi range |
1000000 | ID terkecil dalam range |
65536 | Jumlah ID berurutan dalam range |
Jumlah ID sebaiknya kelipatan 65536. Pastikan range antar pengguna tidak saling tumpang tindih.
Mengonfigurasi LXC
sudo xbps-install -S lxc
Container privileged (sebagai root) tidak memerlukan konfigurasi tambahan — langsung gunakan perintah lxc-*.
File Konfigurasi Mapping ID
Sebelum membuat container, tentukan mapping UID/GID di file lxc.conf:
| Tipe User | Lokasi File |
|---|---|
| root | /etc/lxc/default.conf |
| User biasa | ~/.config/lxc/default.conf |
Tambahkan mapping berikut:
lxc.idmap = u 0 1000000 65536
lxc.idmap = g 0 1000000 65536
| Field | Keterangan |
|---|---|
u | UID mapping |
g | GID mapping |
0 | Awal range UID/GID di dalam container |
1000000 | Awal range UID/GID di host |
65536 | Jumlah ID yang dipetakan |
Konfigurasi Jaringan (User Non-Root)
Edit /etc/lxc/lxc-usernet sebagai root untuk mengizinkan user membuat perangkat jaringan virtual:
user veth lxcbr0 10
Baris ini mengizinkan user membuat hingga 10 perangkat veth yang terhubung ke bridge lxcbr0.
Membuat Container
lxc-create -n mycontainer -t download -- \
--dist voidlinux --release current --arch amd64
Untuk image musl, tambahkan --variant musl. Lihat LXC Image Server untuk daftar container yang tersedia.
Lokasi Penyimpanan Container
| Tipe | Lokasi Default |
|---|---|
| Container sistem | /var/lib/lxc |
| Container user | ~/.local/share/lxc |
Nilai ini dapat diubah via lxc.lxcpath di lxc.system.conf.
Tips keamanan: Secara default, semua container berbagi mapping UID/GID yang sama. Untuk mengisolasi container satu sama lain, ubah
lxc.idmapke range unik sebelum membuat setiap container.
Incus (Alternatif yang Disarankan)
Incus menyediakan antarmuka yang lebih modern untuk mengelola container dan virtual machine, tanpa konfigurasi manual seperti di atas.
Instalasi
Set CGROUP_MODE di /etc/rc.conf:
CGROUP_MODE=unified
Instal dan aktifkan Incus:
sudo xbps-install -S incus
ln -s /etc/sv/incus /var/service/
Akses Pengguna
# Akses penuh
sudo usermod -aG _incus-admin <nama_user>
# Akses terbatas
sudo usermod -aG _incus <nama_user>
ln -s /etc/sv/incus-user /var/service/
⚠️
incus-userakan menginisialisasi profil default Incus saat pertama kali dijalankan. Jika ingin mengontrol inisialisasi sendiri, jalankanincus admin initsebelum mengaktifkanincus-user.
incus-userjuga dapat menggantikan konfigurasi jaringan profil default jika dianggap tidak valid — ini terjadi saat boot, bukan saat user memanggil Incus.
Dependensi Tambahan
sudo xbps-install -S qemu edk2-ovmf # Untuk menjalankan virtual machine
sudo xbps-install -S skopeo # Untuk menjalankan OCI container
Migrasi dari LXD / LXC
sudo xbps-install -S incus-tools
# Migrasi dari LXD
lxd-to-incus
# Migrasi dari LXC
lxc-to-incus
LXD
LXD adalah alternatif antarmuka LXC yang kini dikelola oleh Canonical.
sudo xbps-install -S lxd
ln -s /etc/sv/lxd /var/service/
sudo usermod -aG lxd <nama_user>
Gunakan perintah lxc untuk mengelola instance LXD.