编译安装注意事项
知识点一:openssl的重要性
openssl
在 Linux 系统中扮演着至关重要的角色,尤其是在网络安全方面。许多服务和应用程序都依赖于 openssl
提供的加密功能,包括但不限于 web 服务器(如 Apache 和 Nginx)、数据库服务器(如 MySQL 和 PostgreSQL)、邮件服务器、VPN等。
以下列表程序(包括但不限于这些),会在安装程序时,依赖Openssl,应该都会带各种版本的openssl,请注意识别:
Nginx:
Nginx 用于提供 HTTPS 服务时,会依赖 OpenSSL 来处理 SSL/TLS 加密。
OpenSSH:
OpenSSH 用于提供安全的远程登录服务时,会依赖 OpenSSL 来处理 SSH 加密。
Apache HTTP Server:
Apache HTTP Server 用于提供 HTTPS 服务时,也会依赖 OpenSSL 来处理 SSL/TLS 加密。
MySQL/MariaDB:
MySQL 和 MariaDB 数据库管理系统可以使用 SSL 加密连接客户端与服务器之间的通信,这通常依赖于 OpenSSL。
PostgreSQL:
PostgreSQL 数据库管理系统同样可以使用 SSL 加密连接客户端与服务器之间的通信,这通常依赖于 OpenSSL。
Dovecot:
Dovecot 邮件服务器用于提供 IMAP/POP3 加密服务时,会依赖 OpenSSL。
Exim:
Exim 邮件传输代理 (MTA) 用于发送和接收邮件时,如果启用了 TLS/SSL 加密,则会依赖 OpenSSL。
OpenVPN:
OpenVPN 用于提供基于 SSL 的虚拟专用网络 (VPN) 服务时,会依赖 OpenSSL。
LibreSSL:
LibreSSL 是 OpenSSL 的一个替代品,某些服务和应用程序可能使用 LibreSSL 替代 OpenSSL。
GnuTLS:
GnuTLS 是一个替代 OpenSSL 的库,用于处理 TLS/SSL 加密,某些服务和应用程序可能使用 GnuTLS。
你如果想更新编译新的openssl版本,老的这个1.0.2版本是不能卸载的,因为生产中可能还有其他的服务依赖,比如默认安装的ssh服务。一旦你删除了旧版本,可能就会引起其他程序的异常。因为你必须确保所有依赖 OpenSSL 的应用都正确地指向了新版本的库。
所以,我们应该遵循的第一个原则就是:让新的openssl版本和老的openssl版本共存。
知识点二:源代码编译安装路径
从源代码编译安装大多数软件时,如果不指定 --prefix
参数,这些软件通常会被安装到 /usr/local
目录下。具体来说:
- 库文件 会被安装到
/usr/local/lib
。 - 头文件 会被安装到
/usr/local/include
。 - 可执行文件 会被安装到
/usr/local/bin
。
知识点三:yum安装路径
系统自带的软件 或使用 yum
或者通过其他包管理工具安装软件时,这些软件通常会被安装到 /usr
目录下。具体来说:
- 库文件 会被安装到
/usr/lib64
或/usr/lib
(32 位系统)。 - 头文件 会被安装到
/usr/include
。 - 可执行文件 会被安装到
/usr/bin
或/usr/sbin
。- /usr/bin: 这里存放的是普通用户经常使用的命令,例如文本编辑器(如
vi
)、文件处理工具(如ls
和cp
)等。 - /usr/sbin: 这里存放的是系统管理员权限(如root)或需要特殊权限(需要
sudo
执行的命令)才能运行的命令,例如网络配置工具(如ifconfig
)或其他系统管理工具。
- /usr/bin: 这里存放的是普通用户经常使用的命令,例如文本编辑器(如
对于 OpenSSL 来说,它的可执行文件 openssl
通常会被安装到 /usr/bin
,因为它是一个用户级的命令,不需要特殊的权限来运行。
以openssl 来举例,CentOS 7.9 系统默认安装的 OpenSSL 版本是 1.0.2k-fips
[root@CentOS7 ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
通过命令来查看这个系统自带的版本到底放在哪里
[root@CentOS7 lib64]# which openssl
/usr/bin/openssl
[root@CentOS7 lib64]# whereis openssl
openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz
-
which openssl
:- 输出结果
/usr/bin/openssl
表示openssl
命令的可执行文件位于/usr/bin
目录下。这是系统默认查找命令的位置之一。
- 输出结果
-
whereis openssl
:- 输出结果表明 OpenSSL 的各个组成部分在系统中的位置:
/usr/bin/openssl
: 这是openssl
命令的可执行文件所在位置。/usr/lib64/openssl
: 这个目录通常包含 OpenSSL 的库文件。您之前看到的libcrypto.so
和libssl.so
等文件就位于这里。/usr/include/openssl
: 这个目录包含 OpenSSL 的头文件,用于编译时链接 OpenSSL 的功能。/usr/share/man/man1/openssl.1ssl.gz
: 这是一个压缩的手册页文件,提供了关于openssl
命令的帮助文档。
- 输出结果表明 OpenSSL 的各个组成部分在系统中的位置:
这些信息表明您的系统默认的 OpenSSL 安装在 /usr
目录下,并且相关的库文件、头文件和可执行文件都位于标准的位置上。
知识点四:环境变量冲突
如果要实现共存:你可能面临的问题:
-
$PATH
包含/usr/local/bin
:$PATH
是一个环境变量,用于告诉系统在查找可执行文件时应搜索哪些目录。通常在/etc/profile
文件中添加$PATH
的值。- 如果
/usr/local/bin
被包含在$PATH
中,那么当您输入一个命令时,系统会首先在这个目录中查找该命令对应的可执行文件。 - 这意味着如果您的系统中有多个版本的相同命令,系统可能会优先使用
/usr/local/bin
中的命令,而不是/usr/bin
或其他位置的命令。
-
LD_LIBRARY_PATH
包含/usr/local/lib
:LD_LIBRARY_PATH
是一个环境变量,用于告诉系统在启动程序时除了默认的库文件搜索路径之外还应查找哪些路径上的库文件。通常在/etc/environment
文件中添加LD_LIBRARY_PATH
的值 或 在用户的.bashrc
或.bash_profile
文件中设置LD_LIBRARY_PATH
- 如果
/usr/local/lib
被包含在LD_LIBRARY_PATH
中,那么当您启动一个程序时,系统会在这个目录中查找所需的库文件。 - 这意味着如果您的系统中有多个版本的库文件,系统可能会优先加载
/usr/local/lib
中的库文件,而不是/usr/lib64
或其他位置的库文件。
总结:为了让旧版本和新版本的 OpenSSL 共存,我们应该采取以下策略来实现。
1. 使用独立的安装目录
- 安装新版本的 OpenSSL 到一个特定的目录,例如
/opt/openssl-new
。 - 确保该目录下的
bin
和lib
子目录包含新版本的可执行文件和库文件。
2. 修改应用程序的路径
- 对于需要使用新版本 OpenSSL 的应用程序,修改它们的环境变量或配置文件,使其指向新的 OpenSSL 安装位置。
- 您可以通过设置
LD_LIBRARY_PATH
或者在应用程序的启动脚本中加入相应的路径来实现这一点。
3. 使用符号链接
- 创建符号链接从默认的 OpenSSL 目录到新版本的目录。
- 例如,创建
/usr/local/bin/openssl-new
指向/opt/openssl-new/bin/openssl
。
4. 编译时指定 OpenSSL 路径
- 如果您正在编译一个新的应用程序,确保在编译时使用正确的 OpenSSL 版本路径。
- 使用
--with-openssl
或--with-openssl-dir
参数指定 OpenSSL 的安装路径。
下载最新版本openssl-3.3.1 官网地址:Downloads | Library (openssl-library.org)
传输到/opt目录下,解压
[root@CentOS7 opt]# ls
openssl-3.3.1.tar.gz
[root@CentOS7 opt]# tar -xzf openssl-3.3.1.tar.gz
[root@CentOS7 opt]# ls
openssl-3.3.1 openssl-3.3.1.tar.gz
openssl version 命令查看默认版本
[root@CentOS7 opt]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@CentOS7 opt]#
安装依赖项
yum install -y make gcc autoconf automake libtool pkg-config zlib-devel perl bison flex openssl-devel perl-IPC-Cmd Perl-CPAN
必要的依赖项
-
基础构建工具:
make
:用于构建 OpenSSL。gcc
:C 和 C++ 编译器。autoconf
:用于生成配置脚本。automake
:用于生成 Makefile 文件。
-
库和工具:
libtool
:用于创建跨平台的库。pkg-config
:用于管理库的编译和链接选项。zlib
:用于数据压缩。
-
开发包:
perl
:用于某些脚本。bison
和flex
:用于解析和词法分析。openssl-devel
:用于提供开发头文件。
如果有问题,可以试这个备用的:
yum install -y gcc gcc-c++ zlib-devel libtool autoconf automake perl perl-IPC-Cmd perl-Data-Dumper perl-CPAN
官网下载最新版本Nginx-1.26.2
安装依赖项
yum install -y make gcc autoconf automake libtool pam-devel openssl-devel zlib-devel ncurses-devel perl libedit-devel libssh2-devel pam libxcrypt-compat
基础构建工具
make
gcc
autoconf
automake
libtool
库和工具
pam-devel
:用于 PAM (Pluggable Authentication Modules) 开发文件。openssl-devel
:用于 OpenSSL 开发文件。zlib-devel
:用于 zlib 开发文件。ncurses-devel
:用于 ncurses 开发文件。perl
:用于某些脚本。libedit-devel
:用于编辑支持。libssh2-devel
:用于 SSHv2 支持。pam
:用于认证模块。libxcrypt-compat
:用于密码加密支持。
- 未完待续
标签:bin,Nginx1.26,openssl,OpenSSL,编译,usr,devel,安装 From: https://www.cnblogs.com/Magiclala/p/18374540