SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-09-04

dnf-automatic: Pembaruan Keamanan Rocky dan AlmaLinux

Pelajari konfigurasi dnf-automatic di Rocky Linux dan AlmaLinux 9, termasuk 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 otomatis pada Rocky Linux dan AlmaLinux. Program kecil ini dijalankan oleh timer systemd, membaca /etc/dnf/automatic.conf, lalu menerapkan hal-hal yang diizinkan oleh file tersebut. Instalasinya memerlukan satu perintah. Selebihnya, panduan ini membahas pengaturan yang menentukan apakah program tersebut melindungi server atau tidak melakukan apa pun secara diam-diam.

Jika Anda sebelumnya menggunakan Debian atau Ubuntu, dnf-automatic menjalankan fungsi yang sama seperti unattended-upgrades pada VPS Ubuntu. Ada satu perbedaan yang lebih penting daripada perbedaan lainnya: arti kata "security" bagi package manager. Pada Ubuntu, security merupakan pocket archive terpisah. Pada keluarga RHEL, security merupakan metadata yang melekat pada advisory yang dipublikasikan, dan metadata tersebut dapat tidak tersedia atau sudah kedaluwarsa. Jika dnf-automatic diarahkan ke repository tanpa data advisory, 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 package manager pada keluarga RHEL), per Agustus 2026. Rilis 10 beralih ke DNF5 dan menggunakan nama yang berbeda, sehingga rilis tersebut dibahas dalam bagian tersendiri menjelang akhir. Setiap perintah di bawah ini harus Anda jalankan pada server Anda sendiri, dengan output yang diharapkan ditampilkan di sebelahnya.

Instal dnf-automatic dan baca konfigurasi yang disertakan

Mengaktifkan pembaruan otomatis merupakan bagian dari setup lainnya dalam sepuluh menit pertama pada VPS baru, setelah Anda memiliki pengguna non-root dan firewall. Jika konfigurasi firewall masih belum selesai, firewalld adalah firewall yang disertakan Rocky dan AlmaLinux, dan beberapa perintah dapat membuka SSH, membuka port yang digunakan situs Anda untuk menerima koneksi, serta memastikan keduanya tetap aktif setelah reboot.

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 server yang "memiliki dnf-automatic" belum pernah menerapkan satu pun pembaruan.

Versi DNF menentukan dukungan untuk satu opsi. Pengaturan reboot diperkenalkan di upstream DNF 4.15, dan Red Hat melakukan backport pengaturan 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, sehingga sistem yang diperbarui saat ini memilikinya, sedangkan sistem yang tidak disentuh sejak 2023 tidak memilikinya.

File konfigurasinya adalah /etc/dnf/automatic.conf. Salinan yang disertakan mencantumkan setiap opsi yang dipahami 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 hasilnya

download_updates dan apply_updates pada bagian [commands] menentukan perilakunya. Secara default, keduanya adalah no pada EL9 (enterprise Linux 9, basis bersama Rocky 9 dan AlmaLinux 9). Karena itu, dnf-automatic yang belum diedit dan Anda aktifkan 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. Instalasi berikutnya berlangsung cepat dan tidak memerlukan jaringan, tetapi tidak ada perubahan malam ini.
  • Keduanya yes dengan upgrade_type = default: setiap pembaruan yang tersedia diinstal, baik pembaruan keamanan maupun bukan.
  • Keduanya yes dengan upgrade_type = security: hanya paket yang tercantum dalam advisori keamanan 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 proses menunggu jaringan yang berfungsi sebelum berhenti. Ini penting pada server yang baru selesai boot. random_sleep adalah cara lama untuk menyebarkan beban ke banyak mesin. Timer sekarang menangani tugas tersebut. Jalankan systemctl cat dnf-automatic.service untuk melihat flag persis yang diteruskan oleh service yang disediakan.

Buktikan bahwa file tersebut bekerja sesuai yang Anda harapkan tanpa menunggu hingga 06:00:

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

Journal menampilkan proses yang dipertimbangkan dan tindakan yang dijalankannya. Anda juga dapat memaksa satu perilaku dari command line. Pengaturan ini hanya menggantikan isi file untuk proses tersebut:

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

Apa yang sebenarnya dimaksud upgrade_type = security pada Rocky dan Alma

DNF tidak menentukan apakah sebuah pembaruan merupakan pembaruan keamanan dengan membandingkan nomor versi. DNF membaca metadata errata: file bernama updateinfo.xml yang dipublikasikan di dalam repository, tempat setiap advisory mencantumkan paket yang memperbaiki masalah tersebut. AlmaLinux menerbitkannya sebagai advisory ALSA, sedangkan Rocky menerbitkannya sebagai RLSA. upgrade_type = security membuat filter dari metadata tersebut dan hanya memperbarui paket yang cocok dengan filter.

Ada dua konsekuensi. Keduanya sering mengejutkan pengguna.

Pertama, tanpa metadata, tidak ada pembaruan. Jika repository tidak memiliki updateinfo.xml, filter tidak mencocokkan apa pun 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 sama sekali tidak menampilkan apa pun, tidak ada pembaruan yang tersedia yang memiliki advisory, atau repository tidak menyediakan data advisory untuk dibaca. Rocky dan AlmaLinux sama-sama menerbitkan data tersebut, sehingga pada kedua distribusi itu daftar kosong biasanya memang berarti tidak ada advisory yang cocok. CentOS Stream tidak menerbitkannya sama sekali.

Kedua, mode keamanan bukan berarti perubahan minimal. dnf-automatic menambahkan filter keamanan, lalu menjalankan alur pembaruan biasa. Karena itu, paket yang tercantum dalam advisory akan diperbarui ke versi terbaru di repository dan dependensinya ikut diperbarui. Perubahan yang lebih kecil, yaitu hanya memperbarui ke versi paling awal yang memperbaiki advisory, adalah dnf upgrade-minimal --security yang harus dijalankan secara manual. dnf-automatic tidak memiliki pengaturan untuk perilaku tersebut.

Ada satu catatan tambahan untuk Rocky. Rocky membuat errata dari data Red Hat melalui pipeline miliknya sendiri, dan pipeline tersebut tertinggal. Pada September 2025, pengguna melaporkan bahwa updateinfo.xml Rocky 9 BaseOS tidak berubah sejak Desember 2024. Akibatnya, --security tidak memuat advisory terbaru, dan staf Rocky mengonfirmasi bahwa masalah tersebut memang telah diketahui. Jika Anda mengandalkan upgrade_type = security, sesekali bandingkan daftar advisory dengan pengumuman RLSA terbaru. Pada server yang lebih mementingkan cakupan patch daripada kendali perubahan, upgrade_type = default pada jadwal yang Anda tentukan merupakan 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 yang 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 pada seluruh armada selama satu jam, sehingga setiap server tidak mengakses mirror pada detik yang sama. Persistent=true berarti mesin yang dalam keadaan mati pada pukul 06:00 akan menjalankan job yang terlewat sesaat setelah boot, bukan melewati jadwal 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 pukul 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 apa pun yang Anda jadwalkan. Penjelasannya tersedia di menulis unit service dan timer systemd.

Sekarang perhatikan jebakannya. Paket ini menyertakan tiga timer tambahan: dnf-automatic-notifyonly.timer, dnf-automatic-download.timer, dan dnf-automatic-install.timer. Masing-masing menjalankan program yang sama dengan flag command-line, dan flag tersebut mengesampingkan download_updates serta apply_updates dari file konfigurasi Anda. Jika Anda mengaktifkan salah satunya 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. Dalam systemd, emitter stdio menulis ke journal. Ini adalah opsi yang andal karena tidak memerlukan apa pun selain yang sudah tersedia:

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, yang secara default masing-masing bernilai localhost dan 25. VPS baru biasanya tidak memiliki apa pun yang listening di sana, sehingga koneksi ditolak dan tidak ada email yang dikirim. Jalankan ss -lnt | grep ':25' sebelum mengandalkannya, lalu siapkan Postfix khusus relay jika output kosong. Jika email sudah berfungsi, subjeknya berbunyi Updates applied on 'web01'., dengan nama yang diambil dari system_name.

Untuk kebutuhan lain, emitter command meneruskan laporan ke 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, yang berarti proses yang gagal sama sekali tidak menghasilkan laporan. Aktifkan opsi ini. Sistem patching yang hanya melaporkan keberhasilan lebih buruk daripada tidak menggunakannya, karena tidak adanya laporan akan dianggap sebagai kondisi normal.

dnf-automatic tidak me-restart service Anda

Menginstal sebuah package akan mengganti file di disk. Proses yang sudah berjalan tetap menggunakan kode lama di memori, sehingga library yang sudah ditambal tidak berdampak pada daemon yang mulai berjalan bulan lalu. Perbedaan antara terinstal dan efektif inilah yang membuat patching otomatis memerlukan kebijakan restart, bukan hanya kebijakan instalasi.

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

-s mencantumkan service systemd yang filenya berubah setelah service tersebut mulai berjalan. -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 package yang sudah ditentukan: kernel, kernel-core, kernel-rt, glibc, linux-firmware, systemd, dbus, dbus-broker, dbus-daemon, dan microcode_ctl. Jika salah satunya diinstal setelah boot terakhir, Anda mendapatkan jawaban pertama. Tambahkan nama package Anda sendiri ke file yang diakhiri dengan .conf di bawah /etc/dnf/plugins/needs-restarting.d/ jika ada hal lain pada server yang juga memerlukan reboot agar perubahannya berlaku.

Ada satu hal yang perlu diperhatikan untuk script: dnf needs-restarting -r keluar dengan status non-zero 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 adalah tindakan yang lebih kecil dan biasanya merupakan pilihan yang tepat. Restart daemon SSH dari sesi SSH kedua yang sudah terbuka agar konfigurasi yang salah tidak membuat Anda terkunci dari server. Kernel baru adalah kasus ketika hanya reboot yang dapat membantu, karena kernel yang sedang berjalan tidak dapat diganti secara langsung. Jika Anda ingin mengelompokkan update pada pagi tertentu ke dalam dua kategori tersebut, update mana yang memerlukan reboot dan mana yang hanya memerlukan restart service akan memproses output package demi package.

Container merupakan kasus terpisah karena dnf-automatic menambal package pada host dan tidak pernah menyentuh userland yang sudah disertakan dalam image. Karena itu, server yang menjalankan Docker Engine pada Rocky Linux atau AlmaLinux juga memerlukan image yang di-pull ulang dan container yang dibuat ulang sebelum perbaikan diterapkan pada kode yang benar-benar melayani trafik.

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 pembaruan apa pun diterapkan. when-needed hanya melakukan reboot jika pemeriksaan di balik needs-restarting -r menunjukkan bahwa paket inti telah diganti. Ini biasanya yang diinginkan pemilik satu server, dengan jendela timer yang ditentukan sendiri. Pengaturan default reboot_command memberikan peringatan 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 start sendiri saat boot. Ini adalah celah umum pada stack Docker Compose yang dijalankan secara manual. Anda juga memerlukan akses console atau rescue dari provider, karena kernel yang gagal boot tidak dapat diperbaiki melalui SSH. Jika salah satunya tidak tersedia, pertahankan reboot = never dan lakukan reboot secara manual setelah membaca journal.

Perbedaan Rocky, AlmaLinux, dan CentOS Stream

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 yang dapat difilter. Errata Rocky yang kedaluwarsa dan dijelaskan sebelumnya adalah salah satu dari sedikit hal yang benar-benar membedakan perilaku keduanya sehari-hari. Jadi, jika server belum dibuat, pertimbangkan hal tersebut bersama jaminan kompatibilitas dan dukungan CPU lama yang membedakan keduanya.

CentOS Stream adalah pengecualian, dan perbedaannya mendasar. Repositori Stream tidak memiliki updateinfo.xml, sehingga filter keamanan tidak pernah dapat menemukan kecocokan dan setiap eksekusi melaporkan No security updates needed. Di Stream, gunakan upgrade_type = default dan terima bahwa Anda akan mengambil setiap update. Stream juga berjalan lebih awal daripada RHEL, sehingga pengaturan tersebut lebih sering berubah pada server Stream dibandingkan pengaturan yang sama pada Rocky atau AlmaLinux. Perbedaan ini bukan akibat pengemasan yang kebetulan, melainkan hasil keputusan Red Hat pada 2020 untuk mengubah CentOS menjadi pratinjau rolling RHEL. Keputusan yang sama mendorong lahirnya Rocky Linux dan AlmaLinux.

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

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

Banyak panduan yang diterbitkan mengenai topik ini masih hanya membahas Rocky 8. Set opsi telah bertambah sejak panduan tersebut ditulis. Jadi, periksa file berkomentar pada server Anda sendiri, bukan 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 sudah diinstal, tetapi timer belum pernah dibuat.

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

Sebuah pengaturan tampaknya diabaikan. Pada tingkat debug, DNF mencatat opsi yang tidak dikenal di automatic.conf, lalu menggunakan nilai default. Akibatnya, nama key yang salah tidak mengubah apa pun dan tidak menghasilkan peringatan. Tulis apply_update = yes dan apply_updates tetap pada no, sehingga server terus mengunduh tetapi tidak pernah menginstal. Setelah mengedit konfigurasi, jalankan sudo systemctl start dnf-automatic.service dan baca journal, bukan hanya mempercayai isi file.

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

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

Service yang sudah ditambal masih melaporkan versi lama. File di 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 semua pembaruan yang tersedia setelah apply_updates = yes.

Mengapa dnf-automatic melaporkan "No security updates needed, but 3 updates available"?

DNF menentukan pembaruan keamanan dengan membaca updateinfo.xml dari repositori. Setiap advisori mencantumkan paket yang memperbaikinya. Jika metadata tersebut tidak ada atau sudah kedaluwarsa, filter keamanan tidak menemukan kecocokan, sementara 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 terbaru.

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. Saat dijalankan, sistem hanya akan reboot 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 masukkan 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 dan tidak melaporkan apa pun yang dapat Anda lihat, kecuali emit_via menetapkan emitter yang benar-benar Anda baca. Tetapkan emit_via ke stdio setidaknya, aktifkan send_error_messages agar kegagalan juga dilaporkan, lalu jalankan dnf needs-restarting -s setelah periode patch untuk menemukan service yang masih menjalankan kode lama.