Big Sur で Perl がインストールできない
Big Sur に Perl 5.32.0 入れようとすると Unexpected product version 11.0 とか言われて入らないのしぶいな。
— nipotan (谷口公一) (@nipotan) December 16, 2020
Configure (インストールスクリプト) で darwin のバージョンが 10.*
かどうかをチェックしているようで、11.x
な Big Sur を入れようとするとインストールが止まる。
解決方法
Configueのエラーのようなので、このPRのパッチをいれるとビルド出来るかなと思いますhttps://t.co/8rWoZBxBya
— 八雲アナグラ (@AnaTofuZ) December 16, 2020
八雲アナグラさんより教えていただきました。
pull request の patch
GitHub の pull request の差分を patch ファイルとして手に入れる場合は、pull request の URL の末尾に .patch
を付けてアクセスすると patch ファイルへとリダイレクトされるので、https://github.com/Perl/perl5/pull/17946 の patch ファイルは、コマンドラインから
$ curl -LO https://github.com/Perl/perl5/pull/17946.patch
と curl
に -L
オプションをつけると取得できる。
patch をあててインストール
展開して patch をあてたら、いつものおまじない
$ tar zxvf perl-5.32.0.tar.gz
$ cd perl-5.32.0
$ patch -p1 < 17946.patch
$ sh Configure -de && make && make test && sudo make install
こんな感じでイケるよう。
plenv で入れたい
plenv で install したいので、自動で tarball を取得し、自動でいつものおまじないが行われるまでの間に介入して patch をあてたいが、介入が許されない。
ただ plenv の場合、一度取得した tarball があればそれを再利用する。なので、わざと一度失敗してその後再利用される tarball を展開して patch をあてて固めて install するとかならいけそうと睨んだ。
やってみる
plenv install を一度失敗してみる
$ plenv install 5.32.0 --as 5.32
Unexpected product version 11.0
で怒られて予定通り失敗。
保存された tarball を展開し patch をあてて固める
$ cd ~/.plenv/cache
$ tar zxvf perl-5.32.0.tar.gz
$ cd perl-5.32.0
ここはさっき patch 当てたのと同じ手順
$ curl -LO https://github.com/Perl/perl5/pull/17946.patch
$ patch -p1 < 17946.patch
そして ~/.plenv/cache
の下で tarball に固める
$ cd ..
$ rm -f perl-5.32.0.tar.gz
$ tar zcvf perl-5.32.0.tar.gz perl-5.32.0
$ cd ~
これで、perl-5.32.0.tar.gz
は patch があてられたものになってる。
そして、そうとは知らない plenv は騙されて (?)、これを再利用してインストールしてくれるだろう。
plenv install 今度こそ成功を願う
$ plenv install 5.32.0 --as 5.32
がんばえぱーるえんゔ
確認
$ plenv versions
* system (set by /Users/nipotan/.plenv/version)
5.32
$ plenv global 5.32
$ perl -v
This is perl 5, version 32, subversion 0 (v5.32.0) built for darwin-2level
Copyright 1987-2020, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
はい。
やったね。
めでたしめでたし。
perlbrew は?
perlbrew の場合は対応済みで、install 時に自動的に hints/darwin.sh
に対し上記 patch をあてた上で install が実行されますので、普通にインストールできます。
$ perlbrew install perl-5.32.0 --as perl-5.32
$ perlbrew list
perl-5.32
$ perlbrew switch perl-5.32
$ perl -v
This is perl 5, version 32, subversion 0 (v5.32.0) built for darwin-2level
Copyright 1987-2020, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.