Linux程序包管理

软件包管理

  API:Application Programming Interface

POSIX:Portable OS 

              程序源代码–>预处理–>编译–>汇编–>链接

              静态编译:

              共享编译:.so

  ABI:Application Binary Interface

  Windows与linux不兼容

              ELF(Executable and Linkable Format)

              PE(Portable Executable)

   库级别的虚拟化:

              Linux:WINE

              Windows:Cywin

        

  包管理器

  二进制应用程序的组成部分:

              二进制文件、库文件、配置文件、帮助文件

  程序包管理器:

              debian:deb文件,dpkg包管理器

              redhat:rpm文件,rpm包管理器

                 rpm:Redhat Package Manager

                  RPM Package Manager

  包命名和工具

            源代码:name-VERSION.tar.gz|bz2|xz

            VERSION:major,minor,release

    rpm包命名方式:

             name-VERION-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

     包:分类和拆包

               Application-VERSION-ARCH.rpm: 主包 

               Application-devel-VERSION-ARCH.rpm 开发子包 

               Application-utils-VERSION-ARHC.rpm 其它子包 

               Application-libs-VERSION-ARHC.rpm 其它子包 

               包之间:可能存在依赖关系,甚至循环依赖

   解决依赖包管理工具:

                  yum:rpm包管理器的前端工具 

              apt-get:deb包管理器前端工具 

               zypper: suse上 的rpm前端管理工具 

                  dnf: Fedora 18+ rpm包管理器前端管理工具

  库文件

  查看二进制程序所依赖的库文件:

               ldd /PATH/TO/BINARY_FILE 

   管理及查看本机装载的库文件:

               ldconfig 

   /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

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

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

  程序包管理器:

               功能:将编译好的应用程序的各组成文件打包一个或多个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级、和校验等管理操作

   1.包文件组成(每个包独有)

                RPM包内的文件

                RPM的元数据,如名称 版本 依赖性 描述等

                安装或卸载时运行的脚本

   2.数据库(公共)

               程序包名称及版本

               依赖关系

               功能说明

               包安装后生成的各文件路径及校验码信息

     

  程序包的来源

    管理程序包的方式:

            使用包管理器:rpm

            使用前端工具:yum,dnf

    获取程序包的途径:

     1.官方服务器以及国内知名站点下载;

            https://www.centos.org/download/ 

            http://mirrors.aliyun.com 

            http://mirrors.sohu.com 

            http://mirrors.163.com 

     2.项目官方站点

     3.第三方组织:

      Fedora-EPEL: 

            Extra Packages for Enterprise Linux 

      Rpmforge:RHEL推荐,包很全 

      搜索引擎: 

            http://pkgs.org 

            http://rpmfind.net 

            http://rpm.pbone.net 

            https://sourceforge.net

 4.自己制作

 #注意:检查其合法性:来源合法性,程序包的完整性

  rpm包管理

  Centos系统上使用rpm命令管理程序包:

   安装 卸载 升级 查询 校验 数据库维护 

  安装:

          rpm {-i|–install} [install-options] PACKAGE_FILE… 

             -v: verbose 

            -vv: 

             -h: 以#显示程序包管理执行进度 

             rpm -ivh PACKAGE_FILE …

 [install-options] 

             –test: 测试安装,但不真正执行安装;dry run模式 

             –nodeps:忽略依赖关系 

             –replacepkgs | replacefiles 

       –nosignature: 不检查来源合法性 

             –nodigest:不检查包完整性 

             –noscripts:不执行程序包脚本 

                 %pre:  安装前脚本; –nopre 

                %post:  安装后脚本; –nopost 

         %preun:  卸载前脚本; –nopreun 

        %postun:  卸载后脚本; –nopostun

  rpm包升级

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

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

               upgrade:安装有旧版程序包,则“升级” 

               如果不存在旧版程序包,则“安装” 

               freshen:安装有旧版程序包,则“升级” 

               如果不存在旧版程序包,则不执行升级操作 

               rpm -Uvh PACKAGE_FILE … 

               rpm -Fvh PACKAGE_FILE … 

               –oldpackage:降级

        –force:强行升级

  升级注意项

    1.不要对内核做升级操作,Linux支持多内核版本并存,因此,对直接安装新版本内核

    2.如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本 的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

  包查询

    rpm {-q|–query} [select-options] [query-options] 

    [select-options] 

                -a: 所有包 

                -f: 查看指定的文件由哪个程序包安装生成 

                -p rpmfile:针对尚未安装的程序包文件做查询操作; 

                –whatprovides CAPABILITY:查询指定的CAPABILITY 由哪个包所提供 

                –whatrequires CAPABILITY:查询指定的CAPABILITY被 哪个包所依赖 

                rpm2cpio 包文件|cpio –itv 预览包内文件 

                rpm2cpio 包文件|cpio –id  “*.conf” 释放包内文件

    

    [query-options] 

                –changelog:查询rpm包的changelog 

                -c: 查询程序的配置文件 

                -d: 查询程序的文档 

                -i: information 

                -l: 查看指定的程序包安装后生成的所有文件 

                –scripts:程序包自带的脚本 

                -R: 查询指定的程序包所依赖的CAPABILITY 

                –provides: 列出指定程序包所提供的CAPABILITY

查询方法

                -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE 

                -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, … 

                -qa 

卸载

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

包校验

 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

包来源合法性验证及完整性验证

               完整性验证:SHA256

           来源合法性验证:RSA

公钥加密:

           对称加密:加密、解密使用同一密钥;

 非对称加密:密钥是成对儿的

         public key:公钥,公开所有人

         secret key:私钥,不能公开

导入公钥:

    rpm -K|checksig rpmfile 检查包的完整性和签名

    rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    Centos 7发行版本光盘提供:RPM-GPG-KEY-CentOS-7

    rpm -qa gpg-pubkey*

rpm数据库重建:

/var/lib/rpm

  rpm{–initdb|–rebuilddb}

    initdb:初始化

    如果事先不存在数据库,则新建之

    否则,不执行任何操作

    rebuilddb:重建已安装的包头的数据库索引目录

    

  yum配置:

   yum客户端配置文件:

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

           /etc/yum.repos.d/*.repo:为仓库的指向提供配置

   创库的指向的定义:

                    [repositoryID]

                name=Some name for this repository

                baseurl=url://path/to/repository/

                enabled={1|0}

                ggcheck={1|0}

                 gpgkey=URL

           enablegroups={1|0}

   默认为:roundrobin,意为随机挑选;

               cost= 默认为1000

               yum-config-manager –disable '仓库名' 禁用仓库

               yum-config-manager –enable  '仓库名' 启用仓库

  显示仓库列表

               yum repolist [all|enabled|disabled]

  显示程序包

               yum list

               yum list[all|glob_exp1][glob_exp2] [..]

               yum list{available|installed|updates} [glob_exp1] […]

 安装程序包:

               yum install package1 [package2][…]

               yum reinstall package1 [package2][…](重新安装)

 升级程序包:

               yum update [package1] [package2] […] 

               yum downgrade package1 [package2] […] (降级) 

 检查可用升级:

               yum check-update

 卸载程序包:

               yum remove | erase package1 [package2] […] 

 查看程序包:

               yum info […]

 查看指定的特性(可以是某文件)是由哪个程序包所提供:

               yum provides | whatprovides feature1 [feature2] […]

 清理本地缓存:

               yum clean [Packages | metadata | expire-cache | rpmdb | plugins |all ]

 构建缓存:

               yum makecache

 搜索:

               yum search string1 [string2] […]

 以指定的关键字搜索程序包名及summary信息 

 查看指定包所依赖的capabilities:

               yum deplist package1 [package2] […]

 查看yum事务历史:

               yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats]

               yum history 

               yum history info 6 

               yum history undo 6 

                日志:/var/log/yum.log

 安装及升级本地程序包:

               yum localinstall rpmfile1 [rpmfile2] […] (用install替代)

               yum localupdate rpmfile1 [rpmfile2] […]  (用update替代)

 包组管理的相关命令:

               yum groupinstall group1 [group2] […] 

               yum groupupdate group1 [group2] […] 

               yum grouplist [hidden] [groupwildcard] […] 

               yum groupremove group1 [group2] […] 

               yum groupinfo group1 […]

 

 使用光盘当做本地yum仓库:

 1.挂载光盘至某目录,例如/media/cdrom

               mount /dev/cdrom /media/cdrom

 2.创建配置文件

 [yum.CentOS 7]

               name=

      baseurl=

     gpgcheck=

            enabled=

 yum的命令行选项:

               –nogpgcheck:禁止进行gpg check 

               -y: 自动回答为“yes” -q:静默模式 

               –disablerepo=repoidglob:临时禁用此处指定的repo 

               –enablerepo=repoidglob:临时启用此处指定的repo 

               –noplugins:禁用所有插件

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

               $releasever: 当前OS的发行版的主版本号 

               $arch: 平台,i386,i486,i586,x86_64等 

               $basearch:基础平台;i386 $YUM0-$YUM9:自定义变量

实例: 

               http://server/centos/$releasever/$basearch/ 

               http://server/centos/7/x86_64 

               http://server/centos/6/i384 

   程序包编译:

  Application-VERSION-release.src.rpm –> 安装后,使 用rpmbuild命令制作成二进制格式的rpm包,而后再安装 

  源代码–>预处理–>编译–>汇编–>链接–>执行

  源代码组织格式: 

              多文件:文件中的代码之间,很可能存在跨文件依赖关系 

              C、C++:make (项目管理器,configure –> Makefile.in –> makefile) 

                java: maven

  编译安装:

  C代码编译安装三步骤:

  1、./configure: 

   (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in文件生成makefile 

   (2) 检查依赖到的外部环境,如依赖的软件包 

  2、make:根据makefile文件,构建应用程序 3、make install:复制文件到相应路径

  3、make install:复制文件到相应路径

  开发工具:

              autoconf:生成configure脚本

              automake:生成Makefile.in

  #注意:安装前查看INSTALL,README

  开源程序源代码的获取:

  官方自建站点:

  apache.org (ASF:Apache Software Foundation) 

  mariadb.org 

  … 

  代码托管: 

  SourceForge.net 

  Github.com 

  code.google.com 

    c/c++编译器: gcc (GNU C Complier)

    准备:提供开发工具及开发环境 

    开发工具:make, gcc等 

    开发环境:开发库,头文件 

    glibc:标准库 

    实现:通过“包组”提供开发组件 

    CentOS 6: 

               Development Tools Server Platform 

               Development 

    CentOS 7: 

               Development Tools 

               Development and Creative Workstation

  

  第一步:configure脚本 选项:指定安装位置、指定启用的特性 

                 –help: 获取其支持使用的选项

   选项分类: 

   安装路径设定: 

                 –prefix=/PATH: 指定默认安装位置,默认为/usr/local/ 

                 –sysconfdir=/PATH:配置文件安装位置 

  System types:支持交叉编译

Optional Features: 可选特性 

                   –disable-FEATURE 

                   –enable-FEATURE[=ARG] 

                  Optional Packages: 可选包

                   –with-PACKAGE[=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 

       (4) 导入帮助手册 编辑/etc/man.config|man_db.conf文件 添加一个MANPATH

原创文章,作者:闹钟哥,如若转载,请注明出处:http://www.178linux.com/40693

(0)
闹钟哥闹钟哥
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • SHELL中的变量

    SHELL中的变量            运行SHELL脚本中的单个命令自然有用,但这有其自身的限制。通常你会需要在SHELL命令使用其他数据来处理信息。这可以通过变量来实现。变量允许你临时性地将信息存储在SHELL脚本中,以便和脚本中的其他命令一起使用。 1 环境变量…

    Linux干货 2017-04-16
  • 谷歌三大核心技术(一)The Google File System中文版

    摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。 虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们的设计还是以我们对自己的应用的负载情况和技术环境的分析为基础的,不管现在还是…

    Linux干货 2015-04-13
  • Linux-raid的工作原理与管理

    本章内容:        1、RAID详细描述        2、mdadm 工具        3、创建raid        4、磁盘阵列的管理 RAID描述:     &nb…

    2017-06-24
  • LVM2详解

    1、什么是lvm LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样…

    Linux干货 2017-01-03
  • 2.Linux文件管理类命令

    Linux文件管理类命令 cp命令:copy 源文件;目标文件; 单源复制:cp [OPTION]… [-T] SOURCE DEST 多源复制:cp [OPTION]… SOURCE… DIRECTORY | cp [OPTION]… -t DIRECTORY SOURCE… 单源复制:cp [OPTION]… [-T]&…

    Linux干货 2017-07-09
  • 文本处理工具补充之sed命令

    sed:stream editor,行编辑器         sed命令工作原理:它在处理数据时,每次只处理一行,首先把当前处理的行存储在临时缓冲区中,我们称这个缓冲区称为“”模式空间“,接着用sed命令处理缓冲区中的内容,处理完后,把缓冲区中的内容送到屏幕上显示出来,接着去处理…

    Linux干货 2016-08-11