アジョブジ星通信

進捗が出た頃に更新されるブログ。

最新のMonoを使いたい人ための mono-snapshot

f:id:azyobuzin:20150827030127p:plain

こんばんは。課題やってない、文化祭のゲームもつくってない azyobuzin です。やはりブログは結論を先に書いておくほうが良いと学んだので無駄な経緯的前説はおいておいて本題をばばっと書いておきます。

ググればわかる基本的な使い方

http://www.mono-project.com/docs/getting-started/install/linux/ci-packages/ に各ディストリビューションでの mono-snapshot パッケージのインストール方法が書いてあります。 Debian リポジトリを試した結果、 2015/6 からの成功したビルドと昔のがぽつぽつ入っている感じです。

どれかひとつでもインストールすると

$ mono-snapshot
This script will help you to set up your environment to use a
snapshot package of Mono. To use it, run:

	. mono-snapshot APP/VER

You have the following possible combinations of APP/VER:

	mono/2015.08.22+02.26.20
	mono/20150501052837

Calling APP without specifying VER will load the latest version

といった具合にバージョンが選択できるようになります。表示にしたがって . mono-snapshot mono/VER を実行すると

$ . mono-snapshot mono/2015.08.22+02.26.20
[mono-2015.08.22+02.26.20]$ mono --version
Mono JIT compiler version 4.3.0 (tarball Sat Aug 22 02:46:14 UTC 2015)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	LLVM:          supported, not enabled.
	GC:            sgen

このように指定したバージョンの mono が実行できるよう Path が設定されます。. をつけなければいけないのはこの先で説明するように、実行中のシェルの環境変数をいじりたいからです。

以下細かい話。 Debian 版でしか試していません。

mono-snapshot コマンドの動作

mono-snapshot コマンドは /usr/share/mono-snapshot/packages.d/ にインストールされたスナップショットごとの設定スクリプトを叩くものです。 mono/2015.08.22+02.26.20 ならば、ファイルは /usr/share/mono-snapshot/packages.d/mono/2015.08.22+02.26.20 にあります。中身はこんな感じ。

#!/bin/bash

export MONO_PREFIX=/opt/mono-2015.08.22+02.26.20
export PATH=$MONO_PREFIX/bin:$PATH
export DYLD_LIBRARY_FALLBACK_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_FALLBACK_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:/usr/include:$C_INCLUDE_PATH
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal:$ACLOCAL_PATH
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/usr/share/pkgconfig
export PS1="[mono-2015.08.22+02.26.20]$PS1"

つまるところ環境変数を書き換えて、わかりやすいようにプロンプトにバージョンを表示させるという動作です。

バージョンを指定できることを活用しよう

上のスクリプトを見てわかる通り、各スナップショットは /opt/mono-VER にインストールされます。つまり、 /opt/mono-VER/bin/mono を叩けば狙ったバージョンの mono を利用できます。

NuGetCalc では MONO_PREFIX 変数だけ指定して mono/20150501052837 を動かしていますが、今のところ不具合はないです。

最後に



教えていただきありがとうございました。そして Stable も Beta も Alpha も 4.0.3 なんですけどこれは…。