设为首页 收藏本站
查看: 1104|回复: 0

[经验分享] Linux_rpm和yum实现程序包管理功能

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-15 08:51:02 | 显示全部楼层 |阅读模式
程序包管理:

        内核功能:进程管理、内存管理、网络协议栈、驱动程序、...
        应用程序:

        包管理器:打包,包管理(安装、升级、卸载、查询及校验)
                deb: debian
                rpm: redhat package manager (早起使用perl语言写)
                        RPM is Package Manager ————>通过C语言实现,性能大幅提升

        程序包的组成部分:
                二进制程序:/bin, /sbin,/ /usr/bin, /usr/sbin,  可执行文件
                库文件:/lib64, /usr/lib64  共通的功能通过库文件进行互通
                配置文件:/etc  通过配置文件来定义工作属性
                帮助文件:manual, info,   程序基本使用方式

        包管理器:
                打包:一个单一的归档文件中;
                安装:把打包的文件展开在当前系统上,各种文件放置在正确的路径下
                卸载:把每一个安装生成的文件搜集起来,并且删除
                升级:新版本文件替换老版本的文件
                查询:查询安装的程序包的信息
                校验:程序包安装后是否又被篡改等(来源的合法性、完整性)

                               

        rpm包:
                打包工具:rpmbuild: 基于specs文件进行打包

                一个rpm包总共包含10个功能,5个常用,3个少用,2个基本不用;但是打包只打了5个常用功能,此时就需要“分包机制”来解决有些人需要3个少用的情况。

                分包机制:
                    testapp-VERSION.tar.gz

                        核心包:testapp-VERSION
                        支包:testapp-devel-VERSION

                        VERSION:major(主版本号).minor(次版本号).release(修正版本号)
                                base-4.2.4.tar.gz
                                主版本号定义了应用程序最关键的功能。
                                次版本号一般是小功能的改进
                                修正版本号一般是修复bug等

                rpm包的命名机制:
                        name(报名)-VERSION(RPM包的Version)-RELEASE(发行版本号).ARCH(架构).rpm
                                bash-4.2.4-1.el7.x86_64.rpm
                                bash-devel-4.2.4-1.el7.x86_64.rpm


                包和包之间:有可能存在依赖关系:
                        X --> Y    Y的功能需要X来支持。

                rpm数据库:/var/lib/rpm/    记录了包名,生成的文件,校验码等

                如何获取rpm包:
                        1、发行版提供的程序包;
                        2、Fedora-EPEL
                        3、项目的官方站点
                        4、搜索引擎
                                http://rpmfind.net
                                http://rpm.pbone.net
                                http://pkgs.org

                CentOS识别光盘用的设备文件:/dev/cdrom,
                首先建立光盘的一个挂载点,然后将光盘进行挂在到这个点上。、
                mkdir /var/mnt
                mount /dev/cdrom /var/mnt

        基于rpm命令实现程序包管理:
                安装:
                rpm {-i|--install} [install-options] PACKAGE_FILE ...
                        -i:安装
                        -v:显示详细过程,-vv, -vvv
                        -h:用#来显示安装进度
1
2
3
4
[iyunv@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]



            -vv:可以展示出非常具体的安装信息,哪些个文件被装到哪个路径下面等信息。
                                       
                        每个rpm包都提供一个或多个capabilities
1
2
3
4
5
[iyunv@Centos6 Packages]# rpm -ivh php-mysql-5.3.3-40.el6_6.x86_64.rpm
warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
    php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-mysql-5.3.3-40.el6_6.x86_64
    php-pdo(x86-64) is needed by php-mysql-5.3.3-40.el6_6.x86_64



上图表示依赖关系没有解决。不给安装
            --nodeps:忽略依赖关系安装
1
2
3
4
php-mysql-5.3.3-40.el6_6.x86_64.rpm --nodeps
warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:php-mysql              ########################################### [100%]



加上参数--nodeps则忽略依赖关系进行安装。

            --replacepkgs:重装程序包
                        对已经存在的包需要重新安装,则可以使用这个参数
1
2
3
4
[iyunv@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
    package zsh-4.3.11-4.el6.centos.x86_64 is already installed



表示zsh这个包已经安装了。

                    使用--replacepkgs参数重新安装
1
2
3
4
[iyunv@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm --replacepkgs
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]



        升级:
                rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
               rpm {-F|--freshen} [install-options] PACKAGE_FILE ...       

                       -Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
                        升级也是使用Install的选项,比如--nodeps等
                       -Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;

                       --nodeps
                       --oldpackage:降级;升级版本比原先版本要低
                       --force:强制升级。老的版本依赖当前的包,如果升级了可能老的其他服务不支持,那么就会阻止升级,则使用这条参数进行强制升级。

               卸载:
                       rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] 包名(比如zsh,而不是xxxxx.rpm)
1
2
[iyunv@Centos6 Packages]# rpm -e zsh
[iyunv@Centos6 Packages]#



不会显示任何信息,如果异常则会出现报错。如果一个程序包被另外一个程序包依赖,则卸载的时候会报错,因为另外一个包存在依赖关系。

        查询:
                       rpm {-q|--query} [select-options] [query-options]
1
2
[iyunv@Centos6 Packages]# rpm -q zsh
zsh-4.3.11-4.el6.centos.x86_64



表示已经被安装

        查询选项:不能更换先后顺序,必须q在前。
                               -qa: 查询本机已经安装的所有程序包;
                               -qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
                               -qc: 查询指定程序包安装生成的配置文件
1
2
3
4
5
6
7
[iyunv@Centos6 Packages]# rpm -qc zsh
                /etc/skel/.zshrc
                /etc/zlogin
                /etc/zlogout
                /etc/zprofile
                /etc/zshenv
                /etc/zshrc




                -qd: 查询指定的程序包安装生成的文档
1
2
3
4
5
6
7
[iyunv@Centos6 Packages]# rpm -qd zsh
/usr/share/doc/zsh-4.3.11/BUGS
/usr/share/doc/zsh-4.3.11/CONTRIBUTORS
/usr/share/doc/zsh-4.3.11/FAQ
/usr/share/doc/zsh-4.3.11/FEATURES
/usr/share/doc/zsh-4.3.11/LICENCE
/usr/share/doc/zsh-4.3.11/MACHINES



                -qi: 查询指定的程序包的相关信息;
1
2
3
4
5
6
7
8
9
10
11
[iyunv@Centos6 Packages]# rpm -qi zsh
Name        : zsh                          Relocations: (not relocatable)
Version     : 4.3.11                            Vendor: CentOS
Release     : 4.el6.centos                  Build Date: Fri 24 Jul 2015 05:41:25 PM CST
Install Date: Thu 27 Aug 2015 10:15:37 AM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: zsh-4.3.11-4.el6.centos.src.rpm
Size        : 5283457                          License: BSD
Signature   : RSA/SHA1, Sat 25 Jul 2015 04:41:32 AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://zsh.sunsite.dk/
Summary     : A powerful interactive shell



-ql: 查询程序包安装生成的所有文件的列表;
                               -q --scripts:查询程序包相关的脚本:
                                       preinstall: 安装前脚本
                                       postinstall:安装后脚本
                                       preuninstall: 卸载前脚本
                                       postuninstall: 卸载后脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@Centos6 Packages]# rpm -q zsh --scripts
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
    echo "/bin/zsh" > /etc/shells
else
    grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi

if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
  --entry="* zsh: (zsh).            An enhanced bourne shell."
fi
****
***
**
*



                -p: 查询针对是未安装的程序包文件;
比如我没安装zenity这个rpm包,我可以使用-qpi跟随这个包的rpm名称来查询信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@Centos6 Packages]# rpm -qi zenity
package zenity is not installed
[iyunv@Centos6 Packages]# rpm -qip zenity
error: open of zenity failed: No such file or directory
[iyunv@Centos6 Packages]# rpm -qpi zenity
error: open of zenity failed: No such file or directory
[iyunv@Centos6 Packages]# rpm -qpi zenity-2.28.0-1.el6.x86_64.rpm
warning: zenity-2.28.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Name        : zenity                       Relocations: (not relocatable)
Version     : 2.28.0                            Vendor: CentOS
Release     : 1.el6                         Build Date: Tue 17 Aug 2010 07:12:21 AM CST
Install Date: (not installed)               Build Host: c6b2.bsys.dev.centos.org
Group       : Applications/System           Source RPM: zenity-2.28.0-1.el6.src.rpm
Size        : 4338271                          License: LGPLv2+
Signature   : RSA/8, Sun 03 Jul 2011 01:07:05 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://directory.fsf.org/zenity.html
Summary     : Display dialog boxes from shell scripts
Description :
Zenity lets you display Gtk+ dialog boxes from the command line and through
shell scripts. It is similar to gdialog, but is intended to be saner. It comes
from the same family as dialog, Xdialog, and cdialog.




                -whatprovides 查询哪种功能被哪个程序包所提供
                                -whatrequires 查询哪种能力被哪个程序包所依赖
校验:检查安装的rpm包文件是否被改动。如果对安装完的配置文件进行改动然后使用校验,则能发现被改动的文件具体路径。
1
2
3
4
5
6
7
8
[iyunv@Centos6 Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[iyunv@Centos6 Packages]# vim /etc/skel/.zshrc



我对.zshrc进行了改动,之后使用rpm -V zsh就能发现:
1
2
[iyunv@Centos6 Packages]# rpm -V zsh
S.5....T.  c /etc/skel/.zshrc




                       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 differ  删除了一个安装上去的文件,则会报错

包校验:
                来源合法性验正:非对称加密(公钥和私钥)
                完整性验正:单向加密

                导入密钥(对方的公钥):rpm --import /PATH/TO/KEY_FILE
               
                校验:rpm -K /PATH/TO/RPM_FILE
               
                只要将RPM-GPG-KEY-CentOS-6导入则能进行对Packages下的rpm包进行校验
1
2
3
[iyunv@Centos6 mnt]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6



导入密钥(对方的公钥):rpm --import /PATH/TO/KEY_FILE
1
2
[iyunv@Centos6 mnt]# rpm --import ./RPM-GPG-KEY-CentOS-6
[iyunv@Centos6 mnt]#




校验:rpm -K /PATH/TO/RPM_FILE
1
2
[iyunv@Centos6 mnt]# rpm -K ./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm
./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK



导入公钥后,则使用rpm安装不会出现warning告警了。
当RPM依赖关系复杂的时候,就有了YUM这个功能,来解决包之间的依赖关系。

YUM: Yellowdog Updater Modified

        yum repositories:
                文件服务器:
                        ftp://hostname/PATH/TO/REPO
                        http://hostname/PATH/TO/REPO
                        file:///PATH/TO/REPO

        yum程序的配置文件:
                /etc/yum.conf
                        定义全局配置:对所有仓库都适用的配置
                /etc/yum.repos.d/*.repo
                        一个文件通常用于一个或一组功能相近或相关的仓库

                        定义一个仓库指向:
                                [REPO_ID]
                                name=   指明repo名称
                                baseurl=  可以使用的路径 ftp  http  file  可以存在多个,随机挑选一个使用,所提供的包和源数据需要一样
                                mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE
                                enabled={1|0}  1启用 0禁用
                                gpgcheck={1|0}  1启用包校验  0禁用包校验
                                gpgkey=  如果启用校验,则指明使用哪个密钥校验
                                cost=  如果多个仓库,则这个仓库的开销,开销越小越容易被使用

                        定义仓库指向可用变量:
                                $releasever: 引用当前系统的主版本号;
                                $basearch: 当前系统的基本架构;
                                        i386, i486, i586, i686: i386
                http://mirrors.magedu.com/CentOS/$releasever/os/$basearch


通过yum repolist查看可用yum
1
2
3
4
5
6
[iyunv@Centos6 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, security
Determining fastest mirrors
repo id                                      repo name                               status
aa                                           aa                                      6,575
repolist: 6,575



yum命令:
                yum [options] [command] [package ...]

                        命令:
                                安装:install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[iyunv@Centos6 yum.repos.d]# yum install php-mbstring
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package php-mbstring.x86_64 0:5.3.3-40.el6_6 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-mbstring-5.3.3-40.el6_6.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.3.3-40.el6_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================
Package                 Arch              Version                     Repository     Size
===========================================================================================
Installing:
php-mbstring            x86_64            5.3.3-40.el6_6              aa            458 k
Installing for dependencies:
php-common              x86_64            5.3.3-40.el6_6              aa            527 k

Transaction Summary
===========================================================================================
Install       2 Package(s)

Total download size: 985 k
Installed size: 5.0 M



yum自己会自己解决依赖关系

            卸载:remove
                                依赖此包的其他包也会被卸载
                               
                                升级:update
                                yum check-update 检查哪些升级包可用
                                yum update 包名
                                查询:
                                        info
                                        search KEYWORD
1
2
3
4
5
6
7
[iyunv@Centos6 Packages]# yum search zsh
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
==================================== N/S Matched: zsh =====================================
python-twisted-core-zsh.x86_64 : Tab completion for Zsh and Twisted Core
zsh-html.x86_64 : Zsh shell manual in html format
zsh.x86_64 : A powerful interactive shell



       search KEYWORD     list all|installed|availiable列出安装了的包,可用的包,全部的包等
                                       
                                        provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成
                                重新安装:reinstall
                                降级:downgrade
                                清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
                                清理包,清理元数据,清理过期缓存,清理rpm数据库文件,清理插件,全部清理
                                生动生成缓存:makecache

                                包组:
                                        grouplist
                                        groupinfo "GRP_NAME"
                                        groupinstall "GRP_NAME"
                                        groupremove "GRP_NAME"

                                仓库:
                                        repolist [all|enabled|disabled]
                                        repoinfo [all|enabled|disabled]

        如何使用光盘当做本地仓库:
                挂载光盘至某目录
                定义仓库,使用file:///指明其访问路径;

简单yum配置,使用本地光盘内的源:
1
2
3
4
5
[aa]
name=aa
baseurl=file:///var/mnt
enable=1
gpecheck=0




创建本地仓库:
                yum install createrepo

                createrepo /PATH/TO/RPMFILES/
               
        DNF:yum前端管理升级版,由SUSE研发,在cenots7里面只要yum install dnf,以后可以使用dnf命令。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-113736-1-1.html 上篇帖子: centos所有版本镜像下载 下篇帖子: Linux如何查看进程、杀死进程、启动进程等常用命令 程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表