1.RPM基本概述
1.什么是rpm?
RPM全稱 RedHat Package Manager 縮寫,由紅帽開發用於軟件包的安裝升級卸載與查詢
2.rpm包名組成部分?
RPM包命名以-將軟件分成了若干部分bash-4.2.46-28.el7.x86_64.rpm
bash:軟件名
4.2.46-28.el7:4是大版本,2是小版本,46是修訂次數,28是發布次數,el7是:enterprise linux 7,使用linux7系統
x86_64:64位架構
3.如何獲取rpm包
在我們剛開始學習rpm包,建議先使用本地CentOS7的鏡像,但實際生產環境中都是通過聯網的方式獲取rpm包。(先學會,你懂的?) 我們先通過虛擬機加載鏡像,然后在linux中執行 mount /dev/cdrom /mnt
,此時你會在/mnt/Packages
目錄下看到很多rpm的包文件。那么就可以開始rpm包管理之旅。
4.擴展: Linux中除了rpm安裝軟件,是否還有安裝軟件方式?
分類 | 安裝 | 版本 |
---|---|---|
rpm包 | 預先編譯打包,安裝簡單 | 軟件版本偏低 |
源碼包 | 手動編譯打包,安裝繁瑣 | 軟件版本隨意 |
二進制包(綠色包) | 解壓即可使用, 安裝簡單 | 不能修改源碼 |
2.RPM使用示例
1.rpm包如何安裝
以下列出了rpm命令進行安裝軟件的常用參數
選項 | 描述 |
---|---|
-i | 安裝rpm |
-v | 顯示安裝詳細信息 |
-h | 顯示安裝rpm進度 |
–force | 強制重新安裝 |
–nodeps | 忽略依賴關系 |
#安裝軟件包, 需要指定軟件包絕對路徑
# mount /dev/cdrom /mnt
[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
# yum 安裝會自動處理依賴
# 其他用法,直接使用連接地址
# https://developer.aliyun.com/mirror/
# https://developer.aliyun.com/mirror/zabbix?spm=a2c6h.13651102.0.0.3e221b113DCKcf
# https://mirrors.aliyun.com/zabbix/zabbix/
# 先裝3,再裝4測試升級
# zabbix-agent-3.0.9-1.el7.x86_64.rpm
[root@lqz ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
# 升級要用U
[root@lqz ~]# rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.8-1.el7.x86_64.rpm
# 卸載(帶依賴的卸不了)
rpm -e zabbix-agent
rpm -q zabbix-agent
yum remove samba
2.如何查詢已安裝好的rpm包
選項 | 描述 |
---|---|
rpm -q | 查看指定軟件包是否安裝(重點) |
rpm -qa | 查看系統中已安裝的所有RPM軟件包列表 |
rpm -qi | 查看指定軟件的詳細信息 |
rpm -ql | 查詢指定軟件包所安裝的目錄、文件列表(重點) |
rpm -qc | 查詢指定軟件包的配置文件(只有配置文件,etc下的) |
rpm -qf | 查詢文件或目錄屬於哪個RPM軟件 |
rpm -qip | 查詢未安裝的rpm包詳細信息 |
rpm -qlp | 查詢未安裝的軟件包會產生哪些文件 |
#查詢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 -qf /usr/sbin/ifconfig
# 想看未安裝的
yum provides vim
#查詢未安裝的軟件包會產生哪些文件
[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
3.RPM包升級
選項 | 描述 |
---|---|
rpm -U | 如果老版本不存在則全新安裝,如果存在有新版即升級 |
# 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@www.lqz.com ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
#2.嘗試安裝高版本(會出現錯誤)
[root@www.lqz.com ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
#3.使用升級的方式,完美解決替換
[root@www.lqz.com ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
4.RPM包卸載
卸載包時需要先把依賴的包卸載掉,如果依賴的包是系統所必須的,那就不能卸載這個包,否則會造成系統崩潰。
#先查詢, 然后卸載
[root@www.lqz.com ~]# rpm -qa |grep sh
[root@www.lqz.com ~]# rpm -e zsh
5.RPM包校驗(擴展了解)
軟件相關的數據庫存放於/var/lib/rpm
目錄
參數 | 描述 |
---|---|
S | 文件的容量大小是否被改變 |
M | 文件的類型或者文件的屬性是否被修改 |
5 | MD5 這一種指紋加密的內容已經不同 |
L | 路徑已經被改變 |
U | 文件的所屬主已被修改 |
G | 文件的所屬組已被修改 |
T | 文件的創建時間已被改變 |
[root@www.lqz.com ~]# 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
6.RPM包小結
如何查詢 util-linux 軟件包安裝了哪些文件? 如何查詢 mkdir 命令是由哪個 RPM 軟件包安裝的? 安裝 .rpm 軟件包時,-i、-U、選項有何區別?
3.YUM基本介紹
1.什么是YUM
Yum是RedHat以及CentOS中的軟件包管理器。能夠通過互聯網下載 .rpm 包並且安裝,並可以自動處理依賴性關系,無須繁瑣地一次次下載、安裝。(PS: YUM是生產最佳實踐)
2.YUM源是什么
1要成功的使用 YUM 工具安裝更新軟件或系統,就需要有一個包含各種 rpm 軟件包的repository(軟件倉庫),這個軟件倉庫我們習慣稱為 yum 源。(可以是本地源、網絡源)
3.YUM源配置實例
1.阿里yum源
# yum repolist # 查看現在有多少源,nginx沒有,可以配置nginx倉庫,就有了
# 擴展epel源:
[root@www.lqz.com ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#默認系統是國外源,需要替換為國內的源
[root@www.lqz.com ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
#擴展源,有很多軟件在基本源中沒有
[root@www.lqz.com ~]# wget -O /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
2.Nginx官方源,比如在學習Nginx時需要使用官方的yum源來安裝
[root@www.lqz.com ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
PS:源超找方式基本一致,zabbix,Docker、Nginx、saltstack、openstack
4.YUM實踐案例
1.使用yum查詢軟件包的方式
[root@www.lqz.com ~]# yum list
[root@www.lqz.com ~]# yum list|grep ftp
[root@www.lqz.com ~]# yum info ftp
2.使用yum安裝軟件包的方式
[root@www.lqz.com ~]# yum install tree
[root@www.lqz.com ~]# yum install tree -y #非交互
#安裝本地的rpm包, 如果有依賴關系, 會自動從軟件倉庫中下載所需依賴
[root@www.lqz.com ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
#直接安裝網絡上的rpm包
[root@www.lqz.com ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
3.使用yum重新安裝軟件包的方式
#1.如果不小心刪除vsftpd配置文件
[root@www.lqz.com ~]# rm -f /etc/vsftpd/vsftpd.conf
#2.可以對軟件進行重新安裝
[root@www.lqz.com ~]# yum reinstall vsftpd
#3.檢查軟件的配置文件
[root@www.lqz.com ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
4使用yum更新軟件包
#對比Linux已安裝的軟件和yum倉庫中的軟件, 有哪些需要升級
[root@www.lqz.com ~]# yum check-update
#更新acl軟件
[root@www.lqz.com ~]# yum update acl -y
#如下的執行很危險,這代表更新整個系統所有的軟件,包括內核
[root@www.lqz.com ~]# yum update -y
5.使用yum刪除軟件包
[root@www.lqz.com ~]# yum install samba -y
[root@www.lqz.com ~]# yum erase samba -y
[root@www.lqz.com ~]# yum remove samba -y
6.與yum倉庫相關指令(擴展了解)
#列出yum源可用的軟件倉庫
[root@www.lqz.com ~]# yum repolist
#列出全部yum源可用和禁用的倉庫
[root@www.lqz.com ~]# yum repolist all
#查找某個命令或文件屬於那個軟件包(生產常用)
[root@www.lqz.com ~]# yum provides /etc/my.cnf
[root@www.lqz.com ~]# yum provides cd
7.與yum緩存相關指令(擴展了解)
#1.緩存rpm包方式一、修改yum全局配置文件
[root@www.lqz.com ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 #啟動緩存
#2.緩存rpm包方式二,只下載不安裝
[root@www.lqz.com ~]# yum install -y yum-plugin-downloadonly #插件
[root@www.lqz.com ~]# yum install httpd -y --downloadonly --downloaddir=/tmp
#3.清除所有yum緩存的軟件包以及元數據
[root@www.lqz.com ~]# yum clean all
#4.只清除緩存的軟件包
[root@www.lqz.com ~]# yum clean packages
8.組包相關指令,(擴展了解)
[root@www.lqz.com ~]# yum groups list
#安裝一整個組的軟件
[root@lqz ~]# yum groups install Development tools
Compatibility libraries
Base Debugging Tools
#yum刪除包組
[root@www.lqz.com ~]# yum groups remove -y Base
9.歷史記錄指令,(擴展了解)
#1.查看歷史執行yum命令
[root@www.lqz.com ~]# yum history
#2.查詢歷史執行yum命令ID詳細信息
[root@www.lqz.com ~]# yum history info N
#3.撤銷歷史執行過的yum命令
[root@www.lqz.com ~]# yum history undo N
PS: YUM還有配置文件與簽名驗證需要我們額外擴展了解的請點擊傳送門
5.搭建本地倉庫
1.有的時候你的linux系統不能聯網,當然就不能很便捷的使用聯網的yum源了,這時候就需要你自己會利用linux系統光盤制作一個yum源。具體步驟如下:
#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
2.很多時候不僅僅是一台機器無法上網,而是很多機器都無法上網,但都有聯網下載軟件的需求,這個時候難道每台機器都掛在光盤嗎? 當然可以,但如果軟件出現了更新怎么辦?
本地光盤提供基礎軟件包: Base yum緩存提供常用軟件包: nginx, zabbix, docker
1.環境准備
系統 | IP | 角色 |
---|---|---|
centos7 | 10.0.0.99 | yum倉庫服務端 |
centos7 | 10.0.0.98 | yum倉庫客戶端 |
2.服務端進行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: 如果此倉庫每次新增軟件則需要重新生成一次
3.客戶端配置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
6.源碼包管理實踐
1.源碼包是什么
源碼包指的是開發編寫好的程序源代碼,但並沒有將其編譯為一個能正常使用的工具。
2.為什么要學習源碼包
1、部分軟件官網僅提供源碼包,需要自行編譯並安裝。 2、部分軟件在新版本有一些特性還沒來得及制作成rpm包時,可以自行編譯軟件使用其新特性。
3.源碼包的優缺點
1.可以自行修改源代碼 2.可以定制需要的相關功能 3.新版軟件優先更新源碼 4.缺點是: 1) 相對yum安裝軟件會復雜很多。2) 標准化實施困難,自動化就無法落地。
4.源碼包如何獲取
常見的軟件包都可以在官網獲取源碼包,比如 apache、nginx、mysql等等
5將源碼包編譯為二進制可執行文件步驟如下,簡稱安裝三步曲
PS: 此方法不是百分百通用於所有源碼包,建議拿到源碼包解壓后,進入到目錄找相關的README幫助文檔
6.源碼編譯示例
下面通過編譯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 --help
[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 # 停止