很多情况下,服务器都是没有公网访问权限的,这给我们安装软件包带来了很多的不便。刚安装的系统缺少很多软件包,只能下载Tarball或者RPM包上传到服务器上安装,解决依赖问题过于麻烦,浪费时间。 以常见的CenOS为例,默认情况下使用YUM管理软件包依赖于在线仓库,在离线环境中此方法失效,我们有以下几种方式解决问题,依据情况酌情选择最合适的方式。 1. 挂载安装镜像 适用于安装CentOS自带的一些包,和在线源的base源包完全一致。 2. 建立本地YUM源 适用于安装CentOS自带源中的包。除了base外的例如extras、updates、epel。 3. 下载离线RPM包 适用于安装一些不常见的YUM源的包,例如Docker的源,只提供Docker软件包,就没有必要单独建立本地源,只需要将需要的包下载下来进行安装即可。 接下来依次对这三种方式进行讲解。 ### 一、挂载安装镜像 CentOS安装镜像内有一个Packages目录,里面包含大量的RPM包,可以以此来创建本地yum仓库。 ##### 1、首先下载完整版CentOS镜像 我们安装的时候,大部分都是选择最小化安装。但是为了获取比较齐全的包,此时就需要下载完整的镜像,有DVD版本和Everything版本,一般来说,DVD版本就够用了,Everything版本更加齐全。 我这里就以Everything版本为例,`CentOS-7-x86_64-Everything-2009.iso`,整个镜像接近10G! ##### 2、将镜像上传到主机 这里自由发挥,用喜欢的工具上传到主机上。笔者上传到了`/home/CentOS-7-x86_64-Everything-2009.iso`。 ##### 3、挂载镜像 使用`mount`挂载iso镜像。 ``` mkdir /mnt/vcdrom mount /home/CentOS-7-x86_64-Everything-2009.iso /mnt/vcdrom ``` ##### 4、拷贝出需要的包 进入挂载的目录,我们需要的只是Packages目录。将它拷贝出来。 ``` cp -av /mnt/vcdrom/Packages /media/local-repos ``` ##### 5、通过rpm创建yum仓库 首先在Packages里找到`createrepo-*`这个包,通过rpm安装。createrepo需要两个依赖包,提前安装。 ``` rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm ``` 使用createrepo创建仓库。 ``` createrepo -v /media/local-repos/Packages ``` ##### 5、编辑yum配置文件 yum默认使用网络源,需要将其禁用。 ``` mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak mv /etc/yum.repos.d/CentOS-Debuginfo.repo /etc/yum.repos.d/CentOS-Debuginfo.repo.bak mv /etc/yum.repos.d/CentOS-Vault.repo /etc/yum.repos.d/CentOS-Vault.repo.bak ``` 配置本地源`/etc/yum.repos.d/CentOS-Media.repo`。 ``` [c7-media] #仓库名称,不能用特殊符号 name=CentOS-$releasever - Media #仓库描述 baseurl=file:///media/local-repos/Packages/ #指定仓库的路径,可以有多个,这里我们只有一个,将另外两个删掉 #file:///media/cdrom/ #file:///media/cdrecorder/ gpgcheck=0 #禁用检验软件包的数字签名 enabled=1 #启用仓库 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ``` 更新yum缓存。 ``` yum clean all yum makecache ``` 尝试使用yum安装软件试试吧。 ### 二、建立本地YUM源 远程的yum源可以用ftp或者http,两种方法我都会介绍一下。 首先安装ftp,这里使用vsftp,首先需要安装vsftpd并且启动服务。 ```bash yum install vsftpd systemctl start vsftpd systemctl enable vsftpd ``` 尝试访问,默认匿名可访问。vsftp默认的目录为`/var/ftp`,我们直接在这个目录下进行离线源的存储就好了,省去改配置文件的麻烦。 ``` bash mkdir -p /var/ftp/centos/7 ``` 安装repository工具。 ```bash yum install yum-utils createrepo ``` 查看源列表,我这里已经提前换成的163的源。其实什么源无所谓,默认源速度可以的话,直接用默认源就好。 ```bash yum repolist ``` 同步源到本地,repoid可以指定多个。 ```bash reposync -n --repoid=extras --repoid=updates --repoid=base -p /var/ftp/centos/7 ``` 同步完成之后创建索引。 ```bash createrepo -po /var/ftp/centos/7/base/ /var/ftp/centos/7/base/ createrepo -po /var/ftp/centos/7/updates/ /var/ftp/centos/7/updates/ createrepo -po /var/ftp/centos/7/extras/ /var/ftp/centos/7/extras/ ``` 下载对应的key文件。 ```bash cd /var/ftp/centos wget http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7 ``` 在其他离线主机上修改配置文件 ```ini [base] name=CentOS-$releasever - Base baseurl=ftp://192.168.88.2/centos/7/base/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 [updates] name=CentOS-$releasever - Updates baseurl=ftp://192.168.88.2/centos/7/updates/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 [extras] name=CentOS-$releasever - Extras baseurl=ftp://192.168.88.2/centos/7/extras/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 ``` 避免每次手动更新,我们创建一个定时任务脚本`update_yum_repo.sh`,用于同步。 ```bash echo 开始同步 reposync -n --repoid=extras --repoid=updates --repoid=base -p /var/ftp/centos/7 #更新元数据 createrepo --update /var/ftp/centos/7/base/ createrepo --update /var/ftp/centos/7/updates/ createrepo --update /var/ftp/centos/7/extras/ ``` 加入crontab任务。`crontab -e` ```bash 0 2 * * * sh /root/update_yum_repo.sh ``` ### 三、下载离线RPM包 几个前提: - 需要一台可以访问公网的机器,和最终安装软件的内网机器版本一致。 - 在可访问公网的机器上安装yum-utils - 用于下载rpm包的机器最好是纯净的系统,避免依赖包下载不到 主要使用的是yumdownloaer这个命令。 例如你需要安装vim,可以通过下面的命令将vim以及其依赖包全部下载到当前目录。 ```shell yumdownloader vim --resolve ``` 也可以指定下载的目录。 ```shell yumdownloader vim --resolve --destdir=/home/vim ``` 之后将所有的文件拷贝到目标机器上,使用下面的命令安装。 ```shell rpm -Uvh /home/vim/*.rpm ``` 之前说的前提中,最后一点需要注意,如果用于下载的机器上已经安装了vim,你会发现只会下载vim一个包,并没有相关依赖包,原因在于`--resolve`这个参数在解决依赖的时候,根据本机的环境来解析的,由于已经安装了vim,所以存在需要安装的依赖包。这将导致目标机器安装的时候会提示缺少一些依赖。 Loading... 很多情况下,服务器都是没有公网访问权限的,这给我们安装软件包带来了很多的不便。刚安装的系统缺少很多软件包,只能下载Tarball或者RPM包上传到服务器上安装,解决依赖问题过于麻烦,浪费时间。 以常见的CenOS为例,默认情况下使用YUM管理软件包依赖于在线仓库,在离线环境中此方法失效,我们有以下几种方式解决问题,依据情况酌情选择最合适的方式。 1. 挂载安装镜像 适用于安装CentOS自带的一些包,和在线源的base源包完全一致。 2. 建立本地YUM源 适用于安装CentOS自带源中的包。除了base外的例如extras、updates、epel。 3. 下载离线RPM包 适用于安装一些不常见的YUM源的包,例如Docker的源,只提供Docker软件包,就没有必要单独建立本地源,只需要将需要的包下载下来进行安装即可。 接下来依次对这三种方式进行讲解。 ### 一、挂载安装镜像 CentOS安装镜像内有一个Packages目录,里面包含大量的RPM包,可以以此来创建本地yum仓库。 ##### 1、首先下载完整版CentOS镜像 我们安装的时候,大部分都是选择最小化安装。但是为了获取比较齐全的包,此时就需要下载完整的镜像,有DVD版本和Everything版本,一般来说,DVD版本就够用了,Everything版本更加齐全。 我这里就以Everything版本为例,`CentOS-7-x86_64-Everything-2009.iso`,整个镜像接近10G! ##### 2、将镜像上传到主机 这里自由发挥,用喜欢的工具上传到主机上。笔者上传到了`/home/CentOS-7-x86_64-Everything-2009.iso`。 ##### 3、挂载镜像 使用`mount`挂载iso镜像。 ``` mkdir /mnt/vcdrom mount /home/CentOS-7-x86_64-Everything-2009.iso /mnt/vcdrom ``` ##### 4、拷贝出需要的包 进入挂载的目录,我们需要的只是Packages目录。将它拷贝出来。 ``` cp -av /mnt/vcdrom/Packages /media/local-repos ``` ##### 5、通过rpm创建yum仓库 首先在Packages里找到`createrepo-*`这个包,通过rpm安装。createrepo需要两个依赖包,提前安装。 ``` rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm ``` 使用createrepo创建仓库。 ``` createrepo -v /media/local-repos/Packages ``` ##### 5、编辑yum配置文件 yum默认使用网络源,需要将其禁用。 ``` mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak mv /etc/yum.repos.d/CentOS-Debuginfo.repo /etc/yum.repos.d/CentOS-Debuginfo.repo.bak mv /etc/yum.repos.d/CentOS-Vault.repo /etc/yum.repos.d/CentOS-Vault.repo.bak ``` 配置本地源`/etc/yum.repos.d/CentOS-Media.repo`。 ``` [c7-media] #仓库名称,不能用特殊符号 name=CentOS-$releasever - Media #仓库描述 baseurl=file:///media/local-repos/Packages/ #指定仓库的路径,可以有多个,这里我们只有一个,将另外两个删掉 #file:///media/cdrom/ #file:///media/cdrecorder/ gpgcheck=0 #禁用检验软件包的数字签名 enabled=1 #启用仓库 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ``` 更新yum缓存。 ``` yum clean all yum makecache ``` 尝试使用yum安装软件试试吧。 ### 二、建立本地YUM源 远程的yum源可以用ftp或者http,两种方法我都会介绍一下。 首先安装ftp,这里使用vsftp,首先需要安装vsftpd并且启动服务。 ```bash yum install vsftpd systemctl start vsftpd systemctl enable vsftpd ``` 尝试访问,默认匿名可访问。vsftp默认的目录为`/var/ftp`,我们直接在这个目录下进行离线源的存储就好了,省去改配置文件的麻烦。 ``` bash mkdir -p /var/ftp/centos/7 ``` 安装repository工具。 ```bash yum install yum-utils createrepo ``` 查看源列表,我这里已经提前换成的163的源。其实什么源无所谓,默认源速度可以的话,直接用默认源就好。 ```bash yum repolist ``` 同步源到本地,repoid可以指定多个。 ```bash reposync -n --repoid=extras --repoid=updates --repoid=base -p /var/ftp/centos/7 ``` 同步完成之后创建索引。 ```bash createrepo -po /var/ftp/centos/7/base/ /var/ftp/centos/7/base/ createrepo -po /var/ftp/centos/7/updates/ /var/ftp/centos/7/updates/ createrepo -po /var/ftp/centos/7/extras/ /var/ftp/centos/7/extras/ ``` 下载对应的key文件。 ```bash cd /var/ftp/centos wget http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7 ``` 在其他离线主机上修改配置文件 ```ini [base] name=CentOS-$releasever - Base baseurl=ftp://192.168.88.2/centos/7/base/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 [updates] name=CentOS-$releasever - Updates baseurl=ftp://192.168.88.2/centos/7/updates/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 [extras] name=CentOS-$releasever - Extras baseurl=ftp://192.168.88.2/centos/7/extras/ gpgcheck=1 gpgkey=ftp://192.168.88.2/centos/RPM-GPG-KEY-CentOS-7 ``` 避免每次手动更新,我们创建一个定时任务脚本`update_yum_repo.sh`,用于同步。 ```bash echo 开始同步 reposync -n --repoid=extras --repoid=updates --repoid=base -p /var/ftp/centos/7 #更新元数据 createrepo --update /var/ftp/centos/7/base/ createrepo --update /var/ftp/centos/7/updates/ createrepo --update /var/ftp/centos/7/extras/ ``` 加入crontab任务。`crontab -e` ```bash 0 2 * * * sh /root/update_yum_repo.sh ``` ### 三、下载离线RPM包 几个前提: - 需要一台可以访问公网的机器,和最终安装软件的内网机器版本一致。 - 在可访问公网的机器上安装yum-utils - 用于下载rpm包的机器最好是纯净的系统,避免依赖包下载不到 主要使用的是yumdownloaer这个命令。 例如你需要安装vim,可以通过下面的命令将vim以及其依赖包全部下载到当前目录。 ```shell yumdownloader vim --resolve ``` 也可以指定下载的目录。 ```shell yumdownloader vim --resolve --destdir=/home/vim ``` 之后将所有的文件拷贝到目标机器上,使用下面的命令安装。 ```shell rpm -Uvh /home/vim/*.rpm ``` 之前说的前提中,最后一点需要注意,如果用于下载的机器上已经安装了vim,你会发现只会下载vim一个包,并没有相关依赖包,原因在于`--resolve`这个参数在解决依赖的时候,根据本机的环境来解析的,由于已经安装了vim,所以存在需要安装的依赖包。这将导致目标机器安装的时候会提示缺少一些依赖。 最后修改:2023 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏