rpm,yum,編譯安裝應用詳解 (Blog 5)

rpm, yum, 編譯安裝全解

概述

硬件發展歷史:電子管、晶體管、集成電路、大規模集成電路

電子管時代
ENIARC, 上個世紀30-40年代, 遵循馮 諾伊曼體系;
計算機五大部件:控制器、運算器、存儲器、輸入設備、輸出設備
CPU的核心:控制器、運算器;其指令的集合”指令集”
存儲器:內存;主儲;手機上叫”運行內存”
輸入設備:輸入指令;提供數據;
輸出設備:輸出數據加工后的結果;

4

面臨的問題:
1、硬件提供的接口:過于底層,后來硬件廠商出廠時在CPU上附加了微碼編程語言;用字符代表機器二進制指令;
2、面向硬件寫程序;除了程序自身的代碼額外需要提供驅動硬件的的代碼;
3、寫程序面向匯編語言過于底層:需要一個更接近人類,更易懂的語言;

操作系統歷史:
早期”單任務系統”:穿孔紙帶–>磁帶;問題:1、人工輸入,并記錄輸出結果;2、CPU比內存快浪費CPU性能;
多任務系統:
監控系統:虛擬CPU時間;虛擬內存空間;以提供一個良好的創業環境;保證每一個程序穩定的運行;
GE, MIT, Bell成立Multics項目:可以最大壓榨CPU性能,讓某時刻硬件上可運行多個程序
unix到BSD的愛恨糾葛…情殺故事
unix開始收費:

1985年,MIT的Ricth Stallman,是一個極左的人,認為軟件是全人類的優秀工程師的結晶,不應該被某個商業組織所獨占;就成立了GNU組織,當時有許多黑客比較肯定他的做法,都加入了這個組織;其宣言是GPL(Freedom);為了保證軟件的開源性就制定了一個約定:任何使用GPL代碼的程序,自己必須遵循GPL協定;
GNU組織提供了許多開源程序:gcc(gnu c complier), vi(visual interface)
* 黑客:在某個有領域有深入研究,并取得成功的人;并非是以破壞為目的的,那叫”crack boy”
1969年,8月;Linus Torvalds成立Linux項目,i386主機上實現,加入GPL組織;

操作系統:GNU/Linux:都是源代碼;文本格式;

源代碼:需要編譯成二進制的程序方可運行;當然普通人沒有這個能力;一些世俗的入流的看到編譯為二進制程序的商機的組織將這些源碼拼湊在一起成為一個發行版;不同GNU程序版本和Linux內核版本組織有不同的發行版本

發行版版本:由GNU程序和kernel內核組織,彼此間沒有任何聯系;

操作系統的功用
驅動硬件、輸出簡潔的接口、根文件系統、網絡功能、進程管理、內存管理、安全加密

系統組成
庫調用:libcall,對系統調用的二次封裝;用更多的庫調用接口供程序員使用;
系統調用:syscall,內核中抽象出的接口,為保證通用性,也比較底層;
kernel:類似于中間層;抽象底層硬件接口為統一的中間層輸出簡潔接口;
硬件:計算機得以計算的基礎保證;

寫程序面向接口:
API:Application Program Interface
libcall:標準C庫
POSIX: 兼容libcall(C庫), 可跨平臺編譯;
syscall
ABI: Application Binary Interface
libcall: 運行庫
syscall: 運行庫
源碼編譯為對應平臺可執行的二進制程序格式
遵循POSIX規范的源碼:只有在Unix-like主機上才可以在編譯后跨平臺運行;
UNIX-Like: HP-UX, AIX, Solaris

5

程序格式:
windows: EXE –> dll庫
Linux: ELF –> .so庫

不同格式的程序如果在windows和Linux主機間跨平臺運行?
庫虛擬化!
在Linux上提供wine;可以虛擬出windows程序運行所依賴的運行庫;
windows上提供cywin:可以虛擬出linux程序運行環境;

libcall和syscall都是高級語言:
高級語言的分類:
系統級高級語言:C, C++ …;開發操作系統;性能要求高的應用
應用級高級語言:java, python, perl, ruby …;性能要求不高的應用;

寫出的程序是文本格式的源碼,源碼如何轉換為對應CPU可執行的指令?
C源碼 –> 預處理 –> 編譯(gcc) –> 匯編 –> 鏈接 –> 二進制程序
java/python源碼在其虛擬機上運行;(jvm, pvm)虛擬機由C/C++所寫的程序;

源碼是分割成幾個部分,目的方便編譯;
如果程序有BUG編譯過程中出現,需要重新編譯所有源碼;但只要拆分源碼,各自獨立編譯,有BUG只修改部分、編譯部分源碼;

在編譯過程序中可能不同源碼片段間有依賴關系,這意味著要能編譯首先你必需可以讀源碼;知道依賴關系才知道誰先編譯誰后編譯;這大多數情況下是不可能的;所以有了項目構建工具:自動實現源碼依賴關系分析,自動調用編譯器完成編譯操作;

項目構建工具:
C/C++: make
java: maven
由項目構建工具根據一些配置文件就可以抹平中間所有復雜環節,直接可以將源碼編譯為對應平臺可運行二進制程序格式;

操作系統
GNU/Linux都是源碼;編譯為二進制程序拼湊在一起就是一個完整的操作系統;

二進制程序的四大組成部分
二進制程序:可運行 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
配置文件:文本格式 /etc
庫:二次開發 /lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
幫助手冊:程序的使用姿式;買個杯子,裝水不用說明書;買個智能洗衣機就需要了;/usr/share/man/man[0-9], /usr/share/doc/application-version

二進制程序的版本
GNU提供的程序: gcc, vi, x-windows …
major.minor.release
major: 主干變化;
minor: 分支變化;
release: 打補丁或修復BUG;

如何安裝二進制程序
早期:將二進制程序的四大組成部分放在不同的的目錄路徑下;這樣很不方便;就有需求能自動實現將這些程序的組成部分自動展開至不同的目錄;于是就有了包管理器;將程序組成部分打包成一個包;不同發行版的包名及對應管理器不同;

三大主流發行版的包名及管理器;
Redhat: rpm包; rpm
Debian: deb包:dpkg
Slackware: rpm包;rpm
注意:rpm是事實上的工業標準

二進制程序包的命名:
name-VERSION.release.arch.rpm
VERSION: major.minor.release
release: release.os
release: 發行版的主版本號
os: 操作系統平臺
arch: 硬件平臺:i386, i486, i586, i686, x86_64, amd64, noarch(用應用級高級語言所寫的程序;只要有虛擬機即可運行:write once, run anywhere)

源碼在編譯為二進制程序后有諸多功能,對于一個桌面終端用戶來講有些功能是不必要的;為了避免浪費空間,安裝不需要的功能;于是將這些程序分別打包成幾個提供不同功能的包;

程序包的分類
主包:與程序包名相同;name-VERSION-release.arch.rpm
支包:name-functions-VERSION-release.arch.rpm (functions: 功能,例如:utils, libs, devel)

程序包管理器的功能:
1、打包程序四個組成部分為一個或幾個包;
2、安裝:展開至指定目錄下;
3、卸載:刪除安裝生成及程序運行生成的文件;
4、查詢、校驗、數據庫重建

多個支包間安裝時可能包間有依賴關系;有時安裝一個程序包其依賴的包手動安裝完需要消耗大量的時,則有一種需求:可以自動解決依賴關系完成自動安裝的程序–>包管理器的前端工具:

包管理器前端工具:自動解決后端管理器的諸多不便之處,自動解決依賴,完成安裝被依賴的程序包;
Redhat: rpm包; rpm, yum
Debian: deb包:dpkg,apt-get
Slackware: rpm包;rpm,zypper
Archlinux: ports

對于一個從來沒有接觸過Linux的人來說,一開始就編譯安裝;你會嚇哭的!所以以下先完成 后端管理器(rpm) –> 前端管理器(yum) –> 編譯安裝;

獲取rpm包:
(1) OS vender提供或鏡像服務器;
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirros.163.com
華中科醫大:http://mirrors.hust.edu.cn
(2) 程序官方
(3) 可信組織:EPEL;

一、rpm命令:

GENERAL OPTIONS
-v: verbose 詳細信息;
-vv: verbose^2 更詳細過程輸出;
-h,–hash:以哈希標識符(hash marks:#)輸出進度條;單個#表示2%進度;

-v: verbose 詳細信息;
Packages]# rpm -i zsh-5.0.2-7.el7.x86_64.rpm
[root@localhost Packages]# rpm -ev zsh
軟件包準備中…
zsh-5.0.2-7.el7.x86_64
-vv: verbose^2 更詳細過程輸出;
Packages]# rpm -ivv zsh-5.0.2-7.el7.x86_64.rpm
-h,–hash:以哈希標識符(hash marks:#)輸出進度條;單個#表示2%進度;
Packages]# rpm -evh zsh
準備中… ################################# [100%]
正在清理/刪除…
1:zsh-5.0.2-7.el7 ################################# [100%]

安裝:rpm [OPTION] -ivh PACKAGE_FILE
[install-options]
–replacepkgs: 替代原來的包,重新安裝;但不能替換配置文件;
–test: potential conflicts. 不安裝,報告潛在的沖突(依賴關系);
–nodeps:忽略依賴關系;不建議;假如依賴其文檔包,可以忽略;
–noscripts:安裝時不執行腳本;
rpm可以自帶腳本4類:
preinstall:安裝過程開始之前運行的腳本; %pre, –nopre
postinstall: 安裝過程完成之后運行的腳本;%post, –nopost
preuninstall: 卸載過程真正開始執行之前運行的腳本;%preun, –nopreun
postuninstall: 卸載過程完成之后運行的腳本;%postun, –nopost
–nosignature:不檢查來源合法性;
–nodigest: 不檢查包完整性;

安裝后重新安裝程序包;
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
軟件包 zsh-5.0.2-7.el7.x86_64 已經安裝
[root@localhost Packages]# rpm –replace -ivh zsh-5.0.2-7.el7.x86_64.rpm
rpm: –replace: 未知的選項
[root@localhost Packages]# rpm –replacepkgs -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]

測試安裝程序包:確定依賴關系;
[root@localhost Packages]# rpm –test -ivh pacemaker-libs-1.1.12-22.el7.x86_64.rpm
錯誤:依賴檢測失?。?br />libcorosync_common.so.4()(64bit) 被 pacemaker-libs-1.1.12-22.el7.x86_64 需要
libqb.so.0()(64bit) 被 pacemaker-libs-1.1.12-22.el7.x86_64 需要

忽略依賴安裝;
[root@localhost Packages]# rpm –test –nodeps -ivh pacemaker-libs-1.1.12-22.el7.x86_64.rpm
準備中… ################################# [100%]
[root@localhost Packages]# rpm –nodeps -ivh pacemaker-libs-1.1.12-22.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:pacemaker-libs-1.1.12-22.el7 ################################# [100%]

安裝zsh不執行腳本:注意:默認安裝在/etc/shells文件中生成了/bin/zsh,忽略腳本后沒有生成;查看腳本方式:在下面查詢命令中;
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost Packages]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh
[root@localhost Packages]# rpm -e zsh
[root@localhost Packages]# rpm –noscripts -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost Packages]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhos

不檢查來源合法性:
[root@localhost Packages]# rpm –test -ivh xz-5.2.2-1.el7.x86_64.rpm
warning: xz-5.2.2-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY <— 請注意:表示來源合法性不通過;
Preparing… ################################# [100%]
package xz-5.2.2-1.el7.x86_64 is already installed
[root@localhost Packages]# rpm –test –nosignature -ivh xz-5.2.2-1.el7.x86_64.rpm <— 不再檢查
Preparing… ################################# [100%]
package xz-5.2.2-1.el7.x86_64 is already installed

不檢查完整性:由上可知不檢查來源合法性就不會有任何警告;

升級:rpm [OPTION] -[UF]vh PACKAGE_FILE
U:升級或安裝;升級失敗就安裝;
F: 僅升級;
–oldpackage: 降級:將新版本程序包降級;
–force:強制升級;
–nodeps:忽略依賴關系;
–test:
注意:
4.0前內核升級后需要重啟,所有不建議升級;新版內核安裝即可;
升級前程序包的配置如果變化,升級后原配置文件會保留;新版本的程序重命名為: .rpmnew

獲取程序包:
[root@localhost ~]# rpm -q zsh 查看當前安裝的版本
zsh-5.0.2-7.el7.x86_64
[root@localhost ~]# ls -l zsh-5.0.2-7.el7_1.2.x86_64.rpm 獲取的版本
-rw-r–r– 1 root root 2489616 11月 15 20:44 zsh-5.0.2-7.el7_1.2.x86_64.rpm

-F選項只能升級;
[root@localhost ~]# rpm -e zsh (掛載包)
[root@localhost ~]# rpm -Fvh zsh-5.0.2-7.el7_1.2.x86_64.rpm
[root@localhost ~]# rpm -q zsh
未安裝軟件包 zsh

安裝舊版本,升級新版本
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost Packages]# cd
[root@localhost ~]# rpm -Fvh zsh-5.0.2-7.el7_1.2.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7_1.2 ################################# [ 50%]
正在清理/刪除…
2:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost ~]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64

-U可安裝,可升級:
[root@localhost ~]# rpm -e zsh
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-7.el7.x86_64

可升級
[root@localhost ~]# rpm -Uvh zsh-5.0.2-7.el7_1.2.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7_1.2 ################################# [ 50%]
正在清理/刪除…
2:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost ~]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64

–oldpackage 降級:僅適用于-U
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64
[root@localhost Packages]# rpm –oldpackage -Fvh zsh-5.0.2-7.el7.x86_64.rpm
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64
[root@localhost Packages]# rpm –oldpackage -Uvh zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [ 50%]
正在清理/刪除…
2:zsh-5.0.2-7.el7_1.2 ################################# [100%]
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-7.el7.x86_64

如果原配置改變;升級后,新版本配置文件會保留為.rpmsave,仍使用舊版本配置;
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-7.el7.x86_64
[root@localhost Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@localhost Packages]# echo “123” >> /etc/zshenv <– 升級前
[root@localhost Packages]# cd
[root@localhost ~]# rpm -Fvh zsh-5.0.2-7.el7_1.2.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7_1.2 ################################# [ 50%]
正在清理/刪除…
2:zsh-5.0.2-7.el7 ################################# [100%]
[root@localhost ~]# ls /etc/zshenv*
/etc/zshenv /etc/zshenv.rpmsave
[root@localhost ~]# tail -2 /etc/zshenv.rpmsave <– 新版配置文件;
#

[root@localhost ~]# tail -2 /etc/zshenv <– 升級后,原配置文件;

123

卸載:rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
PACKAGE_NAME:包的簡短名;
–allmatches:卸載指定程序包的各版本;
–nodeps:忽略依賴關系;
–test:dry run模式
注意:卸載前配置有如果變化,卸載后配置文件會保留,并重命名為:.rpmsave

使用示例:
原配置文件改變過,卸載時配置文件會保留為.rpmsave文件名;
[root@localhost ~]# rpm -q zsh
zsh-5.0.2-7.el7_1.2.x86_64
[root@localhost ~]# rpm -e zsh
警告:/etc/zshenv 已另存為 /etc/zshenv.rpmsave
[root@localhost ~]# ls /etc/zshenv*
/etc/zshenv.rpmsave
[root@localhost ~]# cat /etc/zshenv.rpmsave
#
# /etc/zshenv is sourced on all invocations of the
# shell, unless the -f option is set. It should
# contain commands to set the command search path,
# plus other important environment variables.
# .zshenv should not contain commands that produce
# output or assume the shell is attached to a tty.
#

123

忽略依賴刪除:
[root@localhost ~]# rpm -e gcc <– 先刪除被依賴的包,才能刪除自己; gcc-c++ 依賴gcc, gcc被gcc-c++依賴;
error: Failed dependencies:
gcc = 4.8.3-9.el7 is needed by (installed) libquadmath-devel-4.8.3-9.el7.x86_64
gcc is needed by (installed) systemtap-devel-2.6-8.el7.x86_64
gcc = 4.8.3-9.el7 is needed by (installed) gcc-c++-4.8.3-9.el7.x86_64
gcc = 4.8.3-9.el7 is needed by (installed) gcc-gfortran-4.8.3-9.el7.x86_64
[root@localhost ~]# rpm –nodeps -e gcc
[root@localhost ~]# rpm -q gcc
package gcc is not installed

查詢:rpm -q [查詢程序包 | 查詢包內信息 ] PACKAGE_NAME
默認查詢已經安裝過的程序包;-p選項:可以改變默認,查詢未安裝的程序包;PACKAGE_NAME必須是完整包名:PACKAGE_FILE
查詢程序包:
-a 查詢所有已經安裝過的程序包列表;
-f /PATH/TO/SOMEFILE 查詢此文件由哪個程序包生成;
-g, –group GROUP 查詢GROUP內的包;
–whatprovides CAPABILITY 查詢CAPABILITY( 特性 )由哪個程序包提供; (特性:是程序包安裝后生成的)
–whatrequires CAPABILITY 查詢CAPABILITY被哪個程序包依賴;
查詢程序包內信息:
–changelog 查詢rpm包的 修改日志;
-l,–list 查詢rpm包 生成的文件列表;
-i, information 查詢rpm包的 information;
-c, –configfiles 查詢rpm包生成的 配置文件;
-d, –docfiles 查詢rpm包生成的 幫助文檔
–provides 查詢rpm包生成的 CAPABILITY;
–requires 查詢rpm包依賴的 CAPABILITY;
–scripts 查詢rpm包的 腳本;

查詢安裝的所有程序包:rpm -qa
查詢指定文件由哪個包生成:[root@localhost ~]# rpm -q -f /etc/fstab
查詢CAPABILITY( 特性 )由哪個程序包提供; (特性:是程序包安裝后生成的):[root@localhost ~]# rpm -q –whatprovides bash
查詢CAPABILITY被哪個程序包依賴;[root@localhost ~]# rpm -q –whatrequires bash
查詢修改日志:[root@localhost ~]# rpm -q –changelog bash
查詢生成的文件列表;[root@localhost ~]# rpm -q -l bash
查詢information: [root@localhost ~]# rpm -q -i bash
查詢configfile: [root@localhost ~]# rpm -q -c bash
查詢幫助文檔:[root@localhost ~]# rpm -q -d bash
查詢生成的CAPABILITY: [root@localhost ~]# rpm -q –provides bash
查詢依賴的CAPABILITY: [root@localhost ~]# rpm -q –requires bash
查詢腳本:[root@localhost ~]# rpm -q –scripts bash
查詢程序包被誰依賴:查看其提供的CAPABILITY被誰依賴:
[root@localhost ~]# rpm -q –provdes bash
[root@localhost ~]# rpm -q –whatprovides CAPABILITY

校驗:
完整性:rpm -V PACKAGE_FILE
S file Size differs
M 權限
5 MD5值改變;
D 主次設備號
L readLink(2) 路徑不匹配
U 屬主
G 屬組
T mTime 最近一次修改時間戳改變;
P CAPABILITY 改變;

安裝后不修改
[root@localhost ~]# rpm -i zsh-5.0.2-7.el7_1.2.x86_64.rpm
[root@localhost ~]# rpm -V zsh
注意:沒有返回值

安裝后修改:
[root@localhost ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@localhost ~]# echo “123” >> /etc/zlogin
[root@localhost ~]# rpm -V zsh
S.5….T. c /etc/zlogin
[root@localhost ~]# useradd centos
useradd: user ‘centos’ already exists
[root@localhost ~]# chown centos.centos /etc/zlogout
[root@localhost ~]# rpm -V zsh
S.5….T. c /etc/zlogin
…..UG.. c /etc/zlogout

合法性:
導入信任的包制作者的公鑰:# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
手動驗證單個文件
# rpm -K PACKAGE_FILE

校驗: 校驗包的數字簽名:
數字簽名: 用非對稱加密的私鑰加密對數據提供的指紋;
非對稱加密: 加密算法一種;有公鑰和私鑰:用公鑰加密只能用與之配對的私鑰解密;公鑰可以公開,私鑰不能公開;
數據指紋提取: 單向加密可以完成數據指紋提供;

包的提供方:
1、保證數據完整性:單向加密提供包的特征碼;
2、保證數據的來源合法性:用私鑰加密特征碼;
用戶:
1、用公開的公鑰解密私鑰加密的特征碼,即完成身份驗證:(原因:用私鑰加密只能用與之匹配的公鑰解密)
2、對數據進行單向加密提取特征碼,與解密出的特征碼比對;相同時,即完成完整性校驗 (原因:特征碼類似人類的指紋,世界上不可能有兩片相同的樹葉)

默認
[root@localhost Packages]# rpm –test -ivh xz-5.2.2-1.el7.x86_64.rpm
warning: xz-5.2.2-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing… ################################# [100%]
package xz-5.2.2-1.el7.x86_64 is already installed
導入公鑰:
[root@localhost Packages]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost Packages]# rpm –test -ivh xz-5.2.2-1.el7.x86_64.rpm
Preparing… ################################# [100%]
package xz-5.2.2-1.el7.x86_64 is already installed
檢驗單個文件:
[root@localhost Packages]# rpm -K xz-5.2.2-1.el7.x86_64.rpm
xz-5.2.2-1.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

數據庫維護:rpm {–rebuilddb|–initdb}
rpm數據庫目錄:/var/lib/rpm
–initdb: 如果數據庫不存在,則初始化;
–rebuilddb: 直接,重建數據庫;

注意:不能手動破壞并測試;刪除后不能重構和初始化

測試刪除數據庫重建:
[root@localhost ~]# mkdir -v /backups
[root@localhost ~]# cp -a /var/lib/rpm /backups/
[root@localhost ~]# du -sh /var/lib/rpm
59M /var/lib/rpm
[root@localhost ~]# rpm -qa
注意:顯示正常;

[root@localhost ~]# rm -rf /var/lib/rpm
[root@localhost ~]# mkdir /var/lib/rpm
[root@localhost ~]# rpm -qa
注意:不顯示

重建數據庫:
[root@localhost ~]# rpm –initdb
[root@localhost ~]# ls /var/lib/rpm
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
[root@localhost ~]# rpm -qa
注意:不顯示

恢復備份:
[root@localhost ~]# rm -rf /var/lib/rpm
[root@localhost ~]# cp -a /backups/rpm /var/lib
[root@localhost ~]# rpm -qa
注意:顯示正常;

二、yum命令
YUM: (Yellow Update Modifier), 作者yellow dog, yellow dog也是redhat的一個發行版;
1、自動解決依賴關系;
2、未能很好處理事務中斷恢復;Fedora 23之后已經用dnf取代了yum;dnf同yum命令操作;
3、工作模式,訪問文件機制是C/S架構;C:yum命令, S: yum倉庫指向的文件服務器;

文件服務器:
http://
ftp://
nfs://
file://

工作模式:
首次使用yum時:
1、yum接收到用戶的命令,向”配置文件中定義的yum倉庫指向的文件服務器”去獲取”元數據文件”;
元數據文件:抽取所有程序包元數據(依賴關系、包名、版本 …)為多個壓縮文件;
2、將元數據下載至本地”緩存”;(/var/lib/yum)
3、從元數據中分析將要安裝程序包的依賴關系,查找本地所有程序包,得到一個依賴且未安裝的程序包列表;
4、從”yum源”下載程序包至本地”緩存”,先安裝依賴,后安裝被依賴的包;

之后每次使用yum時:
1、從”yum源”獲取元數據的特征碼;
2、與本地緩存中元數據的特征碼對比;
3、相同:繼續以上步驟:3-4;
4、不同:繼續以上步驟:2-4;

使用yum要求:
1、yum命令、rpm命令存在;
2、配置文件:其內部有一個或多個yum倉庫;
3、yum倉庫:本地自建(節約帶寬)或鏡像站點;

1、yum命令、rpm命令存在;
[root@localhost ~]# rpm -q rpm
rpm-4.11.3-25.el7.x86_64
[root@localhost ~]# rpm -q yum
yum-3.4.3-154.el7.centos.noarch

2、配置文件:其內部有一個或多個yum倉庫;
公共配置:/etc/yum.conf, yum倉庫配置文件:/etc/yum.repos.d/*.repo
獲取配置格式:# man 5 yum.conf

/etc/yum.conf
[main] yum倉庫的名稱/ID: main表示倉庫的公共配置
cachedir=/var/cache/yum/$basearch/$releasever 定義緩存目錄
keepcache=0 下載的緩存文件是否保存?
debuglevel=2 調試級別?
logfile=/var/log/yum.log 安裝后日志文件指向?
exactarch=1 是否做精確嚴格的平臺匹配: el7是否能安裝el6?
obsoletes=1 廢棄程序包是否使用?
gpgcheck=1 是否檢查合法?
plugins=1 插件支持?
installonly_limit=5 最多一次安裝幾個?
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release BUG報告?

/etc/yum.repos.d/*.repo:配置文件中定義一個或多個倉庫
[repoid] 倉庫名
name= 倉庫完整名: 功能完整描述
baseurl 倉庫訪問的單個或多個URL(指向repodata) 文件服務器: ftp, http, nfs, file:///
多個URL類似于鏡像功能:不便管理
多個目的:避免服務器出現故障;
mirrorlist: 以鏡像方式指明URL; 互聯網上存放文件,文件中有多個URL;yum必須支持插件功能 ;
enabled={1|0 } 是否啟用倉庫;默認啟用;
gpgcheck={1|0 } 是否檢查其完整性及來源合法性:默認1
repo_gpgcheck 是否檢查倉庫元數據庫文件的完整性及來源合法性;
gpgkey 指明倉庫提供的公鑰URL;完成檢查 完整性及來源合法性;
enablegroups={1|0 } 默認為1,是否支持在此倉庫上使用組來批量管理程序包;
failovermethod={roundrobin|priority} 故障轉移方法;多個URL,第1個壞了使用哪個?
‘roundrobin’ 隨機,默認
‘priority’ 從上而下查找;
keepalive HTTP1.1時是否使用保持連接功能;
bandwidth 指明帶寬;[main]
password 指明服務器訪問的密碼;
cost=1000 開銷;默認1000;同類倉庫有相同程序包時使用開銷小的;多個倉庫有同一個版本的應用程序,優先使用cost小的程序;
#開頭表示注釋;

配置文件變量:
$releasever 當前OS發行版的主版本號
$arch 平臺 i386, i486, i586, i686, x86_64
$basearch 基礎平臺: i386, i486, i586, i686 均為i386;x86_64
$YUM0-$YUM9

配置本地yum倉庫:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base.repo{,.bak}
[root@localhost yum.repos.d]# cat CentOS-Base.repo
[C7CentOS]
name=CentOS Linux release 7.4.1708 (Core)
baseurl=file:///media/cdrom
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

3、yum倉庫:本地自建或鏡像站點;
本地自建:節約帶寬;例如:1萬臺主機到鏡像下載1萬次和在本地下載1萬次;

createrepo命令

yum命令
yum [options] [command] [package …]
options:
–nogpgcheck: 禁用gpgcheck(完整性及來源合法性), 配置gpgcheck=1也會被阻止;
-y: 自動回答為”yes”
-q, –quiet: 靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的倉庫[repoid];
–enablerepo=repoidglob: 臨時啟用此處指定的倉庫[repoid];
–noplugins:臨時禁用所有插件;[main] 配置中 plugins

安裝程序包,不禁用檢驗:
[root@localhost ~]# yum reinstall xfsprogs
Total download size: 895 k
Installed size: 3.9 M
Is this ok [y/d/N]: y
Downloading packages:
warning: /media/cdrom/Packages/xfsprogs-4.5.0-12.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for xfsprogs-4.5.0-12.el7.x86_64.rpm is not installed
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : “CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>”
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-4.1708.el7.centos.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]:

禁用檢驗:
[root@localhost ~]# yum –nogpgcheck reinstall xfsprogs
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction

不禁用插件:
[root@localhost ~]# yum reinstall xfsprogs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies

禁用插件
[root@localhost ~]# yum –noplugins reinstall xfsprogs
Resolving Dependencies

禁用倉庫
[root@localhost ~]# yum –disablerepo=C7CentOS –noplugins reinstall xfsprogs
There are no enabled repos.
Run “yum repolist all” to see the repos you have.
To enable Red Hat Subscription Management repositories:
subscription-manager repos –enable <repo>
To enable custom repositories:
yum-config-manager –enable <repo>

[root@localhost ~]# yum –disablerepo=C7CentOS –noplugins repolist
repolist: 0

command is one of:
help [command] 命令使用幫助

顯示倉庫信息:
程序包:* repolist [enabled|disabled|all]
enabled: 啟用;默認
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
C7CentOS CentOS Linux release 7.4.1708 (Core) 9,591
repolist: 9,591
[root@localhost ~]# yum repolist enabled
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
C7CentOS CentOS Linux release 7.4.1708 (Core) 9,591
repolist: 9,591
[root@localhost ~]# yum repolist disabled
[root@localhost ~]# yum repolist all

包組:* grouplist
Installed Groups: 已經安裝的組
Available Groups: 未安裝的組
Available Language Groups: 未安裝的語言組
[root@localhost ~]# yum grouplist

安裝:# rpm -ivh
程序包:
網絡:* install package1 [package2] […]
本地:* localinstall rpmfile1 [rpmfile2] […] 兼容(CentOS 5)而留下;建議使用 install安裝

包組:* groupinstall group1 [group2] […]
[root@localhost ~]# yum groupinstall “Development Tools”

重裝:* reinstall package1 [package2] […]
# rpm -ivh –replacepkgs
[root@localhost ~]# yum reinstall bash

注意:默認安裝較新版本,使用老版本,需要自帶版本號;例如: gcc: gnu c complier 編譯器 gcc-4.5.4

升級程序包:# rpm -[U|F]vh
* update [package1] [package2] […]
[root@localhost ~]# yum update

降級:* downgrade package1 [package2] […]
# rpm -[U|F]vh –oldpackage

檢查升級: * check-update
[root@localhost ~]# yum check-update

卸載程序包:# rpm -e
* remove | erase package1 [package2] […]
注意:卸載程序包,此包依賴的包會一并卸載;
[root@localhost ~]# yum remove bash

查詢程序包:# rpm -q
程序包:
查看特性由哪個程序包所提供:* whatprovides feature1 [feature2] […]
# rpm -q –whatprovides 特性由哪個程序包提供
# rpm -q –whatrequires 特性由哪個程序包依賴
# rpm -q -f 文件由哪個程序包提供
[root@localhost ~]# yum whatprovides /bin/ls
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
coreutils-8.22-18.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo : C7CentOS
Matched from:
Filename : /bin/ls

coreutils-8.22-18.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo : @anaconda
Matched from:
Filename : /bin/ls

查看所有程序包:list [all|available|updates|installed|extra|obsoletes] [glob_exp1] […]
all 顯示所有,默認;
available 可用,未安裝
updates 升級包
extra 額外包
obsoletes 廢棄的
glob_exp 支持glob格式的通配符;# yum list php*
# rpm -q -a
[root@localhost ~]# yum list bash*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
bash.x86_64 4.2.46-28.el7 @anaconda
Available Packages
bash-completion.noarch 1:2.1-6.el7 C7CentOS
bash-doc.x86_64 4.2.46-28.el7 C7CentOS
[root@localhost ~]#
29 yum list available
30 yum list updates
31 yum list installed
32 yum list extra
33 yum list obsoletes

以模式搜索程序包名及summary信息:* search string1 [string2] […]
summary: # rpm -q -i
相當于:rpm -qa | grep “”
[root@localhost ~]# yum search bash
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
============================================ N/S matched: bash =============================================
bash-completion.noarch : Programmable completion for Bash
bash-doc.x86_64 : Documentation files for bash
libguestfs-bash-completion.noarch : Bash tab-completion scripts for libguestfs tools
pcp-pmda-bash.x86_64 : Performance Co-Pilot (PCP) metrics for the Bash shell
bash.x86_64 : The GNU Bourne Again shell

Name and summary matches only, use “search all” for everything.

包內:
information:* info […]
# rpm -q -i
[root@localhost ~]# yum info bash
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
Name : bash
Arch : x86_64
Version : 4.2.46
Release : 28.el7
Size : 3.5 M
Repo : installed
From repo : anaconda
Summary : The GNU Bourne Again shell
URL : http://www.gnu.org/software/bash
License : GPLv3+
Description : The GNU Bourne Again shell (Bash) is a shell or command language
: interpreter that is compatible with the Bourne shell (sh). Bash
: incorporates useful features from the Korn shell (ksh) and the C shell
: (csh). Most sh scripts can be run by bash without modification.

詳細信息:* groupinfo […]
Mandatory Packages: 必需安裝
Default Packages: 默認安裝
Optional Packages: 可選安裝
[root@localhost ~]# yum groupinfo “Development Tools”

查看程序包依賴的特性:* deplist
# rpm -q –requires 程序包依賴的特性
# rpm -q –provides 程序包提供的特性;

version:
* version
[root@localhost ~]# yum version
Loaded plugins: fastestmirror
Installed: 7/x86_64 330:f56bc33e64789e69dab64f1c124b906aea0f9a1e
Group-Installed: yum 14:82872eae0769d1e579cb33465dba19a0c9ea374c
version

yum事務歷史查詢:
* history [list|info|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
list
summary 摘要
stats 統計數據
[root@localhost ~]# yum history
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
——————————————————————————-
3 | root <root> | 2017-10-06 19:39 | Reinstall | 1 **
2 | root <root> | 2017-10-06 08:43 | Install | 31
1 | System <unset> | 2017-10-06 15:58 | Install | 299
history list
[root@localhost ~]# yum history summary
Loaded plugins: fastestmirror
Login user | Time | Action(s) | Altered
——————————————————————————-
System <unset> | Last day | Install | 299
root <root> | Last day | I, R | 32
history summary
[root@localhost ~]# yum history stats
Loaded plugins: fastestmirror
File : //var/lib/yum/history/history-2017-10-06.sqlite
Size : 406,528
Transactions: 2
Begin time : Fri Oct 6 15:58:27 2017
End time : Fri Oct 6 08:43:51 2017
Counts :
NEVRAC : 330
NEVRA : 330
NA : 330
NEVR : 330
rpm DB : 330
yum DB : 330
history stats

事務:yum命令執行一次(修改類的操作:安裝、升級、卸載)叫一個事務
隔離性:一個terminal開始,另一個終端不能開始;
一次只能完成一次事務;
Running transaction check 事務檢查
Running transaction test 事務測試
Transaction test succeeded 事務測試成功
Running transaction 運行事務

數據庫:
清理緩存:
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

packages: 程序包
metadata: 元數據
expire-cache: 過期緩存
rpmdb: 數據庫
plugins

生成緩存;yum倉庫安裝時會先比較緩存;再下載元數據緩存
* makecache
# rpm –initdb|–rebuilddb [–dbpath DIR]

[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: C7CentOS
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@localhost ~]# yum makecache
Loaded plugins: fastestmirror
C7CentOS | 3.6 kB 00:00:00
(1/4): C7CentOS/group_gz | 3.5 kB 00:00:00
(2/4): C7CentOS/filelists_db | 291 kB 00:00:00
(3/4): C7CentOS/primary_db | 750 kB 00:00:00
(4/4): C7CentOS/other_db | 191 kB 00:00:00
Determining fastest mirrors
Metadata Cache Created

三、編譯安裝

開源程序源代碼獲?。?br />項目官方:
apache.org (ASF)
mariadb.org

代碼托管:
SourceForge
Github.com
code.google.com
軟件:用編程語言所寫的程序代碼(源代碼)
源代碼:編譯為二進制程序方可運行;
C源碼 –> 預處理 –> 編譯(gcc) –> 匯編 –> 鏈接 –> 二進制程序;
整個過程用項目構建工具即可完成;
C:make:根據Makefile配置文件完成;
java: maven

開發工具:
autoconf: 生成configure腳本;
automake: 生成Makefile.in;

autoconf –> configure
automake –> Makefile.in
confiure + Makefile.in –> Makefile
make + Makefile –> 完成編譯

編譯安裝步驟:
提供開發環境
C6:”Development Tools” “Server Platform Development”
C7: “Development Tools”

1、configure: 根據用戶給定的參數,生成配置文件;
–prefix 程序默認安裝路徑
–sysconfdir 配置文件安裝路徑
–disable-FEATURE: 默認啟用時;此選項表示禁用;
–enable-FEATURE 默認禁用;此選項表示啟用;
–with-PACKAGE[=ARG] 依賴的包;
–without-PACKAGE 決不依賴的包;

2、make:根據生成的Makefile文件完成編譯生成二進制程序文件;
3、make install:將二進制程序文件復制到指定目錄中;

編譯后的步驟:手動完成,rpm包管理器;可自動完成;
導出二進制程序
/etc/profile.d/*.sh
export PATH

導出庫文件
/etc/ld.so.conf.d/*.conf
ldconfig [-v]
導出頭文件
ln -s
導出幫助手冊
man.config || man_db.conf
MANPATH

編譯安裝apache 2.2;啟動此服務”It works”
安裝開發環境:
# yum groupinstall “Development Tools”
編譯:
# tar xf httpd-2.2.29.tar.bz2
# cd httpd-2.2.29
# ./configure –prefix=/usr/local/apache2 –sysconfdir=/etc/apache2
# make
# make install
編譯后步驟:
[root@localhost ~]# cd /usr/local/apache2/
[root@localhost apache2]# ls
bin build cgi-bin error htdocs icons include lib logs man manual modules
1、導出二進制程序:
# vim /etc/profile.d/apache2.sh
export PATH=/usr/local/apache2/bin:${PATH}
. /etc/profile.d/apache2.sh
2、導出庫;
# vim /etc/ld.so.conf.d/apache2.conf
/usr/local/apache2/lib
3、導出頭文件;
ln -s /usr/local/apache2/include /usr/include/apache2

4、導出幫助手冊;
# vim /etc/man_db.conf
MANPATH_MAP /usr/local/apache2/bin /usr/local/apache2/man

[root@localhost ~]# apachectl start
httpd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain for ServerName
[root@localhost ~]# ss -tnl
LISTEN 0 128 :::80 :::*

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89046

(0)
逆神陽逆神陽
上一篇 2017-11-27
下一篇 2017-11-27

相關推薦

  • iptables

    iptables 包過濾型的防火墻 Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件; 主機防火墻網絡防火墻 軟件防火墻(軟件邏輯)硬件防火墻(硬件和軟件邏輯) 版本 ipfw (firewall framework):命令行工具,生成規則并送…

    Linux干貨 2017-06-13
  • Linux程序包管理(rpm、yum、make)

    linux系統程序安裝的方法有rpm yum 以及make手動編譯3種方法: rpm這個機制最早由Redhat公司開發出來,后來由于實在好用,所以被很多發行版所使用作為軟件安裝的管理方式。不過由于使用RPM安裝軟件時有時會涉及到文件的依賴信,此時需要手動去逐個安裝被依賴的包操作起來十分復雜,于是yum這種線上升級的機制便出現了,它會自己主動解決各文件的依賴關…

    Linux干貨 2017-10-02
  • Linux命令之:setfacl和getfacl

    命令總結之:setfacl和getfacl acl:access control list,實現靈活的權限管理 除了文件的所有者,所屬組合其他人,可以對更多的用戶設置權限 acl生效順序:所有者、自定義用戶、自定義組、其他人 1、首先我們查看man幫助文檔說明 [root@centos7 sixijie]# man setfac…

    Linux干貨 2016-08-04
  • 救援模式安裝RPM

    救援模式安裝RPM 步驟如下: (1)先讓RPM“自殺”掉,必須要使用忽略依賴選項—nodeps,否則卸載不了RPM程序。 (2)卸載完成后,將機器重啟,按F2鍵進入機器的BIOS模式,如下圖選擇CD-ROM啟動,最后按F10保存退出。 (3)機器將會從光驅上使用光盤文件做引導啟動,如下圖界面,相信大家都非常熟悉,該界面在我們安裝新系統的時候,也會見到。啰嗦…

    Linux干貨 2016-08-26
  • shell腳本練習題

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信 息,包括主機名,IPv4地址,操作系統版本,內核版本, CPU型號,內存大小,硬盤大小。 #!/bin/bash ##編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信 息,包括主機名,IPv4地址,操作系統版本,內>核版本, C…

    Linux干貨 2016-08-24
  • N25_第十一周的作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 2、描述創建私有CA的過程,以及為客戶端發來的證書請求進行辦法證書。 3、描述DNS查詢過程以及DNS服務器類別。          第一段:主機到運營商的DNS服務器(遞歸)    &nbs…

    Linux干貨 2017-02-22
欧美性久久久久