agostatifierというのを使ってみました。駄目っ・・・・・!パッケージの依存関係がすごい。1つコマンドを導入するのに、入れたくないパッケージを山のように入れなければならない。そのコマンド1つだけ実行したいだけなのに・・・そこで思いつく悪魔の発想・・・っ!1バイナリで動くようにすれば、他の環境に楽に持っていける。理論上は出来るはず・・・と思い、調べたら出てきた。statifierというのを使えば可能であることがわかった。PAGEメンテナンスはあまり活発ではないようだが、x86_64にも対応してくれているっぽい。その他の案として、参照している動的リンクライブラリを全部洗い出してコピーし、LD_PRELOAD環境変数に突っ込んだ上で実行すればいけるかなぁ。思ったんだけど、試してはいない。(0x00007f8862517000)この単純なプログラムですら、3つの動的リンクライブラリを必要としている事がわかる。このライブラリがシステムに存在しないと、プログラムは動かない。・・・プログラム(a.out)の中に、この3つの動的リンクライブラリを取り込んだらいいじゃない。Install¶まず、自分はこのソフトのコンパイルのため、コンパイル用の仮想環境を用意した。statifierを導入するために、依存関係となっている複数パッケージを導入する・・・のは本末転倒である。コンパイル済みのものだけを目的の環境にコピーしてやればよいではないか。いう訳で、ここから最新版のtar.gzをダウンロードする。適当なところに展開しておく。statifier-1.7.4.tar.gzコンパイル時に必要となるパッケージをインストール。makeというのが、めんどうな方のために自分がコンパイルしたものをここに置いておく。statifier-1.7.4_for_x86_64.tar.gz実行環境について¶さっそく動作確認してみる。dateコマンドを静的リンクにしてみよう。/tmp/date2これでstaticなdateコマンドが出来たはず。動的実行ファイルではありませんうん、たぶんうまく動いてるんだと思われる。-R実は、これ、LinuxのASLRというセキュリティ機能を一時的に無効にするコマンドになります。ASLRについては、ググるか、CTF_Pwnをみてね。なんか、いろいろやってみたけど、動かなくてね~。「静的リンクの実行体に変換する時」と、「実際に動作させる時」にメモリアドレスが同じになってないといけないっぽい。-R」を頭につけて変換&実行しておくれ。想定される使い方¶よっしゃー。これで、1バイナリになって、どの環境でも動くぞイヤッッホォォォオオォオウ!と、ならないのが世の定め。Linuxディストリビューションの違うLinuxに持ち込んでみたが動かない。同じディストリビューションだと動いているっぽい。kernelのバージョンが違ってたりすると、取り込んだlibcでそれを吸収できないとか、そんな感じになっている気がする。考えると1バイナリになるGo言語って結構考えられてますね。ファイルサイズが大きくなるだろうから、そこらへんトレードオフなんだろうけど。自分は同じLinuxディストリビューションで2環境用意して運用している。