環境
- Distribution:Ubuntu18.04 LTS
- Linux kernel:4.15.0-51-generic
- golang:1.12.5 linux/amd64
- gcc:(Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
lxcをビルドするときに困ったこと
lxcビルド時に発生したエラーやその対処方法を記述する
makeが失敗する
make
を実行する際に失敗した原因と解決策を記述する
W: cannot generate system identifier for public text
- 原因:docbookコマンドがインストールされていない
- 対策:
sudo apt install docbook
を実行して,docbookコマンドをインストールする - 結果:makeが完了した
lxdをビルドするときに困ったこと
lxdビルド時に発生したエラーやその対処方法を記述する
make depsが失敗する
make deps
を行う際に失敗することがあるのでまとめておく.
autoreconf: not found
- 原因:autoreconfコマンドが存在しない
- 対策:
sudo apt install autoconf
を実行してインストールする - 結果:次のエラーが発生した
error: Libtool library used but 'LIBTOOL' is undefined
- 原因:LIBTOOL環境変数が設定されていない
- 対策:
sudo apt install automake libtool
でインストールする - 結果:次のエラーが発生した
configure: error: Package requirements (libuv >= 1.8.0) were not met: No package libuv found
- 原因:libuvが見つからない
- 対策:
sudo apt install libuv1-dev
でインストールする - 結果:解決した
raftのmakeができない
- 症状
./configure: line 12849: syntax error near unexpected token `UV,'
./configure: line 12849: ` PKG_CHECK_MODULES(UV, libuv >= 1.8.0, , )'
- 原因:PKG_CHECK_MODULESという関数が見つからないことが原因であると推測
- 対策:
sudo apt install pkg-config
でインストールする - 結果:解決した
makeが失敗する
make
を行う際に失敗することがあるので,症状と原因と対策を記載する
fatal error: sys/acl.h: No such file or directory
- 原因:sys/acl.h ファイルが存在しない
- 対策:
sudo apt install libacl1-dev
でインストールする - 結果:次のエラーへ
No package 'lxc' found
- 原因:lxcが見つからない
- 対策:lxcをビルドする
- 結果:ビルドが成功する
lxdを実行するときにこまったこと
lxdコマンドを実行するときに困ったことを記述する
lxd: look up error: symbol libdqlite.so.0: symbol: sqlite3_wall_replication_register: no such file or directory
- 原因:lxdはsudoをつけて実行するため,rootで実行する際動的ライブラリの参照先が異なっていることが原因だった.
- 詳細:
yota@yota-MacBookAir:~/go/src/github.com/lxc/lxd$ ldd ~/go/bin/lxd
~略~
libsqlite3.so.0 => /home/yota/go/deps/sqlite/.libs/libsqlite3.so.0 (0x00007fc0bf9f0000)
libdqlite.so.0 => /home/yota/go/deps/dqlite/.libs/libdqlite.so.0 (0x00007fc0bf7d5000)
~略~
yota@yota-MacBookAir:~/go/src/github.com/lxc/lxd$ sudo ldd ~/go/bin/lxd
~略~
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f8b89bab000)
libdqlite.so.0 => /home/yota/go/deps/dqlite/.libs/libdqlite.so.0 (0x00007f8b89990000)
~略~
- 対策:LD_LIBRARY_PATHを一般ユーザだけでなく,rootにも反映させる
- 詳細:/etc/environmentに環境変数を設定する
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LD_LIBRARY_PATH="/home/yota/go/deps/sqlite/.libs/:/home/yota/go/deps/libco/:/home/yota/go/deps/raft/.libs/:/home/yota/go/deps/dqlite/.libs/"
- 結果:lxdを実行することができた.
感想
実行にかなり手こずってしまった.しかし,バイナリの動的リンクについて詳しくなることができたので良し.