Pada Chapter Process Concepts kita melihat bahwa seluruh proses di Linux membentuk pohon silsilah yang berakar pada satu proses bernomor 1. Pada distribusi modern, posisi terhormat itu dipegang oleh systemd — program yang menjadi init system sekaligus manajer service. Nama ini hampir selalu muncul ketika service macet, boot terasa lambat, atau log sistem perlu dibaca. Chapter ini membahas masalah yang memaksa init klasik pensiun, cara kerja systemd sebagai penggantinya, dan sedikit sejarah kontroversi di balik adopsinya.
Init Klasik SysV: Rangkaian Script yang Berjalan Berurutan #
Kernel Linux hanya menjalankan satu program pertama saat boot — init — lalu menyerahkan sisanya ke program tersebut. Init klasik warisan Unix System V bekerja dengan resep sederhana: baca /etc/inittab, tentukan runlevel (mode operasi sistem), lalu jalankan script bernomor di folder rc<N>.d satu per satu dari nomor terkecil. Setiap script adalah shell script yang harus tahu cara menyalakan sekaligus mematikan daemon-nya sendiri.
Resep itu bekerja puluhan tahun, tetapi tiga kelemahannya kian terasa. Pertama, start berjalan serial: script bernomor 20 harus menunggu script bernomor 10 selesai meski keduanya tidak berhubungan. Kedua, setiap script membiarkan daemon-nya melepas diri ke latar belakang sendiri (daemonize), sehingga init kehilangan jejak PID yang barusan ia lahirkan. Ketiga, tidak ada supervisi: daemon yang mati mendadak tidak pernah dibangunkan lagi.
Jejak era itu masih bisa kita lihat langsung di Debian 13:
ls /etc/init.d/Output yang Dihasilkan:
dbus
procps
rsync
sudo
x11-commonLima script yang tersisa itu adalah warisan kompatibilitas untuk paket yang belum menyediakan unit systemd. Pada sistem era 2000-an, folder yang sama bisa berisi puluhan script — apache2, mysql, ssh — masing-masing dengan logika start/stop tangannya sendiri.
systemd: PID 1 yang Sekaligus Manajer #
systemd lahir pada 2010 dari Lennart Poettering dan Kay Sievers, lalu diadopsi Fedora sebagai init default pada 2011. Alih-alih script bernomor, systemd membaca unit file — deklarasi sederhana yang menyatakan apa yang dijalankan, kapan, dan bergantung pada apa. Dari deklarasi itu systemd membangun graf dependensi, sehingga service yang tidak saling bergantung bisa menyala bersamaan secara paralel. Lewat socket activation, service bahkan boleh menyala sebelum service yang ia tunggu siap, karena systemd yang menahan koneksi masuknya sementara.
Dua fitur pelengkapnya: cgroups (control groups) menempatkan setiap proses service dalam kelompok bernama unitnya sehingga tidak ada proses yang kabur, dan journald mencatat keluaran semua unit sebagai log terstruktur pengganti file teks yang tersebar. Kita bisa memastikan versi systemd di sistem kita:
systemctl --version | head -2Output yang Dihasilkan:
systemd 257 (257.13-1~deb13u1)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK +BTF -XKBCOMMON -UTMP +SYSVINIT +LIBARCHIVEMari kita baca hasilnya:
- Baris 1 (
systemd 257 ...): versi utama systemd adalah 257, diikuti revisi paket Debian 13 — angka ini yang dirujuk saat membaca dokumentasi karena directive unit berkembang antar versi. - Baris 2 (
+PAM +AUDIT ...): daftar fitur yang dikompilasi ke dalam binari systemd — tanda+berarti fitur aktif, tanda-berarti tidak disertakan.
cgroups: Setiap Proses Milik Sebuah Unit #
Akurasi inilah yang tidak dimiliki init klasik. Ketika systemd memulai sebuah service, seluruh prosesnya — induk, anak, cucu, termasuk proses yang me-fork berulang — dimasukkan ke satu cgroup. Perintah stop berarti mengirim sinyal ke semua anggota grup, sehingga daemon yang dulu lolos dari file PID basi tidak lagi bisa bersembunyi. Sinyal SIGTERM dan SIGKILL yang dipakainya adalah materi Chapter Signals dan Process Termination
— systemd mengirim keduanya secara berurutan saat mematikan service dengan sopan.
Untuk melihat benda yang dikelola systemd, kita cukup mengintip folder tempat paket memasang unit file-nya:
ls /lib/systemd/system/ | head -5Output yang Dihasilkan:
apt-daily-upgrade.service
apt-daily-upgrade.timer
apt-daily.service
apt-daily.timer
[email protected]Kelima file ini hanyalah sebagian kecil dari ratusan unit yang terpasang di Debian 13. Ekstensi .service dan .timer pada namanya menyatakan jenis unit — dan cara membaca file-file semacam ini adalah materi Chapter systemd Units
.
Kontroversi yang Akhirnya Menjadi Standar #
Perjalanan systemd tidak mulus. Sekitar 2014 komunitas Linux terbelah dalam debat panjang — kemudian dikenal sebagai init wars — dengan dua keberatan utama: PID 1 semestinya sekecil mungkin karena kerentanannya fatal, dan systemd dianggap melebar menjadi “sistem kedua” yang menyerap logging, login, hingga resolusi nama. Sebagian pengembang sampai mem-fork Debian menjadi Devuan demi init klasik.
Kini debat itu telah mendingin: Debian, Ubuntu, Fedora, RHEL, Arch, dan openSUSE semuanya menjadikan systemd default, sementara distribusi seperti Alpine (OpenRC) dan Slackware tetap setia pada init alternatif. Ringkasan resmi arsitekturnya tersedia di situs systemd . Urusan praktisnya bagi kita: hampir semua dokumentasi service modern menyerahkan instalasinya pada unit systemd, dan memahaminya bukan lagi pilihan.
Dengan systemd sebagai panggungnya, benda yang dikelolanya selanjutnya adalah unit — topik Chapter systemd Units .