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

发布时间:2023年12月27日

?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

文章来源:https://blog.csdn.net/kaoa000/article/details/135122932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。