Linux程式包管理及yum安裝管理
Linux程式包管理:
API:ApplicationProgramming Interface 應用程式設計介面
POSIX:Portable OS 遵循本協議的程式均可在不同系統間移植
程式編寫完成後,執行所要經過的處理步驟:
程式原始碼 --> 預處理 --> 編譯 --> 彙編 --> 連結
靜態編譯:
共享編譯:直接呼叫.so共享物件實現
ABI:ApplicationBinary Interface 應用二進位制介面
Windows與Linux所支援的可執行二進位制檔案格式不同,不相容
庫級別的虛擬化:(可以通過安裝虛擬共享庫執行)
Linux:WINE
Windows:Cywin
系統級開發
C
C++
應用級開發
java
Python
php
perl
ruby
二進位制應用程式的組成部分:
二進位制檔案、庫檔案、配置檔案、幫助檔案
程式包管理器:
debian:deb, dpt
redhat:rpm, rpm
rpm:Redhat Package Manager
RPMis Package Manager
Gentoo
Archlinux
原始碼:name-VERSION.tar.gz
VERSION:major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
VERSION:major.minor.release 主版本號.次版本號.release號
release.arch:
release:release.OS
如:zlib-1.2.7-13.el7.i686.rpm
常見的arch:
x86:i386, i486, i586, i686
x86_64:x64, x86_64, amd64
powerpc:ppc
跟平臺無關:noarch
testapp:拆包(遇到某些包的程式不符合實際應用時,就需要拆包)
testapp-VERSION-ARCH.rpm:主包
testapp-devel-VERSION-ARCH.rpm:支包
testapp-testing-VERSION-ARHC.rpm
包之間:存在依賴關係
X,Y, Z
yum:rpm包管理器的前端工具,用於解決程式包依賴關係並自動安裝;
apt-get:deb包管理器前端工具;
zypper:suse上的rpm前端管理工具;
dnf:Fedora 22+ rpm包管理器前端管理工具;
檢視二進位制程式所依賴的庫檔案:
ldd/PATH/TO/BINARY_FILE
管理及檢視本機裝載的庫檔案:
ldconfig
/sbin/ldconfig-p:顯示本機已經快取的所有可用庫檔名及檔案路徑對映關係;
配置檔案為:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
快取檔案:/etc/ld.so.cache
程式包管理:
功能:將編譯好的應用程式的各組成檔案打包一個或幾個程式包檔案,從而方便快捷地實現程序包
的安裝、解除安裝、查詢、升級和校驗等管理操作;
1、程式的組成組成清單 (每個包獨有)
檔案清單
安裝或解除安裝時執行的指令碼
2、資料庫(公共)
程式包名稱及版本
依賴關係;
功能說明;
安裝生成的各檔案的檔案路徑及校驗碼資訊;
管理程式包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
獲取程式包的途徑:
(1)系統發版的光碟或官方的伺服器;
CentOS映象:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)專案官方站點
(3)第三方組織:
Fedora-EPEL
搜尋引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4)自己製作
建議:檢查其合法性
來源合法性;
程式包的完整性;
CentOS系統上rpm命令管理程式包:
安裝、解除安裝、升級、查詢、校驗、資料庫維護
安裝:
rpm{-i|--install} [install-options] PACKAGE_FILE ...
-v:verbose 顯示詳細資訊
-vv:顯示更多除錯資訊
-h:以#顯示程式包管理執行進度;每個#表示2%的進度
rpm-ivh PACKAGE_FILE ...
[install-options]
--test:測試安裝,但不真正執行安裝過程;dry run模式;
--nodeps:忽略依賴關係;
--replacepkgs: 重新安裝;
--nosignature:不檢查來源合法性;
--nodigest:不檢查包完整性;
--noscipts:不執行程式包指令碼片斷;(指令碼分為四類)
%pre:安裝前指令碼; --nopre
%post:安裝後腳本; --nopost
%preun:解除安裝前指令碼; --nopreun
%postun:解除安裝後腳本; --nopostun
此升級應注意如果原zsh包已修改過配置檔案,則可能被覆蓋或者新安裝的配置檔案可能不會生效
升級:
rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm{-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage:安裝有舊版程式包,則“升級”;如果不存在舊版程式包,則“安裝”;
freeshen:安裝有舊版程式包,則“升級”;如果不存在舊版程式包,則不執行升級操作;
rpm-Uvh PACKAGE_FILE ...
rpm-Fvh PACKAGE_FILE ...
--oldpackage:降級;
--force:強行升級;
注意:(1) 不要對核心做升級操作;Linux支援多核心版本並存,因此對新版本核心直接安裝
(2) 如果原程式包的配置檔案安裝後曾被修改,升級時,新版本的提供的同一個配置檔案並
不會直接覆蓋老版本的配置檔案,而把新版本的檔案重新命名(FILENAME.rpmnew)後保留
查詢:
rpm{-q|--query} [select-options] [query-options]
[select-options] 挑選選項
-a:所有包
-f:檢視指定的檔案由哪個程式包安裝生成
-p/PATH/TO/PACKAGE_FILE:針對尚未安裝的程式包檔案做查詢操作;
--whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
--whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
[query-options] 查詢選項
--changelog:查詢rpm包的changlog
-c:查詢程式的配置檔案
-d:查詢程式的文件
-i:information 顯示包的資訊(名稱、版本等)
-l:檢視指定的程式包安裝後生成的所有檔案;
--scripts:程式包自帶的指令碼片斷
-R:查詢指定的程式包所依賴的CAPABILITY;
--provides:列出指定程式包所提供的CAPABILITY;
用法(常用):
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa
解除安裝:
rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校驗:
rpm {-V|--verify} [select-options][verify-options]
S file Size differs
M Mode differs (includes permissions andfile type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
PcaPabilities differ
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
公鑰加密:
對稱加密:加密、解密使用同一金鑰;
非對稱加密:金鑰是成對兒的,
publickey: 公鑰,公開所有人
secretkey: 私鑰, 不能公開
匯入所需要公鑰:
rpm--import /PATH/FROM/GPG-PUBKEY-FILE
CentOS7發行版光碟提供的金鑰檔案:RPM-GPG-KEY-CentOS-7
資料庫重建:
rpm{--initdb|--rebuilddb}
initdb:初始化
如果事先不存在資料庫,則新建之;否則,不執行任何操作;
rebuilddb:重建
無論當前存在與否,直接重新建立資料庫;
Linux程式包管理(2)
CentOS:yum, dnf
URL:ftp://172.16.0.1/pub/
YUM:yellow dog, Yellowdog Update Modifier
yumrepository: yum repo
儲存了眾多rpm包,以及包的相關的元資料檔案(放置於特定目錄下:repodata);
檔案伺服器:
ftp://
http://
nfs://
file:///
yum客戶端:
配置檔案:
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
倉庫指向的定義:(等號左右不可以出現空格)
[repositoryID]
name=Somename for this repository
baseurl=url://path/to/repository/
enabled={1|0} 是否啟用此倉庫,預設啟用,可不寫
gpgcheck={1|0} 對於此倉庫的所有程式包安裝前是否檢查完整性和來源合法性
gpgkey=URL 指明URL的GPG祕鑰檔案的訪問路徑
enablegroups={1|0} 是否允許在此倉庫上基於組批量管理程式包,預設為支援
failovermethod={roundrobin|priority}故障轉移方法{輪巡(隨機)|優先順序}
預設為:roundrobin,意為隨機挑選;
cost= 開銷
預設為1000
教室裡的yum源:
http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
CentOS6.6 X86_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
mvCentOS-Base.repo CentOS-Base.repo.bak
vimcentos-local.repo
yum命令的用法:
yum[options] [command] [package ...]
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* version [all| installed | available | group-* | nogroups* | grouplist| groupinfo ]
* history[info|list|packages-list|packages-info|summary|addon-info|redo
|undo|rollback|new|sync|stats]
* check
* help [command] 獲取幫助資訊
顯示倉庫列表:
repolist [all|enabled|disabled] [全部|啟用|禁用]
顯示程式包:
list
# yum list [all | glob_exp1] [glob_exp2][...] 支援glob通配
# yum list {available|installed|updates}[glob_exp1] [...] {尚未安裝|已安裝|可用升級}
安裝程式包:
install package1 [package2] [...]
可以指定安裝程式的某一版本:yuminstall gcc-4.5.4
reinstall package1 [package2][...] (重新安裝)
請看下面的示例:
升級程式包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降級)
檢查可用升級:
check-update
解除安裝程式包:
remove | erase package1 [package2][...]
注:會同時解除安裝依賴此包的其他程式
檢視程式包information:
info [...]
檢視指定的特性(可以是某檔案)是由哪個程式包所提供:
provides | whatprovides feature1[feature2] [...]
清理本地快取:
clean [ packages | metadata |expire-cache | rpmdb | plugins | all ]
程式包 元資料 過期快取 rpmdb外掛 所有
構建快取:
makecache
搜尋:
search string1 [string2] [...]
以指定的關鍵字搜尋程式包名及summary資訊;
檢視指定包所依賴的capabilities:
deplist package1 [package2] [...]
檢視yum事務歷史:
history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包列表 包資訊
安裝及升級本地程式包:(能夠解決依賴包關係)
*localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
包組管理的相關命令:
* groupinstall group1 [group2] [...]yum groupinstall "Development Tools"
CentOS7: yumgroupinstall "開發工具"
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...] 顯示包組
* groupremove group1 [group2] [...]
* groupinfo group1 [...] yumgroupinfo "Development Tools"
yum源指向只能升級不能降級,如CentOS6.6只能使用版本大於等於CentOS6.6的源
CentOS7
如何使用光碟當作本地yum倉庫:
(1) 掛載光碟至某目錄,例如/media/cdrom
# mount -r -t iso9660/dev/cdrom /media/cdrom
yum的命令列選項:
--nogpgcheck:禁止進行gpg check;
-y: 自動回答為“yes”;
-q:靜默模式;
--disablerepo=repoidglob:臨時禁用此處指定的repo;
--enablerepo=repoidglob:臨時啟用此處指定的repo;
--noplugins:禁用所有外掛;
yum的repo配置檔案中可用的變數:
$releasever: 當前OS的發行版的主版本號;
$arch: 平臺;
$basearch: 基礎平臺;
$YUM0-$YUM9 使用者可自定義平臺
http://mirrors.magedu.com/centos/$releasever/$basearch/os
建立本地yum倉庫:(CentOS 6)
以教室伺服器為例:
切換到即將下載檔案的目錄
……
說明:!mkdir -p/yum/repo !表示執行shell指令碼程式
lcd /yum/repo l表示在本地執行[目錄切換]
mget *.rpm 下載*.rpm到本地/yum/repo下
接下來建立repodata: createrepo [options]<directory>
[[email protected] repo]# ll可檢視到當前目錄已經有repodata
接下來需要去編輯local.repo檔案
[[email protected]~]# cd /etc/yum.repos.d/
[[email protected]]# vim centos-local.repo
本地yum源建立成功。
程式包編譯安裝:
testapp-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製作成二進位制格式的rpm包,而後再安裝;
原始碼 --> 預處理 --> 編譯(gcc)--> 彙編 --> 連結 --> 執行
原始碼組織格式:
多檔案:檔案中的程式碼之間,很可能存在跨檔案依賴關係;
C、C++: make(configure --> Makefile.in --> makefile)
java: maven
C程式碼編譯安裝三步驟:
./configure:
(1)通過選項傳遞引數,指定啟用特性、安裝路徑等;執行時會參考使用者的指定以Makefile.in
檔案生成makefile;
(2)檢查依賴到的外部環境;
make:
根據makefile檔案,構建應用程式;
make install
指令碼,把構建的二進位制放到指定路徑
開發工具:
autoconf:生成configure指令碼
automake: 生成Makefile.in
建議:安裝前檢視INSTALL,README
開源程式原始碼的獲取:
官方自建站點:
apache.org(ASF)
mariadb.org
...
程式碼託管:
SourceForge
Github.com
code.google.com
c/c++:gcc (GNU C Complier)
編譯C原始碼:
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,標頭檔案
glibc:標準庫
通過“包組”提供開發元件
CentOS 6:"Development Tools", "Server Platform Development",
第一步:configure指令碼
選項:指定安裝位置、指定啟用的特性等
--help: 獲取其支援使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH/TO/SOMEWHERE:指定預設安裝位置;預設為/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置檔案安裝位置;
Systemtypes:目標系統平臺結構,用於交叉編譯
OptionalFeatures: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
OptionalPackages: 可選包,通常指該程式依賴到的其他程式包
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make
第三步:make install
現在來試一下安裝,以教室環境為例:
首先獲取httpd-2.2.29.tar.bz2
看到INSTALL檔案,檢視之:[[email protected] httpd-2.2.29]# less INSTALL
該檔案說明了操作順序,configure,configure的選項,make,make install等
檢視所需開發包組是否已安裝:
[[email protected] ~]#yum grouplist
安裝未安裝的包組:
[[email protected] ~]# yum groupinstall"Server Platform Development" -y (-y自動回答為yes)
進入/httpd-2.2.29依次執行如下命令:
[[email protected] httpd-2.2.29]# ./configure--prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2 說明:指定安裝位置為/usr/local/apache2配置檔案路徑/etc/httpd2
[[email protected] httpd-2.2.29]# make
[[email protected] httpd-2.2.29]# make install
檢視安裝結果:
接下來可嘗試啟用該程式:
安裝後的配置:
(1) 匯出二進位制程式目錄至PATH環境變數中;
編輯檔案/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
[[email protected] apache2]# vim/etc/profile.d/apache2.sh新增如下行:
(2) 匯出庫檔案路徑
編輯/etc/ld.so.conf.d/NAME.conf
新增新的庫檔案所在目錄至此檔案中; /usr/local/apache2/lib
讓系統重新生成快取:
ldconfig[-v]
vim /etc/ld.so.conf.d/apache2.conf
(3) 匯出標頭檔案
基於連結的方式實現:
ln-sv ln -s/usr/local/apache2/include/ apache2
(4) 匯出幫助手冊
編輯/etc/man.config檔案
新增一個MANPATH
vim /etc/man.config,新增下面黑色的欄位
轉載於:https://blog.51cto.com/chaochao3/1690342