­

正式班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包格式

    01Linux11.2.1rpm包格式

    舉例

    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 112 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數據庫
    

11.5 源碼包

11.5.1 官網下載

11.5.2 預先安裝編譯安裝依賴的庫

11.5.3 解壓、編譯、編譯安裝

Tags: