Linux - 軟體包管理
一:軟體包介紹
和Windows類似,在Linux系統上也可以安裝應用程式(軟體包)
在Linux下,軟體包分為3類
軟體包 | 安裝 | 特點 |
---|---|---|
rpm包 | 預先編譯打包,安裝簡單 | 穩定版會被官方做成rpm 所以軟體版本普遍偏低 |
原始碼包 | 手動編譯打包,安裝繁瑣 | 軟體版本豐富 |
二進位制包 | 解壓即可使用,安裝簡單 | 不能修改原始碼 |
二:RPM包管理
1.什麼是RPM包?
RPM 是Red-Hat Package Manager
(RPM軟體包管理器)的縮寫
這一檔案格式名稱雖然打上了RedHat 的標誌 ,但是其原始設計理念是開放式的
通常軟體的穩定版會被官方做成rpm,所以軟體版本偏低
2.RPM包格式
例項:
① bash-4.2.26-28.el7.x86_64.rpm
- 軟體名稱:bash
- 版本號:4.2.46
- 釋出次數:15
- 適用的作業系統版本:CentOS7
- 硬體平臺:x86_64(64位CPU)
- 副檔名:rpm
② mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm
- 軟體名稱:mysql-connector-odbc
- 版本號:5.2.5
- 釋出次數:8
- 適用的作業系統版本:CentOS7
- 硬體平臺:x86_64(64位CPU)
- 副檔名:rpm
3.可以使用RPM包的平臺
- RedHat
- CentOS
- Fedora
- SUSE
- Mac OS
4.檢視當前的硬體平臺和軟體平臺
硬體平臺(CPU位數)
[root@localhost ~]# uname -m
x86_64
軟體平臺(作業系統版本)
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
5.管理PRM包的2種命令
① RPM命令
需要自己找到PRM包,並且手動解決包的依賴關係
需要先安裝依賴的包,再安裝RPM包(一般情況下,很難分辨它缺少什麼依賴包)
② yum命令
相關的RPM包會事先被存在1個倉庫裡,該倉庫包含了所有的依賴包
所以,yum安裝RPM可以幫我們解決依賴性的問題
6.RPM包的獲取
建議先使用本地CentOS7的映象,但實際生產環境中都是通過聯網的方式獲取rpm包
先通過虛擬機器載入映象,然後在linux中執行 mount /dev/cdrom /mnt
,此時你會在/mnt/Packages
目錄下看到很多rpm的包檔案
① 本地的ISO映象光碟(軟體包版本可能偏低)
掛載映象的方式有3種
# 方式1:
[root@localhost ~]# mount /dev/cdrom /opt/
# 方式2:
[root@localhost ~]# mount /dev/sr0 /opt/
# 方式3
[root@localhost ~]# mount -o loop /xxx.iso /opt
# 檢視光盤裡的rpm包
[root@localhost ~]# ls /opt/Packages/
② 到網上下載RPM包
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
③ 用yum命令 去yum倉庫裡獲取RPM包
④ 從掛載的U盤裡獲取rpm包
- Linux系統支援的U盤的格式只有:
VFAT
和FAT32
(推薦FAT32,但是該U盤不能大於32G) - 格式化U盤為FAT32格式(cmd命令)
# 將下方的‘F’替換成U盤的碟符即可(格式化時間有點長,具體看U盤的讀寫速度)
format /FS:FAT32 F:
三:RPM命令
1.安裝 RPM包
常用選項
選項 | 作用 |
---|---|
-i | 安裝rpm |
-v | 顯示安裝詳細資訊 |
-h | 顯示安裝rpm進度 |
–force | 強制重新安裝 |
–nodeps | 忽略依賴關係 |
# 把映象掛載到/mnt
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
# 此時,/mnt/Packages/目錄下會有很多rpm包
[root@localhost ~]# ls /mnt/Packages/
acl-2.2.51-12.el7.x86_64.rpm
aic94xx-firmware-30-6.el7.noarch.rpm
alsa-firmware-1.0.28-2.el7.noarch.rpm
...
# rpm方式安裝需要的軟體包
[root@localhost ~]# rpm -ich /mnt/Packages/iptables-1.4.21-16.el7.x86_64.rpm
################################# [100%]
package iptables-1.4.21-16.el7.x86_64 is already installed
# 如果軟體包存在, 強制再次安裝
[root@localhost ~]# rpm -ivh --force /mnt/Packages/iptables-1.4.21-16.el7.x86_64.rpm
Preparing... ################################# [100%]
package iptables-1.4.21-16.el7.x86_64 is already installed
# 安裝某些服務需要依賴其他元件, 使用--nodeps可強制安裝
# 如果是用yum安裝,則會自動處理依賴
2.查詢 已安裝好的RPM包
常用選項
選項 | 作用 |
---|---|
-q | 檢視指定軟體包是否安裝(重點) |
-qa | 檢視系統中已安裝的所有RPM軟體包列表 |
-qi | 檢視指定軟體的詳細資訊 |
-ql | 查詢指定軟體包所安裝的目錄、檔案列表(重點) |
-qc | 查詢指定軟體包的配置檔案(只有配置檔案,etc下的) |
-qf | 查詢檔案或目錄屬於哪個RPM軟體 |
-qip | 查詢未安裝的rpm包詳細資訊 |
-qlp | 查詢未安裝的軟體包會產生哪些檔案 |
# 查詢所有已安裝的包
[root@localhost ~]# rpm -qa
parted-3.1-23.el7.x86_64
centos-release-7-2.1511.el7.centos.2.10.x86_64
selinux-policy-targeted-3.13.1-60.el7.noarch
# 查詢 iptables包是否安裝(如果安裝,會顯示完整資訊)
[root@localhost ~]# rpm -q iptables
iptables-1.4.21-16.el7.x86_64
# 查詢 vsftpd包是否安裝(如果沒安裝,會顯示:not installed)
[root@localhost ~]# rpm -q vsftpd
package vsftpd is not installed
# 查詢 iptables包的詳情資訊
[root@localhost ~]# rpm -qi iptables
Name : iptables
Version : 1.4.21
Release : 16.el7
Architecture: x86_64
Install Date: Wed 18 Nov 2020 04:42:02 AM EST
Group : System Environment/Base
Size : 1549241
License : GPLv2
Signature : RSA/SHA256, Wed 25 Nov 2015 09:43:32 AM EST, Key ID 24c6a8a7f4a80eb5
Source RPM : iptables-1.4.21-16.el7.src.rpm
Build Date : Fri 20 Nov 2015 06:31:53 AM EST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/
Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.
# 查詢 iptables包所安裝的目錄、檔案列表(重點)
[root@localhost ~]# rpm -ql iptables
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
/usr/bin/iptables-xml
...
# 查詢 iptables包的配置檔案
[root@localhost ~]# rpm -qc iptables
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
# 查詢 etc/sysconfig/iptables-config目錄屬於哪個RPM軟體
[root@localhost ~]# rpm -qf /etc/sysconfig/iptables-config
iptables-1.4.21-16.el7.x86_64
# 查詢未安裝的rpm詳情資訊
[root@localhost ~]# rpm -qip /mnt/Packages/alsa-firmware-1.0.28-2.el7.noarch.rpm
Name : alsa-firmware
Version : 1.0.28
Release : 2.el7
Architecture: noarch
Install Date: (not installed)
Group : Applications/Multimedia
Size : 9572469
License : GPL+ and BSD and GPLv2+ and GPLv2 and LGPLv2+
Signature : RSA/SHA256, Sat 14 Mar 2015 03:36:28 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : alsa-firmware-1.0.28-2.el7.src.rpm
Build Date : Thu 05 Mar 2015 04:58:35 PM EST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.alsa-project.org/
Summary : Firmware for several ALSA-supported sound cards
Description :
This package contains the firmware binaries for a number of sound cards.
Some (but not all of these) require firmware loaders which are included in
the alsa-tools-firmware package.
# 查詢未安裝的rpm包可能會產生哪些檔案
[root@localhost ~]# rpm -qlp /mnt/Packages/alsa-firmware-1.0.28-2.el7.noarch.rpm
/lib/firmware/aica_firmware.bin
/lib/firmware/asihpi
/lib/firmware/asihpi/dsp2400.bin
/lib/firmware/asihpi/dsp5000.bin
3.升級 RPM包
常用選項
選項 | 作用 |
---|---|
-U | 如果老版本不存在則全新安裝,如果存在有新版即升級 |
# 先下載2個版本,1個老版本,1個新版本
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm
# 1.先安裝低版本
[root@localhost ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
# 2.嘗試安裝高版本(會出現錯誤)
[root@localhost ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
# 3.使用升級的方式,完美解決替換
[root@localhost ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
4.解除安裝 RPM包
解除安裝包時需要先把依賴的包解除安裝掉
如果依賴的包是系統所必須的,那就不能解除安裝這個包,否則會造成系統崩潰
常用選項
選項 | 作用 |
---|---|
-e | 解除安裝已存在的RPM包 |
# 查詢
[root@localhost ~]# rpm -qa |grep iptables
iptables-1.4.21-16.el7.x86_64
# 解除安裝
[root@localhost ~]# rpm -e iptables
5.校驗 RPM包(擴充套件)
常用選項
選項 | 作用 |
---|---|
S | 檔案的容量大小是否被改變 |
M | 檔案的型別或者檔案的屬性是否被修改 |
5 | MD5 這一種指紋加密的內容已經不同 |
L | 路徑已經被改變 |
U | 檔案的所屬主已被修改 |
G | 檔案的所屬組已被修改 |
T | 檔案的建立時間已被改變 |
軟體相關的資料庫存放於/var/lib/rpm
目錄
校驗語法
[root@localhost ~]# rpm -V vsftpd
S.5....T. c /etc/pam.d/vsftpd
.......T. c /etc/vsftpd/ftpusers
S.5....T. c /etc/vsftpd/vsftpd.conf
.M....... /var/ftp/pub
四:yum管理RPM包
1.yum介紹
① 什麼是yum?
yum(Yellow dog updater, modified)是一個在Fedora和RedHat以及CentOS中的Shell 前端軟體包管理器
基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係
並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝(YUM是生產最佳實踐)
② 是什麼yum源?
要成功的使用 yum工具安裝更新軟體或系統,就需要有一個包含各種 rpm 軟體包的repository(軟體倉庫),這個軟體倉庫我們習慣稱為 yum 源(可以是本地源、網路源)
③ 檢視yum命令 與 yum配置檔案
# 檢視yun命令
[root@localhost ~]# rpm -q yum
yum-3.4.3-132.el7.centos.0.1.noarch
# 檢視yun的配置檔案
[root@localhost ~]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
④ yum命令常用選項
倉庫
yum repolist # 查詢可用倉庫
yum repolist list # 查詢已啟用/禁用的所有倉庫狀態
# 關閉與啟用倉庫:本質:都是在修改repo檔案中的enable的值 0不啟用 1啟用
yum-config-manager --disable epel # 關閉倉庫epel
yum-config-manager --enable epel # 啟用倉庫epel
檢視
yum list # 列出可用倉庫中的所有軟體包
yum list | less # 列出可用倉庫中的所有軟體包(分頁)
yum grouplist # 列出可用倉庫中的軟體組
# 與rpm -qf的區別在於yum provides後可以只跟命名
yum provides /usr/sbin/ifconfig # 查詢命令所屬的軟體包,可以不加路徑,只寫命令名字
安裝
yum install httpd httpd-tools # 加上-y選項 可以變成非互動
yum groupinstall "開發工具" -y # 安裝軟體組,一個軟體組中包含了多個軟體包
yum groups install "開發工具" -y # 同上
解除安裝
yum remove httpd httpd-tools http* # 解除安裝軟體包
yum groupremove "開發工具" -y. # 解除安裝軟體組
yum groups remove "開發工具" -y # 同上
重灌
yum reinstall httpd # 不小心刪除了配置檔案的時,可以reinstall一下
更新
yum check-update # 檢查可以更新的軟體包
yum update -y # 更新所有軟體包,包括核心,通常:只在剛裝完系統時執行
yum update httpd -y # 更新某個軟體包
快取
yum makecache # 製作元資料快取
yum clean all # 清除所有yum快取的軟體包以及元資料
yum clean packages # 只清除快取的軟體包
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 #啟動快取
歷史記錄
yum history # 檢視執行過的yum命令歷史記錄
yum history info ID號 # 檢視具體某一條yum命令的詳細資訊
yum history undo ID號 # 撤銷執行過的歷史命令
需要注意的點:
- 無論yum安裝的軟體來自何處,yum時刻以自己倉庫中的repodata儲存的依賴關係為準,如果有多個倉庫,就依次檢索
- yum直接安裝公網的rpm包, 會自動查詢當前系統上已有的倉庫解決依賴關係
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba4.8.3-4.el7.x86_64.rpm
- Yum直接安裝本地的rpm包,會自動查詢當前系統上已有的倉庫解決依賴關係
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
- 要使用yum前,需要準備一個yum源(我們也稱為yum倉庫), 這個可以是一個網際網路上的倉庫,也可以是本 地自己搭建的倉庫.倉庫裡面有什麼呢?裡面全部都是.rpm的軟體包.一臺linux,可以新增N多個yum源, 能 搜尋的軟體包數量就是N個yum源之和
系統常見yum源
- 自定義的本地源
- 網路的源(如:base基礎源、epel擴充套件源、與服務相關的源(官網))
2.映象檔案作為yum源(本地源)
① 掛載
# 方式1:
[root@localhost ~]# mount /dev/cdrom /opt/
# 方式2:
[root@localhost ~]# mount /dev/sr0 /opt/
# 方式3:
[root@localhost ~]# mount -o loop /xxx.iso /opt
# 檢視光盤裡的rpm包
[root@localhost ~]# ls /opt/Packages/
② 編輯repo檔案
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim local.repo # 檔名自定義,必須以.repo結尾
[local] # 倉庫的實際名字,任意
name=local # 倉庫的描述,任意
baseurl=file:///opt # 倉庫位置,可以是 http:// https:// ftp:// file://
enabled=1 # 啟用倉庫,預設就是啟用的
gpgcheck=0 # 檢查安裝的rpm是否是合法的,0表示不檢驗
③ 檢查可用倉庫
[root@localhost ~]# yum repolist # 查詢可用倉庫
[root@localhost ~]# yum repolist all # 檢視所有倉庫,包括禁用的
④ 安裝、查詢、解除安裝
[root@localhost ~]# yum list # 列出可用的軟包
[root@localhost ~]# yum install vsftpd -y # 安裝:vsftpd
[root@localhost ~]# yum list vsftpd httpd #
[root@localhost ~]# yum remove vsftpd -y # 解除安裝:vsftpd
[root@localhost ~]# yum install glib* httpd -y
[root@localhost ~]# yum provides vsftp # 查詢某個軟體(可以是未安裝的)是由哪個rpm包提供
# yum reinstall 重灌
[root@egon ~]# rm -rf /etc/httpd/conf/httpd.conf
[root@egon ~]# yum reinstall httpd -y &> /dev/null
[root@egon ~]# ls /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
# yum update 更新
[root@localhost ~]# yum -y update samba
[root@localhost ~]# yum -y update
⑤ 軟體包組安裝、查詢、解除安裝
[root@localhost ~]# yum grouplist
[root@localhost ~]# yum groupinstall "GNOME 桌面" -y
[root@localhost ~]# yum groupinstall "開發工具" -y
[root@localhost ~]# yum groupremove "開發工具" -y
3.使用開源yum源(網路源)
① 檢視當前yum源。
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
!base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
!extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 448
!updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 773
repolist: 11,293
- base:基礎源
- extras:擴充套件源
- updates:更新源
② 使用第三方yum源
預設系統是國外源(因為伺服器在國外,所以速度較慢),因此 需要替換為國內的源
例:(切換成阿里源)
# 阿里雲的base基礎源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos7.repo
# 阿里雲的extras擴充套件源
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
# extras擴充套件源 也可以安裝一個軟體包來生成(效果同上)
yum install epel-release -y
擴充套件:
- EPEL
EPEL的全稱叫 Extra Packages for Enterprise Linux
EPEL是由 Fedora 社群打造,為 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟體包的專案
裝上了 EPEL之後,就相當 於添加了一個第三方源
- RHEL
RHEL以及他的衍生髮行版如CentOS、Scientific Linux為了穩定,官方的rpm repository提供的rpm 包往往是很滯後的
當然了,這樣做這是無可厚非的,畢竟這是伺服器版本,安全穩定是重點,官方的rpm repository提供的rpm包也不夠豐富,很多時候需要自己編譯那太辛苦了,而EPEL恰恰可以解決這兩方面的問題
4.自己製作本地yum源
① 將下載好的rpm包和相關依賴都放入一個目錄中
② 安裝createrepo
工具
[root@localhost ~]# yum install createrepo -y
③ 製作repodata
createrepo /mnt/Packages/
④ 配置本地repo
檔案,指向/mnt/Packages/
# 編輯 /etc/yum/repos.d/soft.repo
[root@localhost ~]# vim /etc/yum/repos.d/soft.repo
# 按i進入插入模式,新增如下內容
[soft]
name=soft
baseurl=file:///mnt/Packages/
enabled=1
gpgcheck=0
5.將自己製作本地yum源 共享給別人
伺服器(自己)
客戶端(他人)
6.yum的歷史記錄
7.yum擴充套件知識
① yum元資料快取
指的將yum倉庫的元資料快取下來,下次安裝時省去了檢索過程,安裝速度可以加快
[root@localhost ~]# yum clean all # 清理快取
[root@localhost ~]# yum makecache # 製作快取
② yum軟體包快取
開啟軟體包快取後,從網路源下 載安裝完的軟體安裝包不再刪除,都快取到了本地
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasev
er # 指定軟體安裝包的快取目錄
keepcache=1 # 設定為1
debuglevel=2
# 快取目錄為:ls /var/cache/yum/x86_64/7/
基於軟體包快取,可以做成自己的yum源,以此來控制 各個服務的版本
通常的做法為
-
在測試環境中,在每個節點上都開啟軟體包快取
-
在測試環境中,安裝相同版本的作業系統,安裝完畢後統一執行
yum update -y
-
在測試環境中,部署完你的架構,測試完畢
-
把測試環境中每臺機器上快取好的軟體包安裝包採集到一個檔案下
[root@localhost ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/
- 然後用
createrepo
命令製作好依賴關係,即repodata
資料庫 - 然後在線上環境部署時,就用該本地源就好,不要輕易升級,不要濫用yum源
- 這樣可以嚴格控制好各個服務的 版本
8.簽名檢查機制
五:原始碼包
## 一:軟體包介紹
和Windows類似,在Linux系統上也可以安裝應用程式(軟體包)
在Linux下,軟體包分為3類
軟體包 | 安裝 | 特點 |
---|---|---|
rpm包 | 預先編譯打包,安裝簡單 | 穩定版會被官方做成rpm 所以軟體版本普遍偏低 |
原始碼包 | 手動編譯打包,安裝繁瑣 | 軟體版本豐富 |
二進位制包 | 解壓即可使用,安裝簡單 | 不能修改原始碼 |
二:RPM包管理
1.什麼是RPM包?
RPM 是Red-Hat Package Manager
(RPM軟體包管理器)的縮寫
這一檔案格式名稱雖然打上了RedHat 的標誌 ,但是其原始設計理念是開放式的
通常軟體的穩定版會被官方做成rpm,所以軟體版本偏低
2.RPM包格式
例項:
① bash-4.2.26-28.el7.x86_64.rpm
- 軟體名稱:bash
- 版本號:4.2.46
- 釋出次數:15
- 適用的作業系統版本:CentOS7
- 硬體平臺:x86_64(64位CPU)
- 副檔名:rpm
② mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm
- 軟體名稱:mysql-connector-odbc
- 版本號:5.2.5
- 釋出次數:8
- 適用的作業系統版本:CentOS7
- 硬體平臺:x86_64(64位CPU)
- 副檔名:rpm
3.可以使用RPM包的平臺
- RedHat
- CentOS
- Fedora
- SUSE
- Mac OS
4.檢視當前的硬體平臺和軟體平臺
硬體平臺(CPU位數)
[root@localhost ~]# uname -m
x86_64
軟體平臺(作業系統版本)
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
5.管理PRM包的2種命令
① RPM命令
需要自己找到PRM包,並且手動解決包的依賴關係
需要先安裝依賴的包,再安裝RPM包(一般情況下,很難分辨它缺少什麼依賴包)
② yum命令
相關的RPM包會事先被存在1個倉庫裡,該倉庫包含了所有的依賴包
所以,yum安裝RPM可以幫我們解決依賴性的問題
6.RPM包的獲取
建議先使用本地CentOS7的映象,但實際生產環境中都是通過聯網的方式獲取rpm包
先通過虛擬機器載入映象,然後在linux中執行 mount /dev/cdrom /mnt
,此時你會在/mnt/Packages
目錄下看到很多rpm的包檔案
① 本地的ISO映象光碟(軟體包版本可能偏低)
掛載映象的方式有3種
# 方式1:
[root@localhost ~]# mount /dev/cdrom /opt/
# 方式2:
[root@localhost ~]# mount /dev/sr0 /opt/
# 方式3
[root@localhost ~]# mount -o loop /xxx.iso /opt
# 檢視光盤裡的rpm包
[root@localhost ~]# ls /opt/Packages/
② 到網上下載RPM包
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
③ 用yum命令 去yum倉庫裡獲取RPM包
④ 從掛載的U盤裡獲取rpm包
- Linux系統支援的U盤的格式只有:
VFAT
和FAT32
(推薦FAT32,但是該U盤不能大於32G) - 格式化U盤為FAT32格式(cmd命令)
# 將下方的‘F’替換成U盤的碟符即可(格式化時間有點長,具體看U盤的讀寫速度)
format /FS:FAT32 F:
三:RPM命令
1.安裝 RPM包
常用選項
選項 | 作用 |
---|---|
-i | 安裝rpm |
-v | 顯示安裝詳細資訊 |
-h | 顯示安裝rpm進度 |
–force | 強制重新安裝 |
–nodeps | 忽略依賴關係 |
# 把映象掛載到/mnt
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
# 此時,/mnt/Packages/目錄下會有很多rpm包
[root@localhost ~]# ls /mnt/Packages/
acl-2.2.51-12.el7.x86_64.rpm
aic94xx-firmware-30-6.el7.noarch.rpm
alsa-firmware-1.0.28-2.el7.noarch.rpm
...
# rpm方式安裝需要的軟體包
[root@localhost ~]# rpm -ich /mnt/Packages/iptables-1.4.21-16.el7.x86_64.rpm
################################# [100%]
package iptables-1.4.21-16.el7.x86_64 is already installed
# 如果軟體包存在, 強制再次安裝
[root@localhost ~]# rpm -ivh --force /mnt/Packages/iptables-1.4.21-16.el7.x86_64.rpm
Preparing... ################################# [100%]
package iptables-1.4.21-16.el7.x86_64 is already installed
# 安裝某些服務需要依賴其他元件, 使用--nodeps可強制安裝
# 如果是用yum安裝,則會自動處理依賴
2.查詢 已安裝好的RPM包
常用選項
選項 | 作用 |
---|---|
-q | 檢視指定軟體包是否安裝(重點) |
-qa | 檢視系統中已安裝的所有RPM軟體包列表 |
-qi | 檢視指定軟體的詳細資訊 |
-ql | 查詢指定軟體包所安裝的目錄、檔案列表(重點) |
-qc | 查詢指定軟體包的配置檔案(只有配置檔案,etc下的) |
-qf | 查詢檔案或目錄屬於哪個RPM軟體 |
-qip | 查詢未安裝的rpm包詳細資訊 |
-qlp | 查詢未安裝的軟體包會產生哪些檔案 |
# 查詢所有已安裝的包
[root@localhost ~]# rpm -qa
parted-3.1-23.el7.x86_64
centos-release-7-2.1511.el7.centos.2.10.x86_64
selinux-policy-targeted-3.13.1-60.el7.noarch
# 查詢 iptables包是否安裝(如果安裝,會顯示完整資訊)
[root@localhost ~]# rpm -q iptables
iptables-1.4.21-16.el7.x86_64
# 查詢 vsftpd包是否安裝(如果沒安裝,會顯示:not installed)
[root@localhost ~]# rpm -q vsftpd
package vsftpd is not installed
# 查詢 iptables包的詳情資訊
[root@localhost ~]# rpm -qi iptables
Name : iptables
Version : 1.4.21
Release : 16.el7
Architecture: x86_64
Install Date: Wed 18 Nov 2020 04:42:02 AM EST
Group : System Environment/Base
Size : 1549241
License : GPLv2
Signature : RSA/SHA256, Wed 25 Nov 2015 09:43:32 AM EST, Key ID 24c6a8a7f4a80eb5
Source RPM : iptables-1.4.21-16.el7.src.rpm
Build Date : Fri 20 Nov 2015 06:31:53 AM EST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/
Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.
# 查詢 iptables包所安裝的目錄、檔案列表(重點)
[root@localhost ~]# rpm -ql iptables
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
/usr/bin/iptables-xml
...
# 查詢 iptables包的配置檔案
[root@localhost ~]# rpm -qc iptables
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
# 查詢 etc/sysconfig/iptables-config目錄屬於哪個RPM軟體
[root@localhost ~]# rpm -qf /etc/sysconfig/iptables-config
iptables-1.4.21-16.el7.x86_64
# 查詢未安裝的rpm詳情資訊
[root@localhost ~]# rpm -qip /mnt/Packages/alsa-firmware-1.0.28-2.el7.noarch.rpm
Name : alsa-firmware
Version : 1.0.28
Release : 2.el7
Architecture: noarch
Install Date: (not installed)
Group : Applications/Multimedia
Size : 9572469
License : GPL+ and BSD and GPLv2+ and GPLv2 and LGPLv2+
Signature : RSA/SHA256, Sat 14 Mar 2015 03:36:28 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : alsa-firmware-1.0.28-2.el7.src.rpm
Build Date : Thu 05 Mar 2015 04:58:35 PM EST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.alsa-project.org/
Summary : Firmware for several ALSA-supported sound cards
Description :
This package contains the firmware binaries for a number of sound cards.
Some (but not all of these) require firmware loaders which are included in
the alsa-tools-firmware package.
# 查詢未安裝的rpm包可能會產生哪些檔案
[root@localhost ~]# rpm -qlp /mnt/Packages/alsa-firmware-1.0.28-2.el7.noarch.rpm
/lib/firmware/aica_firmware.bin
/lib/firmware/asihpi
/lib/firmware/asihpi/dsp2400.bin
/lib/firmware/asihpi/dsp5000.bin
3.升級 RPM包
常用選項
選項 | 作用 |
---|---|
-U | 如果老版本不存在則全新安裝,如果存在有新版即升級 |
# 先下載2個版本,1個老版本,1個新版本
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm
# 1.先安裝低版本
[root@localhost ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
# 2.嘗試安裝高版本(會出現錯誤)
[root@localhost ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
# 3.使用升級的方式,完美解決替換
[root@localhost ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
4.解除安裝 RPM包
解除安裝包時需要先把依賴的包解除安裝掉
如果依賴的包是系統所必須的,那就不能解除安裝這個包,否則會造成系統崩潰
常用選項
選項 | 作用 |
---|---|
-e | 解除安裝已存在的RPM包 |
# 查詢
[root@localhost ~]# rpm -qa |grep iptables
iptables-1.4.21-16.el7.x86_64
# 解除安裝
[root@localhost ~]# rpm -e iptables
5.校驗 RPM包(擴充套件)
常用選項
選項 | 作用 |
---|---|
S | 檔案的容量大小是否被改變 |
M | 檔案的型別或者檔案的屬性是否被修改 |
5 | MD5 這一種指紋加密的內容已經不同 |
L | 路徑已經被改變 |
U | 檔案的所屬主已被修改 |
G | 檔案的所屬組已被修改 |
T | 檔案的建立時間已被改變 |
軟體相關的資料庫存放於/var/lib/rpm
目錄
校驗語法
[root@localhost ~]# rpm -V vsftpd
S.5....T. c /etc/pam.d/vsftpd
.......T. c /etc/vsftpd/ftpusers
S.5....T. c /etc/vsftpd/vsftpd.conf
.M....... /var/ftp/pub
四:yum管理RPM包
1.yum介紹
① 什麼是yum?
yum(Yellow dog updater, modified)是一個在Fedora和RedHat以及CentOS中的Shell 前端軟體包管理器
基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係
並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝(YUM是生產最佳實踐)
② 是什麼yum源?
要成功的使用 yum工具安裝更新軟體或系統,就需要有一個包含各種 rpm 軟體包的repository(軟體倉庫),這個軟體倉庫我們習慣稱為 yum 源(可以是本地源、網路源)
③ 檢視yum命令 與 yum配置檔案
# 檢視yun命令
[root@localhost ~]# rpm -q yum
yum-3.4.3-132.el7.centos.0.1.noarch
# 檢視yun的配置檔案
[root@localhost ~]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
④ yum命令常用選項
倉庫
yum repolist # 查詢可用倉庫
yum repolist list # 查詢已啟用/禁用的所有倉庫狀態
# 關閉與啟用倉庫:本質:都是在修改repo檔案中的enable的值 0不啟用 1啟用
yum-config-manager --disable epel # 關閉倉庫epel
yum-config-manager --enable epel # 啟用倉庫epel
檢視
yum list # 列出可用倉庫中的所有軟體包
yum list | less # 列出可用倉庫中的所有軟體包(分頁)
yum grouplist # 列出可用倉庫中的軟體組
# 與rpm -qf的區別在於yum provides後可以只跟命名
yum provides /usr/sbin/ifconfig # 查詢命令所屬的軟體包,可以不加路徑,只寫命令名字
安裝
yum install httpd httpd-tools # 加上-y選項 可以變成非互動
yum groupinstall "開發工具" -y # 安裝軟體組,一個軟體組中包含了多個軟體包
yum groups install "開發工具" -y # 同上
解除安裝
yum remove httpd httpd-tools http* # 解除安裝軟體包
yum groupremove "開發工具" -y. # 解除安裝軟體組
yum groups remove "開發工具" -y # 同上
重灌
yum reinstall httpd # 不小心刪除了配置檔案的時,可以reinstall一下
更新
yum check-update # 檢查可以更新的軟體包
yum update -y # 更新所有軟體包,包括核心,通常:只在剛裝完系統時執行
yum update httpd -y # 更新某個軟體包
快取
yum makecache # 製作元資料快取
yum clean all # 清除所有yum快取的軟體包以及元資料
yum clean packages # 只清除快取的軟體包
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 #啟動快取
歷史記錄
yum history # 檢視執行過的yum命令歷史記錄
yum history info ID號 # 檢視具體某一條yum命令的詳細資訊
yum history undo ID號 # 撤銷執行過的歷史命令
需要注意的點:
- 無論yum安裝的軟體來自何處,yum時刻以自己倉庫中的repodata儲存的依賴關係為準,如果有多個倉庫,就依次檢索
- yum直接安裝公網的rpm包, 會自動查詢當前系統上已有的倉庫解決依賴關係
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba4.8.3-4.el7.x86_64.rpm
- Yum直接安裝本地的rpm包,會自動查詢當前系統上已有的倉庫解決依賴關係
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
- 要使用yum前,需要準備一個yum源(我們也稱為yum倉庫), 這個可以是一個網際網路上的倉庫,也可以是本 地自己搭建的倉庫.倉庫裡面有什麼呢?裡面全部都是.rpm的軟體包.一臺linux,可以新增N多個yum源, 能 搜尋的軟體包數量就是N個yum源之和
系統常見yum源
- 自定義的本地源
- 網路的源(如:base基礎源、epel擴充套件源、與服務相關的源(官網))
2.映象檔案作為yum源(本地源)
① 掛載
# 方式1:
[root@localhost ~]# mount /dev/cdrom /opt/
# 方式2:
[root@localhost ~]# mount /dev/sr0 /opt/
# 方式3:
[root@localhost ~]# mount -o loop /xxx.iso /opt
# 檢視光盤裡的rpm包
[root@localhost ~]# ls /opt/Packages/
② 編輯repo檔案
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim local.repo # 檔名自定義,必須以.repo結尾
[local] # 倉庫的實際名字,任意
name=local # 倉庫的描述,任意
baseurl=file:///opt # 倉庫位置,可以是 http:// https:// ftp:// file://
enabled=1 # 啟用倉庫,預設就是啟用的
gpgcheck=0 # 檢查安裝的rpm是否是合法的,0表示不檢驗
③ 檢查可用倉庫
[root@localhost ~]# yum repolist # 查詢可用倉庫
[root@localhost ~]# yum repolist all # 檢視所有倉庫,包括禁用的
④ 安裝、查詢、解除安裝
[root@localhost ~]# yum list # 列出可用的軟包
[root@localhost ~]# yum install vsftpd -y # 安裝:vsftpd
[root@localhost ~]# yum list vsftpd httpd #
[root@localhost ~]# yum remove vsftpd -y # 解除安裝:vsftpd
[root@localhost ~]# yum install glib* httpd -y
[root@localhost ~]# yum provides vsftp # 查詢某個軟體(可以是未安裝的)是由哪個rpm包提供
# yum reinstall 重灌
[root@egon ~]# rm -rf /etc/httpd/conf/httpd.conf
[root@egon ~]# yum reinstall httpd -y &> /dev/null
[root@egon ~]# ls /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
# yum update 更新
[root@localhost ~]# yum -y update samba
[root@localhost ~]# yum -y update
⑤ 軟體包組安裝、查詢、解除安裝
[root@localhost ~]# yum grouplist
[root@localhost ~]# yum groupinstall "GNOME 桌面" -y
[root@localhost ~]# yum groupinstall "開發工具" -y
[root@localhost ~]# yum groupremove "開發工具" -y
3.使用開源yum源(網路源)
① 檢視當前yum源。
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
!base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
!extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 448
!updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 773
repolist: 11,293
- base:基礎源
- extras:擴充套件源
- updates:更新源
② 使用第三方yum源
預設系統是國外源(因為伺服器在國外,所以速度較慢),因此 需要替換為國內的源
例:(切換成阿里源)
# 阿里雲的base基礎源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos7.repo
# 阿里雲的extras擴充套件源
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
# extras擴充套件源 也可以安裝一個軟體包來生成(效果同上)
yum install epel-release -y
擴充套件:
- EPEL
EPEL的全稱叫 Extra Packages for Enterprise Linux
EPEL是由 Fedora 社群打造,為 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟體包的專案
裝上了 EPEL之後,就相當 於添加了一個第三方源
- RHEL
RHEL以及他的衍生髮行版如CentOS、Scientific Linux為了穩定,官方的rpm repository提供的rpm 包往往是很滯後的
當然了,這樣做這是無可厚非的,畢竟這是伺服器版本,安全穩定是重點,官方的rpm repository提供的rpm包也不夠豐富,很多時候需要自己編譯那太辛苦了,而EPEL恰恰可以解決這兩方面的問題
4.自己製作本地yum源
① 將下載好的rpm包和相關依賴都放入一個目錄中
② 安裝createrepo
工具
[root@localhost ~]# yum install createrepo -y
③ 製作repodata
createrepo /mnt/Packages/
④ 配置本地repo
檔案,指向/mnt/Packages/
# 編輯 /etc/yum/repos.d/soft.repo
[root@localhost ~]# vim /etc/yum/repos.d/soft.repo
# 按i進入插入模式,新增如下內容
[soft]
name=soft
baseurl=file:///mnt/Packages/
enabled=1
gpgcheck=0
5.將自己製作本地yum源 共享給別人
伺服器(自己)
客戶端(他人)
6.yum的歷史記錄
7.yum擴充套件知識
① yum元資料快取
指的將yum倉庫的元資料快取下來,下次安裝時省去了檢索過程,安裝速度可以加快
[root@localhost ~]# yum clean all # 清理快取
[root@localhost ~]# yum makecache # 製作快取
② yum軟體包快取
開啟軟體包快取後,從網路源下 載安裝完的軟體安裝包不再刪除,都快取到了本地
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasev
er # 指定軟體安裝包的快取目錄
keepcache=1 # 設定為1
debuglevel=2
# 快取目錄為:ls /var/cache/yum/x86_64/7/
基於軟體包快取,可以做成自己的yum源,以此來控制 各個服務的版本
通常的做法為
-
在測試環境中,在每個節點上都開啟軟體包快取
-
在測試環境中,安裝相同版本的作業系統,安裝完畢後統一執行
yum update -y
-
在測試環境中,部署完你的架構,測試完畢
-
把測試環境中每臺機器上快取好的軟體包安裝包採集到一個檔案下
[root@localhost ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/
- 然後用
createrepo
命令製作好依賴關係,即repodata
資料庫 - 然後在線上環境部署時,就用該本地源就好,不要輕易升級,不要濫用yum源
- 這樣可以嚴格控制好各個服務的 版本