正式班D20
2020.11.02星期五 正式班D20
11 軟件包管理
11.1 軟件包介紹
11.1.1 編程語言分類
-
機器語言
-
彙編語言
-
高級語言
解釋型(shell、python)
安裝步驟:
1、下載python寫好的軟件包
2、在自己的Linux主機上安裝對應版本的python解釋器和依賴包
編譯型(c、go)
c語言不支持跨平台編譯,因此c語言寫出來的源碼包在不同的平台安裝時都必須編譯一次。
go支持跨平台編譯
安裝步驟:
1、下載源碼包
2、在自己的Linux主機上安裝好編譯器
3、用編譯器把源碼包編譯成可執行的命令
11.1.2 三種安裝包
-
rpm包
預先編譯打包,安裝簡單
軟件的穩定版會被官方做成rpm,因此軟件版本偏低
-
源碼包
手動編譯打包,安裝繁瑣
軟件版本豐富,可選擇性強
-
二進制包
安裝即可使用,安裝簡單
不能修改源代碼
rpm製作好的安裝程序———————>安裝
源碼包——————>需要自己定製安裝細節————–>安裝
二進制包—————>已經安裝完畢(下載完就可以用,無需安裝)
11.2 rpm包管理
11.2.1 rpm包簡介
-
簡介
RPM是Red-Hat Package Manager(RPM軟件包管理器)的縮寫,設計理念是開放式的
-
rpm包格式
舉例
yum-plugin-fastestmirror-1.1.31-53.el7.noarch.rpm yum-plugin-fastestmirror # 軟件包的名稱 1.1.31 # 軟件的版本 53 # 軟件編譯之後發佈的次數 el7 # 適合的操作系統的版本 noarch # 適用於不同版本的CPU .rpm # 後綴名
-
rpm包使用的平台
redhat/centos/fedora/suse # 查看自己當前的平台 [root@ccc yum.repos.d]# uname -m x86_64 [root@ccc yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)
11.2.2 管理rpm包的兩種方式
-
rpm命令
需要自己找到rpm包,並手動解決包的依賴性關係
(實際很難區分缺少什麼包)
-
yum命令
相關的rpm包事先存放在一個倉庫里,倉庫包含了所有的依賴包
yum會按照倉庫幫我們解決依賴性問題
11.2.3 RPM包的獲取方式
-
三種方式(卸載umount)
# 1.本地的ISO鏡像光盤:三種方式 方式1: [root@ccc yum.repos.d]# mount /dev/cdrom /opt mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@ccc yum.repos.d]# df -h 文件系統 容量 已用 可用 已用% 掛載點 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 7.7G 6.0G 1.8G 78% / /dev/sda1 473M 123M 351M 26% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.5G 4.5G 0 100% /opt [root@ccc yum.repos.d]# ll /dev/cdrom lrwxrwxrwx 1 root root 3 11月 2 08:43 /dev/cdrom -> sr0 方式2: [root@ccc yum.repos.d]# mount /dev/sr0 /opt mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@ccc yum.repos.d]# df -h 文件系統 容量 已用 可用 已用% 掛載點 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 7.7G 6.0G 1.8G 78% / /dev/sda1 473M 123M 351M 26% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.5G 4.5G 0 100% /opt 方式3: [root@ccc ~]# dd if=/dev/sr0 of=/centos7.iso 記錄了9338880+0 的讀入 記錄了9338880+0 的寫出 4781506560位元組(4.8 GB)已複製,154.363 秒,31.0 MB/秒 [root@ccc ~]# mount-o loop/root/centos7.iso /opt # 查看光盤裡的rpm包 [root@ccc ~]# ls /opt/Packages/ # 2.自己去網上下載rpm包進行安裝 # 3.聯網從yum倉庫里獲取rpm包
11.3 rpm命令
11.3.1 常用選項
-
安裝
# rpm -ivh RPM包名全稱 [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm 準備中... ################################# [100%] 軟件包 zlib-devel-1.2.7-18.el7.x86_64 已經安裝
-
卸載
# rpm -e RPM包名 [root@ccc ~]# rpm -e zlib-devel [root@ccc ~]# rpm -ql zlib-devel 未安裝軟件包 zlib-devel
-
升級
# rpm -Uvh RPM包名
-
查詢
rpm -qa # 查詢系統中安裝的所有RPM軟件包 rpm -qa | grep php # 檢索系統中已經安裝有關php的軟件包 rpm -q RPM包名 # 查詢指定軟件包是否已經安裝 rpm -qi RPM包名 # 查詢系統中已經安裝包的描述信息 rpm -ql RPM包名 # 查詢系統中已安裝包里所包含的文件 rpm -qc RPM包名 # 查詢指定軟件包的所有配置文件 rpm -qd RPM包名 # 查詢某個包安裝的幫助文檔 rpm -qf RPM包名 # 查詢系統中指定文件所屬的軟件包 -p # 上述選項的基礎上加-p就可以查看尚未安裝的rpm包的信息
-
其他
--nomd5 # 不檢驗軟件包的簽名 --nodeps # 忽略依賴性安裝軟件,安裝後軟件可能無法使用,最好解決好依賴性再安裝 --force # 強制安裝軟件包,只有安裝和升級可以強制執行
11.3.2 安裝及依賴性
-
安裝
# 1.RPM包在本地 [root@ccc yum.repos.d]# mount /dev/sr0 /opt [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm # 2.RPM包來源於網絡 # 如果有報錯 curl:(60) Peer's Certificate has expired҅將系統時間改正確重裝即可 [root@ccc ~]# rpm -ivh //mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
-
安裝與依賴性
# 例如安裝httpd [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 錯誤:依賴檢測失敗: /etc/mime.types 被 httpd-2.4.6-93.el7.centos.x86_64 需要 httpd-tools = 2.4.6-93.el7.centos 被 httpd-2.4.6-93.el7.centos.x86_64 需要 libapr-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要 # 安裝提示的庫 [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 錯誤:依賴檢測失敗: libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-93.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit)被httpd-tools-2.4.6-93.el7.centos.x86_64 需要 [root@ccc ~]# rpm -ivh /opt/Packages/apr-1.4.8-5.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:apr-1.4.8-5.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:apr-util-1.5.2-6.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:httpd-tools-2.4.6-93.el7.centos ############################ [100%] [root@ccc ~]# yum search mime.types 已加載插件:fastestmirror Loading mirror speeds from cached hostfile ======================================== 匹配:mime.types ========================================= mailcap.noarch : Helper application and MIME type associations for file types perl-LWP-MediaTypes.noarch : Guess media type for a file or a URL [root@ccc ~]# rpm -ivh /opt/Packages/mailcap-2.1.41-2.el7.noarch.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:mailcap-2.1.41-2.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:httpd-2.4.6-93.el7.cento ################################# [100%]
11.3.3 升級rpm包
# 兩個版本不能共存
# -Uvp
11.4 yum命令
11.4.1 yum介紹
-
yum自動解決依賴關係
yum(Yellow dog Updater,Modified)是一個在Fedora和RedHat及CentOS中的shell前端軟件包管理器。
基於RPM包管理,能夠從指定的服務器自動下載RPM包並安裝,可自動處理依賴關係,一次安裝所有依賴的軟件包。
-
常見yum命令與配置文件
[root@ccc ~]# rpm -q yum yum-3.4.3-167.el7.centos.noarch [root@ccc ~]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf /etc/yum/version-groups.conf
-
yum命令常用選項
# 倉庫 yum repolist # 查詢可用倉庫 yum repolist all # 查看包括已啟用或禁用的所有倉庫狀態 # 關閉與啟用倉庫:本質都是在修改repo文件中enable的值0不啟用1啟用 yum-config-manager --disable epel # 關閉倉庫epel yum-config-manager --enable epel # 啟用倉庫epel # 查看 yum list # 列出可用倉庫中所有的軟件包 yum list | less yum grouplist # 列出可用倉庫中的軟件組 yum provides /usr/sbin/ifconfig # 查詢命令所屬軟件包,可不加路徑只寫命令名字 # rpm -qf # 只可加路徑 # 安裝 yum install 軟件包名 -y # 安裝軟件-y非交互 yum groupinstall 軟件組名 -y # 安裝軟件組,同yum groups install 軟件組名 -y # 卸載 yum remove 軟件包名 -y # 卸載軟件包 yum groupremove 軟件組名 -y # 卸載軟件組 # 重裝 yum reinstall 軟件包名 -y # 不小心刪除配置文件可以reinstall # 更新 yum check-update # 檢查可以更新的軟件包 yum update -y # 剛裝完系統之後執行 yum update 軟件包 -y # 更新某個軟件包 # 緩存 yum makecache # 製作元數據緩存 yum clean all # 清理元數據緩存 vim /etc/yum.conf # 默認軟件包下載安裝後會自動刪除,設置keepcache=1開啟軟件包緩存,緩存目錄為配置文件中指定的cachedir
# 注意點 yum會以自己倉庫中的repodata存儲的依賴關係為準,有多個倉庫就依次檢索 # 1.yum直接安裝公網的rpm包,會自動查找當前系統上已有的倉庫解決依賴關係 yum install //mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba-4.8.3-4.el7.x86_64.rpm # 2.yum直接安裝本地的rpm包,會自動查找當前系統上已有的倉庫解決依賴關係 yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
11.4.2 yum的歷史記錄
yum history # 查看執行的yum命令歷史記錄
yum history info ID號 # 查看具體某一條yum命令的詳細信息
yum history undo ID號 # 撤銷執行過的歷史命令
11.4.3 本地源(鏡像文件作為yum源)
-
先掛載
[root@ccc ~]# mount /dev/cdrom /opt/ [root@ccc ~]# mount /dev/sr0 /opt/ [root@ccc ~]# mount -o loop /xxx.iso /opt # 查看光盤裡的rpm包 [root@ccc ~]# ls /opt/Packages/
-
編輯repo文件
[root@ccc ~]# cd /etc/yum.repos.d/ [root@ccc yum.repos.d]# vim local.repo [root@ccc yum.repos.d]# cat local.repo [local] name="this is local repo" baseurl=file:///opt enabled=1 gpgcheck=0
-
檢查可用倉庫
[root@ccc yum.repos.d]# yum repolist # 查詢可用倉庫 [root@ccc yum.repos.d]# yum repolist all # 查看所有倉庫,包括禁用的
-
安裝、查詢、卸載
[root@ccc ~]# yum list # 列出可用的軟件包 [root@ccc ~]# yum install vsftpd -y [root@ccc ~]# yum list vsftpd httpd [root@ccc ~]# yum remove vsftpd -y [root@ccc ~]# yum install glib* httpd -y [root@ccc ~]# yum provides vsftp # 查詢某個軟件(可未安裝)是由那個rpm包提供 # yum reinstall [root@ccc ~]# rm -rf /etc/httpd/conf/httpd.conf [root@ccc ~]# yum reinstall httpd -y &> /dev/null [root@ccc ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf # yum update [root@ccc ~]# yum -y update samba [root@ccc ~]# yum -y update
-
軟件包組安裝、查詢、卸載
[root@ccc yum.repos.d]# yum groupinstall "開發工具" -y [root@ccc yum.repos.d]# yum groupremove "開發工具" -y
11.4.4 網絡源(開源yum源)
-
下載開源的yum頭:
例如阿里雲的Base基礎源
wget -O /etc/yum.repos.d/CentOS-Base.repo //mirrors.aliyun.com/repo/Centos-7.repo
例如163的Base基礎源
wget -O /etc/yum.repos.d/CentOS-Base.repo //mirrors.163.com/.help/CentOS7-Base-163.repo
例如紅帽的epel擴展源
# 可以直接下載 [root@ccc ~]# curl -o /etc/yum.repos.d/epel.repo //mirrors.aliyun.com/repo/epel-7.repo # 也可以安裝一個包來生成 [root@ccc ~]# yum install epel-release -y
例如nginx官網的軟件包源
# 進入nginx官網-->download-->Pre-Built Packages-->Stable and mainline--> # RHEL/CentOS-->編輯到本地 [root@ccc ~]# cat nginx.repo [nginx-stable] name=nginx stable repo baseurl=//nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=//nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=//nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=//nginx.org/keys/nginx_signing.key module_hotfixes=true
將CentOS系統默認的源 備份
[root@ccc yum.repos.d]# cd /etc/yum.repos.d/ [root@ccc yum.repos.d]# mkdir bak [root@ccc yum.repos.d]# mv *.repo bak [root@ccc yum.repos.d]# ls bak
11.4.5 自己製作本地yum源
-
下載好一堆rpm包,相關依賴包也都存在,將所有rpm包都放在一個文件夾下/aaa
-
安裝工具createrepo
[root@ccc ~]# yum install createrepo -y
-
製作repodata
[root@ccc ~]# createrepo /aaa/
-
配置本地repo文件,只想/aaa
[root@ccc ~]# vim /etc/yum.repos.d/soft.repo [soft] name=soft baseurl=file:///aaa enabled=1 gpgcheck=0
-
yum元數據緩存
指將yum倉庫下的元數據緩存下來,下次安裝時省去了檢索的過程,安裝速度加快
[root@ccc ~]# yum clean all # 清理緩存 [root@ccc ~]# yum makecache # 製作緩存
-
yum軟件包緩存
開啟軟件包緩存後,從網絡源下載安裝完的軟件包不再刪除,都緩存到本地
[root@ccc ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 指定軟件安裝包的緩存目錄 keepcache=1 # 設置為1 debuglevel=2 # 緩存目錄為: /var/cache/yum/x86_64/7/
-
基於軟件包緩存可以做成自己的yum源,以此來控制各個服務的版本
1、在測試環境中,在每個節點上都開啟軟件包緩存 2、在測試環境中,安裝相同版本的操作系統,安裝完畢後統一執行yum update -y 3、在測試環境中,部署完架構,測試完畢 4、把測試環境中每台機器上緩存好的軟件包採集到一個目錄下 [root@ccc ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/ 5、用createrepo命令製作好依賴關係,即repodata數據庫 6、在線上環境部署時,用本地源,不輕易升級,不濫用yum源
11.4.6 自己製作yum源共享給別人
-
服務端執行的操作
# 1、環境準備 [root@ccc ~]# systemctl stop firewalld [root@ccc ~]# systemctl disable firewalld [root@ccc ~]# setenforce 0 setenforce: SELinux is disabled [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config # 安裝ftp服務 [root@ccc ~]# yum install vsftpd -y [root@ccc ~]# systemctl start vsftpd [root@ccc ~]# systemctl status vsftpd # 查看狀態,確保開啟 [root@ccc ~]# systemctl enable vsftpd # 採集關鍵包放到一個目錄下 [root@ccc ~]# mkdir /var/ftp/centos7 [root@ccc ~]# mount /dev/sr0 /var/ftp/centos7 # 或拷貝 [root@ccc ~]# mount /dev/sr0 /opt [root@ccc ~]# mkdir /var/ftp/centos7 [root@ccc ~]# find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp{} /var/ftp/centos7/
-
在客戶端上執行的操作
# 1、環境準備 [root@ccc ~]# systemctl stop firewalld [root@ccc ~]# systemctl disable firewalld [root@ccc ~]# setenforce 0 setenforce: SELinux is disabled [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config [root@ccc ~]# ping -c 2 192.168.12.42 # ping服務器IP地址確保網絡暢通 # 在客戶端配置網絡yum源 [root@ccc ~]# cd /etc/yum.repos.d/ [root@ccc ~]# mkdir bak [root@ccc ~]# mv *.repo bak/ [root@ccc ~]# cat >> ftp.repo << EOF > [ftp_repo] > name = This is Ftp Share Repo > baseurl = ftp://192.168.12.42/centos7 > enabled = 1 > gpgcheck = 0 > EOF # 客戶端baseurl指向的文件夾子目錄一級必須要有repodata數據庫