一、 兩大流行軟件包管理工具
http://www.reibang.com/p/9188afa43cfd
RPM 和 DPKG
distribution代表 | 管理機(jī)制 | 使用指令 | 在線升級指令 |
---|---|---|---|
Red Hat/CentOS | RPM | rpm,rpmbuild | yum |
Debian/Ubuntu | DPKG | dpkg | apt-get |
二侦铜、RPM 和 SRPM
RPM 全名是 RedHat Package Manager
命名規(guī)則
httpd-2.4.6-67.el7.centos.x86_64.rpm
| | | | | | |
| | | | | | |___.rpm-------軟件包后綴名顿肺,一般為 *.rpm 或 *.src.rpm
| | | | | |________.x86_64----適用硬件平臺,一般為 x86_64性昭、i386 等
| | | | |_______________.centos----適用操作系統(tǒng)拦止,noarch為通用版本
| | | |_____________________.el7-------發(fā)行商版本號,el5為CentOS5與HREL5以下使用
| | |________________________.67--------編譯版本號糜颠,表示第幾次編譯
| |_____________________________.2.4.6-----軟件版本號汹族,分別為:主版本號.次版本號.修正號
|___________________________________.httpd-----軟件包名稱
平臺 noarch
:
就是沒有任何硬件等級上的限制。一般來說,這種類型的 RPM 檔案,里面應(yīng)該沒有 binary program
存在, 較常出現(xiàn)的就是屬亍 shell script 方面的軟件其兴。
MD5校驗
[root@kvm-docker ~]# md5sum anaconda-ks.cfg
bb6e974d74a51b24d0576edca461a03b anaconda-ks.cfg
SRPM
是 Source RPM 的意思,也就是這個 RPM 檔案里面含有原始碼顶瞒,擴(kuò)展名為***.src.rpm
為何說 CentOS 是『社群維護(hù)的企業(yè)版』呢? Red Hat 公司的 RHEL 發(fā)布出后,連帶會將 SRPM 發(fā)布出來。
社群的朋友就將這些 SRPM 收集起來幵重新編譯成為所需要的軟件,再重復(fù)釋出成為 CentOS,所以才能號稱與 Red Hat 的 RHEL 企業(yè)版同步啊!真要感謝 SRPM !如果想要理解 CentOS 是如何編譯一支程序的, 也能夠透過學(xué)習(xí) SRPM 內(nèi)含的編譯參數(shù),來學(xué)習(xí)的啊!
rpm包的安裝:
rpm 包安裝工具元旬,無法解決軟件包的依賴性
rpm -ivh 軟件包名
rpm包的管理
rpm -qa | grep 軟件包名 //查詢系統(tǒng)已安裝的軟件
rpm -qi 查詢已安裝軟件包的信息
rpm -ql 軟件包名 // 列出所有的已安裝文件
rpm -qc 軟件包名 // 列出配置文檔
rpm -V 校驗已安裝到系統(tǒng)中的文件的改動情況
-V 后的值:
- 5 md5校驗值
- S 文件大小
- L 鏈接文件
- T 文件的創(chuàng)建時間
- D 設(shè)備文件
- U 文件的所屬主
- G 文件的所屬組
- M 文件的權(quán)限
經(jīng)典實例
rpm2cpio
命令可以從一個rpm
包中提前出文件榴徐。
當(dāng)不小心刪除了系統(tǒng)里的一個重要的配置文檔,該怎么找回來
首先, 查詢這個文件是哪個軟件包安裝的
rpm -qf 絕對路徑的完整文件名
之后,將需要的文件提取到當(dāng)前的工作目錄
rpm2cpio 軟件包名.rpm | cpio -idv ./要提取的文件路徑
要提取的文件路徑 需要是 這個軟件包安裝到系統(tǒng)中后匀归,這個文件的路徑坑资。
比如/usr/bin/tree
命令如下:
rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv ./usr/bin/tree
YUM
YUM 是Yellow dog Updater Modified的簡稱,起初是由yellow dog這一發(fā)行版的開發(fā)者Terra Soft研發(fā)穆端,用python寫成袱贮,那時還叫做yup(yellow dog updater),后經(jīng)杜克大學(xué)的Linux@Duke開發(fā)團(tuán)隊進(jìn)行改進(jìn)体啰,遂有此名攒巍。yum的宗旨是自動化地升級,安裝/移除rpm包狡赐,收集rpm包的相關(guān)信息窑业,檢查依賴性并自動提示用戶解決。yum的關(guān)鍵之處是要有可靠的repository枕屉,顧名思義常柄,這是軟件的倉庫,它可以是http或ftp站點(diǎn), 也可以是本地軟件池西潘,但必須包含rpm的header卷玉, header包括了rpm包的各種信息,包括描述喷市,功能相种,提供的文件,依賴性等.正是收集了這些 header并加以分析品姓,才能自動化地完成余下的任務(wù)寝并。它能夠從指定的服務(wù)器自動下載RPM包并且安裝,可以自動處理依賴性關(guān)系腹备,并且一次安裝所有依賴的軟件包衬潦,無須繁瑣地一次次下載、安裝植酥。自己本身也可以做yum服務(wù)器镀岛,本身可以根據(jù)光盤鏡像做yum服務(wù)器。
配置文件
通過配置文件的設(shè)置友驮,可以把從遠(yuǎn)程倉庫安裝的軟件保存到本地漂羊。
配置文件路徑: /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
...略...
cachedir 設(shè)置緩存軟件到本地的路徑
keepcache 設(shè)置是否保存緩存的軟件包,0
不保存卸留,1
保存
假如想把已安裝好的軟件包保存到本地走越,需要設(shè)置keepcache=1
PID 文件
/var/run/yum.pid
這個文件在每次使用 yum
命令時被創(chuàng)建,正常安裝軟件結(jié)束后被刪除艾猜。
有時候非正常退出 yum install
命令時买喧,這個文件會保留捻悯,并且里面寫入了本次 yum install
命令的進(jìn)程號匆赃。
因為 YUM 是單進(jìn)程的,就是每次只能運(yùn)行一個 yum install 命令
, 所以假如上次的命令沒有正常結(jié)束今缚,本次的命令就無法執(zhí)行算柳,此時就會報錯,解決方法就是刪除 /var/run/yum.pid
文件后姓言,重新執(zhí)行 yum install
命令即可瞬项。
YUM 源配置文件
/etc/yum.repos.d
ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo docker-ce.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
在這個目錄下存放了可以使用的軟件包倉庫的地址等信息,都是以 .repo
結(jié)尾的文件何荚。
文件內(nèi)容:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
- [base] 代表軟件庫的名字囱淋!中括號一定要存在,里面的名稱則可以隨意取餐塘。但是不能有兩個相同的軟件庫名稱
- name 為庫的名稱妥衣,自定義但不需要太長
- mirrorlist=:列出這個軟件庫可以使用的軟件倉庫的URL列表,如果不想使用,可以注解到這行税手;
- baseurl=:這個最重要蜂筹,因為后面接的就是軟件庫的實際網(wǎng)址! mirrorlist 是由 yum 程序自行去查找倉庫URL, baseurl 則是指定固定的一個軟件庫URL!
- baseurl 支持的傳輸協(xié)議赠法,可以為
- file://
- ftp://
- http://
- https://
- enabled 為是否啟用庫
1
代表啟用担猛;0
代表關(guān)閉- gpgcheck 為檢查軟件包的簽名,
1
為檢查甥桂;0
為不檢查- gpgkey 數(shù)字簽名的公鑰位置
基本用法
# 安裝軟件
[root@localhost ~]# yum -y install httpd # -y表示后面的交互式詢問默認(rèn)選為yes
# 更新所有軟件(包括內(nèi)核)
[root@localhost ~]# yum update
# 升級指定軟件
[root@localhost ~]# yum update httpd
# 列出所有可更新的軟件
[root@localhost ~]# yum check-update
# 列出所有可安裝的軟件清單
[root@localhost ~]# yum list
# 查找軟件包
[root@localhost ~]# yum search httpd
# 刪除軟件包
[root@localhost ~]# yum remove httpd
# 清理yum的緩存
[root@localhost ~]# yum clean all
# 生成yum的緩存
[root@localhost ~]# yum makecache
// 查詢 pstree 文件由那個軟件包安裝
yum provides pstree
軟件包組
yum [群組功能] [軟件群組]
選項與參數(shù):
grouplist :列出所有可使用的“軟件群組組”,例如 Development Tools 之類的;
groupinfo :后面接 group_name,則可了解該 group 內(nèi)含的所有軟件名俱箱;
groupinstall:這個好用国瓮!可以安裝一整組的軟件群組,相當(dāng)?shù)牟诲e用狞谱!
groupremove :移除某個軟件群組乃摹;
自建 YUM 源(倉庫)
基于光盤鏡像的 YUM 源
節(jié)省硬盤空間,但是不可擴(kuò)展
CentOS_BuildTag :制作標(biāo)簽
EFI :EFI啟動方式文件
EULA :最終用戶許可協(xié)議
GPL :GPL授權(quán)協(xié)議
images :網(wǎng)絡(luò)PXE啟動文件
isolinux :挽救模式文件
LiveOS :微型系統(tǒng)鏡像
Packages :自帶RPM包 # 重點(diǎn)
repodata :YUM源數(shù)據(jù)庫 # 重點(diǎn)
RPM-GPG-KEY-CentOS-7 :公鑰信息文件
RPM-GPG-KEY-CentOS-Testing-7 :公鑰信息文件
TRANS.TBL :光盤目錄
在光盤鏡像中還存放著一個repodata目錄跟衅,這個目錄下存放的yum源的數(shù)據(jù)庫文件孵睬,也可以理解為這里記錄了軟件包的互相依賴關(guān)系。只要把光盤鏡像掛載到服務(wù)器上伶跷,然后配好yum源為掛載的鏡像掰读,當(dāng)使用yum安裝軟件的時候yum就會到這個目錄下面去查詢數(shù)據(jù)庫,然后再到Packages目錄下去拿rpm包進(jìn)行安裝叭莫,所以簡單理解可以說repodata是記錄Packages目錄下所有
rpm
包的數(shù)據(jù)庫蹈集。
1. 先在/目錄下創(chuàng)建一個iso的空目錄(不要在空目錄內(nèi)存放東西!目錄名稱可自定義)
1.1 [root@localhost ~]# mkdir /iso
2. 將光盤鏡像掛載到剛剛創(chuàng)建的/iso目錄
[root@localhost ~]# mount /dev/cdrom /iso/
mount: /dev/sr0 寫保護(hù)雇初,將以只讀方式掛載
3. 將原有的yum源文件移走備份
[root@shark ~]# mkdir /etc/yum.repos.d/back
[root@shark ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/
4. 配置yum源
[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Local-ISO.repo
[cdrpm]
name=cdrpm
baseurl=file:///iso
enabled=1
gpgcheck=0
5. 清理緩存并緩存新的數(shù)據(jù)
[root@localhost ~]# yum clean all && yum makecache
基于本地磁盤配置yum源
可擴(kuò)展性強(qiáng)拢肆,就是可以向本地的倉庫添加其他的
rpm
軟件包
會占用本地的磁盤空間,只可以對本機(jī)提供 YUM 服務(wù)靖诗。
1. 先安裝 createrepo
工具
[root@shark ~]# yum -y install createrepo
2. 先把光盤鏡像里的Packages目錄拷貝到本地磁盤(目錄名稱自取郭怪,后面保持一致)
[root@localhost ~]# mkdir /localYum
[root@localhost ~]# cp -a /iso/Packages/ /localYum/
3. 生成元數(shù)據(jù)
createrepo /localYum/Packages
查看生成的 repodata
目錄
ll /locaYum/Packages/repodata/
4. 配置yum源
vim /etc/yum.repos.d/CentOS-Local.repo
[localrpm]
name=localYum
baseurl=file:///locaYum/Packages
enabled=1
gpgcheck=0
5. 清理緩存并緩存新的數(shù)據(jù)
[root@localhost ~]# yum clean all && yum makecache
基于 FTP 文件傳輸協(xié)議的 YUM 源
可擴(kuò)展性強(qiáng),可以向互聯(lián)網(wǎng)上的任意主機(jī)提供 YUM 服務(wù)刊橘,前提是 互聯(lián)網(wǎng)上的主機(jī)可以訪問到 FTP Server
會占用 FTP Server 的磁盤空間
- 先安裝 FTP Server 軟件
可以是任意能提供 FTP 服務(wù)的軟件鄙才,這里使用的是 VSFTPD
yum install vsftpd -y
- 保證下面的選項在配置文件中是打開的,一般是默認(rèn)值
配置文件: /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
- 啟動服務(wù),并檢查監(jiān)聽端口
systemctl start vsftpd
[root@shark ftp]# ss -ntal |grep 21
LISTEN 0 1024 127.0.0.1:9121 *:*
LISTEN 0 32 :::21 :::*
- 拷貝數(shù)據(jù)包到 FTP Server 的根目錄下的指定文件夾下
這里為了演示方便促绵,可以直接拷貝 ISO 光盤鏡像中的數(shù)據(jù)包目錄到
/var/ftp/ftpYum/
目錄下
實驗環(huán)境
FTP server 地址 127.0.0.1
FTP server 根目錄/var/ftp
rpm 軟件包存放的目錄是/var/ftp/ftpYum/Packages
我們計劃把創(chuàng)建的 源數(shù)據(jù)目錄
repodata
放在/var/ftp/ftpYum
下
這個可以使用-o
選項實現(xiàn)攒庵,o
是小寫字母的o
拷貝光盤上的軟件包目錄到 /var/ftp/ftpYum/
下
mkdir /var/ftp/ftpYum
mount /dev/cdrom /media
cp -a /media/Packages/ /var/ftp/ftpYum/
- 創(chuàng)建源數(shù)據(jù)
cd /var/ftp
createrepo -o ftpYum --baseurl=ftpYum/Packages ftpYum/Packages
-o 源數(shù)據(jù)存放在這個目錄下 查找軟件包的時候這個作為基礎(chǔ) url 對這個目錄下的軟件包創(chuàng)建源數(shù)據(jù)
使用默認(rèn)不啟用的 YUM源安裝軟件
yum --enablerepo=mycdrom install software_name
源碼安裝
獲得源碼包途徑
官方網(wǎng)站据途,可以獲得最新的軟件包。
Nginx: www.nginx.org
安裝源碼包 準(zhǔn)備工作
1. 準(zhǔn)備編譯環(huán)境叙甸,如編譯器
gcc
gcc-c++
make
一般我們會安裝一個開發(fā)工具包颖医。這個工具包可以使用如下命令安裝
yum -y groupinstall "Development Tools"
2. 準(zhǔn)備軟件自身所依賴的軟件包
軟件自身依賴的軟件包信息,這個軟件的官方網(wǎng)站都會提示裆蒸。
比如 Nginx 需要 pcre 等熔萧,用于支持正則表達(dá)式,地址重寫rewrite
zlib-devel 用于壓縮
yum -y install pcre pcre-devel zlib-devel openssl-devel
3. 進(jìn)行配置
編譯時配置參數(shù)的意義
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-pcre
源碼安裝常見錯誤:
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option.
解決方案:
yum -y install zlib-devel
./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option.
解決方案:
yum -y install openssl-devel
錯誤 3
checking for C compiler ... not found ./configure: error: C compiler cc is not found
解決方案:
yum -y install gcc gcc-c++
錯誤4
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
解決方案:
yum -y install pcre-devel
開始編譯
編譯需要用的
make
,取保已經(jīng)安裝make
yum install make
取到源碼解壓的目錄下執(zhí)行
make
或者
make -j 2
-j 后面跟的是計算機(jī)的 cpu核心數(shù)
安裝
還是在源碼解壓后的目錄下執(zhí)行
make install