Amazon Linux 2でSQLite3のバージョンを上げるのに四苦八苦したのでメモ。
Dockerコンテナ立ち上げ
Amazon Linuxのイメージを取得してコンテナを立ち上げます。
> docker pull amazonlinux
> docker -it amazonlinux
bash-4.2#
Amazon LinuxのイメージはすでにSQLite3がインストール済みですが、バージョンが3.7.17
と少し古めです。amazon-linux-extras
にもSQLite3はありません。
Amazon Linux 2 に関するよくある質問
https://aws.amazon.com/jp/amazon-linux-2/faqs/
SQLite3を最新バージョンに上げることができないかを確認します。
bash-4.2# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
bash-4.2# yum --version
3.4.3
Installed: rpm-4.11.3-25.amzn2.0.3.x86_64 at 2019-02-07 20:40
Built : Amazon Linux at 2018-09-12 21:28
Committed: Panu Matilainen <pmatilai@redhat.com> at 2017-03-17
Installed: yum-3.4.3-158.amzn2.0.2.noarch at 2019-02-07 20:40
Built : Amazon Linux at 2018-08-21 16:27
Committed: CentOS Sources <bugs@centos.org> at 2018-04-10
yum
でSQLite3の詳細を確認しますが、バージョンは3.7.17
のみのようです。
bash-4.2# yum list | grep sqlite
sqlite.x86_64 3.7.17-8.amzn2.0.2 installed
apr-util-sqlite.x86_64 1.6.1-5.amzn2.0.2 amzn2-core
freeradius-sqlite.x86_64 3.0.13-9.amzn2 amzn2-core
golang-googlecode-sqlite-devel.x86_64 0-0.9.hg74691fb6f837.amzn2.0.2 amzn2-core
libdbi-dbd-sqlite.x86_64 0.8.3-16.amzn2.0.1 amzn2-core
sqlite.i686 3.7.17-8.amzn2.0.2 amzn2-core
sqlite-devel.x86_64 3.7.17-8.amzn2.0.2 amzn2-core
sqlite-doc.noarch 3.7.17-8.amzn2.0.2 amzn2-core
sqlite-tcl.x86_64 3.7.17-8.amzn2.0.2 amzn2-core
bash-4.2# yum info sqlite
Loaded plugins: ovl, priorities
Installed Packages
Name : sqlite
Arch : x86_64
Version : 3.7.17
Release : 8.amzn2.0.2
Size : 795 k
Repo : installed
(略)
bash-4.2# yum check-update
Loaded plugins: ovl, priorities
amazon-linux-extras.noarch 1.6.6-1.amzn2 amzn2-core
bash-4.2# find /usr/ -name sqlite3
/usr/lib64/python2.7/sqlite3
/usr/bin/sqlite3
bash-4.2# /usr/lib64/python2.7/sqlite3 --version
bash: /usr/lib64/python2.7/sqlite3: Is a directory
bash-4.2# /usr/bin/sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
試しにyum remove sqlite
してみましたが、Error: Trying to remove "yum", which is protected
となり削除できません。yum
が依存しており削除できないように保護されてるようです。
bash-4.2# yum remove sqlite
Loaded plugins: ovl, priorities
Resolving Dependencies
--> Running transaction check
(略)
--> Finished Dependency Resolution
Error: Trying to remove "yum", which is protected
もし保護がされていないとして、SQLite3を削除するとyum
が利用できなくなる罠があるみたいです。oh...
sqlite3を消すとyumが使えなくなる - maru.cc@はてな
http://marucc.hatenablog.com/entry/20080420/1208632521
centos で sqlite3 を削除すると yum が使えなくなる - 年寄りプログラマの備忘録
http://d.hatena.ne.jp/kawabes/20110921/1316577549
仕方ないので、公式から最新バージョンを取得してmake && make install
します。インストール方法は下記が参考になりました。
SQLite Installation
https://www.tutorialspoint.com/sqlite/sqlite_installation.htm
最新バージョンのファイルは下記から取得可能です。現在の最新バージョンは3.27.1
でした。(2019/02/13時点)
SQLite Download Page
https://www.sqlite.org/download.html
## ビルドするのに必要なパッケージをインストール
bash-4.2# yum install -y wget tar gzip gcc make
## ソースを取得
bash-4.2# wget https://www.sqlite.org/2019/sqlite-autoconf-3270100.tar.gz
bash-4.2# tar xvfz sqlite-autoconf-3270100.tar.gz
## ビルドしてインストール
bash-4.2# cd sqlite-autoconf-3270100
bash-4.2# ./configure --prefix=/usr/local
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)... no
(略)
configure: creating ./config.status
config.status: creating Makefile
config.status: creating sqlite3.pc
config.status: executing depfiles commands
config.status: executing libtool commands
bash-4.2# make
source='sqlite3.c' object='sqlite3.lo' libtool=yes \
DEPDIR=.deps depmode=none /bin/sh ./depcomp \
/bin/sh ./libtool --tag=CC --mode=compile gcc -DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.27.1\" -DPACKAGE_STRING=\"sqlite\ 3.27.1\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.27.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1 -DHAVE_POSIX_FALLOCATE=1 -I. -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -g -O2 -c -o sqlite3.lo sqlite3.c
(略)
libtool: link: gcc -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_DBSTAT_VTAB -g -O2 -o sqlite3 sqlite3-shell.o sqlite3-sqlite3.o -lm -ldl -lpthread
bash-4.2# make install
make[1]: Entering directory `/sqlite-autoconf-3270100'
/usr/bin/mkdir -p '/usr/local/lib'
(略)
/usr/bin/mkdir -p '/usr/local/include'
/usr/bin/install -c -m 644 sqlite3.h sqlite3ext.h '/usr/local/include'
/usr/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 sqlite3.1 '/usr/local/share/man/man1'
/usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
/usr/bin/install -c -m 644 sqlite3.pc '/usr/local/lib/pkgconfig'
make[1]: Leaving directory `/sqlite-autoconf-3270100'
インストールできたか確認します。
bash-4.2# find /usr/ -name sqlite3
/usr/local/bin/sqlite3
/usr/lib64/python2.7/sqlite3
/usr/bin/sqlite3
bash-4.2# /usr/local/bin/sqlite3 --version
3.27.1 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
bash-4.2# /usr/lib64/python2.7/sqlite3 --version
bash: /usr/lib64/python2.7/sqlite3: Is a directory
bash-4.2# /usr/bin/sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
bash-4.2# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
/usr/local/bin/sqlite3
にインストールされました。このままだと、元からインストールされていた方をみにいってしまうので、シンボリックリンクを貼ります。yum remove
できないし、しゃーない。
bash-4.2# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
bash-4.2# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
bash-4.2# sqlite3 --version
3.27.1 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
bash-4.2# yum update
Loaded plugins: ovl, priorities
amzn2-core | 2.4 kB 00:00:00
No packages marked for update
yum
も動くし、まあいけるでしょう。
Dockerfile
でインストールする
コンテナ立ち上げるたびにインストールするのは手間なので、Dockerfile
を利用してイメージ作成しておくと便利です。
FROM amazonlinux:latest
RUN yum install -y wget tar gzip gcc make && \
wget https://www.sqlite.org/2019/sqlite-autoconf-3270100.tar.gz && \
tar xvfz sqlite-autoconf-3270100.tar.gz && \
cd sqlite-autoconf-3270100 && \
./configure --prefix=/usr/local && \
make && \
make install && \
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old && \
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
まとめ
yum
でアップデートできたら簡単で良かったのですが、無事に最新バージョンに上げることができたので、良しとします。
参考
Amazon Linux 2 に関するよくある質問
https://aws.amazon.com/jp/amazon-linux-2/faqs/
sqlite3を消すとyumが使えなくなる - maru.cc@はてな
http://marucc.hatenablog.com/entry/20080420/1208632521
centos で sqlite3 を削除すると yum が使えなくなる - 年寄りプログラマの備忘録
http://d.hatena.ne.jp/kawabes/20110921/1316577549
SQLite Installation
https://www.tutorialspoint.com/sqlite/sqlite_installation.htm
SQLite Download Page
https://www.sqlite.org/download.html