No Such Blog or Diary

«Prev || 1 | 2 | 3 | 4 |...| 56 | 57 | 58 || Next»

bbcp を使ってみた

bbcp のソースからのコンパイルは面倒そうなので,バイナリがあるっぽいからそれを持ってきて試してみた.手元は 64bit Ubuntu 14.04 なので amd64_linux26 のバイナリを,遠隔地は 32bit Ubuntu 14.04 なので i386_linux26 のバイナリを使うことにして……

bbcp: error while loading shared libraries: libcrypto.so.6: cannot open shared object file: No such file or directory

というエラーを両方で食らった.libcrypto.so や libcrypto.so.1.0.0 は入っているのだけど,libcrypto.so.6 なんぞ無い.わざわざ指定のものを持ってくるのも面倒.

こんな時に一番手間がかからずとりあえずで試す気になるのがリンクを作ってしまうこと:

32bit $ sudo ln -s /usr/lib/i386-linux-gnu/libcrypto.so /usr/lib/i386-linux-gnu/libcrypto.so.6
64bit $ sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.6

で,動いた.めでたしめでたし.

とりあえず全然チューンしてないけれど,500MB のデータの転送をしてみて scp が 1.9MB/s なところを bbcp が 6.3 MB/s を出した(-s 16 でストリーム数 16 本).bbcp が3倍以上速いという結果.すばらしい.これで遠くのサーバで実験するとか言うのもストレスが減る気がする.

ストリーム数を変えた測定: 8 本だと 5.2MB/s,32 本で 7.9MB/s,最大本数の 64本で 9.6MB/s .とりあえずストリーム数が多いほうが速いという環境らしい.

閑話休題.

bbcp コマンドの起点ではなくファイルの転送元からストリーム用のコネクションを張るっぽいので,転送先が FW 内とかの場合は -z を付けてコネクションの起点を変えないとコケる.

tsort

トポロジカルソートをしてくれるコマンド.エッジ達を与えればいい.エッジは hoge→fuga なら "hoge fuga" のように空白区切りで始点と終点を与える.1 行に 1 エッジ書いてくのが普通な気がするけれど,任意の空白で区切られたトークン列に対して「2n - 1 番目 → 2n 番目」というエッジが定義されるというルールなので,ぶっちゃけ一直線に書いてもいいっぽい.

$ echo "2 1 3 2 4 1 4 2 4 5 5 6 6 1" | tsort
3
4
5
2
6
1

ループ検出もしてくれる.

$ echo "2 1 3 2 4 1 4 2 4 5 5 6 6 1 1 3" | tsort
4
5
6
tsort: -: input contains a loop:
tsort: 1
tsort: 3
tsort: 2
1
3
2

ループ検出してもとりあえず答えを出すという優秀さ.

こんなコマンドがあるとか全然知らんかった.

外部コマンドを使わずに bash だけでテキストファイルをコピーしたい

 .bashrc に export LD_LIBRARY_PATH=~/opt/lib/ と書かれている環境で,glibc を configure --prefix=~/opt とやって make all install とかやってしまった.おかげで新しく実行するコマンドがインストール途中の glibc を見に行ってしまって「ライブラリロードできねーんだよボケ」と吐いて止まってしまう状況に陥った.つまりスタティックリンクされてないような普通の mv, cp, cat, ... なコマンド達が使えない.

この状況から抜け出すには .bashrc の LD_LIBRARY_PATH の設定を消してログインしなおせばいい.最も単純には echo > .bashrc とやってしまえば良いけれど,.bashrc のバックアップを取ってないのでこれをやる前にバックアップを取っておきたい.

ということで,bash の機能だけで .bashrc を .bashrc.bak にコピーするという必要が生じた(ということにした).1分位悩んだ後で思いついた解答:

while read line; do echo $line; done < ~/.bashrc > ~/.bashrc.bak

とりあえず思いついたのがこの回答だったのだけど,もっとスマートにコピーできないのだろうか?

閑話休題.

上記の状況でファイルをコピーする一番楽な方法は,LD_LIBRARY_PATH を空にすることである.

export LD_LIBRARY_PATH=""

これで状況を脱した.

もしくは状況を楽しんだままコピーだけしたいなら,コマンドを打つときにローカルで指定してもいい.

LD_LIBRARY_PATH="" cp .bashrc .bashrc.bak

なお,他のアカウントからどうにかするという手順は面倒なので却下.

cabal install で依存関係のバージョン上限を外す:--allow-newer

Hackage は基本的に「テストしたバージョンまでで依存パッケージのバージョン上限を設けとけよ」的なノリなので,実際には問題ないんだけど上限よりも上のバージョンの依存パッケージしか入れられないから目的のパッケージがインストール出来ない,とかいう状況がチラホラある.バージョン上限を書き換えるためだけにデプロイやり直すのも作者が面倒だろうし.

んで,この状況にハマった時には目的のパッケージのソースを持ってきて手動でコンパイルするかとかやってたのだけど,cabal install のヘルプを良く見てみたら --allow-newer とかいう便利なオプションがあることに(今更ながら)気づいた.これつけとくとバージョン上限を無視してくれる.ほんと便利.

閑話休題.

cabal install を使った時とパッケージのソースで runghc Setup.hs configure とかやった時とでオプション無しの時の振る舞いが異なっていてハマった.cabal install がデフォルトでユーザ個別にパッケージをインストールをする(--user オプションがデフォルト?)のに対して,手元に持ってきたパッケージで runghc Setup.hs configure とかやった時にはグローバルにインストールされたものを探しに行っていた(--global オプションがデフォルト).おかげで入れたはずのパッケージが見つからないと怒られて,でも ghci で確かめると普通に import できて,何がおかしいのか暫く悩みまくった. runghc Setup.hs configure --verbose=3 とかやったら ghc-pkg を呼ぶときに --global をつけているのが見えて分かったのだけど,ここらのデフォルトの違いはどこから出てきたのやら.

sshd_config の PermitRootLogin の without-password

PermitRootLogin without-password とか書かれてパスワード無しで root が入れるのか? とか思ってしまったのだけど,man sshd_config してみたら次のように書かれていた.つまり逆.

If this option is set to “prohibit-password” or “without-password”, password and keyboard-interactive authentication are disabled for root.

without って ~以外 とかいう意味になるんだっけ? prohibit-password と書いてくれれば分かる.

BIND と SSH の挙動がおかしいと思ったら

サーバの時刻が20年前になってたのが原因だった.

症状1: ssh の接続になぜか 15秒くらいかかる.

症状2:BIND が外部のDNSの問い合わせに失敗する(verify failed due to bad signature (keyid=XXXXX): RRSIG validity period has not begun とかいうメッセージが log に出てた).

時刻をそれなりに正しく設定するのはとても大事.

«Prev || 1 | 2 | 3 | 4 |...| 56 | 57 | 58 || Next»
Search
Feeds

Page Top