• 全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包


    CentOS6.10系统原生的openssl版本太老,1.0.1e,不能满足一些新版本应用软件的要求,但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖,不能再做升级。故需考虑在不影响系统原生openssl的情况下,安装较新版的openssl形成多版本并存,本文采用编译rpm包的方式完成了可并存的openssl-1.1.1的安装文件制作。

    一、准备编译环境:

     1、发布一台虚拟机,最小化安装CentOS6.10,查看系统信息如下:

    1. [root@localhost ~]# cat /etc/redhat-release
    2. CentOS release 6.10 (Final)

     2、查看系统所带openssl的版本信息:

    1. [root@localhost ~]# rpm -qa|grep openssh
    2. openssh-5.3p1-123.el6_9.x86_64
    3. openssh-server-5.3p1-123.el6_9.x86_64
    4. [root@localhost ~]# rpm -qa|grep openssl
    5. openssl-1.0.1e-57.el6.x86_64

     3、修改系统源为阿里源

    1. [root@localhost ~]# cd /etc/yum.repos.d/
    2. [root@localhost yum.repos.d]# rm CentOS-* -rf
    3. [root@localhost yum.repos.d]# vi http.repo
    4. [root@localhost yum.repos.d]# cat http.repo
    5. [os]
    6. name=os
    7. baseurl=https://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/
    8. gpgcheck=0
    9. enabled=1
    10. [root@localhost yum.repos.d]# cd ~
    11. [root@localhost ~]# yum repolist
    12. 已加载插件:fastestmirror
    13. Determining fastest mirrors
    14. os | 3.7 kB 00:00
    15. os/primary_db | 4.7 MB 00:04
    16. 仓库标识 仓库名称 状态
    17. os os 6,713
    18. repolist: 6,713

     4、准备相关目录及工具

    1. [root@localhost ~]# cd ~
    2. [root@localhost ~]# mkdir -p rpmbuild/{SOURCES,SPECS}
    3. [root@localhost ~]# yum install wget tree -y
    4. 已加载插件:fastestmirror
    5. 设置安装进程
    6. Loading mirror speeds from cached hostfile
    7. 解决依赖关系
    8. --> 执行事务检查
    9. ---> Package tree.x86_64 0:1.5.3-3.el6 will be 安装
    10. ---> Package wget.x86_64 0:1.12-10.el6 will be 安装
    11. --> 完成依赖关系计算
    12. 依赖关系解决
    13. =========================================================================================================================================================
    14. 软件包 架构 版本 仓库 大小
    15. =========================================================================================================================================================
    16. 正在安装:
    17. tree x86_64 1.5.3-3.el6 os 36 k
    18. wget x86_64 1.12-10.el6 os 484 k
    19. 事务概要
    20. =========================================================================================================================================================
    21. Install 2 Package(s)
    22. 总下载量:520 k
    23. Installed size: 1.9 M
    24. 下载软件包:
    25. (1/2): tree-1.5.3-3.el6.x86_64.rpm | 36 kB 00:00
    26. (2/2): wget-1.12-10.el6.x86_64.rpm | 484 kB 00:00
    27. ---------------------------------------------------------------------------------------------------------------------------------------------------------
    28. 总计 799 kB/s | 520 kB 00:00
    29. 运行 rpm_check_debug
    30. 执行事务测试
    31. 事务测试成功
    32. 执行事务
    33. 正在安装 : tree-1.5.3-3.el6.x86_64 1/2
    34. 正在安装 : wget-1.12-10.el6.x86_64 2/2
    35. Verifying : wget-1.12-10.el6.x86_64 1/2
    36. Verifying : tree-1.5.3-3.el6.x86_64 2/2
    37. 已安装:
    38. tree.x86_64 0:1.5.3-3.el6 wget.x86_64 0:1.12-10.el6
    39. 完毕!

    5、 准备源文件

    1. [root@localhost ~] # cd rpmbuild/SOURCES/
    2. [root@localhost SOURCES]# wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz --no-check-certificate
    3. --2023-09-06 17:08:04--  https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz
    4. 正在解析主机 www.openssl.org... 184.30.9.21, 2402:4f00:4002:19e::c1e, 2402:4f00:4002:198::c1e
    5. 正在连接 www.openssl.org|184.30.9.21|:443... 已连接。
    6. ...
    7. 2023-09-06 17:08:13 (924 KB/s) - 已保存 “openssl-1.1.1.tar.gz” [8337920/8337920])
    8. [root@localhost SOURCES]# ll openssl-1.1.1.tar.gz
    9. -rw-r--r--. 1 root root 8337920 9月 11 2018 openssl-1.1.1.tar.gz

    6、 安装编译工具

    1. [root@localhost SPECS]# yum install -y gcc make perl rpm-build rpmlint perl-WWW-Curl
    2. 已加载插件:fastestmirror
    3. 设置安装进程
    4. Loading mirror speeds from cached hostfile
    5. os | 3.7 kB 00:00
    6. 包 gcc-4.4.7-23.el6.x86_64 已安装并且是最新版本
    7. 包 1:make-3.81-23.el6.x86_64 已安装并且是最新版本
    8. 包 4:perl-5.10.1-144.el6.x86_64 已安装并且是最新版本
    9. 包 rpm-build-4.8.0-59.el6.x86_64 已安装并且是最新版本
    10. 解决依赖关系
    11. --> 执行事务检查
    12. ---> Package perl-WWW-Curl.x86_64 0:4.09-4.el6 will be 安装
    13. ---> Package rpmlint.noarch 0:0.94-3.1.el6 will be 安装
    14. --> 处理依赖关系 python-magic,它被软件包 rpmlint-0.94-3.1.el6.noarch 需要
    15. --> 处理依赖关系 python-enchant,它被软件包 rpmlint-0.94-3.1.el6.noarch 需要
    16. --> 执行事务检查
    17. ---> Package python-enchant.x86_64 0:1.3.1-5.2.el6 will be 安装
    18. --> 处理依赖关系 libenchant.so.1()(64bit),它被软件包 python-enchant-1.3.1-5.2.el6.x86_64 需要
    19. ---> Package python-magic.x86_64 0:5.04-30.el6 will be 安装
    20. --> 执行事务检查
    21. ---> Package enchant.x86_64 1:1.5.0-5.el6 will be 安装
    22. --> 处理依赖关系 libhunspell-1.2.so.0()(64bit),它被软件包 1:enchant-1.5.0-5.el6.x86_64 需要
    23. --> 执行事务检查
    24. ---> Package hunspell.x86_64 0:1.2.8-16.el6 will be 安装
    25. --> 完成依赖关系计算
    26. 依赖关系解决
    27. =========================================================================================================================================================
    28. 软件包 架构 版本 仓库 大小
    29. =========================================================================================================================================================
    30. 正在安装:
    31. perl-WWW-Curl x86_64 4.09-4.el6 os 47 k
    32. rpmlint noarch 0.94-3.1.el6 os 186 k
    33. 为依赖而安装:
    34. enchant x86_64 1:1.5.0-5.el6 os 49 k
    35. hunspell x86_64 1.2.8-16.el6 os 177 k
    36. python-enchant x86_64 1.3.1-5.2.el6 os 82 k
    37. python-magic x86_64 5.04-30.el6 os 29 k
    38. 事务概要
    39. =========================================================================================================================================================
    40. Install 6 Package(s)
    41. 总下载量:569 k
    42. Installed size: 1.7 M
    43. 下载软件包:
    44. (1/6): enchant-1.5.0-5.el6.x86_64.rpm | 49 kB 00:00
    45. (2/6): hunspell-1.2.8-16.el6.x86_64.rpm | 177 kB 00:00
    46. (3/6): perl-WWW-Curl-4.09-4.el6.x86_64.rpm | 47 kB 00:00
    47. (4/6): python-enchant-1.3.1-5.2.el6.x86_64.rpm | 82 kB 00:00
    48. (5/6): python-magic-5.04-30.el6.x86_64.rpm | 29 kB 00:00
    49. (6/6): rpmlint-0.94-3.1.el6.noarch.rpm | 186 kB 00:00
    50. ---------------------------------------------------------------------------------------------------------------------------------------------------------
    51. 总计 303 kB/s | 569 kB 00:01
    52. 运行 rpm_check_debug
    53. 执行事务测试
    54. 事务测试成功
    55. 执行事务
    56. 正在安装 : python-magic-5.04-30.el6.x86_64 1/6
    57. 正在安装 : hunspell-1.2.8-16.el6.x86_64 2/6
    58. 正在安装 : 1:enchant-1.5.0-5.el6.x86_64 3/6
    59. 正在安装 : python-enchant-1.3.1-5.2.el6.x86_64 4/6
    60. 正在安装 : rpmlint-0.94-3.1.el6.noarch 5/6
    61. 正在安装 : perl-WWW-Curl-4.09-4.el6.x86_64 6/6
    62. Verifying : hunspell-1.2.8-16.el6.x86_64 1/6
    63. Verifying : perl-WWW-Curl-4.09-4.el6.x86_64 2/6
    64. Verifying : rpmlint-0.94-3.1.el6.noarch 3/6
    65. Verifying : python-magic-5.04-30.el6.x86_64 4/6
    66. Verifying : python-enchant-1.3.1-5.2.el6.x86_64 5/6
    67. Verifying : 1:enchant-1.5.0-5.el6.x86_64 6/6
    68. 已安装:
    69. perl-WWW-Curl.x86_64 0:4.09-4.el6 rpmlint.noarch 0:0.94-3.1.el6
    70. 作为依赖被安装:
    71. enchant.x86_64 1:1.5.0-5.el6 hunspell.x86_64 0:1.2.8-16.el6 python-enchant.x86_64 0:1.3.1-5.2.el6 python-magic.x86_64 0:5.04-30.el6
    72. 完毕!

    7、备份原始版本的rpm包,以备不时之需

    1. [root@localhost ~]# cd /opt
    2. [root@localhost opt]# mkdir openssl-devel-1.0.1e
    3. [root@localhost opt]# cd openssl-devel-1.0.1e/
    4. [root@localhost openssl-devel-1.0.1e]# wget https://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/Packages/openssl-1.0.1e-57.el6.x86_64.rpm
    5. --2023-09-06 19:26:42-- https://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/Packages/openssl-1.0.1e-57.el6.x86_64.rpm
    6. 正在解析主机 mirrors.aliyun.com... 120.226.194.113, 120.226.194.114, 120.226.194.119, ...
    7. 正在连接 mirrors.aliyun.com|120.226.194.113|:443... 已连接。
    8. 已发出 HTTP 请求,正在等待回应... 200 OK
    9. 长度:1600772 (1.5M) [application/x-rpm]
    10. 正在保存至: “openssl-1.0.1e-57.el6.x86_64.rpm”
    11. 100%[===============================================================================================================>] 1,600,772 1.58M/s in 1.0s
    12. 2023-09-06 19:26:44 (1.58 MB/s) - 已保存 “openssl-1.0.1e-57.el6.x86_64.rpm” [1600772/1600772])
    13. [root@localhost openssl-devel-1.0.1e]# wget https://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/Packages/openssl-devel-1.0.1e-57.el6.x86_64.rpm
    14. --2023-09-06 19:27:05-- https://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/Packages/openssl-devel-1.0.1e-57.el6.x86_64.rpm
    15. 正在解析主机 mirrors.aliyun.com... 120.226.194.112, 120.226.194.116, 120.226.194.115, ...
    16. 正在连接 mirrors.aliyun.com|120.226.194.112|:443... 已连接。
    17. 已发出 HTTP 请求,正在等待回应... 200 OK
    18. 长度:1227684 (1.2M) [application/x-rpm]
    19. 正在保存至: “openssl-devel-1.0.1e-57.el6.x86_64.rpm”
    20. 100%[===============================================================================================================>] 1,227,684 2.40M/s in 0.5s
    21. 2023-09-06 19:27:06 (2.40 MB/s) - 已保存 “openssl-devel-1.0.1e-57.el6.x86_64.rpm” [1227684/1227684])
    22. [root@localhost openssl-devel-1.0.1e]# ll
    23. 总用量 2764
    24. -rw-r--r--. 1 root root 1600772 3月 23 2017 openssl-1.0.1e-57.el6.x86_64.rpm
    25. -rw-r--r--. 1 root root 1227684 3月 23 2017 openssl-devel-1.0.1e-57.el6.x86_64.rpm

     二、正式编译

    1、编写spec文件

    1. [root@localhost SOURCES]# cd /root/rpmbuild/SPECS/
    2. [root@localhost SPECS]# vi openssl-1.1.1.spec
    3. [root@localhost SPECS]# cat openssl-1.1.1.spec
    4. Summary: OpenSSL 1.1.1 Portable for Centos
    5. Name: openssl
    6. Version: %{?version}%{!?version:1.1.1}
    7. Release: 25%{?dist}
    8. Obsoletes: %{name} <= %{version}
    9. Provides: %{name} = %{version}
    10. URL: https://www.openssl.org/
    11. License: GPLv2+
    12. Source: https://www.openssl.org/source/openssl-1.1.1.tar.gz
    13. BuildRequires: make gcc perl perl-WWW-Curl
    14. BuildRoot: %{_tmppath}/openssl-%{version}-%{release}-root
    15. %global openssldir /usr/openssl-%{version}
    16. %description
    17. OpenSSL RPM for version 1.1.1 on Centos
    18. %package devel
    19. Summary: Development files for programs which will use the openssl library
    20. Group: Development/Libraries
    21. Requires: %{name} = %{version}-%{release}
    22. %description devel
    23. OpenSSL Portable RPM for version 1.1.1 on Centos (development package)
    24. %prep
    25. %setup -q
    26. %build
    27. ./config --prefix=%{openssldir} --openssldir=%{openssldir} -fPIC
    28. make
    29. %install
    30. [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
    31. %make_install
    32. mkdir -p %{buildroot}%{_bindir}
    33. mkdir -p %{buildroot}%{_libdir}
    34. ln -sf %{openssldir}/lib/libssl.so.1.1 %{buildroot}%{_libdir}
    35. ln -sf %{openssldir}/lib/libcrypto.so.1.1 %{buildroot}%{_libdir}
    36. ln -sf %{openssldir}/bin/openssl-1.1.1 %{buildroot}%{_bindir}
    37. %clean
    38. [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
    39. %files
    40. %{openssldir}
    41. %defattr(-,root,root)
    42. /usr/bin/openssl-1.1.1
    43. /usr/lib64/libcrypto.so.1.1
    44. /usr/lib64/libssl.so.1.1
    45. %files devel
    46. %{openssldir}/include/*
    47. %defattr(-,root,root)
    48. %post -p /sbin/ldconfig
    49. %postun -p /sbin/ldconfig
    50. %changelog
    51. * Wed Sep 6 2023 daijianbing - 1.1.1
    52. - Rebuilt for https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz
    53. [root@localhost SPECS]#

     注:上面代码有一处需添加一行,请见面的讲解,可以避免后面rpm包安装后的软链接问题。

    2、开始编译

    1. [root@localhost SPECS]# rpmbuild -bb openssl-1.1.1.spec
    2. Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.JWwxii
    3. + umask 022
    4. + cd /root/rpmbuild/BUILD
    5. + LANG=C
    6. + export LANG
    7. + unset DISPLAY
    8. + cd /root/rpmbuild/BUILD
    9. + rm -rf openssl-1.1.1
    10. + /usr/bin/gzip -dc /root/rpmbuild/SOURCES/openssl-1.1.1.tar.gz
    11. + /bin/tar -xf -
    12. + STATUS=0
    13. + '[' 0 -ne 0 ']'
    14. + cd openssl-1.1.1
    15. + /bin/chmod -Rf a+rX,u+w,g-w,o-w .
    16. + exit 0
    17. Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.3NZp5J
    18. + umask 022
    19. + cd /root/rpmbuild/BUILD
    20. + cd openssl-1.1.1
    21. + LANG=C
    22. + export LANG
    23. + unset DISPLAY
    24. + ./config --prefix=/usr/openssl --openssldir=/usr/openssl -fPIC
    25. Operating system: x86_64-whatever-linux2
    26. Configuring OpenSSL version 1.1.1 (0x1010100fL) for linux-x86_64
    27. Using os-specific seed configuration
    28. Creating configdata.pm
    29. Creating Makefile
    30. **********************************************************************
    31. *** ***
    32. *** If you want to report a building issue, please include the ***
    33. *** output from this command: ***
    34. *** ***
    35. *** perl configdata.pm --dump ***
    36. *** ***
    37. **********************************************************************
    38. + make
    39. ...
    40. Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openssl-1.1.1-25.el6.x86_64
    41. Wrote: /root/rpmbuild/RPMS/x86_64/openssl-1.1.1-25.el6.x86_64.rpm
    42. Wrote: /root/rpmbuild/RPMS/x86_64/openssl-devel-1.1.1-25.el6.x86_64.rpm
    43. Wrote: /root/rpmbuild/RPMS/x86_64/openssl-debuginfo-1.1.1-25.el6.x86_64.rpm
    44. Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.xriOpv
    45. + umask 022
    46. + cd /root/rpmbuild/BUILD
    47. + cd openssl-1.1.1
    48. + '[' /root/rpmbuild/BUILDROOT/openssl-1.1.1-25.el6.x86_64 '!=' / ']'
    49. + /bin/rm -rf /root/rpmbuild/BUILDROOT/openssl-1.1.1-25.el6.x86_64
    50. + exit 0

    3、如上最后出现“+ exit 0”即正常编译完成,在/root/rpmbuild/RPMS/x86_64目录下可以看到编译生成的rpm文件

    1. [root@localhost SPECS]# ll /root/rpmbuild/RPMS/x86_64/*-1.1.1-*
    2. -rw-r--r--. 1 root root 5439452 9月 6 17:25 /root/rpmbuild/RPMS/x86_64/openssl-1.1.1-25.el6.x86_64.rpm
    3. -rw-r--r--. 1 root root 133508 9月 6 17:25 /root/rpmbuild/RPMS/x86_64/openssl-debuginfo-1.1.1-25.el6.x86_64.rpm
    4. -rw-r--r--. 1 root root 237604 9月 6 17:25 /root/rpmbuild/RPMS/x86_64/openssl-devel-1.1.1-25.el6.x86_64.rpm

    三、测试安装及验证

    1、尝试直接安装新版

    1. [root@localhost SPECS]# cd /root/rpmbuild/RPMS/x86_64/
    2. [root@localhost x86_64]# ll
    3. 总用量 5684
    4. -rw-r--r--. 1 root root 5440868 9月 6 20:39 openssl-1.1.1-25.el6.x86_64.rpm
    5. -rw-r--r--. 1 root root 133428 9月 6 20:39 openssl-debuginfo-1.1.1-25.el6.x86_64.rpm
    6. -rw-r--r--. 1 root root 237644 9月 6 20:39 openssl-devel-1.1.1-25.el6.x86_64.rpm
    7. [root@localhost x86_64]# rpm -ivh *
    8. Preparing... ########################################### [100%]
    9. 1:openssl ########################################### [ 33%]
    10. 2:openssl-devel ########################################### [ 67%]
    11. 3:openssl-debuginfo ########################################### [100%]
    12. [root@localhost x86_64]# openssl version
    13. OpenSSL 1.0.1e-fips 11 Feb 2013

     可见安装新版以后,并没有影响系统默认安装的openssl

    2、查看新版openssl安装的目录文件

    1. [root@localhost x86_64]# rpm -qpl openssl-1.1.1-25.el6.x86_64.rpm |more
    2. /usr/bin/openssl-1.1.1
    3. /usr/lib64/libcrypto.so.1.1
    4. /usr/lib64/libssl.so.1.1
    5. /usr/openssl-1.1.1
    6. /usr/openssl-1.1.1/bin
    7. /usr/openssl-1.1.1/bin/c_rehash
    8. /usr/openssl-1.1.1/bin/openssl
    9. /usr/openssl-1.1.1/certs
    10. /usr/openssl-1.1.1/ct_log_list.cnf
    11. /usr/openssl-1.1.1/ct_log_list.cnf.dist
    12. /usr/openssl-1.1.1/include
    13. /usr/openssl-1.1.1/include/openssl
    14. /usr/openssl-1.1.1/include/openssl/aes.h
    15. /usr/openssl-1.1.1/include/openssl/asn1.h
    16. ...
    17. /usr/openssl-1.1.1/share/man/man7/passphrase-encoding.7
    18. /usr/openssl-1.1.1/share/man/man7/scrypt.7
    19. /usr/openssl-1.1.1/share/man/man7/ssl.7
    20. /usr/openssl-1.1.1/share/man/man7/x509.7

    3、执行新版本查看信息,发现问题

     可见是链接文件指向错误,手工修正

    1. [root@localhost x86_64]# rm /usr/bin/openssl-1.1.1
    2. rm:是否删除符号链接 "/usr/bin/openssl-1.1.1"?y
    3. [root@localhost x86_64]# ll /usr/openssl-1.1.1/bin/openssl
    4. -rwxr-xr-x. 1 root root 646152 9月 6 21:28 /usr/openssl-1.1.1/bin/openssl
    5. [root@localhost x86_64]# /usr/openssl-1.1.1/bin/openssl version
    6. OpenSSL 1.1.1 11 Sep 2018
    7. [root@localhost x86_64]# cp /usr/openssl-1.1.1/bin/openssl /usr/openssl-1.1.1/bin/openssl-1.1.1
    8. [root@localhost x86_64]# ln -sf /usr/openssl-1.1.1/bin/openssl-1.1.1 /usr/bin/openssl-1.1.1
    9. [root@localhost x86_64]# openssl-1.1.1 version
    10. OpenSSL 1.1.1 11 Sep 2018
    11. [root@localhost x86_64]# openssl version
    12. OpenSSL 1.0.1e-fips 11 Feb 201

    经排查,出现软链接错误的原因是因为编译生成的openssl命令文件不带1.1.1,将spec文件中的以下行:

    ln -sf %{openssldir}/bin/openssl-1.1.1 %{buildroot}%{_bindir}

    之前添加一行,如下:

    cp %{openssldir}/bin/openssl %{openssldir}/bin/openssl-1.1.1

    ln -sf %{openssldir}/bin/openssl-1.1.1 %{buildroot}%{_bindir} 

     再次编译即可。

    至此,CentOS6.10系统的openssl 1.0.1e和1.1.1多版本运行环境建立完成,运行openssl即是系统原生老版,运行openssl-1.1.1则是新安装的1.1.1版本。

  • 相关阅读:
    Visual Studio v1.67改进了深色主题
    2022年数维杯国际大学生数学建模挑战赛开赛公告
    java计算机毕业设计基于ssm的志愿者活动招募网站
    物联网开发笔记(2)- 使用Wokwi仿真树莓派Pico点亮LED灯代码分析
    【java刷算法】牛客—剑指offer4DFS与BFS两种思路的碰撞,一起来练习吧
    谷歌浏览器占CPU非常高的解决办法
    正气歌摘抄
    Intel汇编-函数使用全局变量传递数据
    centos编译安装opencv,生成opencv-2413.jar
    Shopify独立站的营销手段,助力转化率
  • 原文地址:https://blog.csdn.net/forestqq/article/details/132707282