読者です 読者をやめる 読者になる 読者になる

TeXとかhomebrewとか

以前、TeXを使おうと思ってMacに導入したんだけどうまく行かなかったという話をしたの、覚えてはりますかね。この記事なんですけども。

irucame.hateblo.jp

その問題は結局解決したんですが、どうやら1つのPCの中に何故かバージョンの違うTeXが2つあるという事が判明し、それを取り除くための作業を教えてもらいながら進めることにしました。最後の最後で本質的な問題っぽい事が発生したので、その対策でいろいろやった記録をメモとして残しておきたいと思います。
誰かの参考になれば……なるのかな?

その① Configuration file texmf.cnf not found! に遭遇した

そもそも、1つのPCに2つのTeXが存在していたという状態が事の発端だったわけです。

$ echo $PATH 
/usr/local/bin:/usr/local/texlive/2015/bin/うんぬん

これが僕のPCのPATHなのですが、どうやら /usr/local/bin にもTeXで用いるコマンドが入っていたらしく、そこから読み取っていたため発生したエラーだったわけです。本当はtexlive/2015/bin のとこに入っているので、本当はそっちから読み取ってほしいわけ。

これの対処法は簡単で、

$ echo $PATH 
/usr/local/texlive/2015/bin/うんぬん:/usr/local/bin

こうやってPATHを先に記述するだけで良かったらしい。

九条駅の例えは前回のあれでも言いましたが、もうちょっとわかりやすく言うと、

A「西大寺から出発して九条駅を探して欲しい」
B「わかりましたー」

というわけです。
ただ、Aさんは「①奈良線阪神線、②橿原線、③京都線」の順番で探して欲しかったのに、Bさんは「①橿原線、②奈良線阪神線、③京都線」の順番で探してたため、お互いが想定している駅が全く違い、その後の会話に齟齬が発生したというわけ。

A「駅前に阪神高速あるやろ?」
B「いや、溜池しかないけど」

みたいな。


まあとりあえず解決できて良かったです。
何日も悩んでいた割には、あっさりとした終わり方でした。

その② /usr/local/bin に紛れ込んだ TeXを削除する

TeX関連の問題は①ですべて解決してしまったんですが、やっぱり手元に別バージョンのモノが2つも存在しているのは気分の良い話ではないです。
①の方法を教えてもらった方に「どうせなら古いバージョンのTeX消しちゃいません?」と提案され、それならばと教えてもらいながら進めました。

まずはその方法について、簡単に記しておきます。

① /usr/local/ に存在しているものを、新たに作成したディレクトリに移動
mv /usr/local/[a-su-z]* /usr/local/*****/

*****は任意のディレクトリ名です。
texliveとか大文字のディレクトリが残っていればOKですよ。

② *****へ移動し、ファイルリストを作る。
find [a-su-z]* -type l -ls | awk '/ -> / && /\/Cellar\// { gsub(/ ->.*/, ""); gsub(/.* /,""); print}' > /tmp/brew-files

ぶっちゃけた話、これは何をしてるのかよくわからなかった。
こんなのよく思いつくなあという感じです。条件に該当するファイルを find して /tmp/brew-files に print していると言う感じでしょうか。ディレクトリごと移動したので、そこから必要な物だけ抽出するためのリストって感じでしょうね。

そして、その後

echo bin/brew >> /tmp/brew-files

をしました。これは brew で使うものを /tmp/brew-files に追加したという感じかな?

③ homebrew関連を復元する
rsync -a --files-from /tmp/brew-files . /usr/local/ABCDE

を実行する。ABCDEは任意の名前で良いらしく、mkdirしなくても自動生成されました。
rsync コマンドなんてモノは初めて見ました。やってることはcpと大して変わらない気がしたんですが、cpがコピーならrsyncは差分コピーらしいので負荷がかかりにくいらしいですよ。mkdirしなくても良いんならこれ結構便利なのでは。

④ *****ディレクトリのものを /usr/local/ に移動する

mvしましょう。そのあと*****は消しておこうね。

これでうまくいくと思いますよ。僕はrsyncでエラーが出ましたけど、理由はディレクトリの位置がおかしかったからでした。何はともあれ、これで古いTeXは除去できたっぽいです。

その③ fatal: git-write-tree: error building treesに遭遇した

brew update を行うと、エラーが発生してupdate出来なくなりました。
これがとても困った困った。とりあえずエラー文貼ります。

share/doc/homebrew/brew.1.html: needs merge
share/man/man1/brew.1: needs merge
share/doc/homebrew/brew.1.html: needs merge
share/man/man1/brew.1: needs merge
share/doc/homebrew/brew.1.html: unmerged
(148feeca33d802c37fb9a06f39d5765b36f8f368)
share/doc/homebrew/brew.1.html: unmerged
(eb15e764fc5a9cee86b91ba0acdb9425fef39a41)
share/man/man1/brew.1: unmerged (aa8175eda907017362d98f99443c8bfb06aa12f2)
share/man/man1/brew.1: unmerged (3e75ccb3f278bfcc98119ddae725b238566d899d)
fatal: git-write-tree: error building trees
Cannot save the current index state
Error: Failure while executing: git stash save --include-untracked --quiet


なんとかしないとhomebrewが使えないのでとても面倒なことになってしまうわけです。ということでここを参考に解決を試みます。
っていうかぼくGit入れた覚え無いんだけどなあ。*1

qiita.com

$ cd /usr/local
$ git add .
$ git stash
$ git reset --hard

これを順番通りに行っていくと、git stashを行った時点で

Permission denied (publickey).

やら

HEAD is now at 128f031 pandoc: disable aesni on <= 10.7

というエラーが。
Permisson denied と言われても、そもそも拒否られるような事した覚えがないし、許可した覚えもない。GitHubに公開鍵登録したら解決するらしいんだけど、じゃあ今までそんなことしてなかったのになんで今更?という思いのほうが強くなるばかり。

あ、ここ参考にしました。sbkro.hatenablog.jp

うん、まあ素直に登録しときゃあ良いのかもしれないけど、今まで brew update 出来ていたのに何故突然?という気持ちのほうが強かったし、GitHubを意図的に使ったことはなく*2、あまりこれ以上手を広げて事態をややこしくしたくなかったというのが本音。

Head is...の方なんて、調べると英語のサイトしか出て来ないし、うわあ英語サイトかあ、でもまあ仕方ないかあと思って開いてもどこにも見当たらない*3。もう一度、ダメ元で brew update をしても堂々巡りである。

その③ HEAD is now at 128f031 pandoc: disable aesni on <= 10.7

正直な所、詰んでいる。

Gitをインストールしなおせば良いのかな?と思って実行してみたが、Git が最新バージョンになっただけでエラーは変わらず。となるとやるべき手段は homebrew の再インストールである。むかし、ruby を齧ってみようと思ってその環境を整えるために導入したのが確かhomebrewだったので、そのサイトをもう一度読みながらインストールすることにした。ちなみにrubyは齧ったまましばらくほったらかしである。

消す前に「ここ消えるけど良いの?」と言われたところだけバックアップしておき、一度アンインストール。その後インストール。ここはまあ割と簡単に終わった。ちなみにバックアップしたのは /usr/local/Cellar と /usr/local/Library だったと思う。

インストールが終わった後、これらのディレクトリを無理やりコピペして上書きした。
そのあと、

 brew doctor

をすると幾つかがlinkされてなかったので、

 brew link  rbenv

みたいな感じでlinkされて無かったのをlinkしました。最後にbrew doctorをすると、「異常はないよ」と言ってきたのでこれでなんとかなったっぽいです。ここまでで1週間と何日かかかりました。とりあえず、同じような状況で困っている人がいたら参考にしてみてください。参考になるかは分からないけど。

ほかに何か思い出したら追記しておきます。
あと後半はちょっと雑なのでまた体裁は整え直します。

*1:どうやら備え付けらしい

*2:プログラムやらコマンドやらが間接的にってのはもしかしたらあるのかもしれない

*3:こういう時はたいてい探し方が悪かったりするわけなのだが