Chapter sebelumnya ditutup dengan satu pertanyaan: siapa yang membuat file-file /dev muncul begitu USB dicolok dan lenyap begitu dicabut? Jawabannya adalah udev — device manager yang bekerja berdasarkan event dan aturan. Tugasnya bukan sekadar menumbuhkan node: udev juga menetapkan izin, membuat nama yang stabil dan mudah diingat, serta memicu program tambahan setiap kali perangkat hadir. Chapter ini membedah cara kerjanya, mengajari kita menulis rule sendiri, lalu menjelaskan asal nama interface jaringan seperti enp3s0.
udev Bekerja Berdasarkan Event #
Linux lama mengelola /dev secara statis: node dibuat manual dengan mknod, dan hotplug menjadi mimpi buruk. udev membalik logikanya — /dev diisi otomatis berdasarkan kejadian. Alurnya tiga langkah:
- Kernel mendeteksi hardware baru, mendaftarkannya ke
/sys, lalu memancarkan sinyal uevent berisi nama dan properti perangkat. - Daemon
udevdmenerima event itu dan mencocokkan properti perangkat dengan seluruh berkas aturan (rule) yang terpasang. - Aturan yang cocok dijalankan: mengatur permission, membuat symlink bernama manusiawi, atau menjalankan program — misalnya memicu backup otomatis.
udev kini dikembangkan sebagai bagian proyek systemd (daemon-nya bernama systemd-udevd). Karena berbasis event, daemon ini irit: udevd tidur sampai event datang, tanpa polling yang memboroskan CPU.
Anatomi Sebuah Rule #
Aturan udev tersimpan dalam file berakhiran .rules di dua lokasi: /usr/lib/udev/rules.d/ milik paket sistem, dan /etc/udev/rules.d/ milik kita sang admin — file admin dengan nama sama selalu menang. Semua kriteria dalam satu baris dipisah koma, dan barisnya hanya cocok bila semua kriteria terpenuhi. Kita tulis rule pertama sebagai latihan:
mkdir -p latihan/udev-rules
cat > latihan/udev-rules/99-kamera.rules <<'EOF'
# Kamera Logitech C270: selalu muncul sebagai /dev/kamera
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="0825", SYMLINK+="kamera"
EOF
cat latihan/udev-rules/99-kamera.rulesOutput yang Dihasilkan:
# Kamera Logitech C270: selalu muncul sebagai /dev/kamera
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="0825", SYMLINK+="kamera"File latihan ini berstruktur persis seperti /etc/udev/rules.d/99-kamera.rules di mesin sungguhan. Bedah setiap segmennya:
ACTION=="add": hanya event kedatangan perangkat yang dicocokkan — eventremovediabaikan.SUBSYSTEM=="usb": membatasi ke perangkat bus USB;block,net, atauttyadalah tetangganya.ATTR{idVendor}=="046d"danATTR{idProduct}=="0825": membaca atribut dari/sysmilik perangkat. Nilai046dadalah vendor ID Logitech dan0825adalah product ID webcam C270 — pasangan inilah sidik jari kamera ini.SYMLINK+="kamera": bagian aksi — udev membuat symlink/dev/kamerayang menunjuk ke node asli (/dev/video0atau sejenisnya), sehingga skrip kita tak perlu tahu nomor node yang berubah-ubah.
Bagi yang terbiasa menulis shell script, operatornya terasa aneh karena satu baris memuat dua dunia: kriteria memakai == (bandingkan), aksi memakai = (tetapkan), += (tambahkan ke daftar), atau := (tetapkan dan kunci agar rule lain tak bisa mengubah).
| Operator | Peran | Contoh |
|---|---|---|
== | mencocokkan nilai | ACTION=="add" |
= | menetapkan nilai (yang terakhir menang) | MODE="0660" |
+= | menambahkan nilai ke daftar | SYMLINK+="kamera" |
:= | menetapkan nilai final | OPTIONS:="last_rule" |
Latihan Menulis Rule Kedua #
Rule yang lebih nyata dalam pekerjaan sehari-hari: disk USB khusus backup foto harus mendapat nama tetap dan memicu notifikasi. Setiap blok latihan di buku ini bersifat mandiri, jadi blok berikut menulis ulang rule kamera sekilas — mkdir -p dan penulisan ulang seperti ini aman diulang kapan pun. Setelah kedua file tersimpan, kita bedah kriteria rule barunya dengan grep:
mkdir -p latihan/udev-rules
cat > latihan/udev-rules/99-kamera.rules <<'EOF'
# Kamera Logitech C270: selalu muncul sebagai /dev/kamera
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="0825", SYMLINK+="kamera"
EOF
cat > latihan/udev-rules/99-disk-foto.rules <<'EOF'
# Disk backup foto: nama stabil + notifikasi
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[b-z][0-9]", ENV{ID_FS_LABEL}=="FOTO-BACKUP", SYMLINK+="disk-foto", RUN+="/usr/local/bin/notif-usb.sh"
EOF
ls latihan/udev-rules/
grep -o '=="[^"]*"' latihan/udev-rules/99-disk-foto.rulesOutput yang Dihasilkan:
99-disk-foto.rules
99-kamera.rules
=="add"
=="block"
=="sd[b-z][0-9]"
=="FOTO-BACKUP"Empat kriteria yang tertangkap grep di bagian bawah output:
ACTION=="add"danSUBSYSTEM=="block": hanya block device yang baru datang — bukan perangkat USB apa pun.KERNEL=="sd[b-z][0-9]": hanya partisi pada disksdbsampaisdz— sengaja menjauhisda, disk sistem.ENV{ID_FS_LABEL}=="FOTO-BACKUP": label filesystem dibaca udev lewat utilitasblkidinternal dan disimpan sebagai properti lingkungan — label ini yang kita beri saat memformat disk.SYMLINK+="disk-foto"danRUN+="/usr/local/bin/notif-usb.sh": dua aksi sekaligus — nama tetap/dev/disk-foto, lalu skrip notifikasi dijalankan di latar belakang.
Penamaan Interface Jaringan yang Stabil #
Sumbangan udev yang paling terasa sehari-hari adalah predictable network interface names. Dahulu kartu jaringan mendapat nama eth0, eth1 berdasarkan urutan deteksi kernel — urutan yang bisa berubah antar boot, sehingga aturan firewall yang menyasar eth0 bisa salah sasaran. Nama modern mengunci lokasi fisik:
| Nama | Arti |
|---|---|
eno1 | kartu jaringan on-board nomor 1 |
enp3s0 | Ethernet di PCI bus 3, slot 0 |
wlp2s0 | WiFi di PCI bus 2, slot 0 |
enx001234567890 | adapter USB Ethernet, diikuti MAC address |
Awalan en untuk Ethernet dan wl untuk wireless, sisanya koordinat fisik. Nama seperti enp3s0 terkesan jelek, tetapi menempel pada slot fisik yang tidak berubah — kestabilan yang berharga di server dengan banyak kartu.
Teropong: udevadm #
Satu perintah menjadi jendela ke seluruh dunia udev: udevadm. Tiga sub-perintah terpentingnya — udevadm info /dev/sda menampilkan database properti perangkat (vendor, serial, semua ENV{} tersimpan), udevadm monitor menampilkan event secara langsung, dan udevadm test menyimulasikan event untuk satu perangkat sambil mencetak rule mana yang cocok. Berikut contoh tampilan udevadm monitor saat sebuah perangkat USB dicolok:
monitor will print the received events for:
UDEV - the event which udev sends out after device processing
KERNEL - the kernel uevent
KERNEL[3721.053104] add /devices/pci0000:00/0000:00:14.0/usb3/3-2 (usb)
UDEV [3721.053291] add /devices/pci0000:00/0000:00:14.0/usb3/3-2 (usb)Dua baris terakhir adalah pasangan event yang sama: baris KERNEL adalah uevent mentah dari kernel, sedangkan baris UDEV dipancarkan setelah udev selesai memproses perangkat itu — selisih keduanya adalah durasi kerja rule. Di sistem latihan minimal alat ini bisa saja tidak terpasang, tetapi di desktop dan server Debian ia hadir secara bawaan. Bahasa rule lengkapnya dicatat di udev(7)
, manual udevadm di udevadm(8)
, dan resep praktisnya di wiki Arch tentang udev
.
Setiap perangkat yang hadir dan pergi juga meninggalkan jejak di log kernel — dan log itulah wilayah berikutnya yang harus kita kuasai.