1. 程式人生 > >+++++++rpm/yum/編譯

+++++++rpm/yum/編譯

linux

程序包管理總結

編譯總結


程序包管理總結

rpm (Redhat Package Manager)早期由redhat用perl語言研發,後來用C重寫 (RPM is Package Manager)。前端管理工具是yum,centos 7後支持dnf(EPEL源)

Fedora 22之後,支持dnf工具的使用

Debian系用.deb包,dpt-get前端管理工具

Slackware的二次發行版: 前端管理工具: Zypper,YasT


程序包命名

二進制格式: testapp-1.2.3-1.操作系統平臺.cpu平臺.rpm

源碼格式: testapp-1.2.3-1.操作系統平臺.src.rpm

源碼: testapp-1.2.3.tar.壓縮格式(gzip,bzip2,xz,zip)


拆包: 功能拆分,節約磁盤空間。

操作系統平臺: centos: el6,el7

cpu平臺:

i386,i486,i586,i686 : x86

x86_64,x64,amd64

noarch:java,python,c兼容ELF格式代碼

拆包後,依賴關系:先安裝主包後支包


lddconfig -p 查看裝載進內存中的共享庫,所有程序所依賴所依賴的庫

ldd filepath 查看當前給定程序所依賴的庫

配置文件:/etc/ld.so.conf 或 /etc/ld.so.conf.d/*.conf

定義庫與內存映射


ldconfig [-v] 更新內存中的庫映射列表


程序包: 二進制程序、庫、配置文件、幫助手冊

元數據:名稱、版本、依賴關系、功能說明、安裝生成的文件列表和校驗碼


項目管理工具: rpm,yum,dnf

安裝、升級、卸載、查詢程序包


獲取程序包或源碼途徑

程序包途徑:光盤發行商、第三方、自制作、官方站點

http://mirror.tuna.tsinghua.edu.cn

http://mirrors.hust.edu.cn/

mirrors.aliyun.com

mirrors.sohu.com

mirrors.163.com

http://pkgs.org

http://rpmfind.net 查找rpm包

http://rpm.pbone.net

源碼途徑: 托管站點、官方站點

SourceForge

Github.com

code.google.com


rpm,yum命令的使用


yum解決rpm依賴

yum C/S架構

dnf解決yum中斷追蹤


內核只安裝不升級

配置改變,卸載時: .rpmsave,安裝時: .rpmnew

多個rpm/yum/dnf不能同時使用。


事務類操作:

1、原子性: 原子的

2、隔離性:事物間相互隔離

3、持久性: 修改後不能改變


加密類型

單身、對稱、非對稱


算法:

單身:md5、sha1、sha128、sha224、sha256、sha384、sha512、GPG

非對稱: des

對稱: RSA、DSS、GPG


便於記憶:

1、分類

2、語法


忽略

rpm:

安裝時:忽略完整性、忽略合法性、導入忽略完整和合法性、忽略沖突

安裝、卸載:忽略觸發、忽略依賴、忽略腳本執行


yum:

安裝:忽略完整和合法性、忽略交互、僅下載不安裝、忽略插件


安裝時對程序包分析依賴的CAPABILITY和沖突,及內部元數據,安裝時執行觸發器,安裝後執行腳本,由人為的控制每一個步驟是否可路過


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

不檢測相關

rpm --nodigest package .. 不檢查完整性

rpm --nosignature package ... 不檢查來源合法性

rpm --import GPG_FILE 導入後不檢查完整性和來源合法性


yum --nosignature package ... 不檢查完整性和來源合法性


觸發器相關

--notriggers rpm命令中,安裝、卸載

查詢: rpm -q --triggers


依賴相關

rpm

--test 沖突或依賴檢測(安裝、卸載)

--R package ... 需要的依賴 **(從元數據中抽取出)

--provide package ... 提供的依賴

--nodeps 忽略依賴(事務)

--replacefiles 忽略沖突(事務)


--whatprovide CAPABILITY 文件或功能由哪個包提供

-q -f filepath 文件由哪個包提供 **

--whatrequire CAPABILITY 文件或功能被哪個包所依賴


yum

--deplist package 需要的依賴 **(從元數據中抽取出)

--whatprovides CAPABILITY 文件或功能由哪個包提供 **


重新安裝相關

rpm -ivh --replacepkgs package_file

yum reinstall package_file


降級相關

rpm -[UF]vh --downpackage package_file

yum downgrade package_file


包內信息查詢相關

rpm -q { -i | --changelog | --scripts | --triggers | -L | --conflicts } package

yum info package


包內文件列表相關

rpm -q { -l | -c | -d } 。需要給合grep,fgrep,egrep和bash特性管道完成搜索匹配機制

yum list [ all | enabled | available ] [package|glob_expr] ... 支持搜索匹配機制

yum search glob_expr .... 支持搜索匹配機制


腳本相關(安裝、卸載、查詢)

--scripts 所有腳本

--pre 程序包安裝前腳本

--post 程序包安裝後腳本

--preun 程序包卸載前腳本

--postun 程序包卸載後腳本


數據庫相關

rpm --initdb | --rebuildb


緩存相關

yum clean [headers|packages|metadata|dbcache|plugins|expire-cache|all]

yum makecache


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


rpm

通用選項: -v verbose , -h 以#顯示安裝進度


查詢

默認查詢已安裝程序包,-p查詢未安裝程序包

1、rpm -q [select_option] ##查詢程序包

-a 所有程序包
-f filepath 某文件對應的程序包
--whatprovides CAPABILITY 此文件或功能(CAPABILITY)由哪個包所提供
--whatrequires CAPABILITY 哪個包依賴此文件或功能(CAPABILITY)

-g GROUP  查詢組內提供的程序包

2、rpm -q [select_option] [query_option] PACKAGE_FILE ... ##程序包內文件列表、內容或包的依賴

-l 程序包內的列表
-d        doc列表
-c     config列表 
-i 程序包內的信息
-L Lisence
--changelog 程序包的changlog
-R 程序包依賴什麽
--provides 程序包提供的依賴

--conflicts 程序包與哪些包沖突

--scripts   程序包提供的腳本
--triggers  程序包提供的觸發器


安裝 rpm -ivh [OPTIONS...] PACKAGE_FILE ...

--test     測試安裝,查看依賴
--nodeps   忽略依賴

--nodigest     忽略完整性
--nosignature  忽略來源合法性

--ignoreos       忽略平臺
--replacepkgs    重新安裝
--force          強行安裝 

--noscripts    不執行腳本
--nopre
--nopost
--nopreun
--nopostun

--notriggers     不執行觸發器


升級 rpm -Uvh [OPTIONS...] PACKAGE_FILE ... 安裝或升級

升級 rpm -Fvh [OPTIONS...] PACKAGE_FILE ... 只升級

--oldpackage 降級
--force      強行升級或降級


卸載 rpm -e [ --nodeps | --noscripts | --notriggers | --test ] PACKAGE_FILE ...


校驗 rpm -V [selection-option] [verify-options] [PACKAGE_FILE...]

rpm --import RPM-GPG-KEY-CentOS-7 (安裝對應倉庫中的程序包無需校驗)

安裝後的文件列表與程序包中的文件列表存儲的校驗碼對比

S:size 
5: md5
T: Modify time
D: device:major.minor
L: link
U: user
G: Group

c: configure file
d: doc file


數據庫維護 rpm { --initdb | --rebuildb }

--initdb:    只要存在數據庫,無論是否完整,不初始化。數據庫不存在時,才初始化。
--rebuildb:  無論數據庫何種狀態,都要進行重建數據庫


yum


Yellow Dog 研發,redhat二次發行版使用:YUM(Yellowdog Update MOdifier)


原理:主機有緩存,請求元數據校驗碼.比對,完整用本地緩存.不完整,進行一次新的請求

請求元數據,下載至緩存,分析元數據,找出依賴未安裝的程序包列表.

請求程序包,下載至緩存,安裝.

刪除程序包,保留元數據.


變量: 便於用於配置倉庫

事務: yum命令執行發行修改的操作(安裝/升級/卸載)

鏡像: 同類倉庫有多個.Aliyun鏡像,SOHU鏡像.163鏡像

配置文件: yum配置:所有倉庫共有的配置, 倉庫配置:每個倉庫獨有的配置,範圍越小,越是最終生效

元數據存儲方式:壓縮存儲,sqllite接口存儲


yum [OPTONS...] [SUB_CMD] PACKAGE_FILE ...


OPTIONS

-q    靜默
-y    不交互,自動回答為yes
--assumeno     不交互,自動回答為NO

--nogpgcheck   來源合法性和完整性 . rpm分開使用: --nodigest,--nosignature

--nodisablerepo=REPO  支持glob,本次安裝禁止哪些倉庫
--noenablerepo=REPO   支持glob,本次安裝啟用哪些倉庫

--noplugins           本次安裝不使用插件

--loaddownonly        本次安裝或升級只下載程序包
--loaddowndir=DIR     下載的位置


獲取幫助 yum help SUB_CMD


SUB_CMD


查詢list

1、查詢倉庫信息

repolist [all|enabled|disabled] ## 默認為enabled

repoid reponame status


2、查詢結果為程序包

顯示程序包

list [all|available|installed|extras|obsoletes|recent] [glob_expr1] ... ##glob與文本字符的組合

包名.cpu平臺 1.2.3-1.操作系統平臺 repoid

>>> obsoletes 廢棄 >>

rpm -q -a | fgrep 實現


搜索程序包

search string1 [string2] [...] ##glob與文本字符的組合成string

包名 與 簡要描述信息

rpm -q -a | grep 實現


哪個程序包提供CAPABILITY(文件或功能)

whatprovides filepath

# rpm -q -f  
# rpm -q --whatprovides


3、查詢包內信息

依賴關系

deplist package1 [package2] [...]

# rpm -q -R package1 ...
# rpm --test

# rpm -q --provides package1 ...

包的信息

info package ...

# rpm -q -i package ...


安裝 install , localinstall

install package ...

localinstall rpmfile .... (centos5)

# rpm -ivh


卸載 remove

remove package ...


升級 update check-update

update [package ...]

check-update


緩存

clean

makecache


組命令

grouplist [list|info|summary|install|upgrade|remove|mark] [GROUP]



createrepo命令

創建: createrepo --update DIR ## 自動在DIR所有子目錄中搜尋rpm,元數據放在DIR一級子目錄中。



編譯

autoconf 生成configure腳本

automake生成Makefile.in模板


configure腳本結合Makefile.in模板生成Makefile配置文件


make結合Makefile編譯 (c/c+所寫的程序)

make install 調用install命令完成復制文件(cp、install、dd)


C/C++代碼編譯步驟

1、提供開發環境

方法一: 
CentOS 6 yum groupinstall "Development Tools" "Server Platform Development"
CentOS 7 yum groupinstall "Development Tools"
方法二: 
yum install autoconf automake make gcc glibc

2、展開源代碼、查看INSTALL文件

1)只需要make

2)只需要make install

3)直接可用


3、./configure

生成Makefile


4、make

結合Makefile完成編譯


5、make install

調用install命令完成復制文件(cp、install、dd)


安裝後步驟:


1、導出二進制程序至PATH環境變量

環境變量: profile類

全局: /etc/profile 、 /etc/profile.d/*.sh

個人: ~/.bash_profile


2、導出庫文件路徑

查看庫: ldconfig -p

配置庫: /etc/ld.so.conf 、 /etc/ld.so.conf.d/*.conf

重新生成緩存: ldconfig [-v]


3、導出頭文件

ln -sv /path/to/include /usr/include/NAME


4、導出幫助手冊

1、不導出時:

man -M /PATH/TO/man COMMAND


2、導出時:

/etc/man.config

MANPATH /PATH/TO/man


本文出自 “Reading” 博客,請務必保留此出處http://sonlich.blog.51cto.com/12825953/1957212

+++++++rpm/yum/編譯