CentOS軟件包管理
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軟件包管理