คลัง (repositories) มาตรฐาน (ทางการ) ของ RHEL/CentOS มีแพ็กเกจพื้นฐานจำนวนน้อยที่ไม่ได้มีเวอร์ชันล่าสุดของโปรแกรมเสมอไป อย่างไรก็ตาม สามารถใช้ third-party public หรือ private repositories เพื่อติดตั้งโปรแกรมใหม่ใน Red Hat Enterprise Linux, CentOS, Oracle Linux และ Scientific Linux Remi และ EPEL เป็น third-party repositories ที่นิยมที่สุด ในบทความนี้ เราจะดูวิธีติดตั้ง จัดการ และใช้ additional repositories กับตัวจัดการแพ็กเกจ yum (dnf) ใน CentOS
Repository คือที่เก็บแพ็กเกจซอฟต์แวร์ RPM สำหรับ Linux ที่อัปเดตได้ ตัวจัดการแพ็กเกจต่างๆ อาจใช้ network repositories เพื่อติดตั้งและอัปเดตโปรแกรม
วิธีเปิดใช้งาน EPEL และ Remi Repository ใน CentOS?
เมื่อติดตั้ง OS (ในตัวอย่างคือ CentOS 7) basic repositories จะติดตั้งโดยค่าเริ่มต้น สามารถดูรายการได้ด้วยคำสั่ง:
yum repolist

เห็นในภาพมี 3 repositories ติดตั้งในระบบ — base, extras, updates เพียงพอสำหรับเริ่มติดตั้งซอฟต์แวร์พื้นฐานและ additional repositories
มาดูวิธีติดตั้ง extra repositories ใน CentOS
EPEL อาจเป็น repository ยอดนิยมที่สุดวันนี้
EPEL (Extra Packages for Enterprise Linux) เป็นโครงการ repository เปิดและฟรีจากทีม Fedora มีแพ็กเกจซอฟต์แวร์เพิ่มเติมคุณภาพสูงสำหรับ Linux distros คลังนี้โฮสต์แพ็กเกจจำนวนมากตั้งแต่ FTP servers ไปจนถึง PHP และเครื่องมือ system monitoring นี่คือ repository ยอดนิยมที่สุด สังเกตว่า EPEL packages ไม่ขัดแย้งกับ native CentOS/RHEL packages และไม่แทนที่พวกมัน
ติดตั้ง EPEL ใน CentOS 7 ได้ง่ายมาก (ไม่เหมือน CentOS 6) ด้วย RPM package (วิธีง่ายที่สุดเพิ่ม repo ใหม่):
yum install epel-release

หลังติดตั้ง repository จะปรากฏใน repo list ทันทีโดยไม่ต้องทำอะไร (ไม่ต้อง clear yum cache)
เพื่อติดตั้ง Remi repository บน CentOS ให้รันคำสั่ง:
rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remi เป็นอีก repository ยอดนิยมสำหรับ CentOS มีเวอร์ชัน PHP และ MySQL ล่าสุด สร้างโดย Remi Collet เพื่อใช้ repository นี้ EPEL repo ต้องเปิดใช้งานใน OS ของคุณ โปรดทราบว่าแพ็กเกจบางส่วนอาจขัดแย้งกับแพ็กเกจจาก basic repos
หากไม่มี RPM package สำหรับ repository ที่ต้องการ สามารถเพิ่มได้ด้วยการสร้างไฟล์ config .repo ใน /etc/yum.repos.d เอง (ดูในส่วนถัดไป)
เพื่อทราบว่าแพ็กเกจติดตั้งจาก repository ไหน สามารถแสดงรายการแพ็กเกจทั้งหมด:
yum list installed
เห็นได้ว่าแต่ละแพ็กเกจมีข้อมูล repository ที่ติดตั้งมา (มี base, update, epel และ anaconda repos ในภาพ)

สามารถแสดงรายการแพ็กเกจที่พร้อมติดตั้งใน repo เฉพาะ:
yum repo-pkgs epel list
ไฟล์การกำหนดค่า Repository (*.repo)
ไฟล์กำหนดค่า repository ทั้งหมดอยู่ใน /etc/yum.repos.d/ และมี extension *.repo ไฟล์ config ทั่วไปมีพารามิเตอร์ดังนี้:
- name — ชื่อ repository
- baseurl — ลิงก์ไปยัง repository (อาจเป็น ftp://address, https://address, https://address หรือ file://address สำหรับ local repo)
- enabled – ใช้ repo นี้หรือไม่: 1 — เปิดใช้งาน, 0 — ปิดใช้งาน;
- async – ใช้การดาวน์โหลดแพ็กเกจแบบขนานหรือไม่ (auto/on/off)
- gpgcheck – ตรวจสอบ GPG หรือไม่ (1 — ตรวจสอบ)
- gpgkey — ลิงก์ไปยัง GPG key
- exclude — รายการแพ็กเกจที่ исклюช
- includepkgs — รายการแพ็กเกจที่รวม
- mirrorlist – รายการ mirror ของ repository
ไฟล์ repo ขนาดเล็กที่สุดอาจเป็นแบบนี้:
[rep_name] name=rep_name baseurl=rep_url
ตัวอย่าง หลังจากติดตั้ง REMI repository ไฟล์ config Remi (remi-*.repo) จะปรากฏในไดเรกทอรี repository

เห็นได้ว่า Remi มีไฟล์ config แยกสำหรับแต่ละ PHP version ต้อง enable PHP version ที่ต้องการผ่าน config file เช่น ผมจะติดตั้ง PHP 7.3 จึง enable repo นั้น (ระบุ enabled=1 ใน remi-php73.repo):

สามารถเชื่อมต่อ repository แบบ manual ได้ สร้างไฟล์ config repository ใน /etc/yum.repos.d/ มาเพิ่ม MariaDB repo
nano /etc/yum.repos.d/mariadb.repo
เพิ่มข้อมูลจากนักพัฒนาแพ็กเกจ MariaDB:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
วิธีปิดใช้งาน Repository ใน CentOS?
เพื่อปิดใช้งานหนึ่งใน repositories ที่ติดตั้งไว้ เพียงระบุ enabled=0 ในไฟล์ config ของมัน

จากนั้น clean yum cache:
yum clean all
และสร้างใหม่:
yum makecache
หลังจากนั้น remi-php73 repo จะไม่ถูกใช้ตอนติดตั้งหรืออัปเดตแพ็กเกจ
หากไม่ต้องการใช้ repository เพียงแค่คำสั่ง install/update ปัจจุบัน สามารถปิดในคำสั่ง yum ได้ เช่น:
yum update --disablerepo=epel
ในตัวอย่างนี้ เราปิด EPEL และอัปเดตแพ็กเกจที่ติดตั้งอยู่
สามารถปิด repositories ที่ไม่ต้องการชั่วคราวได้ เช่น อัปเดตแพ็กเกจเฉพาะจาก MariaDB repository:
yum update --disablerepo "*" --enablerepo=mariadb
เพื่อปิดหรือลบ repos ใช้ yum-config-manager ที่มากับ yum-utils tools
ติดตั้ง yum-utils:
yum -y install yum-utils
ปิด repository เช่น remi:
yum-config-manager --disable remi
เพื่อลบ repository อย่างสมบูรณ์ ต้องลบไฟล์ config ของมันและอัปเดต yum cache
วิธีตรวจสอบ Repo สำหรับ Package Updates ที่พร้อมใช้งาน?
สามารถตรวจสอบ repository เฉพาะสำหรับ package update ที่พร้อมใช้งาน
yum check-update --disablerepo "*" --enablerepo=mariadb

ดังนั้น คุณสามารถจัดการ repos ที่เชื่อมต่อบนเซิร์ฟเวอร์ได้ โปรดทราบว่า repositories ต่างๆ อาจมีแพ็กเกจเหมือนกัน และ version conflicts อาจเกิดระหว่างอัปเดต จึงควรเปิดใช้งานเฉพาะ repositories ที่ทำงานจริง
Third-Party Repositories ยอดนิยมสำหรับ CentOS และ RHEL
MariaDB repo ตามชื่อมีแพ็กเกจ MariaDB สร้างโดยนักพัฒนา MariaDB รองรับและอัปเดตตลอด
เพื่อติดตั้ง repository นี้ สร้างไฟล์ .repo ด้วยเนื้อหา:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
เหมือนกัน Nginx มีแพ็กเกจเกี่ยวกับ nginx HTTPD server
เพื่อติดตั้ง nginx repo สร้างไฟล์ .repo และเพิ่มข้อความ:
[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
รายการ repositories นี้เพียงพอสำหรับ configure LAMP stack กับ nginx เป็น front-end server
รายการนี้อาจเพียงพอสำหรับผู้ใช้เกือบทุกคน แต่ผมจะให้ตัวอย่างเพิ่ม
Webtatic รองรับโดยผู้เชี่ยวชาญจำนวนจำกัด ส่วนใหญ่คือ Andy Thompson มีแพ็กเกจ PHP แต่ดังน้อยกว่า Remi เนื่องจากเวอร์ชัน PHP ล่าสุดใน repo นี้เป็น 7.2 ณ เวลาเขียนบทความ
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
เพื่อเปิดใช้งาน repository ติดตั้ง RPM package:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
MySQL คือสิ่งที่ผมอยากเตือน ไม่ได้วางไว้กับ popular ones เพราะคิดว่า MySQL เป็น database server สูญเสียตำแหน่ง มักติดตั้ง MariaDB แทน แต่หากใครอยากติดตั้ง MySQL สามารถเปิด repo นี้ได้ เช่น ต้องการติดตั้ง mysql 5.7:
ดาวน์โหลดแพ็กเกจ:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
และติดตั้ง:
rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
หลังติดตั้ง สามารถติดตั้ง MySQL ได้:

ในบทความนี้ เราได้แสดงบางด้านของการจัดการ repository ใน CentOS และศึกษา repositories ที่มีประโยชน์บางส่วน