軽量DBのSQLite3の最新バージョン3.35.0(2021/3/12時点の最新バージョン)をソースからインストールしていきます。環境はec2(Amazon Linux2)とCentOS7で確認しています。
※ 本ページはプロモーションが含まれています。
ec2(Amazon Linux 2)上でDBのSQLite3を使おうとしたら、デフォルトで入っていたSQLite3のバージョンが古かったので、どうせならと思い最新バージョンのSQLite3をインストールしました。ここでは、その時にやった事を書いていきます。
環境やデフォルトで入っていたSQLite3のバージョンは以下の通りです。
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ #デフォルトで入っていたsqlite3のバージョンは3.7.17でかなり古い
$ sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b356******d56ebd7801*****6f1497668
$ sqlite3
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
$ which sqlite3
/usr/bin/sqlite3
これ以降の内容は、ec2(Amazon Linux2)上でやった事を書いていきますが、CentOS7上でも同じようにやって最新バージョンのSQLite3をインストールする事ができました。
まずは、SQLite3のバージョン3.35(2021/3/12時点の最新バージョン)を、公式サイトからwgetでダウンロードします。
$ wget https://www.sqlite.org/2021/sqlite-autoconf-3350000.tar.gz
--2021-03-16 22:00:58-- https://www.sqlite.org/2021/sqlite-autoconf-3350000.tar.gz
www.sqlite.org (www.sqlite.org) をDNSに問いあわせています... 45.33.6.223, 2600:3c00::f03c:91ff:fe96:b959
www.sqlite.org (www.sqlite.org)|45.33.6.223|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2955394 (2.8M) [application/x-gzip]
`sqlite-autoconf-3350000.tar.gz' に保存中
100%[================================================================================================================>] 2,955,394 2.44MB/s 時間 1.2s
2021-03-16 22:00:59 (2.44 MB/s) - `sqlite-autoconf-3350000.tar.gz' へ保存完了 [2955394/2955394]
$ ls
sqlite-autoconf-3350000.tar.gz
ダウンロードできたら、tarでダウンロードしたアーカイブファイルを展開して、展開されたディレクトリ内に移動します。
$ tar fxvz sqlite-autoconf-3350000.tar.gz
〜
$ ls
sqlite-autoconf-3350000 sqlite-autoconf-3350000.tar.gz
$ cd sqlite-autoconf-3350000/
次に、configureを実行します(PHPからSQLiteを使う場合は、./configureコマンド実行時にCFLAGSオプションを指定する必要があるので、先にこちらに目を通してください)。
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for style of include used by make... GNU
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/home/hogeuser/test/sqlite-autoconf-3350000':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
エラーが出ましたね。「checking for gcc... no」「configure: error: no acceptable C compiler found」というエラーメッセージが出ましたので、gccが必要そうです。
ですので、gccをインストールします(すでにgccが入っている環境の場合は、やる必要はないです。)。
$ sudo yum -y install gcc
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
260 packages excluded due to repository priority protections
依存性の解決をしています
〜
インストール:
gcc.x86_64 0:7.3.1-12.amzn2
依存性関連をインストールしました:
cpp.x86_64 0:7.3.1-12.amzn2 glibc-devel.x86_64 0:2.26-41.amzn2 glibc-headers.x86_64 0:2.26-41.amzn2
kernel-headers.x86_64 0:4.14.219-164.354.amzn2 libatomic.x86_64 0:7.3.1-12.amzn2 libcilkrts.x86_64 0:7.3.1-12.amzn2
libitm.x86_64 0:7.3.1-12.amzn2 libmpc.x86_64 0:1.0.1-3.amzn2.0.2 libmpx.x86_64 0:7.3.1-12.amzn2
libquadmath.x86_64 0:7.3.1-12.amzn2 libsanitizer.x86_64 0:7.3.1-12.amzn2 mpfr.x86_64 0:3.1.1-4.amzn2.0.2
完了しました!
gccをインストールできたので、再度configureを実行します。
$ ./configure
〜
今度は問題なくできました!
次に、makeでビルドとインストールをします。
$ make
〜
$ sudo make install
〜
ビルドとインストールもできました!ここで、インストールがしっかりと反映されたかを確認するために、ec2にログインし直します。
ログインし直したら、SQLite3のバージョンなどを確認してみます。
$ sqlite3 --version
3.35.0 2021-03-12 15:10:09 acd63062e******bfe9e48866******b54ea6a496a83f10716abbaba4115500b
$ sqlite3
SQLite version 3.35.0 2021-03-12 15:10:09
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
$ which sqlite3
/usr/local/bin/sqlite3
ちゃんとバージョン3.35になっていますね。インストールしたSQLite3は/usr/local/bin/下にあります。ちなみに元から入っていた古いバージョン(3.7.17)のSQLite3も、フルパスで指定すればまだ呼び出せます。
$ /usr/bin/sqlite3
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
これはあっても特に問題はなさそうなので、古いバージョンのSQLite3はそのままにしておきます。$ sudo yum remove sqlite
〜
エラー: "systemd" を削除しようとしています、保護されています
エラー: "yum" を削除しようとしています、保護されています
また、もしも最新バージョンのSQLite3をインストールしたのにコマンドで使えない、既存のバージョンのSQLite3が呼び出されるとかだったら、環境変数のPATHを確認した方がよいかもしれません。
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hogeuser/.local/bin:/home/hogeuser/bin
$PATHを見て、インストールしたSQLite3が入っている"/usr/local/bin"が、古いSQLite3が入っている"/usr/bin"よりも先に書いてある事を確認しましょう。
最後に、問題なくインストールされた事も確認できたら、ダウンロードしたファイルや展開したディレクトリはもう用済みなので、削除しておきます (ただし、インストールしたSQLite3をアンインストールしたい場合は、必要になります)。
$ rm sqlite-autoconf-3350000.tar.gz
$ rm -r sqlite-autoconf-3350000
まー置いといても邪魔だから削除しちゃって、もしもアンインストールしたい状況になったら、またソースをダウンロードして、./configureまで実行して、アンインストールすれば良いと思います。
ちなみにアンインストールしたい場合、Makefileがあるディレクトリ内でmake uninstallコマンドを実行すればできます。
$ sudo make uninstall
( cd '/usr/local/bin' && rm -f sqlite3 )
( cd '/usr/local/include' && rm -f sqlite3.h sqlite3ext.h )
/bin/sh ./libtool --mode=uninstall rm -f '/usr/local/lib/libsqlite3.la'
libtool: uninstall: rm -f /usr/local/lib/libsqlite3.la /usr/local/lib/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0 /usr/local/lib/libsqlite3.so /usr/local/lib/libsqlite3.a
( cd '/usr/local/share/man/man1' && rm -f sqlite3.1 )
( cd '/usr/local/lib/pkgconfig' && rm -f sqlite3.pc )
以上、SQLiteをソースからインストールする方法について説明しました。これでコマンドからインスールしたSQLiteを使えるようになりますが、PHPからSQLiteを使おうとしたら問題が発生しました。
まず、コマンドでPHPのコードを実行したら、以下の警告が出ました。
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_sqlite.so (/usr/lib64/php/modules/pdo_sqlite.so: undefined symbol: sqlite3_column_table_name)) in Unknown on line 0
また、ウェブ上でphpinfo()を実行して結果を見ると、PDO driversが"no value"と表示されます(php-pdoを正しくインストールしていれば、"sqlite"と表示されるはず)。
この問題の解決方法は、SQLiteインストール時の./configureを実行する時に、以下のようにCFLAGSオプションを指定すれば解決できます。
$ CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA=1" ./configure
参考サイト
undefined symbol sqlite3_column_table_name
SQLITE_ENABLE_COLUMN_METADATA - SQLite Compile-time Options
また、SQLiteをソースからインストールした後に、PHP7からPDOを通してSQLiteを使うまでの手順については別ページで説明していますので、そちらも参考にしてみてください。
【PHP7】PDOでソースからインストールした最新バージョンのSQLite3を使う