关于升级一般软件的一些想法

常见步骤:

  1. 官网下载tar.gz安装包

  2. 解压,进入目录

  3. 编译,强烈建议带上 --prefix参数和 --enable-shared 参数

  4. make && make install (make -j 4 参数加快make速度)

  5. 修改二进制执行文件的软链接,为了之后就使用新版的软件

  6. 有时会有动态库文件报错,打不开共享文件so等类似的错误信息

    这时一般将所需的so文件拷贝到linux的动态文件库中,一般是/usr/lib64。

    lrwxrwxrwx   1 root         root       19 Jan 19 13:20 libpython2.6.so.1.0 -> libpython3.8.so.1.0
    lrwxrwxrwx   1 root         root       19 Jan 19 10:38 libpython2.7.so -> libpython2.7.so.1.0
    -rwxr-xr-x   1 root         root 1847776 Oct 14 14:46 libpython2.7.so.1.0
    -rwxr-xr-x   1 root         root 12350089 Jan 18 17:29 libpython3.8.so.1.0

    如上:libpython2.6.so.1.0 指向的就是 libpython3.8.so.1.0。可解决报错。

  7. 因此,如果出现 cannot open shared object file: No such file or directory,一般都是软链接失效的原因。需要重新建立有效的软链接。

 

python升级

一、首先,官网下载python3的所需版本。
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
想下载到那个文件夹下就先进入到那个文件夹下——cd /home/download
二、然后,解压缩文件》
tar -xvf Python-3.6.0.tgz
三、创建安装文件的路径。
mkdir /usr/local/python3
四、编译。
./configure --prefix=/usr/local/python3 --enable-shared --with-openssl=/usr/local/openssl
#需要启用动态库
#还得带上ssl模块,这里写openssl的安装路径,原来的openssl太老了,需要重新安装openssl。不然pip无法访问https的链接
五、安装。
make && make install
六、创建新版本的软连接。
1、修改旧版本
mv /usr/bin/python /usr/bin/python_bak
mv /usr/bin/pip /usr/bin/pip_bak
2、创建新的软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip   #这时pip3就可以使用了。
3、检查python的版本
python -V
python-3.6.0
软连接创建成功

上述python3安装好了之后,其实可以直接将python安装路径加入到PATH变量中,再使这个配置生效,就可以用安装目录下的二进制命令了。注意命令是python3和pip3。

需要带上 --prefix=、--enable-shared、--with-openssl= 参数,一般才能大致升级成功。

可能还需要升级openssl,因为pip使用ssl模块必选要有openssl支持。

 

openssl升级

下载安装
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g/
./config --prefix=/usr/local/openssl
make
make install

备份和替换
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
cp /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/
cp /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/

测试openssl是否可用
[root@tao-ffy-v5-dns Python-3.8.7]# openssl version
OpenSSL 1.1.1g 21 Apr 2020

glibc升级

和其它软件升级的不同之处在于libc.so.6文件比较特殊,他的库目录也直接在/lib64 里面。

所以这种需要LD_PRELOAD解决。

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz  
tar -zxvf glibc-2.14.tar.xz  
cd glibc-2.14  
mkdir build  
cd build/  
../configure --prefix=/usr/local/glibc-2.14  
make -j4  
make install  
export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH  

之后拷贝so文件
[root@jrgc130 build]``# cd /usr/local/glibc-2.14/lib
[root@jrgc130 lib]``# cp libc-2.14.so /lib64/
在/lib64中备份libc.so.6 这个软链接,创建新链接后。使用一般命令会报错:
libc.so.6: cannot open shared object file: No such file or directory
不要慌,可以用LD_PRELOAD解决,方法如下:

先删除连接 :
# cd /lib64
# LD_PRELOAD=/lib64/libc-2.14.so rm libc.so.6.old  
然后建立新连接 :
# LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so libc.so.6

LD_PRELOAD解决的原理是:linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。但是提供了一个LD_PRELOAD系统变量来改变这个顺序。设置LD_PRELOAD了后,库加载的顺序就改为 搜素路径为: LD_PRELOAD ,当前路径,再是系统lib目录

 

原文地址:https://www.cnblogs.com/fengfengyang/p/14300753.html