Belajar Artix Linux - Systemd Service Migration
Episode 18 of 23

Belajar Artix Linux - Systemd Service Migration

Pindah dari Arch/systemd ke Artix menuntut pemahaman peran systemd dan penggantinya. Episode ini membahas komponen eudev, elogind, dan D-Bus, cara mentranslasi unit systemd ke init-script Artix, serta mengapa layanan yang bergantung pada systemd bisa gagal.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Bagi pengguna yang datang dari Arch atau distro systemd lainnya, tantangan terbesar Artix bukan install-nya, melainkan migrasi — memindahkan layanan dari unit systemd ke init-script Artix. Episode 18 membedah peran systemd satu per satu, komponen penggantinya, dan bagaimana menerjemahkan service dengan benar.

Pemahaman ini membuat kalian tidak tersesat saat menemui dokumentasi yang hanya menyebut systemctl. Kalian akan bisa memetakan setiap perintah systemd ke padanannya di OpenRC, runit, s6, atau dinit.

Peran systemd yang Harus Diganti

Lebih dari Sekadar Init

systemd bukan hanya PID 1. Ia menyatukan banyak peran: init system, service manager, device manager (udev), login manager (logind), resolver (resolved), journal (journald), dan lainnya. Di Artix, setiap peran dipegang komponen khusus.

Peta penggantiannya:

Pengganti komponen systemd
systemd-init    -> OpenRC / runit / s6 / dinit
systemd-udevd   -> eudev
systemd-logind  -> elogind
systemd-journal -> log aplikasi masing-masing + rc-log
D-Bus           -> D-Bus (sama, dijalankan via init)

systemd-udevd digantikan eudev, systemd-logind digantikan elogind, dan journal digantikan log aplikasi biasa. Tidak ada satu daemon yang merangkap semuanya.

Konsekuensi Praktis

Perintah journalctl tidak akan ada. Log ada di file per-aplikasi di /var/log/ atau log service. Perintah systemctl juga tidak ada — digantikan rc-service, sv, s6-svc, atau dinitctl sesuai init. Setelah kalian hafal pemetaan ini, sisa migrasi hanyalah masalah menulis file konfigurasi.

Translasi Unit ke Init-Script

Anatomi Unit systemd

Unit systemd menyimpan metadata service dalam format key-value. Contoh unit:

Contoh unit systemd
[Unit]
Description=Contoh service
After=network.target
 
[Service]
ExecStart=/usr/bin/example --daemon
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

WantedBy=multi-user.target menentukan bahwa service diaktifkan pada runlevel multi-user. Ini harus dipetakan ke runlevel default di Artix.

Translasi ke OpenRC

Di OpenRC, unit di atas diterjemahkan menjadi script di /etc/init.d/:

Script OpenRC hasil translasi
#!/sbin/openrc-run
description="Contoh service"
 
depend() {
    need net
}
 
start() {
    ebegin "Memulai contoh service"
    start-stop-daemon --start --background --make-pidfile \
        --pidfile /run/example.pid --exec /usr/bin/example
    eend $?
}
 
stop() {
    ebegin "Menghentikan contoh service"
    start-stop-daemon --stop --pidfile /run/example.pid
    eend $?
}

need net menggantikan After=network.target. start-stop-daemon menangani start, background, dan PID file. Setelah script dibuat, daftarkan dengan rc-update add.

Translasi ke Init Lain

Untuk runit, buat direktori service dengan script run yang mengeksekusi daemon; untuk s6, tulis service database dengan run script; untuk dinit, tulis file .dinit deklaratif:

File dinit hasil translasi
type = process
command = /usr/bin/example --daemon
depends-on = network
restart = on-failure

depends-on = network di dinit setara dengan After=network.target di systemd. Semua init memuat informasi yang sama — hanya formatnya yang berbeda.

Mengapa Layanan Bergantung systemd Gagal

Dependency Tersembunyi

Beberapa layanan secara implisit bergantung pada systemd: memakai systemctl untuk berkomunikasi, menulis ke journal, atau mengharapkan socket systemd. Tanpa systemd, layanan ini gagal dengan cara yang membingungkan.

Diagnosa awal yang baik: jalankan service secara manual di foreground dan lihat pesan errornya:

Jalankan daemon manual
sudo -u http /usr/bin/example --foreground

sudo -u http /usr/bin/example --foreground menampilkan error langsung di terminal. Jika pesan menyebut systemctl, journald, atau DBUS_SESSION_BUS_ADDRESS, itu sumber masalahnya.

Solusi Umum

Untuk layanan yang memanggil systemctl, cari opsi --systemd-ignore atau ganti dengan perintah init. Untuk yang butuh D-Bus, pastikan service dbus aktif di init. Untuk yang menulis ke journal, arahkan ke file log biasa lewat konfigurasi aplikasi:

Aktifkan D-Bus di OpenRC
rc-update add dbus default
rc-service dbus start

Perintah rc-service dbus start memastikan bus tersedia untuk aplikasi yang membutuhkannya. Mayoritas aplikasi modern hanya butuh D-Bus dan eudev untuk bekerja normal.

Migrasi Penuh dari Arch

Migrasi Arch ke Artix dilakukan dengan menukar repo di /etc/pacman.conf dari Arch ke Artix, lalu reinstall paket kunci. Prosedur ini dijelaskan lengkap di wiki Artix. Persiapan penting: backup penuh dulu (episode 16), lalu:

Instal init setelah tukar repo
sudo pacman -S artix-base artix-base-openrc

artix-base-openrc memasang fondasi init. Setelah init terpasang, paket-paket yang berakhiran systemd harus diganti dengan varian Artix.

Setelah Migrasi

Verifikasi bahwa tidak ada paket yang menyeret systemd:

Cek dependensi systemd
pacman -Q | grep systemd

Output pacman -Q | grep systemd menampilkan sisa paket yang terkait systemd. Idealnya kosong atau hanya alat bantu yang tidak menyeret daemon systemd aktif.

Penutup

Episode 18 memetakan peran systemd dan penggantinya di Artix: init, eudev, elogind, dan D-Bus. Kalian juga belajar menerjemahkan unit systemd ke script OpenRC, runit, s6, atau dinit, serta menangani layanan yang bergantung pada systemd.

Inti yang harus dibawa pulang:

  • systemd merangkap banyak peran; Artix menggantinya satu per satu.
  • systemd-udevd digantikan eudev, systemd-logind digantikan elogind.
  • Translasi unit: After= jadi need, WantedBy= jadi runlevel default.
  • Setiap init punya format: script, run directory, atau file .dinit.
  • Layanan yang memanggil systemctl/journal gagal tanpa systemd.
  • Periksa sisa dependensi systemd dengan pacman -Q | grep systemd.

Di episode 19 selanjutnya kita akan membahas virtualization dan container — QEMU/libvirt dengan virt-manager dan KVM, serta Docker/Podman dalam mode non-systemd dan rootless.