インストーラープロファイルを用いてTeX Liveをインストールしよう

> これは「[TeX ＆ LaTeX Advent Caleandar 2017](https://adventar.org/calendars/2229)」の18日目の記事です。
> 17日目は、[uwabamiさん](https://uwabami.junkhub.org/log/20171217.html#p01)でした。19日目は、[doraTeXさん](http://doratex.hatenablog.jp/entry/20171219/1513609314)です。

みなさん、[#テフライブ！](https://twitter.com/search?f=realtime&q=%23%E3%83%86%E3%83%95%E3%83%A9%E3%82%A4%E3%83%96%EF%BC%81) していますか？

この記事では、「**TeXで作る環境**」ということで、TeX Live公式のコマンドラインによるインストーラ `install-tl` コマンドに、インストーラープロファイルを与えることで、自分好みの構成でTeX Live環境をインストールするための解説をしてみます。

`install-tl` コマンドからインストールすると、

 * インストーラープロファイルを与えることで、TeX Liveのインストールを自動化できます。
 * Windows、macOS、Linux、FreeBSD、どのOSでも同じ処理、同一構成でインストール可能です。
 * （Unix系OS上から）他のプラットフォームのTeX Live環境も構築可能です。


# `install-tl` コマンドに、インストーラープロファイルを与えて TeX Live をインストール

ここでは、以下の条件でTeX Live 2016 frozenをインストールするとします。

 1. `/opt/texlive/2016` にインストール
 2. フル構成インストール（`scheme-full`）
 3. Mac OS Xバイナリのみインストール（`x86_64-darwin`）
 4. ソースとドキュメントを除く（`texmf-dist/src`, `texmf-dist/doc`）
 5. その他オプションを調整

## 1. インストーラープロファイルを作成

この条件をみたすインストーラープロファイルを `texadvent2017-tl16frozen.profile` としてまとめました。

```
# texadvent2017-tl16frozen.profile
# 
# $ wget https://texlive.texjp.org/2016/tlnet/install-tl-unx.tar.gz
# $ sudo mkdir -p /opt/texlive/2016/tlpkg
# $ sudo cp /some/where/texadvent2017-tl16frozen.profile /opt/texlive/2016/tlpkg/texlive.profile
# $ sudo install-tl-20170413/install-tl \
#     --profile /opt/texlive/2016/tlpkg/texlive.profile \
#     --repository http://texlive.texjp.org/2016/tlnet
#
## 
selected_scheme scheme-full
#selected_scheme scheme-minimal
#collection-langjapanese 1
#collection-latexextra 1
#collection-xetex 1
#collection-luatex 1
#collection-fontsrecommended 1
#collection-texworks @@WITH_WINDOWS@@
#collection-wintools @@WITH_WINDOWS@@
#
## 
TEXDIR /opt/texlive/2016
TEXMFLOCAL /opt/texlive/texmf-local
TEXMFSYSCONFIG /opt/texlive/2016/texmf-config
TEXMFSYSVAR /opt/texlive/2016/texmf-var
TEXMFHOME ~/texmf
TEXMFCONFIG ~/.texlive2016/texmf-config
TEXMFVAR ~/.texlive2016/texmf-var
#
## set platform(s)
binary_x86_64-darwin 1
binary_x86_64-linux 0
binary_win32 0
#
## texmf-dist/doc, texmf-dist/src
option_doc 0
option_src 0
#
## set other options
in_place 0
option_adjustrepo 0
option_autobackup 0
option_backupdir tlpkg/backups
option_desktop_integration 0
option_file_assocs 0
option_fmt 1
option_letter 0
option_menu_integration 0
option_path 0
option_post_code 1
option_sys_bin /usr/local/bin
option_sys_info /usr/local/share/info
option_sys_man /usr/local/share/man
option_w32_multi_user 1
option_write18_restricted 1
portable 0
```

## 2. インストーラーをダウンロード

インストーラーをダウンロードします。
TeX Live YYYYをインストールする場合は、
https://texlive.texjp.org/YYYY/tlnet/install-tl-unx.tar.gz
をダウンロードします！（ココ、テストに出ます！）
実際に、Webブラウザから https://texlive.texjp.org/ 以下を辿ってもよいですね。

``` bash
$ wget https://texlive.texjp.org/2016/tlnet/install-tl-unx.tar.gz
```

## 3. インストーラー `install-tl` を実行

インストールプロファイル `texadvent2017-tl16frozen.profile` を指定の場所に texlive.profile として置きます[^locationTexliveProfile]。

``` bash
$ sudo mkdir -p /opt/texlive/2016/tlpkg
$ sudo cp /some/where/texadvent2017-tl16frozen.profile
/opt/texlive/2016/tlpkg/texlive.profile
```

[^locationTexliveProfile]: この処理は必須ではないですけれども、過去のバージョンで特定の場所しか認識しないことがあったので、そのままにしています。

Goooooooooooooooooooooo!!!

``` bash
$ cd install-tl-20170413
$ sudo ./install-tl \
    --profile /opt/texlive/2016/tlpkg/texlive.profile \
    --repository http://texlive.texjp.org/2016/tlnet
```

以上です、簡単ですね！

このあと、後処理として、以下の設定を行います。

 * 環境変数 `PATH`（Windowsでは `%PATH%`）
 * Unix系OSで `OSFONTDIR`（Windowsでは、初めから `C:\WINDOWS\Fonts` を見に行くようになっています）
 * 和文フォントの設定
 * tltexjp リポジトリの追加
 * その他

この各種後処理も色々と大事なことがありますけれども、今回は割愛いたします。


各事項の補足
====================

tlnet リポジトリの場所
--------------------

TeX Live historic ftp://tug.org/texlive/historic/ には、TeX Live公式のTeX　Live YYYY frozenが保存されています。このhistoricを `--repository` で指定してもよいのですが…、当然のごとく、日本国内からインターネット上の距離が遠い場所にあります。

そこで、tlnetリポジトリ場所は、最新バージョンに対して、CTANミラー http://mirror.ctan.org/systems/texlive/tlnet （JAISTなどのCTANミラーを直接してしてもOK） を、過去にリリースされたTeX Live YYYYに対して、国内にある日本語TeX開発コミュニティ側の http://texlive.texjp.org/ をオススメいたします[^texliveTexjpOrg]。

[^texliveTexjpOrg]: このリポジトリ集 https://texlive.texjp.org/ の管理は、わたしが某弊社Green Cherryのサーバでやっていたものを、日本語TeX開発コミュニティにそのまま持ってきました。

また、前述の例では、　`--repository` に日本語TeX開発コミュニティが運営しているサーバのURLを与えていますが、手元に適当なtlnetリポジトリを用意すれば、 `--repository /some/where/tlnet` のように与えることができます。



インストール場所： 1. `/opt/texlive/YYYY` にインストール
--------------------
`texadvent2017-tl16frozen.profile` をご覧いただくと容易に分かるように、どのようなディレクトリ構成でもインストールできます[^neednotTLYYYY]。

[^neednotTLYYYY]: ほんまに `/some/where/texlive/YYYY` の「`texlive/YYYY`」ですらなくてもかまいません。

今回、あえて「`/opt/texlive/YYYY` にTeX Live YYYYをインストールする」というプロファイルにしました。
たとえば、標準の `/usr/local/texlive/YYYY` に TeX Live YYYYをインストールする場合は、このプロファイルに対して

``` sed
s|/opt/texlive|/usr/local/texlive|
```

の置換で十分です。

標準のTeX Directory Structure (TDS)を崩さなければ、kpath searchから自動的に `TEXDIR` が分かりますので、一度インストールした `/opt/texlive/YYYY` を丸ごと、 `/usr/local/texlive/YYYY` などに丸ごと持っていっても問題なく動作します。ここらへんは、 `texmf.cnf` のTDSに関する解説が別途必要になります（この解説も今回は割愛いたします）。

さらにTeX Live 2016にかぎらず、TeX Live YYYYをインストールする場合は、

```
https://texlive.texjp.org/YYYY/tlnet/install-tl-unx.tar.gz
```

をダウンロード、 `texadvent2017-tl16frozen.profile` の `2016` を `YYYY` に置換すれば十分です。

インストール構成： 2. フル構成インストール（`scheme-full`）
--------------------
通常、TeX Live YYYYの全パッケージのをインストールしておくのが無難です。

最近のTeX Live YYYYはおおよそ 4.5GBほどあります。このうち、

  * TEXDIR/texmf-dist/fonts: 2GB
  * TEXDIR/texmf-dist/doc: 2GB
  * TEXDIR/texmf-dist/src: 250MB

ほどあります。

それゆえ、単にビルド専用でTeX Liveをインストールしたり、どうせググるからdocもsrcも要らないっていう場合は、 `foo-doc`, `foo-src` のパッケージを除けばよいです（後述）。

また、フル構成 `scheme-full` を選ばずに、最小構成 `scheme-minimal` から最低限の日本語TeX環境を構築したい場合など、以下のような感じに変えてもよいでしょう。

```
selected_scheme scheme-minimal
collection-langjapanese 1
...
```

設定可能なscheme名やcollection名は、TeX Liveバージョンで大幅に変わることがないものの、TeX Live YYYYが変わることで使えなくなるものもありますので、要確認です（後述）。


プラットフォームの指定：3. Mac OS Xバイナリのみインストール（`x86_64-darwin`）
--------------------
通常、インストーラー `install-tl` がOSを自動判別して、最低限のバイナリが1つだけ選択されます。
最近の TeX Liveであれば、Mac OS X上で `install-tl` を動かすと、自動的に `x86_64-darwin` が選択されます。

実は、Mac OS X上から Linuxバイナリ `x86_64-linux`、Windowsバイナリ `win32` も各OSだけの TeX Live YYYY、もしくは、複数バイナリを混ぜた TeX Live YYYY を構成できます。実際には

```
TEXDIR/bin/win32
TEXDIR/bin/x86_64-linux
TEXDIR/bin/x86_64-darwin
```

があるかどうかだけで、標準のTDSであれば、各プラットフォームごとにここの場所を環境変数の `PATH` に入れるだけで、あとは kpath search で全部自動的にパスが解決されるからです。

それゆえに、例えば…、Macと同一構成なTeX Live YYYY環境をもつLinuxのそれを作りたい場合は、まとめて

```
binary_x86_64-darwin 1
binary_x86_64-linux 1
```

としておいて、 `/opt/texlive` なり `TEXDIR` なりまるごと tarball などで固めておけば十分となります。


ドキュメントファイルやソースファイルのインストール有無：4. ソースとドキュメントを除く（`texmf-dist/src`, `texmf-dist/doc`）
--------------------
`texadvent2017-tl16frozen.profile` で以下のようにしています。

```
option_doc 0
option_src 0
```

これらのオプションはデフォルトで `1` となっています。
どーせ、みんな、ググっちゃうから、ディスクの肥やしになる！？ドキュメントもソースも要らんかもですねー ;-)

保守やデスクトップ向け関連付けなどのオプション：5. その他オプションを調整
----------

### `option_adjustrepo 0`

インストーラーでインストール後、ネットワーク上からmirrorのtlnetからさらに更新を試みるオプションです。

しかしながら、今回は TeX Live YYYY frozenからインストールしますし、通常の場合であったとしても、これは `0` で良いと思います。

### `option_autobackup 0`, `option_backupdir tlpkg/backups`

`$ sudo tlmgr update` ごとに、過去のパッケージを順に `TEXDIR/tlpkg/backups` 以下に保持しておく機能です。

しかしながら、通常、これを使うユーザーはいないと推察できますし、 `TEXDIR/tlpkg/backups` に貯まっていくだけでディスク容量を食いますので、これも `0` であってよいと思います。

### `option_desktop_integration 0`, `option_file_assocs 0`, `option_menu_integration 0`
これらのオプションたちは、名前から推察できるとおり、おもにインストーラーでパッケージを展開後、 `mktexlsr`, `updmap-sys`, `fmtutils-sys` 後の後処理で、おもにWindows向けにTeXworksなりのデスクトップアプリケーション関連付けが行われます。

しかしながら、Windowsであっても、advanced userにとって、余計なお世話だと思いますので、これらもあらかじめ `0` にしていてよいと思います。

# 関連記事

 * [過去にリリースされたTeX Live YYYYをインストールしてみよう！](https://qiita.com/munepi/items/44117be9180ac7a86d82)

# 付録：過去3年分のTeX Live YYYYのインストーラープロファイル例集

## TeX Live 2017

```
selected_scheme scheme-full
TEXDIR /opt/texlive/2017
TEXMFCONFIG ~/.texlive2017/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /opt/texlive/texmf-local
TEXMFSYSCONFIG /opt/texlive/2017/texmf-config
TEXMFSYSVAR /opt/texlive/2017/texmf-var
TEXMFVAR ~/.texlive2017/texmf-var
binary_x86_64-darwin 1
collection-basic 1
collection-bibtexextra 1
collection-binextra 1
collection-context 1
collection-fontsextra 1
collection-fontsrecommended 1
collection-fontutils 1
collection-formatsextra 1
collection-games 1
collection-genericextra 1
collection-genericrecommended 1
collection-htmlxml 1
collection-humanities 1
collection-langafrican 1
collection-langarabic 1
collection-langchinese 1
collection-langcjk 1
collection-langcyrillic 1
collection-langczechslovak 1
collection-langenglish 1
collection-langeuropean 1
collection-langfrench 1
collection-langgerman 1
collection-langgreek 1
collection-langindic 1
collection-langitalian 1
collection-langjapanese 1
collection-langkorean 1
collection-langother 1
collection-langpolish 1
collection-langportuguese 1
collection-langspanish 1
collection-latex 1
collection-latexextra 1
collection-latexrecommended 1
collection-luatex 1
collection-mathscience 1
collection-metapost 1
collection-music 1
collection-omega 1
collection-pictures 1
collection-plainextra 1
collection-pstricks 1
collection-publishers 1
collection-texworks 1
collection-xetex 1
in_place 0
option_adjustrepo 0
option_autobackup 1
option_backupdir tlpkg/backups
option_desktop_integration 1
option_doc 1
option_file_assocs 1
option_fmt 1
option_letter 0
option_menu_integration 1
option_path 0
option_post_code 1
option_src 1
option_sys_bin /usr/local/bin
option_sys_info /usr/local/share/info
option_sys_man /usr/local/share/man
option_w32_multi_user 1
option_write18_restricted 1
portable 0
```

## TeX Live 2016

```
selected_scheme scheme-full
TEXDIR /opt/texlive/2016
TEXMFCONFIG ~/.texlive2016/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /opt/texlive/texmf-local
TEXMFSYSCONFIG /opt/texlive/2016/texmf-config
TEXMFSYSVAR /opt/texlive/2016/texmf-var
TEXMFVAR ~/.texlive2016/texmf-var
binary_x86_64-darwin 1
collection-basic 1
collection-bibtexextra 1
collection-binextra 1
collection-context 1
collection-fontsextra 1
collection-fontsrecommended 1
collection-fontutils 1
collection-formatsextra 1
collection-games 1
collection-genericextra 1
collection-genericrecommended 1
collection-htmlxml 1
collection-humanities 1
collection-langafrican 1
collection-langarabic 1
collection-langchinese 1
collection-langcjk 1
collection-langcyrillic 1
collection-langczechslovak 1
collection-langenglish 1
collection-langeuropean 1
collection-langfrench 1
collection-langgerman 1
collection-langgreek 1
collection-langindic 1
collection-langitalian 1
collection-langjapanese 1
collection-langkorean 1
collection-langother 1
collection-langpolish 1
collection-langportuguese 1
collection-langspanish 1
collection-latex 1
collection-latexextra 1
collection-latexrecommended 1
collection-luatex 1
collection-mathextra 1
collection-metapost 1
collection-music 1
collection-omega 1
collection-pictures 1
collection-plainextra 1
collection-pstricks 1
collection-publishers 1
collection-science 1
collection-texworks 1
collection-xetex 1
in_place 0
option_adjustrepo 1
option_autobackup 1
option_backupdir tlpkg/backups
option_desktop_integration 1
option_doc 1
option_file_assocs 1
option_fmt 1
option_letter 0
option_menu_integration 1
option_path 0
option_post_code 1
option_src 1
option_sys_bin /usr/local/bin
option_sys_info /usr/local/share/info
option_sys_man /usr/local/share/man
option_w32_multi_user 1
option_write18_restricted 1
portable 0
```

## TeX Live 2015

```
selected_scheme scheme-full
TEXDIR /opt/texlive/2015
TEXMFCONFIG ~/.texlive2015/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /opt/texlive/texmf-local
TEXMFSYSCONFIG /opt/texlive/2015/texmf-config
TEXMFSYSVAR /opt/texlive/2015/texmf-var
TEXMFVAR ~/.texlive2015/texmf-var
binary_x86_64-darwin 1
collection-basic 1
collection-bibtexextra 1
collection-binextra 1
collection-context 1
collection-fontsextra 1
collection-fontsrecommended 1
collection-fontutils 1
collection-formatsextra 1
collection-games 1
collection-genericextra 1
collection-genericrecommended 1
collection-htmlxml 1
collection-humanities 1
collection-langafrican 1
collection-langarabic 1
collection-langchinese 1
collection-langcjk 1
collection-langcyrillic 1
collection-langczechslovak 1
collection-langenglish 1
collection-langeuropean 1
collection-langfrench 1
collection-langgerman 1
collection-langgreek 1
collection-langindic 1
collection-langitalian 1
collection-langjapanese 1
collection-langkorean 1
collection-langother 1
collection-langpolish 1
collection-langportuguese 1
collection-langspanish 1
collection-latex 1
collection-latexextra 1
collection-latexrecommended 1
collection-luatex 1
collection-mathextra 1
collection-metapost 1
collection-music 1
collection-omega 1
collection-pictures 1
collection-plainextra 1
collection-pstricks 1
collection-publishers 1
collection-science 1
collection-texworks 1
collection-xetex 1
in_place 0
option_adjustrepo 1
option_autobackup 1
option_backupdir tlpkg/backups
option_desktop_integration 1
option_doc 1
option_file_assocs 1
option_fmt 1
option_letter 0
option_menu_integration 1
option_path 0
option_post_code 1
option_src 1
option_sys_bin /usr/local/bin
option_sys_info /usr/local/share/info
option_sys_man /usr/local/share/man
option_w32_multi_user 1
option_write18_restricted 1
portable 0
```




-----

以上、 `texmf.cnf` の TDS の説明以外で、インストーラーのインストーラープロファイルに関わる解説をざーっとしてみました。