軟件包管理rpm、yum及編譯安裝

庫文件
查看二進制程序所依賴的庫文件
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件
ldconfig 加載庫文件
/sbin/ldconfig -p: 顯示本機已經緩存的全部可用庫文件
名及文件路徑映射關係
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cachehtml

 

rpm(RedHat Package Manager)
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操做前端

包文件組成 (每一個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本 java

數據庫(公共):/var/lib/rpm
程序包名稱及版本
依賴關係
功能說明
包安裝後生成的各文件路徑及校驗碼信息node

rpm {-i|--install} [install-options] PACKAGE_FILE...
-v: verbose
-vv:更加詳細的過程(用於排錯)
-e:卸載
直接接basename便可
如:rpm -e tree
-h:以#顯示程序包管理執行進度
-q:查詢
-ql:包的文件列表
解壓是要完整的路徑,而查詢和卸載只須要名字,由於是根據數據庫查的;
rpm -ivh PACKAGE_FILE ...linux

rpm包安裝
[install-options]
--test: 測試安裝,但不真正執行安裝,即dry run模式
能夠用v來看到完整的過程,可是不是真的安裝
--nodeps(忽略依賴關係):
使用時機:
當發生依賴關係沒法安裝時;
危險性:
強制操做可能會形成軟件沒法正常使用;
--replacepkgs
面向全局:
用於在解壓開來後的文件缺失或者誤改,少的補,多的用原來的覆蓋,因此他會帶來一個問題就是若是你加了不少本身的配置文件,運行此選項也會被覆蓋;
面向局部:
rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -id ./usr/bin/tree,把rpm轉成cpio而後再來對某一個文件解開,在複製過去就行了,但這樣也會帶來一個問題是文件的屬性可能會有不一樣,而上面的直接用rpm覆蓋安裝是不會存在這樣的問題的;
--replacefiles
對於A,B兩個包解壓出來同名的文件進行覆蓋,但通常都是版本的緣由纔會出現這樣的狀況。若是有添加版本號的,那麼2者能夠共存,若是都是以名字命名的那麼會覆蓋;
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
%pre: 安裝前腳本; --nopre
%post: 安裝後腳本; --nopost
%preun: 卸載前腳本; --nopreun
%postun: 卸載後腳本; --nopostunsql

rpm包升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安裝有舊版程序包,則「升級」 若是不存在舊版程序包,則「安裝」
freshen:安裝有舊版程序包,則「升級」 若是不存在舊版程序包,則不執行升級操做
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級
使用老版本的時候
--force: 強制安裝 數據庫

注意:
(1) 不要對內核作升級操做;Linux支持多內核版本並存,所以,直接安裝新版本內核便可
(2) 若是原程序包的配置文件安裝後曾被修改,升級或者卸載時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把老版本的文件重命名(FILENAME.rpmnsave)後保留
1.rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
Preparing... ################################# [100%]
package vsftpd-3.0.2-22.el7.x86_64 is already installedapache

2.rpm -ql vsftpd
選擇一個配置文件/etc/vsftpd/vsftpd.confvim

3.ll /etc/vsftpd/vsftpd.conf並添加一行
-rw-------. 1 root root 5030 Aug 3 2017 /etc/vsftpd/vsftpd.conf
[root@centos7 ~]# echo >> /etc/vsftpd/vsftpd.conf
[root@centos7 ~]# ll /etc/vsftpd/vsftpd.conf
-rw-------. 1 root root 5031 Jul 6 15:49 /etc/vsftpd/vsftpd.conf

4.刪除文件時,會提示你有修改過的文件,並將其命名爲以.rpmsave結尾的文件,其餘均被刪除,
後期若是須要用到能夠直接覆蓋使用;
[root@centos7 ~]# rpm -e vsftpd
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave

5.從新安裝一次
[root@centos7 vsftpd]# ll
total 28
-rw-------. 1 root root 125 Aug 3 2017 ftpusers
-rw-------. 1 root root 361 Aug 3 2017 user_list
-rw-------. 1 root root 5030 Aug 3 2017 vsftpd.conf
-rwxr--r--. 1 root root 338 Aug 3 2017 vsftpd_conf_migrate.sh
-rw-------. 1 root root 5031 Jul 6 15:49 vsftpd.conf.rpmsave
rpm查詢包
rpm {-q|--query} [select-options] [query-options]
[select-options]
-q:僅查詢
-a: 全部包
-l:列出該軟件因此的文件與目錄所在的完整的文件名;
-f: 查看指定的文件由哪一個程序包安裝生成
ql與qf是相反的,一個是解開是哪些,一個是這屬於哪一個包
其實文件本刪除了也能夠查詢,由於他查詢的是數據庫;
-p :針對還沒有安裝的程序包文件作查詢操做
也能夠用cpio -itv來預覽
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個包所提供
CAPABILITY至關於關鍵字bash、tree等,這個tree或者bash是由哪一個包提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴
哪些包會用到(依賴)這個CAPABILITY
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id 「*.conf」 釋放包內文件 centos

1.查詢/usr/bin/java來自哪一個rpm?

[query-options]
--changelog:查詢rpm包的changelog
更改日誌
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
cd爲l的部分文件
-i: information
-l: 查看指定的程序包安裝後生成的全部文件
--scripts:程序包自帶的腳本
有安裝先後的腳本,卸載先後的腳本;
--provides: 列出指定程序包所提供的CAPABILITY
提供的能力,關鍵字
-R: 查詢指定的程序包所依賴的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]
-V:接軟件名,若是文件被更改過,纔會列出來;
-Va:列出目前系統上面因此可能被更改過的文件;
-Vp:接文件名,列出該軟件內可能背更改的文件;
-Vf:列出系統上的某個文件是否被更動過;
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

c:配置文件(config file)
d:文件數據文件(documentation)
g:鬼文件~一般是該文件不被某個軟件所包含,較少發生(ghost file)
l:受權文件(license file)
r:讀我文件(read me)


包來源合法性驗正及完整性驗正
完整性驗正:SHA256 來源合法性驗正:RSA
公鑰加密
對稱加密:加密、解密使用同一密鑰
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開全部人
secret key: 私鑰, 不能公開
導入所須要公鑰(不導入是查不出來的)
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa 「gpg-pubkey*」

rpm數據庫:
數據庫重建: /var/lib/rpm
rpm {--initdb|--rebuilddb} (沒什麼意義他只會把文件建起來,文件沒有辦法恢復)
initdb: 初始化
若是事先不存在數據庫,則新建之
不然,不執行任何操做
rebuilddb:重建已安裝的包頭的數據庫索引目錄

 

yum(Yellowdog Update Modifier):
rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具
yum repository: yum repo,存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄repodata下)
文件服務器:
http://
https://
ftp://
file://
學習yum無非這2點:
1:會寫配置文件(路徑)
2:會清緩存,由於可能由於路徑修改以後,與本地的源數據有所變化(由於yum都是從倉庫上下載下來放到本身的本機上的),因此須要清緩存

這是本地的文件
cd /var/cache/yum/x86_64/7/base/
[root@centos7 base]# ll
total 6052
*-rw-r--r--. 1 root root 6023293 Sep 6 2017 0c34273ad0292747ee5e15c047d3e51c67ca59861a446972db45d71abacc7ad7-primary.sqlite.bz2
*-rw-r--r--. 1 root root 159667 Sep 6 2017 9346184be1deb727caf4b1ecf4a7949155da5da74af9b92c172687b290a773df-c7-x86_64-comps.xml.gz
-rw-r--r--. 1 root root 0 Jul 6 20:14 cachecookie
drwxr-xr-x. 2 root root 48 Jul 6 20:14 gen
drwxr-xr-x. 2 root root 6 Jul 4 22:11 packages
-rw-r--r--. 1 root root 3735 Sep 6 2017 repomd.xml

這是yum倉庫上的文件(這裏暫時爲光盤)
[root@centos7 base]# ll /run/media/root/CentOS\ 7\ x86_64/repodata/
total 27222
*-rw-rw-r--. 1 root root 6023293 Sep 6 2017 0c34273ad0292747ee5e15c047d3e51c67ca59861a446972db45d71abacc7ad7-primary.sqlite.bz2
-rw-rw-r--. 1 root root 751786 Sep 6 2017 38b60f66d52704cffb8696750b2b6552438c1ace283bc2cf22408b0ba0e4cbfa-c7-x86_64-comps.xml
-rw-rw-r--. 1 root root 7019993 Sep 6 2017 6cd606547d4f569538d4090e9accdc3c69964de1116b9ab1e0a7864bb1f3ec98-filelists.sqlite.bz2
*-rw-rw-r--. 1 root root 159667 Sep 6 2017 9346184be1deb727caf4b1ecf4a7949155da5da74af9b92c172687b290a773df-c7-x86_64-comps.xml.gz

以上能夠看出yum倉庫上的文件會下載到本地;

yum配置文件:
yum客戶端配置文件: /etc/yum.conf:爲全部倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
必須在這個文件下,並且擴展名爲.repo
倉庫指向的定義:
[repositoryID]
軟件庫的名字能夠隨意取,但不能重名;
name=Some name for this repository
說明下軟件庫的意義,重要性不大,可是不寫,系統每次都有一句提示Repository 'base' is missing name
baseurl=url://path/to/repository/ enabled={1|0}
須要是熱破data的父目錄;
enable
軟件庫是否啓動;
gpgcheck={1|0}
是否須要查閱RPM文件內的數碼簽章;
gpgkey=URL
數碼簽章的公鑰所在位置,使用默認值便可;
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意爲隨機挑選,默認值
priority:按順序訪問
cost= 默認爲1000

搭建本地倉庫(用光盤來做爲源):
1.寫一個後綴爲.repo的文件,名字不重要,取base.repo;
2.編輯這個文件,vim base.repo
3.[base]
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/ (baseurl須要是repodata的父目錄)
4.寫了這兩行以後yum repolist就會有一個名字爲base的源;
5.繼續編寫base.repo
[base]
name=centos7.4 cdrom
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/(須要寫repodata的父目錄)
gpgkey=file:///run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7
不想裝鑰匙第4句改成gpgcheck=0
enabled=0(不使用時,臨時禁用)

yum clean all:刪除全部數據庫數據
packages:將已下載的軟件文件刪除
headers:將下載的軟件文件開始刪除
yum repolist查看倉庫列表
yum install ** 安裝
-y:不交互,默認yes
-q:靜默安裝;
--installroot=/some/path:該軟件安裝在/some/path下而不是用默認路徑;
yum remove ** 卸載
search :搜尋某個軟件名稱或者是描述(description)的重要關鍵字
list:列出目前yum所管理的全部軟件名稱與版本,相似rpm -qa
info:相似 rpm -qai
provides:從文件去搜尋軟件,相似於rpm -qf
update:後面接要升級的文件!如要整個系統都升級,就直接update;


*把本身搭建爲搭建yum倉庫服務器:
準備工做
關閉SElinux
enforcing改成permissive
setenforce 0

關閉iptables
centos7
systemctl stop firewalld 關閉當前防火牆
systemctl disable firewalld 關閉開機自啓動

centos6
chkconfig iptables off關閉開機自啓動
service iptables stop 關閉當前防火牆

systemctl start vsftpd 如今啓動
systemctl enable vsftpd 開機啓動


共享服務:httpd、ftp
/var/www/html
/var/ftp/pub
當你完成一個項目的時候已經作出了rpm包了,可是要在共享服務上顯示,還須要rpm包元數據
createrepo /some/to/file 一個命令就能夠製做rmp包元數據
上面的操做能夠把磁盤內容拷過到這2個文件裏,也能夠直接把光盤掛載到其下面。

 

 

yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386, x86_64
$YUM0-$YUM9:自定義變量

實例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384

yum命令的用法:
yum [options] [command] [package ...]
顯示倉庫列表:
yum repolist [all|enabled|disabled]
顯示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安裝程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (從新安裝)
對於某些部分文件缺失的功能使用

yum-config-manager
yum-config-manager --add-repo=url
yum-config-manager --disable 「倉庫名" 禁用倉庫
yum-config-manager --enable 「倉庫名」 啓用倉庫

升級程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)

檢查可用升級:
yum check-update

卸載程序包:
yum remove | erase package1 [package2] [...]

查看程序包information:
yum info [...]

查看指定的特性(能夠是某文件)是由哪一個程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]

清理本地緩存:
清除/var/cache/yum/$basearch/$releasever緩存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:
yum makecache(yum repolist 的時候會自動構建)

搜索:yum search string1 [string2] [...]
以指定的關鍵字搜索程序包名及summary信息

查看指定包所依賴的capabilities:
yum deplist package1 [package2] [...]

查看yum事務歷史:
yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6(撤銷第6步)
redo 6(重作第6步)
用於刪除某個文件,並且肯定他的因此依賴文件都不須要的時候使用,由於默認yum remove **只會刪除後面接的文件;
日誌 :/var/log/yum.log

安裝及升級本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)

包組管理的相關命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

yum的命令行選項:
--nogpgcheck:禁止進行gpg check
-y: 自動回答爲「yes」
-q:靜默模式 --disablerepo=repoidglob:臨時禁用此處指定的repo --enablerepo=repoidglob:臨時啓用此處指定的repo --noplugins:禁用全部插件

 

程序包的編譯安裝:
Application-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製做成二進制格式的rpm包,然後再安裝

源代碼-->預處理-->編譯-->彙編-->連接-->執行

源代碼組織格式:
多文件:文件中的代碼之間,極可能存在跨文件依賴關係
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

編譯安裝:
編譯C源代碼: 準備:提供開發工具及開發環境
開發工具:make, gcc等
開發環境:開發庫,頭文件
glibc:標準庫
實現:經過「包組」提供開發組件
*Development Tools
Server Platform Development
第一步:configure腳本
選項:指定安裝位置、指定啓用的特性
--help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH: 指定默認安裝位置,默認爲/usr/local/ --sysconfdir=/PATH:配置文件安裝位置
System types:支持交叉編譯
Optional Features: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包
--with-PACKAGE[=ARG],依賴包
--without-PACKAGE,禁用依賴關係
注意:一般被編譯操做依賴的程序包,須要安裝此程序包的「開發」組件,其包名通常相似於name-devel-VERSION
第二步:make
第三步:make install

安裝後的配置:
(1) 二進制程序目錄導入至PATH環境變量中
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導入庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中
讓系統從新生成緩存:
ldconfig [-v]
(3) 導入頭文件 基於連接的方式實現:
ln -sv
(4) 導入幫助手冊
編輯/etc/man.config|man_db.conf文件
添加一個MANPATH

 

編譯安裝httpd(網上下載一個最新的版本)
1.yum groupinstall "Development Tools"
2.cat README
cat INSTALL
參考格式:
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
3.進入到httpd那個目錄(./configure --help)
./configure --prefix=/app/httpd24 --sysconfdir=/etc/httpd24/ --enable-ssl
--enable-proxy-fcgi
報錯:
checking for APR... no
configure: error: APR not found. Please read the documentation.
缺啥補啥:
yum install apr-devel(缺什麼後面跟-devel補上就行)
再次報錯:
checking for APR-util... no
configure: error: APR-util not found. Please read the documentation.
繼續補:
yum install apr-util-utildevel
再次報錯:
checking for pcre-config... false
繼續補:
yum install pcre-devel
再次報錯:
checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures
繼續補:
yum install openssl-devel
成功以後會生成Makefile文件;

4.make -j 2 (-j指定cpu個數,多線程) 5.make install 45能夠合成一句: make;make install && echo -e "\a" 6.配置運行環境 1.修改PATH vim /etc/profile.d/httpd24.sh PATH=/app/httpd24:$PATH . /etc/profile.d/httpd24.sh 7.apachectl 啓動apache服務;

相關文章
相關標籤/搜索