Linux入门攻坚——10、Linux程序包管理-2

 Linux程序包管理(2)

CentOS:yum,dnf

YUM,yellow dog研发,Yellowdog Update Modifier

yum是一个C/S架构的软件工具,需要有一个存储位置(一般是文件服务器)保存提供(或收集的将要使用的)的程序包(程序包仓库),以便给需要的用户提供程序包。而使用者,即客户端使用yum命令,通过本地配置文件(一般是文件服务器的URL),能够找到保存了程序包的文件服务器,下载需要的程序包,然后在yum的管理下使用rpm进行程序包的安装。

1、本地需要有yum程序,即已经安装了yum程序包;
2、要有本地的yum配置文件,以指明使用哪个yum仓库;
3、yum仓库需要存在。

yum是rpm前端管理工具,不是说有了yum,就不需要rpm了。

yum服务器,一般有:FTP://或HTTP://,或者本地(光盘)文件,使用file://

createrepo:创建仓库

yum repository:yum repo
    存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);
    文件服务器:
        ftp://
        http://
        nfs://
        file://

yum客户端:
    配置文件:
        /etc/yum.conf :为所有仓库提供公共配置
        /etc/yum.repos.d/*.repo:为仓库的指向提供配置。

仓库的定义:
    [repositoryID]
    name=Some name for this repository
    baseurl=url://path/to/repository/    :可以指定多个
    enabled={1|0}      :是否启用这个仓库,默认启用
    gpgcheck={1|0}      :安装时是否验证程序包的完整性和来源合法性
    repo_gpgcheck={1|0}  
    gpgkey=URL    :指明密钥文件,光盘安装后在/etc/pki/rpm-gpg/路径有光盘上密钥的副本
    enablegroups={1|0}      :是否在此仓库上使用组
    failovermethod={'roundrobin'|'priority'}  默认轮循,多仓库地址时,失败后选择其他仓库的方式  
    cost=   默认1000

对于yum源的baseurl,只需指定到包含repodata目录的路径即可

自己编写一个仓库配置文件:

使用yum repolist会列出已经配置的所有可用仓库的软件源,会下载每个仓库的primary_db:

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* | grou-
       plist | groupinfo ]
          *    history    [info|list|packages-list|packages-info|summary|addon-
       info|redo|undo|rollback|new|sync|stats]
        * load-transaction [txfile]
        * check
        * help [command]

    显示仓库列表:
        repolist [all|enabled|disabled]
    显示程序包:
        list 
            # yum list [all | glob_exp1] [glob_exp2] [...]
            # yum list {available | installed | updates} [glob_exp1] [...] 
    安装程序包:
        install  package1 [package2] [...]
        reinstall package1 [package2] [...]  (重新安装)
    升级程序包:
        update [package1] [package2] [...]
        downgrade package1  [package2] [...]   (降级)
    检查可用升级:
        check-update
    卸载程序包:
        remove | erase package1 [package2] [...]
    查看程序包Information:
        info  [...]
    查看指定特性(可以是某文件)是由哪个程序包提供:
        provides | whatprovides feature1 [feature2] [...]
    清理本地缓存:
        clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    构建缓存:
        makecache
    搜索:
        search string1 [string2] [...]
        以指定的关键字搜索程序包名及summary信息
    查看指定包所依赖的CAPABILITY
        deplist package1 [package2] [...]
    查看yum事务历史
        history [info | list | packages-list | packages-info | summary | addon-info | redo | undo | rollback | new | sync |stats ]
    安装及升级本地程序包:(可以直接使用install指定本地程序包安装)
         localinstall rpmfile1 [rpmfile2] [...]
         localupdate rpmfile1 [rpmfile2] [...]

    包组管理的相关命令:
        groupinstall group1 [group2] [...]   包组安装
        groupupdate group1 [group2] [...]   包组升级
        grouplist [hidden] [groupwildcard] [...]   包组列表显示
        groupremove group1 [group2] [...]  包组卸载
        groupinfo group1 [...]  包组信息

将本地光盘指定为yum源:
(1)挂载光驱
(2)编写repo文件指定yum源为挂载的光盘目录

yum的命令行选项:

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

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

    https://mirrors.sohu.com/centos/7.9.2009/os/x86_64/
    ​http://mirrors.cloud.tencent.com/centos/7.9.2009/os/x86_64/​

创建yum仓库:
    1、先创建一个目录,然后下载相关的rpm程序包到此目录下
    2、createrepo [options] <directory>


这样,一个仓库就建好了。

使用:配置yum配置文件:

使用yum repolist,可以查看仓库情况

我们自定义的仓库中有11个rpm包。

安装软件:

程序包编译安装
    testapp-VERSION-release.src.rpm  ---> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;
   源程序到执行的过程(再一次描述):
         源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
    源代码组织格式:
        多文件:文件中的代码之间,很可能存在跨文件依赖关系;
        C、C++:make(configure --> Makefile.in --> makefile)
        java:maven
    编译安装三步骤:
        ./configure
            (1)通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
            (2)检查依赖到的外部环境;
        make
            根据makefile文件,构建应用程序;
        make install
            拷贝相应的文件到对应的路径下;(相当于install)
    开发工具:
        autoconf:生成configure脚本;
        automake:生成Makefile.in

    建议:安装前要查看INSTALL或README

开源程序源代码的获取:
    官方自建站点;
    代码托管:SourceForge、Github.com、code.google.com

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

    第一步:configure脚本
        选项:指定安装位置、指定启用的特性等:
        --help:获取其支持使用的选项
            选项分类:
                安装路径设定:
                    --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;不指定默认在/usr/local/
                    --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
                System type:交叉平台编译时使用
                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文件
            添加一个MANPATH

测试安装httpd:
0)、看一下使用环境,主要要安装Development tools和Server Platform Development这两个组:

Development tools组已经安装,需要安装Server Platform Development组:
yum groupinstall "Server Platform Development"
1)、下载:

2)、解压缩,获得源代码

3)、获得configure的帮助:

可以配置各种文件的安装路径。

4)、运行configure,指定安装默认路径为/usr/local/apache2,配置路径为/etc/httpd2
在执行2.4.58版本时出现错误,应该是依赖的包缺失或版本不匹配,安装2.2.29版本

执行完configure,会在源代码目录下生成Makefile文件

5)、执行make

6)、执行make install

7)安装完成,查看相关目录

在/usr/local下生成apache2目录,是程序的指定安装路径,在/etc下生成httpd2目录,是配置文件的默认路径。
/usr/local/apache2/bin/apachectl是控制程序启动文件。

使用apachectl start启动服务:

端口80启动,说明服务启动成功,可以访问了,使用http://192.168.138.132,即本机的ip

一开始浏览器报错,然后停用了防火墙,可以访问了。

8)、安装后的配置
安装的httpd在/usr/local/apache2下,相关的命令在此路径的bin下,要想直接运行,如直接执行apachectl,是找不到此文件的,查看环境变量$PATH,其值为——  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin,要想直接运行,需要将相关路径导出到$PATH变量中。
(1)导出二进制程序目录至PATH环境变量中:
    编辑文件/etc/profile.d/NAME.sh,其中添加如下语句
    export  PATH=/PATH/TO/BIN:$PATH

(2)导出库文件路径
    编辑/etc/ld.so.conf.d/NAME.conf
        添加新的库文件所在目录至此文件中;
    让系统重新生成缓存:ldconfig [-v]


(3)导出头文件,自定义安装的头文件在/usr/local/apache2/include
    基于链接的方式实现,创建链接:ln -sv     

这里有一点不明白的是,链接的目标文件的名字是随意命名的吗?
(4)导出帮助手册,自定义安装的手册在/usr/local/apache2/man
    编辑/etc/man.config文件
        添加一个MANPATH