Linux程序包管理

成都創(chuàng)新互聯(lián)的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計、成都做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
API:Application Program Interface
ABI:Application Binary INnterface
Unix-like,系統(tǒng)上的二級制格式的應(yīng)用程序文件格式為
ELF
Windows系統(tǒng)的二級制格式的應(yīng)用程序文件格式為:
exe,msi
庫級別的虛擬化:
Linux:WinE,可以實現(xiàn)在Linux系統(tǒng)上運(yùn)行Windows的二進(jìn)制可執(zhí)行程序
Windows:Cywin,可以實現(xiàn)在Windows系統(tǒng)上運(yùn)行Linux的位二進(jìn)制可執(zhí)行程序
各種編程語言當(dāng)中,大體上可以分為
系統(tǒng)級開發(fā):
C/C++:httpd,vsftpd,nginx對性能要求比較苛刻,并且是服務(wù)級的應(yīng)用程序,不需要圖形界面
go
應(yīng)用級開發(fā):
java/python/perl/ruby/php:
java:hadoop,hbase,程序運(yùn)行依賴于jvm
python:openstack,程序運(yùn)行依賴于pvm
perl:(perl)解釋器
ruby:
C/C++程序格式:
源代碼:文本格式的程序代碼;
編譯開發(fā)環(huán)境:編譯器,頭文件,開發(fā)庫
二進(jìn)制格式:文本格式的程序代碼-->編譯器-->二進(jìn)制格式(二進(jìn)制程序,庫文件,配合文件,幫助文件)
Java/python程序格式:
源代碼:編譯成能夠在其虛擬機(jī)上運(yùn)行的格式;
開發(fā)環(huán)境:編譯器、開發(fā)庫
二進(jìn)制
項目構(gòu)建工具:
c/c++:make
java:maven
程序包管理器:
源代碼 -->目標(biāo)二進(jìn)制格式-->組織成為一個或有限幾個“包”文件;
安裝、升級、卸載、查詢、校驗
程序包管理器:
debain:dpt,dpkg,".deb"
redhat:redhat package manager ,rpm ".rpm" rpm is package manager;
S.u.S.E:
Gentoo:ports
ArchLinux:
源代碼:name-vVERSION.tar.gz
VERSION:major.minor,release
rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的發(fā)行號
release.os:2.el7.i386.rpm
archetecture:i386,x64(amd64),ppc,noarch
redis-3.0.2-1.centos7.x64.rpm
依賴關(guān)系:
前端工具:自動解決依賴關(guān)系;
yum:rhel系統(tǒng)系統(tǒng)上rpm包管理器的前端工具;
apt-get(apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+ 系統(tǒng)上rpm包管理器的前端工具;
程序包管理器:
功能:將編譯好的應(yīng)用程序的各組成文件打包成一個或多個程序包文件,從而更方便快捷的實現(xiàn)程序包的安裝、升級、卸載和查詢等管理操作;
1.程序包的組成清單(每個程序包都單獨實現(xiàn)):
文件清單
安裝或卸載時運(yùn)行的腳本
2.數(shù)據(jù)庫(公共)
程序包的名稱和版本;
依賴關(guān)系;
功能說明;
安裝生成的各文件的文件路徑及校驗碼信息;
獲取程序包的途徑:
1.系統(tǒng)發(fā)行版的光盤或官方的文件服務(wù)器(或鏡像站點)
2.項目的官方站點
3.第三方組織:
(a)EPEL:
(b)搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4.自己制作rpm包
建議:檢查其合法性
來源合法性;
程序包的完整性;
CentOS系統(tǒng)上rpm命令管理程序包:
安裝、升級、卸載、查詢和校驗、數(shù)據(jù)庫維護(hù)
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i,--install
升級:-U,--update,-F,--freshen
卸載:-e,--erase
查詢:-q,--query
校驗:-V,--verify
數(shù)據(jù)庫維護(hù):--builddb,--initdb
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE...
GENERAL OPTIONS:
-v:verbose,詳細(xì)信息
-vv:更詳細(xì)的輸出
[install-options]
-h:hash marks輸出進(jìn)度條;每個#表示%2的進(jìn)度;
--test:測試安裝,檢查并報告依賴關(guān)系及沖突消息等;
--nodeps:忽略依賴關(guān)系;不建議;
--replacepkgs:重新安裝
注意:rpm可以自帶腳本;
四類:
preinstall:安裝過程開始之前運(yùn)行的腳本,%pre
postinstall:安裝過程完成之后運(yùn)行的腳本,%post
preuninstall:卸載過程真正開始執(zhí)行之前運(yùn)行的腳本,%preun
postuninstall:卸載過程完成之后運(yùn)行的腳本,%postun
--nosignature:不檢查簽名信息,不檢查來源合法性;
--nodigest:不檢查包完整性信息
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升級或安裝;
-F:升級
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級;
--force:強(qiáng)制升級;
注意:
1.不要對內(nèi)核做升級操作;
Linux支持多內(nèi)核版本并存,因此,直接安裝新版本內(nèi)核;
2.如果某源程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸載所有匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關(guān)系;
--test:測試卸載,dry run模式
查詢:
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經(jīng)安裝,及其版本;
-a,--all:查詢所有已經(jīng)安裝過的包;
-f,--file FILE:查詢指定的文件由哪個程序包安裝生成;
-p,--package PACKAGE_FILE:用于實現(xiàn)對未安裝的程序包執(zhí)行查詢操作;
--whatprovides CAPABILITY:查詢指定的CAPABILITY(能力)由哪個程序包提供;
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
[query-options]
--changelog:查詢rpm包的changelog;
-l,--list:程序包安裝生成的所有文件列表;
-i,--info:程序包相關(guān)的信息,版本號、大小、所屬的包組,等;
-c,--configfiles:查詢指定的程序包提供的配置文件;
-d,--docfile:查詢指定的程序包提供的文檔;
--provides:列出指定的程序包提供的所有CAPABILITY;
-R,--requires:查詢指定的程序包的依賴關(guān)系;
--scripts:查看程序包自帶的腳本片段;
-p PACKAGE_FILE :查詢尚未安裝的程序包的相關(guān)信息;
用法:
-qi PACKAGE:查詢某包的簡要說明信息
-qf FILE:查詢指定的文件由哪個程序包安裝生成;
-qc PACKAGE:查詢某包安裝完成后生成的所有配置文件
-ql PACKAGE:查詢某包安裝生成的文件列表
-qd PACKAGE:查詢某包安裝完成后生成的所有幫助文件
校驗:
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file 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
P caPabilities differ
包來源合法性驗證和完整性驗證;
來源合法性驗證:
完整性驗證:
獲取并導(dǎo)入信任的包制作者的密鑰:
對于CentOS發(fā)行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
驗證;
1.安裝此組織簽名的程序時,會自動執(zhí)行驗證;
2.手動驗證:rpm-K PAVKAGE_FILE
數(shù)據(jù)庫重建:
rpm管理器數(shù)據(jù)庫路徑:/var/lib/rpm/
查詢操作:通過此處的數(shù)據(jù)庫進(jìn)行;
獲取幫助:
centos6:man rpm
centos7:man rpmdb
rpm {--initdb|--rebuilddb}
--initdb:初始化數(shù)據(jù)庫,當(dāng)前無任何數(shù)據(jù)庫可創(chuàng)建一個新的;當(dāng)前有時不執(zhí)行任何操作;
--rebuilddb:重建構(gòu)建,通過讀取當(dāng)前系統(tǒng)上的所有已經(jīng)安裝過的程序包進(jìn)行重新創(chuàng)建;
CentOS:yum dnf
URL:ftp://
yum repository:yum repo
存儲了眾多的rpm包,以及包的相關(guān)的元數(shù)據(jù)文件(放置于特定目錄下:repodata)
文件服務(wù)器:
ftp://
http://
nfs://
file:///
yum客戶端:
配置文件:
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum/repos.d/*.repo:為倉庫的指向提供配置
倉庫指向的定義:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
默認(rèn)為roundrobin
cost=
默認(rèn)為1000
yum命令的用法:
yum [options] [command] [package ...]
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* 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]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-
or-distribution-synchronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist |
groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐
back|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all
| check-running-kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]
顯示倉庫列表:
repolist [all|enabled|disabled]
顯示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
所有可用的;所有可安裝的;所有可升級的
安裝程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安裝)
升級指定程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...](降級)
檢查可用升級包:
check-update
卸載程序包:
remove | erase package1 [package2] [...]
查看程序包的information:
info [...]
查看指定的特性(可以是某文件)是由那個程序包所提供:
provides | whatprovides featurel [feature2] [...]
清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構(gòu)建緩存:
makecache
搜索:
search string1 [string2] [...]
以指定的關(guān)鍵字搜索程序包及summary信息;
查看指定包所依賴的capabilities:
deplist package1 [package2] [...]
查看yum事務(wù)歷史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐
back|new|sync|stats]
安裝及升級本地程序包:
*localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
*localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
包組管理的相關(guān)命令:
groups [...]
groupinstall group1 [group2] [...]
groupupdategroup1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]
* search string1 [string2] [...]
如何使用光盤當(dāng)做本地yum倉庫:
(1)掛載光盤至某目錄,例如/media/cdrom
# mount /dev/cdrom /media/cdrom
(2)創(chuàng)建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum的命令行選項:
--nogpgcheck:禁止進(jìn)行g(shù)pg check;
-y:自動回答為“yes”
-q:靜默模式
--disablerepo=repoidglog:臨時禁用此處指定的repo;
--enablerepo=repoidglob:臨時啟用此處指定的repo;
--noplugins:禁用說有插件;
yum的repo配置文件中可用的變量:
$releasever:當(dāng)前OS的發(fā)行版的主版本號;
$arch:平臺;
$basearch:基礎(chǔ)平臺;
$YUM0-$YUM9
http://mirrors.magedu.com/centos/$releasever/$basearch/os
創(chuàng)建yum倉庫;
createrepo [options] <directory>
程序包編譯安裝:
testapp-VERSION-release.src.rpm -->安裝后,使用rpmbuild命令制作成二進(jìn)制格式的rpm包,而后再安裝;
源代碼 --> 預(yù)處理 --> 編譯 --> 匯編 --> 鏈接 --> 執(zhí)行
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關(guān)系;
C、C++:make(configure --> Makefile.in --> makefile)
java:maven
編譯安裝三步驟:
./configure:
1.通過選項傳遞參數(shù),指定啟用特性、安裝路徑等;執(zhí)行時會參考用戶的指定以及Makefile.in文件生成makefile;
2.檢查依賴到的外部環(huán)境;
make:
根據(jù)makefile文件,構(gòu)建應(yīng)用程序;
make install
開發(fā)工具:
autoconf:生成configure腳本;
automake:生成Makefile.in
注意:安裝前查看INSTALL,README
開源程序源代碼的獲取:
官方自建站點:
Apache.org
mariadb.org
...
代碼托管:
SourceForge
Github.com
code.google.com
c/c++:gcc(GNU C Complier)
編譯C源代碼:
前提:提供開發(fā)工具及開發(fā)環(huán)境
開發(fā)工具:make gcc等
開發(fā)環(huán)境:開發(fā)庫,頭文件
glibc:標(biāo)準(zhǔn)庫
通過“包組”提供開發(fā)組件
CentOS 6: "Development Tools
編譯安裝
第一步:configure腳本
選項:指定安裝位置、指定啟用的特性
--help: 獲取其支持使用的選項
選項分類:
安裝路徑設(shè)定:
--prefix=/PATH: 指定默認(rèn)安裝位置,默認(rèn)為/usr/local/
--sysconfdir=/PATH:配置文件安裝位置
System types:支持交叉編譯
Optional Features: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包,
--with-PACKAGE[=ARG],依賴包
--without-PACKAGE,禁用依賴關(guān)系
第二步:make
第三步:make install
安裝后的配置:
(1) 二進(jìn)制程序目錄導(dǎo)入至PATH環(huán)境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導(dǎo)入庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統(tǒng)重新生成緩存:
ldconfig[-v]
(3) 導(dǎo)入頭文件
基于鏈接的方式實現(xiàn):
ln -sv
(4) 導(dǎo)入幫助手冊
編輯/etc/man.config|man_db.conf文件
添加一個MANPATH
本文標(biāo)題:Linux系統(tǒng)程序包管理
URL鏈接:http://chinadenli.net/article2/jijioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、云服務(wù)器、網(wǎng)站導(dǎo)航、移動網(wǎng)站建設(shè)、定制開發(fā)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)