SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

dnf-automatic: Pembaruan Keamanan Rocky dan AlmaLinux

Pelajari dnf-automatic di Rocky Linux 9 dan AlmaLinux 9: mode security-only, timer systemd, notifikasi email, serta kebijakan reboot yang aman.

Yang dilakukan dnf-automatic pada Rocky Linux dan AlmaLinux

dnf-automatic digunakan untuk mendapatkan pembaruan keamanan tanpa intervensi pada Rocky Linux dan AlmaLinux. Program kecil ini dijalankan oleh timer systemd, membaca /etc/dnf/automatic.conf, lalu menerapkan pengaturan yang diizinkan oleh file tersebut. Instalasinya cukup dengan satu perintah. Bagian lain dalam panduan ini membahas pengaturan yang menentukan apakah program tersebut benar-benar melindungi server atau tidak melakukan apa pun secara diam-diam.

Jika Anda sebelumnya menggunakan Debian atau Ubuntu, fungsinya sama seperti yang dilakukan unattended-upgrades pada VPS Ubuntu. Ada satu perbedaan yang lebih penting daripada perbedaan lainnya: arti kata "security" bagi pengelola paket. Pada Ubuntu, security merupakan pocket arsip terpisah. Pada keluarga RHEL, security adalah metadata yang dilampirkan pada advisori yang dipublikasikan, dan metadata tersebut dapat tidak tersedia atau sudah kedaluwarsa. Jika dnf-automatic diarahkan ke repositori tanpa data advisori, program tersebut tidak menginstal apa pun, tetapi tetap melaporkan keberhasilan.

Panduan ini ditulis berdasarkan Rocky Linux 9 dan AlmaLinux 9, yang menggunakan DNF 4 (DNF adalah pengelola paket pada keluarga RHEL), per Agustus 2026. Rilis 10 beralih ke DNF5 dan nama-namanya berubah di sana, sehingga rilis tersebut memiliki bagian tersendiri menjelang akhir. Setiap perintah di bawah ini harus Anda jalankan pada server Anda sendiri. Output yang diharapkan dicantumkan di sebelahnya.

Instal systemctl is-enabled dan baca konfigurasi yang disertakannya

Mengaktifkan pembaruan otomatis merupakan bagian dari penyiapan lain dalam sepuluh menit pertama pada VPS baru, tepat setelah Anda memiliki pengguna non-root dan firewall.

sudo dnf install -y dnf-automatic
rpm -q dnf dnf-automatic
systemctl is-enabled dnf-automatic.timer

systemctl is-enabled menampilkan disabled pada instalasi baru karena instalasi paket tidak menjalankan apa pun. Ini adalah alasan paling umum mengapa server yang “memiliki dnf-automatic” belum pernah menerapkan satu pun pembaruan.

Versi DNF menentukan satu opsi. Setelan reboot diperkenalkan upstream dalam DNF 4.15. Red Hat mem-backport setelan tersebut ke dnf-4.14.0-6.el9 pada November 2023 melalui advisory RHBA-2023:6645. Rocky 9 dan AlmaLinux 9 membangun ulang paket tersebut. Karena itu, server yang saat ini diperbarui memilikinya, sedangkan server yang tidak disentuh sejak 2023 tidak memilikinya.

File konfigurasinya adalah /etc/dnf/automatic.conf. Salinan yang disertakan mencantumkan setiap opsi yang dipahami oleh build ini beserta nilai default-nya dalam bentuk komentar. Baca file tersebut sekali sebelum mengeditnya, karena file itu menunjukkan konfigurasi sebenarnya untuk versi Anda.

Dua switch yang menentukan hasil

download_updates dan apply_updates pada bagian [commands] menentukan perilakunya. Keduanya secara default bernilai no pada EL9 (enterprise Linux 9, basis bersama Rocky 9 dan AlmaLinux 9), sehingga dnf-automatic yang Anda aktifkan tanpa mengubah konfigurasi hanya akan memberi tahu pembaruan yang tersedia.

  • Keduanya no: dnf-automatic melaporkan pembaruan yang tersedia dan tidak mengubah apa pun pada server.
  • download_updates = yes dengan apply_updates = no: paket diunduh ke cache DNF. Proses instalasi kemudian berlangsung cepat dan tidak memerlukan jaringan, tetapi tidak ada perubahan yang diterapkan malam ini.
  • Keduanya yes dengan upgrade_type = default: semua pembaruan yang tersedia diinstal, baik pembaruan keamanan maupun bukan.
  • Keduanya yes dengan upgrade_type = security: hanya paket yang disebutkan dalam security advisory yang diinstal.

Titik awal yang wajar untuk VPS yang menghadap publik:

[commands]
upgrade_type = security
download_updates = yes
apply_updates = yes
random_sleep = 0
network_online_timeout = 60
reboot = never

network_online_timeout adalah jumlah detik yang diberikan proses untuk menunggu jaringan yang berfungsi sebelum menyerah. Pengaturan ini penting pada server yang baru selesai boot. random_sleep adalah cara lama untuk menyebarkan beban ke banyak mesin, sedangkan timer kini menangani tugas tersebut. Jalankan systemctl cat dnf-automatic.service untuk melihat flag persis yang diteruskan oleh service yang disediakan.

Pastikan file tersebut bekerja sesuai harapan tanpa menunggu hingga 06:00:

sudo systemctl start dnf-automatic.service
sudo journalctl -u dnf-automatic.service -n 50 --no-pager

Journal menampilkan apa yang diperiksa oleh proses tersebut dan tindakan yang dijalankannya. Anda juga dapat memaksa satu perilaku dari command line. Pengaturan ini hanya menimpa file untuk proses tersebut:

sudo dnf-automatic --downloadupdates --no-installupdates

Apa arti sebenarnya upgrade_type = security di Rocky dan Alma

DNF tidak menentukan bahwa suatu pembaruan adalah pembaruan keamanan dengan membandingkan nomor versi. DNF membaca metadata errata: sebuah file bernama updateinfo.xml yang dipublikasikan di dalam repository, tempat setiap advisori mencantumkan paket yang memperbaikinya. AlmaLinux menerbitkan advisori ini sebagai advisori ALSA, sedangkan Rocky menerbitkannya sebagai RLSA. upgrade_type = security membuat filter dari metadata tersebut, lalu hanya memperbarui paket yang sesuai dengan filter.

Ada dua konsekuensi, dan keduanya sering mengejutkan pengguna.

Pertama, tanpa metadata, tidak ada pembaruan. Jika repository tidak memiliki updateinfo.xml, filter tidak menemukan kecocokan dan proses berakhir dengan baris berikut di journal:

No security updates needed, but 3 updates available

Server belum mendapatkan patch, dan tidak ada kegagalan yang dilaporkan. Periksa sendiri:

dnf updateinfo list --security
dnf check-update

Jika dnf check-update mencantumkan paket, sedangkan dnf updateinfo list --security tidak menampilkan apa pun, berarti tidak ada pembaruan yang tertunda dengan advisori, atau repository tidak memiliki data advisori untuk dibaca. Rocky dan AlmaLinux sama-sama menerbitkan data tersebut, jadi pada kedua distribusi itu, daftar kosong biasanya memang menunjukkan kondisi sebenarnya. CentOS Stream tidak menerbitkannya sama sekali.

Kedua, mode keamanan bukan perubahan minimal. dnf-automatic menambahkan filter keamanan, lalu menjalankan jalur pembaruan biasa. Oleh karena itu, paket yang tercantum dalam advisori akan diperbarui ke versi terbaru di repository dan membawa dependensinya. Langkah yang lebih kecil, yaitu memperbarui hanya ke versi paling awal yang memperbaiki advisori, adalah dnf upgrade-minimal --security yang dijalankan secara manual. dnf-automatic tidak memiliki pengaturan untuk itu.

Ada satu catatan tambahan untuk Rocky. Rocky membuat errata dari data Red Hat melalui pipeline miliknya sendiri, dan pipeline tersebut mengalami keterlambatan. Pada September 2025, pengguna melaporkan bahwa updateinfo.xml Rocky 9 BaseOS tidak berubah sejak Desember 2024. Akibatnya, --security tidak memuat advisori terbaru, dan staf Rocky mengonfirmasi bahwa hal tersebut merupakan masalah yang telah diketahui. Jika Anda bergantung pada upgrade_type = security, bandingkan daftar advisori dengan pengumuman RLSA terbaru secara berkala. Pada server yang lebih mengutamakan cakupan pembaruan daripada pengendalian perubahan, upgrade_type = default sesuai jadwal yang Anda tentukan adalah pengaturan yang lebih aman.

Timer systemd yang benar-benar menjalankannya

sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic.timer

list-timers harus menampilkan satu baris dengan waktu NEXT sekitar satu hari lagi. Tabel kosong berarti timer belum diaktifkan, sehingga tidak akan pernah berjalan.

Timer yang disertakan dijalankan pada *-*-* 6:00 dengan RandomizedDelaySec=60m dan Persistent=true. Penundaan acak menyebarkan eksekusi di seluruh rentang satu jam agar semua server tidak mengakses mirror pada detik yang sama. Persistent=true berarti mesin yang dalam keadaan mati pada 06:00 akan menjalankan job yang terlewat segera setelah boot, bukan melewatkan eksekusi hari itu.

Ubah jadwal dengan drop-in. Jangan mengedit unit yang disertakan, karena upgrade paket akan mengganti file di bawah /usr/lib/systemd/system.

sudo systemctl edit dnf-automatic.timer
[Timer]
OnCalendar=
OnCalendar=*-*-* 03:30
RandomizedDelaySec=30m

Baris OnCalendar= yang kosong wajib ada. OnCalendar bersifat akumulatif, sehingga tanpa reset tersebut entri 06:00 tetap dipertahankan dan entri kedua ditambahkan. Akibatnya, job berjalan dua kali sehari. Konfirmasikan hasilnya dengan systemctl list-timers dnf-automatic.timer dan baca kolom NEXT. Aturan drop-in yang sama berlaku untuk jadwal lain yang Anda buat. Penjelasannya tersedia di menulis unit service dan timer systemd.

Sekarang perhatikan jebakannya. Paket tersebut menyediakan tiga timer tambahan: dnf-automatic-notifyonly.timer, dnf-automatic-download.timer, dan dnf-automatic-install.timer. Masing-masing menjalankan program yang sama dengan flag baris perintah, dan flag tersebut mengesampingkan download_updates serta apply_updates dari file konfigurasi Anda. Jika salah satunya diaktifkan bersama dnf-automatic.timer, job berjalan dua kali dengan perilaku yang berbeda. Kondisi ini tampak persis seperti file konfigurasi Anda diabaikan. Aktifkan satu timer, lalu periksa:

systemctl list-unit-files 'dnf-automatic*'

Bagaimana cara mengetahui kapan sesuatu diinstal?

emit_via pada bagian [emitters] mengatur pelaporan. Pada systemd, emitter stdio menulis ke journal. Ini adalah pilihan yang andal karena tidak memerlukan komponen lain yang terinstal:

sudo journalctl -u dnf-automatic.service --since -7d --no-pager

Emitter motd menulis laporan ke /etc/motd dan mengganti isi file tersebut. Jika Anda menyimpan banner login di sana, jangan gunakan emitter ini.

Emitter email membuka koneksi SMTP (simple mail transfer protocol) ke email_host pada email_port. Nilai defaultnya adalah localhost dan 25. VPS baru biasanya tidak memiliki layanan yang listening di sana, sehingga koneksi ditolak dan tidak ada email yang dikirim. Jalankan ss -lnt | grep ':25' sebelum mengandalkannya. Jika output kosong, siapkan Postfix yang hanya berfungsi sebagai relay. Jika pengiriman email berhasil, subjeknya adalah Updates applied on 'web01'., dengan nama yang diambil dari system_name.

Untuk kebutuhan lain, emitter command meneruskan laporan kepada program Anda melalui standard input:

[emitters]
emit_via = stdio, command
system_name = web01.example.com
send_error_messages = yes

[command]
command_format = /usr/local/bin/notify-ops
stdin_format = {body}

send_error_messages secara default bernilai no. Artinya, proses yang gagal tidak menghasilkan laporan apa pun. Aktifkan emitter ini. Sistem patching yang hanya mengumumkan keberhasilannya lebih buruk daripada tidak memiliki sistem sama sekali, karena tidak adanya laporan dapat disalahartikan sebagai kondisi sehat.

dnf-automatic tidak me-restart service Anda

Menginstal paket akan mengganti file pada disk. Proses yang sudah berjalan tetap menggunakan kode lama di memori, sehingga library yang sudah ditambal tidak berpengaruh pada daemon yang dimulai bulan lalu. Perbedaan antara kondisi terinstal dan kondisi yang efektif ini membuat patching tanpa pengawasan memerlukan kebijakan restart, bukan hanya kebijakan instalasi.

sudo dnf install -y dnf-plugins-core
dnf needs-restarting -s
dnf needs-restarting -r

-s menampilkan service systemd yang filenya berubah setelah service tersebut dimulai. -r menjawab satu pertanyaan dan mencetak salah satu dari dua blok berikut:

Core libraries or services have been updated since boot-up:
  * kernel
Reboot is required to fully utilize these updates.
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.

-r bukan analisis mendalam. Perintah ini memeriksa daftar paket tetap: kernel, kernel-core, kernel-rt, glibc, linux-firmware, systemd, dbus, dbus-broker, dbus-daemon, dan microcode_ctl. Jika salah satu paket tersebut diinstal setelah boot terakhir, Anda mendapatkan jawaban pertama. Tambahkan nama paket Anda sendiri ke file yang diakhiri dengan .conf di bawah /etc/dnf/plugins/needs-restarting.d/ jika ada komponen lain pada server yang juga memerlukan reboot agar perubahan berlaku.

Ada satu hal yang perlu diperhatikan untuk script: dnf needs-restarting -r keluar dengan status nonzero baik ketika reboot diperlukan maupun ketika perintah itu sendiri gagal. Karena itu, status keluar saja tidak dapat membedakan kedua kondisi tersebut. Baca teks outputnya.

Me-restart service merupakan tindakan yang lebih kecil dan biasanya merupakan pilihan yang tepat. Restart daemon SSH dari sesi SSH kedua yang sudah terbuka, sehingga konfigurasi yang salah tidak membuat Anda kehilangan akses. Kernel baru adalah kondisi ketika hanya reboot yang dapat membantu, karena kernel yang sedang berjalan tidak dapat diganti saat sistem aktif.

Apakah server harus melakukan reboot sendiri?

[commands]
reboot = when-needed
reboot_command = shutdown -r +5 'Rebooting after applying package updates'

reboot = never adalah pengaturan default. when-changed melakukan reboot setelah setiap pembaruan diterapkan. when-needed hanya melakukan reboot jika pemeriksaan di balik needs-restarting -r menunjukkan bahwa paket inti telah diganti. Ini biasanya yang diinginkan oleh pemilik satu server, terutama jika dipasangkan dengan jendela waktu yang ditentukan sendiri. Pengaturan default reboot_command memberikan peringatan selama lima menit kepada pengguna yang sedang login melalui shutdown. Durasi ini dapat diperpanjang.

Selesaikan dua hal sebelum mengaktifkan fitur ini. Setiap service yang Anda perlukan harus dapat berjalan otomatis saat boot. Ini adalah masalah umum pada stack Docker Compose yang dijalankan secara manual. Anda juga memerlukan akses console atau rescue dari provider, karena kernel yang tidak dapat melakukan boot tidak dapat diperbaiki melalui SSH. Jika salah satunya tidak tersedia, biarkan reboot = never dan lakukan reboot sendiri setelah membaca journal.

Rocky, AlmaLinux, dan CentOS Stream: perbedaannya

Pada Rocky 9 dan AlmaLinux 9, semua hal di atas identik, termasuk path konfigurasi dan nama unit. Keduanya menerbitkan errata, sehingga upgrade_type = security memiliki data untuk difilter.

CentOS Stream adalah pengecualian, dan perbedaannya signifikan. Repositori Stream tidak memuat updateinfo.xml, sehingga filter keamanan tidak akan pernah cocok dan setiap eksekusi melaporkan No security updates needed. Pada Stream, gunakan upgrade_type = default dan terima bahwa semua update akan diterapkan. Stream juga lebih maju daripada RHEL, sehingga pengaturan tersebut berubah lebih sering pada server Stream dibandingkan pengaturan yang sama pada Rocky atau AlmaLinux.

Rocky 10 dan AlmaLinux 10 beralih ke DNF5, yang mengubah sejumlah nama. Dokumentasi upstream DNF5 menyebut timer sebagai dnf5-automatic.timer, menempatkan default yang disertakan paket di /usr/share/dnf5/dnf5-plugins/automatic.conf sementara penggantian Anda tetap berada di /etc/dnf/automatic.conf, menetapkan default download_updates ke yes, bukan no, dan menambahkan distro-sync sebagai upgrade_type. Query advisory adalah dnf advisory list, sedangkan updateinfo tetap dipertahankan sebagai alias. Pastikan apa yang benar-benar diinstal oleh release Anda sebelum menyalin nama paket atau unit dari panduan yang ditulis untuk 9:

dnf list --available '*automatic*'
systemctl list-unit-files '*automatic*'

Banyak panduan yang diterbitkan untuk topik ini masih hanya mencakup Rocky 8. Kumpulan opsi telah bertambah sejak panduan tersebut ditulis. Karena itu, periksa file yang berisi komentar pada server Anda sendiri dan jangan langsung mempercayai artikel lama.

Mode kegagalan dan string yang akan Anda lihat

Tidak ada yang pernah berjalan. systemctl list-timers dnf-automatic.timer menampilkan tabel kosong dan systemctl is-enabled dnf-automatic.timer menampilkan disabled. Paket telah diinstal, tetapi timer tidak pernah dibuat.

Job berjalan, tetapi tidak menginstal apa pun. Journal berisi No security updates needed, but 3 updates available. Filter keamanan tidak menemukan kecocokan, baik karena tidak ada pembaruan tertunda yang memiliki advisory maupun karena repository tidak menerbitkan data advisory.

Sebuah pengaturan tampaknya diabaikan. DNF mencatat opsi yang tidak dikenal di automatic.conf pada level debug, lalu menggunakan nilai default. Akibatnya, kesalahan ejaan pada key tidak mengubah apa pun dan tidak menghasilkan peringatan. Tetapkan apply_update = yes agar apply_updates tetap bernilai no. Dengan demikian, server terus mengunduh dan tidak pernah menginstal. Setelah mengubah konfigurasi, jalankan sudo systemctl start dnf-automatic.service dan baca journal. Jangan hanya mengandalkan file konfigurasi.

Job berjalan dua kali sehari. Dua timer diaktifkan. systemctl list-unit-files 'dnf-automatic*' menampilkan timer yang aktif. Timer tambahan tersebut meneruskan flag yang mengesampingkan file konfigurasi Anda.

Tidak ada email yang diterima. Tidak ada proses yang listening pada port 25 untuk emitter email, atau send_error_messages masih bernilai no dan satu-satunya hal yang perlu dilaporkan adalah error.

Service yang telah di-patch masih melaporkan versi lama. File pada disk sudah baru, tetapi proses di memori masih menggunakan versi lama. dnf needs-restarting -s mencantumkan service yang perlu di-restart.

FAQ

Apakah dnf-automatic hanya menginstal pembaruan keamanan di Rocky Linux?

Hanya jika Anda menetapkan upgrade_type = security di /etc/dnf/automatic.conf, dan hanya jika repositori Anda menerbitkan metadata errata. Rocky Linux dan AlmaLinux sama-sama menerbitkannya, sehingga filter memiliki advisori untuk dicocokkan. Nilai default yang disertakan adalah upgrade_type = default, yang menginstal setiap pembaruan yang tersedia setelah apply_updates = yes.

Mengapa dnf-automatic melaporkan "Tidak diperlukan pembaruan keamanan, tetapi tersedia 3 pembaruan"?

DNF menentukan pembaruan keamanan dengan membaca updateinfo.xml dari repositori. Setiap advisori mencantumkan paket yang memperbaiki masalah tersebut. Jika metadata itu tidak ada atau sudah kedaluwarsa, filter keamanan tidak menemukan kecocokan, sedangkan pembaruan biasa masih tertunda. Kondisi ini menghasilkan baris tersebut. Hal ini memang diharapkan pada CentOS Stream, yang tidak menerbitkan errata sama sekali. Pada Rocky atau AlmaLinux, bandingkan dnf updateinfo list --security dengan dnf check-update dan pastikan metadata Anda masih mutakhir.

Apakah dnf-automatic akan me-reboot server saya setelah pembaruan kernel?

Tidak, kecuali Anda memintanya. Opsi reboot secara default bernilai never. Tetapkan reboot = when-needed, lalu proses akan melakukan reboot hanya jika pemeriksaan di balik dnf needs-restarting -r menemukan bahwa paket inti seperti kernel atau glibc telah diganti sejak boot. reboot = when-changed melakukan reboot setelah pembaruan apa pun diterapkan. Keduanya menggunakan reboot_command, yang secara default bernilai shutdown -r +5 dan menampilkan pesan peringatan kepada pengguna yang sedang login.

Bagaimana cara mengubah waktu dnf-automatic dijalankan?

Jalankan sudo systemctl edit dnf-automatic.timer dan tambahkan bagian [Timer] dengan baris OnCalendar= kosong, lalu jadwal Anda, misalnya OnCalendar=*-*-* 03:30. Baris kosong tersebut wajib ada karena OnCalendar mengakumulasi nilai. Jika baris itu dihilangkan, jadwal bawaan pukul 06:00 tetap dipertahankan dan jadwal kedua ditambahkan. Verifikasi dengan systemctl list-timers dnf-automatic.timer dan baca kolom NEXT.

Apakah saya masih perlu memeriksa server yang melakukan patch secara otomatis?

Ya. dnf-automatic hanya menginstal paket, lalu berhenti. Program ini tidak me-restart daemon. Program ini juga tidak melaporkan apa pun yang dapat Anda lihat, kecuali emit_via mencantumkan emitter yang benar-benar Anda baca. Tetapkan emit_via ke stdio minimal, aktifkan send_error_messages agar kegagalan juga dilaporkan, lalu jalankan dnf needs-restarting -s setelah jendela patch untuk menemukan service yang masih menjalankan kode lama.