21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

Amazon Linux 2でSQLite3を最新バージョンにする

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
21
Help us understand the problem. What are the problem?