yum使用和源碼編譯進程

yum 是通過分析RPM的標頭數據,根據各軟件的依賴關系制作出有依賴關系時的解決方案,然后自動處理軟件的依賴性問題,以解決軟件安裝或升級的問題。

 yum使用方法:

yum [options] [command] [packages …]

  • install package .. 通過yum安裝軟件包

  • update package .. 更新軟件包

  • update-to 升級到#版本

  • list [ … ] 列出軟件包

  • info [ … ] 查詢相關信息

  • clean  [ … ] 清除本地緩存

  • makecache 創建本地緩存

  • groupinstall  [ … ] 程序組升級

  • grouplist 查看現有的程序組

Image 201607271749Image 201607271750Image 201607271817Image 201607271650

 

yum 命令行選項(options):

  • –nogpgcheck:禁止進行gpg check ,禁用 GPG 簽名檢查,(啟用gpgcheck 會在每次安裝時檢查密鑰是否正確)

  • -y :自動回答為yes

  • -q :安靜模式

  • –disablerepo=repoidglob:臨時禁用此處指定的repo

  • –enablerepo=repoidglob:臨時啟用此處指定的repo

  • –noplugins:禁用所有插件

yum的repo配置文件中可用的變量

遠程倉庫格式固定,提供變量自動獲取發行版的架構和版本:

  • $releasever: 當前os的發行版的主版本號

  • $arch:平臺

  • $basearch:基礎平臺

  • $YUM0-$YUM9

創建YUM倉庫:createrepo

createrepo [options] [dir]

  • –basedir dir :指定repo data目錄。

  • 生成的xml文件,儲存了倉庫數據文件的校驗碼

  • 生成的數據文件以UUID作為文件首命名

Image 201607271823Image 201607271824

程序包的編譯安裝:

testapp-Version-release.src.rpm ==》安裝后,使用rpmbuild命令制成二進制格式的rpm包,然后再安裝

 

源代碼 =》 預處理 =》 編譯 (gcc)=》匯編 =》 鏈接=》執行

源代碼的組織格式:

多文件:模塊化,文件的代碼之間,很可能存在跨文件的依賴關系。

c、c++ : make ( configure –> Makefile.in –> makefile)

編譯安裝三步驟:

1.configure:

  • 1、通過選項傳遞參數,指定啟用特性,安裝路徑;執行時會參考用戶的makefile.in 生成Makefile文件,

  • 2、檢查依賴到外部環境

2.make:根據makefile文件,構建應用程序

3.make install (復制文件到指定目錄)

開發工具:

  • autoconf:生成configure 腳本

  • automake: 生成makefile.in

建議:安裝前查看INSTALL,README

開源程序源代碼的獲取:

官方自建站點

apache.org ….

代碼托管<相關站點>:

  • SourceForge

  • Github.com

  • code.google.com

 

configure編譯選項:

  • –help:查看編譯幫助

目錄指定:

  • –prefix: 指定默認安裝路徑,默認為/usr/local

  • –sysconfdir:指定配置文件安裝路徑

 

依賴關系:

  • –with-CAPABILITY:依賴的安裝包

  • –without-CAPABILITY:

可選功能啟用|禁用:

  • –enable-some

  • –disable-some

交叉編譯選項:

System types(目標系統平臺結構):

  • –build=

常用變量:

預定義配置腳本需要的變量,方便調用

 

安裝后的配置:

1、導出二進制程序至PATH環境變量中:

編輯文件/etc/profile.d/name.sh

export PATH=/path/to/bin/program

2、導出庫文件路徑

編輯 /etc/ld.sh.conf.d/name.conf

添加新的庫文件所在目錄到此文件中;

讓系統重新生成緩存

3、導出頭文件

基于鏈接的方式實現:

ln -sv

4、導出幫助手冊

編輯/etc/man.config文件

添加一個MANPATH

API: Application Programming Interface
POSIX: Portable OS
程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接
ABI: Application Binary Interface
ELF(Executable and Linkable Format)
PE( Portable Executable)
庫級別的虛擬化:
Linux: WINE
Windows: Cywin4

包管理器
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
程序包管理器:

  • debian: deb文件, dpkg包管理器

  • redhat: rpm文件, rpm包管理器

  • rpm: Redhat Package Manager

  • RPM Package Manager8

包命名
源代碼: name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例: bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release: release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平臺無關: noarch9
包命名和工具

包:分類和拆包

  • Application-VERSION-ARCH.rpm: 主包

  • Application-devel-VERSION-ARCH.rpm 開發子包

  • Application-utils-VERSION-ARHC.rpm 其它子包

  • Application-libs-VERSION-ARHC.rpm 其它子包

包之間:可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:

  • yum: rpm包管理器的前端工具

  • apt-get: deb包管理器前端工具

  • zypper: suse上的rpm前端管理工具

  • dnf: Fedora 18+ rpm包管理器前端管理工具10

庫文件
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件: /etc/ld.so.cache11
包管理器
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成 (每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息

程序包的來源
管理程序包的方式:
使用包管理器: rpm
使用前端工具: yum, dnf

獲取程序包的途徑:

(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com

(2) 項目官方站點13
程序包的來源

(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:檢查其合法性: 來源合法性,程序包的完整性
rpm包管理
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#顯示程序包管理執行進度
rpm -ivh PACKAGE_FILE …15
rpm包安裝
[install-options]

  • –test: 測試安裝,但不真正執行安裝; dry run模式

  • –nodeps:忽略依賴關系

  • –replacepkgs | replacefiles

  • –nosignature: 不檢查來源合法性

  • –nodigest:不檢查包完整性

  • –noscripts:不執行程序包腳本

%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun16

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: 強行升級17
升級注意項
注意:
(1) 不要對內核做升級操作; Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

包查詢

rpm {-q|–query} [select-options] [query-options]

[select-options]

  • -a: 所有包

  • -f: 查看指定的文件由哪個程序包安裝生成

  • -p rpmfile:針對尚未安裝的程序包文件做查詢操作;

  • –whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供

  • –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件

[query-options]

  • –changelog:查詢rpm包的changelog

  • -c: 查詢程序的配置文件

  • -d: 查詢程序的文檔

  • -i: information

  • -l: 查看指定的程序包安裝后生成的所有文件;

  • –scripts:程序包自帶的腳本

  • -R: 查詢指定的程序包所依賴的CAPABILITY;

  • –provides: 列出指定程序包所提供的CAPABILITY;

包查詢

查詢用法:

  • -qi PACKAGE, -qf FILE, -qc PACKAGE, -qlPACKAGE, -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]

  • 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 differ22

包來源合法性驗正及完整性驗正:

完整性驗正: 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*23
rpm數據庫
數據庫重建:
/var/lib/rpm

rpm {–initdb|–rebuilddb}

initdb: 初始化
如果事先不存在數據庫,則新建之, 否則,不執行任何操作

rebuilddb:重建已安裝的包頭的數據庫索引目錄24

yum
CentOS: yum, dnf
YUM: Yellowdog Update Modifier, rpm的前端程序,用來
解決軟件包相關依賴性,可以在多個庫之間定位軟件包,
up2date的替代工具
yum repository: yum repo,存儲了眾多rpm包,以及
包的相關的元數據文件(放置于特定目錄repodata下)
文件服務器:
ftp://
http://
file:///
yum配置文件
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}
默認為: roundrobin,意為隨機挑選;
cost= 默認為100026

yum命令

用法:
yum [options] [command] [package …]

  • yum-config-manager –add-repo=http://10.1.0.1/cobbler/ks_mirror/CentOS-Xx86_64/

  • yum-config-manager –disable “倉庫名” 禁用倉庫

  • yum-config-manager –enable “倉庫名” 啟用倉庫

  • yum-config-manager28

顯示倉庫列表:
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] […] (重新安裝)29

升級程序包:
yum update [package1] [package2] […]
yum downgrade package1 [package2] […] (降級)
檢查可用升級:
yum check-update
卸載程序包:
yum remove | erase package1 [package2] […]30
查看程序包information:
yum info […]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2][…]
清理本地緩存:
yum clean [ packages | metadata | expire-cache |
rpmdb | plugins | all ]
構建緩存:
yum makecache31
搜索: 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

日志 : /var/log/yum.log32

安裝及升級本地程序包:

  • 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 […]33

如何使用光盤當作本地yum倉庫:
(1) 掛載光盤至某目錄,例如/media/cdrom
# mount /dev/cdrom /media/cdrom
(2) 創建配置文件

[CentOS7]
name=
baseurl=
gpgcheck=
enabled=

yum的命令行選項:

  • –nogpgcheck:禁止進行gpg check

  • -y: 自動回答為“ yes”

  • -q:靜默模式

  • –disablerepo=repoidglob:臨時禁用此處指定的repo

  • –enablerepo=repoidglob:臨時啟用此處指定的repo

  • –noplugins:禁用所有插件35

yum倉庫

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

實例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
創建yum倉庫:
createrepo [options] <directory>36
程序包編譯
程序包編譯安裝:
Application-VERSION-release.src.rpm –> 安裝后,使
用rpmbuild命令制作成二進制格式的rpm包,而后再安裝
源代碼–>預處理–>編譯–>匯編–>鏈接–>執行

源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系
C、 C++: make (項目管理器, configure –>
Makefile.in –> makefile)
java: maven37

編譯安裝
C代碼編譯安裝三步驟:
1、 ./configure:
(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執
行時會參考用戶的指定以及makefile.in文件生成makefile
(2) 檢查依賴到的外部環境,如依賴的軟件包
2、 make:根據makefile文件,構建應用程序
3、 make install:復制文件到相應路徑

c/c++編譯器: gcc (GNU C Complier)
編譯安裝
編譯C源代碼:
準備: 提供開發工具及開發環境
開發工具: make, gcc等
開發環境:開發庫,頭文件
glibc:標準庫
實現:通過“包組”提供開發組件

CentOS 6:
Development Tools
Server Platform Development

CentOS 7:
Development Tools
Development and Creative Workstation

編譯安裝
第一步: configure腳本
選項:指定安裝位置、指定啟用的特性
–help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
–prefix=/PATH: 指定默認安裝位置,默認為/usr/local/
–sysconfdir=/PATH:配置文件安裝位置
System types:支持交叉編譯

編譯安裝
Optional Features: 可選特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages: 可選包,
–with-PACKAGE[=ARG],依賴包
–without-PACKAGE,禁用依賴關系
第二步: make
第三步: make install42
編譯安裝
安裝后的配置:
(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文件
添加一個MANPATH44
練習
1、 yum的配置和使用;包括yum repository的創建

201608232054001
2、編譯安裝apache 2.2源碼包,并啟動此服務

先準備好httpd的依賴包

apr-devel.x86_64

apr-util-devel.x86_64

pcre

201608232101001進入目錄. /usr/local/httpd/bin

./httpd -k start

或者

./httpdctl start 啟動httpd服務

原創文章,作者:M20-石俊,如若轉載,請注明出處:http://www.www58058.com/39707

(0)
M20-石俊M20-石俊
上一篇 2016-08-24 21:22
下一篇 2016-08-24 21:22

相關推薦

  • awk應用和systemd

    一:練習 1、求每班總成績和平均成績 name class score wang   1    100 zhang  2    90 li     1    80 2、為編譯安裝的httpd服務,實現service unit文件 3、破解centos7 口令 …

    Linux干貨 2016-09-22
  • MooseFS性能圖表[原創]

    對MooseFS有了一定的了解,現在可以壓壓它的性能了,使用的是iozone IO測試工具。測試命令為:./iozone -a -n 512m -g 4g -i 0 -i 1 -f /mnt/mfs/logs/test.tar.gz -Rb ./iozone.xls -C測試說明1、/mnt/mfs/logs/test.tar.gz大小為9.2G,大于服務器…

    Linux干貨 2015-03-27
  • sed基礎

    sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed 主要用來自動編輯一個或多個文件, 簡化對文件的反復操…

    Linux干貨 2017-05-01
  • 洞悉find中的德摩根定律和條件權限perm

    1.德摩根定律 (1)初悉德摩根定律兒 在命題邏輯和邏輯代數中,德·摩根定律(或稱德·摩根定理)是關于命題邏輯規律的一對法則。 奧古斯塔斯·德·摩根首先發現了在命題邏輯中存在著下面這些關系: 非(A 且 B) = (非 A) 或 (非 B)非(A 或 B)&n…

    Linux干貨 2016-08-16
  • 馬哥網絡教育班第21期+第七周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdisk /dev/sd…

    Linux干貨 2016-08-12
  • web服務及常見配置

    一次HTTP請求過程1、建立連接:接收或拒絕連接請求2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程Web訪問響應模型(Web I/O)單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求復用I/O結構:啟動一個進程,同時響應N個連接請求實現方法:多線程模型和…

    Linux干貨 2017-10-09
欧美性久久久久