ในบทความนี้ เราจะพิจารณา YUM package manager ที่ช่วยจัดการการติดตั้ง ลบ และอัปเดตโปรแกรม (RPM packages) แก้ไข dependencies อัตโนมัติ และจัดการ additional repositories บทความนี้จะเป็นประโยชน์สำหรับ Linux administrators ใหม่ๆ เป็น yum cheat sheet
Yum (Yellowdog Updater Modified) เป็น console package manager สำหรับ Linux distros ที่ใช้ RPM packages (RedHat Package Manager) รวมถึง OS ยอดนิยมอย่าง RedHat, CentOS, Fedora, Oracle Linux, Scientific Linux
การติดตั้ง อัปเดต และลบแพ็กเกจด้วย YUM
เริ่มจากอะไรดี? เหมือนทุกกรณี เริ่มจาก help:
yum help – ความช่วยเหลือเต็มรูปแบบของ yum
ผมจะเน้นคำสั่ง yum ยอดนิยมที่สุด:
yum clean all – ล้าง cache ของแพ็กเกจทั้งหมด (ใช้เมื่อมีปัญหากับ yum)
yum makecache – สร้าง package cache ใหม่
yum repolist – แสดงรายการ repositories ที่เชื่อมต่อทั้งหมด ผลลัพธ์ประมาณนี้:
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: * extras: * updates: repo id repo name status base/7/x86_64 CentOS-7 - Base 10,019 extras/7/x86_64 CentOS-7 - Extras 435 updates/7/x86_64 CentOS-7 - Updates 2,500 repolist: 12,954
ระบบของผมมีแค่ standard CentOS 7 repositories: Base, Extras และ Updates
yum list available – แสดงรายการแพ็กเกจทั้งหมดที่พร้อมติดตั้ง
yum list installed – แสดงรายการแพ็กเกจที่ติดตั้งในระบบทั้งหมด
yum list kernel – แสดงรายการแพ็กเกจที่เกี่ยวกับ Linux kernel
สามารถตรวจสอบว่าแพ็กเกจเฉพาะติดตั้งบน CentOS server หรือไม่ (เช่น ตรวจสอบ apache package):
yum list installed httpd
Installed Packages httpd.x86_64 2.4.6-89.el7.centos.1 @updates
สามารถดูข้อมูลรายละเอียดของแพ็กเกจเฉพาะได้ ตัวอย่าง ดูข้อมูล MariaDB package:
yum info mariadb

เพื่อติดตั้งแพ็กเกจ ใช้ yum install ติดตั้ง apache web server:
yum install httpd
หากเจอ error "Traceback (most recent call last):thread.error: can’t start new thread" เวลารันคำสั่ง yum ใดๆ น่าจะเป็น RAM ไม่พอ ลองเพิ่ม RAM หรือปิด yum plugins (ระบุ plugins=0 ใน /etc/yum.conf)
ก่อนติดตั้งแพ็กเกจ สามารถตรวจสอบ dependencies ได้ด้วย:
yum deplist httpd
หากต้องการติดตั้งแพ็กเกจแต่ลืมชื่อเต็ม ใช้ wildcard * เช่น:
yum install epel-*
Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-11 will be installed --> Finished Dependency Resolution Install 1 Package Total download size: 15 k Installed size: 24 k Is this ok [y/d/N]:
หากพิมพ์แค่:
yum install epel
No package epel available. Error: Nothing to do
จะไม่เห็นแพ็กเกจ available
Yum ติดตั้งหลายแพ็กเกจพร้อมกันได้:
yum install httpd php wget rsyslog
เพื่อ reinstall แพ็กเกจ:
yum reinstall proftpd
เพื่อลบแพ็กเกจที่ติดตั้งแล้วด้วย yum ใช้ parameter remove:
yum remove httpd
ก่อนลบแพ็กเกจใดๆ แนะนำให้ตรวจสอบ dependencies (มีแพ็กเกจที่ทำให้แพ็กเกจอื่นถูกลบติดตามเมื่อพยายามลบ)
yum deplist proftpd

เพื่อค้นหาแพ็กเกจด้วยชื่อหรือคำอธิบาย:
yum search nginx
ใช้ option provides เพื่อหาแพ็กเกจที่มีไฟล์เฉพาะ เช่น:
yum provides */squid.conf
เพื่ออัปเดตแพ็กเกจที่ติดตั้งทั้งหมด:
yum update
สามารถอัปเดตแพ็กเกจโดยชื่อ:
yum update php
ตรวจสอบว่ามีอัปเดตสำหรับระบบหรือไม่:
yum check-update
เพื่อดูข้อมูล security updates:
yum updateinfo list security
บางครั้งอาจมีปัญหาหลังอัปเดตแพ็กเกจหรือ service เช่นเว็บไซต์หยุดทำงานหลังอัปเดต php version สามารถ roll back กลับเวอร์ชันก่อนหน้าด้วย yum:
yum downgrade php
ยังสามารถใช้ group installation ด้วย grouplist มี predefined package groups พร้อมชุดโปรแกรมต่างๆ ใน repository แสดงรายการ groups:
yum grouplist
ลองดูตัวอย่าง "Basic Web Server" list ดูรายละเอียด group และแพ็กเกจ:
yum groupinfo "Basic Web Server"

หลังตรวจสอบ พบว่าชุดแพ็กเกจและ services สำหรับ web server จะถูกติดตั้ง
อีก group list ที่มีประโยชน์ — "System Administration Tools":
yum groupinfo "System Administration Tools"

เห็นได้ว่ามี monitoring และ debugging tools
ติดตั้ง group list ด้วยคำสั่ง:
yum groupinstall "System Administration Tools"
แพ็กเกจที่ติดตั้งจะปรากฏในบล็อกแยก ("Installed Groups"):

การใช้คำสั่ง YUM History
สามารถแสดงประวัติการติดตั้ง yum (รายการ transactions) ด้วย:
yum history list
เอาต์พุทประกอบ 5 คอลัมน์ คอลัมน์แรกแสดง transaction ID ใช้ดูรายละเอียด transaction (แพ็กเกจที่ติดตั้ง, dependencies)
ตัวอย่าง:
yum history info 10

นอกจากนี้ สามารถ undo transaction ได้ด้วยคำสั่ง:
yum history undo 10
ในกรณีของผม จะมี 4 packages ถูกลบ:

สามารถดูข้อมูลการติดตั้ง/ลบ yum packages ใน /var/log/yum.log:
cat /var/log/yum.log
ตัวเลือกคำสั่ง YUM ที่มีประโยชน์
Yum มี options ที่มีประโยชน์บางอย่างสำหรับจัดการแพ็กเกจ ใช้ -y เพื่อปิด output ทั้งหมดยกเว้น errors เช่น:
yum update -y yum install httpd -y
เพื่อตอบ no ให้ใช้ option:
--assumeno
เพื่อใช้ yum โดยไม่มี plugins หรือปิด plugin หนึ่ง ใช้ parameters:
--noplugins
--disableplugin=fastestmirror
เพื่อ enable plugin ที่ปิดไว้:
--enableplugin=fastestmirror
เพื่อใช้ repo ที่ปิดอยู่:
yum update --enablerepo=atomic
เพื่อปิด repository เฉพาะใน yum:
yum update --disablerepo=atomic
ไฟล์การกำหนดค่า YUM /etc/yum.conf
ไฟล์ config YUM คือ /etc/yum.conf
พารามิเตอร์หลักของ config file:
- cachedir– local package cache (ค่าเริ่มต้น /var/cache/yum)
- logfile— path ไปยัง yum log file
- obsoletes — อัปเดต obsolete packages หรือไม่ (1 — ใช่, 0 — ไม่)
- gpgcheck — verify package ก่อนติดตั้ง (1 — ใช่, 0 — ไม่)
- keepcache — เก็บ cache หรือไม่ (1 — ใช่, 0 — ไม่)
- cachedir — ไดเรกทอรีเก็บ yum cache (ค่าเริ่มต้น /var/cache/yum)
- debuglevel – debug level 1-10
- plugins — enable yum plugins (1 — ใช่, 0 — ไม่)
- bugtracker_url – ลิงก์ที่จะบันทึก yum errors
- installonly_limit – จำนวนเวอร์ชันสูงสุดที่ติดตั้งได้สำหรับแพ็กเกจเดียว
YUM Plugins ที่มีประโยชน์
ทำไมต้องมี plugins ใน yum? เหมือนทุกที่ มันทำให้งานง่ายขึ้น
นี่คือ plugins ยอดนิยมและคำอธิบาย:
yum-plugin-fastestmirror – วัดความเร็ว mirror และเสนอที่เร็วที่สุดเพื่อติดตั้งแพ็กเกจ
yum-plugin-security — ให้รายการ security updates เท่านั้น
yum-plugin-keys — อนุญาตให้ใช้ keys, keys-info, keys-data, keys-remove parameters
ไดเรกทอรีที่เก็บ plugins ทั้งหมดคือ /etc/yum/
yum-plugin-versionlock – ป้องกันไม่ให้แพ็กเกจที่เลือกอัปเดต
เพื่อแสดงรายการ yum plugins ที่มี:
yum search yum-plugin
======================================================================= N/S matched: yum-plugin ======================================================================= PackageKit-yum-plugin.x86_64 : Tell PackageKit to check for updates when yum exits fusioninventory-agent-yum-plugin.noarch : Ask FusionInventory agent to send an inventory when yum exits kabi-yum-plugins.noarch : The CentOS Linux kernel ABI yum plugin yum-plugin-aliases.noarch : Yum plugin to enable aliases filters yum-plugin-auto-update-debug-info.noarch : Yum plugin to enable automatic updates to installed debuginfo packages yum-plugin-changelog.noarch : Yum plugin for viewing package changelogs before/after updating yum-plugin-copr.noarch : Yum plugin to add copr command yum-plugin-fastestmirror.noarch : Yum plugin which chooses fastest repository from a mirrorlist yum-plugin-filter-data.noarch : Yum plugin to list filter based on package data yum-plugin-fs-snapshot.noarch : Yum plugin to automatically snapshot your filesystems during updates yum-plugin-keys.noarch : Yum plugin to deal with signing keys yum-plugin-list-data.noarch : Yum plugin to list aggregate package data yum-plugin-local.noarch : Yum plugin to automatically manage a local repo. of downloaded packages yum-plugin-merge-conf.noarch : Yum plugin to merge configuration changes when installing packages yum-plugin-ovl.noarch : Yum plugin to work around overlayfs issues yum-plugin-post-transaction-actions.noarch : Yum plugin to run arbitrary commands when certain pkgs are acted on yum-plugin-pre-transaction-actions.noarch : Yum plugin to run arbitrary commands when certain pkgs are acted on yum-plugin-priorities.noarch : plugin to give priorities to packages from different repos yum-plugin-protectbase.noarch : Yum plugin to protect packages from certain repositories. yum-plugin-ps.noarch : Yum plugin to look at processes, with respect to packages yum-plugin-remove-with-leaves.noarch : Yum plugin to remove dependencies which are no longer used because of a removal yum-plugin-rpm-warm-cache.noarch : Yum plugin to access the rpmdb files early to warm up access to the db yum-plugin-show-leaves.noarch : Yum plugin which shows newly installed leaf packages yum-plugin-tmprepo.noarch : Yum plugin to add temporary repositories yum-plugin-tsflags.noarch : Yum plugin to add tsflags by a commandline option yum-plugin-upgrade-helper.noarch : Yum plugin to help upgrades to the next distribution version yum-plugin-verify.noarch : Yum plugin to add verify command, and options yum-plugin-versionlock.noarch : Yum plugin to lock specified packages from being updated
สามารถติดตั้ง plugin ด้วย yum install เหมือนแพ็กเกจอื่น:
yum install yum-plugin-changelog
yum -y install yum-versionlock
เพื่อบล็อกการอัปเดตแพ็กเกจด้วย plugin ให้รัน:
yum versionlock nginx
เพื่อแสดงรายการแพ็กเกจที่ถูกบล็อก:
yum versionlock list
เพื่อลบแพ็กเกจออกจากรายการบล็อก:
yum versionlock delete nginx

หากไม่ต้องการใช้ plugin สามารถปิดได้ด้วย option ในคำสั่ง yum:
--disableplugin=fastestmirror
หรือปิด yum plugins ทั้งหมด:
--noplugins
วิธีกำหนดค่า Proxy สำหรับ YUM?
Yum ใช้ HTTP/1.1 protocol ติดต่อกับ package repositories หาก Linux server ของคุณเข้าถึง Internet ได้เฉพาะผ่าน HTTP proxy server สามารถระบุชื่อ proxy server ใน section [main] ของ /etc/yum.conf:
proxy=https://proxy_server_name:3128
หาก proxy server ต้องการ authentication ให้เพิ่มบรรทัด:
proxy_username=proxy_user proxy_password=proxy_user_passw0rd
เพื่อตรวจสอบว่า yum ทำงานผ่าน proxy server ใช้คำสั่ง:
yum clean all && yum search nginx
เพื่อทดสอบ ผมระบุที่อยู่ German public proxy server และ fastestmirror plugin ทำงานระหว่างติดตั้งและพบ mirrors ที่เร็วที่สุด:

หากต้องการใช้ proxy เฉพาะบาง repositories ไม่ต้องแก้ /etc/yum.conf สามารถระบุ proxy settings ใน repository config file /etc/yum.repos.d/your_config.repo แทน
ดังนั้น เราได้พิจารณาคุณสมบัติพื้นฐานของ yum, RPM package manager, ใน Linux CentOS/ RHEL ในบทความหน้า จะแสดงวิธีจัดการ YUM/DNF repositories อย่างละเอียดขึ้น