Ubuntu 20.04下source命令加载环境变量失败,openssl重装后遇依赖问题求助
看起来你现在碰到了两个关联的问题:source /etc/environment报错找不到路径,还有libssl.so.3缺失的依赖问题,我来一步步帮你排查解决:
一、先解决source /etc/environment的报错问题
你看到的bash: :/usr/local/ssl/bin: No such file or directory错误,大概率是/etc/environment里的PATH变量格式写错了,或者/usr/local/ssl/bin这个目录根本不存在。
检查
/etc/environment的内容
运行以下命令查看文件内容:cat /etc/environment重点看
PATH这一行,如果是类似PATH=":/usr/local/ssl/bin:$PATH"这种开头带冒号的写法,就会导致系统尝试解析一个空路径,进而报错。正确的写法应该是PATH="/usr/local/ssl/bin:$PATH"(用冒号分隔路径,但开头不能是空的)。确认
/usr/local/ssl/bin是否存在
运行命令检查目录:ls -ld /usr/local/ssl/bin如果返回
No such file or directory,说明你安装的OpenSSL并没有被放到这个路径下——要么是安装过程出错了,要么是编译时指定了其他--prefix路径。这种情况下,你需要先把/etc/environment里错误的路径删掉,避免每次source都报错。
二、解决libssl.so.3: cannot open shared object file的问题
Ubuntu 20.04默认自带的是OpenSSL 1.1.1版本,而libssl.so.3是OpenSSL 3.x系列的库文件,出现这个错误说明你安装了OpenSSL 3.x,但系统找不到它的库文件。
确认OpenSSL 3.x的库文件位置
如果你是源码编译安装的OpenSSL,默认库文件会在/usr/local/ssl/lib或/usr/local/ssl/lib64目录下,运行以下命令检查:find /usr/local/ssl -name "libssl.so.3"如果能找到这个文件,说明安装成功了,只是系统库缓存没更新;如果找不到,说明编译安装过程出问题了,需要重新编译。
如果库文件存在,更新系统库缓存
- 先创建一个库配置文件:
sudo nano /etc/ld.so.conf.d/openssl-3.conf - 在文件里添加一行库文件所在的路径(比如找到的是
/usr/local/ssl/lib就写这个路径),保存退出。 - 然后更新系统库缓存:
sudo ldconfig
之后再运行依赖
libssl.so.3的程序,应该就能找到库文件了。- 先创建一个库配置文件:
如果库文件不存在,重新编译安装OpenSSL 3.x
按照正确的步骤重新编译(记得先清理之前失败的安装):# 先安装编译依赖 sudo apt update && sudo apt install build-essential zlib1g-dev # 下载并解压OpenSSL 3.x源码(以3.0.12版本为例) wget https://www.openssl.org/source/openssl-3.0.12.tar.gz tar -xf openssl-3.0.12.tar.gz cd openssl-3.0.12 # 配置编译参数,指定安装路径并生成共享库 ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib # 编译并安装 make -j$(nproc) sudo make install安装完成后,再按上面的步骤更新库缓存,同时把
/usr/local/ssl/bin加入到PATH里(确保目录存在的前提下)。
关于sudo source的问题
source是Bash的内置命令,而sudo默认只会查找系统的外部命令,所以直接sudo source会提示找不到命令。你用sudo -s进入root shell后再source的做法是对的,只是之前因为/etc/environment里的错误路径才会报错,等修复了路径问题后就能正常执行了。
备注:内容来源于stack exchange,提问作者user1716727

