我需要 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 库的更高版本?
我发现最简单的选择是自己构建它。在 Amazon Linux 版本 2 (Karoo) 上进行了测试。
从此处下载最新的源代码以及配置脚本。目前这是:
curl https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz | tar xzf -
进入创建的目录并使用我们的系统相关选项创建Makefile:
cd ./sqlite-autoconf-3320300 && ./configure
构建二进制文件
make
安装它
sudo make install
清理
cd .. && rm -r ./sqlite-autoconf-3320300
注意:如果没有合适的 RPM 包,执行此操作远非理想。如果您通过 yum 更新 sqlite,您将覆盖您手动构建的版本。
添加@halbgut 答案,并进行一些更改:
从此处下载最新的源代码以及配置脚本。目前这是:
curl https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz | tar xzf -
进入创建的目录并使用我们的系统相关选项创建Makefile:
cd ./sqlite-autoconf-3320300 && ./configure
构建二进制文件
make
安装它
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
如果您只需要 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 文档 如果您需要的话,可以对更多选项进行很好的解释。
不要使用
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
从 https://www.sqlite.org/download.html 获取最新的 sqlite3 下载链接 并更新下面所示的 WGET bash 命令示例中给出的链接。
示例:
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