尝试在 Amazon EC2 上升级 SQLite

问题描述 投票:0回答:5

我需要 SQLite 最低版本 3.8 才能支持 Amazon EC2 上的 MediaWiki 安装。 Amazon Linux 基于 CentOS,yum 存储库中可用的最新版本是 SQLite 3.7.17。

sqlite.org 提供的下载不包括 64 位 Linux。有一个 GitHub 存储库,它有一个预构建的 64 位版本,但它只是命令行版本。我把它放在/usr/bin:

$ which sqlite3
/usr/bin/sqlite3
$ sqlite3 --version
sqlite3: /lib64/libtinfo.so.5: no version information available (required by sqlite3)
3.26.0 2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9

但 MediaWiki 仍然抱怨我安装了 SQLite 3.7.17。当我测试它时,我得到:

$ cat x.php

<?php
print_r(SQLite3::version());
?>

运行它:

$ php7 x.php

Array
(
    [versionString] => 3.7.17
    [versionNumber] => 3007017
)

我猜这是因为这些库:

$ sudo find / -name "libsqlite*"
/usr/lib64/libsqlite3.so.0
/usr/lib64/libsqlite3.so.0.8.6

如何下载/重建或以其他方式安装这些 SQLite 库的更高版本?

php sqlite mediawiki
5个回答
12
投票

我发现最简单的选择是自己构建它。在 Amazon Linux 版本 2 (Karoo) 上进行了测试。

  1. 此处下载最新的源代码以及配置脚本。目前这是:

    curl https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz | tar xzf -

  2. 进入创建的目录并使用我们的系统相关选项创建Makefile:

    cd ./sqlite-autoconf-3320300 && ./configure

  3. 构建二进制文件

    make

  4. 安装它

    sudo make install

  5. 清理

    cd .. && rm -r ./sqlite-autoconf-3320300

注意:如果没有合适的 RPM 包,执行此操作远非理想。如果您通过 yum 更新 sqlite,您将覆盖您手动构建的版本。


5
投票

添加@halbgut 答案,并进行一些更改:

  1. 此处下载最新的源代码以及配置脚本。目前这是:

    curl https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz | tar xzf -

  2. 进入创建的目录并使用我们的系统相关选项创建Makefile:

    cd ./sqlite-autoconf-3320300 && ./configure

  3. 构建二进制文件

    make

  4. 安装它

    sudo make install

现在,您已经创建了 sqlite3 文件。您需要在找到 sqlite3 文件的所有地方替换它们。

要找到所有这些地方 - 运行以下命令:

whereis sqlite3
sqlite3: /usr/bin/sqlite3 /usr/local/bin/sqlite3 /usr/include/sqlite3.h /opt/c9/bin/sqlite3 /usr/share/man/man1/sqlite3.1.gz

现在在 sqlite 源文件夹

./sqlite-autoconf-3320300
中,找到
sqlite3
sqlite3.h
文件并替换为以下 cp 命令

sudo cp sqlite-autoconf-3320300/sqlite3 /usr/local/bin/sqlite3
sudo cp sqlite-autoconf-3320300/sqlite3 /usr/local/bin/sqlite3
sudo cp sqlite-autoconf-3320300/sqlite3 /opt/c9/bin/sqlite3 {I am using c9, hence this file, figure out what file is in the opt/ dir)
sudo cp sqlite-autoconf-3320300/sqlite3.h /usr/include/sqlite3.h

完成后,您将升级 env 和 python-env。现在您只需定义它的路径即可。为此,请使用 usr 中的 local/lib。

export LD_LIBRARY_PATH="/usr/local/lib"

现在你应该拥有这个了:

$ python -c "import sqlite3; print(sqlite3.sqlite_version)"
3.23.3
$ sqlite3 --version
3.32.3

0
投票

如果您只需要 sqlite3 二进制文件,SQLite 合并 也可以在 Amazon Linux 2 上完美运行。对于 SQLite 33.9.04(或来自 SQLite 下载部分的其他版本):

wget "https://www.sqlite.org/2022/sqlite-amalgamation-3390400.zip"
unzip "sqlite-amalgamation-3390400.zip"
cd "sqlite-amalgamation-3390400"
gcc shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3

然后像使用从源代码编译的任何其他软件一样使用它:

ln -n ./sqlite3 ${wherever}/sqlite3
export PATH="${wherever}:$PATH"

SQLite 文档 如果您需要的话,可以对更多选项进行很好的解释。


0
投票

不要使用

make install
覆盖系统
/usr/bin/sqlite3
,并且将被 yum 更新覆盖,而是使用
/usr/local/bin
,对于大多数人来说,它会比
PATH
更靠上
/usr/bin
(如果不是您的情况,请使用其他目录并在以下步骤中使用它)。此外,这与动态库的
/usr/local/lib64
很好地结合在一起。

# SQLite3 Upgrade steps
## Build
curl https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz | tar xzf -
cd ./sqlite-autoconf-3460100 && ./configure
make

## Install
cp -rfp sqlite3 /usr/local/bin/
cp -rfp .libs/libsqlite3.so* /usr/local/lib64
echo "/usr/local/lib64" | sudo tee /etc/ld.so.conf.d/local-lib64.conf
sudo ldconfig

## Verify
hash -r
sqlite3 -version
# > 3.46.1 2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33 (64-bit)
ldconfig -p | grep sqlite
# >    libsqlite3.so.0 (libc6,x86-64) => /usr/local/lib64/libsqlite3.so.0
# >    libsqlite3.so.0 (libc6,x86-64) => /lib64/libsqlite3.so.0
# >    libsqlite3.so (libc6,x86-64) => /usr/local/lib64/libsqlite3.so
# >    libsqlite3.so (libc6,x86-64) => /lib64/libsqlite3.so
python3 -c 'import sqlite3; print(sqlite3.sqlite_version)'
# > 3.46.1

-1
投票

https://www.sqlite.org/download.html 获取最新的 sqlite3 下载链接 并更新下面所示的 WGET bash 命令示例中给出的链接。

enter image description here

示例:

wget https://www.sqlite.org/2022/sqlite-tools-linux-x86-3400000.zip
unzip sqlite-tools*.zip
cd sqlite-tools* 
sudo cp sql* /usr/local/bin/  # Usually this directory is empty, so no need to worry about overwriting files 
cd ~
sudo yum update -y
sudo amazon-linux-extras install epel -y 
sudo yum install glibc.i686 -y
# Fix your PATH variable to pick your latest binary files
# Also make sure to execute this command `hash -d sqlite3`
# if required.
hash -d sqlite3   # OPTIONAL STEP
hash -p /usr/local/bin/sqlite3 sqlite3 # OPTIONAL STEP
sqlite3 --version 
© www.soinside.com 2019 - 2024. All rights reserved.