tlmgr経由でTeX Live 2013の構成のまま、TeX Live 2013からTeX Live 2014 frozen, 2015 pretestへ更新されちゃった件

みなさん、[#テフライブ！](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) していますか？

:::note
いまのtlmgrは、

```
$ tlmgr update --self --all

tlmgr: Local TeX Live (手元の古いバージョン) is older than remote repository (リポジトリの新しいバージョン).
```

となります!!
:::

前回のテフライブ！、「[過去にリリースされたTeX Live YYYYをインストールしてみよう！](http://qiita.com/munepi/items/44117be9180ac7a86d82)」で紹介したTeX Live histonicを踏まえて、本件を喚起します。

なお、現時点2015年5月16日現在、TeX Live各種状況は以下のとおりです。

 * 最新版：TeX Live 2014 frozen（TeX Live 2014の最終更新状態）
 * 各[CTAN mirrors](http://mirror.ctan.org/) に同梱されている [systems/texlive](http://mirror.ctan.org/systems/texlive/tlnet)：TeX Live 2014 frozen
 * 次期TeX Liveの状態：TeX Live 2015 pretest


## 例1：TeX Live 2013がTeX Live 2014 frozen, TeX Live 2015 pretestへ更新される

### TeX Live 2014 frozenへ更新

TeX Live 2013を以下のような状態でインストールしているとします。

 * TeX Live 2013のインストール先：`/some/where/texlive/2013`
 * tlmgrが扱う主要tlnetリポジトリ：http://mirror.ctan.org/systems/texlive/tlnet

この状態において、`$ sudo tlmgr update --self --all` を実行すると、まず、`--self` により texlive.infra が更新されて、そこから `/some/where/texlive/2013` のまま、現時点のCTAN mirrorsに同梱されているtlnetの状態TeX Live 2014 frozenへ追従されてしまいます。

```
$ sudo tlmgr update --self --all
TeX Live 2013 is frozen forever and will no
longer be updated.  This happens in preparation for a new release.

If you're interested in helping to pretest the new release (when
pretests are available), please read http://tug.org/texlive/pretest.html.
Otherwise, just wait, and the new release will be ready in due time.
tlmgr: package repository http://mirror.ctan.org/systems/texlive/tlnet
[1/2, ??:??/??:??] update: texlive.infra [203k] (32920 -> 35898) ... done
[2/2, 00:01/00:02] update: texlive.infra.x86_64-darwin [230k] (29809 -> 33484) ... done
Restarting tlmgr to complete update ...
TeX Live 2014 is frozen forever and will no
longer be updated.  This happens in preparation for a new release.

If you're interested in helping to pretest the new release (when
pretests are available), please read http://tug.org/texlive/pretest.html.
Otherwise, just wait, and the new release will be ready in due time.
tlmgr: package repository http://mirror.ctan.org/systems/texlive/tlnet
[ 1/39, ??:??/??:??] update: bibtex.x86_64-darwin [68k] (29879 -> 34201) ... done
(snip)
[39/39, 00:33/00:33] update: xdvi [7k] (30339 -> 33736) ... done
tlmgr: package log updated: /some/where/texlive/2013/texmf-var/web2c/tlmgr.log
running mktexlsr ...
done running mktexlsr.
running updmap-sys ...
done running updmap-sys.
regenerating fmtutil.cnf in /some/where/texlive/2013/texmf-var
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luajittex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luajittex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luatex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luatex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine tex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine tex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine pdftex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine pdftex.
running fmtutil-sys --no-error-if-no-engine=luajittex --byfmt mf ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --byfmt mf.
$ 
```

TeXのバージョンとパスを確認すると、確かにTeX Live 2014になっています。

```
$ tex --version 
TeX 3.14159265 (TeX Live 2014)
kpathsea version 6.2.0
Copyright 2014 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the TeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
```

### TeX Live 2015 pretestへ更新

さらに、TeX Live 2015 pretest へリポジトリを変更し、`$ sudo tlmgr update --self --all` を実行すると、TeX Live 2015 pretestへ追従されてしまいます。

```
$ sudo tlmgr update --self --all
tlmgr: package repository http://example.com/tlpretest/tlnet
[1/2, ??:??/??:??] update: texlive.infra [207k] (35898 -> 37344) ... done
[2/2, 00:00/00:00] update: texlive.infra.x86_64-darwin [249k] (33484 -> 36831) ... done
Restarting tlmgr to complete update ...
tlmgr: package repository http://example.com/tlpretest/tlnet
[ 1/35, ??:??/??:??] update: bibtex.x86_64-darwin [68k] (34201 -> 36892) ... done
(snip)
[35/35, 00:08/00:08] update: xdvi [7k] (33736 -> 37078) ... done
tlmgr: package log updated: /some/where/texlive/2013/texmf-var/web2c/tlmgr.log
running mktexlsr ...
done running mktexlsr.
running updmap-sys ...
done running updmap-sys.
regenerating fmtutil.cnf in /some/where/texlive/2013/texmf-dist
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine tex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine tex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine pdftex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine pdftex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luatex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luatex.
running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luajittex ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --no-error-if-no-format --byengine luajittex.
running fmtutil-sys --no-error-if-no-engine=luajittex --byfmt mf ...
done running fmtutil-sys --no-error-if-no-engine=luajittex --byfmt mf.
$ 
```

TeXのバージョンとパスを確認すると、確かにTeX Live 2015になっています。

```
$ tex --version 
TeX 3.14159265 (TeX Live 2015)
kpathsea version 6.2.1
Copyright 2015 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the TeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
```

## 例2：TeX Live 2012は、tlmgrによりTeX Live 2013以降に更新されない。

tlnetのリポジトリを http://mirror.ctan.org/systems/texlive/tlnet （TeX Live 2014 frozen）に向けると、TeX Live 2013以降に更新されません。

```bash
$ sudo tlmgr update --self --all
tlmgr: The TeX Live versions supported by the repository
  (2013--2014)
do not include the version of the local installation
  (2012).
```

## tlmgrの遷移と検証

tlnetリポジトリ先のtexlive.tlpdbに記述されている `depend minrelease/YYYY`, `depend release/YYYY` を確認し、`depend release/YYYY` >= 手元のバージョン >= `depend minrelease/YYYY` であれば、`depend release/YYYY` へ更新されます。

実際に、tlmgrに以下のようなコメントがあります。

```
  # we allow a range of years to be specified by the remote tlpdb
  # for which it might work.
  # the lower limit is TLPDB->config_minrelease
  # the upper limit is TLPDB->config_release
  # if the later is not present only the year in config_release is accepted
  # checks are done on the first 4 digits only
  # Why only the first four places: some optional network distributions
  # might use
  #   release/2009-foobar
  # If it should work for 2009 and 2010, please use
  #   minrelease/2009-foobar
  #   release/2010-foobar
```

以下に必要な情報をまとめてみました。

| TeX Live | depend minrelease/YYYY | depend release/YYYY | texlive.tlpdb |
|:---------|------------|---------|--------------:|
| 2009 frozen | --- | 2009 | ftp://tug.org/texlive/historic/2009/tlnet/tlpkg/texlive.tlpdb |
| 2010 frozen | --- | 2010 | ftp://tug.org/texlive/historic/2010/tlnet-final/tlpkg/texlive.tlpdb |
| 2011 frozen | 2010 | 2011 | ftp://tug.org/texlive/historic/2011/tlnet-final/tlpkg/texlive.tlpdb |
| 2012 frozen | 2012 | 2012 | ftp://tug.org/texlive/historic/2012/tlnet-final/tlpkg/texlive.tlpdb |
| 2013 frozen | 2013 | 2013 | ftp://tug.org/texlive/historic/2013/tlnet-final/tlpkg/texlive.tlpdb |
| 2014 frozen | 2013 | 2014 | ftp://tug.org/texlive/historic/2014/tlnet-final/tlpkg/texlive.tlpdb |
| 2015 frozen | 2013 | 2015 | ftp://tug.org/texlive/historic/2015/tlnet-final/tlpkg/texlive.tlpdb |
| 2016 frozen | 2016 | 2016 | ftp://tug.org/texlive/historic/2016/tlnet-final/tlpkg/texlive.tlpdb |
| 2017 frozen | 2016 | 2017 | ftp://tug.org/texlive/historic/2017/tlnet-final/tlpkg/texlive.tlpdb |
| 2018 frozen | 2016 | 2018 | ftp://tug.org/texlive/historic/2018/tlnet-final/tlpkg/texlive.tlpdb |
| 2019 frozen | 2016 | 2019 | ftp://tug.org/texlive/historic/2019/tlnet-final/tlpkg/texlive.tlpdb |
| 2020 frozen | 2016 | 2020 | ftp://tug.org/texlive/historic/2020/tlnet-final/tlpkg/texlive.tlpdb |
| 2021 frozen | 2016 | 2021 | ftp://tug.org/texlive/historic/2021/tlnet-final/tlpkg/texlive.tlpdb |
| 2022 frozen | 2016 | 2022 | ftp://tug.org/texlive/historic/2022/tlnet-final/tlpkg/texlive.tlpdb |
| 2023 current | 2016 | 2023 | NA |


tlmgrの遷移とともに、texlive.tlpdbの仕様変更、TDSの変更があり、上記のようになっているように推察できます。

## 問題！？　喚起！？

ユーザが「TeX Live 2013を標準でインストール（つまり、tlnetリポジトリ先が[CTAN mirror](http://mirror.ctan.org/systems/texlive/tlnet)（または、直ミラー））していたら、`$ sudo tlmgr update --self --all` を実行することで、TeX Live 2014 frozen、さらにもうすぐすると、TeX Live 2015 release に更新される」ことを期待している、もしくは、把握しているのでしょうか？

TeX Liveが純然たる fixed release を前提としているんだったら、やっぱりYYYY frozenになったら、そこで止めておくべきじゃないかな。つまり、TeX Live YYYYがfrozenになったとき、もしtlmgrが参照するtlnetリポジトリ先が http://mirror.ctan.org/systems/texlive/tlnet である場合にかぎり、 ftp://tug.org/texlive/historic/YYYY/tlnet-final に書き換えてしまうのがよいように思います。

もっともTeX Liveの構造がそんなに難しくないので、どんどんrolling upgradeにしていく手もあります。その場合は、tlmgrにupgradeアクションなんかを明示的に作るべきですね。

## 日本で本件が影響ありそうなTeX Live 2013ユーザ

「［改訂第6版］LaTeX2e 美文書作成入門」のインストーラーを使ってインストールしたTeX Live 2013ユーザ！

## まとめ

TeX Live 2013を標準でインストールしていたら、`$ sudo tlmgr update --self --all` を実行することで、TeX Live 2014 frozen、さらにもうすぐすると、TeX Live 2015 release に更新されてしまいます。とくに、「［改訂第6版］LaTeX2e 美文書作成入門」のTeX Live 2013をご利用の方は、tlmgrによる更新をせずに、そのままご利用なさる方が、書籍との記述に違いが生じにくく、良いかもしれません。