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

Cara Konfigurasi dnf-automatic di Rocky dan AlmaLinux

Ketahui cara menetapkan dnf-automatic untuk kemas kini keselamatan automatik. Panduan ini merangkumi tetapan systemd timer, notifikasi e-mel, dan polisi but semula sistem.

Fungsi dnf-automatic pada Rocky Linux dan AlmaLinux

dnf-automatic ialah cara untuk mendapatkan kemas kini keselamatan automatik pada Rocky Linux dan AlmaLinux. Ia merupakan satu program kecil yang dimulakan oleh systemd timer, yang membaca /etc/dnf/automatic.conf dan melaksanakan apa yang dibenarkan oleh fail tersebut. Pemasangannya hanya memerlukan satu arahan. Selebihnya panduan ini adalah mengenai tetapan yang menentukan sama ada ia melindungi pelayan anda atau sekadar berjalan tanpa melakukan apa-apa.

Jika anda datang daripada Debian atau Ubuntu, ini adalah tugas yang sama dengan unattended-upgrades pada VPS Ubuntu. Satu perbezaan lebih penting daripada yang lain: maksud perkataan "security" kepada pengurus pakej. Pada Ubuntu, ia merupakan arkib berasingan. Pada keluarga RHEL, ia adalah metadata yang dilampirkan pada nasihat (advisory) yang diterbitkan, dan metadata tersebut boleh hilang atau tidak dikemas kini. Jika anda menghalakan dnf-automatic ke repositori tanpa data nasihat, ia tidak akan memasang apa-apa tetapi melaporkan kejayaan.

Panduan ini ditulis berdasarkan Rocky Linux 9 dan AlmaLinux 9, yang menggunakan DNF 4 (DNF ialah pengurus pakej bagi keluarga RHEL), setakat Ogos 2026. Keluaran versi 10 telah beralih kepada DNF5 dan nama-namanya telah berubah, jadi ia mempunyai bahagian tersendiri di penghujung panduan ini. Setiap arahan di bawah perlu dijalankan pada pelayan anda sendiri, dengan output yang sepatutnya muncul di sebelahnya.

Pasang dnf-automatic dan baca konfigurasi yang disertakan

Mendayakan kemas kini automatik adalah sebahagian daripada persediaan yang perlu dilakukan dalam sepuluh minit pertama pada VPS baharu, sebaik sahaja anda mempunyai pengguna bukan root dan firewall. Jika bahagian firewall belum selesai, firewalld ialah perisian yang disertakan bersama Rocky dan AlmaLinux, dan beberapa arahan sudah cukup untuk membuka SSH, membuka port yang digunakan oleh laman anda, serta memastikan kedua-duanya kekal aktif selepas but semula.

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

systemctl is-enabled akan memaparkan disabled pada pemasangan baharu, kerana memasang pakej tersebut tidak memulakan sebarang proses. Inilah sebab paling biasa mengapa pelayan yang "mempunyai dnf-automatic" tidak pernah melaksanakan satu pun kemas kini.

Versi DNF adalah penting untuk satu pilihan konfigurasi. Tetapan reboot diperkenalkan dalam DNF 4.15, dan Red Hat telah melakukan backport ke dalam dnf-4.14.0-6.el9 pada November 2023 melalui nasihat RHBA-2023:6645. Rocky 9 dan AlmaLinux 9 membina semula pakej tersebut, jadi pelayan semasa memilikinya manakala pelayan yang tidak dikemas kini sejak 2023 tidak memilikinya.

Fail konfigurasi tersebut ialah /etc/dnf/automatic.conf. Salinan yang disertakan menyenaraikan setiap pilihan yang difahami oleh binaan ini, bersama nilai lalai yang diletakkan dalam komen. Baca fail tersebut sekali sebelum anda menyuntingnya, kerana fail itu merupakan rujukan tepat bagi versi anda.

Dua suis yang menentukan tindakan yang diambil

download_updates dan apply_updates dalam bahagian [commands] menentukan kelakuan servis. Kedua-duanya ditetapkan kepada no secara lalai pada EL9 (enterprise Linux 9, asas kongsi bagi Rocky 9 dan AlmaLinux 9), jadi dnf-automatic yang tidak disunting dan diaktifkan hanya akan memberitahu anda kemas kini yang tersedia.

  • Kedua-duanya no: dnf-automatic melaporkan kemas kini yang tersedia dan tidak mengubah apa-apa pada pelayan.
  • download_updates = yes dengan apply_updates = no: pakej dimuat turun ke dalam cache DNF. Pemasangan kemudiannya menjadi pantas dan tidak memerlukan rangkaian, tetapi tiada perubahan dilakukan pada malam tersebut.
  • Kedua-duanya yes dengan upgrade_type = default: setiap kemas kini yang tersedia akan dipasang, sama ada ia berkaitan keselamatan atau tidak.
  • Kedua-duanya yes dengan upgrade_type = security: hanya pakej yang dinamakan dalam nasihat keselamatan (security advisory) yang akan dipasang.

Titik permulaan yang munasabah untuk VPS yang menghadap ke awam:

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

network_online_timeout ialah jumlah saat proses menunggu rangkaian berfungsi sebelum berhenti, yang penting bagi pelayan yang baru sahaja but. random_sleep ialah cara lama untuk menyebarkan beban merentasi banyak mesin, dan pemasa (timer) kini melaksanakan tugas tersebut. Jalankan systemctl cat dnf-automatic.service untuk melihat flag tepat yang dihantar oleh servis tersebut.

Buktikan fail tersebut berfungsi seperti yang anda jangkakan, tanpa perlu menunggu sehingga 06:00:

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

Jurnal menunjukkan apa yang dipertimbangkan oleh proses tersebut dan apa yang telah dilakukannya. Anda juga boleh memaksa satu kelakuan daripada baris perintah, yang akan mengatasi fail tersebut untuk proses itu sahaja:

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

Apakah maksud sebenar upgrade_type = security pada Rocky dan Alma

DNF tidak menentukan sama ada sesuatu kemas kini adalah kemas kini keselamatan dengan membandingkan nombor versi. Ia membaca metadata errata: satu fail yang dipanggil updateinfo.xml yang diterbitkan di dalam repositori, di mana setiap nasihat (advisory) menyenaraikan pakej yang membaikinya. AlmaLinux menerbitkan ini sebagai nasihat ALSA, manakala Rocky menerbitkannya sebagai RLSA. upgrade_type = security membina penapis daripada metadata tersebut dan menaik taraf hanya pakej yang sepadan dengannya.

Dua akibat timbul, dan kedua-duanya mengejutkan pengguna.

Pertama, tiada metadata bermakna tiada kemas kini. Jika repositori tidak membawa updateinfo.xml, penapis tidak memadankan apa-apa dan proses tersebut berakhir dengan baris ini dalam jurnal:

No security updates needed, but 3 updates available

Pelayan tidak ditampal, dan tiada apa-apa yang melaporkan kegagalan. Semak sendiri:

dnf updateinfo list --security
dnf check-update

Jika dnf check-update menyenaraikan pakej manakala dnf updateinfo list --security tidak mencetak apa-apa, sama ada tiada kemas kini tertangguh yang membawa nasihat, atau repositori tersebut tidak mempunyai data nasihat untuk dibaca. Rocky dan AlmaLinux kedua-duanya menerbitkannya, jadi pada kedua-dua sistem tersebut, senarai kosong biasanya adalah tepat. CentOS Stream tidak menerbitkannya sama sekali.

Kedua, mod keselamatan bukanlah perubahan minimum. dnf-automatic menambah penapis keselamatan dan kemudian menjalankan laluan naik taraf biasa, jadi pakej yang dinamakan dalam nasihat akan beralih ke versi terbaharu dalam repositori dan menarik dependensinya bersama-sama. Langkah yang lebih kecil, iaitu beralih hanya ke versi terawal yang membaiki nasihat tersebut, adalah dnf upgrade-minimal --security yang dijalankan secara manual. dnf-automatic tidak mempunyai tetapan untuk perkara ini.

Satu lagi amaran terpakai untuk Rocky. Rocky menjana errata daripada data Red Hat melalui talian paipnya sendiri, dan talian paip itu pernah ketinggalan. Pada September 2025, pengguna melaporkan bahawa updateinfo.xml BaseOS Rocky 9 tidak berubah sejak Disember 2024, jadi --security terlepas nasihat terkini, dan kakitangan Rocky mengesahkan ia sebagai isu yang diketahui. Jika anda bergantung pada upgrade_type = security, bandingkan senarai nasihat dengan pengumuman RLSA terkini dari semasa ke semasa. Pada pelayan yang mana liputan lebih penting daripada kawalan perubahan, upgrade_type = default mengikut jadual yang anda pilih adalah tetapan yang lebih selamat.

Timer systemd yang sebenarnya menjalankannya

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

list-timers sepatutnya mencetak satu baris dengan masa NEXT kira-kira sehari dari sekarang. Jadual yang kosong bermakna timer tidak diaktifkan, jadi tiada apa-apa yang akan berjalan.

Timer yang dibekalkan akan dicetuskan pada *-*-* 6:00 dengan RandomizedDelaySec=60m dan Persistent=true. Kelewatan rawak (random delay) menyebarkan beban merentasi satu jam supaya setiap pelayan tidak mengakses mirror pada saat yang sama. Persistent=true bermakna mesin yang dimatikan pada 06:00 akan menjalankan tugasan yang terlepas sejurus selepas ia dihidupkan, bukannya melangkau hari tersebut.

Tukar jadual dengan menggunakan drop-in. Jangan sunting unit yang dibekalkan, kerana naik taraf pakej akan menggantikan fail di bawah /usr/lib/systemd/system.

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

Baris OnCalendar= yang kosong adalah wajib. OnCalendar akan terkumpul, jadi tanpa tetapan semula (reset) tersebut, anda akan mengekalkan entri 06:00 dan menambah satu lagi, menyebabkan tugasan berjalan dua kali sehari. Sahkan hasilnya dengan systemctl list-timers dnf-automatic.timer dan baca lajur NEXT. Peraturan drop-in yang sama terpakai untuk apa sahaja yang anda jadualkan, yang diterangkan dalam menulis unit perkhidmatan dan timer systemd.

Sekarang, perangkapnya. Pakej tersebut membekalkan tiga lagi timer: dnf-automatic-notifyonly.timer, dnf-automatic-download.timer dan dnf-automatic-install.timer. Setiap satunya memulakan program yang sama dengan flag baris perintah, dan flag tersebut akan mengatasi download_updates dan apply_updates daripada fail konfigurasi anda. Aktifkan salah satu daripadanya di samping dnf-automatic.timer dan tugasan akan berjalan dua kali dengan dua gelagat berbeza, yang kelihatan seolah-olah fail konfigurasi anda diabaikan. Aktifkan satu timer dan semak:

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

Bagaimanakah saya tahu bila sesuatu telah dipasang?

emit_via dalam bahagian [emitters] mengawal pelaporan. Di bawah systemd, pemancar stdio menulis ke dalam journal, yang merupakan pilihan paling boleh dipercayai kerana ia tidak memerlukan perisian lain dipasang:

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

Pemancar motd menulis laporan ke dalam /etc/motd dan menggantikan kandungan fail tersebut. Jika anda mengekalkan banner log masuk di sana, jangan gunakan pemancar ini.

Pemancar email membuka sambungan SMTP (simple mail transfer protocol) ke email_host pada email_port, yang secara lalai ditetapkan kepada localhost dan 25. VPS yang baharu tidak mempunyai sebarang perkhidmatan yang mendengar pada port tersebut, jadi sambungan akan ditolak dan tiada e-mel dihantar. Jalankan ss -lnt | grep ':25' sebelum anda bergantung kepadanya, dan sediakan Postfix sebagai relay-only jika outputnya kosong. Apabila e-mel berfungsi, subjek e-mel akan tertera Updates applied on 'web01'., dengan mengambil nama daripada system_name.

Untuk tujuan lain, pemancar command menyerahkan 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 lalai ditetapkan kepada no, yang bermaksud kegagalan semasa proses berjalan tidak akan dilaporkan langsung. Aktifkan tetapan ini. Sistem tampalan (patching) yang hanya mengumumkan kejayaan adalah lebih buruk daripada tiada sistem langsung, kerana kesunyian dianggap sebagai tanda sistem sihat.

dnf-automatic tidak memulakan semula servis anda

Memasang pakej akan menggantikan fail pada cakera. Proses yang sedang berjalan mengekalkan kod lama dalam memori, jadi pustaka yang telah ditampal (patched) tidak memberi kesan kepada daemon yang bermula sejak bulan lepas. Jurang antara pemasangan dan keberkesanan inilah sebab mengapa penampalan automatik memerlukan polisi permulaan semula, bukan sekadar polisi pemasangan.

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

-s menyenaraikan servis systemd yang failnya berubah selepas ia dimulakan. -r menjawab satu soalan, dan mencetak salah satu daripada dua blok:

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 bukanlah analisis yang mendalam. Ia menyemak senarai pakej tetap: kernel, kernel-core, kernel-rt, glibc, linux-firmware, systemd, dbus, dbus-broker, dbus-daemon dan microcode_ctl. Jika salah satu daripadanya dipasang selepas but terakhir, anda akan mendapat jawapan pertama. Tambahkan nama pakej anda sendiri dalam fail yang berakhir dengan .conf di bawah /etc/dnf/plugins/needs-restarting.d/ apabila sesuatu yang lain pada pelayan juga memerlukan but semula untuk berkuat kuasa.

Satu peringatan untuk skrip: dnf needs-restarting -r keluar dengan status bukan sifar (non-zero) apabila but semula diperlukan dan apabila arahan itu sendiri gagal, jadi status keluar sahaja tidak dapat membezakan kedua-duanya. Baca teks output tersebut.

Memulakan semula servis adalah langkah yang lebih kecil dan biasanya merupakan tindakan yang tepat. Mulakan semula daemon SSH daripada sesi SSH kedua yang sudah dibuka, supaya konfigurasi yang salah tidak menyebabkan anda terkunci keluar. Kernel baharu adalah kes di mana hanya but semula dapat membantu, kerana kernel yang sedang berjalan tidak boleh diganti secara terus. Jika anda ingin mengasingkan kemas kini pada pagi tertentu kepada dua kategori tersebut, kemas kini yang mana memerlukan but semula dan yang mana hanya memerlukan permulaan semula servis akan meneliti output tersebut pakej demi pakej.

Kontena adalah kes yang berasingan, kerana dnf-automatic menampal pakej hos dan tidak menyentuh userland yang dibina ke dalam imej, jadi pelayan yang menjalankan Docker Engine pada Rocky Linux atau AlmaLinux juga perlu menarik semula imejnya dan mencipta semula kontenanya sebelum pembetulan sampai kepada kod yang sebenarnya melayani trafik.

Adakah pelayan perlu but semula secara automatik?

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

reboot = never ialah tetapan lalai. when-changed akan melakukan but semula selepas sebarang kemas kini digunakan. when-needed hanya melakukan but semula apabila pemeriksaan di sebalik needs-restarting -r menyatakan pakej teras telah diganti, iaitu pilihan yang diingini oleh kebanyakan pemilik pelayan tunggal, digandingkan dengan tetingkap masa yang dipilih sendiri. reboot_command lalai memberikan pengguna yang sedang log masuk amaran selama lima minit melalui shutdown, dan anda boleh memanjangkan tempoh tersebut.

Selesaikan dua perkara sebelum anda mengaktifkan fungsi ini. Setiap servis yang anda harapkan perlu bermula secara automatik semasa but, yang biasanya merupakan kelemahan bagi stack Docker Compose yang dimulakan secara manual. Anda juga memerlukan akses konsol atau mod penyelamat (rescue) daripada pembekal anda, kerana kernel yang gagal but tidak boleh dibaiki melalui SSH. Jika salah satu daripada ini tiada, kekalkan reboot = never dan lakukan but semula secara manual selepas membaca jurnal.

Rocky, AlmaLinux dan CentOS Stream: perbezaan antara keduanya

Pada Rocky 9 dan AlmaLinux 9, semua perkara di atas adalah sama, termasuk laluan konfigurasi dan nama unit. Kedua-duanya menerbitkan errata, jadi upgrade_type = security mempunyai data untuk ditapis. Errata Rocky yang lapuk yang diterangkan sebelum ini merupakan salah satu daripada sedikit perkara yang membezakan operasi harian mereka. Jika pelayan belum dibina, pertimbangkan perkara ini bersama janji keserasian dan sokongan CPU lama yang membezakan kedua-duanya.

CentOS Stream adalah pengecualian, dan ia merupakan perbezaan yang ketara. Repositori Stream tidak membawa updateinfo.xml, jadi penapis keselamatan tidak akan dapat dipadankan dan setiap pelaksanaan akan melaporkan No security updates needed. Pada Stream, gunakan upgrade_type = default dan terima hakikat bahawa anda akan menerima setiap kemas kini. Stream juga berjalan lebih awal daripada RHEL, jadi tetapan tersebut lebih kerap berubah pada pelayan Stream berbanding tetapan yang sama pada Rocky atau AlmaLinux. Perbezaan itu bukanlah kesilapan pembungkusan, tetapi hasil keputusan Red Hat pada tahun 2020 untuk menukar CentOS menjadi pratonton bergulir (rolling preview) bagi RHEL, iaitu keputusan yang sama yang membawa kepada kewujudan Rocky Linux dan AlmaLinux.

Rocky 10 dan AlmaLinux 10 telah beralih kepada DNF5, yang menamakan semula beberapa perkara. Dokumentasi DNF5 huluan menyatakan pemasa sebagai dnf5-automatic.timer, meletakkan lalai yang dibekalkan dalam /usr/share/dnf5/dnf5-plugins/automatic.conf dengan penggantian anda masih dalam /etc/dnf/automatic.conf, menetapkan lalai download_updates kepada yes dan bukannya no, serta menambah distro-sync sebagai upgrade_type. Pertanyaan nasihat (advisory query) ialah dnf advisory list, dengan updateinfo dikekalkan sebagai alias. Sahkan perkara yang sebenarnya dipasang oleh keluaran anda sebelum menyalin nama pakej atau unit daripada panduan yang ditulis untuk versi 9:

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

Banyak panduan yang diterbitkan untuk topik ini hanya meliputi Rocky 8. Set pilihan telah berkembang sejak panduan tersebut ditulis, jadi semak fail yang mempunyai komen pada pelayan anda sendiri dan jangan hanya mempercayai artikel lama.

Mod kegagalan dan rentetan yang akan anda lihat

Tiada apa-apa yang berjalan. systemctl list-timers dnf-automatic.timer mencetak jadual kosong dan systemctl is-enabled dnf-automatic.timer mencetak disabled. Pakej telah dipasang, tetapi pemasa tidak pernah dipasang.

Tugasan berjalan dan tidak memasang apa-apa. Jurnal mengandungi No security updates needed, but 3 updates available. Penapis keselamatan tidak memadankan apa-apa, sama ada kerana tiada perkara tertunda yang membawa nasihat atau kerana repositori tidak menerbitkan data nasihat.

Satu tetapan kelihatan diabaikan. DNF mencatat pilihan yang tidak diketahui dalam automatic.conf pada tahap nyahpepijat dan kemudian menggunakan tetapan lalai, jadi kunci yang tersalah eja tidak mengubah apa-apa dan tidak memberi amaran kepada sesiapa. Tulis apply_update = yes dan apply_updates kekal pada no, jadi kotak tersebut memuat turun selama-lamanya dan tidak pernah memasang. Selepas sebarang penyuntingan, jalankan sudo systemctl start dnf-automatic.service dan baca jurnal dan bukannya mempercayai fail tersebut.

Tugasan berjalan dua kali sehari. Dua pemasa telah diaktifkan. systemctl list-unit-files 'dnf-automatic*' menunjukkan yang mana satu, dan pemasa tambahan menghantar flag yang mengatasi fail konfigurasi anda.

Tiada e-mel sampai. Sama ada tiada apa-apa yang mendengar pada port 25 untuk pemancar email, atau send_error_messages masih no dan satu-satunya perkara yang perlu dilaporkan adalah ralat.

Servis yang telah ditampal masih melaporkan versi lama. Fail pada cakera adalah baharu dan proses dalam memori adalah lama. dnf needs-restarting -s menamakan servis yang perlu dimulakan semula.

FAQ

Adakah dnf-automatic hanya memasang kemas kini keselamatan pada Rocky Linux?

Hanya jika anda menetapkan upgrade_type = security dalam /etc/dnf/automatic.conf, dan hanya jika repositori anda menerbitkan metadata errata. Rocky Linux dan AlmaLinux kedua-duanya menerbitkan metadata tersebut, jadi penapis mempunyai advisories untuk dipadankan. Nilai lalai yang dibekalkan ialah upgrade_type = default, yang memasang setiap kemas kini yang tersedia sebaik sahaja apply_updates = yes.

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

DNF menentukan perkara yang dikira sebagai kemas kini keselamatan dengan membaca updateinfo.xml daripada repositori, di mana setiap advisory menyenaraikan pakej yang membaikinya. Apabila metadata tersebut tiada atau lapuk, penapis keselamatan tidak memadankan apa-apa walaupun kemas kini biasa masih belum selesai, yang menghasilkan baris tersebut. Ini dijangkakan pada CentOS Stream, yang tidak menerbitkan sebarang errata langsung. Pada Rocky atau AlmaLinux, bandingkan dnf updateinfo list --security dengan dnf check-update dan pastikan metadata anda adalah terkini.

Adakah dnf-automatic akan memulakan semula pelayan saya selepas kemas kini kernel?

Tidak, melainkan anda memintanya. Pilihan reboot ditetapkan kepada never secara lalai. Tetapkan reboot = when-needed dan proses akan dimulakan semula hanya apabila pemeriksaan di sebalik dnf needs-restarting -r mendapati bahawa pakej teras seperti kernel atau glibc telah diganti sejak but. reboot = when-changed akan memulakan semula selepas sebarang kemas kini digunakan. Kedua-duanya menggunakan reboot_command, yang ditetapkan kepada shutdown -r +5 secara lalai dengan mesej amaran kepada pengguna yang sedang log masuk.

Bagaimanakah cara saya menukar masa dnf-automatic dijalankan?

Jalankan sudo systemctl edit dnf-automatic.timer dan tambah bahagian [Timer] dengan baris OnCalendar= yang kosong diikuti oleh jadual anda, contohnya OnCalendar=*-*-* 03:30. Baris kosong diperlukan kerana OnCalendar bersifat terkumpul, jadi jika ditinggalkan, ia akan mengekalkan masa 06:00 yang dibekalkan dan menambah masa kedua. Sahkan dengan systemctl list-timers dnf-automatic.timer dan baca lajur NEXT.

Adakah saya masih perlu memeriksa pelayan yang menampal dirinya sendiri?

Ya. dnf-automatic hanya memasang pakej dan berhenti di situ. Ia tidak memulakan semula daemon, dan ia tidak melaporkan apa-apa yang akan anda lihat melainkan emit_via menamakan pemancar (emitter) yang anda benar-benar baca. Tetapkan emit_via kepada stdio sekurang-kurangnya, hidupkan send_error_messages supaya kegagalan turut dilaporkan, dan jalankan dnf needs-restarting -s selepas tetingkap tampalan untuk mencari servis yang masih menjalankan kod lama.