CentOS 操作系统中一款默认软件管理的工具,红帽包管理工具(Red Hat PackageManager)
大多数而言:
软件包格式说明:
rpm
安装命令/参数/选项 | 说明 |
---|---|
rpm -qa | 标准输出所有安装的软件包 |
rpm -q zip | 检查软件包是否安装,如果安装返回版本信息 |
rpm -qi zip | 标准输出软件包安装的版本信息 |
rpm -e zip | 卸载软件包 |
rpm -e --nodeps zip | 强制卸载 |
rpm -ivh ******.rpm | 安装软件 |
rpm -Uvh ******.rpm | 升级软件 |
rpm -ivh --nodeps ******.rpm | 不验证依赖包安装软件 |
rpm -qa --last | 按照安装时间显示所有安装的软件包(最新的在最上面) |
rpm --help | 帮助信息(查询更多使用方法) |
标准的以“.zip、.tar”结尾的源代码包不能使用 RPM 工具去操作
./configure
:预编译阶段,检测系统基础编译环境是否满足,生成 makefile 文件(通常一些软件的源码编译时候,还需要带一些参数选项进行一个编译过程,具软件的使用情况而定)make
:编译,基于第一步生成的 makefile 文件,进行源代码的编译make install
:安装,编译完毕之后将相关的可运行文件安装到系统中编译安装 nginx
从 nginx 官网下载最新的源码包
http://nginx.org/en/download.html
下载地址:http://nginx.org/download/nginx-1.22.0.tar.gz
解压源代码包
tar -xf nginx-1.22.0.tar.gz
进入解压后的文件夹,进行预编译阶段
处理报错信息
缺少 pcre-devel 编译环境,可以使用yum
安装即可(一般在进行源代码编译时候,会存在很多编译环境的问题,这个要按照实际情况来解决)
继续预编译
完成预编译阶段后,会返回一些软件预编译的一些结果
编译及编译安装
部分软件在编译安装时候,执行过程稍长
make && make install
安装成功
前端软件包管理器 YUM(Yellow dog Updater, Modified)
组成
yum
安装软件或者搜索文件时,会查找/etc/yum.repos.d 下以.repo 结尾文件,CentOS 默认的文件是:CentOS-Base.repo,该文件配置了 YUM 服务端的镜像地址,每次安装、升级 RPM 包,YUM 客户端都会查找这些文件[root@iZrgngz5lz7qzsZ ~]# ll /var/cache/yum/
total 4
drwxr-xr-x 3 root root 4096 Sep 5 19:32 x86_64
[root@iZrgngz5lz7qzsZ ~]#
企业常用命令
命令/参数/选项 | 说明 |
---|---|
yum install zip | 交互式安装软件 |
yum install zip -y | 自动确定安装软件 |
yum search zip | 搜索软件包 |
yum list zip | 显示指定软件包的安装情况 |
yum list | 显示所有已经安装及可被安装的软件 |
yum remove zip -y | 删除程序包 |
yum update | 内核升级(企业环境慎用) |
yum update zip | 更新软件 |
yum check-update | 检查可更新的软件 |
yum info zip | 显示安装包信息 |
yum provides “*/sz” | 列出该命令由什么包提供的 |
yum deplist zip | 查看该程序的依赖情况 |
yum clean packages | 清除缓存目录下的安装包 |
yum clean headers | 清除缓存目录下的头部信息 |
yum clean all | 清除缓存目录下的软件包以及旧的头部信息 |
yum install --downloadonly --downloaddir=/tmp zip | 只下载该软件的 rpm 包,并保存在指定目录下 |
基于 iso 镜像构建本地源就是利用光盘里面的软件包实现 YUM 安装软件
CentOS-7-x86_64-Everything-2009:针对这个版本的镜像包,集成了很多软件,可以当作本地源
将镜像文件放在服务器
将镜像文件挂载到/mnt目录下
mount /home/CentOS-7-x86_64-Everything-2009.iso /mnt
临时改名/etc/yum.repos.d 下面的配置文件
这步目的是为了验证本地 YUM 源的使用
新建一个 .repo 文件
内容如下:
[yum]
name = CentOS7
baseurl = file:///mnt
enabled=1
gpgcheck=1
gpgkey=file://mnt/RPM-GRG-KEY-CentOS-7
测试结果(完毕)
yum clean all
yum makecache
yum install tcpdump -y
构建基于内网的 HTTP 方式的 YUM 源,企业中更常见
先挂载镜像文件
安装一个 nginx,并可以实现访问
在 nginx 默认的 /目录下增加一个文件夹
mkdir centos
复制/mnt 下的相关文件到 centos 目录下
(复制时间稍微有点长)
cp -R /mnt/Packages/* /usr/share/nginx/html/centos/
进入目录下,使用 createrepo 生成本地源
cd /usr/share/nginx/html/
createrepo centos/
利用 HTTP 发布 YUM 源
配置一下,让可以访问到 centos 目录即可
在客户端(内网的另一个环境)配置一个测试的 .repo 文件
内容如下:http.repo
[base]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
[updates]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
客户端测试
yum clean all
yum makecache
yum install tcpdump -y
从服务端的 nginx 日志可以看出客户端访问的记录
如何扩展服务端的包呢?
尝试安装一下 ntfs-3g 软件包,但是发现没有这个包
我们需要从外网下载这个软件包,并放在服务端的 centos 目录下
cd /usr/share/nginx/html/centos/
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-libs-2022.5.17-1.el7.x86_64.rpm
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-devel-2022.5.17-1.el7.x86_64.rpm
更新软件包
cd /usr/share/nginx/html/
createrepo --update centos/
客户端验证一下:OK的
yum clean all
yum makecache
yum install -y ntfs-3g-devel.x86_64 ntfs-3g-libs.x86_64
针对上面的【基于 HTTP 的企业内部 YUM 源】,可以使用外网的 YUM 源,来同步到本地的,更加完善企业内部的 YUM 源的软件包
比如我在客户端想升级一下 NetworkManager
提示没有更新的包,就需要同步下外网的 YUM 软件了
在服务端操作:下载阿里云的 CentOS7 的 YUM 源文件
wget https://mirrors.aliyun.com/repo/Centos-7.repo
服务端配置一下
yum clean all
yum makecache
安装 reposync 命令
yum provides "*/reposync"
yum install -y yum-utils-1.1.31-54.el7_8.noarch
获取外网所有的 YUM 软件包
## -r 指定 repolist id;不加 -r 表示获取外网所有的包
## -p 指定下载软件的路径
## 这玩意有点多,1W多个软件包,需要一定的空间和时间
reposync -r base -p /usr/share/nginx/html/centos/
reposync -r updates -p /usr/share/nginx/html/centos/
更新服务端软件包
cd /usr/share/nginx/html/
createrepo --update centos/
客户端再次验证一下升级 NetworkManager :OK的
这个地方有点问题,折腾了很久,下面记录一下这个过程
通过上述升级服务端的软件包以后:发现搜索出来的包还是旧版本
服务端访问一下软件包目录:发现多了2个文件夹:考虑是不是因为升级的时候将升级的包放在了其他位置
然后对 updates 目录下重新做了操作:createrepo Packages/
改了一下客户端的 repo 文件
然后重新生效了一下源:
最后成功升级:OK