天天看點

軟體包管理

                                             軟體包管理

-----------------------------------------------------------------------------------------------------------------------------------------------

rpm篇

ABI:Application Binary Interface

Windows與Linux不相容

ELF(Executable and Linkable Format)

PE(Portable Executable)

庫級别的虛拟化:

Linux: WINE

Windows: Cygwin

API:Application Programming Interface

POSIX:Portable OS

程式源代碼--> 預處理--> 編譯--> 彙編--> 連結

靜态編譯:.a

動态編譯:.so

靜态和動态連結

連結主要作用是把各個子產品之間互相引用的部分處理好,使得各個子產品之間能夠正确地銜接,分為靜态連結和動态連結

靜态連結

把程式對應的依賴庫複制一份到包

libxxx.a

嵌入程式包

更新難,需重新編譯

占用較多空間,遷移容易

動态連結

隻把依賴加做一個動态連結

libxxx.so

連接配接指向

占用較少空間,更新友善

開發語言

系統級開發:C、C++

應用級開發:java、Python、go、php、perl、delphi、ruby

包管理器

二進制應用程式的組成部分:

二進制檔案、庫檔案、配置檔案、幫助檔案

程式包管理器:

debian:deb檔案, dpkg包管理器

redhat:rpm檔案, rpm包管理器

rpm:RedhatPackage Manager

RPM Package Manager

包命名

源代碼: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

release:release.OS

常見的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

powerpc: ppc

跟平台無關:noarch

包命名和工具

包:分類和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm開發子包

Application-utils-VERSION-ARHC.rpm其它子包

Application-libs-VERSION-ARHC.rpm其它子包

包之間:可能存在依賴關系,甚至循環依賴

解決依賴包管理工具:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具

庫檔案

檢視二進制程式所依賴的庫檔案

ldd/PATH/TO/BINARY_FILE

管理及檢視本機裝載的庫檔案

ldconfig加載庫檔案

/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫檔案名及檔案路徑映射關系

配置檔案:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

緩存檔案:/etc/ld.so.cache

功能:将編譯好的應用程式的各組成檔案打包一個或幾個程式封包件,進而友善快捷地實作程式包的安裝、解除安裝、查詢、更新和校驗等管理操作

封包件組成(每個包獨有)

RPM包内的檔案

RPM的中繼資料,如名稱,版本,依賴性,描述等

安裝或解除安裝時運作的腳本

資料庫(公共):/var/lib/rpm(需要備份)

程式包名稱及版本

依賴關系

功能說明

包安裝後生成的各檔案路徑及校驗碼資訊

程式包的來源

管理程式包的方式:

使用包管理器:rpm

使用前端工具:yum, dnf

擷取程式包的途徑:

(1) 系統發版的CD光牒或官方的伺服器

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系統上使用rpm指令管理程式包:

安裝、解除安裝、更新、查詢、校驗、資料庫維護

安裝:

rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose顯示進度

-vv:顯示更詳細的資訊

-h: 以#顯示程式包管理執行進度

rpm -ivhPACKAGE_FILE …

安裝CD光牒位置:

[install-options]

--test: 測試安裝,但不真正執行安裝,即dry run模式

--nodeps:忽略依賴關系

--replacepkgs:替換以前的檔案,強制安裝| replacefiles:安裝時覆寫一樣的檔案

--nosignature: 不檢查來源合法性

--nodigest:不檢查包完整性

--noscripts:不執行程式包腳本

%pre: 安裝前腳本--nopre

%post: 安裝後腳本--nopost

%preun: 解除安裝前腳本--nopreun

%postun: 解除安裝後腳本--nopostun

解除安裝包不用寫路徑,rpm -e memcached

rpm--import rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入公鑰,用來檢查包的完整性和來源

rpm -i 安裝後新版本舊版本都在,

rpm -U 安裝有舊版程式包,則“更新”,如果不存在舊版程式包,則“安裝”

rpm -F 安裝有舊版程式包,則“更新”,如果不存在舊版程式包,則不執行更新操作

rpm -UvhPACKAGE_FILE ...

rpm -FvhPACKAGE_FILE ...

--oldpackage:降級

--force: 強制安裝

rpm2cpio 安裝包 | cpio -t 預覽包内檔案

rpm -qpl 查詢安裝包裡的檔案

rpm -qi 查詢已安裝包的詳細資訊

rpm -q --script cmd 檢視指令的腳本

包查詢

rpm {-q|--query} [select-options] [query-options]

[select-options]

-a: 所有包

-f: 檢視指定的檔案由哪個程式包安裝生成

-p rpmfile:針對尚未安裝的程式封包件做查詢操作

--whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供

--whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

rpm -q  軟體名:  詢問系統是不是安裝了該軟體包,比如說rpm -q httpd

rpm -qa       :  查詢已安裝的所有軟體包,查找某個軟體包用rpm -qa | grep 軟體名提取

rpm -qc 軟體名:  查詢已安裝軟體的配置檔案

rpm -qd 軟體名:  查詢已安裝軟體的文檔安裝位置

rpm -qf 檔案名:  查詢已安裝的檔案屬于哪個軟體包,比如說rpm -qf /usr/lib/libacl.la

rpm -qi 軟體包名:查詢一個已經安裝軟體包的資訊

rpm -ql 軟體包名:查詢已安裝的軟體包安裝到哪個目錄

rpm -qp 軟體包名:查詢目前目錄下rpm包相關資訊,配合rpm -qpi、rpm -qpR等需要轉到有軟體包的目錄下

rpm -qR 軟體名:  查詢已安裝軟體所依賴的軟體包及檔案

rpm2cpio 封包件|cpio–itv預覽包内檔案

rpm2cpio 封包件|cpio–id “*.conf”釋放包内檔案

--changelog:查詢rpm包的changelog

-qc: 查詢程式的配置檔案

-qd: 查詢程式的文檔

-qi: information

-ql: 檢視指定的程式包安裝後生成的所有檔案

-q --scripts:程式包自帶的腳本

-q --provides: 列出指定程式包所提供的CAPABILITY

-qR: 查詢指定的程式包所依賴的CAPABILITY

常用查詢用法:

-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE

-qpiPACKAGE_FILE, -qplPACKAGE_FILE, ...

-qa\

包解除安裝:

rpm {-e|--erase}

[--allmatches] 所有比對

[--nodeps]不理會包依賴直接解除安裝

[--noscripts] 沒有腳本

[--notriggers]不用觸發器

 [--test] PACKAGE_NAME測試

rpm -a -ql -qf -qi -qp

包校驗

rpm -V檢測包完整性

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

提示語中:

S 檔案大小不同

M 檔案類型不同(包括權限和未見類型)

5 哈希值不同

D Device major/minor number mismatch

L readLink(2) path mismatch

U 所有者發生變化

G Group ownership differs

T 檔案修改時間不同

P capabilities differ

rpm資料庫

資料庫重建:

/var/lib/rpm,此檔案夾保護好

rpm {--initdb|--rebuilddb}

initdb: 初始化

如果事先不存在資料庫,則建立之

否則,不執行任何操作

rebuilddb:重建已安裝的標頭的資料庫索引目錄

yum篇

CentOS: yum, dnf

YUM: YellowdogUpdate Modifier,rpm的前端程式,可解決軟體包相關依賴性,可在多個庫之間定位軟體包,up2date的替代工具,底層依賴于rpm

yum repository: yum repo,存儲了衆多rpm包,以及包的相關的中繼資料檔案(放置于特定目錄repodata下)

檔案伺服器:

http://

https://

ftp://

file://

yum基于python 2.7,不要亂裝python,以免無法使用yum

yum配置檔案/etc/yum.conf,配置檔案中:

keepcache=1,保留緩存,安裝後保留安裝包,友善多台機器安裝某個安裝包;

gpgcheck=0,不導入公鑰就設為0,不檢查安裝包相關,設為1就需要導入公鑰。

repodata在哪,哪就可以當作用來配置yum倉庫的位置

寫倉庫位置:/etc/yum.repos.d/任意字元.repo

作為遠端伺服器時連結CD光牒挂載點 :/var/www/html/CentOS

檔案内格式:

[自己起名]:

name=test(自己起)

baseurl=file:///misc/cd (CD光牒路徑),路徑包括http://、https://、ftp://、file://

gpgcheck=0 或者

gpgkey=公鑰位置

enabled=0 禁用

yum info 查詢安裝包資訊

yum list 查詢yum倉庫資訊

systemctl start …service 啟動服務指令,CentOS7才有

yum的repo配置檔案中可用的變量:

$releasever: 目前OS的發行版的主版本号

$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 remove 無依賴性解除安裝

yum histrory 記錄安裝資訊

yum history redo 9重做yumyum曆史第九步操作

yum history undo 9 撤銷yum曆史第九步操作

yum clean all清除yum倉庫緩存,倉庫變化後需要清楚緩存

yum裝包組大小寫不敏感,裝包大小寫敏感

yum install 安裝包 -q 靜默安裝

yum info 安裝包資訊

yum groupinfo 安裝包組資訊:

不帶符合表示包已經安裝,不帶包組獨自安裝;

=随着包組一起裝好

+表示沒有安裝,更新時會自動安裝

-表示沒有安裝,包組安裝時也不會自動安裝

yum search

yum history undo

yum repolist 檢查yum的倉庫

yum-untils工具可以查詢一個沒有安裝的包裡的檔案,requery -ql指令,基于yum倉庫

createrepo 目錄:自制yum源

yum groupinstall "development tools"

生成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 [options] [command] [package ...]

顯示倉庫清單:

yum repolist[all|enabled|disabled]

顯示程式包:

yum list

yum list [all | glob_exp1] [glob_exp2] [...]

yum list {available|installed|updates} [glob_exp1] [...]

安裝程式包:

yum install package1 [package2] [...]

yum reinstall package1 [package2] [...] (重新安裝)

更新程式包:

yum update [package1] [package2] [...]

yum downgrade package1 [package2] [...] (降級)

檢查可用更新:

yum check-update

解除安裝程式包:

yum remove | erase package1 [package2] [...]

yum provides 檢視指定的特性由哪個程式包提供

yum deplist 檢視包的依賴性

yum的指令行選項:

--nogpgcheck:禁止進行gpgcheck

-y: 自動回答為“yes”

-q:靜默模式

--disablerepo=repoidglob:臨時禁用此處指定的repo

--enablerepo=repoidglob:臨時啟用此處指定的repo

--noplugins:禁用所有插件

系統安裝CD光牒作為本地yum倉庫:

(1) 挂載CD光牒至某目錄,例如/mnt/cdrom

     mount /dev/cdrom/mnt/cdrom

(2) 建立配置檔案

     [CentOS7]

     name=

     baseurl=

     gpgcheck=

     enabled=

建立yum倉庫:createrepo[options] <directory>