bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Ubuntuに搭載の代数幾何学用ソフトMacaulay2を遠隔操作でWindowsマシンより利用する

表現可能関手の記事を書いているときに、表現可能という専門用語が代数幾何学からの由来であるらしいことを知り、代数幾何学を少しでも理解しようとして、よさそうな参考資料を探して読んでいるときに、Macaulay2と呼ばれるソフトがあることを知った。これは、代数幾何学(algebraic geometry)と可換環論(commutative algebra)での研究を支援するために開発されたそうである。

1992年からアメリカ国立科学財団(National Science Foundation)の基金を得て開発が始まったとのことなので、どこかで聞いたかもしれないのだが、興味がなかったために見過ごしたものと思われる。代数幾何学の勉強のついでに、Macaulay2について少し調べてみると、グレブナー基底(Gröbner bases)によるアルゴリズムを含んでいるということなので、少し使ってみようと思い立ち、自宅のコンピュータへのインストールを試みた。その時の経験を記しておこう。

Macaulay2はLinuxの環境でしかサポートされていないということだったので、Ubuntuをインストールしてあるが、普段は使っていないコンピュータを利用することにした。これは、元々はwindouws7が搭載されていたデスクトップコンピュータだったが、利用価値がなくなったので、Linux用にと変えたものである。調べてみると、このマシンのバージョンは19.10で、今年5月9日にリリースされた最新のバージョンに簡単にはアップグレードすることができないことが分かった。このマシンにはLatexHaskellを搭載し何かのときに利用していたので、これらが再実装になることに気後れもしたが、通常リリース(試験的なバージョンといったほうが適切)の19.10ではこれからも困ると思い、最新の長期サポートリリースのUbuntu20.04をインストールすることにした。

インストールそのものはいたって簡単。まずUbuntu Japanese TeamからUbuntu Desktop 20.04LTSをダウンロードしてインストールすればよいはずだったのだが、DVD-RWに書かれていた前のバージョンを消去して焼直したのだが、このとき表面をきれいに掃除するのをさぼったため、正しく書き込まれにくい状態になっていた。さらにさぼって焼いた後の確認作業を省き次の作業に移ったため、インストール中に予想もつかない様々なエラーが発生し、無駄な時間を費やしてしまった。再度焼き直し、インストールを開始したところスムーズに進み、タイムゾーンとユーザ情報の設定などをして使える状態になった。急がば回れの格言通りで、手抜きをしてはいけないと改めて反省した。

そしていよいよMacaulay2のインストールだ。18.04に対しての説明はあちらこちらにあるのだが、20.04についてはなかなか見つからない。リリースされてからあまり日がたっていないので、まだなのかとあきらめかけたころ、イリノイ大学の数学科のサイトにやっと適切な記事を見つけることができた。 
https://faculty.math.illinois.edu/Macaulay2/Downloads/GNU-Linux/Ubuntu/index.html
先ほどの作業ではないが、このホームページもかなり手抜きで、大学のホームページにもかかわらずその背景にある考え方が説明されていない手順書になっていて、なぜこのようなことをしているのかを理解できないまま、指示に沿って操作を進めざるを得なかったことに不満が残った。インストールした後に分かったことだが、要は公開鍵暗号方式を利用して、実行可能なバイナリのプログラムをダウンロードするということであった。このため、私の側には、公開鍵とMacaulay2のプログラム名を用意しておく必要がある。プログラム名は

deb https://faculty.math.illinois.edu/Macaulay2/Repositories/Ubuntu focal main

で、最後のほうにあるfocalは、リリース20.04のコードネームである。この名前はファイル/etc/apt/sources.list内に記憶する必要があるので、エディタのnanoを用いて行った。公開鍵の格納はいくつかの方法が紹介されていたので、今回は次を用いた。

sudo apt-key adv --keyserver hkp://keys.gnupg.net --recv-key CD9C0E09B0C780943A1AD85553F8BD99F40DCB31

Macaulay2のインストールにはSynapticと呼ばれるパッケージマネジャを用いる。Ubunuをインストールした段階では、このパッケージは含まれていなかった。今回はUbuntuソフトウェアセンターを用いて「Synaptic」で検索してインストールした。起動したSynapticの画面で、「再読込」をクリックすると、公開鍵とプログラム名を用いて、Macaulay2をロードできる状態にしてくれる。Synapticの左上にカテゴリーを示す場所があるので、数学にすると、右側にmacaulay2とmacaulay2-commonが現れるので、これにチェックを入れ、「適用」のボタンを押すとインストールされる。インストールされていれば下図のようになる。
f:id:bitterharvest:20200607144208p:plain

これでOKなので、M2と入力すれば使うことができる。

しかし直接では記録も残らないので、emacsから使えるようにした。このため、ホームディレクトリの直下に.emacsファイルを作成し、下記を書き込んだ(プログラムの実行は、emacsと打ち込み、emacsの画面が出てきたらF12のキーを押す)。

;; .emacs file in your home directory
 (load "M2-init")
 ; comment out the following line with an initial semicolon 
 ; if you want to use your f12 key for something else
 ; or change f12 to (for example) f8
 (global-set-key [ f12 ] 'M2)

このようにして準備したマシンだが、残念なことに使い勝手が悪いところに置かれている。そこで通常使っているWindows10のマシンから遠隔操作で利用できるように試みた。やはり18.04に対してはたくさんの説明があるのにもかかわらず、20.04に関してはかなり少ない。18.04ではUbuntu側は画面共有を用いて遠隔操作を実現していたが、同じように20.04で設定してもうまくつながらない。そうこうしているうちに、20.04では繋がらないという記事を見かけたので、別の方法をとることにした。いろいろと試行錯誤の末、VNCを用いることにした。Windows側にはUltraVNCを用いることにし、クライアントとしての利用だけなので、いくつかあるユーティリティの中から、UltraVNC Viewerのみをインストールした。

Ubuntu側にはつぎのようにしてVNCサーバーをインストールした。

sudo apt -y install tigervnc-standalone-server

パスワードの設定も

vncpasswd

VNCに必要なファイルを作成するために、一度起動する。

vncserver :1

そして停止する。

vncserver -kill :1

作成されたファイルに必要な事項を追加する。ここではデスクトップとしてMateを使用することにしたので、/.vnc/xstartupに次の事項を書き込んだ。なおUbuntuをインストールした段階ではMateは用意されていなかったので、ubuntu-mate-disktopをインストールした。

unset DBUS_SESSION_BUS_ADDRESS
exec /usr/bin/mate-session &

これでUbuntu側の準備は完了なので、VNCを起動する。

vncserver :1 -geometry 1280x1024 -localhost no

なお、サーバ側(Ubuntu)のIPアドレスはifconfigで調べられる。

クライアント側ではUltraVNC Viewrを起動する。IPアドレスが要求されるので、アドレスを入れた後にコーロン(:)をつけ、そのあとに1をつけて「connect」ボタンを押す。
f:id:bitterharvest:20200607153811p:plain:w400


パスワードが求められるので、Ubuntu側でのサーバーの設定の時に、vncpasswdで指定したものを入れる。Windows側にUbuntuの画面が現れる(中央右がUbuntuのデスクトップ)。
f:id:bitterharvest:20200608061131p:plain
なお、VNCの安全性を強化するためにSSH(secure shell)接続を行う必要があるが、これはMark Drakeさんのブログ"How to Install and Configure VNC on Ubuntu 20.04"を参照して欲しい。

Windows10からUbuntu20.04に実装されているMacaulay2を利用したのが下記の画面である。多項式\(x^3-y^2\)を代入し、そのイデアルと根基イデアル(グレブナー基底計算を利用)を求めた。この例は、横田博史さんのMacaulay2の紹介(平成22年1月27日)にあるので、詳細はこれを参考にして欲しい。
f:id:bitterharvest:20200607155849p:plain

インストール後の感想である。久しぶりのUbuntuの利用のためインストールに手間取ったものの、使い勝手が良さそうなので、しばらくこれを利用してMacaulay2を楽しもうと思っている。