1. 程式人生 > >CentOS軟件包管理

CentOS軟件包管理

yum rpm 軟件包管理

CentOS軟件包管理

系統環境:CentOS 6.9和7.3


CentOS 6.9系統軟件包管理

rpm - RPM Package Manager

rpm --version

RPM version 4.8.0


linux包管理

二進制應用程序的組成部分:二進制文件,庫文件,配置文件,幫助文件

debian:deb文件,dpkg包管理器

Redhat:rpm文件,rpm包管理器

ldd /bin/cat 查看軟件依賴的庫文件

ldd /bin/ls

誤刪除系統庫文件恢復方法:

光盤啟動進入救援模式

默認掛載到/mnt/sysimage

運行chroot /mnt/sysimage改變掛載點

還原移動或刪除的庫文件,重啟即可

查看和管理本機裝載的庫文件

ldconfig

/sbin/ldconfig -p

配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf

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

第三方安裝源EPEL——rpmforge

搜索:http://pkgs.org http://rpmfind.net http://rpm.pbone.net https://sourceforge.net/

rpm包命名格式

包名-包版本號-編譯版本號.cpu架構.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

跟平臺無關: noarch

制作rpm包命令:rpmbuild 和FPM

查找所有包的平臺架構

ls -al /mnt/Packages/ > lsrpm.log

more lsrpm.log | egrep -o "[^.]+\.rpm" |cut -d. -f1 |sort| uniq

######################

安裝-i

安裝選項:

--test:測試安裝,但不真正執行安裝,即dry run模式
--nodeps:忽略依賴關系
--replacepkgs | replacefiles  用於同一個包,替換包,即重新安裝|替換文件,用於不同的包
--nosignature:不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
  %pre:安裝前腳本;--nopre
  %post:安裝後腳本;--nopost
  %preun:卸載前腳本;--nopreun
  %postun:卸載後腳本;--nopostun
--root=/mnt/sysimage  救援模式下重新安裝kernel需要指定/目錄或者運行chroot
rpm -ivh rpmfile   安裝軟件包

#######################

查詢-q

選項:

-a:查詢所有已經安裝的包
-f:查詢指定的文件由哪個程序包安裝生成
-p rpmfile:查詢指定包內容,必須跟rpm包路徑
-c:查詢程序的配置文件
-d:查詢程序的文檔
-i:查詢程序的詳細信息
-l:查詢程序包的所有文件
-R:查詢指定程序包所依賴的功能
-s: 查詢所有文件的狀態
--changelog
--scripts:程序包自帶的腳本
--provides:列出指定程序包所提供的功能
常用組合選項:
-qi 查詢軟件包的詳細信息
-ql 查詢軟件包生成的所有文件列表
-qc 查詢軟件包生成的所有配置文件(/etc目錄下)
-qd 查詢軟件包生成的所有說明文件(man幫助文檔)
-qR 查詢軟件包的依賴包關系
rpm -q kernel
rpm -qa tree
rpm -qa | grep tre  模糊搜索tree
rpm -qa | wc -l  查詢所有已安裝的軟件包
rpm -qf /etc/issue  查看指定文件屬於哪個rpm包
rpm -qf /bin/bash
rpm -qf `which rpm`  查詢指定命令由哪個包生成
rpm -qpl rpmfile  查看指定包文件列表
rpm -qpi rpmfile  查詢指定包信息
rpm -qpl --scripts bash-xxx.rpm  查詢指定安裝包的安裝腳本
rpm -qa bash --scripts
rpm -qc bash  配置文件
rpm -qd bash  文檔
rpm -ql tree
rpm -qi tree  查詢已經安裝過的包
rpm -q --whatprovides bash  查詢指定命令由哪個包提供
rpm -q --whatrequires bash  查詢指定命令依賴哪個包

查詢系統是否安裝了指定軟件

rpm -q logrotate
rpm -q logrotating

查詢系統工具來自哪個安裝包

#rpm -qf `which lsblk`
util-linux-2.23.2-33.el7.x86_64
#yum install util-linux
rpm2cpio rpmfile |cpio -itv   查看rpm包內文件的詳細信息,包括權限,大小的,類似於ls的顯示
rpm2cpio rpmfile |cpio -id "*.conf"  提取安裝包內的指定文件
rpm2cpio /mnt/sdb1/Packages/tree-1.5.3-3.el6.x86_64.rpm |cpio -itv
rpm2cpio /mnt/sdb1/Packages/tree-1.5.3-3.el6.x86_64.rpm |cpio -id *.gz
 
恢復誤刪除文件,此種方式可能會有權限問題,註意查看屬主和權限,不推薦
#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -itv
#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree
#ll usr/bin/tree
-rwxr-xr-x. 1 root root 62768 Jun  9 14:29 usr/bin/tree
#ll /usr/bin/tree
-rwxr-xr-x. 1 root root 62768 Jun 10  2014 /usr/bin/tree
#cp usr/bin/tree /usr/bin

#######################

校驗-V

rpm -V tree   查詢軟件是否被更改過
rpm -Va tree  查詢系統中所有可能被更改過的文件
rpm -Vp rpmfile   查詢該軟件包被更改過的文件列表
rpm -Vf filename  查詢文件的屬性

列出你的Linux內的logrotate這個軟件是否被更改過

rpm -V logrotate

查詢一下你的/etc/crontab是否有被更改過

# rpm -V tree

S.5....T. /usr/bin/tree

# 被更改過所以會列出被更改過的信息類型

# rpm -Vf /etc/ssh/sshd_config

S.5....T. c /etc/ssh/sshd_config

顯示的信息類型如下:

S :(file Size differs) 文件大小已被改變

M :(Mode differs) 文件的權限(rwx)已被改變

5 :(MD5 sum differs) MD5驗證不同

D :(Device major/minor number mis-match) 設備的主/次號碼不匹配

L :(readLink(2) path mis-match) Link路徑已被改變

U :(User ownership differs) 文件的所有者已被改變

G :(Group ownership differs) 文件的所屬組已被改變

T :(mTime differs) 文件的mtime時間已被改變

顯示的文件類型如下:

c :配置文件(config file)

d :文檔文件(documentation)

g :ghost文件,指該文件不被軟件包所包含,較少發生(ghost file)

l :許可證文件(license file)

r :自述文件(read me)

chgrp bin /usr/bin/tree

rpm -V tree

echo >> /usr/bin/tree

rpm -V tree

rpm -Va

包來源的完整性驗證:SHA256,來源合法性驗證:RSA

對稱加密:加密,解密使用同一密鑰

非對稱加密:密鑰是成對出現的,公鑰和私鑰

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

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入公鑰,光盤裏也有

rpm -qa "gpg-pubkey"

rpm -qi gpg-pubkey

# rpm -K tree-1.5.3-3.el6.x86_64.rpm

tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

#######################

升級-U/-F

rpm -Uvh rpmfile
rpm -Fvh rpmfile
-U,--upgrade:安裝有舊版程序包,則升級;如果不存在則安裝
-F,--freshen:安裝有舊版程序包,則升級,如果不存在則不執行升級操作
--oldpackage:降級
--force:強制安裝,不能用於卸載

#######################

卸載-e

卸載rpm包

rpm -e tree
rpm -q tree
rpm -e kernel-2.6.32-573.el6.x86_64   內核需要加上版本號
rpm -e rpm  不能直接刪除
 
rpm -e rpm --nodeps  去除依賴性
rpm誤刪除後需要通過光盤啟動救援模式來重新安裝rpm包,然後重啟
rpm -ivh /mnt/cdrom/Packages/rpm.rpm --root=/mnt/sysimage  指定新的/目錄

rpm數據庫重建:存放路徑/var/lib/rpm

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

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

rpm的查詢和安裝都依賴rpm數據庫,很重要,這裏即使重建,但是數據為空,重建也無意義,所以最好提前做備份。

如何制作一個rpm包?


yum - Yellowdog Updater Modified

yum是一個交互式的RPM包管理程序,可自動解決包依賴問題,基於repository元數據來查詢,安裝,更新,卸載軟件包,執行系統更新,檢查包依賴性等操作

repodata:存儲rpm包以及依賴包的相關元數據

repodata的父目錄就是yum倉庫的路徑,Redhat5系列在Server目錄下,centos6之後為光盤根目錄。

支持4種路徑http:// https:// ftp:// file://

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

/var/lib/yum/ yum的元數據

/var/lib/rpm/ rpm數據庫

yum只能同時運行一個進程,底層依賴rpm命令。

yum --version 查看版本等信息


yum

選項:

-c   指定配置文件
-q   靜默模式,只提示必要的包列表信息
-y, --assumeyes   自動回答yes
--assumeno   自動回答no
--installroot=[path]   指定安裝的根目錄
--nogpgcheck   禁止進行gpg check
--noplugins  禁用所有插件
--version

命令:

yum repolist  列出可用的yum源
yum list   顯示所有安裝包,@表示已經安裝,installed表示是通過rpm命令安裝的
yum search   通過yum數據庫查詢軟件包
yum info   查詢軟件包的信息
yum install   安裝
yum reinstall   重新安裝
yum update   升級
yum deplist   查詢包依賴關系
yum provides  查詢命令或功能由哪個包提供
yum distribution-synchronization  同步已安裝的軟件到最新版本
yum remove|erase   卸載
yum check-update   檢查更新
yum history   顯示yum操作歷史
yum shell   進入yum自帶的shell

包組命令:

yum groupinfo   顯示包組信息
yum groupinstall  安裝包組
yum grouplist  顯示所有包組列表
yum groupupdate  更新包組
yum groupremove  卸載包組
 
yum history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
 
yum history
yum history info 2 顯示yum歷史列表為2的詳細操作
yum history undo 2 回退操作,即還原安裝歷史序列號為2的所有操作
 
yum repolist all   顯示所有的的yum源
yum list installed|more   查詢已安裝的包
yum list available|more   查詢可用的安裝包
 
yum grouplist | grep -A 10 Installed  //查看已安裝的軟件包組
yum grouplist development tools   //查詢指定包組
Server Platform Development 和 Development tools 這兩個包組是完全一樣的,一般只需要安裝後者即可
yum groupinstall Development tools

更新緩存:

yum clean all
yum makecache

yum源配置文件:

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

/etc/yum.repos.d/*.repo 配置yum倉庫

vi base.repo
[base]  //倉庫名不能重名
name=centos6  //描述信息
baseurl=URL  //元數據路徑,即repodata目錄的路徑,支持http,ftp,file
enabled={1|0}  //1啟用,0禁用
gpgcheck={1|0}  //驗證
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}  //roundrobin表示隨機挑選,默認值;priority表示按順序訪問
cost=  //默認為1000

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

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

$arch:平臺,i386,i586,x86_64

$basearch:基礎平臺,i386,x86_64

$YUM0-$YUM9:自定義變量

http://server/centos/$releasever/$basearch/ 通用方式,可以表示以下兩種

http://server/centos/7/x86_64

http://server/centos/6/i386

最簡單的repo文件

[base]
name=centos6
baseurl=ftp://192.168.1.1/pub/6
gpgcheck=0

yum只能同時運行一個進程,如果有其他用戶同時使用yum,可以通過fuser -km /repodata-path 強行結束。

fuser -km /var/ftp/pub/6
mount --bind /misc/cd /var/ftp/pub/6
mount
yum install gcc

創建yum倉庫:createrepo .

先把rpm文件放到一個目錄,然後執行createrepo 目錄路徑即可生成repodata目錄倉庫


配置yum源

1.光盤yum源配置,通過autofs服務開機自動掛載光盤

yum install autofs
service autofs start
vi /etc/yum.repos.d/base.repo
[cdrom]
name=cdrom
baseurl=file:///misc/cd
gpgcheck=0
enabled=1

更新yum源緩存並測試安裝軟件,以下均省略說明

yum clean all
yum makecache
yum repolist
yum remove tree
yum install tree

2.網絡yum源配置,推薦使用http方式

yum install httpd
mkdir /var/www/html/yum
mount /dev/sr0 /var/www/html/yum
service httpd start
vi /etc/yum.repos.d/base.repo
[yumsrc]
name=yumsrc
baseurl=http://192.168.10.61/yum
gpgcheck=0
enabled=1

更新yum源緩存並測試安裝軟件,同上

3.搭建自定義的yum源

yum install createrepo
mkdir /app/Packages
cp /root/xxx.rpm /app/Packages
createrepo /app/Packages
mkdir /var/www/html/yum
mount -o bind /app/Packages /var/www/html/yum
vi /etc/yum.repos.d/base.repo
[yumsrc]
name=yumsrc
baseurl=http://192.168.10.61/yum
gpgcheck=0
enabled=1

更新yum源緩存並測試安裝軟件,同上


CentOS 7.3系統軟件包管理

yum groups命令與6不同,如下:

yum groups list 查詢包組

yum groups info

yum groups install

yum groups remove

yum groups summary

yum groups list | grep -A 10 Installed //查看已安裝的軟件包組

yum groups info Development Tools

本文出自 “rackie” 博客,請務必保留此出處http://rackie386.blog.51cto.com/11279229/1957809

CentOS軟件包管理