MONOを動かせないか試行錯誤するページ(FreeBSD4.xサーバー用) -XSPはデーモンなのでインストール禁止 -- 動かすと サーバーが鈍くなる *説明 -ダウンロード --&link(monoトップ,http://go-mono.com/) --&link(monoソース ダウンロード ,http://go-mono.com/sources/) --&link(mono resently source,http://svn.myrealbox.com/viewcvs/branches/) --http://www.mono-project.com/Mono:FreeBSD -解説 http://www.atmarkit.co.jp/fdotnet/special/mono10_02/mono10_02_04.html *解決済の問題 **configureの問題 ***bisonが無くて停止する。 -bisonをインストールすることで解決。 ***glib2が無くて停止する。 -[[glib2]]をインストールすることで解決。 --glib2のconfigureの引数に--enable-sharedを与えたほうがいい? **makeの問題 ,monoコンパイル ,make,× ,gmake,○ ,コンパイル済みのmcsバイナリがある環境でないとコンパイルできない。 ***glib.hが無い。 -mono/monoburg/Makefile.inを修正する。 -490行目に$(CPPFLAGS)を追加 --修正前 ---( monoburg$(BUILD_EXEEXT): $(srcdir)/monoburg.c $(srcdir)/monoburg.h parser.c $(CC_FOR_BUILD) -o $@ $(srcdir)/monoburg.c parser.c $(INCLUDES) $(LDFLAGS) $(BUILD_GLIB_LIBS) ---) --修正後 ---( monoburg$(BUILD_EXEEXT): $(srcdir)/monoburg.c $(srcdir)/monoburg.h parser.c $(CC_FOR_BUILD) -o $@ $(srcdir)/monoburg.c parser.c $(INCLUDES) $(CPPFLAGS) $(LDFLAGS) $(BUILD_GLIB_LIBS) ---) -%edit mono/monoburg/Makefile.in で編集をする場合、CTRL+Vでページ移動するか CTRL+Yで検索word指定して、CTRL+Xで移動するといい。 ***'g_malloc0'でエラーが出て停止する -glib2のconfigureの引数を変えて再インストールで解決 --enable-shared ***In file included from sys-xattr.c:45: ---( mph.h:155: warning: `visibility' attribute directive ignored sys-xattr.c:103: `EXTATTR_NAMESPACE_USER' undeclared here (not in a function) sys-xattr.c:103: initializer element is not constant ---) さくらのファイルが古いのが原因 EXTATTR_NAMESPACE_USER などが 定義されていない ---( * $FreeBSD: src/sys/sys/extattr.h,v 1.3 2000/01/19 06:07:34 rwatson Exp $ */ ---) ネットで調べたら↓ 定義されている。  置き換え方法 探し中 ---( * FreeBSD: src/sys/sys/extattr.h,v 1.12 2003/06/04 04:04:24 rwatson Exp */ ifndef _SYS_EXTATTR_H_ #define _SYS_EXTATTR_H_ #define EXTATTR_NAMESPACE_USER 0x00000001 #define EXTATTR_NAMESPACE_USER_STRING "user" #define EXTATTR_NAMESPACE_SYSTEM 0x00000002 #define EXTATTR_NAMESPACE_SYSTEM_STRING "system" ---) -freebsd.org から拾ってきた &link(extattr.h,http://cvsup.pt.freebsd.org/cgi-bin/cvsweb/cvsweb.cgi/src/sys/sys/extattr.h) を $HOME/local/include/sysに置く。 -- -I$prefix/include/glib-2.0 -I$prefix/lib/glib-2.0/include -I$prefix/include/glib-2.0/glib -I$prefix/include/glib-2.0/gobject -I$HOME/local/include *未解決の問題 **Making all in runtime gmakeだとフリーズする。 ---( gmake PROFILE=basic all gmake[5]: Entering directory "build/rules.make", line 64: Could not find /build/config-default.make "build/rules.make", line 79: Could not find /build/platforms/linux.make "build/rules.make", line 96: Could not find /build/profiles/default.make ---) makeだとフリーズはしないけど、止まる。 ---( Making all in net_1_1 Making all in net_2_0 Making all in runtime if test -w ../mcs; then :; else chmod -R +w ../mcs; fi cd ../mcs && make PROFILES='default net_2_0' all-profiles "Makefile", line 36: Need an operator (略) "build/rules.make", line 121: Need an operator "build/rules.make", line 132: Need an operator "build/rules.make", line 134: Need an operator make: fatal errors encountered -- cannot continue *** Error code 1 ---) edit mcs/build/rules.make include $(topdir)/build/config-default.make -include $(topdir)/build/pre-config.make include ./build/config-default.make -include ./build/pre-config.make -- makeがmcs/build/rules.make の$(shell を認識していないのが原因?っぽい -- ここでは、たとえば、./aフォルダがあると、./..を返すようになっいる -- つまり 上のフォルダ名を..に置換している -- なので . に置換するとまずいかもしれない。 -- FreeBSDのmakeとgmakeは別物なのでmonoはgmakeを使うことと書いてあった。 ''(1)の変数群'' ---( # Make sure these propagate if set manually export PLATFORM export PROFILE export MCS export MCS_FLAGS export CC export CFLAGS export INSTALL export MKINSTALLDIRS export TEST_HARNESS export BOOTSTRAP_MCS export DESTDIR export RESGEN ---) -- makeだと エラー表示でとまります -- gmakeだと フリーズみたいで 強制的に(CTRL+C)ぬけないといけなくなります --そこ .configureのときに (1)の変数群に値をセットしないといけないらしい --- PLATFORM=linux とかするみたい ソースコード調査中 --- gmake 使うことで解決 -- 解決(成功事例参照) --cd mcsしてgmakeすると --どうやらmscorlib.dllがないと騒いでいる -- /home/ユーザー名/local/lib/mono/1.0/ --cd mono --gmake --gmake install -- monoだけならインストール可能 -- mcsなどをどうするかが問題 -- FreeBSD用mono (※FreeBSD5移行用なので、手直しが必要<後述>) --( mono ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/mono-1.1.9.2_3.tbz ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/mono-tools-1.1.9_1.tbz PORTSDIR,PREFIX PORTSDIRは、さくら管理下の$HOME/portsと重ならない方がいいかも --) -備考 --( --prefix="/home/ユーザー名/mono" の場合 # .bashrc export PATH="/home/ユーザー名/local/mono/bin:$PATH" export PKG_CONFIG_PATH="/home/ユーザー名/local/mono/lib/pkgconfig:$PKG_CONFIG_PATH" export MANPATH="/home/ユーザー名/local/mono/man:$MANPATH" export LD_LIBRARY_PATH="/home/ユーザー名/local/mono/lib:$LD_LIBRARY_PATH" # .cshrc setenv PATH "/home/ユーザー名/local/mono/bin:$PATH" setenv PKG_CONFIG_PATH "/home/ユーザー名/local/mono/lib/pkgconfig:$PKG_CONFIG_PATH" setenv MANPATH "/home/ユーザー名/local/mono/man:$MANPATH" setenv LD_LIBRARY_PATH "/home/ユーザー名/local/mono/lib:$LD_LIBRARY_PATH" --) ***[2005/12/30 04:45] -&link(mono-1.0.6,http://www.go-mono.com/archive/1.0.6/mono-1.0.6.tar.gz) なら、make は通ったけど、make install で下記メッセージが表示された直後にフリーズ orz ---( Making install in net_1_1 test -z "/home/アカウント名/local/lib" || mkdir -p -- . "/home/アカウント名/local/lib" /usr/bin/install -c -m 644 'mscorlib.dll' '/home/アカウント名/local/lib/mscorlib.dll' MONO_PATH=. ../../mono/mini/mono --config (略) ---) -そのとき動いていた(暴走していた)プロセスで関係ありそうなもの。 ---( /bin/sh -ec set fnord $MAKEFLAGS; amf=$2; dot_seen=no; target=`echo install-recursive | sed s/-recursiv /bin/sh -ec if test -n 'Accessibility.dll ByteFX.Data.dll Commons.Xml.Relaxng.dll cscompmgd.dll I18N.CJK. /(略)/mono-1.0.6/mono/mini/.libs/lt-mono --config ../../data/config ./../gacutil.e ---) -それでも気にせずに単純に mono ってやると正常動作(使い方の表示)なんだけど、mono &link(example.exe,http://www-06.ibm.com/jp/developerworks/linux/051007/j_l-mono.shtml) ってやると、正常動作(My first mono app worked! と表示)したように見えて、フリーズする orz -ここまで(bison-2.1・libiconv-1.9.1・gettext-0.14.5・glib-2.8.4・mono-1.0.6)で、ディスク容量 70MB 程度消費。 *** [2006/1/4] -2006/1/4 [今度は pkg_add から攻める] --( さくらサーバ内へログイン %mono pkg_add -f -p $HOME/local/mono -t "$HOME/var/tmp /var/tmp" mono-1.1.9.2_3.tbz ELF interpreter /libexec/ld-elf.so.1 not found Abort (@_@) くじけたって〜 --) -2006/1/4 [今度はportsから攻める] --( さくらサーバ内へログイン cd $HOME/local/ports/lang/mono make install clean ===> mono-1.1.9.2_3 Does not work on 4.X and 5.X before 503000. ・・・makeできなくたって 平気だもん・・・まけないもん (@_@) しぇるの中では腕がうなるわぁ edit MakeFile 503000の 5を4に変える ※ ports,pkg_addを使うにはmanで環境変数を確認後代入すること --) *成功事例 ** mono 1.1.9.2 (成功 2006.1. 10-11) --( ・/libexec/ld-elf.so.1エラー対策して [[参考ページ:]] ・glibなど必要な物インストール。 ・extattr.h もインストール 1.1.9.2 mono/dis/get.c http://lists.ximian.com/pipermail/mono-patches/2005-December/068223.html + gboolean normal; - if (! isnormal (r)) + normal = finite (r); + if (!normal) // gboolean normal;は 最初のほうに置くこと ◆FreeBSD5以降用のmonoパッケージ を強制インストール wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/mono-1.1.9.2_3.tbz pkg_add -f -p $HOME/local/mono -t "$HOME/var/tmp /var/tmp" mono-1.1.9.2_3.tbz # 注:$HOME/local/mono-1.1.9.2とかするのもよし。 ◆ 次にソースをひろってきます wget http://go-mono.com/sources/mono-1.1/mono-1.1.9.2.tar.gz tart zxvf mono-1.1.9.2.tar.gz cd mono-1.1.9.2 edit mono/dis/get.c (上記の修正をする) ./configure --prefix="$HOME/local/mono" CPPFLAGS="$BUILD_GLIB_CFLAGS -I$HOME/local/include" LDFLAGS="$LDFLAGS" --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib -with-crosspkgdir=$HOME/local/libdata/pkgconfig PLATFORM=linux PROFILE=default コンパイル gmake  フリーズしたところで中断して 再度 mono/gmakeして確認 cd mono/ gmake gmake install これで monoがFreeBDS用にできあがる % mono -V ...1.1.9.2   ばっちり % mono HelloCS.exe Hello World using C#  ぱんぱかぱーん 動きました (^o^)/  ◆※ $HOME/local/mono/bin ないのファイルで /usr/localになっていたら(なっている)  /usrを /home/ユーザー名/local/mono/ chmod で書き込み権つけて $HOME/local/mono/bin を編集して 権利を元に戻す  たくさんあるのでperl,phpなどでスクリプト書いて自動修正するとらく ※critical エラーがでた場合はメッセージに沿って ipcs -c を確認 ipcrm -s 番号 で 不要なメッセージを消すと さくらで うごきました --) -- 実験 その1 --( program test1; {$APPTYPE CONSOLE} uses SysUtils; begin writeln(FormatDateTime('yyyy-mm-dd hh:mm:ss',Now)); end. %mono test1.exe Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for test1.Units.test1 ---> System.TypeInitializationException: An exception was thrown by the type initializer for Borland.Vcl.Units.SysUtils ---> System.EntryPointNotFoundException: GetVersionEx in (wrapper managed-to-native) Borland.Vcl.Units.Windows:GetVersionEx (Borland.Vcl._OSVERSIONINFO&) in <0x00056> Borland.Vcl.Units.SysUtils:InitPlatformId () in <0x00043> Borland.Vcl.Units.SysUtils:Borland.Vcl.SysUtils () in <0x005d4> Borland.Vcl.Units.SysUtils:.cctor ()--- End of inner exception stack trace --- in <0x00000> in (wrapper managed-to-native) System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor (intptr) in <0x00018> System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor (RuntimeTypeHandle type) in <0x00024> test1.Units.test1:.cctor ()--- End of inner exception stack trace --- どうやら delphi.netは 動かないらしい。 --) -- 実験 その2 --( using System; namespace test_c1 { /// /// Class の概要の説明 /// class Class { /// /// アプリケーションのメインエントリポイントです。 /// [STAThread] static void Main(string[] args) { // // TODO: アプリケーションを開始するコードをここに追加 // string s; s = DateTime.Now.ToString(); Console.WriteLine(s); } } } %mono test_c1.exe 01/11/2006 17:52:24 とりあえず、Delphi C#, MS C# は 動くらしい --) * [2006/1/10]  - まだ試していませんけど monoもどき発見 - http://www.dotgnu.org/ - ASPには対応していないらしい。(mono使えと書いてあった) *xsp ,mod_mono - tar zxvf http://go-mono.com/sources/xsp/xsp-1.1.13.tar.gz - cd xsp-1.1.13 -./configure --prefix=$HOME/local/xsp - make install clean -- $HOME/local/xsp/mod-mono-server --http://www.atmarkit.co.jp/fdotnet/special/mono10_02/mono10_02_04.html ---ローカルで実験中 --( xspだと正常表示だが、mod_monoを使うとエラー 原因は Inherits されているとエラーで表示されない どうもmod_monoは Windows製asp.netの動作がよろしくない phpみたいにcgi-modeのxspを呼出で解決 --) *xsp を試しにさくらで実行してみるミソ -cd $HOME/local/xsp/bin -%./xsp --port 80 --( xsp Listening on port: 80 (non-secure) Listening on address: 0.0.0.0 Root directory: ...../local/xsp/bin Error: Access denied --) -%./xsp --root $HOME/local/xsp/lib/xsp/test --( xsp Listening on port: 8080 (non-secure) Listening on address: 0.0.0.0 Root directory: /home/....../local/xsp/lib/xsp/test Hit Return to stop the server. Application_Start Application_End ・基本ドメイン、追加、独自だろうと http://....:8080/ で起動するみたい。  でも 同時にどれかからアクセスすると 固まる。 ・夜は 負荷が高くて落ちる(起動に10秒くらい)。(使い物にならないレベル) --) -- すいているときに 動かすと loadavarage が+0.5くらいになる -- 起動し続けると 常駐あつかいになるので、すみやかに終了すること(ページ内参照) -- 暴走していないか確認すること http://www.atmarkit.co.jp/flinux/rensai/linuxtips/213hungpend.html *libgdiplus -X11が入っていないので ./configureで 怒られる --さくらでは 共有サーバーである限りたぶんコンパイルなど不可能 -- (容量的にプレミアムなら可能かも) ---専用サーバーなら管理権限があるので自分でいれるといい。 *まとめ - .net プログラムで単純出力なら可能 -間違った物をいれると「ごみ」ファイルがたまるので最悪のときは$HOME/local再インストール覚悟で挑戦すること --local 消して正しくいれたら200MB減った -純粋にasp.netサーバーがやりたいなら、1000/月のレンサバもあるのでそちらを使う方が楽ちん。 *考察 -専用サーバーなら おそらく普通に動作可能 -共有サーバーは、xspは 常駐型なので禁止事項 - .net exeの動作は可能。 【コンソールexeの利用価値があるのかは疑問】。 --【どうしてもC#しか使えないよー】とか【特別な処理をバックでさせたい】 っていう人は別だが・・・ *感想 ・mod_mono 動かし鯛。 *番外編 --Qemuを使ってローカルにFreeBSDをいれてコンパイルする --以下今回は不要と判明  --( http://www.h7.dion.ne.jp/~qemu-win/index-ja.html 作成 (注意:Fat32 4Gまで) 時間:1,2秒 qemu-img create -f vmdk freebsd.vmdk 10G FreeBSDインストールisoファイルダウンロード 時間:数分〜 インストール 時間:数十分〜数時間 START qemu.exe -L . -m 256 -hda freebsd.vmdk -localtime -cdrom 6.0-RELEASE-i386-bootonly.iso -boot d 起動 START qemu.exe -L . -m 256 -hda freebsd.vmdk -localtime ・実験環境構築中 ・QemuよりVMの方が数倍速い. ので VM playerの使い方HPを探すといい 6.0-RELEASE-i386-bootonly.iso ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/ をダウンロードしてftpでインストールするといい。 FullCDイメージだとかなり時間(数時間)がかかる。FTPは10分程度で終わる ※インストール後rootのパスワードを入れること。passwd  そのままにしてグラフィカルログインに変えるとログインできなくて死にます  おかげで再インストール中(>_<) # /home --> /usr/home then へのリンクがあれば、 # サーバーと違うから邪魔なのでリンクを消して 新規作成または移動 $ rm -r /home /usr/home存在しないとき $ mkdir /home あるとき $ mv /usr/home / グラフィカルログインの設定 ・http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/x-xdm.html ・http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/x11-wm.html 最後に さくらと同じユーザー名を作成して(adduser)、さくらと同じ手順で必要な物を そのユーザーでインストールして同じ状態にするっと さくらと同じFreeBSD4.10発見 ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ floppies/kern.flp mfsroot.flp コピーして エミュなどから起動 注意; インストール ftpは自分で指定;ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/4.10-RELEASE pkg_addは-r はURL古くて通らないので環境変数に代入しておくこと setenv PACKAGESITE ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-4-stable/Latest/