rpm命令 軟件包管理
程序包管理
一、概述
(一)API:Application Program Interface 應用編程接口
ABI:Application Binary Interface 應用二進制接口
Unix-line 使用ELF
API可以相同,不同架構的ABI不同
(二)庫級別的虛擬化
在linux上可以運行WinE ,在Windows上可以運行Cywin來實現庫的跨平臺運行
(三)系統級開發
C/C++:httpd,vsftpd,nginx等應用一般對系統要求較高的,使用C/C++來編輯核心程序
(四)應用級開放
java/Python/perl/ruby/php
java:jvm庫
Python:pvm
perl:perl解釋器
ruby:ruby解釋器
php:php解釋器
(五)系統級程序格式:例如c/c++
源代碼:文本格式的程序代碼
編譯開發環境:編譯器,頭文件,開發庫,
二進制格式:文本格式的程序代碼–>編譯器–>二進制格式(二進制程序,庫文件,配置文件,幫助文件)
(六)應用級編程工具程序格式,例如java,python
源代碼:編譯成能夠在其虛擬機上運行的格式
開發環境:編譯器,開發庫,
二進制
項目構建工具:
c/c++:make
java:maven
二、程序包管理器:
1、源代碼–>目標二進制格式–>組織成為一個或者有限幾個"包"文件
安裝,升級,卸載,查詢,校驗
2、程序包管理器:
debian: dpt工具,dpkg,".deb"后綴
REHL:redhat: redhat package manager–>rpm,".rpm"; rpm is package manager;
SUSE: rpm, ".rpm"
Gentoo: 使用poets機制
ArchLinux:
3、源代碼: 命名格式 name-VERSION.tar.gz
VERSION包含: major.minor.release
4、rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release.arch: rpm包的發行號
release.os
archetecture:架構 i386 x64(amd64),ppc noarch
拆包:主包和子包
主包: name-VERSION-release.acch.rpm
子包: name-function-VERSION-release.arch.rpm
光盤掛載:mount -r /dec/cdrom /media.cdrom
5、依賴關系: 子包依賴于主包,不能獨立存在使用
前端工具: 自動解決依賴關系
yum: rhel系列系統上的rpm包管理器的前端工具
apt-get(apt-cache): deb包管理器的前端工具
zypper:suse的rpm管理器前段工具
dnf: Fedora 22+系統上的rpm包管理器的前端工具
前端管理工具能解決后端管理工具的許多不便之處
三、程序包管理器: rpm
功能: 將編譯好的應用程序的各個組成文件打包成一個或者幾個程序包文件,從而更方便的實現程序包的安裝,升級,卸載,和查詢等管理操作
(1) 程序包的組成清單(每個程序包都單獨實現)
文件清單
安裝或者卸載時運行的腳本
(2) 數據庫(公共)
存儲程序包的名稱和版本
依賴關系
功能說明
安裝生成的各個文件的路徑和校驗碼信息
等等
ls /var/lib/rpm 查看rpm的數據庫
包括:group name sigmd5(校驗碼) triggername發器名稱
四、獲取程序包的途徑
1、系統發行版的光盤或者官方的文件服務器(或者鏡像站點)
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2 、項目的官方站點
例如: www.zabbix.com
3、第三方組織
(a)EPEL
(b)搜索引擎查找,使用專門的rpm包搜索引擎
http://pkgs.org
http://rpmfind.net
4、自己制作rpm包
建議: 從網站下載完成后, 檢查其合法性
來源合法性
程序包的完整性
五、Centos系統上rpm命令管理程序包
安裝,升級,卸載,查詢,校驗,數據庫維護
1、rpm命令:rpm [OPTION] [PAVKAGE_FILE]
安裝: -i, –install
升級: -U, –update, -F, –freshen
卸載: -e, –erase
查詢: -q, –query
校驗: -V, –verify
數據庫維護: –builddb,–initdb
2、安裝:
rpm {-i|–install} {install-options} PACKAGE_FILE…
rpm -ivh PACKAGE_FILE…
例如:
安裝zsh
安裝完成之后可以查看
cat /etc/shellls
如果要使用zsh,直接在命令行界面輸入zsh就可以切換到zsh使用,退出使用exit即可
GENERAL OPTION:
-v: berbose,詳細信息
-vv;更詳細的信息
install-options:
-h: 以hash marks輸出進度條,每個#表示2%的進度
–test: 測試安裝,檢查并報告依賴關系及沖突信息等
–nodeps: 忽略依賴關系;不建議使用
–replacepkgs: 重新安裝,但是修改配置文件之后,不會更新配置文件,需要將配置文件刪除后安裝
–replacefiles
–noscripts
注意: rpm包可以帶腳本
四類:
preinstall: 安裝過程開始之前運行的腳本,%pre , –nopre
postinstall: 安裝過程完成之后運行的腳本,%post, –nopost
preuninstall:卸載過程真正開始之前運行的腳本,%preun, –nopreun
postuninstall:卸載過程完成之后運行的腳本,%postun, –nopostun
–nosignature: 不檢查包簽名信息,不檢查來源合法性
–nodigest: 不檢查包完整性信息
3、升級:
rpm {-U|–update} {install-options} PACKAGE_FILE…
rpm {-F|–freshen} {install-options} PACKAGE_FILE…
-U: 升級或安裝
-F: 升級
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
–oldpackage: 降級
–force: 強制升級
注意:(1)不要對內核做升級操作,升級內核會重啟系統.Linux支持多內核版本并存,因此,直接安裝新內核
(2)如果某源程序的包的配置文件安裝包曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供
4、卸載:
-e,–erase
rpm {-e|–erase} [–allmatches] [–nodeps] [noscripts] [–notriggers] [–test] PACKAGE_NAME…
–allmatches: 卸載所有匹配指定名稱的程序包各版本
–notrigger: 不觸發任何操作
–nodeps: 忽略依賴關系
–test: dry run模式,測試卸載
rpm -e 包名
5、查詢:
rpm {-q|query} [select-options] [query-options]
[select-options]
package_name:查詢執行的程序包是否已經安裝,及其版本
-a,–all: 查詢所有已經安裝過的包
rpm -qa | grep ""
-f,–file FILE: 查詢指定的文件由哪個程序包安裝生成
-g,–group GROUP: 查詢指定包組中包含了哪些包
-p,–package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作
-whatprovides CAPABILITY: 查詢指定的CAPABILITY由哪個程序包提供
-whatrequires CAPABILITY: 查詢指定的CAPABILITY被哪個包所依賴
[query-options]
–changelog: 查詢rpm包的changelog(歷史改進)
rpm -q –changelog zsh | less
-l,–list: 列出程序包安裝生成的所有程序列表
rpm -ql bash
-i,–info: 查詢程序包相關的信息,版本號,大小,所屬的包組等
rpm -qi bash
-c,–configfiles: 查詢指定的程序包提供的配置文件
rpm -qc bash
-d,–docfiles: 查詢指定的程序包提供的幫助文檔
rpm -qd bash
—provides: 列出指定的程序包提供的所有CAPALIBITY
rpm -q –provides bash
rpm -q –whatprovides 'config(bash)'
rpm -q –whatrequires 'config(bash)'
-R,–requires: 查詢指定的程序包的依賴關系
rpm -q -R bash
–scripts: 查詢程序包自帶的腳本片段
rpm -q –scripts bash
用法:
-qi PACKAGE,
-qf FILE,
-qc PACKAGE,
-qd PACKAGE
-ql PACKAGE_NAME,
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE
-qpc FILE
-qpd
6、校驗:
rpm {-V|verify} [select-options] [verify-options]
V–requires,–verify
rpm -V zsh
man page查詢校驗信息的意義
六、包來源合法性和完整性驗證:
1、來源合法性驗證:
數字簽名: 用自己的私鑰加密對應文件的特征碼
2、完整性驗證
導入ios文件的秘鑰包:rpm –import /…/../RPM-GPG-KEY-CentOS-7
手動校驗: rpm -K PACKAGE_FILE
3、獲取并導入信任的包制作者的秘鑰:鏡像文件中存在
在/etc/pki/rpm-gpg 中同樣存在RPM-GPG-KEY-CentOS-7 文件存在
對于centos發行版來說: 使用rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7即可
4、驗證:
(1)安裝次組織簽名的程序時,會自動執行驗證
(2)手動驗證: rpm -K PACKAGE_FILE
七、數據庫重建:
rpm的數據庫位置: /var/lib/rpm
查詢操作: 通過此處的數據庫進行的
獲取幫助:
CentOS6: man rpm
CentOS7: man rpmdb
rpm{–initdb|rebuilddb} –dbpath
–initdb: 初始化數據庫,當前無任何數據庫可實現創建一個新的;當前有時不執行任何操作
–rebuilddb: 重新構建,通過讀取當前系統上所有已經安裝過的程序包重新構建
回顧:
rpm命令實現程序管理
安裝: -ivh ,–nodeps –replacepkgs
卸載: -e. –nodeps
升級: -Uvh -Fvh .–nodeps ,–oldpackage 降級
查詢: -q ,-qa,-qf,-qi,-qd,-qc,–scripts,-q –changelog,
-q –provides ,-q –requires
校驗: -V
導入GPG密鑰文件: –import,-K(直接檢測,不用安裝),–nodigest(不檢查完整性) ,–nosignature(不檢測來源合法性)
數據庫重建: –initdb ,–rebuilddb
yum命令 程序包管理
一、解決依賴關系:
CentOS: yum,dnf
URL:統一資源定位符
yum repository: rpm repo
存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下: repodata):
1、文件服務器格式
baseurl=
ftp://
http://
nfs://
file:///
2、yum客戶端
配置文件
rpm -q yum 查看yum文件
rpm -qc yum 配置文件
/etc/yum.conf:為所有倉庫提供公共配置,或者不屬于倉庫的配置
/etc/yum.repos.d/*.repo: 為每一個倉庫的指向提供配置
獲取配置文件的幫助信息: man yum.conf
倉庫指向的定義:(含有選項的,前邊數值為默認數值)
[repositoryID]
name=some name for this repository
baseurl=url://path/to/repository(可以指定多個URl)
mirrorlist=(鏡像文件,一般不會和URL同時使用)
enabled={1|0}(是否啟用)
gpgcheck={1|0}(是否檢查來源合法性)
repo_gpgcheck={1|0}(是否檢查元數據的來源合法性)
gpgkey=URL(gpg的密鑰文件的訪問路徑)
enablegroup={1|0}(是否使用組來批量管理程序包)
failovermethod={roundrobin(輪詢)|priority(優先級)}(故障轉移方法)(指定多個baseurl時發生故障如何查詢)
keepalive={1|0}
username
passwd
cost=1000(默認)
自己配置yum源
vim *.conf
[base]
name=
baseurl=
gpgcheck=0
[epel]
name=
baseurl=
gpgcheck=0
二、yum命令的使用
yum [options] [command] [package …]
command is one of :
repolist [all|enabled(默認啟用)|diaabled(禁用)] 顯示倉庫列表
list 顯示程序包
list optionss
# yum list [通配符]
# yum list available [通配符](可用)
# yum list updates [通配符](可升級)
# yum list installed [通配符](可安裝)
安裝
install package1 package2 …
重新安裝
reinstall package1 package2 …
降級
downgrade package1 [package2] […]
升級制定程序包
update
yum update [package1] [package2] …
檢查可用升級
check-update
卸載程序包
remove | erase package1 [package2] …
查詢包的簡要信息
info
info […]
查看指定的特性(可以是某文件)是由哪個程序包所提供的
provides | whatprovides feature1 [feature2] […]
清理本地緩存
clean [ packages(程序包) | metadata(元數據) | expir-cache(過期緩存) | rpmdb | plugins(插件) | all ]
構建緩存
makecache
搜索:以指定的關鍵字搜索程序包名及summary信息
search [string1] [string2] […]
查看指定包所依賴的capabilities
deplist package1 […]
查詢yum事務歷史
history [ info | summary(概要) | packages-list | packages-info | addon-info | redo | undo …]
安裝及升級本地程序包
localinstall
包組管理的相關命令
groupinstall group1 […]
groupupdate
grouplist
groupremove
groupinfo
四、如何使用光盤當作本地yum倉庫
(1)掛載光盤到某目錄
# mount -r -t
(2)創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
五、yum的命令行選項
–nogpgcheck: 禁止進行 gpg check
-y: 自動回答為"yes"
-q, –quiet靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins: 禁用所有插件
六、yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺
$basearch: 基礎平臺
$YUM0-YUM9
http://mirrors.站點.com/centos/$releasever/$arch/$basearch/OS
1、創建yum倉庫
安裝:yum install createrepo
使用createrepo命令創建:
get到目標目錄下
createrepo [options] <directory>
createrepo ./ 查看當前目錄的rpm包,并進行創建yum源
編寫配置文件
2、程序包的編譯安裝:
testapp-VERSION-release.src.rpm –>安裝后,使用rpmbuild命令制作成二進制的rpm包,而后安裝
源代碼 –> 預處理 –> 編譯(gcc) –> 匯編 –> 鏈接 –> 執行
源代碼的組織格式:
多文件:文件中代碼之間,和可能存在跨文件依賴關系
項目管理工具
c/c++: make(configure –> Makefile.in –> makefile)
java: maven
C代碼編譯安裝三步驟:
(1)./configure:
<1> 讓用戶通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成的makefile
<2> 檢查各指定啟用特性所依賴的外部環境
(2)make
根據makefile文件,構建應用程序
(3)make install
開發工具:
autoconf: 生成configure腳本
automake: 生成Makefile.in文件
建議: 安裝前查看INSTALL, README
3、開源程序源代碼的獲取:
官方自建站點:
apache.org(ASF)
mariadb.org
代碼托管:
SourceForge
Github.com
code.google.com
4、c/c++: gcc編譯器 (GNU C Complier)
編譯C源代碼:
前提: 提供開發工具和開發環境
開發工具: make, gcc等
開發環境: 開發庫,頭文件
glibc: 標準庫
通過“包組”提供開發組件
CentOS 6: "Development Tools", "Server Platform
Development",
第一步: configure腳本
選項: 指定安裝位置、指定啟用的特性
–help: 獲取其支持使用的選項
mget、scp命令如何使用
選項分類:
安裝路徑設定
–prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置,默認為/usr/local/
–sysconfdir=/PATH/TO/SOMEWHERE:指定配置路徑
System types: 目標系統平臺結構
Optional Features: 可選特性的啟用
–disable-FEATURE: 禁用特性
–enable-FEATURE: 啟用特性
Optional Packages: 可選程序包(依賴到的程序包)
–with-PACKAGE
–without-PACKAGE
例如:~]# yum groupinstall Server Platform Development -y
~]# ./configure –prefix=/usr/local/apache2 –sysconfdir=/etc/http2
第二部: make
cd http-2.2.29
make install
netstat -tan
第三部: make install
安裝后的配置:
(1) 導出二進制程序目錄至PATH環境變量中
編輯文件/etc/profile.d/NAME.sh
添加export PATH=/PATH/TO/BIN:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中
讓系統重新生成緩存:
ldconfig [-v]
(3) 導出頭文件
基于軟鏈接的方式實現即可,可以是文件,也可以是目錄文件
ln -sv
將目標文件下的include文件路徑輸出到/usr/include目錄下
(4) 導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH參數,并指明新路徑即可
例如: 在/etc/man.config中添加
原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/37408
文章對rpm包管理相關知識總結的很詳細,其中rpm包管理工具中查詢語句和yum源配置是基本能力,需要多加練習,熟練掌握。