1. 程式人生 > 實用技巧 >993. 二叉樹的堂兄弟節點

993. 二叉樹的堂兄弟節點

11Linux之軟體包管理

目錄

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 https://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
    https://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 http://mirrors.aliyun.com/repo/Centos-7.repo
    

    例如163的Base基礎源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
    

    例如紅帽的epel擴充套件源

    # 可以直接下載
    [root@ccc ~]# curl -o /etc/yum.repos.d/epel.repo http://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=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://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 預先安裝編譯安裝依賴的庫

  • 安裝編譯器

  • 安裝直譯器

    [root@ccc ~]# yum groupinstall -y "開發工具"
    [root@ccc ~]# yum -y install gcc gcc-c++ autoconf automake make
    [root@ccc ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
    

11.5.2 官網下載原始碼包

  • 瀏覽器下載

  • 或者執行命令

    [root@ccc ~]# cd /root
    [root@ccc ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
    

11.5.3 解壓、編譯、編譯安裝

  • 解壓

    [root@ccc ~]# tar xvf nginx-1.18.0.tar.gz -C /tmp/ 
    [root@ccc ~]# cd /tmp/nginx-1.18.0/
    
  • 配置

    [root@ccc nginx-1.18.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module
    
    # 1、如果報錯,先執行make clean all,再重新執行配置操作
    # 2、--prefix指定安裝目錄,/usr/local/nginx是安裝目錄
    # 3、帶ssl stub_status模組 新增steam模組 -with-stream,能傳輸tcp協議
    # 4、http_stub_status_module 狀態監控
    # 5、http_ssl_module 配置https
    # 6、stream 配置tcp的轉發
    # 7、http_gzip_static_module 壓縮
    # 8、http_sub_module 替換請求
    
  • 編譯安裝

    [root@ccc nginx-1.18.0]# make && make install
    
  • 清理安裝包

    [root@ccc nginx-1.18.0]# rm -rf /tmp/nginx-1.18.0/
    
  • 將程式設定軟連結,便於後續升級

    [root@ccc ~]# ln -s /usr/local/nginx/ /soft/nginx
    [root@ccc ~]# ll /soft/
    總用量 0
    lrwxrwxrwx 1 root root 17 11月  3 15:24 nginx -> /usr/local/nginx/
    
  • 啟動測試

    [root@ccc nginx-1.18.0]# useradd www
    [root@ccc nginx-1.18.0]# /usr/local/nginx/sbin/nginx 
    開啟瀏覽器:輸入伺服器的IP地址,可以看到歡迎介面
    
  • 總結

    # ./configure --prefix=/usr/local/nginx
    1、指定安裝路徑,例如--prefix=DIR
    2、啟用或禁用某項功能,例如--enable-ssl,--disable-filter --with-http_ssl_module
    3、和其他軟體關聯,例如--with-pcre=/root/pcre-8.31
    4、檢查安裝環境,例如是否有編輯器gcc,是否滿足軟體的依賴需求
    5、最終生成:MAkefile
    # make			# 按Makefile檔案編輯,可以使用-j 2指定兩顆CPU編譯
    # make install  # 安裝
    如果中途發生錯誤,多半是因為缺少必要的庫的支援,先清理
    # make clean all  # 清理以前編譯後產生的*.o目標檔案
    然後安裝依賴庫,重新執行三部曲