1. 程式人生 > >第10章,程序包管理學習筆記

第10章,程序包管理學習筆記

rpm yum linux 程序包安裝 yum倉庫


更多內容請點擊:

Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~)

http://blog.51cto.com/13683480/2095439


筆記整理開始時間:2018年4月20日14:07:22


第10章 程序包管理


本章內容

軟件運行環境

軟件包基礎

rpm包管理

yum管理

定制yum倉庫

編譯安裝

軟件運行和編譯:

ABI: Application Binary Interface 應用程序的二進制接口

window: PE,Portable Executable

Linux: ELF,Executable and Linkable Format

彼此互不兼容

庫級別的虛擬化:

Linux:WINE

windows:Cygwin

API: Application Programming Interface

POSIX:Portable OS

程序源代碼--> 預處理 --> 編譯 --> 匯編 —-> 鏈接

靜態編譯: .a

動態編譯: .so

靜態鏈接:

把程序對應的依賴庫復制一份到包

libxxx.a

嵌入程序包

升級難,需重新編譯

占用較多空間,遷移容易

動態鏈接:

只把依賴加做一個動態鏈接

libxxx.so

鏈接指向

占用較少空間,升級方便

jave程序

源程序.java --jave編譯器--> 字節碼.class --> 類裝載器>字節碼校驗器>解釋器-->操作系統

JVM for unix

windows

other

包管理器

二進制應用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

程序包管理器:

debian:deb文件,dpkg包管理器

redhat:rpm文件,rpm包管理器

rpm:Redhat Package Manager

RPM Package Manager

包命名:

源碼:name-VERSION.tar.gz|bz2|xz

rpm包:name-version-release.arch.rpm

realese: ..el7

arch: i686 x86_64 noarch

解決依賴包管理工具:

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

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

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

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

庫文件:

ldd 查看二進制程序所依賴的庫文件

如:ldd /bin/bash ldd/bin/cat

ldconfig 加載庫文件

/sbin/ldconfig -p 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

配置文件: /etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

緩存文件: /etc/ld.so.cache

包管理器:

程序包管理器:

功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,

從而方便快捷的實現程序包的安裝,卸載,查詢,升級和校驗等操作

包文件組成(每個包獨有)

rpm包內的文件

rpm的元數據,如名稱,版本,依賴性,描述等

安裝或卸載時運行的腳本

數據庫(公共):/var/lib/rpm

程序包名稱和版本

依賴關系

功能說明

包安裝後生成的各文件路徑及校驗碼信息

rpm:

Centos系統上使用rpm命令管理程序包

安裝、卸載、升級、校驗、數據庫維護

安裝:

rpm {-i|--install} [install-options] Package_file

-v verbose 可視

-vv:

-h 以#顯示程序包管理執行進度

rpm -ivh Package_file

[install-options]

--test 測試安裝,不真正執行安裝,即dry run模式

--nodeps 忽略依賴關系

--replacepkgs | --replacefiles 覆蓋安裝

--nosingature 不檢查來源合法性

--nodigest 不檢查包完整性

--noscripts 不執行程序包腳本

--nopre 安裝前腳本

--nopost 安裝後腳本

--nopreun 卸載前腳本

--nopostun 卸載後腳本

升級:

rpm {-U|--upgrate}[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.rpmnew)後保留

包查詢

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

選擇選項 查詢選項

select-options

-a 所有包

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

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

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

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

quety-options

--changelog 查詢rpm包的changelog

-c 查詢程序的配置文件

-d 查詢程序的文檔

-i 查詢information

-l 查看指定的程序包安裝後生成的所有文件

--scripts 程序包自帶的腳本

--provides 列出指定程序包所提供的CAPABILITY

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

常用查詢用法:

-qi package -qip package-file

-qf file

-qa

-ql pack -qlp pack—file

-qc pack

-qd pack

rpm2cpio pack—file | cpio -itv 預覽包內文件

rpm2cpio pack-file | cpio -id "單個file" 釋放包內文件

包卸載:

rpm {-e|--erase}[--allmatch][--nodeps][--noscripts][--notriggers]

[--test] package.name

如:rpm -e tree

包校驗:

rpm -V|--verify [select-option] [verify-options] package.name

針對已安裝包,查看文件是否有修改如:

如:

[root@sentos7 /data]$rpm -V tree

S.5....T. d /usr/share/doc/tree-1.6.0/LICENSE

S file size differs 大小改變

M mode differs(includes permissions and file type)

權限改變

5 hash值,md5值發生變化,表示文件內容發生改變

D Device major/minor number mismatch 設備主次發生改變

L readlink path mismatch 鏈接發生改變

U USER ownership differs

T mtime differs(includes

P capability differ

md5sum file file 比較文件hash(md5)值

包來源合法性驗證和 完整性

導入所需要公鑰:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

rpm --import /光盤/RPM-GPG-KEY-CentOS-7

rpm -K|checksig rpmfile 檢查包的完整性的簽名

rpm -qa "gpg-pubkey" 查看gpgkey

數據庫重建

/var/lib/rpm

rpm --initdb|--rebuiddb

initdb: 初始化

如果事先不存在數據庫,則新建之

否則,不執行任何操作

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

yum:

客戶端配置:

/etc/yum.conf: 為所有倉庫提供公共配置

/etc/yum.conf.d/*.repo 為倉庫的指向提供配置

新建/etc/yum.conf.d/.repo文件

[repositoryID]

name=some name

baseurl=file:///光盤路徑 本地光盤

ftp:// http:// https:// 網絡路徑

enabled=0,1 0關閉,1開啟

gpgcheck=0,1 0關閉,1開啟

gpgkey=URL (file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7)

file:///光盤根目錄/RPM-GPG-KEY-CentOS-7

enablegroups=0;1

failovermethod={roundrobin|priority}

roundrobin 隨機

priority 順序

cost= 默認1000 值越小越優先

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

$releasever 當前OS的發行版的主版本號

$arch 平臺,i386,i686,x86_64等

$basearch: 基礎平臺,如x86_64

yum源

阿裏雲repo

https://opsx.alibaba.com/mirror

阿裏雲centos:

https://mirrors.aliyun.com/centos/

阿裏雲epel

https://mirrors.aliyun.com/epel/7/x86_64/

yum-config-manager

yum-config-manager --add-repo=url

自動生成倉庫

yum-config-manager --disable name.repo 禁用倉庫

yum-config-manager --enable name.repo 啟用倉庫

yum命令:

yum 不能多終端同時使用

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.. 重新安裝

升級程序包:

yum update package..

yum downgrade package

檢查可用升級:

yum check-update

卸載程序包:

yum remove | erase package...

查看程序包:

yum info package

查看指定的特性(可以是某文件)是由哪個程序包所提供

yum provdes | whatprovides feature1....

清除本地緩存:

清除/var/cache/yum/$basearch/$releasever 緩存

yum clean [packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:

yum makecache

搜索:

yum search string1.

查看指定包所依賴的capabilities

yum deplist package1....

查看yum事務歷史:

yum history info| list | packages-list| packages -info

yum history info 6

yum history undo |redo 6

日誌文件:/var/log/yum.log

安裝或升級本地程序包:

yum localinstall rpmfile

現在一般用(install)

包組管理的相關命令:

yum grouplist [hidden]

yum groupinstall group1

yum groupremove group1...

yum groupinfo group1..

yum groupupdate group1..

yum的命令行選項:

--nogpgcheck 禁止進行gpgcheck

-y 自動回答yes

-q 靜默模式

--disablerepo=repoidglob 臨時禁用此處指定的repo

--enablerepo=repoidglob 臨時啟用此處指定的repo

--noplugins 禁用所有插件

創建yum倉庫:

createrepo dir 制作倉庫 如果添加了安裝包,需重新createrepo

程序包編譯:

Application-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令制作成

二進制格式的rpm包,而後再安裝

源代碼-->預處理 --> 編譯 --> 匯編 --> 鏈接 --> 執行

源代碼組織格式:

多文件:文件中代碼只見,很肯能存在跨文件依賴關系

C,C++: make項目管理器

configure腳本 --> Makefile.in --> Makefile

java:maven

C語言源代碼編譯安裝三步驟:

1 ./configure | --prefix=dir

通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的

指定以及makefile.in文件生成makefile

檢查依賴到的外部環境,如依賴的軟件包

2 make | -j 4 根據Makefile 構建應用程序

3 make insatall 復制文件到相應路徑

開發工具:

autoconf:生成configure腳本

automake 生成Makefile.in

註意:

安裝前查看INSTALL ,README

編譯安裝:

編譯c源代碼:

準備:提供開發工具及開發環境

開發工具:make gcc等

開發環境:開發庫,頭文件

glibc: 標準庫

實現:通過‘包組’提供開發組件

Development Tools

Server Platform Developmet

第一步:./configure腳本

選項:指定安裝位置,指定啟用特性

--help 獲取其支持使用的選項

選項分類

安裝路徑指定:

--prefix=dir :指定安裝路徑, 默認為/usr/local

--sysconfdir=dir 配置文件安裝位置

System types 支持交叉編譯

Optional Features:可選特性

--disable-FEATURE

--enable-FEATURE[=ARG]

Optional Packages:可選包

--with-Package[=ARG] 依賴包

--without-Package 禁用依賴關系

註意:通常被編譯操作依賴的程序包,需要安裝此程序包的‘開發’組件,

其包名一般類似於name-devel-VERSION

第二步:make 【 -j 4 】

第三部: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 centos6

/etc/mam_db.conf centos7

添加一個manpath

練習:

1.查詢命令java來自於哪個rpm包

方法1 which java

ll /usr/bin/java

ll /etc/alternatives/java

rpm -qf /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/java

方法2 rpm -q --whatprovides java

2.yum的配置和使用,包括yum倉庫的創建

實戰作業

3.編寫系統初始化腳本reset.sh,包括別名,提示符顏色,yum倉庫配置文件

安裝tree,ftp,lftp。telnet等包

4.在CentOS7上編譯安裝apache2.4源碼包,並啟動此服務

筆記整理完成時間:2018年4月24日11:02:09


第10章,程序包管理學習筆記