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
を利用してイメージ作成しておくと便利です。
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