複アーキ環境をシュッと使えるシェルスクリプトを書いた

リバースエンジニアリングであったりシェルコード開発であったりで、複数のアーキテクチャのバイナリが動作する環境が必要になることがある。

その環境構築と使い勝手をいいかんじにしてくれるシェルスクリプトを書いた。qcow2イメージの取り回しをよくする。

github.com

install.shとssh_config.sh、launch.shという3つのファイルがあって、名前通りinstall.shがインストールを、ssh_config.shがsshのconfigの追加を、launch.shがVMの起動を行う。launch.shを使うことで以下のようにqcow2イメージを起動できる。この例ではmipsbeのVMを立ち上げている。sshでログインしてmipsbeの環境を使える。

$ ./launch.sh mipsbe
When it will be ready, just connect (credentials: root/root): ssh root@localhost -p2222
Launching Mipsbe machine

qcow2イメージ毎にポートを変えているが、これはSSHWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!を避けるためである。 QEMUの起動時に-net nic -net user,hostfwd=tcp::2222-:22を指定することで、ポートフォワーディングの設定をやり、ポートをイメージ毎に変えている。

qemu-system-mipsel -M malta -kernel ~/qcow/mipsle/vmlinux-3.2.0-4-4kc-malta -hda ~/qcow/mipsle/debian_wheezy_mipsel_standard.qcow -append "root=/dev/sda1 console=tty0" -net nic -net user,hostfwd=tcp::2222-:22

ssh_config.shであらかじめconfigを追加しておくので、ssh アーキ名VMに接続できる。

#!/bin/bash

echo '
Host mipsle
  HostName localhost
  User root
  Port 2222

Host mipsbe
  HostName localhost
  User root
  Port 2223

Host armle
  HostName localhost
  User root
  Port 2224

Host aarch64
  HostName localhost
  User root
  Port 2225
' >> ~/.ssh/config

echo 'Add VM host to SSH config'

これで複アーキ環境をシュッと使えるようになって便利になった。