Tuyệt chiêu dùng DNF Priorities trên CentOS Stream 9 để ‘dẹp loạn’ Repository

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Tại sao Repository của bạn dễ trở thành “bãi rác”?

Thời điểm CentOS 8 đột ngột khai tử (EOL), mình từng phải vật lộn di trú (migrate) 5 server production sang CentOS Stream 9 chỉ trong một tuần. Bài học đắt giá nhất mình rút ra là: nếu buông lỏng quản lý Repository, hệ thống sẽ sớm biến thành một mớ hỗn độn không lối thoát.

Kịch bản rất quen thuộc: Bạn dùng BaseOS mặc định, nhưng lại cài thêm EPEL để lấy hằng hà sa số công cụ, hay Remi để dùng PHP 8.2 mới nhất. Chỉ cần một lần sơ suất chạy dnf update, một package hệ thống cực kỳ quan trọng (như openssl hay libxml2) có thể bị ghi đè bởi phiên bản không tương thích từ repo bên thứ ba. Kết quả? Dịch vụ lăn đùng ra chết ngay lập tức.

DNF Priorities chính là vị cứu tinh. Nó cho phép chúng ta gán chỉ số ưu tiên cho từng nguồn phần mềm, đảm bảo các gói cốt lõi của hệ điều hành luôn được bảo vệ nghiêm ngặt.

Ba phương pháp quản lý xung đột: Đâu là lựa chọn tối ưu?

Trước khi gõ lệnh, hãy cùng đặt các phương pháp quản trị lên bàn cân để thấy tại sao DNF Priorities lại được các chuyên gia tin dùng.

1. Bật/Tắt Repo thủ công (–enablerepo)

Bạn tắt hết các repo lạ, chỉ bật lên khi cần cài một package nhất định.

  • Điểm cộng: Kiểm soát tuyệt đối tại chỗ.
  • Điểm trừ: Cực kỳ tốn sức nếu quản lý cụm 10-20 server. Phương pháp này cũng khiến các script update tự động trở nên vô dụng.

2. Dùng chỉ thị exclude trong file cấu hình

Khai báo exclude=package_name trực tiếp trong file .repo để cấm một nguồn cung cấp các gói cụ thể.

  • Điểm cộng: Chặn chính xác mục tiêu.
  • Điểm trừ: Khó duy trì lâu dài. Khi danh sách cần chặn lên tới hàng chục gói, file cấu hình của bạn sẽ trông như một đống rác công nghệ.

3. Cấu hình DNF Priorities (Chuyên gia khuyên dùng)

Bạn gán cho mỗi repo một con số từ 1 đến 99. Số càng nhỏ, quyền lực càng cao.

  • Điểm cộng: Tự động hóa hoàn toàn và đúng chuẩn Enterprise.
  • Điểm trừ: Cần tư duy logic về thứ tự ưu tiên ngay từ đầu để tránh gây nghẽn update.

Triển khai DNF Priorities trên CentOS Stream 9

Trên CentOS Stream 9, DNF đã tích hợp sẵn tính năng này. Tuy nhiên, bạn nên chủ động kiểm tra các plugin hỗ trợ.

Bước 1: Cài đặt Plugin lõi

Chạy lệnh sau để đảm bảo hệ thống có đầy đủ công cụ quản lý:

sudo dnf install dnf-plugins-core -y

Bước 2: Phân cấp chỉ số Priority sao cho khôn ngoan

Tham số priority=N hoạt động theo nguyên tắc: 1 là cao nhất, 99 là thấp nhất. Để tránh việc phải sửa đi sửa lại sau này, mình thường áp dụng công thức khoảng cách như sau:

  • Mức 1-5: Dành riêng cho BaseOS, AppStream (Nhóm bất khả xâm phạm).
  • Mức 10-20: Các repo cộng đồng uy tín như EPEL (với hơn 15.000 packages).
  • Mức 50+: Repo từ bên thứ ba hoặc các kho phần mềm tự build nội bộ.

Bước 3: Cấu hình cho Repository hệ thống

Chúng ta sẽ can thiệp vào các file trong /etc/yum.repos.d/. Hãy bắt đầu với repo chính:

sudo vi /etc/yum.repos.d/centos.repo

Thêm dòng priority=1 vào cuối mỗi mục [baseos][appstream]:

[baseos]
name=CentOS Stream $releasever - BaseOS
# ...
enabled=1
priority=1

[appstream]
name=CentOS Stream $releasever - AppStream
# ...
enabled=1
priority=1

Bước 4: Thiết lập cho EPEL

Với EPEL, hãy đặt ưu tiên thấp hơn (ví dụ: 10). Việc này giúp ngăn EPEL ghi đè lên các gói cùng tên nhưng có độ ổn định cao hơn trong AppStream.

sudo vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever
enabled=1
priority=10

Bước 5: Xác nhận thành quả

Để chắc chắn DNF đã “thuộc bài”, hãy xóa cache và kiểm tra danh sách:

sudo dnf clean all
sudo dnf repolist --with-priorities

Cột Priority hiện đúng các con số bạn vừa nhập nghĩa là bạn đã thành công.

Mẹo thực chiến: Đừng bao giờ đặt tất cả là 1

Những ngày đầu làm việc với CentOS Stream 9, mình từng mắc sai lầm là đặt mọi repo về priority=1. Hệ quả là DNF bị “đơ” vì xung đột giữa hai repo có quyền hạn ngang nhau.

Quy tắc vàng: Hãy luôn để dành khoảng trống giữa các mức ưu tiên (ví dụ 1, 10, 20). Nếu sau này bạn cần chèn thêm một repo mới vào giữa, bạn sẽ không phải đi sửa lại toàn bộ hệ thống.

Nếu bạn thực sự cần cài một phiên bản Beta từ repo ưu tiên thấp, hãy dùng lệnh tạm thời vô hiệu hóa plugin thay vì sửa config:

sudo dnf install package_name --disableplugin=priorities

Làm chủ Repository không chỉ giúp server chạy mượt mà, mà còn giúp bạn kê cao gối ngủ ngon mỗi khi hệ thống tự động cập nhật. Chúc các bạn quản trị hệ thống tự tin và hiệu quả hơn!

Share: