OSの入れ替えはなるべくやりたくないので、ギリギリまで使い続ける。
zestiyでもdiscoでも nbdkitはオフィシャルのパッケージがあるのに、bionicだけは無いのだ。
そのため、nbdkitを手っ取り早く、簡単に使いたいなら、今ならbionic(18.04)ではなく、focal(20.04)を使うのが良い。
私は、12.04のサポート終了後、1年ぐらい16.04を使ったが、すぐに18.04に移った。
Precise(12.04)のころも nbdkitのオフィシャルパッケージが無く、ソースを入手して、ビルドして使っていた。 そのためnbdkitは自分でビルドすると、私は自然に考えていたので、18.04に移行した後もすぐに自分でビルドした。
(うっかりこのBudgieでも、最初は自分でビルドしてしまっていた)
もう一度いうが、nbdkitを簡単に使いたいなら、自分でbionic(18.04)でビルドせずに、focal(20.04)に移行するのがいい。
focalもだいぶ安定してきているだろうから。
bionicを使い続けなければならない人もいるだろうし、私のような馬鹿野郎も少なからずいるだろう。
今年の3月に、M.2 SSDに移行&インストールし直したこのPC用にもビルドし直したので、ついでにメモを書いておく。
最後にビルドしたのはもう1ヶ月以上前なので細かいことは忘れている。
何か足りないものもあるかもしれない。面倒なことになるかもしれない。それが嫌ならfocalに移行せよ。
まずは、ビルドに必要なものをインストールする。
gitやbuild-essential等の最低限のツール類は入っているものとする。
いきなりビルドに必要なものと言われても、さっぱりわからない。
後でgit cloneするが、その中のreadmeを読んでも必要なものの雰囲気ぐらいしか解らない。
そもそもnbdはどっちかっていうとRedHat系が中心で、Debian系ではない。そのためDebian系のパッケージで何を用意すれば良いのかがよくわからないのだ。
しかし、今ならお手本がある。focalのBuild-Dependsを見れば良いのだ。
ソースパッケージの一部である.dscファイルを入手して、その中の "Build-Depends:"にかかれているパッケージをinstallすればいい。
実際には、bionicには存在しないものなども含まれていたりして調整も必要だが、大変参考になる。
まずは、.dscファイルをダウンロードしておこう。
wget http://archive.ubuntu.com/ubuntu/pool/universe/n/nbdkit/nbdkit_1.16.2-1ubuntu3.dsc以下のようにすると、Build-Dependsのパッケージがわかる。
$ cat nbdkit_1.16.2-1ubuntu3.dsc | grep '^Build-Depends:' | sed -e 's/^Build-Depends: \+//g' | sed -e 's/, \+/\n/g' debhelper (>= 12) dh-python perl pkg-config bash-completion genisoimage comerr-dev libcurl4-gnutls-dev | libcurl-dev libext2fs-dev libgnutls28-dev (>= 3.3) gnutls-bin libguestfs-dev (>= 1:1.36.11-3) liblzma-dev liblua5.3-dev libperl-dev python3-dev ruby ruby-dev tcl-dev libselinux1-dev libssh-dev libvirt-dev zlib1g-dev busybox <!nocheck> iproute2 <!nocheck> jq <!nocheck> socat <!nocheck> libguestfs-tools <!nocheck> libnbd-dev python3-libnbd <!nocheck>このうち、<!nocheck> はテストで必要としているものだ。
テストは重要ではあるが、解決が難しくなるかもしれないので、とりあえず除去しておく(「まずはビルド」を優先する)。
また、バージョン番号も邪魔だし、libcurlは2つ(libcurl4-gnutls-dev か libcurl-dev)のうちどちらかが入っていればいい。
さらに、libnbd-devはbionicには存在しないので、除外する。
これらを整理するには、以下のようにする。
$ cat nbdkit_1.16.2-1ubuntu3.dsc | grep '^Build-Depends:' | sed -e 's/^Build-Depends: \+//g' | sed -e 's/, \+/\n/g' | grep -v -e '<!nocheck>' -e 'libcurl-dev' | sed -e 's/ \+([^)].\+) *$//g' debhelper dh-python perl pkg-config bash-completion genisoimage comerr-dev libext2fs-dev libgnutls28-dev gnutls-bin libguestfs-dev liblzma-dev liblua5.3-dev libperl-dev python3-dev ruby ruby-dev tcl-dev libselinux1-dev libssh-dev libvirt-dev zlib1g-dev libnbd-devこれらのうちまだinstallされていないものをinstallする。
以下のようにして、installされていないパッケージ(すでにインストールされているパッケージ)を確認する。
$ dpkg -l $(cat nbdkit_1.16.2-1ubuntu3.dsc | grep '^Build-Depends:' | sed -e 's/^Build-Depends: \+//g' | sed -e 's/, \+/\n/g' | grep -v -e '<!nocheck>' -e 'libcurl-dev' -e 'libnbd-dev'| sed -e 's/ \+([^)].\+) *$//g')18.04を今まで使い続けていたのなら、すでにいろいろなパッケージが入っているだろう。
何が足りないかは人それぞれだ。
表示された内容のうち足りないものを、"sudo apt-get install"の後ろにコピペしてinstallしよう。
次にソースを入手する。
以前はtar.gzを使っていたが、gitで入手すれば更新も簡単なのでgitで入手しよう。
リポジトリはhttps://github.com/libguestfs/nbdkit にある。
git clone https://github.com/libguestfs/nbdkitcloneしたら、nbdkitに移動して作業する。
gitで入手した場合、最初に"autoreconf -i"を行わなければならない。
$ cd nbdkit $ autoreconf -i(なんか色々表示される)
次に"./configure"を実行するのだが、なんかオプションを付けた記憶がある。
config.logを見直してみたら、ウチの場合は以下のようになっていた。
$ ./configure --no-create --no-recursion"git pull"で更新して、改めて上記configure後にmakeを実行してみるとエラーになった。
make[3]: ディレクトリ '/home/shin/dvlp/nbdkit/nbdkit/plugins/ssh' に入ります /bin/bash ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.. -I../../include -I../../common/include -I../../common/utils -g -O2 -MT nbdkit_ssh_plugin_la-ssh.lo -MD -MP -MF .deps/nbdkit_ssh_plugin_la-ssh.Tpo -c -o nbdkit_ssh_plugin_la-ssh.lo `test -f 'ssh.c' || echo './'`ssh.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -I../../include -I../../common/include -I../../common/utils -g -O2 -MT nbdkit_ssh_plugin_la-ssh.lo -MD -MP -MF .deps/nbdkit_ssh_plugin_la-ssh.Tpo -c ssh.c -fPIC -DPIC -o .libs/nbdkit_ssh_plugin_la-ssh.o ssh.c: In function ‘do_verify_remote_host’: ssh.c:220:26: error: storage size of ‘state’ isn’t known enum ssh_known_hosts_e state; ^~~~~ ssh.c:240:11: warning: implicit declaration of function ‘ssh_session_is_known_server’ [-Wimplicit-function-declaration] state = ssh_session_is_known_server (h->session); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ssh.c:242:8: error: ‘SSH_KNOWN_HOSTS_OK’ undeclared (first use in this function); did you mean ‘SSH_OPTIONS_HOSTKEYS’? case SSH_KNOWN_HOSTS_OK: ^~~~~~~~~~~~~~~~~~ SSH_OPTIONS_HOSTKEYS ssh.c:242:8: note: each undeclared identifier is reported only once for each function it appears in ssh.c:246:8: error: ‘SSH_KNOWN_HOSTS_CHANGED’ undeclared (first use in this function); did you mean ‘SSH_KNOWN_HOSTS_OK’? case SSH_KNOWN_HOSTS_CHANGED: ^~~~~~~~~~~~~~~~~~~~~~~ SSH_KNOWN_HOSTS_OK ssh.c:251:8: error: ‘SSH_KNOWN_HOSTS_OTHER’ undeclared (first use in this function); did you mean ‘SSH_KNOWN_HOSTS_OK’? case SSH_KNOWN_HOSTS_OTHER: ^~~~~~~~~~~~~~~~~~~~~ SSH_KNOWN_HOSTS_OK ssh.c:257:8: error: ‘SSH_KNOWN_HOSTS_NOT_FOUND’ undeclared (first use in this function); did you mean ‘SSH_KNOWN_HOSTS_OTHER’? case SSH_KNOWN_HOSTS_NOT_FOUND: ^~~~~~~~~~~~~~~~~~~~~~~~~ SSH_KNOWN_HOSTS_OTHER ssh.c:265:8: error: ‘SSH_KNOWN_HOSTS_UNKNOWN’ undeclared (first use in this function); did you mean ‘SSH_KNOWN_HOSTS_CHANGED’? case SSH_KNOWN_HOSTS_UNKNOWN: ^~~~~~~~~~~~~~~~~~~~~~~ SSH_KNOWN_HOSTS_CHANGED ssh.c:271:8: error: ‘SSH_KNOWN_HOSTS_ERROR’ undeclared (first use in this function); did you mean ‘SSH_KNOWN_HOSTS_OTHER’? case SSH_KNOWN_HOSTS_ERROR: ^~~~~~~~~~~~~~~~~~~~~ SSH_KNOWN_HOSTS_OTHER ssh.c: In function ‘ssh_open’: ssh.c:388:32: error: ‘SSH_OPTIONS_NODELAY’ undeclared (first use in this function); did you mean ‘SSH_OPTIONS_HOSTKEYS’? ssh_options_set (h->session, SSH_OPTIONS_NODELAY, &set); ^~~~~~~~~~~~~~~~~~~ SSH_OPTIONS_HOSTKEYS Makefile:639: recipe for target 'nbdkit_ssh_plugin_la-ssh.lo' failed make[3]: *** [nbdkit_ssh_plugin_la-ssh.lo] Error 1 make[3]: ディレクトリ '/home/shin/dvlp/nbdkit/nbdkit/plugins/ssh' から出ます Makefile:520: recipe for target 'all-recursive' failed make[2]: *** [all-recursive] Error 1 make[2]: ディレクトリ '/home/shin/dvlp/nbdkit/nbdkit/plugins' から出ます Makefile:708: recipe for target 'all-recursive' failed make[1]: *** [all-recursive] Error 1 make[1]: ディレクトリ '/home/shin/dvlp/nbdkit/nbdkit' から出ます Makefile:578: recipe for target 'all' failed make: *** [all] Error 2sshプラグインのビルド時にエラーになっているようだ。
nbdkitが新しくなりすぎたな?
私は、xzイメージのマウントがしたいだけなので、sshプラグインは必要ない。
使わないものは除外してしまおう。"./configure --help"で除外方法が解る。
結果的にconfigureの方法は、以下のようになった。
$ ./configure --no-create --no-recursion --without-ssh : (色々表示される) $ make : (色々表示される)ビルドできたら、インストールする。
$ sudo make install : (色々表示される)新しくなって(少なくともVersion 1.15.1では)、使い方も少し変わってしまった。
xz圧縮されたイメージをnbdで提供するには、元々はこんな感じだった。
sudo nbdkit -n -e <export_name> -u <user> -g <group> -i <ipaddr> xz file=<xz-filename>新しいものでは、たとえば、以下のようになる。
sudo nbdkit -n -e <export_name> -u <user> -g <group> -i <ipaddr> --filter=xz file <xz-filename>
ビルドを通すためにsshプラグインを除外してしまったが、前のバージョンや別のブランチをcheckoutして試すのも良いかもしれない。
(私は使わないので、そこまではやらない)
git pullで更新も比較的簡単にできる。
しかし、上記のように時々ビルドできなくなることもある。
自分でソースコードを入手してビルドする行為は、自由がある反面、荒野を彷徨うようなものだ。
その覚悟が無いなら、やはりfocalに移行してnbdkitを使うのが良いだろう。
関連記事:
圧縮イメージをマウントする
Lubuntu 16.04でxz圧縮イメージをマウントする
0 件のコメント:
コメントを投稿