概要
MobaXterm
2017/04/10現在の最新バージョンは10.2
- Cygwinをベースにcoreutils部分をbusyboxに置き換えた軽量なUNIXライク環境
- 最初からターミナルとシェル(bash)がついてる
- 最初からtelnet,ssh,mosh,rdp,vncクライアントが使える
- x serverを内蔵しているのでx11なプログラムが動くしssh x11 forwardingもできる
- Cygwinベースなのでapt-cygコマンドによるパッケージ管理ができる
- 圧縮状態なら25MB強程度のサイズしか無い超軽量環境
MobaXtermのポータブル版を使って持ち運べるUNIXライク環境を構築します
初期設定
初回起動時は%appdata%\..\Local\Temp\MxtXXXにCygUtils.pluginを展開しルート/を作成するため少々時間がかかる。
rootとhome
初期設定ではTempディレクトリにルートが作成されるが、Tempのままだと環境構築をする上で使い勝手が悪い。
MobaXtermでは設定画面からhomeとrootを作成するディレクトリを指定できるが、絶対パスでしか指定できない。
そのためUSBメモリにインストールして環境を持ち運ぶ、等の用途に適さない。
しかし設定ファイルを直接記述するとを相対パスや環境変数で設定できるので、
これを利用して永続利用可能な場所に環境を構築することにする。
利用可能な環境変数は以下を参照する。
MobaXterm/Changelog
例えば、MobaXterm_Personal_XXX.exeがある場所にルートディレクトリとして.\slashを作成し、
.\home\mobaxtermをホームディレクトリとして使う場合は以下のように設定する。
[Misc]
HomeDir=%CurrentFolder%\home\mobaxterm
SlashDir=%CurrentFolder%
すると以下のようなディレクトリ構造になる。
MobaXterm
├── CygUtils.plugin
├── home
│ └── mobaxterm
├── MobaXterm.ini
├── MobaXterm_Personal_10.2.exe
└── slash
├── bin
︙
├── etc
├── home
├── lib
︙
└── var
プラグイン
MobaXtermはプラグインを追加することで機能を増強できる。
MobaXterm/Plugins
プラグインを導入することでgit,svn,vim,emacs,gcc,makeなどが利用可能になる。
プラグインは単一ファイルになっており、MobaXterm_Personal_XXX.exeと同一ディレクトリに置き再起動するだけで有効になるため非常に簡単。
しかし、プラグインになっているプログラムは概ねバージョンが古く更新されていないため注意が必要。
例えば2017/04/10現在のgitの最新バージョンは2.12.2だがプラグインのgitは2.1.4とかなり古い
(apt-cygでインストールしても2.8.3までしか入らないけど…)
プラグインによる導入は、サイズが小さく、パス変更に強く、そして簡単であるため
"ミニマル"で"持ち運べる環境"を"簡単に作る"という面では非常に有用
素の状態のMobaXtermにgitをインストールする場合
| バージョン | サイズ | インストール時間 | |
|---|---|---|---|
| プラグイン | 2.1.4 | 20MB程度 | 数十秒程度 |
| apt-get | 2.8.3 | 150MB程度 | 数分~数十分 |
MobaXtermにプラグインをインストールするシェルスクリプト
# !/bin/bash
URL="http://mobaxterm.mobatek.net"
SlashPath=$(cygpath -au $(cygpath -aw "/"|awk -F '\\' -v OFS='\\' '{$NF="";print}'))
Response=$(curl ${URL}/plugins.html)
eval PluginList="($(echo -e "$Response"|grep -oP '(?<=<p class="moba_plugin">).+(?=</p>)'|grep -oP '(?<=<b>).+(?=</b>)'|sed s/"^\(.*\)$"/"\"\1\""/g|tr "\n" " "))"
eval TextList="($(echo -e "$Response"|grep -oP '(?<=<p class="moba_plugin">).+(?=</p>)'|grep -oP '(?<=: ).+(?=</a>)'|sed s/"^\(.*\)$"/"\"\1\""/g|tr "\n" " "))"
eval UrlList="($(echo -e "$Response"|grep -oP '(?<=<p class="moba_plugin">).+(?=</p>)'|grep -oP '(?<=href=").+(?="><i)'|sed s/"^\(.*\)$"/"\"\1\""/g|tr "\n" " "))"
for ((i = 0; i < ${#PluginList[@]}; i++)) {
echo -e "[$i]\t${PluginList[i]}"
echo -e "\t${TextList[i]}\n"
}
echo -n "number:"
read num
eval num="($num)"
for ((i = 0; i < ${#num[@]}; i++)) {
wget -nc ${URL}/${UrlList[${num[i]}]} -P $SlashPath
}
echo "Please restart MobaXterm to enable Plugin."
使い方
install_plugin.shを実行するとMobaXtermからプラグイン一覧を取得して表示する
インストールしたいプラグインの番号をスペース区切りで入力する
例:Gcc, G++ and development toolsとzipをインストールしたい場合
$ ./install_plugin.sh
[0] CygUtils.plugin
Collection of core UNIX tools for Windows
[1] Corkscrew
Corkscrew allows to tunnel TCP connections through HTTP proxies
[2] Curl
Curl is a command line tool for transferring data with URL syntax
[3] CvsClient
A command line tool to access CVS repositories
[4] Gcc, G++ and development tools
the GNU C/C++ compiler and other development tools
︙
︙
[39] XServers
Xephyr, Xnest, Xdmx, Xvfb and Xfake alternate X11 servers.
[40] Xmllint
A command line XML tool.
[41] Zip
Zip compression utility.
No.: 4 41
運用
ホームディレクトリをMobaXterm\slash\home\mobaxtermではなくMobaXterm\home\mobaxtermにしたのは
パーティションを分けるように/とhomeを分離したかったから。
MobaXtermはCygUtils.pluginにシステムを保持しているため、たとえslashディレクトリを削除しても
CygUtils.pluginとプラグインファイルとdotfilesさえあれば、MobaXterm起動時に元の環境が容易に復元できるため、環境に依存しにくく変化に頑強なUNIXライク環境が作れる。
dotfilesとMobaXterm.iniをgithubで管理しておけば、
インターネットさえあれば以下の3ステップで自分好みの環境がいつでもどこでも作れてしまう。
- MobaXterm本体を落とす
- gitと好みのプラグインを落とす
- githubにある自身の
dotfilesを落とす
「USBメモリに環境を入れて持ち運びたい」
「環境を構築して配布したい」
「会社と自宅で同じ環境を構築したい」
などの要求に簡単に答えることができる。
便利なコマンド
- apt-cyg
- Ubuntuのapt-getライクなパッケージ管理コマンド
- open
- Macのopenコマンドに類似。実はcygstartをラップしているだけ。
- iconv
- Windows上のUNIXライク環境は文字化けとの戦い
- MobaXtermには
nkfがないがiconvがある -
-fでfromを、-tでtoを指定可能 -
iconv -f utf-8 -t shift-jisとiconv -f shift-jis -t utf-8だけ覚えておけば大丈夫 - nkfも入れれば入るよ
小ネタ
古いバージョンのMobaXtermは入ってる証明書が古くてhttpsにつながらない時があった
そういう時は証明書を更新すればいい
mkdir -p /etc/pki/tls/certs/
wget https://curl.haxx.se/ca/cacert.pem --no-check-certificate -O "/etc/pki/tls/certs/ca-bundle.crt"
つづく