离线环境下妙用bin安装包

背景

针对一些特殊的环境(不能访问外网),我们通常只能使用传入离线包到服务器上面。然而一、两个还好,但如果存在多个或者是其它的依赖包时,再一个个去执行就有些不够“懒”了。

此时,我们可以直接将这个rpm包制成一个可执行的bin文件,安装时直接执行bin文件即可。

环境

  • 环境:RHEL-7.x
  • 软件:MySQL-5.7.40

步骤

下载MySQL RPM包

# ls -hl
-rw-r--r-- 1 root root  29M 11月  31 09:45 mysql-community-client-5.7.40-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 312K 11月  31 09:45 mysql-community-common-5.7.40-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2.7M 11月  31 09:45 mysql-community-libs-5.7.40-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 1.3M 11月  31 09:45 mysql-community-libs-compat-5.7.40-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 179M 11月  31 09:45 mysql-community-server-5.7.40-1.el7.x86_64.rpm

打包

将下载好的rpm二进制打包成一个压缩包,以备后用。

tar acvf mysql-${VERSION}.tar.gz *.rpm

安装脚本

#!/usr/bin/env bash

TEMP_PATH=$(mktemp -d)
NAME=mysql
VERSION="5.7.40"

sed -n -e '1,/^exit 0$/!p' $0 > ${TEMP_PATH}/${NAME}-${VERSION}.tar.gz 2>/dev/null

cd ${TEMP_PATH}

tar axvf ${NAME}-${VERSION}.tar.gz

yum -y localinstall ./*.rpm

rm -rf ${TEMP_PATH}

exit 0

生成一键安装包

# cat install.sh mysql-5.7.40.tar.xz >mysql_5.7.40.bin

安装

此时,就可以把这个bin包拿去离线环境去自由安装MySQL-5.7了。

# chmod +x mysql_5.7.40.bin
# ./mysql_5.7.40.bin

相关脚本

#!/usr/bin/env bash

readonly prefix=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7
readonly version=5.7.42

readonly packages=(
    mysql-community-client-${version}-1.el7.x86_64.rpm
    mysql-community-common-${version}-1.el7.x86_64.rpm
    mysql-community-libs-${version}-1.el7.x86_64.rpm
    mysql-community-libs-compat-${version}-1.el7.x86_64.rpm
    mysql-community-server-${version}-1.el7.x86_64.rpm
)


for pkg in ${packages[@]}
do
    [[ -e ${pkg} ]] || wget --no-check-certificate ${prefix}/${pkg}
done

tar --use-compress-program=pigz -cf mysql-${version}.tar.gz *.rpm --remove-files


cat >install.sh<<EOF
#!/usr/bin/env bash

TEMP_PATH=\$(mktemp -d)
VERSION="$version"

sed -n -e '1,/^exit 0$/!p' \$0 > \${TEMP_PATH}/mysql-\${VERSION}.tar.gz 2>/dev/null

cd \${TEMP_PATH}

tar axvf mysql-\${VERSION}.tar.gz

yum -y localinstall ./*.rpm

rm -rf \${TEMP_PATH}

exit 0
EOF

cat install.sh mysql-${version}.tar.gz >mysql_${version}.bin
chmod +x mysql_${version}.bin

举一反三

  • k8s 环境包
  • 已编译安装好的二进制nginx