nwnusun

   ::  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

预编译安装包

在Linux服务器上,经常会安装Python、Redis、Nginx等服务,不管离线、在线都需要编译、编译之前还需要安装一些依赖的环境,比如,openssl、gcc、g++等,但是make编译的时间过于长,严重影响心情,希望制作一个符合当前系统的预先编译好的包,可以拿来即用的。

编译Python3.9.8

在线环境安装所需依赖

yum install -y ncurses-devel gdbm-devel xz-devel sqlite-devel tk-devel uuid-devel readline-devel bzip2-devel libffi-devel

下载安装包到/usr/local/src

cd /usr/local/src
mkdir python
cd python
wget https://www.python.org/ftp/python/3.9.8/Python-3.9.8.tgz
tar xzf Python-3.9.8.tgz 
cd Python-3.9.8

编译安装到/usr/local/python398

./configure --prefix=/usr/local/python398
make
make install

查看版本

python version

打包编译好的包

cd /usr/local
tar  -zcvf  python3.9.8.tar.gz  python398

复制到别的环境测试,并解压

tar  -zxvf  python3.9.8.tar.gz
cd  python3.9.8

查看结构

[root@centos python398]# ll
total 0
drwxr-xr-x. 2 root root 196 Aug 24 16:43 bin
drwxr-xr-x. 3 root root  23 Aug 24 16:06 include
drwxr-xr-x. 4 root root  62 Aug 24 16:06 lib
drwxr-xr-x. 3 root root  17 Aug 24 16:06 share
[root@centos python398]#

进入bin目录,修改以下文件

  • 2to3-3.9
  • idle3.9
  • pip3
  • pip3.9
  • pydoc3.9
#!/usr/local/python398/bin/python3.9  # 替换成自己的解压目录
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

设置软连接

ln -s /usr/local/python398/bin/python3.9  /usr/bin/python3.9
ln -s /usr/local/python398/bin/pip3.9  /usr/bin/pip3.9

预编译openssl

安装依赖

yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel

下载安装/usr/local/src

cd /usr/local/src
mkdir openssl
cd openssl
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate
tar xzf openssl-1.1.1q.tar.gz 
cd openssl-1.1.1q

编译安装

./config --prefix=/usr/local/openssl1.1.1q
make
make install
echo "/usr/local/lib64/" >> /etc/ld.so.conf
ldconfig
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/bin/openssl /usr/bin/openssl

检查openssl版本

openssl version

同样压缩好编译后的安装包,并同步到其他机器,测试执行openssl version检查版本

./openssl: error while loading shared libraries: libssl.so.1.1: cannot open
# 这个文件在系统中没找到,但搜索发现在:/usr/local/openssl1.1.1q/lib/libssl.so.1.1
意思是openssl自带了

执行以下命令,注意是自己的路径

export LD_LIBRARY_PATH=//usr/local/openssl1.1.1q/lib:$LD_LIBRARY_PATH

运行时动态库的搜索路径的先后顺序

  • 编译目标代码时指定的动态库搜索路径;
  • 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
  • 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
  • 默认的动态库搜索路径/lib和/usr/lib;

预编译Redis

 wget http://download.redis.io/releases/redis-6.2.12.tar.gz
 tar -zxvf redis-6.2.12.tar.gz
 make 
 make install PREFIX=/usr/local/redis6.2

注意
遇到以下错误则执行make MALLOC=libc

cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/root/test/redis-6.2.12/src'
make: *** [all] Error 2

完成后,/usr/local/redis6.2下面会生成bin

将解压后的配置文件复制跟bin同目录

root@sun75 redis6.2]# pwd
/usr/local/redis6.2
[root@sun75 redis6.2]# ll
total 92
drwxr-xr-x. 2 root root   150 Aug 24 17:30 bin
-rw-r--r--. 1 root root 93843 Aug 24 17:36 redis.conf
[root@sun75 redis6.2]#

编译包已经算是完整,修改配置文件测试

daemonize yes # 后台启动
bind 0.0.0.0 # 开启远程访问
requirepass 123456 # 设置密码

打包,在别的环境测试。

预编译nginx

类同

cd /usr/soft
mkdir nginx
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
./configure --prefix=/usr/soft/nginx
make
make install

打包即可

posted on 2023-09-07 16:21  匿名者nwnu  阅读(36)  评论(0编辑  收藏  举报