自分のディスクイメージをリモートに送りたい場合

久しぶりにテクニカル?な話題です。

勤務先では、特注で CFからブートするような Linuxベースの専用機器の開発を請け負ったりするのですが、
お客様先に納品してから細かい変更などをする場合があります。

変更後、自社で管理するため変更した CFイメージを取得しておきたい場合があるのですが、
シリアルコンソールでのログインは緊急時のために可能でも、ssh などが一切入っていないこともあるでしょう。

そういった場合、以下の方法でCFイメージをネットワークで取得することができます。
ssh がある場合は、以下の手順は不要。Debianベースで、printf,ncコマンド必須。

手順1
ネットワーク上の他の Debianマシンで、以下のファイルを httpアクセス可能な場所においておく。

  • libgssapi_krb5.so.2
  • libk5crypto.so.3
  • libkeyutils.so.1
  • libkrb5.so.3
  • libkrb5support.so.0
  • ssh

# printf “HEAD /libgssapi_krb5.so.2 HTTP/1.1\r\nHost: ホスト名\r\n\r\n” | nc ホスト名 80 > head_size
# ls -l head_size
-rw-r--r-- 1 root root 280 Mar 9 18:37 head_size
# printf “GET /libgssapi_krb5.so.2 HTTP/1.1\r\nHost: ホスト名\r\n\r\n” | nc ホスト名 80 > real_file_with_header
# dd bs=1 skip=280 if=real_file_with_header of=libgssapi_krb5.so.2
↑これを全ファイル分行って(ssh が普通に使える場合は LD_LIBRARY_PATH=. ./ssh は、普通に ssh)

# dd if=/dev/hda1 | LD_LIBRARY_PATH=. ./ssh イメージ送信先ホスト dd of=output.img

これで、時間はかかりますが、ネットワークの別ホストに自身のディスクイメージを送信可能です。