1. 程式人生 > 實用技巧 >Linux之軟體管理(rpm)

Linux之軟體管理(rpm)

一、RPM介紹

rpm全稱RedHat Package Manager 縮寫,由紅帽開發用於軟體包的安裝升級解除安裝與查詢

rpm包名組成如下:版本號中(4.2.46)4是大版本,2是小版本,46是修訂次數

注意:linux除了rpm安裝軟體,還有其他安裝軟體方式

二、rpm使用

1、rpm包安裝

'''
命令:rmp options rpm包
-----------options引數------------
-i   安裝rpm
-v   顯示安裝詳細資訊
-h   顯示安裝rpm進度
-U   升級rpm包
--force 強制重新安裝
--nodeps 忽略依賴關係
'''
# 1、安裝tree,並顯示安裝詳細資訊和安裝進度
[root@192 Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:tree-1.6.0-10.el7 ################################# [100%] # 2、強制重新安裝tree [root@192 Packages]# rpm -ivh --force tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%] Updating / installing... 1:tree-1.6.0-10.el7 ################################# [100%] # 3、忽略samba的依賴 [root@192 Packages]# rpm -ivh --nodeps samba-4.10.16-5.el7.x86_64.rpm Preparing... #
################################ [100%] Updating / installing... 1:samba-0:4.10.16-5.el7 ################################# [100%] warning: group printadmin does not exist - using root # 4、可以使用rpm包連線地址來安裝 [root@192 Packages]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm # 5、對rpm軟體包進行升級 [root@192 Packages]# rpm -Uvh tree-1.7.0-10.el7.x86_64.rpm

3、rpm查詢命令

'''
rpm -q 軟體名/包          #檢視指定軟體包是否安裝(重點)
rpm -qa                  #檢視系統中已安裝的所有rpm軟體包列表
rpm -qi 指定軟體名/包     #檢視指定軟體的詳細資訊
rpm -ql 指定軟體名/包     #查詢指定軟體包所安裝的目錄、檔案列表(重點)
rpm -qc 指定軟體名/包     #查詢指定軟體包的配置檔案(只有配置檔案,etc下的)
rpm -qf 檔案/目錄名       #檢視檔案或者目錄屬於哪個rpm軟體
rpm -qip 未安裝軟體包     #檢視未安裝軟體包的詳細資訊
rpm -qlp 未安裝軟體包     #檢視未安裝軟體包會產生哪些檔案
'''
# 例項
# 1、檢視vsftpd是否安裝
[root@192 Packages]# rpm -q vsftpd
vsftpd-3.0.2-28.el7.x86_64
# 2、檢視已安裝帶有ftp的rpm包
[root@192 Packages]# rpm -qa | grep ftp
vsftpd-3.0.2-28.el7.x86_64
# 3、檢視安裝好的tree軟體的詳細資訊
[root@192 Packages]# rpm -qi tree
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: Tue 12 Jan 2021 09:39:06 AM CST
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, Fri 04 Jul 2014 01:36:46 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : Tue 10 Jun 2014 03:28:53 AM CST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.
# 4、檢視tree軟體包所安裝的目錄和檔案列表
[root@192 Packages]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
# 5、檢視vsftpd的配置檔案
[root@192 Packages]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
# 6、檢視ftp目錄是屬於那個rpm軟體
[root@192 Packages]# rpm -qf /var/ftp
vsftpd-3.0.2-28.el7.x86_64
# 7、檢視未安裝samba軟體包會產生哪些檔案
[root@192 Packages]# rpm -qlp samba-4.10.16-5.el7.x86_64.rpm 
error: open of samrpm failed: No such file or directory
/etc/openldap/schema
/etc/openldap/schema/samba.schema
/etc/pam.d/samba
/usr/bin/smbstatus
/usr/lib/systemd/system/nmb.service
....
# 8、檢視未安裝samba軟體包的詳細資訊
[root@192 Packages]# rpm -qip samba-4.10.16-5.el7.x86_64.rpm 
Name        : samba
Epoch       : 0
Version     : 4.10.16
Release     : 5.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Unspecified
Size        : 2262422
License     : GPLv3+ and LGPLv3+
Signature   : RSA/SHA256, Thu 15 Oct 2020 03:00:37 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : samba-4.10.16-5.el7.src.rpm
Build Date  : Wed 14 Oct 2020 12:11:01 AM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.samba.org/
Summary     : Server and Client software to interoperate with Windows machines
Description :
Samba is the standard Windows interoperability suite of programs for Linux and
Unix.

4、rpm包解除安裝

注意:rpm包解除安裝的時候,需要先把依賴包解除安裝,才可以解除安裝,如果依賴包是系統必須的,則不可以解除安裝,否則會造成系統奔潰

5、rpm包校驗

'''
rpm校驗命令;rpm -v 包
-----------返回結果引數-----------
S    # 代表檔案的容量大小發生改變
M    # 代表檔案的型別或者檔案的屬性(也就是許可權)傳送改變
5    # 代表MD5指紋加密發生改變
L    # 代表路徑發生變化
U    # 檔案擁有者的發生改變
G    # 檔案的所屬組發生改變
T    # 檔案建立的時間被改變了
'''
# 案例
[root@192 Packages]# 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介紹

1、定義

yum是RedHat以及CentOS中的軟體包管理器。能夠通過網際網路下載 .rpm 包並且安裝,並可以自動處理依賴性關係,無須繁瑣地一次次下載、安裝

2、yum源定義

yum源實質:就是一個包含各種rpm軟體包的軟體倉庫,有本地源(光碟)和網路源(如阿里源、騰訊源)

3、更換yum源

linux系統預設的是國外源,速度比較慢,需要替換成國內源

[root@192 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo 
http://mirrors.aliyun.com/repo/Centos-7.repo

擴充套件源

[root@192 ~]#wget -O /etc/yum.repos.d/epel.repo 
http://mirrors.aliyun.com/repo/epel-7.repo

四、yum的使用

1、基本命令

#-----------查詢---------------
[root@192 Packages]# yum list    #顯示所有已安裝和未安裝的程式包
'''
yum list updates  #列出所有可更新軟體包
yum list installed #列出所有已安裝軟體包
'''
[root@192 Packages]# yum list | grep ftp #顯示帶有ftp的程式包
[root@192 Packages]# yum info ftp  # 顯示ftp軟體訊息
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: ftp.sjtu.edu.cn
 * updates: mirrors.163.com
'''
yum info updates   #列出所有可更新的軟體包資訊
yum info installed #列出所有已安裝的軟體包資訊
'''

#-----------安裝------------
# 1 安裝
[root@192 Packages]# yum install tree
# 2 非互動式安裝
[root@192 ~]# yum install tree -y  #不會詢問你是否要安裝,也就是非互動式安裝
# 3 安裝本地rpm包,依賴關係也是自動從軟體倉庫中下載
[root@192 Packages]# yum localinstall bind-9.11.4-26.P2.el7.x86_64.rpm 
# 4 從網上的rpm包安裝
[root@192 ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
# 5 重新安裝:  reinstall
[root@192 Packages]# yum reinstall tree

#--------------更新-------------
# 檢查已安裝軟體和yum倉庫軟體哪些需要升級
[root@192 Packages]# yum check-update
# 更新acl軟體 
[root@192 Packages]# yum update acl -y #非互動式
# 更新系統所有軟體和核心,不推薦使用,有風險
[root@192 Packages]# yum update -y

#--------------刪除-------------
# 移除一個或多個軟體包
[root@192 Packages]# yum erase vsftpd
# 解除安裝軟體
[root@192 Packages]# yum remove vsftpd

2、擴充套件命令

(1)yum倉庫相關命令

# 列出yum所有可用的倉庫
[root@192 Packages]# yum repolist
# 列出yum全部倉庫(包括不可用倉庫)
[root@192 Packages]# yum repolist all
# 檢視命令或者檔案是屬於那個軟體包的(比較常用)
[root@192 Packages]# yum provides /etc/my.cnf
[root@192 Packages]# yum provides cd

(2)yum快取相關命令

#1.快取rpm包方式一、修改yum全域性配置檔案
[root@192 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1     #啟動快取

#2.快取rpm包方式二,只下載不安裝
[root@192 ~]# yum install -y yum-plugin-downloadonly #外掛
[root@192 ~]# yum install httpd -y --downloadonly --downloaddir=/tmp

#3.清除所有yum快取的軟體包以及元資料
[root@192 ~]# yum clean all

#4.只清除快取的軟體包
[root@192 ~]# yum clean packages

(3)組包相關指令

[root@192 ~]# yum groups list
#安裝一整個組的軟體
[root@192~]# yum groups install Development tools 
Compatibility libraries 
Base Debugging Tools

#yum刪除包組
[root@192 ~]# yum groups remove  -y Base

(4)歷史記錄指令

# 1、檢視歷史執行yum命令
[root@192 Packages]# yum history
Loaded plugins: fastestmirror
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     7 | chsh root <root>         | 2021-01-12 14:49 | Erase          |    1   
     6 | chsh root <root>         | 2021-01-12 14:48 | Erase          |    1 P<
     5 | chsh root <root>         | 2021-01-08 22:31 | Install        |    1 > 
     4 | chsh root <root>         | 2021-01-02 21:24 | Install        |    1   
     3 | chsh root <root>         | 2020-12-30 22:48 | Install        |    1   
     2 | chsh root <root>         | 2020-12-30 22:39 | Install        |    1   
     1 | System <unset>           | 2020-12-30 20:18 | Install        |  304

# 2、查詢歷史命令的詳細資訊:yum history info ID
[root@192 Packages]# yum history info 2
Loaded plugins: fastestmirror
Transaction ID : 2
Begin time     : Wed Dec 30 22:39:35 2020
Begin rpmdb    : 304:a8ba2104174eb7275b1079d758330953198ec7e5
End time       :                           (0 seconds)
End rpmdb      : 305:1525f6814302444cd03b93a05dbf98cb0a752e10
User           : chsh root <root>
Return-Code    : Success
Command Line   : install net-tools -y
Transaction performed with:
    Installed     rpm-4.11.3-45.el7.x86_64                        @anaconda
    Installed     yum-3.4.3-168.el7.centos.noarch                 @anaconda
    Installed     yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch @anaconda
Packages Altered:
    Install net-tools-2.0-0.25.20131004git.el7.x86_64 @base
history info

# 3、撤銷歷史執行過的命令:yum history undo ID
[root@192 Packages]# yum history undo 7
Loaded plugins: fastestmirror
Undoing transaction 7, from Tue Jan 12 14:49:10 2021
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: ftp.sjtu.edu.cn
 * updates: mirrors.163.com
    Erase vsftpd-3.0.2-28.el7.x86_64 @?base
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-28.el7 will be installed
--> Finished Dependency Resolution

3、搭建本地倉庫

(1)製作yum源

#1.掛載映象
[root@192 ~]# mount /dev/cdrom /mnt   

#2.備份原有倉庫
[root@192 ~]# gzip /etc/yum.repos.d/

#3.使用yum-config-manager命令新增本地倉庫
[root@192 ~]# yum-config-manager --add-repo="file:///mnt"

#4.或者使用手動新增repo檔案
[root@192~]# vim /etc/yum.repos.d/cdrom.repo  
[cdrom]      
name=This is local cdrom
baseurl=file:///mnt
enabled=1
gpgcheck=0

[]          #倉庫名稱
name        3倉庫描述資訊
baseurl     #YUM源url地址 ,可以是file:// ftp:// http://
enabled     #是否使用該YUM源(0代表禁用, 1代表啟用)
gpgcheck    #是否驗證軟體簽名(0代表禁用, 1代表啟用)

#5.生成快取
[root@192 ~]# yum makecache

(2)服務端-客服端搭建

#1.關閉防火牆、與selinux
[root@yum_server ~]# systemctl stop firewalld
[root@yum_server ~]# setenforce 0

#2.安裝ftp服務,啟動並加入開機啟動
[root@yum_server ~]# yum -y install vsftpd 
[root@yum_server ~]# systemctl start vsftpd 
[root@yum_server ~]# systemctl enable vsftpd

#3.開啟yum快取功能
[root@yum_server ~]# vim /etc/yum.conf
[main] cachedir=/var/cache/yum/$basearch/$releasever 
keepcache=1
[root@yum_server ~]# yum clean all

#4.提供基礎base軟體包
[root@yum_server ~]# mkdir /var/ftp/centos7
[root@yum_server ~]# mount /dev/cdrom /mnt
[root@yum_server ~]# cp -rp  /mnt/Packages/.rpm /var/ftp/centos7/

#5.提供第三方源
[root@yum_server ~]# mkdir /var/ftp/ops
[root@yum_server ~]# yum -y install nginx docker

#6.複製已快取的 Nginx docker 及依賴包 到自定義 YUM 倉庫目錄中
[root@yum_server_69_112 ~]# find /var/cache/yum/x86_64/7/ 
-iname ".rpm" -exec cp -rf {} /var/ftp/ops ;

#7.安裝createrepo並建立 reopdata倉庫
[root@yum_server_ ~]# yum -y install createrepo
[root@yum_server_ ~]# createrepo /var/ftp/ops

#PS: 如果此倉庫每次新增軟體則需要重新生成一次
# 客戶端配置yum源指向服務端
#1.客戶端配置並使用 base 基礎源
[root@yum_client ~]# gzip /etc/yum.repos.d/
[root@yum_client ~]# vim /etc/yum.repos.d/centos7.repo 
[centos7]
name=centos7_base
baseurl=ftp://10.0.0.99/centos7
gpgcheck=0

#2.客戶端配置並使用 ops 源
[root@yum_client ~]# vim /etc/yum.repos.d/ops.repo 
[ops]
name=local ftpserver
baseurl=ftp://10.0.0.99/ops
gpgcheck=0

五、原始碼包

1、介紹

原始碼包:指的是開發好的程式原始碼,需要自行編譯,有時候,要使用軟體新版本的特性,在沒有rpm包(軟體新版本製作成rpm包有時候會等待一些時間)的時候,就可以自己執行原始碼包,這樣就可以使用它的新特性

它的優點:可以自行修改原始碼,可以定製需要的相關功能,新版軟體優先更新原始碼

缺點:安裝過程相對複雜。

常見的軟體原始碼包都可以在其官網中獲取

2、原始碼包使用

安裝過程大致如下:具體可以根據相關的README幫助文件

例子:編譯nginx的原始碼包

#1.基礎環境準備
[root@node1 ~]# yum install -y gcc make wget 

#2.下載原始碼包
[root@node1 ~]# wget http://nginx.org/download/nginx-1.15.12.tar.gz

#3.解壓原始碼包, 並進入相應目錄
[root@node1 ~]# tar xf nginx-1.15.12.tar.gz
[root@node1 ~]# cd nginx-1.15.12

#4.配置相關的選項,並生成Makefile
[root@node1 nginx-1.15.12]# ./configure --prefix=/usr/local/nginx    #指定安裝路徑
[root@node1 nginx-1.15.12]# echo $? # 檢查上一個命令是否執行成功

#5.將Makefile檔案編譯可執行二進位制程式,此時,/usr/local/nginx可執行檔案還不在,需要執行make install 才能copy過去
[root@node1 nginx-1.15.12]# make

#6.將二進位制檔案拷貝至對應的目錄中
[root@node1 nginx-1.15.12]# make install

#7 建立軟連線(以後方便升級)
[root@node1 nginx-1.15.12]# ln -s nginx-1.18.0 nginx

#8 目錄介紹
conf:配置檔案
html:網站檔案存放
logs:日誌
sbin:可執行檔案

# 9 命令
nginx  # 啟動
nginx -s reload # 重新載入
nginx -s stop  # 重啟
nginx -s stop # 停止

3、常見原始碼編譯錯誤解決方法

# 1、
checking for C compiler ... not found ./configure: error: C compiler cc is not found 

# 解決辦法:yum -y install gcc gcc-c++ make

# 2、
./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 install -y pcre-devel

# 3、
./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

# 4、
./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