RPM 軟件包管理
軟件包的分類
- 二進(jìn)制包(binary code):無(wú)須編譯,可以直接安裝使用
- 源碼包(source code):沒有經(jīng)過編譯的包,需要借助 gcc、c++ 編譯器編譯后才能運(yùn)行
軟件包的區(qū)分
- 二進(jìn)制包:軟件包存在 bin 可執(zhí)行文件
- 源碼包:軟件包的文件包含有.h、.c、.cpp等結(jié)尾的源碼文件
RPM
CentOS 操作系統(tǒng)中一款默認(rèn)軟件管理的工具,紅帽包管理工具(Red Hat PackageManager)
- 對(duì)軟件包實(shí)現(xiàn)快速安裝、管理及維護(hù)
- 適合的發(fā)行版:CentOS、RHEL、Fedora、SUSE
- 通常用來(lái)管理以“.rpm”后綴結(jié)尾的軟件包
RPM 包的格式
大多數(shù)而言:
- name-version.rpm
- name-version-noarch.rpm
- name-version-arch.src.rpm
軟件包格式說明:
- name:軟件名稱
- version:版本號(hào),通用格式:“主.次.修正”“-n”表示發(fā)布版本號(hào),第 n 次編譯生成的
- arch:使用的硬件平臺(tái)(i386、i586、i686、x86_64、sparc、alpha 等)
- .rpm:編譯好的二進(jìn)制包,直接使用
rpm
安裝 - .src.rpm:源代碼包,源碼編譯生成
- el*:軟件包發(fā)行版本,el6表示適合6.x版本的發(fā)行版
- devel:開發(fā)包
- noarch:軟件包可以在任何平臺(tái)上安裝
RPM 命令解析
命令/參數(shù)/選項(xiàng) | 說明 |
---|---|
rpm -qa | 標(biāo)準(zhǔn)輸出所有安裝的軟件包 |
rpm -q zip | 檢查軟件包是否安裝,如果安裝返回版本信息 |
rpm -qi zip | 標(biāo)準(zhǔn)輸出軟件包安裝的版本信息 |
rpm -e zip | 卸載軟件包 |
rpm -e --nodeps zip | 強(qiáng)制卸載 |
rpm -ivh ******.rpm | 安裝軟件 |
rpm -Uvh ******.rpm | 升級(jí)軟件 |
rpm -ivh --nodeps ******.rpm | 不驗(yàn)證依賴包安裝軟件 |
rpm -qa --last | 按照安裝時(shí)間顯示所有安裝的軟件包(最新的在最上面) |
rpm --help | 幫助信息(查詢更多使用方法) |
源碼包管理
標(biāo)準(zhǔn)的以“.zip、.tar”結(jié)尾的源代碼包不能使用 RPM 工具去操作
安裝步驟
-
./configure
:預(yù)編譯階段,檢測(cè)系統(tǒng)基礎(chǔ)編譯環(huán)境是否滿足,生成 makefile 文件(通常一些軟件的源碼編譯時(shí)候,還需要帶一些參數(shù)選項(xiàng)進(jìn)行一個(gè)編譯過程,具軟件的使用情況而定) -
make
:編譯,基于第一步生成的 makefile 文件,進(jìn)行源代碼的編譯 -
make install
:安裝,編譯完畢之后將相關(guān)的可運(yùn)行文件安裝到系統(tǒng)中 - 一些特殊源碼可以只是其中一個(gè)或者兩個(gè)步驟
示例
編譯安裝 nginx
從 nginx 官網(wǎng)下載最新的源碼包
http://nginx.org/en/download.html
下載地址:http://nginx.org/download/nginx-1.22.0.tar.gz
解壓源代碼包
tar -xf nginx-1.22.0.tar.gz
進(jìn)入解壓后的文件夾,進(jìn)行預(yù)編譯階段
處理報(bào)錯(cuò)信息
缺少 pcre-devel 編譯環(huán)境,可以使用yum
安裝即可(一般在進(jìn)行源代碼編譯時(shí)候,會(huì)存在很多編譯環(huán)境的問題,這個(gè)要按照實(shí)際情況來(lái)解決)
繼續(xù)預(yù)編譯
完成預(yù)編譯階段后,會(huì)返回一些軟件預(yù)編譯的一些結(jié)果
編譯及編譯安裝
部分軟件在編譯安裝時(shí)候,執(zhí)行過程稍長(zhǎng)
make && make install
安裝成功
編譯安裝總結(jié)
- 預(yù)編譯階段可以對(duì)軟件的安裝目錄、功能選擇等參數(shù)進(jìn)行配置,內(nèi)容可以參考源代碼根目錄下的 README 或 INSTALL 等相關(guān)文件
- 編譯步驟是將源代碼編譯成為可以被執(zhí)行的文件,文件放置在當(dāng)前的目錄下,這個(gè)時(shí)候還沒有被安裝到預(yù)安裝的目錄下
- 編譯安裝步驟是進(jìn)行最后的安裝步驟,把之前所編譯完成的數(shù)據(jù)安裝到默認(rèn)的目錄下
YUM 軟件包管理
YUM 簡(jiǎn)述
前端軟件包管理器 YUM(Yellow dog Updater, Modified)
- 適用于 CentOS、Fedora、RedHat、SUSE 等發(fā)行版
- 用于管理 rpm 包
- 從指定的服務(wù)器自動(dòng)下載 RPM 包并且安裝,自動(dòng)處理并安裝依賴性關(guān)系
- rpm 包管理遇到有依賴的時(shí)候,需要逐個(gè)手動(dòng)下載安裝,yum 工具最大好處就是自動(dòng)處理依賴,提升效率
YUM 工作原理
組成
- YUM 服務(wù)端:通過 HTTP 或者 FTP 服務(wù)發(fā)布
- YUM 客戶端:客戶端安裝的所有 RPM 包都來(lái)自 YUM 服務(wù)端,使用
yum
安裝軟件或者搜索文件時(shí),會(huì)查找/etc/yum.repos.d 下以.repo 結(jié)尾文件,CentOS 默認(rèn)的文件是:CentOS-Base.repo,該文件配置了 YUM 服務(wù)端的鏡像地址,每次安裝、升級(jí) RPM 包,YUM 客戶端都會(huì)查找這些文件 - YUM 客戶端如果沒有外網(wǎng),可以構(gòu)建光盤或者內(nèi)部的 YUM 源,客戶端安裝軟件,默認(rèn)會(huì)把 YUM 源地址、頭部信息、軟件包、數(shù)據(jù)庫(kù)信息、緩存文件存儲(chǔ)在/var/cache/yum中,每次使用 YUM 時(shí)候,優(yōu)先通過 cache 查找相關(guān)軟件包,cache 中不存在的時(shí)候,才會(huì)訪問外網(wǎng) YUM 源
[root@iZrgngz5lz7qzsZ ~]# ll /var/cache/yum/
total 4
drwxr-xr-x 3 root root 4096 Sep 5 19:32 x86_64
[root@iZrgngz5lz7qzsZ ~]#
yum 命令指南
企業(yè)常用命令
- -y:表示安裝與卸載出現(xiàn) yes 時(shí),自動(dòng)確認(rèn) yes
- -q:表示不顯示安裝過程
命令/參數(shù)/選項(xiàng) | 說明 |
---|---|
yum install zip | 交互式安裝軟件 |
yum install zip -y | 自動(dòng)確定安裝軟件 |
yum search zip | 搜索軟件包 |
yum list zip | 顯示指定軟件包的安裝情況 |
yum list | 顯示所有已經(jīng)安裝及可被安裝的軟件 |
yum remove zip -y | 刪除程序包 |
yum update | 內(nèi)核升級(jí)(企業(yè)環(huán)境慎用) |
yum update zip | 更新軟件 |
yum check-update | 檢查可更新的軟件 |
yum info zip | 顯示安裝包信息 |
yum provides “*/sz” | 列出該命令由什么包提供的 |
yum deplist zip | 查看該程序的依賴情況 |
yum clean packages | 清除緩存目錄下的安裝包 |
yum clean headers | 清除緩存目錄下的頭部信息 |
yum clean all | 清除緩存目錄下的軟件包以及舊的頭部信息 |
yum install --downloadonly --downloaddir=/tmp zip | 只下載該軟件的 rpm 包,并保存在指定目錄下 |
YUM 源構(gòu)建
基于 iso 鏡像構(gòu)建本地源
- 該方式只限于本機(jī)可以使用,部分軟件也無(wú)法安裝,因?yàn)槔锩娴陌惭b包并不完整
基于 iso 鏡像構(gòu)建本地源就是利用光盤里面的軟件包實(shí)現(xiàn) YUM 安裝軟件
CentOS-7-x86_64-Everything-2009:針對(duì)這個(gè)版本的鏡像包,集成了很多軟件,可以當(dāng)作本地源
將鏡像文件放在服務(wù)器
將鏡像文件掛載到/mnt目錄下
mount /home/CentOS-7-x86_64-Everything-2009.iso /mnt
臨時(shí)改名/etc/yum.repos.d 下面的配置文件
這步目的是為了驗(yàn)證本地 YUM 源的使用
新建一個(gè) .repo 文件
內(nèi)容如下:
[yum]
name = CentOS7
baseurl = file:///mnt
enabled=1
gpgcheck=1
gpgkey=file://mnt/RPM-GRG-KEY-CentOS-7
- name:源名稱
- baseurl:iso 鏡像掛載目錄
- gpgcheck:是否檢查 GPG-KEY
- enabled:是否啟用
- gpgkey:指定加載目錄下的 GPG-KEY文件驗(yàn)證
測(cè)試結(jié)果(完畢)
yum clean all
yum makecache
yum install tcpdump -y
基于 HTTP 構(gòu)建 YUM 源
構(gòu)建基于內(nèi)網(wǎng)的 HTTP 方式的 YUM 源,企業(yè)中更常見
- 服務(wù)端:192.168.204.110
- 客戶端:192.168.204.109
先掛載鏡像文件
安裝一個(gè) nginx,并可以實(shí)現(xiàn)訪問
在 nginx 默認(rèn)的 /目錄下增加一個(gè)文件夾
mkdir centos
復(fù)制/mnt 下的相關(guān)文件到 centos 目錄下
(復(fù)制時(shí)間稍微有點(diǎn)長(zhǎng))
cp -R /mnt/Packages/* /usr/share/nginx/html/centos/
進(jìn)入目錄下,使用 createrepo 生成本地源
cd /usr/share/nginx/html/
createrepo centos/
利用 HTTP 發(fā)布 YUM 源
配置一下,讓可以訪問到 centos 目錄即可
在客戶端(內(nèi)網(wǎng)的另一個(gè)環(huán)境)配置一個(gè)測(cè)試的 .repo 文件
內(nèi)容如下:http.repo
[base]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
[updates]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
客戶端測(cè)試
yum clean all
yum makecache
yum install tcpdump -y
從服務(wù)端的 nginx 日志可以看出客戶端訪問的記錄
如何擴(kuò)展服務(wù)端的包呢?
嘗試安裝一下 ntfs-3g 軟件包,但是發(fā)現(xiàn)沒有這個(gè)包
我們需要從外網(wǎng)下載這個(gè)軟件包,并放在服務(wù)端的 centos 目錄下
cd /usr/share/nginx/html/centos/
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-libs-2022.5.17-1.el7.x86_64.rpm
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-devel-2022.5.17-1.el7.x86_64.rpm
更新軟件包
cd /usr/share/nginx/html/
createrepo --update centos/
客戶端驗(yàn)證一下:OK的
yum clean all
yum makecache
yum install -y ntfs-3g-devel.x86_64 ntfs-3g-libs.x86_64
同步外網(wǎng)的 YUM 源
針對(duì)上面的【基于 HTTP 的企業(yè)內(nèi)部 YUM 源】,可以使用外網(wǎng)的 YUM 源,來(lái)同步到本地的,更加完善企業(yè)內(nèi)部的 YUM 源的軟件包
- 獲取外網(wǎng) YUM 源軟件的方式推薦使用:reposync,可以同步幾乎所有的 YUM 源
比如我在客戶端想升級(jí)一下 NetworkManager
提示沒有更新的包,就需要同步下外網(wǎng)的 YUM 軟件了
在服務(wù)端操作:下載阿里云的 CentOS7 的 YUM 源文件
wget https://mirrors.aliyun.com/repo/Centos-7.repo
服務(wù)端配置一下
yum clean all
yum makecache
安裝 reposync 命令
yum provides "*/reposync"
yum install -y yum-utils-1.1.31-54.el7_8.noarch
獲取外網(wǎng)所有的 YUM 軟件包
## -r 指定 repolist id;不加 -r 表示獲取外網(wǎng)所有的包
## -p 指定下載軟件的路徑
## 這玩意有點(diǎn)多,1W多個(gè)軟件包,需要一定的空間和時(shí)間
reposync -r base -p /usr/share/nginx/html/centos/
reposync -r updates -p /usr/share/nginx/html/centos/
更新服務(wù)端軟件包
cd /usr/share/nginx/html/
createrepo --update centos/
客戶端再次驗(yàn)證一下升級(jí) NetworkManager :OK的
這個(gè)地方有點(diǎn)問題,折騰了很久,下面記錄一下這個(gè)過程
通過上述升級(jí)服務(wù)端的軟件包以后:發(fā)現(xiàn)搜索出來(lái)的包還是舊版本
服務(wù)端訪問一下軟件包目錄:發(fā)現(xiàn)多了2個(gè)文件夾:考慮是不是因?yàn)樯?jí)的時(shí)候?qū)⑸?jí)的包放在了其他位置
然后對(duì) updates 目錄下重新做了操作:createrepo Packages/
改了一下客戶端的 repo 文件
然后重新生效了一下源:
最后成功升級(jí):OK文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-483836.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-483836.html
到了這里,關(guān)于Linux基礎(chǔ)筆記16 | 軟件包 RPM 詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!