程式包管理總結
編譯總結
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
安裝、更新、解除安裝、查詢程式包
擷取程式包或源碼途徑
程式包途徑:CD光牒發行商、第三方、自制作、官方站點
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
1
<code>通用選項: -</code><code>v</code> <code>verbose , -h 以</code><code>#顯示安裝進度</code>
查詢
預設查詢已安裝程式包,-p查詢未安裝程式包
1、rpm -q [select_option] ##查詢程式包
2
3
4
5
6
<code>-a 所有程式包</code>
<code>-f filepath 某檔案對應的程式包</code>
<code>--whatprovides CAPABILITY 此檔案或功能(CAPABILITY)由哪個包所提供</code>
<code>--whatrequires CAPABILITY 哪個包依賴此檔案或功能(CAPABILITY)</code>
<code>-g GROUP 查詢組内提供的程式包</code>
2、rpm -q [select_option] [query_option] PACKAGE_FILE ... ##程式包内檔案清單、内容或包的依賴
7
8
9
10
11
12
13
<code>-l 程式包内的清單</code>
<code>-d doc清單</code>
<code>-c config清單 </code>
<code>-i 程式包内的資訊</code>
<code>-L Lisence</code>
<code>--changelog 程式包的changlog</code>
<code>-R 程式包依賴什麼</code>
<code>--provides 程式包提供的依賴</code>
<code>--conflicts 程式包與哪些包沖突</code>
<code>--scripts 程式包提供的腳本</code>
<code>--triggers 程式包提供的觸發器</code>
安裝 rpm -ivh [OPTIONS...] PACKAGE_FILE ...
14
15
16
17
<code>--test 測試安裝,檢視依賴</code>
<code>--nodeps 忽略依賴</code>
<code>--nodigest 忽略完整性</code>
<code>--nosignature 忽略來源合法性</code>
<code>--ignoreos 忽略平台</code>
<code>--replacepkgs 重新安裝</code>
<code>--force 強行安裝 </code>
<code>--noscripts 不執行腳本</code>
<code>--nopre</code>
<code>--nopost</code>
<code>--nopreun</code>
<code>--nopostun</code>
<code>--notriggers 不執行觸發器</code>
<b></b>
<b>更新 rpm -Uvh [OPTIONS...] PACKAGE_FILE ... 安裝或更新</b>
<b>更新 rpm -Fvh [OPTIONS...] PACKAGE_FILE ... 隻更新</b>
<code>--oldpackage 降級</code>
<code>--force 強行更新或降級</code>
<b>解除安裝 rpm -e [ --nodeps | --noscripts | --notriggers | --test ] PACKAGE_FILE ...</b>
<b>校驗 rpm -V [selection-option] [verify-options] [PACKAGE_FILE...]</b>
<b> rpm --import RPM-GPG-KEY-CentOS-7 (安裝對應倉庫中的程式包無需校驗)</b>
<b> 安裝後的檔案清單與程式包中的檔案清單存儲的校驗碼對比</b><b></b>
<code>S:size </code>
<code>5: md5</code>
<code>T: Modify </code><code>time</code>
<code>D: device:major.minor</code>
<code>L: link</code>
<code>U: user</code>
<code>G: Group</code>
<code>c: configure </code><code>file</code>
<code>d: doc </code><code>file</code>
資料庫維護 rpm { --initdb | --rebuildb }
<code>--initdb: 隻要存在資料庫,無論是否完整,不初始化。資料庫不存在時,才初始化。</code>
<code>--rebuildb: 無論資料庫何種狀态,都要進行重建資料庫</code>
Yellow Dog 研發,redhat二次發行版使用:YUM(Yellowdog Update MOdifier)
原理:主機有緩存,請求中繼資料校驗碼.比對,完整用本地緩存.不完整,進行一次新的請求
請求中繼資料,下載下傳至緩存,分析中繼資料,找出依賴未安裝的程式包清單.
請求程式包,下載下傳至緩存,安裝.
删除程式包,保留中繼資料.
變量: 便于用于配置倉庫
事務: yum指令執行發行修改的操作(安裝/更新/解除安裝)
鏡像: 同類倉庫有多個.Aliyun鏡像,SOHU鏡像.163鏡像
配置檔案: yum配置:所有倉庫共有的配置, 倉庫配置:每個倉庫獨有的配置,範圍越小,越是最終生效
中繼資料存儲方式:壓縮存儲,sqllite接口存儲
yum [OPTONS...] [SUB_CMD] PACKAGE_FILE ...
OPTIONS
<code>-q 靜默</code>
<code>-y 不互動,自動回答為</code><code>yes</code>
<code>--assumeno 不互動,自動回答為NO</code>
<code>--nogpgcheck 來源合法性和完整性 . rpm分開使用: --nodigest,--nosignature</code>
<code>--nodisablerepo=REPO 支援glob,本次安裝禁止哪些倉庫</code>
<code>--noenablerepo=REPO 支援glob,本次安裝啟用哪些倉庫</code>
<code>--noplugins 本次安裝不使用插件</code>
<code>--loaddownonly 本次安裝或更新隻下載下傳程式包</code>
<code>--loaddowndir=DIR 下載下傳的位置</code>
擷取幫助 yum help SUB_CMD
SUB_CMD
查詢list
1、查詢倉庫資訊
repolist [all|enabled|disabled] ## 預設為enabled
<code>repoid reponame status</code>
2、查詢結果為程式包
顯示程式包
list [all|available|installed|extras|obsoletes|recent] [glob_expr1] ... ##glob與文本字元的組合
<code>包名.cpu平台 1.2.3-1.作業系統平台 repoid</code>
<code>>>> obsoletes 廢棄 >></code>
<code>rpm -q -a | </code><code>fgrep</code> <code>實作</code>
搜尋程式包
search string1 [string2] [...] ##glob與文本字元的組合成string
<code>包名 與 簡要描述資訊</code>
<code>rpm -q -a | </code><code>grep</code> <code>實作</code>
<b>哪個程式包提供CAPABILITY(檔案或功能)</b>
whatprovides filepath
<code># rpm -q -f </code>
<code># rpm -q --whatprovides</code>
3、查詢包内資訊
依賴關系
deplist package1 [package2] [...]
<code># rpm -q -R package1 ...</code>
<code># rpm --test</code>
<code># rpm -q --provides package1 ...</code>
包的資訊
info package ...
<code># rpm -q -i package ...</code>
安裝 install , localinstall
install package ...
localinstall rpmfile .... (centos5)
<code># rpm -ivh</code>
解除安裝 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、提供開發環境
<code>方法一: </code>
<code>CentOS </code><code>6</code> <code>yum groupinstall </code><code>"Development Tools"</code> <code>"Server Platform Development"</code>
<code>CentOS </code><code>7</code> <code>yum groupinstall </code><code>"Development Tools"</code>
<code>方法二: </code>
<code>yum install autoconf automake make gcc glibc</code>
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
本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1957212,如需轉載請自行聯系原作者