Linux程序包管理:

APIApplicationProgramming Interface   应用编程接口

     POSIXPortable OS    遵循本协议的程序均可在不同系统间移植


 程序编写完成后,执行所要经过的处理步骤:

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

    静态编译:

    共享编译:直接调用.so共享对象实现

 

ABIApplicationBinary Interface  应用二进制接口

    WindowsLinux所支持的可执行二进制文件格式不同,不兼容

    库级别的虚拟化:(可以通过安装虚拟共享库运行)

             Linux:WINE

             Windows:Cywin

 

系统级开发

          C

          C++

应用级开发

         java

         Python

         php

         perl

         ruby

 

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

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

 

程序包管理器:

        debiandeb, dpt

        redhat:rpm, rpm

           rpm:Redhat Package Manager

              RPMis Package Manager

        Gentoo

        Archlinux

 

        

 源代码:name-VERSION.tar.gz

             VERSION:major.minor.release

 rpm包命名方式:

     name-VERSION-release.arch.rpm

             VERSION:major.minor.release  主版本号.次版本号.release号

                 release.arch

                        releaserelease.OS

             如:zlib-1.2.7-13.el7.i686.rpm

 

             常见的arch

                     x86:i386, i486, i586, i686

                     x86_64:x64, x86_64, amd64

                     powerpc:ppc

                     跟平台无关:noarch

 

     testapp:拆包(遇到某些包的程序不符合实际应用时,就需要拆包)

         testapp-VERSION-ARCH.rpm:主包

         testapp-devel-VERSION-ARCH.rpm:支包

         testapp-testing-VERSION-ARHC.rpm

 

     包之间:存在依赖关系

              X,Y, Z

              yumrpm包管理器的前端工具,用于解决程序包依赖关系并自动安装;

              apt-getdeb包管理器前端工具;

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

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

 

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

         ldd/PATH/TO/BINARY_FILE

 Linux程序包管理及yum安装管理_第1张图片

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

         ldconfig

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

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

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

Linux程序包管理及yum安装管理_第2张图片

 

 程序包管理:

     功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包

           的安装、卸载、查询、升级和校验等管理操作;

 

     1、程序的组成组成清单 (每个包独有)

                文件清单

                安装或卸载时运行的脚本

     2、数据库(公共)

                程序包名称及版本

                依赖关系;

                功能说明;

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

 

 管理程序包的方式:

           使用包管理器:rpm

           使用前端工具:yum,dnf

 

 获取程序包的途径:

           (1)系统发版的光盘或官方的服务器;

                  CentOS镜像:

                     http://mirrors.aliyun.com

                     http://mirrors.sohu.com

                     http://mirrors.163.com

 

           (2)项目官方站点

           (3)第三方组织:

                  Fedora-EPEL

                  搜索引擎:

                        http://pkgs.org

                        http://rpmfind.net

                        http://rpm.pbone.net

            (4)自己制作

 

   建议:检查其合法性

             来源合法性;

             程序包的完整性;

 

 

CentOS系统上rpm命令管理程序包:


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

 

 安装:

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

             -v:verbose 显示详细信息

             -vv:显示更多调试信息

             -h:#显示程序包管理执行进度;每个#表示2%的进度

             rpm-ivh PACKAGE_FILE ...

               [install-options]

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

                    --nodeps:忽略依赖关系;

                    --replacepkgs: 重新安装;

                    --nosignature:不检查来源合法性;

                    --nodigest:不检查包完整性;

                    --noscipts:不执行程序包脚本片断;(脚本分为四类)

                                %pre:安装前脚本;     --nopre

                                %post:安装后脚本;    --nopost

                                %preun:卸载前脚本;   --nopreun

                                %postun:卸载后脚本;  --nopostun

 

Linux程序包管理及yum安装管理_第3张图片

Linux程序包管理及yum安装管理_第4张图片

              此升级应注意如果原zsh包已修改过配置文件,则可能被覆盖或者新安装的配置文件可能不会生效


 升级:

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

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

           upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;

           freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;

 

           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/PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

                   --whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个包所提供;

                   --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

Linux程序包管理及yum安装管理_第5张图片

        [query-options]  查询选项

                   --changelog:查询rpm包的changlog

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

                   -d:查询程序的文档

                   -i:information  显示包的信息(名称、版本等)

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

                   --scripts:程序包自带的脚本片断

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

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

Linux程序包管理及yum安装管理_第6张图片

Linux程序包管理及yum安装管理_第7张图片

Linux程序包管理及yum安装管理_第8张图片

Linux程序包管理及yum安装管理_第9张图片

Linux程序包管理及yum安装管理_第10张图片

Linux程序包管理及yum安装管理_第11张图片

Linux程序包管理及yum安装管理_第12张图片


         用法(常用):

              -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 ...

             wKiom1XkatKAzPcEAABPo-PZNwg589.jpg

 

 

 校验:

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

wKioL1Xkbz_wsPR7AADp428T5MY084.jpg

         S file Size differs

         M Mode differs (includes permissions andfile 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

         PcaPabilities differ

 

 包来源合法性验正及完整性验正:

           完整性验正:SHA256

           来源合法性验正:RSA

 

 

           公钥加密:

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

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

                               publickey: 公钥,公开所有人

                               secretkey: 私钥, 不能公开

 

 

            导入所需要公钥:

                        rpm--import /PATH/FROM/GPG-PUBKEY-FILE

                        CentOS7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7

wKiom1XkbdPiXxktAADP_TqiBC0507.jpg

 

  数据库重建:

            rpm{--initdb|--rebuilddb}

                   initdb:初始化

                          如果事先不存在数据库,则新建之;否则,不执行任何操作;

 

                   rebuilddb:重建

                              无论当前存在与否,直接重新创建数据库;

 


Linux程序包管理(2)

 

  CentOS:yum, dnf

 

  URL:ftp://172.16.0.1/pub/    

 

  YUM:yellow dog, Yellowdog Update Modifier

 

  yumrepository: yum repo

       存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);

 

       文件服务器:

                 ftp://

                 http://

                 nfs://

                 file:///

 

yum客户端:

   配置文件:

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

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

 

   仓库指向的定义:(等号左右不可以出现空格)

        [repositoryID]

        name=Somename for this repository

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

        enabled={1|0}   是否启用此仓库,默认启用,可不写

        gpgcheck={1|0}  对于此仓库的所有程序包安装前是否检查完整性和来源合法性

        gpgkey=URL    指明URLGPG秘钥文件的访问路径

        enablegroups={1|0}  是否允许在此仓库上基于组批量管理程序包,默认为支持

        failovermethod={roundrobin|priority}故障转移方法{轮巡(随机)|优先级}

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

        cost=   开销

                默认为1000

        教室里的yum源:

                   http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/

                   CentOS6.6 X86_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/

 

          mvCentOS-Base.repo CentOS-Base.repo.bak

          vimcentos-local.repo

Linux程序包管理及yum安装管理_第13张图片

Linux程序包管理及yum安装管理_第14张图片


yum命令的用法:

   yum[options] [command] [package ...]

 

      command is one of:

       * install package1 [package2] [...]

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

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

       * check-update

       * upgrade [package1] [package2] [...]

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

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

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

       * list [...]

       * info [...]

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

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

       * makecache

       * groupinstall group1 [group2] [...]

       * groupupdate group1 [group2] [...]

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

       * groupremove group1 [group2] [...]

       * groupinfo group1 [...]

       * search string1 [string2] [...]

       * shell [filename]

       * resolvedep dep1 [dep2] [...]

       * localinstall rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use install)

       * localupdate rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use update)

       * reinstall package1 [package2] [...]

       * downgrade package1 [package2] [...]

       * deplist package1 [package2] [...]

       * repolist [all|enabled|disabled]

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

       * history[info|list|packages-list|packages-info|summary|addon-info|redo

                |undo|rollback|new|sync|stats]

       * check

       * help [command]  获取帮助信息

 

    显示仓库列表:

             repolist [all|enabled|disabled]  [全部|启用|禁用]

 

    显示程序包:

     list

      # yum list [all | glob_exp1] [glob_exp2][...]  支持glob通配

      # yum list {available|installed|updates}[glob_exp1] [...]  {尚未安装|已安装|可用升级}

 

    安装程序包:

             install package1 [package2] [...]

              可以指定安装程序的某一版本:yuminstall gcc-4.5.4

             reinstall package1 [package2][...]  (重新安装)

请看下面的示例:

Linux程序包管理及yum安装管理_第15张图片

Linux程序包管理及yum安装管理_第16张图片

Linux程序包管理及yum安装管理_第17张图片

    升级程序包:

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

 

             downgrade package1 [package2] [...] (降级)

 

    检查可用升级:

             check-update

 

    卸载程序包:

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

       注:会同时卸载依赖此包的其他程序


Linux程序包管理及yum安装管理_第18张图片

    查看程序包information

             info [...]

Linux程序包管理及yum安装管理_第19张图片

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

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

Linux程序包管理及yum安装管理_第20张图片

    清理本地缓存:

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

              程序包   元数据    过期缓存    rpmdb 插件  所有

    构建缓存:

             makecache

 

    搜索:

             search string1 [string2] [...]

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

Linux程序包管理及yum安装管理_第21张图片

 

    查看指定包所依赖的capabilities

             deplist package1 [package2] [...]

Linux程序包管理及yum安装管理_第22张图片

 

    查看yum事务历史:

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

        包列表    包信息

        Linux程序包管理及yum安装管理_第23张图片     

        Linux程序包管理及yum安装管理_第24张图片  

 

    安装及升级本地程序包:(能够解决依赖包关系)

                   *localinstall rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use install)

       * localupdate rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use update)

 

  

    包组管理的相关命令:

       * groupinstall group1 [group2] [...]  yum groupinstall "Development Tools"

                             CentOS7 yumgroupinstall "开发工具"

       * groupupdate group1 [group2] [...]

       * grouplist [hidden] [groupwildcard] [...]  显示包组

       * groupremove group1 [group2] [...]

       * groupinfo group1 [...]     yumgroupinfo "Development Tools"

Linux程序包管理及yum安装管理_第25张图片 

yum源指向只能升级不能降级,如CentOS6.6只能使用版本大于等于CentOS6.6的源

 

 

CentOS7

    如何使用光盘当作本地yum仓库:

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

                       # mount -r -t iso9660/dev/cdrom /media/cdrom

      wKiom1Xi_-bwHcYQAADCjHybWlw354.jpg

 

     Linux程序包管理及yum安装管理_第26张图片

      wKiom1XjAEajGYizAADMj0h2Cyw688.jpg

 

   yum的命令行选项:

             --nogpgcheck:禁止进行gpg check

             -y: 自动回答为“yes”;

             -q:静默模式;

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

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

             --noplugins:禁用所有插件;

 

   yumrepo配置文件中可用的变量:

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

             $arch:        平台;

             $basearch   基础平台;

             $YUM0-$YUM9 用户可自定义平台

 

             http://mirrors.magedu.com/centos/$releasever/$basearch/os

 

创建本地yum仓库:(CentOS 6

            

以教室服务器为例:

 

Linux程序包管理及yum安装管理_第27张图片

 

                                             切换到即将下载文件的目录

 

 

 

 

 

   

 

……



Linux程序包管理及yum安装管理_第28张图片

     说明:!mkdir -p/yum/repo  !表示执行shell脚本程序

          lcd /yum/repo  l表示在本地执行[目录切换]

          mget *.rpm  下载*.rpm到本地/yum/repo


wKiom1XjATbx9at8AADNDfWTpLg679.jpg


接下来创建repodata      createrepo [options]

  Linux程序包管理及yum安装管理_第29张图片

[root@localhost repo]# ll可查看到当前目录已经有repodata

接下来需要去编辑local.repo文件

   [root@localhost~]# cd /etc/yum.repos.d/

   [[email protected]]# vim centos-local.repo


Linux程序包管理及yum安装管理_第30张图片



本地yum源创建成功。

 

 

程序包编译安装:

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

 

    源代码 --> 预处理 --> 编译(gcc)--> 汇编 --> 链接 --> 执行

 

源代码组织格式:

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

    CC++ make(configure --> Makefile.in --> makefile)

    java: maven

 

C代码编译安装三步骤:

     ./configure

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

           文件生成makefile

        (2)检查依赖到的外部环境;

     make

          根据makefile文件,构建应用程序;

     make install

          脚本,把构建的二进制放到指定路径

             开发工具:

                      autoconf:   生成configure脚本

                      automake  生成Makefile.in

 

             建议:安装前查看INSTALLREADME

 

开源程序源代码的获取:

     官方自建站点:

         apache.org(ASF)

         mariadb.org

         ...

     代码托管:

         SourceForge

         Github.com

         code.google.com

 

c/c++:gcc (GNU C Complier)

 

编译C源代码:

    前提:提供开发工具及开发环境

          开发工具:make,gcc

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

                    glibc:标准库

 

          通过“包组”提供开发组件

                   CentOS 6:"Development Tools", "Server Platform Development",

 

     第一步:configure脚本

            选项:指定安装位置、指定启用的特性等

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

               选项分类:

                  安装路径设定:

                        --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/

                        --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;

                  Systemtypes:目标系统平台结构,用于交叉编译

                  OptionalFeatures: 可选特性

                                    --disable-FEATURE

                                    --enable-FEATURE[=ARG]

 

                  OptionalPackages: 可选包,通常指该程序依赖到的其他程序包

                                    --with-PACKAGE[=ARG]

                                    --without-PACKAGE

 

     第二步:make

 

     第三步:make install





现在来试一下安装,以教室环境为例:

首先获取httpd-2.2.29.tar.bz2


图像 023.jpg

wKioL1XjBkiyM7TKAAC4jXoHK7Y565.jpg

Linux程序包管理及yum安装管理_第31张图片

看到INSTALL文件,查看之:[root@localhost httpd-2.2.29]# less INSTALL

     Linux程序包管理及yum安装管理_第32张图片

       该文件说明了操作顺序,configureconfigure的选项,makemake install 

查看所需开发包组是否已安装:

[root@localhost ~]#yum grouplist

安装未安装的包组:

[root@localhost ~]# yum groupinstall"Server Platform Development" -y -y自动回答为yes

进入/httpd-2.2.29依次执行如下命令:

[root@localhost httpd-2.2.29]# ./configure--prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2    说明:指定安装位置为/usr/local/apache2配置文件路径/etc/httpd2

[root@localhost httpd-2.2.29]# make

[root@localhost httpd-2.2.29]# make install

查看安装结果:

wKioL1XjBvujkBicAACyBp69iOU277.jpg

接下来可尝试启用该程序:

Linux程序包管理及yum安装管理_第33张图片80端口已处于监听状态,尝试访问:

Linux程序包管理及yum安装管理_第34张图片

 

安装后的配置:

    (1) 导出二进制程序目录至PATH环境变量中;

           编辑文件/etc/profile.d/NAME.sh

                 export PATH=/PATH/TO/BIN:$PATH

             [root@localhost apache2]# vim/etc/profile.d/apache2.sh添加如下行:

Linux程序包管理及yum安装管理_第35张图片 

wKiom1XjBgSggjnlAACtGD2HNqQ884.jpg

 

    (2) 导出库文件路径

            编辑/etc/ld.so.conf.d/NAME.conf

        添加新的库文件所在目录至此文件中;   /usr/local/apache2/lib

            让系统重新生成缓存:

                ldconfig[-v]

           vim /etc/ld.so.conf.d/apache2.conf

wKiom1XjBnyR31OOAAA5ix1-Wm4009.jpg

    (3) 导出头文件

           基于链接的方式实现:

               ln-sv        ln -s/usr/local/apache2/include/  apache2

    (4) 导出帮助手册

           编辑/etc/man.config文件

                 添加一个MANPATH

        vim /etc/man.config,添加下面黑色的字段

    Linux程序包管理及yum安装管理_第36张图片