Kho (repository) tiêu chuẩn (chính thức) của RHEL/CentOS cung cấp một số lượng nhỏ các gói cơ bản, không luôn chứa phiên bản mới nhất của các chương trình. Tuy nhiên, bạn có thể sử dụng kho công cộng hoặc riêng tư của bên thứ ba để cài đặt chương trình mới trong Red Hat Enterprise Linux, CentOS, Oracle Linux và Scientific Linux. Remi và EPEL là hai kho phổ biến nhất của bên thứ ba. Trong bài viết này, chúng ta sẽ xem cách cài đặt, quản lý và sử dụng các kho bổ sung với trình quản lý gói yum (dnf) trong CentOS.
Kho là một kho lưu trữ phần mềm RPM có thể cập nhật cho Linux. Các trình quản lý gói khác nhau có thể sử dụng kho mạng để cài đặt và cập nhật chương trình.
Cách kích hoạt kho EPEL và Remi trên CentOS?
Khi bạn cài đặt hệ điều hành (trong ví dụ của chúng ta là CentOS 7), các kho cơ bản được cài đặt mặc định. Bạn có thể xem danh sách chúng bằng lệnh:
yum repolist

Như bạn thấy trong ảnh chụp, có 3 kho được cài đặt trong hệ thống — base, extras, updates. Chúng đủ để bắt đầu cài đặt phần mềm cơ bản và các kho bổ sung.
Hãy xem cách cài đặt kho bổ sung trong CentOS.
EPEL có thể là kho phổ biến nhất hiện nay.
EPEL (Extra Packages for Enterprise Linux) là dự án kho mở và miễn phí do nhóm Fedora cung cấp. Nó chứa các gói phần mềm bổ sung chất lượng cao cho các bản phân phối Linux. Kho này lưu trữ một lượng lớn gói từ máy chủ FTP đến PHP và công cụ giám sát hệ thống. Đây là kho phổ biến nhất. Cần lưu ý rằng các gói EPEL không xung đột với gói gốc CentOS/RHEL và không thay thế chúng.
Rất dễ dàng cài đặt EPEL trong CentOS 7 (khác với CentOS 6) bằng gói RPM (đây là phương pháp dễ nhất để thêm kho mới):
yum install epel-release

Sau khi cài đặt, kho xuất hiện trong danh sách repo mà không cần thao tác thêm (bạn không cần xóa cache yum).
Để cài đặt kho Remi trên CentOS, chạy lệnh này:
rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remi là một kho phổ biến khác cho CentOS. Nó chứa các phiên bản PHP và MySQL mới nhất. Được tạo bởi Remi Collet. Để sử dụng kho này, kho EPEL phải được kích hoạt trong hệ điều hành của bạn. Xin lưu ý rằng một số gói của nó có thể xung đột với gói từ kho cơ bản.
Nếu không có gói RPM cho kho bạn cần, bạn có thể thêm nó bằng cách tạo file cấu hình .repo trong /etc/yum.repos.d thủ công (xem phần tiếp theo).
Để hiểu gói được cài đặt từ kho nào, bạn có thể hiển thị danh sách đầy đủ các gói đã cài đặt:
yum list installed
Như bạn thấy, mỗi gói có thông tin về kho nó được cài đặt (trên ảnh chụp có base, update, epel và anaconda repos).

Bạn có thể hiển thị danh sách gói có sẵn để cài đặt trong một repo cụ thể:
yum repo-pkgs epel list
File cấu hình Repository (*.repo)
Tất cả file cấu hình kho nằm trong /etc/yum.repos.d/ và có phần mở rộng *.repo. Một file cấu hình điển hình chứa các tham số sau:
- name — tên kho
- baseurl — đường dẫn đến kho (có thể là ftp://address, https://address, https://address hoặc file://address cho kho cục bộ)
- enabled — có sử dụng kho này không: 1 — bật, 0 — tắt;
- async — có dùng tải xuống gói song song không (auto/on/off)
- gpgcheck — có thực hiện kiểm tra GPG không (1 — bật kiểm tra)
- gpgkey — đường dẫn đến khóa GPG
- exclude — danh sách gói bị loại trừ
- includepkgs — danh sách gói được bao gồm
- mirrorlist — danh sách mirror của kho
File repo nhỏ nhất có thể trông như sau:
[rep_name] name=rep_name baseurl=rep_url
Ví dụ, sau khi cài đặt kho REMI, một số file cấu hình Remi (remi-*.repo) sẽ xuất hiện trong thư mục kho.

Như bạn thấy, Remi có file cấu hình riêng cho từng phiên bản PHP. Bạn phải kích hoạt phiên bản PHP bạn cần qua file cấu hình. Ví dụ, tôi sẽ cài PHP 7.3 trên máy chủ, nên tôi kích hoạt repo tương ứng (đã chỉ định enabled=1 trong remi-php73.repo):

Bạn có thể kết nối kho thủ công. Tạo file cấu hình kho trong /etc/yum.repos.d/. Hãy thêm kho MariaDB.
nano /etc/yum.repos.d/mariadb.repo
Thêm dữ liệu do nhà phát triển gói MariaDB cung cấp:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Cách tắt Repository trên CentOS?
Để tắt một trong các kho đã cài đặt, chỉ cần chỉ định enabled=0 trong file cấu hình của nó.

Sau đó dọn dẹp cache yum:
yum clean all
Và tạo lại cache:
yum makecache
Sau đó kho remi-php73 sẽ không được dùng khi cài đặt hoặc cập nhật gói.
Nếu bạn không muốn dùng kho chỉ cho lệnh cài đặt/cập nhật gói hiện tại, bạn có thể tắt nó trong lệnh yum, ví dụ:
yum update --disablerepo=epel
Trong ví dụ này, chúng ta đã tắt EPEL và cập nhật các gói đã cài đặt.
Bạn có thể tạm thời tắt tất cả các kho không cần thiết. Ví dụ, để chỉ cập nhật gói từ kho MariaDB, chạy lệnh:
yum update --disablerepo "*" --enablerepo=mariadb
Để tắt hoặc xóa repo, công cụ yum-config-manager thuộc gói yum-utils được sử dụng.
Cài đặt yum-utils:
yum -y install yum-utils
Tắt một kho, ví dụ remi:
yum-config-manager --disable remi
Để xóa hoàn toàn một kho, bạn phải xóa file cấu hình của nó và cập nhật cache yum.
Cách kiểm tra cập nhật gói có sẵn trong Repo?
Bạn có thể kiểm tra một kho cụ thể xem có cập nhật gói nào không.
yum check-update --disablerepo "*" --enablerepo=mariadb

Như vậy, bạn có thể quản lý các kho đã kết nối trên máy chủ. Lưu ý rằng các kho khác nhau có thể chứa cùng một gói, và xung đột phiên bản có thể xảy ra khi cập nhật. Vì vậy, chỉ để lại các kho bạn làm việc được bật.
Các kho bên thứ ba phổ biến cho CentOS và RHEL
MariaDB repo, như tên cho thấy, chứa các gói MariaDB. Kho này được tạo bởi nhà phát triển MariaDB, luôn được hỗ trợ và cập nhật.
Để cài đặt kho này vào hệ thống, tạo file .repo với nội dung sau:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Giống như kho trước, Nginx chứa các gói liên quan đến máy chủ HTTP nginx.
Để cài đặt kho nginx, tạo file .repo và thêm văn bản sau:
[nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/CentOS/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key
Danh sách kho này đủ để cấu hình ngăn xếp LAMP với nginx làm máy chủ front-end.
Danh sách kho này có thể đủ cho hầu hết người dùng, tuy nhiên tôi sẽ đưa thêm một vài ví dụ.
Webtatic được hỗ trợ bởi một số chuyên gia hạn chế, chủ yếu là Andy Thompson. Nó chứa các gói liên quan đến PHP, nhưng kém phổ biến hơn Remi, vì phiên bản PHP mới nhất trong kho này là 7.2 vào thời điểm bài viết được viết.
yum repo-pkgs webtatic list | grep php7
mod_php71w.x86_64 7.1.31-1.w7 webtatic mod_php72w.x86_64 7.2.21-1.w7 webtatic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ php72w-tidy.x86_64 7.2.21-1.w7 webtatic php72w-xml.x86_64 7.2.21-1.w7 webtatic php72w-xmlrpc.x86_64 7.2.21-1.w7 webtatic
Để kích hoạt kho, cài đặt gói RPM sau:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
MySQL là thứ tôi muốn nhắc đến. Tôi không đặt nó cùng với các kho phổ biến, vì tôi nghĩ MySQL làm máy chủ cơ sở dữ liệu đã mất vị thế. MariaDB thường được cài trên máy chủ thay thế. Tuy nhiên, nếu ai đó muốn cài MySQL, bạn có thể kích hoạt kho này. Ví dụ, bạn muốn cài mysql 5.7:
Tải gói:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
Và cài đặt nó:
rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
Sau cài đặt tôi có thể cài MySQL:

Trong bài viết này, chúng ta đã trình bày một số khía cạnh quản lý kho trong CentOS và tìm hiểu một số kho hữu ích.