SageMath-9.0.app
のデバッグのために, とにかくコンパイルしてみることにしました. コンパイルの前提条件を読むと難しそうな感じなのですが, 最近の MacOS でコンパイルする場合は, ソースコードをダウンロードしてきて, make
コマンドを実行するだけでできるようです.
デバッグ用の出力を増やして, 起動時のトラブルの調査でクラッシュする直前の情報の収集に向けて一歩進むことができました.
実際に試した使用環境
- macOS Mojave 10.14.6
- Xcode Version 11.1 (11A1027)
- Command Line Tools (macOS Mojave version 10.4) for Xcode 10.3
- Sage-9.0
- 作業記録 2020年03月 23日〜26日
Sagemath-9.0 のソースのダウンロード
公式サイト Sagemath に行って, 右上の隅の Source Code
というボタンをクリックします.
Source Code Distribution というページに遷移します.
- 寄り道: ここで, ミラーサイトのすぐ下の,
Information
もところを読むと, 「Sagemath
のコンパイルはソースをゲットして, ソースツリーを展開したらmake
コマンドをパラメーターなしで実行すると一発でコンパイルできる.」という内容が書いてあります. 最近の MacOS の場合はこの記述が該当するようです.
次にミラーサイトを選びます. 日本でダウンロードする場合は理研 Riken, Japan か山形大学 Yamagata University, JP で OK です. 次に, sage-9.0.tar.gz
をクリックしてダウンロードを開始します.
- 寄り道:
changelogs
はsage-6.8.p0.txt
で止まっています. - 寄り道:
README.txt
も 2015-04-17 という日付で止まっています.README.txt
の中を読むと dependencies を揃えてからコンパイルする雰囲気ですが, 最近の MacOS の場合は気にしなくていいようです.
ブラウザーのダウンロード先のフォルダーに sage-9.0
というフォルダーがでてきます. これを判かり易い場所に移します.
デバッグの目的でコンパイルする場合は, sage-9.0.tar.gz
自体を残しておいた方がよいので, ゴミ箱から回収してどこかに仕舞っておきます.
ブラウザーで自動展開のオプションを切っていれば, sage-9.0.tar.gz
がダウンロード先のフォルダーにあるはずで, これを判かり易い場所に移してからダブルクリックすれば sage-9.0
というフォルダーがでてきます.
Xcode について
Apple 提供の Xcode
はコンパイラーを含む統合開発環境です. Xcode commad-line tools
はシェルから Xcode
の機能を使うためのパッケージです. バージョンやリリースが上がるときに使用許諾条件みないなものが変化することがあるようです. 実際, 昔は mac に同梱ですぐに使えたのですが, 最近はだんだん厳しくなってきて, 登録や使用許諾条件の同意が必要になったりしているようです.
また, バージョンやリリースによって, AppStore
でダウンロードして使えたり, AppStore
からのダウンロードがフリーズしたり , ダウンロードできても, うまく動かなかったりすることがあるようです. そういう場合は, developer.apple.com
からダウンロードして使うことになっているようです. こちらの方も Apple ID
でサインアップするようになってきています.
素直なバージョンの場合は Xcode
がダウンロードできている状態で
myhome$ xcode-select --install
というコマンドを実行するとソフトウェアがダウンロードできますので,
myhome$ sudo xcodebuild -license
というコマンドを実行して, ライセンスに同意 agree
すると, Xcode commad-line tools
が使えるようにまります.
その辺の情報を Qiita で調べてみました.
-
@leo1109
さんの Xcodeインストールメモ(Xcode-10.2.1) -
@royroy
さんの macOSでcommand line tools for xcodeとhomebrewのインストール -
@___inon_
さんの Command Line Toolsを手動でインストールする
私自身は既にライセンスに同意する手続もしてありますので, 以上の記事の内容をなぞって検証することは諦めました.
Sagemath-9.0 のコンパイル
Sagemath から Help/Documentation
ボタンで 遷移すると Help and Support に遷移します. その中の SageMath standard documentation
という節の Installation Guide
をクリックすると Welcome to the SageMath Installation Guide に遷移します. ここから Install from Source Code
をクリックすると, Install from Source Code というページが見つかります.
ここの Prerequisites
という節を見ると, GCC
の gfortran
を作らないといけないのだろうか, gfortran
とバージョンを合わせるために C
と C++
もコンパイルしないといけないのだろうか, ar
や ranlib
のバージョンは大丈夫だろうかなど心配になってきます.
実際のところ, これは杞憂になっていて, ソースツリーのトップで
myhome/sage-9.0$ make
を実行すると, コマンドラインからの起動用の Sagemath-9.0
のコンパイルができます. (コマンド名は make
コマンドを実行したフォルダーの直下の sage
です.) gfortran
も自動的にコンパイルしてもらえました.
コンパイル開始前にチェックしておかないといけない注意点があります.
注意点に進む前に, Macアプリのコンパイルの仕方を書いておきます.
myhome/sage-9.0$ cd src/mac-app
myhome/sage-9.0/src/mac-app$ make
を実行すると, Macアプリができます.
また, Macアプリを格納したディスクイメージファイルもできます.
現在の注意点は6項目です.
まず, コマンドラインから起動する Sagemath-9.0
についてです.
- MacBookPro などノートの場合は, 機械が過熱するため 3月でもクーリング用のファンを使う状態でした.
- MacBookPro 2018 年モデルでもコンパイルは 5時間かかりました. Mac を電源につないで作業しました. 機械がスリープしないように設定するか, Mac を見張ってときどき Mac を起こすかする必要があります.
- この方法でコンパイルしてできたソフトウェアは配置場所を変更すると正常動作ができなくなります. sagemath/binary-pkg を使って "relocatable" にしないといけないらしいのですが, その方法の調査はまだできていません.
Sagemath-9.0
を/usr/local/bin
などにおいて使う場合は,Sagemath-9.0
の置き場所をあらかじめ環境変数で指定する必要があるようです. 現状では unix 系のパワーユーザー以外はユーザーのホームフォルダー内のどこかにSageMath-9.0.app
をおいて使用するという考え方のようです. - 環境変数
SAGE_FAT_BINARY
をセットせずにmake
すると, コンパイル時の機械専用のSagemath-9.0
ができます. スピードが速いという利点がある一方で, 他の機械に移して使うことができないという欠点があります. - コンパイル開始から4時間ぐらいすると
“java”コマンドラインツールを使用するには、JDKをインストールする必要があります。
というポップアップが出てきます. これは放置して待てば OK です. ただし, ポップアップはかなりしつこくて, そのせいでワープロの入力などが難しくなってしまいます. Mac を使う他の用事がある時間を避けてコンパイルした方がよいと思います.
@yoshi-heita
さんの Catalina “java”コマンドラインツールを使用するには、JDKをインストールする必要があります。 (タイトルからブラケットを外してあります) や @github-nakasho
さんの "java"コマンドラインツールを使用するには...のポップアップを出さない方法 で対策の仕方を読みましたが, 既にコンパイル開始から 4時間になっていましたので, コンパイルに使っている Terminal.app
を起動し直すことを避けるため, 対策は先送りとしました. 今回のトラブルの原因が Web 周辺のことなのか, Terminal.app
自体なのかはよくわかりませんでした.
次に, ダブルクリックで起動する Macアプリについてです.
- コンパイルの際に陰で働く
Xcode
のバージョンがXcode Version 11.1 (11A1027)
の場合は予め設定が必要です. (同じ症状が他のバージョンでもでているようですが, 実際に使ったバージョンのこととして報告します.) 設定の仕方は,@eytyet
さんの エラー:xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance にあります. この設定の前のmake
では下記のエラーがでて, コンパイルが止まってしまいました.
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
次の課題
MacOS 上の Sagemath の普及のためには, Sagemath の Macアプリを使いやすくする必要がありますので, ユーザー環境の再現が次の課題になります. sagemath/binary-pkg
の使用法を点検して, SageMath-9.0.app の署名の問題と, MacOS Catalina での起動時のフォルダーの問題を調査します.