程序包管理:就是能相對安裝程序,並能安裝後刪除軟件包的一類工具
程序包管理的前端工具:就是能自動查詢包之間的依賴關係,並能自動下載和安裝的一個工具
yum:rpm包管理器的前端工具;
apt-get:deb包管理器前端工具;
zypper:suse上的rpm前端管理工具;
dnf:Fedora 22+ rpm包管理器前端管理工具;
yum不是取代rpm的,它是rpm的補充和完善
程序包管理的功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷的實現程序包的安裝、卸載、查詢、升級和校驗等管理操作。
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的選項 :[install-options]
--test:測試安裝,但不真正執行安裝過程;dry run模式;
--nodeps:忽略依賴關係;
--replacepkgs:重新安裝;
--nosignature:不檢查來源合法性;
--nodigest:不檢查包完整性;
--noscipts:不執行程序包腳本片斷;
升級:
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) 不要對內核做升級操作(因爲升級後要重啓才能使用(4.0以前的內核都需要重啓)如果不能啓動,那麼你的系統就會掛掉);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;
常用用法:
-qiPACKAGE;-qf FILE;-qc PACKAGE; -ql PACKAGE; -qd PACKAGE;
-qpiPACKAGE_FILE;-qpl PACKAGE_FILE; ...
-qa包括所有選項
卸載:
如果你卸載的包有依賴關係,是不會讓你卸載的,可以使用選項--nodeps進行強制卸載
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表示MD5碼
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功能
包來源合法性驗證及完整性驗證:
完整性驗證:SHA256
來源合法性驗證:RSA
導入公鑰:
rpm--import /PATH/FROM/GPG-PUBKEY-FILE
CentOS7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7
在其他官方站點的需要下載他們的密鑰
一般爲了安全,儘量只使用光盤中的包,EPEL的包或者官方網站的包
數據庫重建:
rpm{--initdb|--rebuilddb}
initdb:初始化
如果事先不存在數據庫,則新建之;否則,不執行任何操作;
rebuilddb:重建
無論當前存在與否,直接重新創建數據庫;
一般情況這兩個命令不會使用,還有rpm命令只允許一個終端進行操作
下面演示一下CentOS 7中rpm命令管理程序包
1、安裝
首先掛載CentOS的鏡像光盤,然後切換到光盤目錄中,然後進入Packages目錄中,然後ls查看一下,會發現很多以rpm結尾的包
以這個包zsh-html-5.0.2-7.el7.x86_64.rpm爲例安裝一下,可以看到
如果安裝的包有依賴關係,就會比較麻煩,如果你安裝的包需要依賴其他包,而那個包你又沒有安裝,這個時候安裝就會失敗。
以這個php-fpm-5.4.16-23.el7_0.3.x86_64.rpm包爲例
可以使用--nodeps選項忽略這個依賴關係,把這個包裝進去,是可以安裝成功的,但能不能運行就不知道了,
還有其他選項可以使用,在這裏就不在演示,如有需要可以使用man命令查看
升級和安裝的過程類似在這裏不再演示,
2、 查詢
rpm –qa查詢所有安裝過的包,顯示信息比較多,在這裏就不再演示了
rpm -qa | grep ‘php’查詢指定格式的安裝過的包,‘|’這是管道命令,grep是搜索文本的命令,如果有不明白的可以查看Linux基礎入門的內容
rpm -qf /etc/fstab 查看這個文件是由那個程序生成的
rpm -q –whatrequires /bin/ls 查詢這個文件被哪個程序或軟件依賴
rpm -q --changelog zsh 查看rpm包製作的時候的修改的日誌
rpm -q -c zsh 查詢zsh這個包安裝的配置文件
rpm -ql -p php-common-5.4.16-23.el7_0.3.x86_64.rpm 查看未安裝的軟件包安裝後生成的文件
常用的有-qi;-ql;-qd...還有很多就不一一演示了
3、 卸載
rpm -e zsh 然後使用rpm –q zsh查看是否卸載成功
4、 校驗
以zsh-5.0.2-7.el7.x86_64.rpm這個包爲例,先rpm -ql zsh查看下生成的文件,然後選擇一個文件對它進行修改,然後進行校驗查看
S代表大小變了5標識校驗碼變了 T最近一次修改時間也變了
包來源合法性驗證及完整性驗證:這一般在包安裝前驗證
以CentOS7光盤中的包來操作
首先使用rpm --import/PATH/FROM/GPG-PUBKEY-FILE 導入密鑰
CentOS7中是PRM-GPG-KEY-CentOS-7這個文件,然後就會自動校驗了
如果不導入,在安裝關盤中的包時就會出一個警告,如果導入了,安裝光盤裏的包就不會出現警告了
安裝包的時候要自己解決關係就比較麻煩和複雜,這就需要一個工具來自動檢測依賴關係並進行自動下載和安裝這些包的工具,這就叫程序包前端管理工具,如yum,dnf等
程序包前端管理工具:
yum的工作方式簡單來說yum客戶端要連接到一個文件服務器,裏面存放很多的rpm包,yum會根據URL(統一資源定位符)進去下載所依賴的rpm包並自動安裝這些包。
CentOS中有yum和dnf
YUM:
yum repository :yum repo 即yum倉庫,裏面存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄下:repodata)。默認情況下,鏡像光盤就是一個倉庫
yum倉庫要是文件服務器:
協議有:
ftp://
http://
nfs://
file:///
要想使用yum就必須要先安裝,使用rpm –q yum查看下是否安裝,如沒有安裝就需要進行安裝才能做以下的操作;如果安裝過,使用-qc查看下配置文件的路徑
yum客戶端:
配置文件:
/etc/yum.conf:爲所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
在CentOS中,只要不是以.repo結尾的倉庫配置文件,就不會被使用
倉庫指向的定義:
[repositoryID] 倉庫ID(唯一)
name=Some name for thisrepository 倉庫名
baseurl=url://path/to/repository/ 指向倉庫的訪問路徑,可以指定多個
enabled={1|0} 是否啓用此倉庫,默認爲啓用
gpgcheck={1|0} 是否檢查合法性及完整性
gpgkey=URL 指明密鑰文件
enablegroups={1|0} 是否允許支持組來批量管理程序包
failovermethod={roundrobin|priority} 故障轉移方法
默認爲:roundrobin,意爲隨機挑選;
注意:等號左右不能有空格
當有很多倉庫,yum會使用最新rpm包的倉庫,如果包的新舊一樣,可以使用cost來設置優先級,
cost=
默認爲1000
yum命令的用法:
命令格式 yum [options] [command] [package ...]
常用的有:
顯示倉庫列表: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 feature1[feature2] [...]
清理本地緩存:
clean [ packages | metadata |expire-cache | rpmdb | plugins | all ]
構建緩存:
makecache
搜索:
search string1 [string2] [...]
以指定的關鍵字搜索程序包名及summary信息;
查看指定包所依賴的capabilities:(即包所依賴的其他包或文件)
deplist package1 [package2] [...]
查看yum事務歷史:每一次yum執行安裝、卸載和刪除都是啓動了一次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] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
配置一個yum執行,並設置倉庫,以CentOS6.6爲例:
首先切換到/etc/yum.repos.d/這個路徑下,使用ls列出所有的倉庫文件
默認啓用的是CentOS-Base.repo這個文件中的,其他的都默認不啓用,
把CentOS-Base.repo重命名爲CentOS-Base.repo.bak,然後這個倉庫問價就不可用了,然後我們創建自己的倉庫文件,(這裏我用的是自己的ftp服務器,下面如果你的不能安裝,你就把原來的倉庫文件還原,聯網的情況下,也是可以安裝成功的),在此目錄下創建一個文件並編輯vim centos-local.repo
然後保存退出,使用yum repolist列出可用的倉庫的信息
這樣倉庫就可以使用了
yum list 顯示所有的程序包,此命令還支持glob匹配
安裝程序包
yum install gcc
有四個依賴包,然後輸入Y進行安裝
這就安裝好了,
查看包的簡要信息
搜索包名及summary信息
查看指定包所依賴的capabilities
查看yum的歷史事務
安裝包組,使用yum grouplist 查看包組,可以看到已安裝的和可以安裝的包組
以這個命令爲例,安裝DevelopmentTools這個包組
yum groupinstall "Development Tools"
出現Complete!這樣就安裝完成了
如何使用光盤當作本地yum倉庫:
(1) 掛載光盤至某目錄,例如/media/cdrom
# mount -r /dev/cdrom /media/cdrom
(2) 創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
以CentOS7爲例,使用光盤當作本地yum倉庫
首先掛載光驅,創建一個目錄/media/cdrom,然後使用
mount –r/dev/cdrom /media/cdrom
出現這個設備,就是掛載成功了
然後cd /media/cdrom目錄下
repodata這個目錄就是可以直接指定的倉庫目錄
然後cd/etc/yum.repos.d/下使用ls查看下,如果有其他.repo結尾的文件,先給改名,然後創建一個名爲local.repo的本地倉庫
使用yumrepolist 就可以看到自己創建的本地倉庫了
這樣使用光盤創建本地倉庫就完成了
然後就可以安裝或更新軟件包了
yum的命令行選項:
--nogpgcheck:禁止進行gpgcheck
-y: 自動回答爲“yes”
-q:靜默模式;
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啓用此處指定的repo
--noplugins:禁用所有插件
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺
$basearch:基礎平臺;
$YUM0-$YUM9
創建yum倉庫:
自建倉庫,首先要有指向光盤或者指向互聯網上的鏡像的倉庫,因爲要先裝createrepo
使用yum install createrepo 安裝,createrepo可以幫助我們去組織和管理創建出
rpm包的相關的文件,
createrepo命令的使用:
createrepo[options] <directory> 選項一般都省略
以CentOS6.6爲例,創建倉庫:
下載一些rpm包到本地,然後把有限的rpm包創建成倉庫我用的是本地的文件服務器,
首先使用lftp 172.16.0.1 登錄到服務器上,然後進入pub目錄下,ls找到Sources,然後切入Sources目錄中
找到6.x86_64目錄,然後依次進入這些目錄xen4centos/x86_64/Packages,這裏面有很多rpm包,把它們都下載到本地目錄下
lftp172.16.0.1:/pub/Sources/6.x86_64/xen4centos/x86_64/Packages> 在這個模式下使用!加上命令執行的是bash操作
建一個目錄/yum/repo,然後切換到本地的/yum/repo然後把Packages中的所有.rpm結尾的全部下載到/yum/repo中
下載完成後,使用bye退出
然後切換到/yum/repo目錄中,使用ls查看下,看是否下載成功
使用createrepo ./ 就可以創建了
創建完成後,就生成了repodata目錄,然後cd進入,ls查看會有幾個文件
自己創建的倉庫據弄好了,然後自己創建指向下,看能否使用
進入/etc/yum.repos.d/目錄下,修改centos-local.repo這個文件,加入下面內容
然後使用yum repolist 顯示可用repo
自己創建的倉庫可以使用
試一下,yum install xen
輸入y就可以安裝了,依賴關係中有我們自己創建倉庫,這就證明自己創建的倉庫可用
程序包編譯安裝:
上面演示和講到的安裝都是直接安裝,即安裝的都是二進制文件,程序的編譯安裝就是下載程序的源碼,然後自己進行編譯,然後進行安裝
如果你說既然有別人編譯好的二進制格式的了,我們拿來直接用不就行了,爲什麼還要自己編譯呢?
那是因爲,別人編譯好的軟件裏面的功能可能不是很符合自己,或者不能完全發揮自己的硬件的性能,所以這就要自己根據自己的硬件進行編譯了
下載源碼的rpm包,然後使用rpmbuild命令製作成二進制格式的rpm包,而後再安裝
一個源代碼要想稱爲一個可執行的程序需要經歷的過程:
簡單來說有以下幾個過程
源代碼 --> 預處理 --> 編譯(gcc)--> 彙編 --> 鏈接 --> 執行
C代碼編譯安裝三步驟:
(1) ./configure:
通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;檢查依賴到的外部環境;
(2)make:
make是一個工具,根據makefile文件爲標準,通過調用別的工具來完成整個程序的構建構建應用程序;
(3)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:標準庫
通過“包組”提供開發組件
CentOS6: "Development Tools", "Server Platform Development",這兩個包組要安裝好
第一步:configure腳本
選項:指定安裝位置、指定啓用的特性
--help:獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置;默認爲/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;
Systemtypes:
OptionalFeatures: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make
第三步:makeinstall
安裝後的配置:
(1) 導出二進制程序目錄至PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
exportPATH=/PATH/TO/BIN:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統重新生成緩存:
ldconfig[-v]
(3) 導出頭文件
基於鏈接的方式實現:
ln-sv
(4) 導出幫助手冊
編輯/etc/man.config文件,添加一個MANPATH
下面以CentOS6.6爲例編譯安裝軟件:
首先確保開發工具和開發環境都下載安裝好了
然後下載源程序,
我在這裏是直接到自己的文件服務器上進行下載的,下載這個httpd-2.2.29.tar.bz2
然後使用tar展開,進入其目錄下
裏面有INSTALL文件,可以進入查看,裏面會告訴你安裝步驟,還有configure文件
然後使用configure命令
./configure--prefix=/usr/local/apache2 --sysconfdir=/etc/http2 指定安裝目錄和配置文件的目錄,回車就可以進行安裝了
沒有出現error就證明成功了,就可以執行第二步make了
出現這樣的字樣就算成功了
下面進行第三步,make install就行了,這一步一般沒錯誤
然後我們進入我們安裝指定的目錄去看下
然後啓動試試:
使用bin/apachectl start 會出現一個錯誤,那個不用管,然後使用netstat–tan有80端口這一項處在LISTEN在證明啓動成功了
然後使用瀏覽器驗證下
顯示這樣的字樣,證明啓動成功
後面的安裝後的配置就不演示了