はじめに
シェル芸はロマンです。
Dockerを使ってワンライナーで環境を汚さずにD言語のプロジェクトをビルドする方法を紹介します。
TL;DR
d-mansay で試します。
$ ls -1a
.
..
.dub
.git
.gitignore
README.md
dub.json
dub.selections.json
source
$ docker run --rm -v $PWD:/src -w /src dlanguage/dmd:latest dub -- ワンライナーだよ
Fetching east_asian_width 1.0.0 (getting selected version)...
Performing "debug" build using dmd for x86_64.
east_asian_width 1.0.0: building configuration "library"...
d-mansay ~master: building configuration "say"...
Linking...
Running ./d-mansay ワンライナーだよ
__________________
< ワンライナーだよ >
------------------
\ _ _
\ (_) (_)
/______ \
\\(O(O \/
| | | |
| |_| |
/______/
< >
(_) (_)
$ ls -1a
.
..
.dub
.git
.gitignore
README.md
d-mansay
dub.json
dub.selections.json
source
$ ./d-mansay Ubuntuだよ
____________
< Ubuntuだよ >
------------
\ _ _
\ (_) (_)
/______ \
\\(O(O \/
| | | |
| |_| |
/______/
< >
(_) (_)
バイナリが出力されます。
ビルドに使ったコンテナと同じアーキテクチャであればそのまま実行できます。
注意点
- 出力されるバイナリのパーミッションはコンテナのユーザーに依存します。
- 依存関係がないプロジェクト前提です。dmanbotは以下のようにビルドできません。
$ docker run --rm -it -v `pwd`:/src -w /src dlanguage/dmd:latest dub build
Fetching dyaml 0.6.3 (getting selected version)...
Fetching tinyendian 0.1.2 (getting selected version)...
Fetching twitter4d 0.0.70 (getting selected version)...
Fetching mysql-d 0.3.3 (getting selected version)...
Fetching dunit 1.0.12 (getting selected version)...
Performing "debug" build using dmd for x86_64.
tinyendian 0.1.2: building configuration "library"...
dyaml 0.6.3: building configuration "library"...
mysql-d 0.3.3: building configuration "mysql-d"...
twitter4d 0.0.70: building configuration "library"...
dmanbot ~master: building configuration "application"...
Linking...
/usr/bin/ld: cannot find -lmysqlclient
/usr/bin/ld: cannot find -lcurl
collect2: error: ld returned 1 exit status
Error: linker exited with status 1
dmd failed with exit code 1.
おまけ
宗教上の理由等でGoをインストールしていない環境でも、go get
を使ってバイナリを取得できます。
$ docker run --rm -v ~/bin:/go/bin golang:1.9.2-stretch go get github.com/adamryman/gophersay
$ gophersay
------------------------
Don't panic.
------------------------
\
\
\ ,_---~~~~~----._
_,,_,*^____ _____``*g*\"*,
/ __/ /' ^. / \ ^@q f
[ @f | @)) | | @)) l 0 _/
\`/ \~____ / __ \_____/ \
| _l__l_ I
} [______] I
] | | | |
] ~ ~ |
| |
| |