はじめに
今回はLinuxのVMで複数の AsciiDocファイルのhtml変換をする環境があった。
それを WSL に移行することが趣旨である。
VM と WSL に変えることで、必要なディスク容量が大きく削減できる。
WSL以外の導入方法もあって「参考: その他のアプローチ」にざっとまとめた。
Windows上のエディタとの連携が難しいので、万人にお勧めな方式ではないので注意してほしい。(WindowsとLinuxとでパスの対応付けが違うので、色々悩ましいことになる。)
- 環境: Windows 10 Pro 1909
- Ubuntu 18.04
- ruby 2.5
- Asciidoctor 2.0.10
- ruby 2.5
- Ubuntu 18.04
インストール自体は3行ぐらいなのだけど、WSLの導入部分をちゃんと書いたら膨大になってしまった。
WSL に Ubuntu 18をインストールする
企業内の環境など管理者でStoreが禁止している場合もあるので、今回はMicrosoft Storeを使わない手順で導入した。
Windows Subsystem for Linux を有効にする
-
Windows Subsystem for Linux を有効にする
設定 → アプリと機能 → プログラムと機能をクリック
-
「Windowsの機能の有効化または無効化」をクリックし、「Windows Subsystem for Linux」のチェックボックスをONにする。
- 再起動する
WSLの入手とインストール
次のサイトに従って導入する。今回は、Ubuntu18.04 を使用する。
インストール後の設定
端末の色設定など
後回しでも良いが、参考のため書いておきます。
~/.vimrc
vi を使う時に黒背景に合わせた文字色にする。
set background=dark
~/.bashrc
コマンドプロンプトの色を変える。PS1の部分を置き換える。
PS1='\e[37;1m\u@\e[35m\w\e[0m\$ '
端末が一々囀るのを黙らせる
$ echo "set bell-style none" >> ~/.inputrc
$ exec $SHELL -l
ネットワーク設定?
導入直後は、 Temporary failure resolving 'security.ubuntu.com'
と名前解決に失敗している。別の環境(Windows 10 Pro 1909以前)ではこんなことをせずに動いたので、解決方法が腑に落ちないが、一応書いておく。
******@**********:~$ sudo apt update
[sudo] password for ******:
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'security.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-backports/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
******@**********:~$
名前解決に関する問題なのだろうが、WSL的にはどう直すか?
(WSLだと、resolve.conf は自動生成している模様)
こんな感じでうまくいった。
1. wsl.conf の作成
$ sudo vi /etc/wsl.conf
$ cat /etc/wsl.conf
[network]
generateResolvConf = false
$
2. 端末を閉じて、開きなおす。
3.sudo vi /etc/resolv.conf
で開いて、 nameserver 8.8.8.8
を先頭に追加。
-
DNS not working in fresh Ubuntu 18.04 that installed from Windows Store · Issue #3268 · microsoft/WSL · GitHub
wsl "Temporary failure resolving" ubuntu18 - WSL 2 DNS not working · Issue #4855 · microsoft/WSL · GitHub
- Fix DNS resolution in WSL2 · GitHub
インストール
sudo apt update
sudo apt install -y ruby default-jdk graphviz
sudo gem install asciidoctor-diagram asciidoctor-rouge
asciidoctor-pdf
と asciidoctor-mathematical
を使いたい場合はさらに次のコマンドを実行する。
sudo apt install cmake ruby-dev bison flex libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev libpango1.0-dev fonts-lyx
sudo gem install asciidoctor-pdf asciidoctor-mathematical
参考: その他のアプローチ
とりあえず、Windows上に AsciiDoc環境を作るのにいくつか方法がある。
大雑把にメリットデメリットを書いておく。
今回は、LinuxのVMで複数の asciidoctor ファイルの変換をする環境があったが、それを WSL に移行することが趣旨なので 3. を採用した。Linux環境に資産がなければ、1., 2. の選択をするのが妥当と思われる。
- エディタやプラグインで導入する
以下、あまり使い込んでいないので参考程度です。
- AsciidocFX, ATOM, Visual Studio Code, etc.
- PDF出力がうまくいかなかったり、使える拡張機能が限定されている
- ランタイムが Ruby版とは違い Asciidoctor.js, AsciidoctorJ になっているので出来ることが制限されてくる。
→ やりたいことができているなら、最良の選択。
- Windows に Ruby版の asciidoctor を導入する
- 拡張機能がそこそこ使える
-
asciidoctor-mathematical
は導入できない
→ mingw環境だとビルドに失敗する - ATOM, VS-Codeだとか、Windowsのアプリケーションとの連携ができる
- Windows に WSL で Ubuntu の環境を用意して、asciidoctorを導入する
- 拡張機能がそこそこ使える
- apt コマンドなど Linux の導入ノウハウが そこそこ 通用する
- VMより必要なディスク容量が少なくて済む
- VS-Codeだとか、Windowsのアプリケーションとの連携がしにくい
- Windows に WSL で Ubuntu の環境を用意して、Dockerで asciidoctor環境を用意する
- dockerのことを覚えれば、asciidoctorのインストールの智識は不要になるかもしれない
- 良くも悪くも docker上の環境なので、docker経由で実行することになる。コマンドがどうしても長くなりがちで、シェルスクリプトを書いて起動とか手間は増える。
- WSL環境を複数作りたいといった状況なら、この方法の方が管理は楽かも。
- Windows に VM を用意して asciidoctor を導入する
- 拡張機能がすべて使える
- apt コマンドなど Linux の導入ノウハウがそのまま使える
参考
- Windows 10「Windows Subsystem for Linux」を有効にする方法 | SEECK.JP サポート
- Asciidoctor の環境を Docker on WSL にて作る – すらりん日記
- WSLで同一のLinuxディストリビューションを複数インストールする方法 | 東京大学 佐々木淳 研究室 沿岸環境学 海岸工学 環境水工学 水環境学
- Asciidocの編集環境を作る - Qiita