2009年10月アーカイブ

SXCE は、2010 年 1 月中旬まで提供継続

| トラックバック(0)

おしっ!w
SXCE b131 までは提供を継続することが決まったらしい。

http://mail.opensolaris.org/pipermail/opensolaris-announce/2009-October/001310.html



Snow Leopard では zfs 関連のモジュールが抜かれ、いったいどうしたんだ?と騒ぎになりましたが、ここにきて、Apple がスポンサーとなりオープンソースソフトウェアをホスティングする Mac OS forge から ZFS Project 終了のお知らせが出て、更に大騒ぎとなっています。

ZFS の生みの親である Jeff Bonwick 氏からも多くを語れない短いコメントが出ていますが、やはり Oracle による Sun Microsystems の買収によりライセンスに関する問題によるものみたい。DTrace なみに入り込んでいれば、そうそうと外すこともできなかったのかなぁと思いつつ。

[zfs-discuss] Apple cans ZFS project
http://mail.opensolaris.org/pipermail/zfs-discuss/2009-October/033125.html

Apple が正式に Mac OS X へ ZFS を組み込もうとする ZFS Project は、無くなったに等しいかと考えられますが、そこはそれ。オープンソースソフトウェアです。
開発に関わっていた人々は、google code にホスティング先を移項し、継続をする意志を示しています。

maczfs
http://code.google.com/p/maczfs/

また、Snow Leopard 用の 32/64 bit module 入りの package も配布されています。
サクッと入れてみたところ、zpool version 8, zfs version 2 をサポートしている実装となり、GUID Partition table と連携する必要があるようですが、ZFS の基本的な機能は利用できるっぽいです。
こちらの開発が問題なく継続できれば、それほど悲観しなくても良いことになるかも。
mkfile で作成した file を使って、適当に pool を作成してみたりしましたが、zpool create した pool は、直後に finder に現れ読み書きすることができます。
残念ながら同じディスクに同居している Nevada の領域は zpool import でも見付けることができなかったので、GPT などが絡んでいるのかなと。

とりあえず、全てが終わったわけではないということでw



10月末は Solaris/OpenSolaris 関連の露出度高す

| トラックバック(0)

再来週は、イベントでの Solaris/OpenSolaris 関連の露出が多いですね!

    10/28 ITpro EXPO
          15:00〜15:40 デスクトップ仮想化、シンクライアント、デスクトップクラウド
          http://itpro.nikkeibp.co.jp/expo/2009/forum/view.html?c=TH5

          16:00〜16:40 サーバ仮想化のメリットを最大限に生かすOpenStorage
          http://itpro.nikkeibp.co.jp/expo/2009/forum/view.html?c=TH6

    10/29 ITproEXPO
          11:00〜11:40 グローバルな実績に基づくサンの仮想化・クラウド化のサービス
          http://itpro.nikkeibp.co.jp/expo/2009/forum/view.html?c=TH9

    10/30 Oracle VM Forum 2009 Tokyo/Fall
          15:20〜16:10 ZFSとOracle VMを連携させた門外不出の検証環境 構築手法
     http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=96741&src=6800476&src=6800476&Act=17#   

    10/30 OpenSolaris Night Seminar
          18:30 - 21:00
          http://jp.sun.com/company/events/2009/000410.html

    10/30 OSC 2009 Tokyo/Fall
          15:15 - 16:00 MySQL 〜いろいろあったりもしたけれど、私はげんきです〜
          http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=75

    10/30 Perfume Second Tour 2009 直角二等辺三角形TOUR
              横浜アリーナ

    10/31 OSC 2009 Tokyo/Fall
          10:15 - 11:00 OpenSolaris をほとんど知らない人々へ
          http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=30
          (なんという上から目線!w)


OptiBay Hard DriveKit for MacBook

| トラックバック(0)

2 ヶ月ほど前に、ZFS 上で data corruption が発生し check sum error が大量に報告される自体に。
最悪なことに $HOME/.thunderbird 配下が全てアクセスできない自体に遭遇してしまった。
zpool scrub を実行しても single disk で運用している以上、meta data の複製はあるが data の複製はなく。
data そのものが配置されている block が壊れてしまうと、もう、どうしようもできないわけで。
mirror なり raidz なりを組んでいれば、まだ救われていただろう。 それができなくても、zfs set copies=2 とかにしておけば、data 部分も 2 重化される。が容量的にちと厳しく。

というわけで、MacBook Late 2008 の Super Drive を取り外して、HDD マウンタである Optibay と交換。
500GB の disk を載せ、500GB + 500GB で計 1TB 搭載の MacBook に仕立て上げた。

OptiBay Hard DriveKit for MacBook Pro 15/17 UNIBODY and MacBook UNIBODY [OBSATA0GB-UNB]  
http://www.akibakan.com/BCAK0014327/BCAK0014327A/index.html

取り出した SuperDrive は、外付けとして使おうとケースを購入してみたがどうにも不安定というか、回っているところが見えてしまうのが精神衛生上良くないw
泣く泣く Logitec の USB 接続スリムドライブも購入し、工学ドライブが必要になったら接続するというスタンスに。

追加した disk には、ZFS mirror と空いた領域は data 領域などに。Mac OS X や Windows 領域は mirror せずw
困ったのは、どっちのディスクから起動しているかパッと見わからないところかw
まぁ、mirror 構成にするだけで、かなり心が楽になるw が、Optibay の取り付けは二度としたくないなぁというのが本音。ネジなめそうでなめそうで怖すぎでした orz

MacBook Late 2008 も発売から 1 年たち、一世代前となってしまったので、そろそろこういう使い方しても心が痛くないレベル。MacBook Late 2008 での OpenSolaris 使いの方にオススメです。まじです。


Global Menu Bar for GNOME というが良い感じのようなので、インストールにチャレンジ。
Mac OS X のように、上部に配置された GNOME Panel が menu bar となる。
基本的には、GTK+ のアプリケーションのみが対象となるが、フォーカスされたアプリケーションのメニューへアクセスがしやすくなるような気がする。
GIMP とか Acrobat 9 とか。Firefox や Thunderbird はダメっぽい。
Mac OS X を利用している人などにはなじみ易いかと。

Global Menu Bar for GNOME
http://code.google.com/p/gnome2-globalmenu/

Vala - Compiler for the GObject type system なるものがあれば使うようだが、特にインストールされてなくてもよいみたい。

Vala - Compiler for the GObject type system
http://live.gnome.org/Vala

しかし、build できなかった orz
cofigure では、特に躓くこともなく。が、library の build で、ld のオプション一覧が出て error となってしまう。
まぁ、大体このパターンは GNU ld を想定したオプションが仕込まれており、/usr/ccs/bin/ld が呼び出されたため error となっていることが多い。
が、直接、ld を呼び出しているのではなく gcc を利用して link している。
経験上、そのような場合は、環境変数 PATH の先頭に GNU ld が配置されているパスを通し、再度 gmake を叩けば問題ないはずっ!
・・・
ダメだ orz
/usr/gnu/bin/ld を見てくれない orz

少し調べてみると、(´・ω・`)ショボーンな事実がわかった。

gcc を利用する場合、collect2 と呼ばれるユーティリティを利用し、プログラムの実行に必要となる様々な初期化関数などを呼び出す仕組みを付加する。
そんな collect2 は、ld を呼び出すようになっているが、OpenSolaris では、2 種類の ld が存在する。

/usr/ccs/bin/ld
/usr/gnu/bin/ld

目的を果たす役割としては、どちらも同一のものとなるが、オプションに互換性がないため、build するものによっては、利用する ld を切り替える必要がある。
Solaris や OpenSolaris 付属の gcc では、この切り替えがうまくいかない。

collect2 が ld コマンドを検索する際に下記の挙動を取る。

    * GNU CC の検索ディレクトリに列挙されているディレクトリにある real-ld。
    * 環境変数 PATH に列挙されているディレクトリにある real-ld。
    * 指定されていれば、コンフィグレーションマクロ REAL_LD_FILE_NAME で指定されたファイル。
    * GNU CC の検索ディレクトリにある ld。ただし、collect2 は自分自身を再帰的に実行することはない。
    * PATH にある ld。

gcc がどんな検索 PATH を利用するかは、gcc -print-search-dirs で確認できる。
programs の最後に /usr/ccs/bin が入っている。

$ gcc -print-search-dirs
install: /usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/
programs: =/usr/sfw/libexec/gcc/i386-pc-solaris2.11/3.4.3/:/usr/sfw/libexec/gcc/
i386-pc-solaris2.11/3.4.3/:/usr/sfw/libexec/gcc/i386-pc-solaris2.11/:/usr/sfw/li
b/gcc/i386-pc-solaris2.11/3.4.3/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/:/usr/libe
xec/gcc/i386-pc-solaris2.11/3.4.3/:/usr/libexec/gcc/i386-pc-solaris2.11/:/usr/li
b/gcc/i386-pc-solaris2.11/3.4.3/:/usr/lib/gcc/i386-pc-solaris2.11/:/usr/sfw/lib/
gcc/i386-pc-solaris2.11/3.4.3/../../../../i386-pc-solaris2.11/bin/i386-pc-solari
s2.11/3.4.3/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/../../../../i386-pc-sola
ris2.11/bin/:/usr/ccs/bin/i386-pc-solaris2.11/3.4.3/:/usr/ccs/bin/

libraries: =/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/:/usr/lib/gcc/i386-pc-sol
aris2.11/3.4.3/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/../../../../i386-pc-s
olaris2.11/lib/i386-pc-solaris2.11/3.4.3/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/3
.4.3/../../../../i386-pc-solaris2.11/lib/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/3
.4.3/../../../i386-pc-solaris2.11/3.4.3/:/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.
4.3/../../../:/lib/i386-pc-solaris2.11/3.4.3/:/lib/:/usr/lib/i386-pc-solaris2.11
/3.4.3/:/usr/lib/

gcc のオプションで ld というコマンドがどのように検索されるか確認してみる。

$ gcc -print-file-name=ld
/usr/ccs/bin/ld

$ gcc -print-prog-name=ld
/usr/ccs/bin/ld

/usr/ccs/bin/ld が呼び出されているのがわかる。
さらに、PATH が影響していることも懸念し、環境変数 PATH を unset (ksh) し確認してみる。

$ unset PATH
$ echo $PATH

$ /usr/sfw/bin/gcc -print-file-name=ld
/usr/ccs/bin/ld

$ /usr/sfw/bin/gcc -print-prog-name=ld
/usr/ccs/bin/ld

やっぱり /usr/ccs/bin/ld が呼ばれる。
PATH に /usr/gnu/bin/ を追加して確認してみる。

$ PATH=/usr/gnu/bin; export PATH   
$ echo $PATH
/usr/gnu/bin

$ /usr/sfw/bin/gcc -print-file-name=ld
/usr/ccs/bin/ld
$ /usr/sfw/bin/gcc -print-prog-name=ld
/usr/ccs/bin/ld

ん? PATH は見てくれず、/usr/ccs/bin/ld 決め打ちっぽい悪寒・・・なんでだろう?
collect2 に strings をかけてみると・・・

$ cd /usr/sfw/libexec/gcc/i386-pc-solaris2.11/3.4.3/
$ strings collect2 | grep ld
/usr/lib/ld.so.1
ldout
/usr/ccs/bin/ld
ld_file_name        = %s
ld returned %d exit status
real-ld
collect-ld

いた。
いやがった。抱えてやがった。/usr/ccs/bin/ld を!

このように埋め込まれていると、/usr/ccs/bin/ld が存在する限り必ず /usr/ccs/bin/ld を見に行くっぽい。
むむむ。
OpenSolaris では、/usr/ccs/bin/ld が /usr/bin/ld に移動したのですが、/usr/ccs/bin/ls は互換性のために sym link として残っています。
まずは、この /usr/ccs/bin/ld を無くしてみます。無くすといっても、別な名前に remove してもいですし link なので元ファイルがわかっていれば消してしまってもいいです :)
PATH も unset してみると、

$ /usr/sfw/bin/gcc -print-file-name=ld
/usr/lib/ld

$ /usr/sfw/bin/gcc -print-prog-name=ld
ld

$ /usr/sfw/bin/gcc -print-file-name=kazus
kazus

おっと、なんかイイ感じに崩壊してきましたね。
/usr/lib/ld はディレクトリですしおすし。
-print-prog-name=ld のほうは、なんか、与えられた文字列そのまま返してますね。
gcc が持つ検索 PATH に /usr/gnu/bin が入っていないため ld コマンドは見つかりません。

この状態で、collect2 はどう振る舞うか見てみると、
PATH は unset され、/usr/ccs/bin/ld もなくなると、collect2 は呼び出すべき linker
を見付けられないため下記のメッセージを出力します。

$ cd /usr/sfw/libexec/gcc/i386-pc-solaris2.11/3.4.3
$ ./collect2 --help
collect2: cannot find `ld'

/usr/gnu/bin に PATH を通し、ld を確認してみると /usr/gnu/bin/ld が呼び出されていることがわかりました。

$ PATH=/usr/gnu/bin; export PATH
$ echo $PATH
/usr/gnu/bin

$ cd /usr/sfw/libexec/gcc/i386-pc-solaris2.11/3.4.3
$ ./collect2 -v                    
collect2 version 3.4.3 (csl-sol210-3_4-20050802) (i386 System V Release 4)
/usr/gnu/bin/ld -v
GNU ld (GNU Binutils) 2.19

一度、unset PATH を実行して、/usr/bin に PATH を通してみる。

$ PATH=/usr/bin; export PATH
$ echo $PATH
/usr/bin

$ ./collect2 -V                    
ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1683

gcc 検索用 PATH は無視され、環境変数 PATH に設定されたパスを検索対象と切り替え、ld コマンドを呼び出し利用するようになる。
なるほど。

というわけで、Global Menu Bar for GNOME を build するときに一時的に /usr/ccs/bin/ld を削除!Ψ(`∀´)Ψ
無事に build できました(´∀`*)
configure は、こんな感じ。applet が /usr/libexec にインストールされるのがアレですが。。。

$ env CFLAGS=-O3 ./configure --prefix=/usr --with-gconf-schema-file-dir=/etc/gconf

まぁ、美しくはないですが、この件については gcc を自分で build したらどうなるかとか確認したい。
gcc -v で、configure 時のオプションを確認することがでいるのですが、--with-ld=/usr/ccs/bin/ld と --without-gnu-ld が鍵を握っているんじゃないかと思っていたり・・・

$ /usr/sfw/bin/gcc -v
Reading specs from /usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/specs
Configured with: /builds2/sfwnv-gate/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/sfw/bin/gas --with-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++,f77,objc --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-20050802)





 


参考:
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Collect2


: Twitter Updates

    follow me on Twitter

    ウェブページ

    タグクラウド

    Techonrati

    Technorati search

    » リンクしているブログ

    Powered by Movable Type 4.23-ja