程序包管理:就是能相對安裝程序,並能安裝後刪除軟件包的一類工具php
程序包管理的前端工具:就是能自動查詢包之間的依賴關係,並能自動下載和安裝的一個工具html
yum:rpm包管理器的前端工具;前端
apt-get:deb包管理器前端工具;node
zypper:suse上的rpm前端管理工具;c++
dnf:Fedora 22+ rpm包管理器前端管理工具;數據庫
yum不是取代rpm的,它是rpm的補充和完善apache
程序包管理的功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷的實現程序包的安裝、卸載、查詢、升級和校驗等管理操做。vim
1、程序的組成組成清單 (每一個包獨有)centos
文件清單瀏覽器
安裝或卸載時運行的腳本
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命令查看
升級和安裝的過程相似在這裏再也不演示,
二、 查詢
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...還有不少就不一一演示了
三、 卸載
rpm -e zsh 而後使用rpm –q zsh查看是否卸載成功
四、 校驗
以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在證實啓動成功了
而後使用瀏覽器驗證下
顯示這樣的字樣,證實啓動成功
後面的安裝後的配置就不演示了