Linux软件包管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux软件包管理相关的知识,希望对你有一定的参考价值。

写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。


本篇主要内容:

● 源码安装软件

● RPM软件包管理

● YUM前端工具使用



Linux软件包管理:

   源码安装软件

   RPM程序包管理

   yum前端工具使用


源码安装:

   源代码需要进行以下操作以转换为操作系统能够识别的二进制程序文件:

      源代码-->预处理-->编译-->汇编-->链接-->二进制

   开源程序源代码的获取

      官方自建站点:

         apache.org (ASF)

         mariadb.org

         ...

      代码托管:

         SourceForge

         Github.com

         code.google.com

   源代码命名规则:

      NAME-VERSION.tar.gz

         VERSION:major.minor.release


   编译环境:

      (1)手动安装编译软件环境

         make gcc 等

         glibc 标准库

      (2)直接安装开发工具组“Development Tools”


   源码包安装建议:

      (1)最好将源码包放入到/usr/local/src/

      (2)最好将软件安装到/usr/local/。为方便卸载,最好为每个软件建立独立目录

      (3)编译完成后完成善后操作

         a.导出二进制程序到PATH环境变量中:/etc/profile.d/NAME.sh

         b.导出库文件路径,/etc/ld.so.conf.d/NAME.conf

               ldconfig [-v]:系统重新生成缓存

         c.导出头文件,以链接的方式ln -sv ...

         d.导出帮助手册。在/etc/man.config文件中添加一个MANPATH


   编译安装步骤:

      (1)./configure

         在运行之前应查看软件包的README或INSTALL文件,根据需要使用特定参数。此操作会检查系统环境是否满足软件安装要求,并生成makefile文件

         --help

         --prefix=DIR:程序包安装目录

         --sysconfdir=DIR:配置文件安装目录

         Optional Features: 可选特性

            --disable-FEATURE

            --enable-FEATURE[=ARG]

         Optional Packages: 可选包

            --with-PACKAGE[=ARG]

            --without-PACKAGE

      (2)make

         make会搜索目录下makefile的文本文件(文件中记录了如何编译的详细信息)进行编译过程简化操作。

      (3)make install

         完成安装操作


RPM程序包管理

   不同linux发行版使用不同的程序包管理工具,大致分为三类:

         debian:dpt、dpkg,“.dep”格式

         redhat:rpm(redhat package manager),“.rpm”

         S.u.S.E:rpm

         Gentoo:ports

         Archlinux:


   rpm包命名规则:

      name-VERSION-RELEASE.ARCH[.src].rpm

         VERSION:major.manor

         RACH:OS.平台

      如:dhcp-4.2.5-42.el7.centos.x86_64.rpm

         dhcp为软件名;

         4.2.5为软件版本,其中4为主版本号,2.5为次版本号;

         42为发布次数

         el7.centos.x86_64意为能够在rhel7版本或centos7版本的64为系统上运行。


   依赖关系:

      为了重复利用既有的软件功能,因此很多软件会以库的方式共享部分功能,以便其他程序进行调用。但如果安装某软件的时候,它所依赖的软件在系统上并未安装,就需要先安装依赖软件。


   软件安装注意事项:

      (1)软件文件的安装环境必须与打包时的环境需求一致或相当;

      (2)需要满足软件的依赖关系;

      (3)卸载时需要特别注意,尽量只卸载不需要的软件,而不卸载与其有依赖关系的其他软件,防止因依赖关系造成的系统故障。


   软件包相关信息数据库:

      /var/lib/rpm目录


   srpm:

      srpm的扩展名为.src.rpm,即Source RPM,是没有经过编译的源码包文件。其安装方法为:

         将.src.rpm的软件包编译为rpm文件;

         安装rpm文件到系统。


   前端工具:能够自动解决依赖关系。

         yum:rhel系列rpm包管理器的前段工具。

         apt-get:dep包管理器的前段工具。

         zypper:suse的rpm管理器前端工具。

         dnf:fedora22+系统上的rpm包管理器的前端工具。


   获取程序包的途径:

      (1) 系统发行版的光盘或官方的文件服务器(或镜像站点):

         http://mirrors.aliyun.com, 

         http://mirrors.sohu.com,

         http://mirrors.163.com 

      (2) 项目的官方站点

      (3) 第三方组织:

         (a) EPEL

         (b) 搜索引擎

            http://pkgs.org

            http://rpmfind.net 

            http://rpm.pbone.net 

      (4) 自动动手,丰衣足食


   安装前建议:

      检查其合法性

      来源合法性;

      程序包的完整性;


rpm:

   RPM Package Manager

   rpm [OPTIONS] [软件包|已安装的包名|软件安装后产生的文件]

      安装:{-i|--install}

      升级;{-U|--upgrade}或{-F|--freshen}

      卸载:{-e|--erase}

      查询:{-q|--query}

      校验:{-V|--verify}(软件安装后是否有修改配置文件等)

      验证:{-K|--checksig}(检查软件包是否有篡改)

      重建数据库:--rebuilddb

   安装与升级:

      安装:

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

      升级或安装:未安装则安装,已安装老版本则升级

         rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

      仅升级:仅对已安装老版本的软件进行升级

         rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

      [install-options]

         -v:verbose,显示详细信息

         -vv:更加信息的信息

         -h, --hash

         --nodeps:不检查依赖关系

         --test:不安装,仅测试

         --nosignature:不检查包签名信息,不检查来源合法性

         --nodigest:不检查包完整性信息

         --replacepkgs:替换系统上已安装软件,即重装

         --oldpackage:指明允许旧版本替换新版本

         注意:如果原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。

   卸载:

      rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

         -v:verbose,显示详细信息

         -vv:更加信息的信息

         --test

         --allmatches:一般情况下,当给出的程序文件名可匹配到多个程序时,会报错,而这个参数允许卸载所有匹配到的程序,而不是报错。

         --nodeps:卸载前不检查依赖关系,即只卸载对应包,而不卸载依赖于此包的程序

   查询:

      rpm {-q|--query} [select-options] [query-options] --qf|--queryformat FILE

      [select-options]

         -a, --all:查找所有已安装的包

         -f, --file FILE:查找FILE文件是由那个软件安装的

         -p, --package PACKAGE_FILE:查询非已安装的软件包中的内容

         --whatprovides CAPABILITY:查询某功能或文件是由那个包提供的

         --whatrequires CAPABILITY:查询已安装的某包被谁依赖

      [query-options]

         --changelog

         -c, --configfiles

         -d, --docfiles

         -i, --info:详细信息

         --last:按照安装顺序排序已安装软件,最后安装在最上方

         -l, --list:查询文件列表

         --provides:查询包提供的功能

         -R, --requires:查询包依赖关系

         --scripts:查看软件包自带的脚本片段

   校验:

      rpm {-V|--verify} [select-options] [verify-options]

      查询软件安装后,那些文件做了修改(非初始状态)

      输出释意:

         变动类型  文件类型  文件名

            如:S.5....T.  c /etc/dhcp/dhcpd.conf

            变动类型:

               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

            文件类型:

               c %config configuration file.

               d %doc documentation file.

               g %ghost file (i.e. the file contents are not included in the package payload).

               l %license license file.

               r %readme readme file.

   验证:

      检查软件包签名信息


YUM

   Yellow dog Update Modifier

   YUM是C/S结构的,服务器端的yum repository存储了诸多的rpm包,以及包的相关元数据文件(repodata),通常以ftp、http/https、nfs或本地文件的方式分享到客户端。

   yum客户端配置:

      配置文件:

         /etc/yum.conf:为仓库提供公共配置

         /etc/yum.repo.d/*.repo:设置仓库具体信息

         *.repo文件格式解析:

            (man 5 yum.conf 700行左右可见)

            [repositoryid]
            name=Some name for this repository
            baseurl=http://path/to/repository/
                  ftp://path/to/repository/
                  file:///path/to/repository/
                  (这里的url应该指定到repodata的上级目录)
            mirrorlist=url://path/to/repository
            enabled={1|0}
            gpgcheck={1|0}
            gpgkey=URL
            enablegroups={1|0}
            failovermethod={roundrobin|priority}
               指定URL的使用顺序,默认为roundrobin,随机,priority为顺序
            可用变量:
               $releasever:当前发行版主版本号,如7
               $arch:平台,如ia32e
               $basearch:基础平台,如x86_64
               $YUM0-$YUM9:替换系统已定义变量。



yum命令

   常用参数:

      -y, --assumeyes

      --nogpgcheck:禁止检查

      -q:静默模式

   安装:

      * install package1 [package2] [...]

      * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install)

      * reinstall package1 [package2] [...]

   升级:

      * update [package1] [package2] [...]

         --downloadonly:只下载,不安装

      * update-to [package1] [package2] [...]

      * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install)

      * check-update

      * update

   卸载:

      * remove | erase package1 [package2] [...]

   软件组:

      * groupinstall group1 [group2] [...]

      * groupupdate group1 [group2] [...]

      * grouplist [hidden] [groupwildcard] [...]

      * groupremove group1 [group2] [...]

      * groupinfo group1 [...]

   查询:

      * list [...]

         available:只可用与安装的,即本地未安装的

         updates:只可更新的

         installed:已安装的

         extras:列出仅本地已安装,而其他yum源中没有的软件包

      * info [...]

      * provides | whatprovides feature1 [feature2] [...]

      * search string1 [string2] [...]

   降级:

      * downgrade package1 [package2] [...]

   yum仓库:

      * repolist [all|enabled|disabled]

   历史记录:

      *    history    [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]

   缓存:

      * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

      * makecache

   依赖关系:

      * deplist package1 [package2] [...]

         显示所有package1...所依赖的文件及提供这些文件的其他包名

   检查:

      * check [dependencies|duplicates|obsoletes|provides|all]

         会检查当前系统上已安装的软件包的依赖关系异常、重复包、无用包、废弃包。

   其他:

      * distribution-synchronization [package1] [package2] [...]

      * shell [filename]

      * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

      * load-transaction [txfile]

      * help [command]

   补充:

      (1)install,会选择多个源中的最新版本并安装,如果给定的是一个文件而不是软件包名,会安装提供此文件的软件包。

      (2)update,后不跟软件名,会更新所有已安装的软件!!!


yum源配置:

   createrepo [options] <Packages_DIR>

      -o --outputdir <url>:将生成的repodata目录指定到其他目录,默认为Packages_DIR目录内。


本文出自 “FredDream” 博客,请务必保留此出处http://1036416056.blog.51cto.com/5943987/1753282

以上是关于Linux软件包管理的主要内容,如果未能解决你的问题,请参考以下文章

linux 学习6 软件包安装

Linux软件安装管理

Python学习第六天----Linux内存管理进程管理RPM包安装管理及源码安装软件

Linux系列教程——Linux软件包管理之RPM命令

源码包---linux软件安装与管理

Linux软件管理之src源码安装编译