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]
这样,一个仓库就建好了。
我们自定义的仓库中有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)、下载:
可以配置各种文件的安装路径。
4)、运行configure,指定安装默认路径为/usr/local/apache2,配置路径为/etc/httpd2
在执行2.4.58版本时出现错误,应该是依赖的包缺失或版本不匹配,安装2.2.29版本
执行完configure,会在源代码目录下生成Makefile文件
在/usr/local下生成apache2目录,是程序的指定安装路径,在/etc下生成httpd2目录,是配置文件的默认路径。
/usr/local/apache2/bin/apachectl是控制程序启动文件。
端口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