一、背景
最近一直在做greenplum數據庫相關的項目,項目中需要做greenplum分佈式數據庫的(分佈式)安裝包,由於greenplum-db-6.x.x-rhel7-x86_64.rpm包需要聯網安裝,所以聯網在線安裝相對比較容易,故已經實現了一個多節點的一鍵安裝(見另一篇博客:https://blog.csdn.net/inrgihc/article/details/105824388);但當Greenplum需要部署在專網(與外網隔離)時,迫切需要通過找到該RPM包的所有依賴,即通過一臺聯網的機器找到RPM所有的依賴後,打包到需要部署的機器,使用yum localinstall命令進行本地安裝。
二、離線安裝
1、找到依賴
通過在離線機器上執行命令:rpm -ivh greenplum-db-6.6.0-rhel7-x86_64.rpm ,會提示如下依賴缺少錯誤提示:
[tang@localhost ~]$ rpm -ivh greenplum-db-6.6.0-rhel7-x86_64.rpm
error: Failed dependencies:
apr is needed by greenplum-db-6.6.0-1.el7.x86_64
apr-util is needed by greenplum-db-6.6.0-1.el7.x86_64
bzip2 is needed by greenplum-db-6.6.0-1.el7.x86_64
krb5-devel is needed by greenplum-db-6.6.0-1.el7.x86_64
libevent is needed by greenplum-db-6.6.0-1.el7.x86_64
libyaml is needed by greenplum-db-6.6.0-1.el7.x86_64
perl is needed by greenplum-db-6.6.0-1.el7.x86_64
rsync is needed by greenplum-db-6.6.0-1.el7.x86_64
zip is needed by greenplum-db-6.6.0-1.el7.x86_64
net-tools is needed by greenplum-db-6.6.0-1.el7.x86_64
2、下載依賴
通過上面的提示,我們需要尋找到的依賴包括:apr apr-util bzip2 krb5-devel libevent libyaml perl rsync zip net-tools等。
repotrack命令是linux提供的一個不錯的下載依賴的好工具,使用也比較簡單,使用說明請參考如下地址:
http://man7.org/linux/man-pages/man1/repotrack.1.html
既然找到了工具,那麼我們通過編寫一個腳本工具來實現批量下載依賴,腳本如下:
filename: find_all_deps_of_rpm_copy.sh
#!/bin/bash
############################################
# Function : RPM依賴爬取
# Author : tang
# Date : 2020-05-01
#
# Usage: sh find_all_deps_of_rpm_copy.sh
#
############################################
# RPM_DIR下載存放地址
#RPM_DIR=/var/cache/yum/x86_64/
RPM_DIR=./deps
# RPM下載種子
RPM_SEED=(apr apr-util bzip2 krb5-devel libevent libyaml perl rsync zip net-tools)
# 要求必須以root賬號執行
if [ "$(whoami)" != 'root' ]; then
echo "[ERROR]: You have no permission to run $0 as non-root user."
exit 1
fi
# CentOS7操作系統檢查
v=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/')
if [ $v -ne 7 ]; then
echo "[ERROR]: This program only can run for system CentOS 7 version."
exit 1
fi
# x86_64平臺檢查
platform=$(uname -m)
if [ "$platform" != "x86_64" ]; then
echo "[ERROR]: This program only can run for x86_64 operation system."
exit 1
fi
# 檢查並安裝yum-utils工具
if ! rpm -qa | grep -q "yum-utils"; then
yum install yum-utils -y
if [ $? != 0 ]; then
echo "[ERROR]: failed to yum instal yum-utils."
exit 1
fi
fi
# 本地安裝EPEL源
if ! rpm -qa | grep -q "epel-release"; then
yum install epel-release -y
if [ $? != 0 ]; then
echo "[ERROR]: failed to yum instal epel-release."
exit 1
fi
yum clean all && yum makecache
fi
# 本地存放目錄
[ -d "$RPM_DIR" ] || mkdir -p "$RPM_DIR"
# 配置下載種子入口
for p in ${RPM_SEED[@]}; do
repoquery -R --resolve --recursive $p | xargs -r yumdownloader --destdir=$RPM_DIR
if [ $? != 0 ]; then
echo "[ERROR]: download dependencies for package [ $p ] failed."
exit 1
fi
done
PACKAGES=(`ls $RPM_DIR `)
echo "[INFO]-$LINENO: game over ,total downloaded package count is ${#PACKAGES[@]}."
3、執行與結果
建議用最小化安裝且聯網的CentOS7系統來執行上述腳本抓取依賴,執行過程及其結果如下:
[root@localhost ~]# sh find_all_deps_of_rpm_copy.sh
Downloading apr-1.4.8-5.el7.x86_64.rpm
Downloading apr-1.4.8-5.el7.i686.rpm
Downloading basesystem-10.0-7.el7.centos.noarch.rpm
Downloading bash-4.2.46-34.el7.x86_64.rpm
Downloading centos-release-7-8.2003.0.el7.centos.x86_64.rpm
Downloading filesystem-3.2-25.el7.x86_64.rpm
Downloading glibc-2.17-307.el7.1.i686.rpm
Downloading glibc-2.17-307.el7.1.x86_64.rpm
Downloading glibc-common-2.17-307.el7.1.x86_64.rpm
Downloading libgcc-4.8.5-39.el7.i686.rpm
Downloading libgcc-4.8.5-39.el7.x86_64.rpm
Downloading libselinux-2.5-15.el7.x86_64.rpm
Downloading libsepol-2.5-10.el7.x86_64.rpm
Downloading libstdc++-4.8.5-39.el7.i686.rpm
Downloading libstdc++-4.8.5-39.el7.x86_64.rpm
Downloading libuuid-2.23.2-63.el7.x86_64.rpm
Downloading libuuid-2.23.2-63.el7.i686.rpm
Downloading ncurses-base-5.9-14.20130511.el7_4.noarch.rpm
Downloading ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm
Downloading nspr-4.21.0-1.el7.i686.rpm
Downloading nspr-4.21.0-1.el7.x86_64.rpm
Downloading nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm
Downloading nss-softokn-freebl-3.44.0-8.el7_7.x86_64.rpm
Downloading nss-util-3.44.0-4.el7_7.i686.rpm
Downloading nss-util-3.44.0-4.el7_7.x86_64.rpm
.
.
.
.(略)
.
.
[INFO]-69: game over ,total downloaded package count is 231.
[root@localhost~]# ls ./deps/
acl-2.2.51-15.el7.x86_64.rpm keyutils-libs-1.5.8-3.el7.x86_64.rpm libssh2-1.8.0-3.el7.i686.rpm perl-Encode-2.51-7.el7.x86_64.rpm
apr-1.4.8-5.el7.i686.rpm keyutils-libs-devel-1.5.8-3.el7.i686.rpm libssh2-1.8.0-3.el7.x86_64.rpm perl-Exporter-5.68-3.el7.noarch.rpm
apr-1.4.8-5.el7.x86_64.rpm keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm libstdc++-4.8.5-39.el7.i686.rpm perl-File-Path-2.09-2.el7.noarch.rpm
apr-util-1.5.2-6.el7.i686.rpm kmod-20-28.el7.x86_64.rpm libstdc++-4.8.5-39.el7.x86_64.rpm perl-File-Temp-0.23.01-3.el7.noarch.rpm
apr-util-1.5.2-6.el7.x86_64.rpm kmod-libs-20-28.el7.x86_64.rpm libtasn1-4.10-1.el7.i686.rpm perl-Filter-1.49-3.el7.x86_64.rpm
audit-libs-2.8.5-4.el7.i686.rpm kpartx-0.4.9-131.el7.x86_64.rpm libtasn1-4.10-1.el7.x86_64.rpm perl-Getopt-Long-2.40-3.el7.noarch.rpm
audit-libs-2.8.5-4.el7.x86_64.rpm krb5-devel-1.15.1-46.el7.i686.rpm libuser-0.60-9.el7.i686.rpm perl-HTTP-Tiny-0.033-3.el7.noarch.rpm
basesystem-10.0-7.el7.centos.noarch.rpm krb5-devel-1.15.1-46.el7.x86_64.rpm libuser-0.60-9.el7.x86_64.rpm perl-libs-5.16.3-295.el7.i686.rpm
bash-4.2.46-34.el7.x86_64.rpm krb5-libs-1.15.1-46.el7.i686.rpm libutempter-1.1.6-4.el7.i686.rpm perl-libs-5.16.3-295.el7.x86_64.rpm
binutils-2.27-43.base.el7.x86_64.rpm krb5-libs-1.15.1-46.el7.x86_64.rpm libutempter-1.1.6-4.el7.x86_64.rpm perl-macros-5.16.3-295.el7.x86_64.rpm
bzip2-1.0.6-13.el7.x86_64.rpm libacl-2.2.51-15.el7.i686.rpm libuuid-2.23.2-63.el7.i686.rpm perl-parent-0.225-244.el7.noarch.rpm
bzip2-libs-1.0.6-13.el7.i686.rpm libacl-2.2.51-15.el7.x86_64.rpm libuuid-2.23.2-63.el7.x86_64.rpm perl-PathTools-3.40-5.el7.x86_64.rpm
bzip2-libs-1.0.6-13.el7.x86_64.rpm libattr-2.4.46-13.el7.i686.rpm libverto-0.2.5-4.el7.i686.rpm perl-Pod-Escapes-1.04-295.el7.noarch.rpm
ca-certificates-2019.2.32-76.el7_7.noarch.rpm libattr-2.4.46-13.el7.x86_64.rpm libverto-0.2.5-4.el7.x86_64.rpm perl-podlators-2.5.1-3.el7.noarch.rpm
centos-release-7-8.2003.0.el7.centos.x86_64.rpm libblkid-2.23.2-63.el7.i686.rpm libverto-devel-0.2.5-4.el7.i686.rpm perl-Pod-Perldoc-3.20-4.el7.noarch.rpm
chkconfig-1.7.4-1.el7.x86_64.rpm libblkid-2.23.2-63.el7.x86_64.rpm libverto-devel-0.2.5-4.el7.x86_64.rpm perl-Pod-Simple-3.28-4.el7.noarch.rpm
coreutils-8.22-24.el7.x86_64.rpm libcap-2.22-11.el7.i686.rpm libxml2-2.9.1-6.el7.4.x86_64.rpm perl-Pod-Usage-1.63-3.el7.noarch.rpm
cpio-2.11-27.el7.x86_64.rpm libcap-2.22-11.el7.x86_64.rpm libyaml-0.1.4-11.el7_0.i686.rpm perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm
cracklib-2.9.0-11.el7.i686.rpm libcap-ng-0.7.5-4.el7.i686.rpm libyaml-0.1.4-11.el7_0.x86_64.rpm perl-Socket-2.010-5.el7.x86_64.rpm
cracklib-2.9.0-11.el7.x86_64.rpm libcap-ng-0.7.5-4.el7.x86_64.rpm lua-5.1.4-15.el7.x86_64.rpm perl-Storable-2.45-3.el7.x86_64.rpm
cracklib-dicts-2.9.0-11.el7.x86_64.rpm libcom_err-1.42.9-17.el7.i686.rpm lz4-1.7.5-3.el7.i686.rpm perl-Text-ParseWords-3.29-4.el7.noarch.rpm
cryptsetup-libs-2.0.3-6.el7.x86_64.rpm libcom_err-1.42.9-17.el7.x86_64.rpm lz4-1.7.5-3.el7.x86_64.rpm perl-threads-1.87-4.el7.x86_64.rpm
curl-7.29.0-57.el7.x86_64.rpm libcom_err-devel-1.42.9-17.el7.i686.rpm ncurses-5.9-14.20130511.el7_4.x86_64.rpm perl-threads-shared-1.43-6.el7.x86_64.rpm
cyrus-sasl-lib-2.1.26-23.el7.i686.rpm libcom_err-devel-1.42.9-17.el7.x86_64.rpm ncurses-base-5.9-14.20130511.el7_4.noarch.rpm perl-Time-HiRes-1.9725-3.el7.x86_64.rpm
cyrus-sasl-lib-2.1.26-23.el7.x86_64.rpm libcurl-7.29.0-57.el7.i686.rpm ncurses-libs-5.9-14.20130511.el7_4.i686.rpm perl-Time-Local-1.2300-2.el7.noarch.rpm
dbus-1.10.24-13.el7_6.x86_64.rpm libcurl-7.29.0-57.el7.x86_64.rpm ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm pkgconfig-0.27.1-4.el7.i686.rpm
dbus-libs-1.10.24-13.el7_6.x86_64.rpm libdb-5.3.21-25.el7.i686.rpm net-tools-2.0-0.25.20131004git.el7.x86_64.rpm pkgconfig-0.27.1-4.el7.x86_64.rpm
device-mapper-1.02.164-7.el7_8.1.x86_64.rpm libdb-5.3.21-25.el7.x86_64.rpm nspr-4.21.0-1.el7.i686.rpm popt-1.13-16.el7.i686.rpm
device-mapper-libs-1.02.164-7.el7_8.1.i686.rpm libdb-utils-5.3.21-25.el7.x86_64.rpm nspr-4.21.0-1.el7.x86_64.rpm popt-1.13-16.el7.x86_64.rpm
device-mapper-libs-1.02.164-7.el7_8.1.x86_64.rpm libevent-2.0.21-4.el7.i686.rpm nss-3.44.0-7.el7_7.i686.rpm procps-ng-3.3.10-27.el7.i686.rpm
diffutils-3.3-5.el7.i686.rpm libevent-2.0.21-4.el7.x86_64.rpm nss-3.44.0-7.el7_7.x86_64.rpm procps-ng-3.3.10-27.el7.x86_64.rpm
diffutils-3.3-5.el7.x86_64.rpm libffi-3.0.13-19.el7.i686.rpm nss-pem-1.0.3-7.el7.i686.rpm qrencode-libs-3.4.1-3.el7.x86_64.rpm
dracut-033-568.el7.x86_64.rpm libffi-3.0.13-19.el7.x86_64.rpm nss-pem-1.0.3-7.el7.x86_64.rpm readline-6.2-11.el7.i686.rpm
elfutils-default-yama-scope-0.176-4.el7.noarch.rpm libgcc-4.8.5-39.el7.i686.rpm nss-softokn-3.44.0-8.el7_7.i686.rpm readline-6.2-11.el7.x86_64.rpm
elfutils-libelf-0.176-4.el7.i686.rpm libgcc-4.8.5-39.el7.x86_64.rpm nss-softokn-3.44.0-8.el7_7.x86_64.rpm rpm-4.11.3-43.el7.x86_64.rpm
elfutils-libelf-0.176-4.el7.x86_64.rpm libgcrypt-1.5.3-14.el7.i686.rpm nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm rpm-libs-4.11.3-43.el7.x86_64.rpm
elfutils-libs-0.176-4.el7.i686.rpm libgcrypt-1.5.3-14.el7.x86_64.rpm nss-softokn-freebl-3.44.0-8.el7_7.x86_64.rpm rsync-3.1.2-10.el7.x86_64.rpm
elfutils-libs-0.176-4.el7.x86_64.rpm libgpg-error-1.12-3.el7.i686.rpm nss-sysinit-3.44.0-7.el7_7.x86_64.rpm sed-4.2.2-6.el7.x86_64.rpm
expat-2.1.0-11.el7.i686.rpm libgpg-error-1.12-3.el7.x86_64.rpm nss-tools-3.44.0-7.el7_7.x86_64.rpm setup-2.8.71-11.el7.noarch.rpm
expat-2.1.0-11.el7.x86_64.rpm libidn-1.28-4.el7.i686.rpm nss-util-3.44.0-4.el7_7.i686.rpm shadow-utils-4.6-5.el7.x86_64.rpm
filesystem-3.2-25.el7.x86_64.rpm libidn-1.28-4.el7.x86_64.rpm nss-util-3.44.0-4.el7_7.x86_64.rpm shared-mime-info-1.8-5.el7.x86_64.rpm
findutils-4.5.11-6.el7.x86_64.rpm libkadm5-1.15.1-46.el7.i686.rpm openldap-2.4.44-21.el7_6.i686.rpm sqlite-3.7.17-8.el7_7.1.i686.rpm
gawk-4.0.2-4.el7_3.1.x86_64.rpm libkadm5-1.15.1-46.el7.x86_64.rpm openldap-2.4.44-21.el7_6.x86_64.rpm sqlite-3.7.17-8.el7_7.1.x86_64.rpm
gdbm-1.10-8.el7.x86_64.rpm libmount-2.23.2-63.el7.i686.rpm openssl-libs-1.0.2k-19.el7.i686.rpm systemd-219-73.el7_8.5.x86_64.rpm
glib2-2.56.1-5.el7.i686.rpm libmount-2.23.2-63.el7.x86_64.rpm openssl-libs-1.0.2k-19.el7.x86_64.rpm systemd-libs-219-73.el7_8.5.i686.rpm
glib2-2.56.1-5.el7.x86_64.rpm libpwquality-1.2.3-5.el7.i686.rpm p11-kit-0.23.5-3.el7.i686.rpm systemd-libs-219-73.el7_8.5.x86_64.rpm
glibc-2.17-307.el7.1.i686.rpm libpwquality-1.2.3-5.el7.x86_64.rpm p11-kit-0.23.5-3.el7.x86_64.rpm tar-1.26-35.el7.x86_64.rpm
glibc-2.17-307.el7.1.x86_64.rpm libselinux-2.5-15.el7.i686.rpm p11-kit-trust-0.23.5-3.el7.i686.rpm tzdata-2020a-1.el7.noarch.rpm
glibc-common-2.17-307.el7.1.x86_64.rpm libselinux-2.5-15.el7.x86_64.rpm p11-kit-trust-0.23.5-3.el7.x86_64.rpm ustr-1.0.4-16.el7.x86_64.rpm
gmp-6.0.0-15.el7.i686.rpm libselinux-devel-2.5-15.el7.i686.rpm pam-1.1.8-23.el7.i686.rpm util-linux-2.23.2-63.el7.i686.rpm
gmp-6.0.0-15.el7.x86_64.rpm libselinux-devel-2.5-15.el7.x86_64.rpm pam-1.1.8-23.el7.x86_64.rpm util-linux-2.23.2-63.el7.x86_64.rpm
grep-2.20-3.el7.x86_64.rpm libsemanage-2.5-14.el7.x86_64.rpm pcre-8.32-17.el7.i686.rpm xz-5.2.2-1.el7.x86_64.rpm
groff-base-1.22.2-8.el7.x86_64.rpm libsepol-2.5-10.el7.i686.rpm pcre-8.32-17.el7.x86_64.rpm xz-libs-5.2.2-1.el7.i686.rpm
gzip-1.5-10.el7.x86_64.rpm libsepol-2.5-10.el7.x86_64.rpm pcre-devel-8.32-17.el7.i686.rpm xz-libs-5.2.2-1.el7.x86_64.rpm
hardlink-1.0-19.el7.x86_64.rpm libsepol-devel-2.5-10.el7.i686.rpm pcre-devel-8.32-17.el7.x86_64.rpm zip-3.0-11.el7.x86_64.rpm
info-5.1-5.el7.x86_64.rpm libsepol-devel-2.5-10.el7.x86_64.rpm perl-5.16.3-295.el7.x86_64.rpm zlib-1.2.7-18.el7.i686.rpm
json-c-0.11-4.el7_0.x86_64.rpm libsmartcols-2.23.2-63.el7.i686.rpm perl-Carp-1.26-244.el7.noarch.rpm zlib-1.2.7-18.el7.x86_64.rpm
keyutils-libs-1.5.8-3.el7.i686.rpm libsmartcols-2.23.2-63.el7.x86_64.rpm perl-constant-1.27-2.el7.noarch.rpm
4、本地安裝GPDB
上面已經將依賴下載到deps目錄了,那麼將其拷貝到部署服務器上,執行如下命令安裝吧:
yum localinstall -y files/greenplum-db-6.6.0-rhel7-x86_64.rpm deps/*.x86_64.rpm
三、總結
是否也可以做一個完全離線(斷網)的安裝包呢,繼續搗鼓吧!!