在无网环境或不支持外网环境下,网速不友好时,可以使用yum离线方式安装,统一版本,不用担心包不存在.

以php为例:
一般有三种方法:

  1. repotrack: 全量下载.优点:包全,缺点:依赖链太长,包太大.
  2. yumdownloader: 缺省下载.与repotrack优缺点相反,迁移时依赖同一个环境.
  3. yum downloadonly: 缺少下载和yumdownloader一样.

假设我们所有服务器环境一致,运行中的服务器不能重新做镜像,只能增量更新,就适合于downloader方式
下面以download only为例.

1. 打包

1.1 准备工具

yum install yum-utils yum-plugin-priorities createrepo -y

配置源:
使用remi源,

# 阿里云的源
yum install  https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
# 阿里云经常抽疯换成官方源
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable   remi-php81

正常安装步骤,先不安装:

yum install php php-common php-cli php-fpm php-devel

需要下载的包:
-w960

1.2 获取安装包和依赖

  1. yumdownloader是一个用于从yum存储库下载rpm的程序。
    注意: yumdownloader是基于当前系统缺少的包来下载的,也就是说要做离线包,制作离线包和使用离线包的基础环境要一致.

语法格式:yumdownloader [参数]

常用参数:
--destdir 指定下载的目标目录,默认为当前目录
--resolve 解决依赖关系并下载所需的包
--source 不是下载二进制RPM,而是下载源RPM

yum downloadonly

--downloadonly: 只下载
--downloaddir=: 下载目录

工作机已设置了默认php版本是8.1,并通过安装测试没问题.把正常的yum install 换成yum --downloadonly

cd ~
mkdir -p rpm/php81
# 替换 yum install php php-common php-cli php-fpm php-devel 
yum install --downloadonly --downloaddir=./rpm/php81 php php-common php-cli php-fpm php-devel

-w939
可以看出来,下载速度特别慢.如果需要大量部署时是很浪费时间的.

rpm相关依赖列表:

[root@serv-104 ~]# tree rpm/php81/
rpm/php81/
├── apr-1.4.8-7.el7.x86_64.rpm
├── apr-util-1.5.2-6.el7.x86_64.rpm
├── autoconf-2.69-11.el7.noarch.rpm
├── automake-1.13.4-3.el7.noarch.rpm
├── httpd-2.4.6-97.el7.centos.5.x86_64.rpm
├── httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm
├── libsodium-1.0.18-1.el7.x86_64.rpm
├── libtool-2.4.2-22.el7_3.x86_64.rpm
├── libxml2-devel-2.9.1-6.el7_9.6.x86_64.rpm
├── m4-1.4.16-10.el7.x86_64.rpm
├── mailcap-2.1.41-2.el7.noarch.rpm
├── perl-Data-Dumper-2.145-3.el7.x86_64.rpm
├── perl-Test-Harness-3.28-3.el7.noarch.rpm
├── perl-Thread-Queue-3.02-2.el7.noarch.rpm
├── php-8.1.10-1.el7.remi.x86_64.rpm
├── php-cli-8.1.10-1.el7.remi.x86_64.rpm
├── php-common-8.1.10-1.el7.remi.x86_64.rpm
├── php-devel-8.1.10-1.el7.remi.x86_64.rpm
├── php-fpm-8.1.10-1.el7.remi.x86_64.rpm
├── php-sodium-8.1.10-1.el7.remi.x86_64.rpm
└── xz-devel-5.2.2-2.el7_9.x86_64.rpm

0 directories, 21 files

1.3 生成yum源

createrepo 源创建工具

创建yum源

createrepo ./rpm/php81
[root@serv-104 ~]# createrepo ./rpm/php81/
Spawning worker 0 with 21 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

生成源信息目录:

[root@serv-104 ~]# tree rpm/php81/
rpm/php81/
├── apr-1.4.8-7.el7.x86_64.rpm
├── apr-util-1.5.2-6.el7.x86_64.rpm
├── autoconf-2.69-11.el7.noarch.rpm
├── automake-1.13.4-3.el7.noarch.rpm
├── httpd-2.4.6-97.el7.centos.5.x86_64.rpm
├── httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm
├── libsodium-1.0.18-1.el7.x86_64.rpm
├── libtool-2.4.2-22.el7_3.x86_64.rpm
├── libxml2-devel-2.9.1-6.el7_9.6.x86_64.rpm
├── m4-1.4.16-10.el7.x86_64.rpm
├── mailcap-2.1.41-2.el7.noarch.rpm
├── perl-Data-Dumper-2.145-3.el7.x86_64.rpm
├── perl-Test-Harness-3.28-3.el7.noarch.rpm
├── perl-Thread-Queue-3.02-2.el7.noarch.rpm
├── php-8.1.10-1.el7.remi.x86_64.rpm
├── php-cli-8.1.10-1.el7.remi.x86_64.rpm
├── php-common-8.1.10-1.el7.remi.x86_64.rpm
├── php-devel-8.1.10-1.el7.remi.x86_64.rpm
├── php-fpm-8.1.10-1.el7.remi.x86_64.rpm
├── php-sodium-8.1.10-1.el7.remi.x86_64.rpm
├── repodata
│   ├── 0b05613329ed85715bd4c933939c65141975d9dc7250e4a3d55e1b9c4a18ef27-primary.sqlite.bz2
│   ├── 2bd2f694c2bc75b1bf3ef7587c608db63c8e07bd3fa039dcd8b6501ce276eacc-primary.xml.gz
│   ├── b88aa8df30c547d2f265de77340f34f579a13d8a9b56c6265e0bc0017a2307a6-filelists.sqlite.bz2
│   ├── e0203691d1de402d88d574b426deb659342221bf783501feacfe02bcb84c8252-other.xml.gz
│   ├── e302096cb997447c9ddb0bdcb3216beaf246f639d2afc72b0677f29af7e32222-filelists.xml.gz
│   ├── f9c452d34abb42ed7d930fec48e948aac19286b606ff13069854662b65063efe-other.sqlite.bz2
│   └── repomd.xml
└── xz-devel-5.2.2-2.el7_9.x86_64.rpm

1 directory, 28 files

1.4 测试yum源

vi /etc/yum.repos.d/local-php81.repo

[local-php81]
name=php81 私有源
baseurl=file:///root/rpm/php81/
gpgcheck=0
enabled=1
priority=1

yum repolist
-w949

断网安装测试:
yum --enablerepo=local-php81 install php php-common php-cli php-fpm php-devel

-w963

-w946

验证没问题,就可以打包了.

1.5 生成离线压缩包

tar zcf php81.tar.gz rpm/php81

2. 离线安装

2.1 上传解压

在离线服务器上传到某个目录下.

假如/data/repos下

mkdir -p /data/repos
tar zxf php81.tar.gz -C /data/repos

-w486

2.2 创建yum文件

禁用其他源,只能留下本地源.
vi /etc/yum.repos.d/local-php81.repo

[local-php81]
name=php81 私有源
baseurl=file:///data/repos/rpm/php81
gpgcheck=0
enabled=1
priority=1

查看yum repolist
-w1038

2.3 安装

可以尝试断网后安装

yum --enablerepo=local-php81 install php php-common php-cli php-fpm php-devel

-w937

在无其他源的情况下,可以安装成功.

原作者:阿金
本文地址:https://hi-arkin.com/archives/offline-installation-of-yum.html

标签: linux yum yumdownloader repotrack

(本篇完)

评论