14
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

軽量多機能なUNIXライク環境 MobaXterm

Last updated at Posted at 2017-04-10

概要

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\MxtXXXCygUtils.pluginを展開しルート/を作成するため少々時間がかかる。

rootとhome

初期設定ではTempディレクトリにルートが作成されるが、Tempのままだと環境構築をする上で使い勝手が悪い。
MobaXtermでは設定画面からhomerootを作成するディレクトリを指定できるが、絶対パスでしか指定できない。
そのため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にプラグインをインストールするシェルスクリプト

install_plugin.sh
#!/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 toolszipをインストールしたい場合

$ ./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ライク環境が作れる。

dotfilesMobaXterm.inigithubで管理しておけば、
インターネットさえあれば以下の3ステップで自分好みの環境がいつでもどこでも作れてしまう。

  1. MobaXterm本体を落とす
  2. gitと好みのプラグインを落とす
  3. githubにある自身のdotfilesを落とす

「USBメモリに環境を入れて持ち運びたい」
「環境を構築して配布したい」
「会社と自宅で同じ環境を構築したい」
などの要求に簡単に答えることができる。

便利なコマンド

  • apt-cyg
    • Ubuntuのapt-getライクなパッケージ管理コマンド
  • open
    • Macのopenコマンドに類似。実はcygstartをラップしているだけ。
  • iconv
    • Windows上のUNIXライク環境は文字化けとの戦い
    • MobaXtermにはnkfがないがiconvがある
    • -ffromを、-ttoを指定可能
    • iconv -f utf-8 -t shift-jisiconv -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"

つづく

14
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?