過去の TeX Live の Docker コンテナ化

[以前の記事](https://qiita.com/doraTeX/items/f40f9597763ca63daabb)では，最新の TeX Live 2019 に，高品質なオープンソース和文フォントである[**原ノ味フォント**](https://github.com/trueroad/HaranoAjiFonts)と，新進気鋭の LaTeX 文書ビルドシステム [**llmk**](https://github.com/wtsnjp/llmk) を搭載した Docker コンテナのイメージを作成しました。

* [TeX Live 2019 + 原ノ味フォント + llmk の Docker コンテナを作る](https://qiita.com/doraTeX/items/f40f9597763ca63daabb)

それに対し今回は，過去バージョンの TeX Live を保存した Docker コンテナを作成してみました。

# 使い道

過去バージョンの TeX Live を Docker コンテナとして保存し，いつでも過去バージョンを呼び出せるようにしておくと，次のような場面で役立つはずです。

* 過去に組版した文書を今コンパイルしたら組版結果があちこち変わり，ページ数が変わってしまった！（←これ結構起こりますよね……😓）元と同じ環境で再度コンパイルしたい……！
* 最新の TeX Live だとコンパイルが通らない。昔のバージョンではこのソースで通っていたはず。どの時点の TeX Live まではコンパイルが通っていたのかをさかのぼって検証したい。
* Web 上で「TeX Live 2015 で組版したところ結果が期待通りになりません」といった質問に答えるにあたり，手元で検証して動作を確認したい。



# 仕様

[日本語 TeX 開発コミュニティ (texjp.org) のサーバ](https://texlive.texjp.org/)から取得した，次の各 TeX Live の frozen 版 (scheme-full) をコンテナイメージとして固めました。それぞれ Ubuntu 18.04 ベースです。Ubuntu 18.04 公式レポジトリの Ghostscript 9.26 も同梱・設定されています。

* TeX Live 2012 (frozen)
* TeX Live 2013 (frozen)
* TeX Live 2014 (frozen)
* TeX Live 2015 (frozen)
* TeX Live 2016 (frozen)
* TeX Live 2017 (frozen)
* TeX Live 2018 (frozen)
* TeX Live 2019 (frozen)

## IPAex フォント埋め込み設定

各バージョンとも，`(u)pLaTeX` + `dvipdfmx`/`dvips` を使った場合にデフォルトで IPAex フォントを埋め込む設定を済ませてあります。

## llmk 同梱

TeX Live とは別に，`/usr/local/bin` に [llmk](https://github.com/wtsnjp/llmk) を入れ，Docker コンテナを引数なしで起動したときに llmk が呼び出されるようにしてあります。（ただし TeX Live 2012 の texlua では llmk を動かせなかったので入れていません。）


# Docker Hub レポジトリ

* [doratex/tlarchive - Docker Hub](https://hub.docker.com/repository/docker/doratex/tlarchive)

次の各タグでバージョンが区別されています。

* `2012frozen`
* `2013frozen`
* `2014frozen`
* `2015frozen`
* `2016frozen`
* `2017frozen`
* `2018frozen`
* `2019frozen`

# 使い方

## イメージの pull

まず，使いたいバージョンのタグを指定して pull します。

```sh
$ docker pull doratex/tlarchive:2015frozen
```

## 起動法

コンテナ内では `/workdir` が作業ディレクトリとなるので，それをカレントディレクトリと bind マウントして使うのを想定しています。

```bash
alias tl2015="docker run --rm \
  --mount type=bind,src=\"\$(pwd)\",dst=/workdir \
  --mount type=volume,src=ltfontcache2015,dst=/usr/local/texlive/2015/texmf-var/luatex-cache/generic/fonts/otl \
  doratex/tlarchive:2015frozen"
```

などとエイリアスを設定しておくと楽でしょう。（`--mount type=volume,...` の部分は，LuaTeX のフォントキャッシュを `ltfontcache2015` というボリューム（名前は任意です）に保存し永続化させるための設定です（詳細は[前回の記事](https://qiita.com/doraTeX/items/f40f9597763ca63daabb#luatex-%E3%81%AE%E5%88%9D%E5%9B%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E4%BD%9C%E6%88%90%E3%81%8C%E9%81%85%E3%81%84%E5%95%8F%E9%A1%8C)を参照）。このエイリアスが設定されている下で


```sh
$ tl2015 ptex2pdf -l hoge.tex
$ tl2015 lualatex fuga.tex
```

などと普通にコンパイルすることも可能です。`pLaTeX` + `dvips` + `ps2pdf` のワークフローを使う場合は，

```sh
$ tl2015 /bin/bash -c 'platex hoge.tex && dvips hoge.dvi && ps2pdf hoge.ps'
```

とすれば OK です。

`(u)pLaTeX` + `dvipdfmx`/`dvips` においては，デフォルトで IPAex フォントを埋め込む設定になっています。

また，引数なしで

```sh
$ tl2015
```

と起動すると，同梱の llmk が動き，カレントディレクトリの `llmk.toml` に基づきビルドしようとします。

```sh
$ tl2015 llmk hoge.tex
```

のようにして特定のファイルをターゲットにすることもできます。従来の latexmk もインストールされているので

```sh
$ tl2015 latexmk hoge.tex
```

も使えます。

# Dockerfile

このイメージを作るために使用した Dockerfile は [GitHub レポジトリ](https://github.com/doraTeX/Docker-TLarchive)に置いてあります。年号が違う以外はほぼ同様に見えますが，各バージョンの仕様の違いに応じて以下のように微調整してあります。

* `install-tl` の `-repository` が `https` に対応したのは TeX Live 2017 以降なので，TeX Live 2016 以前では `http` を使う。
* TeX Live 2012 では `kanji-config-updmap-sys` ではなく `updmap-setup-kanji-sys` を使う。
* TeX Live 2012 では `luaotfload-tool` がないので `TEXMFDIST/scripts/luaotfload/mkluatexfontdb.lua` を直接呼び出す。
* TeX Live 2012 では llmk が動かないのでインストールしない。

## イメージサイズ

scheme-full で TeX Live を丸ごとコンテナ化しているイメージサイズは大きいです。それにしても，こうやって並べてみると，TeX Live の全体サイズが年々肥大化しているのが分かりますね……。

| REPOSITORY        | TAG        | SIZE   |
|-------------------|------------|--------|
| doratex/tlarchive | 2012frozen | 1.90 GB |
| doratex/tlarchive | 2013frozen | 2.03 GB |
| doratex/tlarchive | 2014frozen | 2.27 GB |
| doratex/tlarchive | 2015frozen | 2.38 GB |
| doratex/tlarchive | 2016frozen | 2.68 GB |
| doratex/tlarchive | 2017frozen | 2.94 GB |
| doratex/tlarchive | 2018frozen | 3.22 GB |
| doratex/tlarchive | 2019frozen | 3.74GB |

# 参考文献

* [過去にリリースされたTeX Live YYYYをインストールしてみよう！ - @munepi
さん](https://qiita.com/munepi/items/44117be9180ac7a86d82)
* [古い TeX をインストールする (W32TeX, TeX Live) - Acetaminophen’s diary](http://acetaminophen.hatenablog.com/entry/2016/05/18/221948)