天天看點

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

程式包管理總結

編譯總結

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>&gt;&gt;&gt; obsoletes 廢棄 &gt;&gt;</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,如需轉載請自行聯系原作者