bazeliskを使う

bazelでビルドしようとしたときに、ビルドしようとしているプロジェクトによってはbazelのバージョンに依存して、エラーになったりとかしてハマるケースが多い…。そうすると、bazelの複数のバージョンを自前で管理したりとかは面倒くさすぎる。そのようなときには、bazeliskを使えば良いっぽい。

bazeliskはGoで書かれたBazelのラッパーで、環境変数や設定ファイルで指定されたbazelを利用することができる。インストールはGoが利用できる環境で

$ go get github.com/bazelbuild/bazelisk

とすればよい。あとは、bazelとして、パスが通っているところにシンボリックリンクなどを貼っておけばよい。

$ ln -s which bazelisk ~/bin/bazel

利用する際は、ビルドしたいプロジェクトに.bazelversionとか置いてあれば、そのバージョンでビルドしてくれるようになるが、なければ、.bazelversionファイルにbazelのバージョンを書いて置いておけば、あとは普通にbazelコマンドでビルドできる。

という感じで、たまにTensorflowをビルドしようとして、エラーになってハマるみたいなこともなくなるので、一つ悩みがなくなった今日この頃。

gpg: keyserver receive failed: Cannot assign requested address

docker buildしたら、Dockerfile内でのgpgコマンドが以下のようなエラーになる場合がある。

+ gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys E3FF2839C048B25C084DEBE9B26995E310250568
gpg: keybox '/tmp/tmp.SUXH22yiuV/pubring.kbx' created
gpg: keyserver receive failed: Cannot assign requested address

どうやら、Docker内でha.pool.sks-keyservers.netにIPv6で接続しにいこうとして、失敗しているらしい。この場合は、Dockerfile内のha.pool.sks-keyservers.netをipv4.pool.sks-keyservers.netに置き換えて、IPv4で接続するようにしたら解決した。

pdftoppmでPDF→画像にする

PDFファイルのサムネイル画像を作りたいときとか、今までだと、Imagemagickのconvertコマンドで作れていたのだが、最近のバージョンでは convertコマンドの脆弱性対応で、設定ファイルを変更しないと使えなくなってしまっている。なので、手軽な別な手段が必要になるのだが、画像変換するだけならpdftoppmコマンドが使えそうである。

pdftoppmコマンドを利用するために

$ sudo apt install xpdf

という感じで、xpdfをインストールする。あとは

$ pdftoppm -png test.pdf test

のようにすると、test-1.pngのようなファイルが生成される。

nvccでgccのバージョンエラー

nvccがgccのバージョンに依存しているので、新しいgccを使っていたりすると、cudaのバージョンによっては以下のような感じのエラーになる。

$ nvcc -o add_cuda add.cu
In file included from /usr/local/cuda/bin/../targets/x86_64-linux/include/cuda_runtime.h:83,
from :
/usr/local/cuda/bin/../targets/x86_64-linux/include/crt/host_config.h:138:2: error: #error -- unsupported GNU version! gcc versions later than 8 are not supported!
138 | #error -- unsupported GNU version! gcc versions later than 8 are not supported!

この場合だと、

$ sudo apt install g++-8

として、gcc 8をインストールして、nvccコマンドを以下のように実行すればコンパイルできる。

$ nvcc -o add_cuda add.cu -ccbin g++-8