Ubuntu 10.10 Netbook Remix その後

先日外付けのポータブル HDD にインストールしました Ubuntu 10.10 Netbook Remix ですが結構気に入ってよく使っています。 ThinkPad X61 と IdeaPad S10e で同一ディスクをつなぎ替えて稼働中。 いわゆるネットブックだけではなく 1024×768 系のノート PC にも便利に使えるようです。 🙂

Eclipse 入れたり xampp いれたり Tomcat 入れたりしてすっかりプログラムがかける環境にしてみましたが、画面がせまいノート PC でこういう用途にも Netbook Remix はうまく働いてくれるようです。

ただ、ちょっとまだ Unity はバギーかもしれません。 使っているとちょっとおかしいなというところは目につきます。 まぁ致命的なことは今のところ起きていないので、バージョンアップを楽しみに。

netbook40

OpenGL の組み合わせもなかなかうまく動作しているようです。 上は Titanion さんを動かしているの図。 パッケージに入っていますのでぜひぜひ。 操作は Z と X とその同時押しで、、って弾幕やる人なら分かりますよね(笑)

てなわけで、仮想デスクトップがてら動いているところを動画でとってみました。 エンコード失敗したのでちょっとあらくてすいませぬ。

実は Ubity さんまだキーボードショートカットがいまいちで、マウス必須になってしまうところがちょっとあれなのですが、そこは発展中ということでご愛敬。

てなわけで、動画とったら力尽きたので今日はここまででございます。。

Ubuntu 10.10 Netbook Remix のインストール

先日 10/10 に Ubuntu 10.10 のリリースがありました。 🙂 Desktop 版、Server 版、Netbook 版といくつかありますが、今日は Netbook Remix を IdeaPad に入れてみました。

10.04 の Netbook Remix を入れて結構使っていましたが、10.10 版もなかなかよさそうです 😀 目玉は最近の 16:9 や 16:10 の横長液晶の縦方向を有効活用する Unity インターフェースだと思います。

netbook30

こんな感じで、アプリの最大化を基本として上部バーにウインドウ操作系と通知を統合し、横に長いことを生かして左にタスクスイッチャーが追加されています。 アプリによっては Mac のようにメニューも上部バーに統合されるようです。

左のタスクスイッチャーは Windows 7 のそれに似ていて、起動アプリのピン留めができます。 また、バックグラウンド動作で見えていないウインドウの動作があった場合は、揺れてお知らせしてくれたりしてなかなかかわいいです。

ちなみに最初、この上方向からの順番の変更の仕方が分からなかったのですが、右に引き抜いてから動かせば良いようです。 なるほど(笑)

netbook34

ちなみにタスクスイッチバーのショートカットは Super(Win)キー深押し+数字でした。

また、10.04 の Netbook Remix では標準でなかった仮想デスクトップが使えるようになっています。 このため、GPU 支援が必須になっています。 Intel 内蔵か NVIDIA なら何もしなくて問題なく動きそうです。(うちで試した限りは AMD の内蔵 GPU では動きませんでした)

 netbook31

Unity は基本的に最大化でつかわれる設計ですが、仮想画面は CTRL + TAB のグループをつくる感じで操作すると良いのだと思います。 ALT + CTRL + 矢印キーで仮想デスクトップのスイッチができます。

それから、iPhone 以降流行のアプリケーション指向。 アプリランチャーもそんな感じに。 インストール済み、未済のアプリが統合され、入っていないものを起動しようとすると、そのままネットワークインストーラが起動します。

netbook32

一方でドキュメント指向もサポートしています。

netbook33 

これらはシングルコア Atom だとちょっと重いかな、、Core 2 Duo くらいで動かすとわりと良い感じでした。 今後、チューニングされていくかもしれません。

今回この Netbook Remix は、USB HDD にインストールして動作させています。 こうしておくと、USB HDD ぬいて(大抵の)いろんな PC で自分の環境を起動できるので大変便利です。 (ちなみに最近のインターネットカフェは BIOS でブート選択画面だせないように制限かけてるところ多くて、ちょっとちんまり。。)

インストール時のパーティション設定で「高度な設定」を選択し、外付け HDD に / の ext4 ボリュームと swap 領域をつくりフォーマット指定をします。(内蔵 HDD に間違えないように!!)

Ubuntu は 10G や 20G あれば十分なので、残りは FAT32 の領域としてとっておけば、普通の外付け HDD としても機能できます。 これはインストール時は空き領域にしておいて後で Windows でフォーマットしたほうが安全かもしれません。

でもってブートローダを入れる箇所の指定がありますので、必ずそこを USB HDD やメモリにします。 あとはインストール後 BIOS で USB HDD を優先にして電源入れてあげれば Ubuntu が起動します。 たとえば内蔵 HDD の Windows あげたいときは抜いておくだけ。 楽あるね。

IMG_0096 

さて、実は今回うちの IdeaPad / ThinkPad に接続した USB CDROM –> USB HDD というインストールを行った場合に、ブートローダ書き込み時にエラーがでてインストールを完了できませんでした。 これは 10.04 のときもでていて、このときは ThinkPad のみでしたが、今回は IdeaPad でも同様のエラーが。

もしかすると、単純に USB HDD のパーティションの状態のせいかもなのですが、とりあえずデスクトップ PC の SATA の CDROM から USB HDD にインストールさせています。 で、IdeaPad につなぎなおしています。

ネットブック系で多く使われているだろう、Broadcom の NIC も今回からコンパイルすることなく追加ドライバでいれてくれるようになっています。 ハードウェア・ドライバを選択するとサーチしてくれると思われます。 ネットワークインストールなのでこのときは、有線をつないでおきます。

あとは、、Eclipse とかパッケージ外のアプリを動かしたときピン留めできないのがちょっと残念。 .desktop ファイルをつかって gconf-editor でごにょごにょするとできそうでしたがとりあえずあきらめ。 また、メニューバーが消されてしまってしんなりしたときは、環境変数で次を設定後起動すると乗っ取られないようです。

export UBUNTU_MENUPROXY=0

ThinkPad X61 にも接続して動作させていますが、1024×768 機でもなかなか便利なように思いました。 トラックポインタの設定は相変わらず手動なので /usr/share/X11/xorg.conf.d/20-thinkpad.conf に以下のファイルを追加します。

Section "InputClass"
    Identifier "Trackpoint Wheel Emulation"
    MatchProduct "TrackPoint"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
    Option "EmulateWheel" "true"
    Option "EmulateWheelButton" "2"
    Option "Emulate3Buttons" "false"
    Option "XAxisMapping" "6 7"
    Option "YAxisMapping" "4 5"
EndSection

10.04 から場所が変わっているので要注意です。

てなわけで、持ち運び環境としても、横長液晶用の UI としてもなかなか便利な Ubuntu 10.10 Netbook Remix でした。 気に入って使っています。 🙂

さくらの VPS で撃沈 (WordPress + HipHop 編)

高速化、最適化へのあくなき挑戦は続く。

今回は、PHP のアプリケーションを C++ に変換してネイティブ動作させてしまうという、にいさんに教えてもらった HipHop for PHP で WordPress を動作させることに挑戦です。

きまったリソースの中で最大限を求めるロマンは、コンピュータの世界もバイクの世界も同じに違いない、きゅるるるるる…、ぼぼん! では、いってみましょう。 🙂

…結論から言いますと、WordPress を動かすことは失敗しています。。 にいさんに夢を託します。(笑)

まずは、HipHop for PHP から。

Home – hiphop-php – GitHub

HipHop transforms your PHP source code into highly optimized C++ and then compiles it with g++ to build binary files. You keep coding in simpler PHP, then HipHop executes your source code in a semantically equivalent manner and sacrifices some rarely used features – such as eval() – in exchange for improved performance.

最近では JavaVM や .NET の CLI ではランタイム最適化でネイティブのスピードを超えてしまうこともあるらしいですが、PHP のインタプリタにそれを望むのは厳しいというわけで、C++ にしてネイティブにしてしまえ! というプロダクトです。

Facebook で使われているそうですが、すごいっすね。

sakura-hiphop

スクリーンショットに意味はない。。

さてちょうどいいことに、さくら VPS のデフォルト OS である CentOS 5 AMD64 用の rpm が Hiphot サイトで提供されています。

Installing or Building HipHop-PHP via RPM on CentOS 5 – hiphop-php – GitHub

HipHop has been developed on CentOS and Fedora, but only based on source code and some patches. You may found this way is hard.
So, I create some patched RPM’s for easy HipHop installation on CentOS 5

At the moment, RPM’s only for 64 bits systems. I work on 32bits in that moment, and you can get RPMS as soon as possible.

じゃ、じゃ、じゃー、さくらの VPS で動かしてスピードの向こう側をみてやろうじゃないか、というのがこの企画。

サイトの手順でいけるかなと思ったのですが、依存関係でなかなか手強い。。 おそらく以下の手順で依存は解消できると思われます。(ただし、後述するとおりセグるのでだめなのかもです)

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
yum install cvsps
 
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
yum install --enablerepo=remi mysql-server mysql-libs
yum install --enablerepo=remi mysql-devel-5.1.50-2.el5.remi
 
/etc/init.d/mysqld start
 
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm 
yum install --enablerepo=rpmforge perl-Error.noarch
 
wget http://www.n0c.org/RPM/centos/5/x86_64/tla-1.3.5-7.x86_64.rpm
rpm -ivh tla-1.3.5-7.x86_64.rpm 
 
yum install tk gd gd-devel mcrypt libmcrypt tidy mhash freetds net-snmp httpd-mmn libtool-ltdl
yum remove subversion
yum install libc-client subversion-perl
yum install pcre pcre-devel libidn-devel expat-devel libmcrypt-devel libcap-devel
yum install binutils binutils-devel cmake gcc
 
yum update
 
yum remove libxml2-2.6.26-2.1.2.8.i386
yum remove curl-7.15.5-9.el5.i386

どーしても rpm のありかが分からなくて、なぞのリポジトリ(tla)も一部つかっていますのでご注意ください。 その他は、手順にあるリポジトリを利用しています。

でもって、提供されている .rpm をインストール。 ここで使った .rpm は以下の通りです。 sourceforge.net にあったもの全部です。

#!/bin/sh
 
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/tbb-doc-2.2-1.20090809.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/tbb-devel-2.2-1.20090809.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/tbb-2.2-1.20090809.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-xmlrpc-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-xml-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-tidy-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-soap-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-snmp-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-pgsql-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-pdo-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-odbc-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-ncurses-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-mysql-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-mssql-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-mhash-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-mcrypt-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-mbstring-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-imap-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-gd-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-devel-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-dba-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-common-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-cli-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-bcmath-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/php52-5.2.12-1.ius.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/perl-Git-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/oniguruma-devel-5.9.2-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/oniguruma-5.9.2-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/m4-1.4.13-4.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libxml2-static-2.7.6-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libxml2-python-2.7.6-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libxml2-devel-2.7.6-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libxml2-2.7.6-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libicu-doc-4.2.1-6.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libicu-devel-4.2.1-6.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libicu-4.2.1-6.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libevent-devel-1.4.13-1hiphop.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/libevent-1.4.13-1hiphop.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/icu-4.2.1-6.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/hiphop-php-1.0-2.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/gnupg-1.4.10-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-svn-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/gitk-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-gui-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-email-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-cvs-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-arch-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-all-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/git-1.7.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/flex-2.5.35-7.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/curl-devel-7.20.0-1hiphop.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/curl-7.20.0-1hiphop.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/boost-doc-1.37.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/boost-devel-1.37.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/boost-1.37.0-1.x86_64.rpm/download
wget http://sourceforge.net/projects/hphp/files/CentOS%205%2064bit/RPM/autoconf-2.63-3.noarch.rpm/download

でもって、以下で HipHop for PHP のインストール、環境設定はOKだと思います。

# rpm -ivh *.rpm
# cd /usr/lib64/hphp
# export HPHP_HOME=`pwd`
# export HPHP_LIB=`pwd`/bin

あとは、WordPress のディレクトリに cd して変換、コンパイルをかければ…。

# cd /opt/sakura.maple4ever.net/
# find . -name "*.php" > files.list 
# $HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 --force=1 --cluster-count=50

…。

parsing inputs took 0'00" (157 ms) wall time
pre-optimizing...
pre-optimizing took 0'00" (75 ms) wall time
inferring types...
inferring types took 0'00" (142 ms) wall time
post-optimizing...
post-optimizing took 0'00" (15 ms) wall time
creating CPP files...
Core dumped: Segmentation fault
セグメンテーション違反です

[tegaki]マイガー![/tegaki]

というわけで、コンパイルに入る前にセグって落ちてしまうようです。。

ちなみにうまく C++ に変換されたソースは以下の感じです。

#include <php/wp-content/themes/twentyten/functions.h>
#include <php/wp-content/themes/twentyten/single.h>
#include <cpp/ext/ext.h>
 
namespace HPHP {
 
Variant pm_php$wp_content$themes$twentyten$single_php(bool incOnce /* = false */, LVariableTable* variables /* = NULL */) {
 
  LINE(10,invoke_failed("get_header", Array(), 0x26068646792ABCAELL));
  echo("\n\t\t<div id=\"container\">\n\t\t\t<div id=\"content\" role=\"main\">\n\n");
 
  if (toBoolean(LINE(15,invoke_failed("have_posts", Array(), 0x243E9CC8A30DB2F4LL)))) LOOP_COUNTER(1);
  {
    while (toBoolean(invoke_failed("have_posts", Array(), 0x243E9CC8A30DB2F4LL))) {
      LOOP_COUNTER_CHECK(1);
      {
        invoke_failed("the_post", Array(), 0x41F4B03CC3C890CFLL);
        echo("\n\t\t\t\t<div id=\"nav-above\" class=\"navigation\">\n\t\t\t\t\t<div class=\"nav-previous\">");

ここでは分かりやすいようにかなり抜粋していますが、PHP が C++ に変換されているのがワカリマス。 これは twentytn の single.php 部分ですがなんてことを、って感じですね(笑)

ちなみに、WordPress 以外はというと bbPress も同様に変換がおちました。 ごくごく簡単な、test.php ひとつだけだとうまくサーバ起動まで動作しました。

ランタイムでおちるのなら依存のライブラリかなとかも思うのですが、この段階で動くプロダクトが何かがよく分からなくて手詰まりとなりました。 最初さくら VPS 上でやっていたのでメモリ不足かなとおもって、ローカルの仮想マシンの CentOS 5.5 でもやってみたのですが同様の結果に。

もうちょっと時間があれば、file.list を増減させたりしてみたかったのですが、なんせ ここまでくるのに 12時間近く、、、わたしまけましたわ(笑)

まぁ小中学生のときはコンピュータうまく動かないことにハマって数ヶ月一人もんもんするくらいへーきだったので、根性なくなったな自分、などと思いつつ今日はここまでにしておきます。 😀