RPM包管理基礎和源碼編譯基礎

rpm

  • 包的分類和拆包
    1. Application-VERSION-ARCH.rpm: 主包
    2. Application-devel-VERSION-ARCH.rpm 開發子包
    3. Application-utils-VERSION-ARHC.rpm 其它工具子包
    4. Application-libs-VERSION-ARHC.rpm 庫子包
  • 包之間 :可能存在依賴關係,甚至出現循環依賴
  • 解決依賴包管理工具

    1. yum :rpm包管理器前端管理工具
    2. apt-get :deb包管理器前端管理工具
    3. zypper :suse上的rpm前段管理工具
    4. dnf :Fedora 18+ rpm包管理器前端管理工具
  • 所有的二進制程序的運行都是依賴系統上的庫文件如何查看一個二進制程序所調用的庫程序

    • ldd /path/file
      [root@centos7 app]# which ls  查看命令的路徑
          alias ls='ls --color=auto'  
          /usr/bin/ls  
      [root@centos7 app]# ldd /usr/bin/ls     查看二進制程序所調用的庫  
          linux-vdso.so.1 =>  (0x00007ffd46fba000)    
          libselinux.so.1 => /lib64/libselinux.so.(0x00007f60116a2000)    
          libcap.so.2 => /lib64/libcap.so.2 (0x00007f601149d000)    
          libacl.so.1 => /lib64/libacl.so.1 (0x00007f6011293000)  
          libc.so.6 => /lib64/libc.so.6 (0x00007f6010ed0000)  
          libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6010c6e000)  
          libdl.so.2 => /lib64/libdl.so.2 (0x00007f6010a69000)  
          /lib64/ld-linux-x86-64.so.2 (0x00005616bd174000)  
          libattr.so.1 => /lib64/libattr.so.1 (0x00007f6010864000)  
          libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6010648000)  
  • 管理及查看本機裝載的庫文件
    • ldconfig 加載庫文件
    • ldconfig -p 和/sbin/ldconfig -p 一樣
    • /sbin/ldconfig -p :顯示本機已經緩存的所有可用庫文件名及文件路徑映射關係
  • 配置文件
    • /etc/li.so.conf, /etc/ld.so.conf.d/*.conf
  • 緩存文件
    • /etc/ld.so.cache
  • 程序調用的系統庫文件很重要,如果庫文件損壞可導致很多調用此庫的文件無法正常運行。修復系統的庫文件就是用光盤進入救援模式修復相應的庫文件。

包管理理器

  • 功能 :將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和效驗等管理工具操作。
  • 包文件組(每個包獨有)
    1. RPM包內的文件主程序
    2. RPM的元數據,如名稱,版本,依賴性,描述
    3. 安裝或卸載時運行的腳本
  • 在系統裏/var/lib/rpm 有一個公共數據庫,裏面存儲着所安裝的rpm包的記錄。

    1. 程序包名稱及其版本
    2. 依賴關係
    3. 功能說明
    4. 包安裝後生成的各種文件路徑及其效驗碼信息。
    5. rpm {–initdb|–rebuilddb}
      • initdb 初始化,如果事先不存在數據庫,則新建之否則,不執行任何操作
      • rebuilddb : 重建已安裝的包頭的數據庫索引目錄
  • 如果刪除庫則會導致rpm安裝時出現不知道安裝那個包 也不知道電腦安裝了什麼包,就會出現混亂

  • 管理程序包的方式
    1. 使用包管理器:rpm
    2. 使用前段工具:yum,dnf

如何獲取系統鏡像,和rpm包

centos 鏡像
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
- 和項目官方站點下載
- 第三方組織:
+ Fedora-EPEL
- 搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/

  • 自己製作
  • 如果是第三方建議要檢查其合法性,來源性合法性,程序包的完整性

Centos 使用rpm命令管理程序包

  • 安裝、卸載、升級、查詢、效驗、數據庫維護

    安裝

  • rpm [option ] rpm包路徑
    • -i (– install) 安裝
    • -v 顯示詳細信息
    • -vv 顯示更詳細信息
    • -h 以#顯示程序安裝進度
    • 常用 rpm -ivh /包路徑
    • –test : 測試安裝,但不是真正的安裝。
    • –nodeps :忽略包的依賴
    • –replacepkgs :重新安裝程序 是覆蓋安裝
    • –replacefiles :兩個程序有些相同的包,導致另一程序不能安裝,用這個命令可以讓這個程序相同的文件覆蓋之前安裝程序安裝的文件
    • –nosignature : 不檢查來源合法性
    • –nodigest : 不檢查包的完整性
    • –noscripts :不執行程序包內置的腳本
      • %pre: 安裝前腳本; –nopre
      • %post: 安裝後腳本; –nopost
      • %preun: 卸載前腳本; –nopreun
      • %postun: 卸載後腳本; –nopostun
        • –force :強制安裝
        • rpm2cpio tree.rpm |cpio -tv 查看rmp包都有什麼文件
        • rpm2cpio 包路徑.rmp | cpio -id 解壓rpm包到當前目錄

rpm 包升級

rpm {-U|–upgrade} [install-optins] PACKAGE_FILE..
rpm {-F|–freshen} [install-optins] PACKAGE_FILE..
upgrade :安裝有舊版本程序包,則升級,如果沒有舊的安裝包則‘安裝’
freshen :安裝有舊版本程序包,則升級,如果沒有則不執行升級操作
rpm -Uvh PACKAGE_FILE
rpm -fvh PACKAGE_FILE

降級

–oldpackage:降級

升級注意項

  1. 不要對內核做升級操作,linux支持多內核版本並存,因此對直接安裝新版本內核
  2. 如果原程序包的配置文件安裝後曾被修改,卸載、升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本配置文件,而是把新版本的文件重新命名.rpmnew 後綴保留

rpm包查詢

rpm {-q|–query}[select-options] [query-option]
[select-options]
-a :所有包
-f :查看指定文件由那個程序包安裝生成
-p :rpmfile :針對尚未安裝的程序包文件做查詢操作
–whatprovides CAPABILITY :查詢指定的能力功能由那個包所提供
–whatrequires CAPABILITY :查詢指定的能力被那個包所依賴
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件

[query-options]
– changelog :查詢rpm包的更新日誌文件
-c :查詢程序的配置文件
-d :查詢程序的文檔
-i :查看程序的信息內容
-l :查看指定的程序包安裝後生成的所有文件
–scripts :查看程序自帶的腳本
–provides :查看指定程序包所提供的功能和能力
-R :查詢指定程序的所依賴的庫文件

包卸載

rpm {-e|–erase} [–allmatches][–nodeps][–noscripts][–notriggers][–test] PACKAGE_NAME

包校驗

rpm {-V|–verify} [select-options][verify-options]

導入所需要的公鑰
- rpm -K|checksig rpmfile 檢查包的完整性和簽名
- rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-7
- 查看是否導入公鑰:rpm -qa “gpg-pubkey*”

yum

  • Centos :yum ,dnf
  • yum:yellowdog update modifier ,rpm的前端程序,可解決軟件包的相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具
  • yum repository :yum repo,存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄repodate下)
  • 文件服務器
    • 支持http://
    • https://
    • ftp://
    • file://

yum客戶端配置文件

/etc/yum.conf : 爲所有倉庫提供公共配置
/etc/yum.repos.d/*.repo : 爲倉庫的指向提供配置,編輯倉庫文件的位置,文件要以.repo後綴

[root@centos7 yum.repos.d]# vim base.repo 
[base]
name=base
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/
gpgcheck=0
  • 上面就是一個簡單的倉庫配置
  • 現在我們說一下這些都代表什麼意思
[base] 庫的ID  
name=base 庫名字  
baseurl=file{http;https;ftp} 這裏是寫rpm包的位置,必須repodate所在爲主的父目錄  
enabled={0|1}是否啓用庫 (0代表不啓用,1帶表啓用)  
gpgcheck={0|1} 是否啓用包檢查(如何不寫默認是啓用的,這樣要把下面的導入公鑰路徑寫上或者手動添加,不然會用yum安裝不成功)  
gpgkey=url {如果啓用這要把這個公鑰自動導入,寫上公鑰所在的路徑}  

在配置yum倉庫時可以配置的變量

  1. $releasever :當前OS的發行版本的主版本號
  2. $arch :平臺,i386,i486,i586,x86_64
  3. $basearch :基礎平臺:i386,x86_64
    • 實列:
  4. http://server/centos/releasever/ basearch
  5. http://server/centos/7/x86_64

互聯網上的源

yum命令

  • yum-config-manager –disable “倉庫名” 禁用倉庫
  • yun-config-manager –enable “倉庫名” 啓用倉庫
  • 我們也可以用命令創建yum配置文件
    • yum-config-manage –add-repo=baseurl的路徑
  [root@centos7 ~]# yum-config-manager --add-repo=ftp://192.168.27.13
Loaded plugins: fastestmirror, langpacks
adding repo from: ftp://192.168.27.13
[192.168.27.13]
name=added from: ftp://192.168.27.13
baseurl=ftp://192.168.27.13
enabled=1
  • 這裏少了一個gpgcheck 包檢查,如果不寫是默認檢查一定要注意
  • 這個命令一定要進去/etc/yum.repo.d/下面運行,這個是創建當前目錄下。
  • 所以我們還是最好用vim 自己創建

    yum命令的用法:
    yum [option] [command] [包名]
    顯示倉庫列表: yum repolist [all|enabled|disabled]
    顯示程序包

    1. yum list
    2. yum list [all|glob_exp1] [glob_exp2] […]
    3. yum list [available|installed|updates] [glob_exp1][…]
      安裝程序包:
    4. yum install package1 package2 [……]
    5. yum reinstall package1[…] (重新安裝)
      升級或者降級程序包:
    6. yum update [package1] [package2] […]
    7. yum downgrade package1 […] (降級)


檢查可用升級: yum check-update

卸載程序包: yum remove |erase package ..
查看程序包詳細內容 :yum info […]
查看指定特性(可以是某文件)是由哪個程序包所提供
yum provides |whatprovides feature1[ feature2]

清理本地緩存:
清除/var/cache/yum/basearch/ releasever 緩存
yum clean [all |packages |metafata |expire-cacherpmdb|plugins]
一把我們都用all就好了。
構建緩存
yum makecache
我們在用yum repolist 和安裝時都會自動緩存。

搜索:yum search [特徵或者關鍵字] 會搜索整個yum庫帶這個字或者特性的包,包括summary信息。

查看指定包所依賴的capabilities (功能)
yum deplist package1 [package20] [..]

查看yum事務歷史
yum history 列出安裝歷史目錄
yum history info [#] 查看第#號安裝軟件的內容
yum history packages-list 包名 列出安裝包列表
yum history undo # 撤銷第#號所做的步驟,如果#號是安裝則這條命令是卸載相反。

日誌 :/var/log/yum.log

包組管理的相關命令:
yum groupinstall group1 [group2] […] 安裝組
yum groupupdate group1 [group2] […] 更新組
yum grouplist 列出組
yum groupremove group1 [group2] […] 卸載組
yum groupinfo group1 [group2] […] 查看組詳細信息

yum 的命令行選項
–nogpgchech :禁止包檢查
-y : 自動yes
-q : 靜默模式
–disablerepo=repiidglob :臨時禁用此處指定的repo
–disablerepo=repoidglob : 臨時啓用此處指定的repo
–noplugins :禁用所有插件

系統安裝光盤作爲本地yum倉庫
1. 掛載光盤至某目錄 :列如:/mnt/cdrom
- mount /dev/cd /mnt/cdrom
2. 創建yum 配置文件

[base]
name=name
baseurl=路徑
gpgcheck=包檢查
enabled=是否啓用
如果是開發的單獨rpm包創建yum庫:

createrepo[ options] /目錄
會生成repodata的目錄這是yum必須要的。

編譯安裝方式

安裝環境

  • 從官方網站上下載軟件包到服務器上,就以apache 程序
  • http://httpd.apache.org/ 下載2.4版本
  • 用我們剛剛搭建好的yum庫來安裝編譯所需要的環境,我們直接安裝 yum groupinstall “Development Tools” 這個是開發包組。

編譯安裝

  • 第一步
    1. 把下載的程序包解壓
    2. 進入目錄運行 ./configure –help 看一下幫助文檔可以有效的瞭解參數
    3. 運行 ./configure —-prefix=/app/httpd24
      –sysconfdir=/etc/httpd24 –enable-ssl
      –enable-proxy-fcgi
      選項:指定安裝位置和啓用的特性
      安裝路徑的設定:–prefix=/PATH :指定默認安裝位置,如果不指定默認爲/usr/local/
      –sysconfdir=/PATH :配置文件安裝位置
      可選特性開啓或者禁用某些功能
      –disable-feature –enable=feature
      可選用的包
      –with-PACKAGE 包依賴 –without-PACKAGE 禁用依賴關係
    4. 在運行這個腳本的時候會檢查依賴到的外部環境,如依賴的軟件包
  • 注意:通常被編譯操作依賴的程序包,需要安裝此程序包的“開
    發”組件,其包名一般類似於name-devel-VERSION
    通過選項傳遞的參數開啓功能和安裝路徑等,執行時會參考用戶指定以及Makefile.in 文件生成Makefile 。在這個過程中會報錯,錯誤數沒有裝一些包我們只要按照提示裝就好,一般都是包名-devel-版本
  • 第二步make

    • ./configure 運行完用 echo $?看看是否返回爲0,如果爲0則這步沒有問題,若不是0則需要從新執行./configure 來看報什麼錯誤然後在進行./configure 。
    • 我們直接在當前目錄下運行mark 生成二進制文件
  • 第三步mark install

    • 我們要執行以下echo $?來確保上步命令是否有錯誤。
    • 在當前目錄運行命令 mark install
    • 這樣編譯就算完成了。
  • 安裝後的配置
    • 配置運行環境 在/etc/profile.d/創建一個以.sh後綴的文件
      1)PATH修改 在軟件生成的bin裏有一些命令,我們加入環境變量裏可以 不用輸入全路徑運行,當然最好把路徑加在最前面,
      避免和系統的混了導致出錯,
      bash
      vim /etc/profile.d/httpd24.sh
      PATH=/app/httpd24/bin:$PATH
      . /etc/profile.d/httpd24.sh
    • 啓動服務 apachectl
    • 我們在看一下man幫助是否顯示正常
      bash
      導入幫助手冊
      編輯/etc/man.config|man_db.conf文件
      添加一個MANPATH

      這樣就完成了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章