Sagemath の MacOS アプリの起動に2分かかる事象が SageMath-9.0.app
で解消しました. また, MacOS 10.15 Catalina の対応のためかアプリに署名がついたようです. なぜか, 私のMac (MacOS Mojave) ではインストールが少し難しくなってしまい, 曲がりなりのインストールになってしまいました.
ここに現状を報告します.
-
古い Notebook 形式を使い続ける場合は
- Jupyter Notebook に乗り換えるか,
-
SageMath-8.9.app
まででアップグレードを止めるか
の二者択一になります.
( Sagemath-9.0 は SageNB Notebook (Legacy Notebook) を開けない 参照 ) -
アプリのダブルクリックで Sagemath とJupyter Notebook を起動する使い方を優先する場合は,
- 起動の時間が2分から短縮して一瞬になった
SageMath-9.0.app
へのアップグレードも考慮に値しますが - デバッグに期待して,
SageMath-9.1.app
かSageMath-9.2.app
を待つことをお勧めします
- 起動の時間が2分から短縮して一瞬になった
実際に試した使用環境
- 作業記録の日付 2020年01月21日--02月01日 (起動成功は1月22日, その後はトラブルの同定にかかった日数です.)
- 機械: MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) -- 計測時間関連
- macOS Mojave 10.14.6 (
Finder
→境設定
→すべてのファイル名拡張子を表示
に √ ) - SageMath-9.0.app (ディストリビューションは
sage-9.0-OSX_10.15.2-x86_64.app.dmg
) - システム環境設定の一般のデフォルトの Web ブラウザは
Safari
2020年は MacOS のアプリの検証の仕組の大幅な変更の年になるようです.
この記事にあるインストール方法はすぐに陳腐化する可能性があります.
ここ数年, MacOS のアプリの検証の仕組みの変化が続いていますので, ここで紹介するインストール方法や動作テストの結果は macOS Mojave と密接に関連していてい macOS High Sierra にも macOS Catalina にも通用しない可能性があります.
参考資料
-
DYNY
さんのContents Creation Lab
内のMac で「壊れているため開けません。 ゴミ箱に入れる必要があります。」と弾かれたときの対処法とは? -
@zeriyoshi
さん(Qiita) の macOSアプリにオレオレ再署名する(e.g. 夜フクロウを省電力に改造してみる) -
@noby111
さん(Qiita)の macOS の App Notarization について
が参考になりました.
SageMath-9.0.app を MacOS Mojave にインストールする
SageMath-9.0.app のディスクイメージファイルダウンロード
作業アカウント: どちらかというと管理者アカウント以外を推奨
まず, 公式サイトのダウンロード・ページ(のミラーサイト)から SageMath-9.0.app のディスクイメージファイルをゲットします.
- Sagemath の公式ホームページに行きます.
Google だとSagemath
を検索して,
タイトル SageMath - Open-Source Mathematical Software System を見つけて移動します. -
Download 9.0
ボタンをクリックして
SageMath - Download Binaries に移動します. (このボタンのバージョン・ナンバーは Sagemath の最新バージョンに追従するようです. ) - 近所のミラー・サイトを選んでクリックします.
(日本でインストールする場合はRiken, Japan
→ Sage Mirror かYamagata University, JP
→ Sage Mirror で OK です. ) -
Sage Mirror Content
→Apple Mac OS X — binaries for Intel and PowerPC systems
のApple Mac OS X
をクリックします.
(理研の場合は SageMath Download - osx に移動になります.) -
Files
→Intel
をクリックします.
(理研の場合は SageMath Download - osx/intel に移動になります.) - ファイルのリストから
sage-9.0-OSX_10.15.2-x86_64.app.dmg
を見つけてクリックします.
ダウンロードの許可を求めるダイアログが出たら許可
ボタンをクリックします.
転送エラーによるファイルの破損が心配な場合は転送したファイルのボタンのすぐ下のMD5
の行をテキストエディターにコピペするなどしてテキストファイルに保存しておきます.
管理者アカウント以外でダウンロードした場合は, 管理者アカウントからアクセスできる場所にディスクイメージファイル (と MD5
の行を保存したテキストファイル) を移します.
ディスクイメージファイルのマウント
作業アカウント: 管理者アカウントを推奨, ウィルス対策の優先度が非常に高い場合は管理者アカウント以外で試した上で管理者アカウントで実行
ディスクイメージファイルのマウントはウィルス対策ソフトと相性が悪いことがあります. そのため, ここの手順はウィルス対策ソフトの癖によって若干変化します. ディスクイメージファイルの破損を疑いたくなる状況もあるかと思いますので, 点検の仕方から書き起こします.
- ディスクイメージファイルは内部でチェックサムによる検証がありますので,
md5
を自分で使って転送結果を検証する必要はないはずです . それでも転送エラーによるファイルの破損が心配だという場合はmd5
コマンドでチェックすることができます. Terminal.app でディスクイメージファイルを置いてあるフォルダーに移動してからmd5
コマンドにディスクイメージファイルを引数として渡します.
myhome$ $ md5 sage-9.0-OSX_10.15.2-x86_64.app.dmg
MD5 (sage-9.0-OSX_10.15.2-x86_64.app.dmg) = eb2e6040c863718a8944f7012b9475f2
この結果を公式サイト(のミラー)からコピペしたデータと比較して一致していれば大丈夫です.
-
MacOS の異常終了の対策よりウィルス対策を優先する場合は, 起動中のソフトを全て終了させてから,
sage-9.0-OSX_10.15.2-x86_64.app.dmg
をダブルクリックしてマウントしてみます. ディスクイメージファイルの検証で時間がかかりますが, そのすぐ後のボリューム検証まで無事に終わるとデスクトップにsage-9.0-OSX_10.15.2-x86_64
というディスクが出てきます.
これがうまくいった時は次のステップをスキップします. うまく行かなかった場合は, ディスクイメージの検証終了の後のボリュームの検証に入ったところで
Mac の電源が切れてしまいます. この異常終了の前にファンが回る音が聴こえる場合と聴こえない場合があります. -
MacOSの異常終了の回避を優先する場合や, 異常終了が起きてしまった場合は,
ウィルス対策ソフトのリアルタイム・スキャンを一時的に停止してからsage-9.0-OSX_10.15.2-x86_64.app.dmg
をマウントして, マウント完了後(デスクトップにsage-9.0-OSX_10.15.2-x86_64
というドライブのアイコンが出てきた後) すぐにリアルタイム・スキャンを再開します. ここで,sage-9.0-OSX_10.15.2-x86_64
に手動でウィルス・スキャンを掛けておくと, 同じアカウントでsage-9.0-OSX_10.15.2-x86_64.app.dmg
を再度マウントするときにウィルス対策ソフトのリアルタイム・スキャンが ON のままでよくなるようです. (私は管理者アカウントでマウントしてウィルス・スキャンをしてからユーザーアカウントでこの記事を執筆中に, ドライブ名を確認する目的でsage-9.0-OSX_10.15.2-x86_64.app.dmg
をダブルクリックしてMacOS異常終了の憂き目に遭いました. 再起動後, 管理者アカウントでウィルス対策ソフトのリアルタイム・スキャンを ON にした状態でsage-9.0-OSX_10.15.2-x86_64.app.dmg
をマウントしてドライブ名を無事確認することができました.)
アプリ SageMath-9.0.app
のコピー
作業アカウント: 管理者アカウント推奨
アプリ SageMath-9.0.app
を /Applications
にコピーします.
- アプリ
SageMath-9.0.app
をsage-9.0-OSX_10.15.2-x86_64
から/Applications
にコピーします. (管理者アカウント以外の場合はパスワード入力の手続が入ります.)
ここまでの手順を発見した後に SageMath-9.0.app
を削除してログインしなおしてから時間計測の目的で作業を最初から行ったところ, マウント開始からコピー終了までの時間は 15分でした.
アプリ SageMath-9.0.app
の実行許可
作業アカウント: 直前のステップおよび直後のステップと同じアカウントで実行してトラブルを防ぐことを推奨
- MacOS のアプリ検証機能を一時停止して SageMath-9.0.app の実行許可を設定します.
具体的には, Terminal.app で
myhome$ sudo spctl --master-disable
というコマンドを使用してから, /Applications/SageMath-9.0.app
をダブルクリックして, その後出てくる検証のダイアログで 開く
ボタンをクリックしてから Terminal.app で
myhome$ sudo spctl --master-enable
というコマンドを実行します.
MacOS のアプリ検証機能を停止せずに /Applications/SageMath-9.0.app
をダブルクリックしてしまうと検証が始まって 5 分後ぐらいに /Applications/SageMath-9.0.app
が壊れているという内容のダイアログが出てきます. 私はその状態になってから状況を調べて, MacOS のアプリ検証機能を一時停止してこのステップの手順を試しました. その時は MacOS によるアプリの検証が少し短かったように思います.
SageMath-9.0.app のローカリゼーション
作業アカウント: SageMath-9.0を /Applications
にコピーしたときと同一のアカウントということが必須条件です. (異なるアカウントの場合は chown
コマンドを再帰的に使用してファイルの所有者を変更しないとパッチ当ての作業ができないという事情です. chown
を使う処理を使う場合のローカリゼーションの動作は確認していません.)
最近の SageMath-X.X.app に共通の事情で SageMath-9.0.app
の起動の際にダイアログがでたり, 様々な Web ページが出てきたりします. インストール作業中の対応の仕方はこのステップの本体の後に注意書きを入れておきますので, 作業の前に目を通しておいて下さい.
SageMath-X.X.app のローカリゼーションはパス名のパッチ当てです. SageMath-8.9.app までは(Sagemath 実行時に動的に読込む目的であらかじめコンパイルしてあるプログラムの)ライブラリーにパッチを当てていましたが, SageMath-9.0.app は同梱のソースコードにパッチを当てる方法に変更になっているようです.
-
SageMath-9.0.app
をシステムにローカライズします.
具体的には Terminal.app でコマンド
myhone$ /Applications/SageMath-9.0.app/sage
を打つか /Applications/SageMath-9.0.app
をダブルクリックするかします.
ローカライズの作業の中身は Sagemath 内で使うパス名のパッチ当てです. Terminal.app を使う方の手順では パス名のパッチのメッセージが流れていってからポーズがあって, 最後に sage:
というプロンプトが出てきますので, exit
関数でクイットします.
sage: exit()
/Applications/SageMath-9.0.app
をダブルクリックする場合は loading-page.htmel
や Jupyter のログインページがブラウザーで出てくるまで待ちます.
ローカリゼーションの所要時間は 1〜2分でした.
ダイアログについて (1)
この作業の途中で Read-only Sage
のダイアログが出てしまった場合は, quit
して /Applications/SageMath-9.0.app
の所有権を点検して下さい. その所有者のアカウントでローカライズすればよいはずです. 誤ってディスクイメージの方の SageMath-9.0.app
をダブルクリックしてしまって場合もこのメッセージが出ますので, ディスクイメージ sage-9.0-OSX_10.15.2-x86_64
をイジェクトしてから /Applications/SageMath-9.0.app
をダブルクリックしてやり直して下さい.
ダイアログについて(2)
この作業の途中で Please choose a Jupyter Directory
のダイアログが出てきた場合は, Sagemath のファイル専用に使うフォルダーを指定して下さい. Sagemath-8.9 専用の既存のフォルダーがある場合はそのフォルダーを指定して大丈夫だと思います.
ダイアログについて (3)
この作業の途中で Sage Notebook Upgrade
のダイアログが出てきた場合は, とりあえず Ask me Later
をクリックして作業を続けて下さい.
Jupyter のログインページについて (1)
Jupyter のパスワードの設定がまだの場合は Jupyter のログインページが少し変化します. ~/Library/Logs/sage.log
の最後の方の行の http://localhost:8888/?token=...
の ...
の部分のトークンを入力してログインするページになると思います. ただし, Jupyter のパスワードを SageMath-8.9 で設定してある場合はパスワードが引き継がれるようです.
Jupyter のログインページについて (2)
Sagemath の MacOS アプリは Jupyter のログインページ (http://localhost:8888
など) をスキップして Jupyter Home
(http://localhost:8888/tree
) に直接すすむことがあります.
loading-page.html
について (1)
loading-page.html
のJupyter
-ボタンは http://localhost:8080
に繋がっていますが, 正しくは http://localhost:8888
です. /Applications/SageMath-9.0.app
を起動してから Jupyter のログインページが出てくるのが遅い場合は, ブラウザーでアドレス http://localhost:8888
を開いて下さい. (Sagemath の Jupyter Server を複数起動すると, ポート番号が 1 ずつ増えていきます. )
loading-page.html
について (2)
Sagemath の起動の際, ブラウザーが自動的に立ち上がってから, loading-page.html
の表示が出てくるまでに2分間かかるという症状が SageMath-8.9 までにありましたが, SageMath-9.0 では解消したようです. ログ・ファイル周辺のバグが変化したことによるものと思われます.
SageMath-9.0.app の起動
作業アカウント: ディスクイメージファイルのマウントからのやり直しに備えて管理者アカウントで最初にテストすることを推奨します.
一度, ブラウザーを終了させて, メニュー・バーの Sagemath からメニューのクイットを選択して Sagemath の方も終了させた上で, /Applications/SageMath-9.0.app
をダブルクリックすると, 今度も loading-page.html
とJupyter のページがすぐに出てきます.
ここのところは, システム環境設定の 一般
タブのデフォルトの Web ブラウザが Safari
の場合です. デフォルトの Web ブラウザが SageMath-9.0.app
の場合は起動できない場合があります.
当面の対応は Safari
をデフォルトの Web ブラウザにすることです.
利用者アカウントで SageMath-9.0 を起動するときは Read-only Sage
というダイアログが出てきますので, Continue
というボタンをクリックすると Sagemath が起動します.
Sagemath-9.0 は SageNB Notebook (Legacy Notebook) を開けない
Sagemath-9.0 では loading-page.htmel
の SageNB interface
-ボタンをクリックしても古い Notebook 形式 ( = Legacy Notebook = SageNB Notebook ≒ sws-ファイル) を扱う Web インターフェイスが出てきません.
SageMath-8.9
のメニューの Start SageNB Server
を選択すると
Sage Server failed to start
というダイアログが出てきて, SageNB Server
の起動が拒否されてしまいます.
そのダイアログが出た後, Sagemath のメニューの Server
→ View Log
からログファイル ~/Library/Logs/sage.log
を確認すると.
CRITICAL:root:trying to use old notebook under Python 3
old notebook not working under Python 3, use Jupyter notebook
see https://wiki.sagemath.org/Python3-Switch
というメッセージが出ていました.
このメッセージを頼りにソースファイルを調べてみると, 該当する変更箇所が見つかりました.
myhome$ diff sage-{8.9,9.0}/src/bin/sage-notebook
1c1
< #!/usr/bin/env sage-python23
---
> #!/usr/bin/env sage-python
81c81
< then rebuild Python (sage -f python2).
---
> then rebuild Python (sage -f python3).
251a252,257
> if sys.version_info.major == 3 and args.notebook == "sagenb":
> logger.critical('trying to use old notebook under Python 3')
> print('old notebook not working under Python 3, use Jupyter notebook')
> print('see https://wiki.sagemath.org/Python3-Switch')
> sys.exit(1)
最後の行で SageNB Server の起動を拒否していることがわかります.
コマンドラインから起動を試みても同じ状況です.
まず, sage
コマンドを実行して notebook()
を使用すると sagenb
という モジュールが無いというエラーが出ます. ヘルプ機能を使っても同じ状況でした.
myhome$ /Applications/SageMath-9.0/sage
sage: notebook?
....
ModuleNotFoundError: No module named 'sagenb'
次に, コマンドラインから --notebook
オプションを使用して Web インターフェイスを起動した場合, Jupyter
と Old Sage Notebook
のボタンが出てきますが, Old Sage Notebook
ボタンをクリックすると, The Sage Notebook failed to start :-(
というエラーメッセージがでます. (この Web インターフェイスは自動的に出てくる場合, Jupyter のログインページが自動的にでてきてログインすると遷移する場合, ブラウザーで http://localhost:8888/
を開いてログインしてから遷移する場合があります. )
裏では Terminal.app にエラーメッセージが出ていました.
myhome$ /Applications/SageMath-9.0/sage --notebook
...
ModuleNotFoundError: No module named 'sagenb'
今度は, コマンドラインから直接 SageNB Server を起動しようとして, オプション --notebook=sagenb
を使用すると sage.log
に記録されていたものと同じエラーメッセージが出てきました.
myhome$ /Applications/SageMath-9.0/sage --notebook=sagenb
CRITICAL:root:trying to use old notebook under Python 3
old notebook not working under Python 3, use Jupyter notebook
see https://wiki.sagemath.org/Python3-Switch
以上, どの方法を使っても SageNB Server は起動できませんでした.