Làm chủ dnf-automatic: Tự động hóa cập nhật Fedora an toàn và chuyên nghiệp

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Đừng để việc cập nhật thủ công làm phiền bạn

Sau hơn 2 năm dùng Fedora làm máy làm việc chính, mình cực kỳ ấn tượng với tốc độ làm mới package của distro này. Tuy nhiên, việc mỗi sáng phải mở Terminal và gõ sudo dnf upgrade thủ công thực sự rất mất thời gian. Đôi khi mải code, mình quên bẵng việc update suốt cả tuần, để lại hệ thống trước những lỗ hổng bảo mật chưa được vá.

Nhiều bạn thường dùng cron job để chạy lệnh update tự động. Cách này tiềm ẩn rủi ro lớn vì cron không biết cách xử lý xung đột package hoặc lỗi metadata của DNF. Đó là lý do dnf-automatic ra đời. Đây là công cụ chính chủ từ Fedora, giúp bạn kiểm tra, tải về và cài đặt bản cập nhật một cách bài bản, an toàn hơn nhiều.

Quick Start: 5 phút để hệ thống tự vận hành

Nếu bạn muốn hệ thống tự động chạy ngay mà không cần đọc nhiều, hãy thực hiện nhanh 3 bước sau:

Bước 1: Cài đặt package

sudo dnf install dnf-automatic

Bước 2: Cho phép tự động cài đặt

Mặc định, công cụ này chỉ tải về chứ không cài. Bạn cần thay đổi thiết lập trong file cấu hình:

sudo nano /etc/dnf/automatic.conf

Hãy tìm và sửa apply_updates = no thành yes như sau:

[commands]
upgrade_type = default
download_updates = yes
apply_updates = yes

Bước 3: Kích hoạt Systemd Timer

Thay vì chạy như một service nặng nề, dnf-automatic sử dụng Timer để tiết kiệm tài nguyên:

sudo systemctl enable --now dnf-automatic.timer

Hệ thống của bạn hiện đã được thiết lập để tự động kiểm tra và cài đặt cập nhật mỗi ngày một lần.

Giải mã file cấu hình automatic.conf

Mọi thiết lập quan trọng nhất đều nằm trong /etc/dnf/automatic.conf. Dưới đây là những thông số bạn cần lưu ý để tùy chỉnh theo nhu cầu thực tế:

1. upgrade_type (Chọn loại cập nhật)

  • default: Cập nhật toàn bộ package (tương đương dnf upgrade).
  • security: Chỉ cài đặt các bản vá lỗi bảo mật. Đây là lựa chọn vàng cho các server production cần sự ổn định tuyệt đối nhưng vẫn phải an toàn trước các lỗ hổng zero-day.

2. emit_via (Phương thức thông báo)

Để biết hệ thống đã làm gì trong lúc bạn đang ngủ, bạn có thể chọn cách nhận báo cáo:

  • stdio: Chỉ hiển thị khi bạn chạy lệnh bằng tay.
  • email: Gửi báo cáo chi tiết qua email (yêu cầu máy chủ có thiết lập postfix hoặc sendmail).
  • motd: Hiển thị trạng thái cập nhật ngay khi bạn đăng nhập vào server qua SSH.
[emitters]
emit_via = motd

Chiến lược cho Server: Chỉ cập nhật Security và báo cáo qua Mail

Đối với các máy chủ chạy dịch vụ quan trọng, việc tự động cập nhật mọi thứ có thể gây lỗi ứng dụng do thay đổi phiên bản (breaking changes). Giải pháp an toàn nhất là chỉ tự động cài các bản vá Security.

Cấu hình file /etc/dnf/automatic.conf như sau:

[commands]
upgrade_type = security
apply_updates = yes

[email]
email_from = [email protected]
email_to = [email protected]
email_host = localhost

Sau đó, hãy kích hoạt timer chuyên dụng cho bảo mật để đảm bảo cấu hình này được thực thi chính xác:

sudo systemctl enable --now dnf-automatic-install.timer

Giám sát và kiểm tra lịch sử

Dù tin tưởng vào tự động hóa, bạn vẫn nên kiểm tra định kỳ. Để xem dnf-automatic có hoạt động hay không, hãy soi log của systemd bằng lệnh:

# Xem log vận hành gần nhất
sudo journalctl -u dnf-automatic.service

# Kiểm tra lịch trình cập nhật tiếp theo
systemctl list-timers *dnf-automatic*

Vì dnf-automatic vẫn dùng chung backend với DNF, bạn có thể kiểm soát mọi thay đổi qua lịch sử lệnh:

sudo dnf history

Nếu một bản cập nhật tự động gây lỗi, bạn chỉ cần dùng lệnh sudo dnf history undo <ID> để đưa hệ thống về trạng thái cũ trong tích tắc.

Kinh nghiệm thực chiến giúp bạn tránh rắc rối

Xử lý yêu cầu Reboot

Cập nhật Kernel hoặc thư viện hệ thống như glibc yêu cầu khởi động lại máy để có hiệu lực. Rất may là dnf-automatic sẽ không tự ý reboot máy của bạn. Để kiểm tra xem máy đã cần khởi động lại chưa, hãy cài thêm tool needs-restarting:

sudo dnf install yum-utils
sudo needs-restarting -r

Nếu lệnh này trả về thông báo yêu cầu reboot, bạn hãy chủ động sắp xếp thời gian bảo trì phù hợp.

Tùy chỉnh thời điểm cập nhật

Mặc định, timer sẽ chạy ở các thời điểm ngẫu nhiên để tránh làm quá tải các máy chủ mirror. Nếu bạn muốn máy chủ cập nhật chính xác vào lúc 2 giờ sáng, hãy dùng lệnh override:

sudo systemctl edit dnf-automatic.timer

Thêm đoạn cấu hình sau vào file:

[Timer]
OnCalendar=*-*-* 02:00:00
RandomizedDelaySec=0

Thận trọng với Database Server

Với các server chạy MySQL, PostgreSQL hay Redis, việc cập nhật package đôi khi sẽ khởi động lại service. Dù tỷ lệ rủi ro thấp, nó vẫn có thể gây ngắt kết nối đột ngột. Với nhóm server này, mình thường chỉ để download_updates = yes. Sáng hôm sau, mình sẽ kiểm tra danh sách rồi tự tay cài đặt để đảm bảo an toàn.

Tự động hóa giúp chúng ta rảnh tay hơn, nhưng hiểu rõ cách nó vận hành mới là phong cách của một kỹ sư chuyên nghiệp. Chúc các bạn có những đêm ngon giấc mà không phải lo lắng về lỗi bảo mật!

Share: