日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

马哥-51CTO-Linux培训-0910-程序包管理

發(fā)布時間:2024/9/20 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 马哥-51CTO-Linux培训-0910-程序包管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(注:此博文源于夜歸人的博客)

程序包管理,rpm、yum的使用

?

?

程序包管理的相關(guān)概念:

<<===============================================================================================>>

軟件包的組成部分:

1、二進制程序:可執(zhí)行文件

通常安裝在 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin, /usr/local/sbin 目錄之下

2、庫文件:

程序的運行依賴于庫文件,Linux的核心庫是glibc,某些軟件也會將自己的核心文件封裝成庫文件,

以供其他程序調(diào)用或二次開發(fā)。

Linux下的庫分為靜態(tài)庫和動態(tài)庫,靜態(tài)庫通常以".a"結(jié)尾,動態(tài)庫通常以".so"結(jié)尾。

通常安裝在 /usr/lib, /usr/lib64, /var/lib, /usr/local/lib 目錄下

★庫文件也是可執(zhí)行程序,但不能直接執(zhí)行,因為庫文件沒有執(zhí)行入口,只能被其他文件調(diào)用執(zhí)行。

調(diào)用的兩種方式:

開發(fā)調(diào)用:二進制格式的庫

運行調(diào)用:文本格式的頭文件

函數(shù)(參數(shù))頭文件 /usr/include, /usr/local/include

#inclue stdio.h

鏈接程序所要查找動態(tài)格式的共享對象庫時的路徑:

/etc/ld.so.conf

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

ldd:用于查看程序或者庫文件所依賴的共享庫列表

ldd [OPTION]... FILE...

例如:

[root@CentOS7 ~]# ldd /bin/cat

linux-vdso.so.1 => (0x00007fffa5ffe000)

libc.so.6 => /lib64/libc.so.6 (0x00007f013c418000)

/lib64/ld-linux-x86-64.so.2 (0x00007f013c7e2000)

3、配置文件:通常是純文本文件,用來定義程序的特性。

通常存放在:/etc, /usr/etc, /usr/local/etc 或指定的路徑下(配置文件一般無需額外配置)

4、幫助文檔:man手冊、info文件、README、INSTALL、ChangeLog

man COMMAND

到某路徑下查找與命令同名的,通常以.gz結(jié)尾的壓縮文件的名字

/usr/share/man/

man 的配置文件: /etc/man.config

★總結(jié):如果是指定路徑安裝程序

例如:/usr/local/nginx

二進制程序:bin、sbin

庫:lib

頭文件:include

配置文件:etc、conf

幫助文件:man

軟件包管理器的兩個重要功能:

1、數(shù)據(jù)庫:

軟件名和版本

安裝生成的各文件路徑及校驗碼

各軟件包之間的依賴關(guān)系

提供功能性說明

rpm -qi FILENAME

2、提供程序組成格式:

文件清單

安裝或卸載時運行的腳本

常見的軟件包管理器:

Debian系列:dpkg (DebianPackager) 管理 以.deb 結(jié)尾的軟件包。

“Debian”的“Linux ”發(fā)行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。

RedHat系列: rpm ( RPM isPackage Manager ) 管理 以.rpm 結(jié)尾的軟件包。

以前是RedHat Package Manager的縮寫,現(xiàn)在包括OpenLinux、S.u.S.E.以及TurboLinux等

Linux的分發(fā)版本都有采用該包管理器,算是公認(rèn)的行業(yè)標(biāo)準(zhǔn)了。

包管理器的基本功能:

制作程序包

安裝程序包

查詢程序包

升級程序包

卸載程序包

校驗程序包

數(shù)據(jù)庫管理

應(yīng)用程序的安裝方式

1、使用包管理器:便捷、易用

2、包管理器的前端工具:yum

3、簡單打包的二進制格式:展開到特定路徑下

4、使用源代碼編譯:

rpm包命名格式:

源程序:PackageName-version.tar.{gz|bz2|xz}

version:major.minor.release

通常版本號(Version)有三個:major.minor.release——主版本號.次版本號.發(fā)行號

主版本號:是程序的主要功能發(fā)生了巨大的改變時才使用;

次版本號:是在程序的部分功能有重大改變時使用;

發(fā)行號:是在修復(fù)了一些bug,調(diào)整了一些屬性后進行的升級。

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

RPM包的Version號和源程序的版本號需要保持一致,這里的release號通常包含rpm的制作發(fā)行號,

和源程序本身沒有關(guān)系,并且這個Release號可能會標(biāo)明所適用的操作系統(tǒng)平臺。

arch指的是安裝在哪種主機平臺上,常見的主機平臺有:

i686、x86_64、amd64、ppc(powerPC)、noarch(不依賴平臺)等。

如:bash-4.3.2-6.el6.x86_64.rpm

表明這是一個bash程序包;其源程序的主版本號為4,次版本號是3,發(fā)行號2;

它是第6次修正的RPM包;這個包用在RedHat6的Enterprise版上;適用于x86_64的主機平臺。

有些沒有指定arch的rpm包,可能是通用版本

如:nginx.1.4.16-5.rpm

rpm包的分包:

將程序的某些功能做成獨立的包,讓用戶選擇安裝

一個程序可能會有許多功能,其中不少功能是用不上的,如某些程序提供了頭文件,用來供程序員

進行二次開發(fā),而普通用戶根本不需要對該程序進行二次開發(fā),所以只需要安裝該程序的配置文件

和二進制文件就即可。

RPM包可以分為主包(核心包)和分包(支包),其中主包的包名遵循RPM包的基本命名規(guī)則。

如:主包:bash-4.3.2-2.el6.x86_64.rpm

支包:bash-hello-4.3.2-2.el6.x86_64.rpm

bash-world-4.3.2-2.el6.x86_64.rpm

DNS: bind, bind-devel, bind-libs, bind-utils

程序包來源合法性驗證:

源程序:通過md5或sha1驗證碼驗證

rpm包:發(fā)行商提供的合法性是可信的

驗證包完整性:校驗碼

驗證來源合法:公鑰

獲取rpm包的途徑:

1、發(fā)行商的光盤或站點服務(wù)器

以CentOS為例:

http://mirrors.163.com

http://mirrors.sohu.com

2、fedora-EPEL

3、項目的官方站點

4、搜索引擎:

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

rpm包管理器的使用:

<<======================================【rpm管理:安裝】======================================>>

rpm包管理:安裝

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-v verbose

-vv

-vvv

-h hash,以#的個數(shù)顯示安裝進度,一個#表示2%的進度;

--test: 僅測試,不真正執(zhí)行安裝過程

每個rpm包都提供一個或多個capability,安裝一個程序包時可能需要依賴或被別的包所依賴

如果存在依賴:

解決依賴關(guān)系:

忽略依賴關(guān)系: --nodeps

重新安裝: --replacepkgs

原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為后綴的文件

實例1:安裝程序包

實例2:測試安裝程序包

實例3:安裝程序包時忽略依賴關(guān)系

實例4:重新安裝已安裝過的程序包

<<====================================【rpm管理:卸載】====================================>>

rpm包管理:卸載

rpm -e或--erase

rpm -e package_name

如果卸載被其他程序所依賴的包

1、把依賴者一同卸載;

2、忽略依賴關(guān)系;

--nodeps

--noscrips: 卸載時不運行腳本

3、不再卸載

實例:卸載已安裝的程序包

實例:卸載時忽略依賴關(guān)系

<<======================================【rpm管理:查詢】======================================>>

rpm包管理:查詢

查詢所有已安裝的包:rpm -qa

查詢某單個包是否安裝: rpm -q package_name

查詢包安裝之后在當(dāng)前系統(tǒng)生成的文件列表: rpm -ql package_name

查詢某文件是哪個包安裝生成的: rpm -qf /PATH/TO/SOMEFILE

查詢包安裝后生成的幫助文檔: rpm -qd package_name

查詢包安裝后生成的配置文件: rpm -qc package_name

查詢包的描述信息:rpm -qi package_name

查詢包相關(guān)的腳本: rpm -q --scripts package_name

腳本有四類:

preinstall: 安裝前腳本

postinstall: 安裝后腳本

preuninstall: 卸載前腳本

postuninstall: 卸載后腳本

查詢尚未安裝的rpm包文件:rpm -qp

查詢安裝后會生成的文件列表:rpm -qpl /PATH/TO/package_file

查詢其簡單描述信息: rpm -qpi /PATH/TO/package_file

實例1:查詢 lsof-4.82-5.el6.x86_64程序包安裝后生成的文件列表

實例2:查詢/usr/share/man/man8/lsof.8.gz文件是由哪個包安裝所生成的

實例3:查詢程序包安裝后生成有哪些幫助文檔

實例4:查詢程序包安裝后生成的配置文件

實例5:查詢程序包安裝完后生成的腳本

實例6:查詢bash程序包的描述信息

Name:軟件名稱

Relocations:在安裝時是否可指定安裝路徑(重定位)

Version:版本號

Vendor:提供商

Release:rpm的發(fā)行號

BuildDate:rpm包的制作日期

InstallDate:安裝時間

Build Host:在哪個系統(tǒng)上制作的rpm包

Group:包組

SourceRPM:源碼的rpm包

Size:包大小

License:許可證

Signature:數(shù)字簽名(驗證來源合法性和包完整性)

Packager:包的制作者

URL:獲取源碼的網(wǎng)址

Summary:簡要說明

Description:略詳細的說明

<<======================================【rpm管理:升級】======================================>>

rpm包管理:升級

rpm -U: 升級或安裝,如果有舊版程序包,則升級,如果沒有,則安裝

rpm -F: 僅升級,如果有舊版程序包,則升級,如果沒有,則不安裝

rpm {-Uvh|-Fvh} /PATH/TO/package_file

--nodeps: 忽略依賴關(guān)系

--oldpackage: 降級

--force: 強行安裝

注意: 不要對內(nèi)核執(zhí)行升級操作

多版本內(nèi)核可并存,因此,要執(zhí)行安裝操作

實例1:升級程序包,升級過程中提示有依賴關(guān)系時忽略,繼續(xù)更新

實例2:把剛升級的程序包降級為原來的版本

<<======================================【rpm管理:校驗】======================================>>

rpm包管理:校驗

檢查包安裝后生成的文件是否被修改過

rpm -V package_name

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

校驗軟件包來源合法性和完整性

包完整性:通過單向加加密機制(md5|sha1)

來源合法性:通過公鑰加密機制(RSA)

導(dǎo)入制作者的公鑰:CentOS發(fā)行版的公鑰在iso文件中

導(dǎo)入命令:rpm --import /PATH/TO/gpg-key-file

檢查: rpm -K /PATH/TO/package_file

rpm --checksig /PATH/TO/package_file

--nosignature: 不檢查來源合法性

--nodigest:不檢查完整性

實例1:分別對程序包安裝后生成的文件進行改名和修改操作,然后驗證

實例2:導(dǎo)入公鑰驗證軟件包的來源合法性和完整性

<<================================【rpm管理:數(shù)據(jù)庫重建】================================>>

rpm包管理:數(shù)據(jù)庫重建

數(shù)據(jù)庫:/var/lib/rpm/

重建:

rpm --initdb:初始化

如果事先不存在一個數(shù)據(jù)庫,則新建

rpm --rebuilddb:重建

直接重建數(shù)據(jù),會覆蓋原有的庫

程序包的依賴關(guān)系:

<<===============================================================================================>>

由于許多程序包之間存在這依賴關(guān)系,例如A依賴B,而B又依賴X、Y...

所以使用rpm管理器安裝或卸載程序時會有諸多不便,很可能安裝一個程序包之后由于所依賴的另外一個程序

包沒有安裝,造成安裝失敗,或是卸載程序把被其他程序包依賴的包卸載了,導(dǎo)致其他程序無法運行等……

因此為了解決這一問題,后來便有了程序包的前端管理器,它會自動處理程序包之間的依賴關(guān)系

前端管理器:

Debian:apt-get

RedHat:yum (Yellowdog Update Modifed)

dnf:下一代解決依賴關(guān)系的程序包前端管理器

文件服務(wù)器(共享rpm包):通過yum所支持的文件共享機制,將各rpm包通過文件服務(wù)共享

repository:倉庫

1、各rpm包

2、依賴關(guān)系、程序包安裝后所能生成文件列表等元數(shù)據(jù)文件

yum客戶端:

1、配置文件:指定各可用的yum倉庫

2、緩存元數(shù)據(jù): yum會到各可用yum倉庫獲取元數(shù)據(jù),并緩存至本地

3、分析元數(shù)據(jù):根據(jù)具體操作請求完成元數(shù)據(jù)分析,可能包括檢查依賴關(guān)系,文件列表等信息

4、執(zhí)行具體操作

客戶端配置文件指定對應(yīng)服務(wù)器的訪問方式

ftp ftp://server/path/to/repo

http http://server/path/to/repo

nfs nfs://server/nfs_path

file file:///path/to/repository

yum程序的配置文件:

<<===============================================================================================>>

要使用yum管理應(yīng)用程序,首先得配置其可用的yum倉庫,保存在配置文件中

/etc/yum.conf

/etc/yum.repos.d/

配置文件格式:

由兩段組成,類似windows的ini配置文件

[main]:主配置段

[repo]:倉庫配置段

[root@CentOS-6 ~]# cat /etc/yum.conf

[main]

cachedir=/var/cache/yum/$basearch/$releasever #緩存目錄

keepcache=0 #刪除緩存中已安裝的rpm包

debuglevel=2 #調(diào)試級別

logfile=/var/log/yum.log #日志文件

exactarch=1 #必須跟當(dāng)前主機的版本完全精確匹配才安裝

obsoletes=1 #過去的,廢棄的

gpgcheck=1 #是否檢驗其來源合法性及數(shù)據(jù)包完整性

plugins=1 #是否支持插件

installonly_limit=5 #

bugtracker_url= #追蹤bug保存的位置

distroverpkg=centos-release

定義一個倉庫指向(配置repo):

[repo_ID]

name=倉庫描述信息

baseurl=倉庫的訪問路徑

# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE

enabled={1|0}

gpgcheck={1|0}

gpgkey=公鑰文件(可以在本地,也可以是服務(wù)器端路徑)

cost=定義此倉庫的開銷,默認(rèn)為1000

例:

repo文件:

[base]

name=CentOS-6 - Base - 163.com

baseurl=http://mirrors.163.com/centos/6/os/x86_64/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

yum配置文件中可用的四個宏:

$releasever: #程序的版本,對yum而言指的是redhat-release版本,只替換為主版本號,RedHat6.5,則替換為6

$arch: #系統(tǒng)CPU架構(gòu)

$basearch: #系統(tǒng)基本架構(gòu),如i686,i586等的基本架構(gòu)為i386

$YUM0-9: #在系統(tǒng)中定義的環(huán)境變量,可以在yum中使用

★宏的作用是變量替換,如:想讓不同系統(tǒng)架構(gòu)都使用同一個repo(通用版本)。

[base]

name=CentOS-$releasever -Base - 163.com

baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

<<=========================================【yum命令】=========================================>>

yum命令

格式:

yum [options] [command] [package ...]

yum的各命令:

repolist [all|enabled|disabled]: 列出所有可用yumrepo

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

makecache: 生成緩存

list [all|installed|available]: 列出rpm包

info package_name: 列出包的描述信息

install package_name ... : 安裝指定的程序包

reinstall package_name ... : 重新安裝指定的程序包

chek-update package_name: 檢查可升級的程序包

downgrade package_name: 降級

update package_name: 升級指定的程序包

★直接update 程序包名,將會升級到最新的版本,

如果有多個版本,想升級到指定的版本號,要明確指定版本號

erase|remove package_name... :卸載時所依賴的包也將一并卸載

whatprovides|provides /PATH/TO/SOMEFILE: 查詢指定文件由哪個包安裝生成

history: yum的歷史

search KEYWORD:搜索程序包

★安裝本地包:

install /PATH/TO/package_file

手動禁止檢查來源及完整性: --nogpgcheck

如:

yum install /tmp/finger-0.17-40.el6.x86_64 --nogpgcheck

grouplist: 列出所有包組

groupinstall "group_name": 安裝指定的包組

groupremove "group_name" : 卸載指定的包組

groupinfo "package_name": 顯示包組相關(guān)信息

三個跟開發(fā)相關(guān)的包組:

Desktop Platform Development :有圖形程序時需安裝此組

Server Platform Development :服務(wù)器平臺開發(fā)包組

Developmetn tools:開發(fā)包組

★提示:

如果系統(tǒng)為CentOS 5,常用的開發(fā)包組為"DevelopmentTools" 和 "Development Libraries"

如果系統(tǒng)為CentOS 6,常用的開發(fā)包組為"DevelopmentTools" 和 "Server Platfrom Development"

實例1:查看當(dāng)前系統(tǒng)上所有可用的yum源

實例2:卸載指定的程序包

實例3:檢測指定的程序包是否有更新,然后更新程序包

實例4:對指定的程序包進行降級處理

降級完后查看版本:

<<========================================【制作yum源】========================================>>

制作yum源

yum repositories

文件服務(wù)器

ftp://hostname/PATH/TO/REPO

http://hostname//PATH/TO/REPO

/PATH/TO/REPO

repodata/

repomd.xml

使用發(fā)行版光盤當(dāng)本地yum倉庫:

1、先禁用當(dāng)前可用的yum倉庫,(可把repo配置文件改名)然后執(zhí)行 yum clean all 命令清空

2、創(chuàng)建一個 local-media-repo 配置文件

[CentOS 6.7 ISO]

name=CentOS 6.7 x86_64 release iso file

baseurl=file:///media/

enable=1

gpgcheck=1

gpgky=file:///RPM-GPG-KEY-CentOS-6

創(chuàng)建本地yum倉庫

crepodata是一個目錄,里面包含了yum倉庫索引文件和rpm包的一些信息。

創(chuàng)建本地yum倉庫時使用createropo命令,它會自動創(chuàng)建repodata目錄及目錄內(nèi)的數(shù)據(jù)庫文件

createrepo /PATH/DirName

實例:

使用發(fā)行版光盤當(dāng)本地yum倉庫

1、先禁用當(dāng)前可用的yum倉庫(修改當(dāng)前yum倉庫配置文件后綴名)

2、插入光盤-->掛載-->

3、在/etc/yum.repo.d/目錄下創(chuàng)建repo配置文件local-media-repo,并編輯

4、使用yum repolist 驗證,查看當(dāng)前系統(tǒng)可用yum倉庫

轉(zhuǎn)載于:https://blog.51cto.com/maxiaoyu/1694955

總結(jié)

以上是生活随笔為你收集整理的马哥-51CTO-Linux培训-0910-程序包管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。