1. 程式人生 > 實用技巧 >軟體管理

軟體管理

目錄

RPM

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

rpm包名組成

RPM包命名以-將軟體分成了若干部分bash-4.2.46-28.el7.x86_64.rpm

獲取rpm包

在我們剛開始學習rpm包,建議先使用本地CentOS7的映象,但實際生產環境中都是通過聯網的方式獲取rpm包。
我們先通過虛擬機器載入映象,然後在linux中執行 mount /dev/cdrom /mnt,此時你會在/mnt/Packages目錄下看到很多rpm的包檔案。那麼就可以開始rpm包管理之旅。

Linux安裝軟體方式

RPM使用

rpm包安裝

#安裝軟體包, 需要指定軟體包絕對路徑
[root@lqz ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@lqz ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

#在軟體包所在目錄下可以不指定絕對路徑
[root@lqz ~]# cd /mnt/Packages/
[root@lqz Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

#如果軟體包存在, 強制再次安裝
[root@lqz ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm

#安裝samba服務需要依賴其他元件, 使用--nodeps可重新強制安裝
[root@lqz ~]# rpm -ivh --nodeps  /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

查詢已安裝好的rpm包

#查詢vsftpd這個rpm包是否安裝
[root@lqz ~]# rpm -q vsftpd

#模糊查詢系統已安裝的rpm包
[root@lqz ~]# rpm -qa |grep ftp

#查詢vsftpd軟體包的相關資訊
[root@lqz ~]# rpm -qi vsftpd

#查詢rpm包所安裝的檔案
[root@lqz ~]# rpm -ql vsftpd

#查詢rpm包相關的配置檔案
[root@lqz ~]# rpm -qc vsftpd

#查詢配置檔案或命令來自於哪個rpm包
[root@lqz ~]# rpm -qf /etc/vsftpd/vsftpd.conf
[root@lqz ~]# rpm -qf /usr/sbin/vsftpd

#查詢未安裝的軟體包會產生哪些檔案
[root@lqz ~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

#查詢未安裝的軟體包會產生哪些檔案
[root@lqz ~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

RPM包升級

# 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.先安裝低版本
[[email protected] ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
        
#2.嘗試安裝高版本(會出現錯誤)
[[email protected] ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
        
#3.使用升級的方式,完美解決替換
[[email protected] ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm

RPM包解除安裝

解除安裝包時需要先把依賴的包解除安裝掉,如果依賴的包是系統所必須的,那就不能解除安裝這個包,否則會造成系統崩潰。

#先查詢, 然後解除安裝 
[[email protected] ~]# rpm -qa |grep sh
[[email protected] ~]# rpm -e zsh

RPM包校驗

軟體相關的資料庫存放於/var/lib/rpm目錄

[[email protected] ~]# 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

Yum是RedHat以及CentOS中的軟體包管理器。能夠通過網際網路下載 .rpm 包並且安裝,並可以自動處理依賴性關係,無須繁瑣地一次次下載、安裝。(PS: YUM是生產最佳實踐)

YUM源

要成功的使用 YUM 工具安裝更新軟體或系統,就需要有一個包含各種 rpm 軟體包的repository(軟體倉庫),這個軟體倉庫我們習慣稱為 yum 源。(可以是本地源、網路源)

配置阿里yum源

#預設系統是國外源,需要替換為國內的源
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo 
http://mirrors.aliyun.com/repo/Centos-7.repo

#擴充套件源,有很多軟體在基本源中沒有
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo 
http://mirrors.aliyun.com/repo/epel-7.repo

Nginx官方源

[[email protected] ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0
enabled=1

YUM使用

使用yum查詢軟體包的方式

[[email protected] ~]# yum list
[[email protected] ~]# yum list|grep ftp
[[email protected] ~]# yum info ftp

yum通過命令查詢軟體包

yum provides ipconfig  # 通過命令查軟體,這個命令屬於哪個軟體

使用yum安裝軟體包的方式

[[email protected] ~]# yum install tree
[[email protected] ~]# yum install tree -y    #非互動

#安裝本地的rpm包, 如果有依賴關係, 會自動從軟體倉庫中下載所需依賴
[[email protected] ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm

#直接安裝網路上的rpm包
[[email protected] ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

使用yum重新安裝軟體包的方式

#1.如果不小心刪除vsftpd配置檔案
[[email protected] ~]# rm -f /etc/vsftpd/vsftpd.conf

#2.可以對軟體進行重新安裝
[[email protected] ~]# yum reinstall vsftpd

#3.檢查軟體的配置檔案
[[email protected] ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

使用yum更新軟體包

#對比Linux已安裝的軟體和yum倉庫中的軟體, 有哪些需要升級
[[email protected] ~]# yum check-update

#更新acl軟體
[[email protected] ~]#  yum update acl -y

#如下的執行很危險,這代表更新整個系統所有的軟體,包括核心
[[email protected] ~]#  yum update -y

使用yum刪除軟體包

[[email protected] ~]# yum install samba -y
[[email protected] ~]# yum erase samba -y
[[email protected] ~]# yum remove samba -y

yum倉庫相關指令

#列出yum源可用的軟體倉庫
[[email protected] ~]# yum repolist

#列出全部yum源可用和禁用的倉庫
[[email protected] ~]# yum repolist all

#查詢某個命令或檔案屬於那個軟體包(生產常用)
[[email protected] ~]# yum provides /etc/my.cnf
[[email protected] ~]# yum provides cd

yum快取相關指令

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

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

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

#4.只清除快取的軟體包
[[email protected] ~]# yum clean packages

組包相關指令

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

#yum刪除包組
[[email protected] ~]# yum groups remove  -y Base

歷史記錄指令

#1.檢視歷史執行yum命令
[[email protected] ~]# yum history

#2.查詢歷史執行yum命令ID詳細資訊
[[email protected] ~]# yum history info N

#3.撤銷歷史執行過的yum命令
[[email protected] ~]# yum history undo N

搭建本地倉庫

單臺

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

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

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

#4.或者使用手動新增repo檔案
[root@lqz ~]# 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@lqz ~]# yum makecache

多臺

環境準備

服務端進行yum倉庫的搭建

#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

原始碼包管理

原始碼包指的是開發編寫好的程式原始碼,但並沒有將其編譯為一個能正常使用的工具。

PS:此方法不是百分百通用於所有原始碼包,建議拿到原始碼包解壓後,進入到目錄找相關的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=/soft/nginx-1.12.2

#5.將Makefile檔案編譯可執行二進位制程式
[root@node1 nginx-1.15.12]# make

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

原始碼編譯報錯資訊處理

checking for C compiler ... not found ./configure: error: C compiler cc is not found 
# yum -y install gcc gcc-c++ make


./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


./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