yum和dnf解决了rpm的包依赖问题。
yum:Yellowdog Update Modifer,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,Centos8用dnf代替了yum,不过保留了yum的兼容性,配置也是相通的。
dnf:DaNdiFied,是新一代的RPM软件包管理器。DNF发行日期是2015年5月11日,DNF包管理器采用Python编写,发行许可为GPL v2。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等。用法和yum一致。
yum/dnf是基于C/S模式。
yum实现过程:先在yum服务器上创建yum repository(yum仓库),在仓库中事先存储了众多rpm包,以及包的相关元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
yum服务器的仓库可以有以下几种形式存在:
yum客户端配置文件
帮助文档:man 5 yum.conf
相关变量
yum的repo配置文件中可用的变量:
$releasever:当前OS的发行版的主版本号,如:8,7,6
$basearch:系统基础平台,如:i386,x86_64
$arch:CPU架构,如:aarch64,i586,i686,x86_64
$contentdir:表示目录
$YUM0-$YUM9:自定义变量
例:Centos8上的/etc/yum.conf文件
[root@Cenos8 ~]# cat /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
yum/dnf仓库缓存
/var/cache/dnf Centos8上dnf缓存目录
/var/cache/yum Centos7上yum缓存目录
例:Centos8上dnf缓存目录
[root@Cenos8 ~]# ll /var/cache/dnf/
total 23740
drwxr-xr-x 3 root root 22 Mar 29 20:44 appstream-a5e033d33ad24141
-rw-r--r-- 1 root root 4863188 Mar 29 20:44 appstream-filenames.solvx
-rw-r--r-- 1 root root 2206264 Mar 29 20:44 appstream.solv
drwxr-xr-x 3 root root 22 Mar 29 20:44 baseos-43708d1174dbbac2
-rw-r--r-- 1 root root 1323519 Mar 29 20:44 baseos-filenames.solvx
-rw-r--r-- 1 root root 1476012 Mar 29 20:44 baseos.solv
drwxr-xr-x 3 root root 22 Mar 29 20:44 epel-a19d7e5a690d289a
-rw-r--r-- 1 root root 7077798 Mar 29 20:44 epel-filenames.solvx
-rw-r--r-- 1 root root 1900 Mar 29 20:44 epel-presto.solvx
-rw-r--r-- 1 root root 2648587 Mar 29 20:44 epel.solv
-rw-r--r-- 1 root root 3370520 Mar 29 20:44 epel-updateinfo.solvx
-rw-r--r-- 1 root root 2 Mar 29 20:44 expired_repos.json
drwxr-xr-x 3 root root 22 Mar 29 20:44 extras-edb9f0658ab13c15
-rw-r--r-- 1 root root 1407 Mar 29 20:44 extras-filenames.solvx
-rw-r--r-- 1 root root 14619 Mar 29 20:44 extras.solv
-rw-r--r-- 1 root root 0 Mar 29 20:44 last_makecache
-rw-r--r-- 1 root root 1302528 Mar 29 20:44 packages.db
yum用法:
格式:yum [OPTION] [COMMAND] [package...]
选项 | 说明 |
---|---|
-y | 自动回答yes |
-q | 静默模式,不显示安装信息 |
--nogpgcheck | 禁止gpgcheck |
--enablerepo=repoid | 临时启用此处指定的repo,支持通配符,如:“*” |
--disablerepo=repoid | 临时禁用此处指定的repo |
命令 | 说明 |
---|---|
repolist [all | enabled | disabled] | 显示仓库列表 |
list | 显示程序包 |
install | 安装程序包 |
remove | 卸载程序包 |
info | 查询程序包,可使用通配符模糊查询 |
provides | 查询某个命令是由哪个包提供的 |
history | 查看yum安装日志 |
自建yum仓库,分别为网络源和本地源。
网络源
在/etc/yum.repos.d/目录下创建Base.repo文件
在/etc/yum.repos.d/目录下创建Epel.repo文件
在/etc/yum.repos.d/目录下创建Extras.repo文件
本地源
这里我们通过httpd服务创建基于http的自建yum仓库,本例中为了方便,创建Centos8的系统仓库时直接使用光盘文件作为Base和Appstream源,规划两台机器分别作为yum客户端(IP:10.0.0.201)和自建yum仓库服务器(IP:10.0.0.202)。实际中,配置yum仓库服务器,一般将包和元数据下载到主机中保存,由于epel源包太大,所以选择小一点的extras源作为演示。
在yumserver上安装httpd服务并启动,作为yum仓库服务器
在yumserver上的/var/www/html/目录下创建centos8目录,并将光盘挂载到centos8目录中
用浏览器查看yumserver上的文件
在yumclient上做yum客户端配置,编辑生成/etc/yum.repo.d/Base.repo文件
下载清华大学的extras源,制作私有yum源
用浏览器查看yumserver主机上的extras源
在yumclient上做yum客户端配置,编辑生成/etc/yum.repo.d/extras.repo文件
在yumclient上安装一个xz压缩工具作为测试
程序包编译安装一般都会有以下几个过程:
源代码--->预处理--->编译--->汇编--->链接--->执行
有很多开源软件都会打包成rpm包供人们使用,但并不是所有软件都会打成包,如果使用没有打成包的开源软件,就需要自己下载源码进行编译安装。此外还有一个原因就是rpm包的安装路径和软件特性在打包时就已经指定,如果想要自定义安装路径或使用软件的某些特性,这时也需要进行源码编译安装。
C、C++的源码编译,使用make项目管理器;java的源码编译使用maven。源码编译安装前可以查看README,INSTALL获取安装帮助。
C语言源代码编译安装过程:
通过选项传递参数,指定安装路径、启用特性等。
执行时使用Makefile.in文件作为模板生成Makefile文件。
检查依赖的外部环境,如依赖的软件包。
根据Makefile文件,进行构建应用程序,同样会检测依赖到的环境。
根据前面指定的路径,复制文件到相应路径。
源码编译安装httpd2.4.46。
下载httpd-2.4.46.tar.gz包,并安装编译httpd的相关工具包。
[root@centos8 ~]#dnf -y install gcc make apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config
解压缩后进入解压后的包目录,可以查看README和INSTALL文件中的说明和安装帮助。
[root@centos8 ~]#tar -xvf httpd-2.4.46.tar.gz -C /usr/local/src
运行configure脚本,生成Makefile文件。指定安装路径/app/httpd2.4.46,启用ssl协议。
编译并安装
[root@Centos8 httpd-2.4.46]#make && make install
编译安装完成后的结果如图:
配置环境并运行
指定apache用户运行httpd服务
创建系统用户apache
[root@centos8 ~]#useradd -r -u 48 -s /sbin/nologin -c apache -d /var/www apache
修改httpd配置文件
重启服务并验证
利用sed 取出ifconfig命令中本机的IPv4地址
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
处理/etc/fstab路径,使用sed命令取出其目录名和基名
原文:https://blog.51cto.com/15092752/2677657