Masih terkait dengan serial “Strategi Migrasi dan Upgrade Zimbra“. Untuk mengejar timeline, akhirnya diputuskan menggunakan skenario ke-3. Yaitu salin data via Rsync/Rclone. Hasilnya ternyata memuaskan. Rencana awal penggunaan NFS dibatalkan. Semua data full di salin ke server baru.
Sebelum menggunakan LXC, saya coba menggunakan Docker terlebih dahulu. Saya mengalami beberapa kesulitan. Mulai dari dependensi, service yang tidak up, penyesuaian privileged, systemd yang tidak bisa dipanggil, memetakan cgroup, dan yang lainnya. Lalu coba menggunakan Podman. Beberapa bottleneck teratasi. Systemd bisa dipanggil. Namun tetap masih ada beberapa kendala.
Kemudian teringat LXC yang ada di Proxmox. Smooth dan ringan. Karena OS yang digunakan adalah Rocky Linux, akhirnya install LXC pada Rocky Linux.
Hasilnya sesuai ekspektasi. Container yang dideploy berjalan smooth dan ringan. Perintah systemctl berjalan normal. Tidak ada penyesuaian privileged dan yang lainnya. Install dependensi juga normal.
Jika tidak salah ingat, memang ada perbedaan fungsi dari Docker/Podman dengan LXC. Jika Docker/Podman lebih ke sisi level aplikasi, sedangkan LXC lebih ke level OS.
Berikut cara Install dan Deploy Container LXC di Rocky Linux
# Install epel-repo
dnf install epel-release
# Install LXC
dnf install lxc lxc-checkconfig lxc-ls
# Buat network host-only
Karena penggunaannya hanya untuk local only, networknya dibuat dummy
nmcli con add type bridge ifname lxcbr0 con-name lxcbr0 nmcli con modify lxcbr0 ipv4.addresses 10.10.10.1/24 ipv4.method manual nmcli con up lxcbr0 echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-lxc.conf sudo sysctl -p /etc/sysctl.d/99-lxc.conf
Agar container bisa akses ke internet, atur routing via iptables
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
# Testing LXC dengan CentOS 7
Flashback ke tulisan sebelumnya “Strategi Migrasi dan Upgrade Zimbra“, OS eksisting yang digunakan oleh klien adalah RHEL/CentOS 7. Jadi tulisan ini masih ada kaitan dengan seri tulisan sebelumnya
Download LXC
cd /srv/ wget -c http://download.proxmox.com/images/system/centos-7-default_20190926_amd64.tar.xz
Jika nama filenya tar.zst, bisa gunakan perintah ini. Pastikan package zstd sudah terinstall
tar -I zstd -xvf nama_file.tar.zst
# Buat LXC dari file tar.gz
cd /var/lib/lxc/ mkdir -p /var/lib/lxc/nama-container/rootfs sudo tar -xvf /srv/centos-7-default_20190926_amd64.tar.xz -C /var/lib/lxc/nama-container/rootfs --numeric-owner vi /var/lib/lxc/nama-container/config
Isi dengan isian seperti berikut
# Nama dan Path lxc.uts.name = nama-container lxc.arch = amd64 # Diarahkan ke Folder lxc.rootfs.path = dir:/var/lib/lxc/nama-container/rootfs # Network (Host-Only Bridge) lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.ipv4.address = 10.10.10.5/24 lxc.net.0.ipv4.gateway = 10.10.10.1 # TTY dan Console lxc.tty.max = 0 lxc.autodev = 1 # Struktur: lxc.mount.entry = [sumber di host] [tujuan di container] [tipe] [opsi] 0 0 lxc.mount.entry = /folder-di-host folder-di-lxc none bind,create=dir 0 0 lxc.start.auto = 1 lxc.start.order = 10 lxc.start.delay = 5
Keterangan:
– nama-container bisa diganti dengan nama yang diinginkan
– nama folder lokasi (lxc.rootfs.path) lxc sebaiknya sama dengan nama container
– Sesuaikan lxc.mount.entry. /folder-di-host adalah folder di host yang akan dimount di LXC (folder-di-lxc) tanpa / (slash). Misal ingin mount folder /srv di host ke dalam folder /srv/datahost di LXC. Maka isinya “/srv srv/datahost”. Tidak ada tanda / di awal untuk folder di LXC
Ganti owner jadi Root
chown -R root:root /var/lib/lxc/nama-container/
# Test dan start LXC mode daemon
lxc-ls -f lxc-start -n nama-container -d
Warning: Jika container tidak dapat distart, biasanya kendala terkait dengan cgroups. Jalankan perintah berikut dan reboot
cek kondisi saat ini
cat /proc/cmdline atau sudo grubby --info=DEFAULT
Update kernel terkait cgroups
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
# Attach container
lxc-attach -n nama-container
Setelah masuk ke dalam container, konfigurasi container agar bisa akses ke internet. Seperti penyesuaian /etc/resolv.conf
Karena container yang digunakan adalah CentOS 7, arahkan repositorynya ke vault “Mengganti Repository CentOS 7 ke Vault Setelah EOL“. Update repo dan testing install package
yum update -y yum upgrade -y yum install openssl
Untuk kebutuhan instalasi Zimbra, selebihnya bisa ikuti panduan “Tips Instalasi Zimbra 9 pada CentOS 7“. Untuk keluar dari LXC, cukup ketik exit
Perintah-perintah yang akan sering digunakan
lxc-ls -f # list container lxc-start -n centos7 -d # start container dengan nama centos7 lxc-stop -n centos7 # stop container dengan nama centos7 lxc-attach -n centos7 # attach container dengan nama centos7
Silakan dicoba 🙂