「emacs 18.59 を Linux で動かす」というネタについて、Twitter には何度か投稿していたものの、ちゃんと手順を書いていませんでした。
そんな中、 Emacs 26.1 のビルドをしていた芝生氏をそそのかしたところ、 WSL で emacs 18.59 動いた ということだったので、とりあえず自分でもトライして手順をまとめてみました。
Emacs 18.59 on recent NetBSD
「emacs 18.59 と mule 1.1 を NetBSD で動かす」というネタについては、以下の Togetter や KOFでの発表スライド等を参照してください。
- Togetter: mule 1.1 を NetBSD/i386 6.1.5 でビルドして動かした
- Togetter: mule 1.1 を NetBSD/i386 6.1.5 でビルドして動かした その後
- Togetter: mule 1.1 + Canna 3.7pl3 を NetBSD/amd64 7.0 でデバッグした話
- emacs 18.59 / mule 1.1 を NetBSD 7.0 で動かした話
- https://github.com/tsutsui/emacs-18.59-netbsd
- https://github.com/tsutsui/mule1.1-netbsd
作業のベースにした gentoo linux の emacs package では 32ビットバイナリのみのサポートですが、このオレオレ版 emacs 18.59 および mule 1.1 ではビッグエンディアンを含む 64ビット版もサポートしています。
Emacs 18.59 on recent Linux
冒頭および以前のエントリ「emacs 18.59 を pkgsrc 化してみる」で触れている通り、上記のオレオレ emacs-18.59 ツリーには x86_64 を含む Linux のサポートも入っています。
NetBSD対応の作業で 64ビット対応や最近の gccに対応するための修正は入っていたので、Linux に特化した修正で苦労したところは特に無かったと記憶しています。具体的な作業については記録が残っていませんが、 github の関連するログを拾うと以下のような具合です。
- Minimum fixes to build on Linux.
- Add a dumb m-x86-x64.h config file to build on 64 bit Linux.
- Appease some warnings on Linux build.
- Explicitly specify -fno-builtin-malloc to avoid wrong calloc() optimization.
- Fix build errors on the latest Arch Linux and ubuntu.
修正内容はざっと以下の通り:
- Linux用の設定ファイルの修正および 64ビット x86_64 用設定の追加
- Linuxのみで使用している関数の varargs 関連を含むプロトタイプ宣言修正
- gcc 5.x, 6.x, 7.x の各更新で必要になった最適化抑制オプションの追加
- リンク時の PIE (Position Independent Executable) を無効化
Emacs 18.59 on WSL ubuntu 18.04
WSL ubuntu 18.04 のインストール
WSLそのものおよび WSLで使える Xサーバーのインストールについてはググれば複数出てきますが、以下のエントリがわかりやすいと思います。
- 【Windows10】WSL(Windows Subsystem for Linux)で「Ubuntu 18.04」を使う
- 【Windows10/WSL Ubuntu】X Serverアプリを実行する(Emacs25 GUI版を試す)
emacs 18.59 ビルド手順
端的には以下のツイートがすべてです。
sudo apt update
— Izumi Tsutsui (@tsutsuii) 2018年6月1日
sudo apt upgrade
sudo apt install make gcc libx11-dev ncurses-dev git
git clone https://t.co/V3PmD8Z6q7 emacs-18.59
cd emacs-18.59
cp src/config.h-linux src/config.h
sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"
make
sudo make install
emacs 18.59 ビルド手順 詳細
WSL ubuntu 18.04 インストール直後の手順の中にあるとおりに apt update と apt upgrade でインストール済みのパッケージを更新:
それぞれそれなりに時間がかかるのでしばらく待ちましょう。
私が試したときには upgrade でエラーが出たことがありますが、本題である emacs 18.59 のビルドにはとりあえず支障はないはずなので、あまり気にしないようにしましょう……。
次に emacs 18.59 のビルドに必要な make gcc libx11-dev ncurses-dev のパッケージと、 オレオレ版 emacs 18.59 レポジトリ取得用に git をインストール:
これもそこそこ時間がかかるのでしばらく待ってください。
git でオレオレ版 emacs 18.59 のリポジトリを取得:
emacs-18.59 ディレクトリに入り、 src/config.h を Linux用のテンプレートファイルからコピー:
emacs のビルドでは unexec という操作を行うため、 ASLR (Address Space Layout Randomazation) が有効になっていると正常にビルドができません (参考1, 参考2)。とりあえず /proc の設定でこれを無効化した上で make を実行:
途中いろいろと警告が出ますが、とりあえず致命的なものはないはず……
ビルドできたら make install でインストール:
/usr/local/emacs などという乱暴なディレクトリが作成されますが、それを含めて歴史ということで……
これで emacs と打てばそのまま起動するはずです。
起動した *scratch* のバッファで (hanoi 9) と入力して CTRL+J を押せば Hanoi で動作確認(?)が可能:
WSLのコンソールは微妙に VT100 のエスケープシーケンスをサポートしないのか、ところどころ表示が崩れてしまうようです。
Xサーバーがインストールされている場合は、環境変数 DISPLAY を :0 等に指定して emacs を起動すれば X端末版が起動します。
X端末版だと Hanoi の表示も問題ないはずです。
Full HD全画面にすると (Hanoi 30) などとして世界の終わりの一端を見ることも可能です: