(Amazon Linux2(ec2),CentOS7)SQLite3の最新バージョンをインストールする

軽量DBのSQLite3の最新バージョン3.35.0(2021/3/12時点の最新バージョン)をソースからインストールしていきます。環境はec2(Amazon Linux2)とCentOS7で確認しています。

※ 本ページはプロモーションが含まれています。

目的と環境

最終更新日:2021/4/19

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.0のソースをダウンロードして、ビルド・インストールする

まずは、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
〜
今度は問題なくできました!

(広告)アマゾンでSQL・DB(データベース)関連の本(Kindle)を探す!

次に、makeでビルドとインストールをします。

$ make
〜

$ sudo make install
〜
ビルドとインストールもできました!
これで、SQLite3の最新バージョンのインストール作業は完了です。

ここで、インストールがしっかりと反映されたかを確認するために、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はそのままにしておきます。
というより、yum removeでアンインストールしようとしても、エラーでできませんでした。
$ 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 )

ソースからインストールしたSQLite3をPHPで使う場合

以上、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を使う