1、安装依赖环境

yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2
2、克隆镜像仓库

克隆仓库后并执行脚本会自动下载文件到本地downloads目录中

要网络环境够好,不然很容易失败

git clone https://github.com/boypt/openssh-rpms.git
[root@node1 tmp]# cd openssh-rpms/
[root@node1 openssh-rpms]# ls
[root@node1 openssh-rpms]# ./pullsrc.sh
amzn1  amzn2023    docker            downloads  el6  pullsrc.sh  version.env
amzn2  compile.sh  docker.README.md  el5        el7  README.md
[root@node1 openssh-rpms]# cd downloads/
[root@node1 downloads]# ls
openssh-9.7p1.tar.gz  openssl-3.0.14.tar.gz  x11-ssh-askpass-1.2.4.1.tar.gz
[root@node1 downloads]#
[root@node1 downloads]# du * -sh
1.8M    openssh-9.7p1.tar.gz
15M     openssl-3.0.14.tar.gz
32K     x11-ssh-askpass-1.2.4.1.tar.gz
3、执行RPM制作

等待一段时间以后,会生成可离线安装的RPM包

./compile.sh
[root@node1 openssh-rpms]# ./compile.sh
Distro undefined, please specify manually: el5 el6 el7 amzn1 amzn2 amzn2023

Current OS:
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.5.1804 (Core)
CentOS Linux release 7.5.1804 (Core)
Current OS vendor: redhat

This script works only in el5/el6/el7/amzn1/amzn2/amzn2023
eg: ./compile.sh el7
[root@node1 openssh-rpms]# ./compile.sh el7
/tmp/openssh-rpms/el7 /tmp/openssh-rpms
‘/tmp/openssh-rpms/downloads/openssh-9.7p1.tar.gz’ -> ‘./SOURCES/openssh-9.7p1.tar.gz’
‘/tmp/openssh-rpms/downloads/openssl-3.0.14.tar.gz’ -> ‘./SOURCES/openssl-3.0.14.tar.gz’
‘/tmp/openssh-rpms/downloads/x11-ssh-askpass-1.2.4.1.tar.gz’ -> ‘./SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz’
Building target platforms: x86_64
Building for target x86_64
error: Failed build dependencies:   //报错
        krb5-devel is needed by openssh-9.7p1-1.el7.centos.x86_64
/tmp/openssh-rpms
[root@node1 openssh-rpms]# yum install -y krb5-devel  //解决上面的报错问题
[root@node1 openssh-rpms]# ./compile.sh el7
/tmp/openssh-rpms/el7 /tmp/openssh-rpms
removed ‘./SOURCES/openssh-9.7p1.tar.gz’
‘/tmp/openssh-rpms/downloads/openssh-9.7p1.tar.gz’ -> ‘./SOURCES/openssh-9.7p1.tar.gz’
removed ‘./SOURCES/openssl-3.0.14.tar.gz’
‘/tmp/openssh-rpms/downloads/openssl-3.0.14.tar.gz’ -> ‘./SOURCES/openssl-3.0.14.tar.gz’
removed ‘./SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz’
‘/tmp/openssh-rpms/downloads/x11-ssh-askpass-1.2.4.1.tar.gz’ -> ‘./SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz’
Building target platforms: x86_64
Building for target x86_64
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.tYlqyw
+ umask 022
+ cd /tmp/openssh-rpms/el7/BUILD
+ cd /tmp/openssh-rpms/el7/BUILD
+ rm -rf openssh-9.7p1
+ /usr/bin/gzip -dc /tmp/openssh-rpms/el7/SOURCES/openssh-9.7p1.tar.gz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd openssh-9.7p1
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ mkdir -p openssl
+ tar xfz /tmp/openssh-rpms/el7/SOURCES/openssl-3.0.14.tar.gz --strip-components=1 -C openssl
+ pushd openssl
/tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1
+ ./config shared zlib -fPIC
Can't locate IPC/Cmd.pm in @INC (@INC contains: /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/external/perl/Text-Template-1.56/lib) at /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/Configure line 23.
BEGIN failed--compilation aborted at /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/Configure line 23.
error: Bad exit status from /var/tmp/rpm-tmp.tYlqyw (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.tYlqyw (%prep)
/tmp/openssh-rpms
[root@node1 openssh-rpms]# yum install perl-IPC-Cmd
解决上面Can't locate IPC/Cmd.pm in @INC (@INC contains: /tmp/openssh-rpms/el7/BUILD/openssh-9.7p1/openssl/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5的问题
[root@node1 openssh-rpms]# ./compile.sh el7   再次编译就可以了
************************************省略
Obsoletes: ssh-server
Processing files: openssh-debuginfo-9.7p1-1.el7.centos.x86_64
Provides: openssh-debuginfo = 9.7p1-1.el7.centos openssh-debuginfo(x86-64) = 9.7p1-1.el7.centos
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/openssh-rpms/el7/BUILDROOT/openssh-9.7p1-1.el7.centos.x86_64
Wrote: /tmp/openssh-rpms/el7/SRPMS/openssh-9.7p1-1.el7.centos.src.rpm
Wrote: /tmp/openssh-rpms/el7/RPMS/x86_64/openssh-9.7p1-1.el7.centos.x86_64.rpm
Wrote: /tmp/openssh-rpms/el7/RPMS/x86_64/openssh-clients-9.7p1-1.el7.centos.x86_64.rpm
Wrote: /tmp/openssh-rpms/el7/RPMS/x86_64/openssh-server-9.7p1-1.el7.centos.x86_64.rpm
Wrote: /tmp/openssh-rpms/el7/RPMS/x86_64/openssh-debuginfo-9.7p1-1.el7.centos.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.hWKV5b
+ umask 022
+ cd /tmp/openssh-rpms/el7/BUILD
+ cd openssh-9.7p1
+ rm -rf /tmp/openssh-rpms/el7/BUILDROOT/openssh-9.7p1-1.el7.centos.x86_64
+ exit 0
/tmp/openssh-rpms

4、查询生成的RPM文件

[root@node1 x86_64]# pwd
/tmp/openssh-rpms/el7/RPMS/x86_64
[root@node1 x86_64]# ls
openssh-9.7p1-1.el7.centos.x86_64.rpm          openssh-debuginfo-9.7p1-1.el7.centos.x86_64.rpm
openssh-clients-9.7p1-1.el7.centos.x86_64.rpm  openssh-server-9.7p1-1.el7.centos.x86_64.rpm