码迷,mamicode.com
首页 > 其他好文 > 详细

程序包管理

时间:2016-04-22 01:16:46      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:管理工具   二进制   源代码   程序   命名   

源代码包命名:name-VERSION.tar.gz

rpm包命名:name-VERSION-release.arch.rpm

    VERSION:major.minor.release

    arch:

        x86:i386,i486,i586,i686

        x86_64:x64,x86_64,amd64

        powerpc:ppc

        无平台:noarch

包之间:存在依赖关系,使用包管理的前端工具,可自动化解决包的依赖关系

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

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

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

    dnf:Fedora 22+ rpm包管理器的前端管理工具(CentOS7使用)

    查看二进制程序所依赖的库文件:(程序需要调用很多库文件)

[root@localhost ~]# ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffca11f0000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d91600000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003d90600000)
    libcap.so.2 => /lib64/libcap.so.2 (0x0000003d93200000)
    libacl.so.1 => /lib64/libacl.so.1 (0x0000003d9b600000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003d8fe00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003d8fa00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003d8f600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d90200000)
    libattr.so.1 => /lib64/libattr.so.1 (0x0000003d9fe00000)
[root@localhost ~]#

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

        ldconfig(/sbin/ldconfig)

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

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

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

程序包管理:

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

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

        文件清单

        安装或卸载的脚本

    2、数据库(公共)

        程序包名称及版本

        依赖关系

        功能说明

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


程序包的管理方式:

    包管理器:rpm

    包管理器的前端工具:yum,dnf


获取程序包的途径:

    1、系统发行版的光盘或官方的服务器

        镜像:mirrors.aliyun.com;mirrors.163.com

    2、项目官方站点

        apache,nginx,mariadb

    3、第三方组织:

        Fedora-EPEL(很强大的第三方源,建议安装)

        搜索引擎:pkgs.org;rpmfind.net;rpm.pbone.net

    4、diy

    tips:检查合法性,来源合法性,程序包的完整性


RPM:

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


    安装:

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

               -v:详细信息(-vv)

               -h:以#显示程序包安装进度

           {install-options}

                --test:测试安装;dryrun模式

                --nodeps:忽略依赖关系(两个包互相依赖时使用)

                --replacepkgs:重新安装

                --nosignatura:不检查来源合法性

                --nodigest:不检查包完整性

                --noscripts:不执行程序包脚本片段

            一般使用 rpm -ivh PACKAGE_FILE进行程序包的安装

    升级:

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

            upgrade:安装有旧版程序包,则升级;反之执行安装过程

            freshen:安装有旧版程序包,则升级;反之不执行

            --oldpackage:降级

            --force:强行升级

        tips:不要对内核做升级操作;linux支持多内核版本并存,因此请直接安装新版本内核即可

                 如果原程序包的配置文件有过修改,升级时,新版本的配置文件不会覆盖老版本的配置文                    件,而会重命名为FILENAME.rpmnew保留

     查询:

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

        [select-options]

            -a:所有包

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

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-37.el6.x86_64
[root@localhost ~]# rpm -e --nodeps coreutils-8.4-37.el6.x86_64
[root@localhost ~]# ls
-bash: /bin/ls: No such file or directory

            -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包做查询操作

            --whatprovides:查询指定的功能由哪个包提供

            --whatrequires:查询指定的功能被哪个包所依赖

        [query-options]

            --changelog:更新日志

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

            -d:查询程序的文档

            -i:information信息

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

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

            --provides:列出指定程序包所能提供的能力(CAPABILITY)

    卸载:

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

    校验:

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

        使用非对称加密对程序包进行加密,使用私钥加密,公钥开放,校验时,如果开放公钥无法进行校验,则证明此包的来源合法性及完整性不正确。

        导入所需要的公钥:

            rpm --import /PATH/TO/PUBLIC-KEY

            发行版光盘会自带密钥文件

    数据库重建:

        数据库位置:/var/log/rpm/

            rpm {--initdb|--rebuilddb}

            initdb:初始化

            rebuilddb:重建


YUM:(C/S架构)

    yum repository:yum repo

        存储了众多的rpm包,以及包的相关的远数据文件

        yum客户端:

            配置文件:

                /etc/yum.conf:所有仓库的公共配置

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

    仓库指定的定义:

        [repoID]

        name=

        baseurl=指向repodata文件的父目录

            {ftp://

            https://

            nfs://

            file://   }

        enable=1|0    是否启用

        gpgcheck=1|0  是否校验

        gpgkey=密钥文件

        enablegroups=1|0 组启用

        failovermethod=roundrobin|priority

            故障处理方式:默认为roundrobin(随机)

        cost=

               (默认1000)


        显示仓库列表

            yum repolist all|enable|disable

        显示程序包

            yum list available|installed|updates

        安装程序包

            yum install package...

        升级程序包

            yum update package...

            yum reinstall package.. 重新安装

        检查可用升级

            yum check-update

        卸载程序包

            yum remove|erase package...

        查看程序包信息

            yum info package...

        查看指定的特性是由哪个程序包提供

            yum provides|whatprovides feature...

        清理本地缓存

            yum clean all

        构建缓存

            yum makechche

        搜索

            yum search string...

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

        查看依赖

            yum deplist package

        查看yum事务

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

        包组管理命令

            groupinstall

            groupupdate

            grouplist

            groupremove

            groupinfo

        命令行选项:
            --nogpgcheck:禁止进行gpg check; 优先于仓库配置文件
            -y: 自动回答为“yes”;
            -q:静默模式;
            --disablerepo=repoidglob:临时禁用此处指定的repo;
            --enablerepo=repoidglob:临时启用此处指定的repo;
            --noplugins:禁用所有插件;

           

使用光盘当做本地yum仓库

        1、挂载光盘

            mount -r /dev/cdrom /media/cdrom

        2、配置文件

            [CentOS7]
            name=
            baseurl=
            gpgcheck=
            enabled=

            yum的repo配置文件中可用的变量:
            $releasever: 当前OS的发行版的主版本号;
            $arch: 平台;
            $basearch:基础平台;
            $YUM0-$YUM9

        3、查看仓库列表是否成功

            yum repolist

手动创建yum仓库

        安装createrepo    

            yum install createrepo

        创建仓库

            createrepo DIR (DIR指向RPM包的文件夹)

        配置文件

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

    源代码组织格式:
            多文件:文件中的代码之间,很可能存在跨文件依赖关系;
            C、C++: make (configure --> Makefile.in --> makefile)
            项目管理工具makefile由Makefile.in生成,

编译安装三步骤:

    ./configure:
        (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
        (2) 检查依赖到的外部环境;
    make:
        根据makefile文件,构建应用程序;
    make install

        开发工具:
            autoconf: 生成configure脚本
            automake:生成Makefile.in
        tips:安装前查看INSTALL,README

编译C源代码:
    前提:提供开发工具及开发环境
    开发工具:make, gcc等
    开发环境:开发库,头文件
         glibc:标准库
        通过“包组”提供开发组件
             CentOS 6: "Development Tools", "Server Platform Development",

安装后的配置:
    (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文件
        添加一个MANPATH







本文出自 “机智少年普朗克” 博客,请务必保留此出处http://armolee.blog.51cto.com/6288560/1766485

程序包管理

标签:管理工具   二进制   源代码   程序   命名   

原文地址:http://armolee.blog.51cto.com/6288560/1766485

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!