yum离线安装
在无网环境或不支持外网环境下,网速不友好时,可以使用yum离线方式安装,统一版本,不用担心包不存在.
以php为例:
一般有三种方法:
- repotrack: 全量下载.优点:包全,缺点:依赖链太长,包太大.
- yumdownloader: 缺省下载.与repotrack优缺点相反,迁移时依赖同一个环境.
- 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
需要下载的包:
1.2 获取安装包和依赖
- 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
可以看出来,下载速度特别慢.如果需要大量部署时是很浪费时间的.
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
断网安装测试:
yum --enablerepo=local-php81 install php php-common php-cli php-fpm php-devel
验证没问题,就可以打包了.
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
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
2.3 安装
可以尝试断网后安装
yum --enablerepo=local-php81 install php php-common php-cli php-fpm php-devel
在无其他源的情况下,可以安装成功.
原作者:阿金
本文地址:https://hi-arkin.com/archives/offline-installation-of-yum.html