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

[经验分享] Linux软件包管理器rpm与yum

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-26 10:13:17 | 显示全部楼层 |阅读模式
在我们的运维工作,总是避免不了安装某些软件,或者编译安装某些软件,我们知道操作系统当中的程序都是有程序员通过开发工具开发的来,程序员直接编写的纯文本的文档我们称之为源代码,但我们的计算机只能识别二进制程序,那么必须要将源代码变成计算机能识别的二进制程序,这里需要通过编译器来进行编译,将源码转换成二进制程序,再通过安装即可。
还有一类程序就是二进制程序,系统是由某些厂商来做的,在厂商的系统上编译出来的程序,自然就在系统上运行了,这里是由厂商直接编译好程序然后释放出来给用户,如此一来,由于我们本来就使用厂商的发行版,系统是一样的,那么使用厂商的提供编译过的程序就没问题。首先来介绍下软件运行的环境

※软件运行环境
API:Application Programming Interface
       POSIX: Portable OS
程序源代码—à预处理—à编译—-à汇编—-à链接
静态编译:编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。
共享编译:将库提取出来,与可执行文件链接到一起,实现共享编译
ABI:Application Binary Interface
Windows与linux不兼容
         ELF(Executable and Linkable Format)
         PE
库级别的虚拟化

         linux:WINE
         windows:Cywin

※包管理器
二进制应用程序的组成部分:
       二进制文件、库文件、配置文件、帮助文件、头文件
程序包管理器
将编译好的应用程序组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等操作目前在Linux系统之上软件的安装方式最常见的有一下两种方式:
dpkg
这个机制最早是有Debian Linux社区所开发出来的,通过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。基于Debian衍生版系统,如B2D,Ubantu等都是用dpkg来管理软件的。

RPM
  这个机制最早是由redhat公司开发出来,后来大家觉得这个管理器非常好用,因此很多发行版就使用这个机器来作为软件包的管理器如SuSe,Fedora,CentOS。
  但是如上的两种包管理器的机制或多或少都会有软件属性的相依的问题,其实在安装时,每个文件文件都提供依赖性的检查,那么如果我们将依赖性的数据做成列表、等到安装时,如果有依赖关系,通过依赖性的数据列表,管理机制就会同时安装被依赖的软件。


※软件包命令规则
源代码:
name-version.tar.gz|bz2|xz
version:major(主版本号).minor(次版本号).release(释放号)
比如:httpd-2.4.6.tar.bz2包的名字叫httpd主版本号是2次版本号是4释放号是6(也是修改过6次的意思)后面是以打包压缩的方式存储

rpm包命名方式
      name-version-release.arch.rpm
  例如:bash-4.2.46-19.el7.x86_64.rpm
  包名称叫做bash主版本号是4,次版本号是2,修整号是46,适合的硬件平台是el7.x86
  主版本号:当新功能推出时,更新主版本号,或者某些功能有较大的变化时,就需要更新了
  次版本号:与主版本号相同,次版本号更新只是局部的,但仍然有较为重要的改进和增强,这是需要变动版本号了
  修订号:局部的变量,一般只是修复bug,或者简单的功能扩展
  因此,主版本号最为稳定,变化的周期长,修改号更新快,变化周期短

常见的arch
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
跟平台无关:noarch

包分类和拆包
Application-version-arch.rpm:主包
Application-devel-version-arch.rpm开发子包
Application-utils-version-arch.rpm其他子包
Application-libs-version-arch.rpm其他子包

解决依赖包管理工具
    yum:rpm包管理器的前端工具
    apt-get:deb包管理器前端工具
    zipper:suse上的rpm前端管理工具
    dnf:Fedora 18版本以上的rpm包管理器前端工具

库文件:
查看二进制程序所依赖的库文件
         ldd  /path/to/binary_file
比如:ldd  /bin/ls

管理及查看本机装载的库文件
         ldconfig
         /sbin/ldconfig –p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
         配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d*.conf
         缓存文件:/etc/ld.so.cache

程序包来源
  •          系统光盘
  •          项目官方站点
  •          第三方组织如Fedora EPEL(Extra Packages for Enterprise Linux)
  •          自己制作



※RPM

优点
  •          rpm内含已经编译过的程序与配置文件等数据,可以让使用者免除重新编译的困扰。
  •          rpm在被安装之前,会检查系统的硬盘容量、操作系统版本、可避免文件被错误安装
  •          rpm文件本身提供软件版本咨询,依赖性软件名称,软件用途说明、软件含义便于了解软件



rpm的管理分为安装、卸载、升级、查询、检验、数据库维护

安装:
    rpm {i|install} [install-option]  PACKAGES_FILE…
     -h:hash,以#表示安装进度,每个#表示%2
     -v|–verbose:显示详细过程
     -vv:显示更详细的过程
     [install-option]
    rpm –ivh –test:测试安装;但不真正执行安装;在dry run模式下进行
    rpm –ivh –  –nodeps:忽略依赖关系
    rpm –ivh –  –replacepkgs:重新安装,替换原有安装
    rpm –ivh –  –nosignature:不检查来源合法性
    rpm –ivh –  –nodigest:不检查包完整性
    rpm –ivh –  –force:强行安装,可以实行重装或降级
    rpm –ivh –  –scripts:不执行程序包脚本片段



查询:
    rpm {q|–query}  [select-options] [query-options]
    rpm -q packages_name: 查询指定的包是否已安装
    rpm -qa:查询所有已安装的包
    rpm -qi packages_name:查询指定包的说明信息
    rpm -ql packages_name:查询指定安装包生成的文件
    rpm –qc packages_name:查询指定安装包生成的配置文件
    rpm –qd packages_name:查询指定安装包生成的帮助文件
    rpm –qf files_name:查询指定的文件是由那个包安装生成的
    rpm –qp files_name:查询指定未安装的程序包文件做查询操作
    –whatprovides capability:查询指定的capability被那个包所提供
    –whatrequires capability:查询指定的capability被那个包所依赖
    rpm –q –scripts packages_name:查看指定的包中包含的脚本
    rpm –q –changelog packages_name:查询rpm包改变日志
    rpm –R packages_name:查询指定的程序包所以来的capabilty
    rpm2cpio 包文件|cpio –itv 预览包里的文件
    rpm2cpio 包文件|cpio –id “*.conf”释放包内文件

    1471919526568673.jpg

升级:
    rpm {-U|–upgrade}[install-options] PACKAGES_FILE…:如果有老版本的,则升级,否则,则安装
    rpm {-F|–freshen}[install-options] PACKAGES_FILE…:如果有老版本的,则升级,否则,则退出安装
    –oldpackages:降级
注意:
不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核
如果源程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会覆盖老版本的配置文件,而把新版的文件命令为以.rpmnew的文件保留


卸载:

    rpm {-e|–erase}  [–allmatches] [–nodeps][–test] PACKAGES_NAME
    简单用法:rpm –e packages_name
    –nodeps:忽略依赖关系
    –test:测试卸载;dry-run模式
    –allmatches:如果一个程序包同时安装多个版本时,则此选项一次全部卸载,但程序包配置文件安装后曾被修改,卸载时,此文 件通常不会被删除,而是被重名为以.rpmsave的文件保留


校验:
  查询包安装之后生成的文件是否发生了改变
    rpm {-V|–verify} [select-options][verify-options]
常用用法:rpm –V packages_name
当没有输出结果时表示软件包完整ok,当有相应的结果输出表明对应的内容有修改,具体如下:
    S file Size differs  文件的容量大小发生改变
    5(MD5 sum differs)MD5这一种指纹码的内容发生改变
    M Mode 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  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  验证 rpm –K  packages_name
    1471919579226191.jpg


重建数据库
  当我们把数据库的文件删除之后,我们查询软件包的信息都是查询不到的,因为rpm –q是依据数据库里的数据来进行查询,这时就需要重建数据库了
  数据库位置
     /var/lib/rpm
     rpm {–initdb|–rebuilddb}
     rpm –initab:初始化,如果事先不存在数据库,则新建,否则,不执行任何操作
     rebuilddb:重建,无论事先是否存在,直接重新创建数据库




※yum

       yum:Yellowdag Update Modifier,yum是通过分析rpm的标头文件数据后,根据各软件的依赖关系制作出有依赖关系时的解决方案,然后可以自动处理软件的依赖性问题,以解决软件安装或移除与升级的问题。因此我们想使用yum 必须先要找到适合的yum server才行,而每个yum server可能都会提供许多不同的软件功能,yum server会根据功能进行分类,这里的分类就是所谓的仓库,yum repository 存储了众多rpm包,以及报相关的元数据文件放置在特定目录repodate下
    yum仓库中的元数据文件
    primary.xml.gz:所有的rpm包的列表,依赖关系,以及每个rpm安装生成的文件列表
    filelists.xml.gz:当前仓库中所有rpm包的所有文件列表
    other.xml.gz:额外信息,rpm包的修改日志
    repomd.xml:记录的事上面三个文件的时间戳和检验和
    coms*.xml.:rpm分组信息

yum客户端配置文件
    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库的定义:
    [reposirtoryID]次repository用来表示此repository执行,并且唯一
    name= description对仓库的描述信息
    baseurl=url://path/to/repository 指定仓库的访问路径,通常为一个文件服务器上输出的repository,要跟repodata这个目录在同一个目录下的路径
    http://10.1.0.1/cobbler/ks_mirror/7/
    ftp://10.1.0.1/iso/7
    file:///mnt/
    enabled={1|0}是否启用仓库1表示启动,0表示禁用
    gpgcheck={1|0}是否对程序包做校验,1表示校验,0表示不校验
    gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-CentOS-6指明gpgkey文件路径
    cost=#  #表示数字,指明当前仓库的访问开销,默认为1000,数值越小优先级越高

    1471919608143938.jpg
yum-config-manager
    yun-config-manager –disable “repository_name” 禁用此仓库
    yun-config-manager –enable  “repository_name” 启用此仓库

yum命令介绍
显示仓库列表
    yum repolist [all|enabled|disabled]
all:列出已经配置的所有的可用仓库
disable:列出禁用的仓库
enabled:列出启动的仓库

显示程序包
    yum list[all|glob_expr1][glob_expr2 ]   列出所有包
    yum reinstall [packeages]                            重新安装指定包
    yum grouplist group1 group2 […]              查看指定包组,不指定组查看所有组

安装程序包
    yum install packages [packages2][…]    安装某程序包
    yum groupinstall packages [packages2][…] 安装包组
在安装某些软件时,有时需要依赖某些安装包,这时yum会自动解决依赖关系

升级程序包
    yum update [packages1] [packages2][…]   升级
    yum downgrade packages1 [packages2][…] 降级

检查可用性
    yum check-update
    1471919629294465.jpg
卸载程序包
    yum remove|erase packages1[packages2][…]     删除包
    yum groupremove|erase packages1[packages2][…] 删除包组

查看程序包信息
    yum  info   显示所有包的信息    此功能跟rpm –qi类似
    yum  info packages  显示指定包的信息
    yum groupinfo gropu1 显示指定包组的信息

清理本地缓存
    yum clean 清理缓存
    yum clean [packages]metadata|expire-cache|rpmdb|pkugins|all]

构建缓存
    yum makecache

查看yum事物历史
    yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo]
    yum history:显示所有历史事物
    yum history info 6 显示指定历史事物信息
    yum history undo 6:如果第六步是安装这里则是卸载,反之则是安装

      1471919648187118.jpg


如何创建本地yum仓库
    1、挂载本地光盘,如/mnt
    #mount /dev/cdrom /mnt/
2、创建仓库
    vim /etc/yum.repos.d/base.repo
    [cdrom]
    name=123
    baseurl=file:///mnt
    enabled=1
    gpgcheck=0
到这里本地yum仓库就配置好了

yum的命令行选项
     –nogpgcheck:禁止进行gpg check
     -y:自动回答为yes
     -q:静默模式
     –disablerepo=repoidglob:临时禁用此处指定的repo
     –enabledrepo=repoidglob:临时启动此处指定repo
     –noplugins:禁用所有插件


编译安装
    1、c代码编译安装三步骤
通过选项传递参数,指定启用特性,安装路径,执行时会参考用户的指定以及makefile.in文件生成的makefile,检查一来到的外部环境
    2、make:根据makefile文件,构建应用程序
    3、makeinstall 复制文件到相应路径

开发工具:
    autoconf:生成configure脚本
    automake:生成makefile.in文件

编译Cyuandaima
  前提:提供开发工具及开发环境
  开发工具:make,gcc等
  开发环境:开发库,头文件,glibc标准库
  通过安装包组提供开发珠江
     yum groupinstall “Development Tools”
     yum groupinstall “Server Platform Development


编译安装
  第一步:configure脚本
  选项:指定安装位置,指定启用的特性
    –help:获取其支持使用的选项

安装路径设定
    –prefix=/Path:指定默认安装位置,默认为/usr/loca
    –sysconfdir=/path:配置文件安装位置

    optional Features:可选特性
    –disable-feature
    –enable-feature
    optional packages:可选包
    –with-packages[=arg]依赖包
    –without-package禁用依赖关系

  第二步:make
  第三步: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
导入帮助手册
   编辑/etc/man.config|man_db.conf文件
   添加一个MANPATH
1、  yum的配置和使用;包括yum repository的创建
   我将一些rpm包下载至/root/repo目录下,此时目录下没有repodate的数据目录,构建仓库就会报错,这时就需要createrepo,系统中默认createrepo这个命令是没有安装的,所以需要安装
    createrepo [options] <directory>
    create  /root/repo
创建了repo数据文件之后,这时候就需要配置yum仓库了,在/etc/repos.d/目录下创建一个以repo结尾的文件即可,内容如下
    [xen]          #仓库名称
    name=1  #仓库描述
    baseurl=file:///root/repo  #仓库的路径
    enabled=1         #是否启用仓库1表示启用,0表示禁用
    gpgcheck=0   #是否检查来源合法性
    cost=100   #仓库优先级默认值为1000,值越小,优先级越高

2、编译安装apache 2.2,并启动此服务
  第一步:下载源码包wget: ftp://10.1.0.1/pub/Sources/sources/httpd/ httpd-2.2.29.tar.bz2
  下载完成之后就需要解压缩,随后进入到该目录,里面有个configure的脚本
      ./configure –prefix=/usr/local/apache  –sysconfdir=/etc/httpd2  (prefix指定安装路径,sysconfdir指定配置文件路径)

第二步: make 生成文件
第三步: make install  将make生成的文件拷贝至指定安装目录下
第四步:导出头文件、库文件、帮助文档、二进制程序
1、  ln  -sv /usr/local/apache/include  /usr/include/httpd 导出头文件
2、  导出帮助文件
vim  /etc/man.config
MANPATH=/usr/loca/apache/man       centos6
vim  /etc/man_db.conf
MANDATORY_MANPATH      /usr/loca/apache/man  centos7
3、  导出库文件
vim /etc/ld.so.conf.d/httpd2.conf
/usr/local/apache/lib   在文件中加入此行即可
4、  二进制程序
vim  /etc/profile.d/httpd.conf
export  PATH=$PATH:/usr/local/apache/bin
5、  服务脚本
cp /etc/rc.d/init.d/httpd    /etc/rc.d/init.d/httpd24
chmod  +x /etc/rc.d/init.d/httpd
加入以下几行:
apachectl=/usr/local/apache/bin/apachectl
httpd=/usr/local/apache/bin/httpd
prog=httpd
pidfile=${PIDFILE=/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}

vim /etc/httpd24/httpd.conf
增加一行
PidFile=/var/run/httpd24.pid

service  httpd24  start  启动服务即可
ss  -tan 查看有没有80端口监听
使用crul   httpdserver测试页面是否正常显示,如果端口起来了,还是看不到内容可能是防火墙开了,这是需要iptables –F临时的清理以下防火墙的策略


运维网声明 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-263245-1-1.html 上篇帖子: dhcp协议详解与在linux上的配置 下篇帖子: SecureCRT ssh连接一直提示密码错误 软件包 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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