RPM包管理器
二進制應用程序的組成部分:二進制文件禾唁、庫文件、配置文件螺戳、幫助文件
- 包命名:
源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm 包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION:major.minor.release
包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發(fā)子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它 子包
包之間:可能存在依賴關系,甚至循環(huán)依賴
解決依賴包管理工具:
yum :rpm 包管理器的前端工具
apt-get :deb 包管理器前端工具
zypper: suse 上的rpm 前端管理工具
dnf: Fedora 18+ rpm 包管理器前端管理工具
- 庫文件:
查看二進制程序所依賴的庫文件
ldd /PATH/TO/BINARY_FILE
which cp
ldd /bin/cp
管理及查看本機裝載的庫文件
ldconfig 讀取/etc/ld.so.conf.d下的所有庫文件
/sbin/ldconfig -p: 顯示本機已經(jīng)緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
- 包管理器:
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件隆圆,從而方便快捷地實現(xiàn)程序包的安裝锦担、卸載、查詢凉倚、升級和校驗等管理操作
1. 包文件組成 ( 每個包獨有)
RPM 包內的文件
RPM 的元數(shù)據(jù)兼都,如名稱,版本稽寒,依賴性扮碧,描述等
安裝或卸載時運行的腳本
2. 數(shù)據(jù)庫( 公共) :/var/lib/rpm
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
- 程序包的來源:
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
- 獲取程序包的途徑:
1. 系統(tǒng)發(fā)版的光盤或官方的服務器;
CentOS 鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2. 項目官方站點
3. 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL 推薦瓦胎,包很全
搜索引擎 :
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
4. 自己制作
注意:第三方包建議要檢查其合法性,來源合法性
- rpm包管理
CentOS系統(tǒng)上使用rpm 命令管理程序包:
安裝芬萍、卸載、升級搔啊、查詢柬祠、校驗、數(shù)據(jù)庫維護
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-i :安裝
-v: verbose 顯示詳細信息
-vv: 顯示更多的信息
-h: 以#顯示程序包管理執(zhí)行進度
rpm -ivh PACKAGE_FILE ...
rpm -ivh dhcp-4.2.5-47.el7.centos.x86_64.rpm 安裝dhcp包
rpm -e dhcpd 卸載dhcpd包
- rpm包安裝:
[install-options]
--test: 測試安裝负芋,但不真正 執(zhí)行安裝漫蛔,即dry run 模式
--nodeps :忽略依賴關系
--replacepkgs 重新安裝整個包
eg:rpm -ivh /mnt/Packages/tree-1.6.0-10.e17.x86_64.rpm --replacepkgs
--replacefiles 重新安裝某個指定文件
--nosignature: 不檢查來源合法性
--nodigest :不檢查包完整性
--noscripts :不執(zhí)行程序包腳本
%pre: 嗜愈; 安裝前腳本; --nopre
%post: 莽龟; 安裝后腳本蠕嫁; --nopost
%preun: ; 卸載前腳本毯盈; --nopreun
%postun: 卸載后腳本剃毒; --nopostun
- rpm包升級:
升級:升級程序時會將原來的舊程序刪除,減少升級內核
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
U/upgrade :安裝有舊版程序包搂赋,則“升級”
如果不存在舊版程序包赘阀,則“安裝”
F/freshen :安裝有舊版程序包,則“升級”
如果不存在舊版程序包脑奠,則不執(zhí)行升級操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage :降級安裝基公,安裝比當前版本低的程序
--force: 強制安裝,不用于卸載
升級注意項:注意:
(1) 不要對內核做升級操作宋欺;Linux 支持多內核版本并存轰豆,因此,對直接安裝新版本內核齿诞;
(2) 如果原程序包的配置文件安裝后曾被修改酸休,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件掌挚,而把新版本的文件重命名(FILENAME.rpmnew) 后保留包查詢:
- 包查詢:
rpm {-q|--query} [select-options] [query-options]
-q:查詢安裝過的軟件包
[select-options]
-a:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile :針對尚未安裝的程序包文件做查詢操作
--whatprovides CAPABILITY :查詢指定的 CAPABILITY(能力)由哪個包所提供
--whatrequires CAPABILITY :查詢指定的 CAPABILITY被哪個包所依賴
--provides: 列出指定程序包所提供的CAPABILITY雨席,即查詢程序包所具有的功能
-R: 查詢指定的程序包所依賴的CAPABILITY,查詢包依賴的能力
[query-options]
--changelog :查詢rpm包的修改歷史記錄吠式,查詢的是數(shù)據(jù)庫/var/lib/rpm
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: 查詢詳細信息
-p:查詢或驗證包文件
-l: 查看指定的程序包安裝后生成的文件列表
--scripts :程序包自帶的腳本
rpm -q --scripts bahs 查看bash包的自帶的腳本
--provides: 列出指定程序包所提供的CAPABILITY陡厘,即查詢程序包所具有的功能
-R: 查詢指定的程序包所依賴的CAPABILITY,查詢包依賴的能力
常用查詢用法:
-qi PACKAGE 查詢包的描述信息 rpm -qi tree 查詢tree包的信息
-ql:查看指定程序包安裝后生成的文件列表 rpm -ql tree 查詢tree包安裝后的文件列表
-qf FILE 查詢文件屬于哪個安裝包 rpm -qf /usr/bin/rpm 查詢/usr/bin/rpm文件屬于哪個包
-qc PACKAGE rpm -qc bash 查詢bash程序的配置文件
-qd PACKAGE rpm -qd bash 查詢bash程序的目錄文件
-qpi PACKAGE_FILE rpm -qpi /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 查詢包文件的詳細信息
-qpl PACKAGE_FILE rpm -qpl /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 查詢未安裝包文件的文件列表
-qa:查詢安裝的所有程序包
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf”
- 包卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--nodeps 忽略依賴
--noscripts 卸載時不運行腳本
--notriggers 不允許觸發(fā)器
--allmatches 多個相同的包全部卸載 rpm -e --allmatches kernel 卸載同為kernel的多個包
--test 測試
- 包校驗:
rpm {-V|--verify} [select-options] [verify-options]
rpm -V tree 查詢tree程序包文件屬性是否發(fā)生變化
rpm -Va 查詢所有包屬性是否發(fā)生變化
S file Size differs 文件大小發(fā)生變化
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs MD5值變化特占,表示內容發(fā)生變化
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs mtime發(fā)生變化
P capabilities differ
包來源合法性驗正及完整性驗正
完整性驗證:SHA256
來源合法性驗正:RSA
公鑰加密
對稱加密:加密糙置、解密使用同一密鑰
非對稱加密:密鑰是成對兒的public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
導入所需要公鑰
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入所需秘鑰是目,/etc/pki/rpm-gpg目錄下有公鑰文件
CentOS 7 發(fā)行版光盤提供公鑰: RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*“ 查詢安裝秘鑰文件
rpm -qi gpg-pubkey-352c64e5-52ae6884 查看秘鑰的詳細信息
秘鑰卸載后谤饭,rpm -K 完整性為not OK, rpm --import 導入秘鑰后懊纳,rpm -K 完整性就為OK
yum
CentOS: yum, dnf
YUM: Yellowdog Update Modifier 揉抵,rpm 的前端程序,可解決軟件包相關依賴性嗤疯,可在多個庫之間定位軟件包冤今,up2date的替代工具yum repository: yum repo ,存儲了眾多rpm 包茂缚,以及包的相關的元數(shù)據(jù)文件(放置于特定目錄repodata 下)
文件服務器:
http://
https://
ftp://
file://
- yum配置文件
yum客戶端配置文件:
/etc/yum.conf :為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo :為倉庫的指向提供配置
/var/log/yum.log yum安裝日志文件
倉庫指向的定義:
[repositoryID] repo名稱
name=Some name for this repository 描述信息
baseurl=url://path/to/repository/ yum安裝源
enabled={1|0} 0表示臨時禁用該倉庫戏罢,1表示yum倉庫
gpgcheck={1|0} 0為不檢查秘鑰 1表示檢查秘鑰
gpgkey=URL 秘鑰導入屋谭,URL為秘鑰路徑,若已導入秘鑰可省略
enablegroups={1|0} 1 啟用包組 0禁用包組
failovermethod={roundrobin|priority} 安裝源為多個路徑時龟糕,選擇策略
roundrobin:意為隨機挑選桐磁,默認值
priority: 按順序訪問
cost= 默認為1000 設置優(yōu)先值,cost值越小讲岁,越優(yōu)先
server.repo倉庫文件中可編輯多個倉庫
- yum倉庫
yum的repo 配置文件中可用的變量:
$releasever: 當前OS的發(fā)行版的主版本號
$arch: 平臺我擂,i386,i486,i586,x86_64等 等
$basearch :基礎平臺;i386, x86_64
$YUM0-$YUM9: 自定義變量
實例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
yum源:repodate目錄的父目錄作為yum的安裝源
阿里云repo 文件:
http://mirrors.aliyun.com/repo/
CentOS 系統(tǒng)yum源
阿里云:
https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
教學環(huán)境:
http://172.16.0.1/cobbler/ks_mirror/$releasever/
Epel的yum 源:
阿里云:
https://mirrors.aliyun.com/epel/$releasever/x86_64
教學環(huán)境:
http://172.16.0.1/fedora-epel/$releasever/x86_64/
- yum-config-manager 命令生成yum庫文件
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo=http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “ 倉庫名" 禁用倉庫
yum-config-manager --enable “ 倉庫名” 啟用倉庫
- yum命令
yum 命令的用法:
yum [options] [command] [package ...]
顯示倉庫列表:
yum repolist [all|enabled|disabled]
yum repolist all 顯示所有repo倉庫催首,包括禁用的
顯示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1][...]
available 可用的包扶踊,沒有安裝的包
installed 已安裝的包
updates 有更新的包
安裝程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安裝)
yum reinstall tree lrzsz 重新安裝程序
升級程序包:
yum update 升級所有的包
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] ( 降級)
檢查可用升級:
yum check-update
卸載程序包:
yum remove | erase package1 [package2] [...]、
yum remove tree 卸載tree程序
查看程序包詳細信息: :
yum info [...]
yum info tree
查看指定的特性( 可以是某文件) 是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2][...]
yum provides tree 查看tree是由哪個包提供
yum whatprovides tree
清理本地緩存:
清除/var/cache/yum/$basearch/$releasever 緩存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
yum clean all 清除所有緩存數(shù)據(jù)
構建緩存:
yum makecache
搜索:yum search string1 [string2] [...]以指定的關鍵字搜索程序包名及summary 信息
yum search http 搜索http的程序包
查看指定包所依賴的capabilities:
yum deplist package1 [package2] [...]
查看yum事務歷史:
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history 列出yum安裝的歷史
yum history info 6 查看yum安裝歷史中序號為6的詳細信息
yum history undo 6 卸載yum安裝歷史中序號為6的安裝的所有程序
yum history redo 6 重新安裝序號為6的操作郎任,即重新安裝序號為6的程序
日志 :/var/log/yum.log
元數(shù)據(jù):/var/lib/yum
安裝及升級本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...] ( 用install 替代)
yum localupdate rpmfile1 [rpmfile2] [...] ( 用update 替代)
- 包組管理的相關命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
yum groups list 查看所有包組的名稱
yum groupinfo "Development Tools" 查看Development Tools軟件包的詳細信息
yum groupinstall "Development Tools" 安裝程序包組
yum groupremove "Development Tools" 卸載程序包組
- yum 的命令行選項:
--nogpgcheck :禁止進行gpg check,不檢查秘鑰
-y: 自動回答為“yes”
-q :靜默模式
--disablerepo=repoidglob :臨時禁用此處指定的repo
--enablerepo=repoidglob :臨時啟用此處指定的repo
--noplugins:禁用所有插件 - 系統(tǒng)光盤yum倉庫:
系統(tǒng)安裝光盤作為本地yum 倉庫:
1. 掛載光盤至某目錄备籽,例如/media/cdrom
# mount /dev/cdrom /mnt
2. 創(chuàng)建配置文件
(a) [CentOS7]
name=danran
baseurl=file:///mnt
gpgcheck=0
enabled=1
(b)使用版本變量$releasever替換
[ftp]
name=danrna
baseurl=ftp://192.168.198.134/pub/$releasever
enabled=0
創(chuàng)建yum 倉庫:
createrepo [options] <directory>
程序包編譯
程序包編譯安裝
Application-VERSION-release.src.rpm --> 安裝后舶治,使用rpmbuild 命令制作成二進制格式的rpm 包,而后再安裝
源代碼--> 預處理--> 編譯--> 匯編--> 鏈接--> 執(zhí)行
源代碼組織格式:多文件:文件中的代碼之間车猬,很可能存在跨文件依賴關系
C 霉猛、C++ :make項目管理器configure --> Makefile.in --> makefile
java: maven
- 編譯安裝:
C 語言源代碼編譯安裝三步驟:
1、 ./configure
a珠闰、 通過選項傳遞參數(shù)惜浅,指定啟用特性、安裝路徑等伏嗜;執(zhí)行時會參考用戶的指定以及makefile.in 文件生成makefile
b坛悉、 檢查依賴到的外部環(huán)境,如依賴的軟件包
2承绸、 make 根據(jù)makefile 文件裸影,構建應用程序
3、make install 復制文件到相應路徑
開發(fā)工具:
autoconf: 生成configure 腳本
automake :生成Makefile.in
注意:安裝前查看INSTALL 军熏,README
開源程序源代碼的獲刃伞:
官方自建站點:
apache.org (ASF :Apache Software Foundation)
mariadb.org
...
代碼托管:
SourceForge.net
Github.com
code.google.com
- c/c++ 編譯器: gcc (GNU C Complier)
編譯C 源代碼:
準備:提供開發(fā)工具及開發(fā)環(huán)境
開發(fā)工具:make, gcc等
開發(fā)環(huán)境:開發(fā)庫,頭文件glibc :標準庫
實現(xiàn):通過“包組”提供開發(fā)組件
Development Tools
Server Platform Development
第一步:configure 腳本
選項:指定安裝位置荡澎、指定啟用的特性
--help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH: 指定默認安裝位置, 默認為/usr/local/
--sysconfdir=/PATH :配置文件安裝位置
System types:
Optional Features: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包
--with-PACKAGE[=ARG], 依賴包
--without-PACKAGE, 禁用依賴關系
第二步:make
第三步:make install
安裝后的配置:
1均践、二進制程序目錄導入至PATH 環(huán)境變量中
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2、導入庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中
讓系統(tǒng)重新生成緩存:
ldconfig [-v]
3摩幔、導入頭文件
基于鏈接的方式實現(xiàn):
ln -sv
4彤委、導入幫助手冊
編輯/etc/man.config|man_db.conf 文件
添加一個MANPATH