Translate

2013年7月5日金曜日

Puppetを使ったOpenShift Origin のインストールについてのドキュメントをを翻訳してみる

OpenShift Originを企業内で使用するには
結局ブローカとノードを分離したインストールを実施しておかないといけなくなる。
なのでその作業に必要そうなドキュメントを翻訳してみた。
原本は、以下のリンクである。

(OpenShift Origin GitHub)Installing OpenShift Origin using Puppet



翻訳文章を参考にされる方は、
at your own riskでお願いします。


----

Puppetを使ったOpenShift Origin のインストール

このガイドは、基本のパペットスクリプトを設定してRPMからOpenShiftをインストールするためのウォークスルーを提供する。


OpenShift Origin RPMは以下のリポジトリ上で利用可能である:

・自分でソースからビルドしたOpenShift Origin RPMの入ったローカルリポジトリ
・Openshift Origin nightly ミラーリポジトリ - Fedora 19 リポジトリ
 - RHEL 6.4 リポジトリ
注意:OpenShift Origin ブローカ/ノードを適切に設定するために、DNS登録されたホスト名および静的IPアドレスが設定されたホストが必要となる。

Puppetのインストール


注意:RHELシステムへpuppetをインストールするためにEPELリポジトリをインクルードする必要がある。

ここにある最新のepel-releaseパッケージをインストールする。

 yum install -y --nogpgcheck ${url_of_the_latest_epel-release_rpm}

以下のコマンドを実行してpuppetとfacterをインストールする。

 yum install -y puppet facter tar

openshift puppetモジュールをインストールする:

 puppet module install openshift/openshift_origin



BIND TSIG キーの生成


BINDパッケージをインストールする。


 yum install -y bind

TSIG キーを生成する。

 #クラウドドメインとして example.com を使う場合
 /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r /dev/urandom -K /var/named example.com
 cat /var/named/Kexample.com.*.key  | awk '{print $8}'

TSIGキーは、CNk+wjszKi9da9nL/1gkMY7H+GuUng== といった様な文字列である。次のステップで使用する。


/etc/hosts へのエントリの追加(オプション)


もしあなたのマシンのホスト名からパブリックIPアドレスを(DNSで)引くことができないのであれば、以下の作業を行うこと:

1. /etc/hosts へ、ホスト名からパブリックIPアドレスへのマッピングエントリを追加する。例:

 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 10.211.55.3 thishost.thisdomain.com

2. /etc/hostnameを更新する。例:

 echo "thishost.thisdomain.com" > /etc/hostname
 hostname thishost.thisdomain.com


オールインワンホストの設定

この設定では、ホスト上で、ブローカ、ノード、アクティブMQ、mongodb、バインドサービスが動作する。

以下の内容を含むファイルconfigure_origin.ppを作成する:

 class { 'openshift_origin' :
  #The DNS resolvable hostname of this host
  node_fqdn                  => "thishost.thisdomain.com",
 
  #The domain under which application should be created. Eg: -.example.com
  cloud_domain               => 'example.com',
 
  #Upstream DNS server.
  dns_servers                => ['8.8.8.8'],
 
  enable_network_services    => true,
  configure_firewall         => true,
  configure_ntp              => true,
 
  #Configure the required services
  configure_activemq         => true,
  configure_mongodb          => true,
  configure_named            => true,
  configure_avahi            => false,
  configure_broker           => true,
  configure_node             => true,
 
  #Enable development mode for more verbose logs
  development_mode           => true,
 
  #Update the nameserver on this host to point at Bind server
  update_network_dns_servers => true,
 
  #Use the nsupdate broker plugin to register application
  broker_dns_plugin          => 'nsupdate',
 
  #If installing from a local build, specify the path for Origin RPMs
  #install_repo               => 'file:///root/origin-rpms',
 
  #If using BIND, let the broker know what TSIG key to use
  named_tsig_priv_key         => ''
 }

puppetスクリプトを実行する:

 puppet apply --verbose configure_origin.pp


ブローカ/ノードを分離したホストで動かす設定

ブローカホスト


この設定では、ホスト上で、ブローカ、アクティブMQ、mongodb、バインドサービスが動作する。

以下の内容を含むファイルconfigure_origin.ppを作成する:

 class { 'openshift_origin' :
  #The DNS resolvable hostname of this host
  node_fqdn                  => "thishost.thisdomain.com",
 
  #The domain under which application should be created. Eg: -.example.com
  cloud_domain               => 'example.com',
 
  #Set to `'nightlies'` to pull from latest nightly build
  #Or pass path of your locally built source `'file:///root/origin-rpms'`
  install_repo               => 'nightlies',
 
  #Upstream DNS server.
  dns_servers                => ['8.8.8.8'],
 
  enable_network_services    => true,
  configure_firewall         => true,
  configure_ntp              => true,
 
  #Configure the required services
  configure_activemq         => true,
  configure_mongodb          => true,
  configure_named            => true,
  configure_avahi            => false,
  configure_broker           => true,
 
  #Don't configure the node
  configure_node             => false,
 
  #Enable development mode for more verbose logs
  development_mode           => true,
 
  #Update the nameserver on this host to point at Bind server
  update_network_dns_servers => true,
 
  #Use the nsupdate broker plugin to register application
  broker_dns_plugin          => 'nsupdate',
 
  #If installing from a local build, specify the path for Origin RPMs
  #install_repo               => 'file:///root/origin-rpms',
 
  #If using BIND, let the broker know what TSIG key to use
  named_tsig_priv_key         => ''
 }

puppetスクリプトを実行する:

 puppet apply --verbose configure_origin.pp

ノードホスト

この設定では、ホスト上でノードのみが動作する。

以下の内容を含むファイルconfigure_origin.ppを作成する:

 class { 'openshift_origin' :
  #The DNS resolvable hostname of this host
  node_fqdn                  => "thishost.thisdomain.com",
 
  #The domain under which application should be created. Eg: -.example.com
  cloud_domain               => 'example.com',
 
  #Set to `'nightlies'` to pull from latest nightly build
  #Or pass path of your locally built source `'file:///root/origin-rpms'`
  install_repo               => 'nightlies',
 
  #Upstream DNS server.
  dns_servers                => ['8.8.8.8'],
 
  enable_network_services    => true,
  configure_firewall         => true,
  configure_ntp              => true,
 
  #Don't configure the broker services
  configure_activemq         => false,
  configure_mongodb          => false,
  configure_named            => false,
  configure_avahi            => false,
  configure_broker           => false,
 
  #Configure the node
  configure_node             => true,
  named_ipaddress            => ,
  mongodb_fqdn               => ,
  mq_fqdn                    => ,
  broker_fqdn                => ,
 
  #Enable development mode for more verbose logs
  development_mode           => true,
 
  #Update the nameserver on this host to point at Bind server
  update_network_dns_servers => true,
 
  #Use the nsupdate broker plugin to register application
  broker_dns_plugin          => 'nsupdate',
 
  #If installing from a local build, specify the path for Origin RPMs
  #install_repo               => 'file:///root/origin-rpms',
 }

puppetスクリプトを実行する:

 puppet apply --verbose configure_origin.pp

ソースコードからOpenShift Origin RPMSをビルドする方法を翻訳してみる

OpenShift Origin(オープンソース版OpenShift)のRPMを
ローカル上に構築する方法を翻訳してみた。

翻訳内容について保障はできませんので、
at your own riskで参照して下さい。

原本は、以下のリンクです。
(OpenShift GitHub) Building OpenShift Origin RPMS from source

----

ソースコードからOpenShift Origin RPMSをビルドする方法


このガイドは、GitHubからOpenShift Origin ソースコードを入手し、Origin RPMSのローカルコピーをビルドするウォークスルーを提供する。

OpenShift Origin は、パッケージをビルドするためには、Fedora19もしくは RHEL 6.4 コンパチブルシステムが必要となる。ビルドを処理するために最小インストレーションで開始することを推奨する。


OpenShift Origin リポジトリ

OpenShift Origin ソースコードは、5つのリポジトリで構成されている:

  • origin-dev-tools:このリポジトリは、ローカルもしくはEC2へOpenShft Originインストーレーションのビルドやテストに必要なすべてのビルドツールが含まれている。
  • origin-server:ブローカ、ノードおよびDNSのためのプラグイン群、通信及び認証機能のソースコードを含むメインリポジトリ。OpenShiftインストレーションで使用するいくつかのコアカートリッジも含んでいる。
  • origin-community-cartridges:このリポジトリは、Fedora 19インストレーション中に使用する追加カートリッジ群を含んでいる。
  • rhc:このリポジトリはOpenShiftベースのPaaSへアクセスするためのコマンドラインツールを含んでいる。
  • puppet-openshift_origin:このリポジトリは、OpenShift Originを設定するためのpuppetスクリプトを含んでいる。




ビルドの必要条件


1. 基本の依存パッケージ群をインストールする(root)

 yum install -y rubygem-thor git tito yum-plugin-priorities wget vim-enhanced \
  ruby-devel rubygems-devel rubygem-aws-sdk rubygem-parseconfig rubygem-yard rubygem-redcarpet \
  createrepo

2. openshift-dev-toolsリポジトリのクローンを作成する

 git clone git://github.com/openshift/origin-dev-tools.git

3. OpenShift Originソースコードのクローンを作成する

 # origin-dev-tools の checkout から
 export SKIP_SETUP=1
 ./build/devenv clone_addtl_repos master

4. 必須パッケージをインストールする(root)

 # origin-dev-tools の checkout から
 # このステップはたくさんのRPMをインストールするため時間がかかる
 ./build/devenv install_required_packages

5. RPMをビルドする(root)

 # origin-dev-tools の checkout から
 ./build/devenv local-build --skip-install

RPMがorigin-rpmsディレクトリ上で利用可能となる

6. RPMメタデータを作成すると、ディレクトリはYUMリポジトリとしてアクセス可能となる

 # origin-rpms ディレクトリから
 createrepo .

2013年7月2日火曜日

パブリックPaaS版Cloud Foundryにログインしてみる


[InfoQ]: Cloud Foundryが新バージョンを発表し、旧を廃止。


上記記事を読むと、2013年6月30日で古いV1が廃止され、
かわってV2サービスにかわるらしい。
旧版V1で使っていた人は期限内に移行しないと
アプリが消されるらしい。
しかも移行ツールとかの提供もないらしい..

しかも"無料"ベータが終了するらしい...


そういえばMicro Cloud Foundryは試したことがあるが
パブリックPaaS版は試したことなかったので
とりあえずアカウントを取ってログインしてみた。

まずApp Spaceタブの画面(初期画面)。






ここでアプリケーションを追加して
開発者を割り当てるらしい。


Org xxxx-org has 60 days left in its free trial, which includes 2GB of app memory and 10 of the free Marketplace services. Paid plans coming soon.
組織 xxxx-org は60日間フリートライアル期間を保有しています。トライアルには、2GB アプリケーションメモリ、10のフリーマーケットプレイスサービスを含んでいます。支払いプランについてはもうすぐ完成予定です。

というのがてっぺんにでていて、
使う気を削いでくれる..


次にUsersタブ。



ロールは、
デベロップメントロール、
プロダクションロール、
ステージングロールの3種類で
組織(org)単位、App Space単位に割り当てられそうだ。

ユーザはメールアドレスを持っていることが必須。




Org Settings タブは
組織設定変更やドメインの割り当てなどを行うようだ。




で Marketplace。
もう「金、とりまっせ~」って感じの名前が嫌!




アプリケーションに加えることの出来るサービス。
今のところDB、NoSQLとMQ、JMeterくらい。

一体いくらぐらいなのか..
どきどきしながら1つづつPlan Optionを開いてみたが
今のところ無料版の範囲だけしかのっていなかった。

rediscloud

Powered by Grantia Data
開発者向けエンタープライズクラスredis(インメモリデータベース)
  • 20MB無料版
  • 1データベース
  • 10接続まで無料

mongolab

完全に管理されたMongoDB as a Service
  • SANDBOXバージョン無料
  •  ストレージ496MB
  •  MongoLabのS3バケットかユーザ指定領域へのバックアップ(即時、計画)
  •  24/365モニタリング
  •  電子メールサポート(support@mongolab.com)
  •  MongoDB/データベース エキスパートアドバイス
  •  標準ドライバ及びREST APIサポート
  •  Webベースの管理ツール

cleardb

SUCCESSBRICKS, INC DBA CLEARDB
アプリ用高アベイラビリティMySQL
  • SPARK
  •  価格:無料!
  •  DBサイズ:20MBまで
  •  接続4
  •  I/Oパフォーマンス:Low
  •  日次バックアップ
  •  完全POC/初期開発向け

blazemeter

JMeter負荷テストクラウド
  • FREE-TRIAL版
  •  ずっと無料
  •  50接続ユーザまで
  •  10テスト/月まで

treasuredata

Hadoopベースのクラウドデータウェアハウス
  • NANO版(無料)
  •  100MBの圧縮データストレージ
  •  60クエリ/月
  •  保障コア0、最大コア1

cloudamqp

84CODES AB
管理されたクラウドHA RabbitMQサービス
  • LEMUR(無料)版

elephantsql

84CODES AB
PostgreSQL as a Service
  • TURTLE(無料)版


App Engineを使っているうちに染み付いてしまった
なんとかして無料でやりくりしてやろうという
姑息な根性が成長してしまい
どうしても有料という単語→あきらめ
という性根がこれ以上のアプリ作成にブレーキをかける。
とりあえずまだ60日無料で使えるんだけど..


き、今日はここまでにしといてやろう..

2013年6月28日金曜日

Get Started on OpenShiftを翻訳する

いきなりOpenShift Originで勉強するより
まずOpenShift Onlineを試したほうが良いと
ようやく気づき、
初心に戻って

Get Started on OpenShift

のとおりに試して見ることにした。


以下、翻訳した内容を貼り付けておく。
(at your own riskでお願いします)


ドキュメントは、Web、コマンドライン、IDEの3つに分かれている。

実行環境(サーバ)は、OpenShift Online(RedHatのパブリックPaaS、無料でアプリ3つまで)ベースで書かれているが、1章をOpenShift Originで作ったオンプレミスサーバに差し替えて考えれば、どちらの場合でもGet Start1できるはずだ。

読んだ記事にも書いてあったが、たしかに本当にCloud Foundryに似ている。App EngineやCloud Foundryを知っていると、OpenShiftの理解が早いと思う(もちろん開発者としての理解は)。

Web

  • 最も早くスタートする方法
  • プラウザからアプリを素早く構築
  • 新規アプリケーションの開始、管理とモニタリング向き



OpenShiftのWebコンソールは、インストールが不要で、コマンドライン操作不要でアプリケーションんを構築・管理するためのパワーを与えてくれます。コンソールはアプリケーションの構築や、アプリケーションを保管する追加の機能を提供を支援します。例として、MongoDB、MySQL、Jenkins continuous integration buildsなどが含まれます。


1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。

(訳者注)
上記リンクを押すと新規アカウント作成(英語)画面がでるので、メールアドレス(アカウント名)、パスワード、bot対策の文字列を入力すると、メールアドレス先へ確認メールが飛ぶ。本文記載のリンクを踏むと登録完了。

2. コンソールを開いてアプリケーションを構築



コンソールを使ってすぐに稼働可能でコーディング可能なアプリケーションを簡単に構築することができます。Drupalのような協力なCMS(コンテンツ管理システム)や、業界標準のブログプラットフォームであるWordPressをボタンをクリックすることで開発します。

→クイックスタートはこちら


3. Gitをインストールしてコーディングを開始する(オプション)


ソースコードへ変更を加える準備ができたら、Gitバージョンコントロールプログラムを使ってOpenShiftへチェックインやコードの発行を直接行うことができます。The client tools installation pageに異なるプラットフォームごとのGitのインストールや、Gitを使ったインテグレーションを行う際のEclipseやVisual Studioのような有名な開発環境についての詳細情報が掲載されています。

 git clone ssh://...rhcloud.com/~/git/myapp.git/

ソースコードのダウンロードやアップロードを行うために、パブリックSSHキーでOpenShiftへ提供しなくてはなりません。(コピー・アンド・ペーストで)コンソール内のキーの設定後、アプリケーションのGit URLが表示されます。ソースコードリポジトリのローカルコピーを作成するgit cloneコマンドでURLをパスします。


4. 変更のOpenShiftへのアップロード


取得したコードを変更しOpenShiftへpushします。

  $ cd myapp
  $ vim php/index.php
  (エディタで修正して、":wq")
  $ git commit -a -m "My first change"
  $ git push


実行後、URLを参照して、変更が反映されていることを確認して下さい。

 →アプリケーションの変更開発についてはこちらを参照して下さい


$> rhc_ コマンドライン

  • どこでもコード、どこでも管理
  • どんなプラットフォームでもアプリやコードのフルコントロールが可能
  • コーディングやデバッギング、アプリケーション管理向き


以下の簡単なステップに従うことで、我々のパワフルなコマンドラインクライアントを試して下さい。

OpenShiftクライアントツールはRuby Gemとしてパッケージされています。あなたの環境で実行するためには、Ruby1.8.7以降、gemをインストールできる権限(Linuxの場合root権限でのアクセス)、Gitバージョンコントロールツールが必要となります。クライアントツールの詳細なヘルプはDeveloper Centerにあります。


1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。


2. Windows | Mac OS X | FedoraおよびRedHat Enterprise Linux | Linux 上へクライアントツールをインストール


 <Windowsの場合>


 RubyInstaller 1.9 for Windowsをダウンロードし、インストールして下さい。
 重要!"Add Ruby executables to your PATH"オプションをチェックすること。

 Git for Windowsをダウンロードし、インストールして下さい。
 重要!"Run Git from the Windows Command Prompt"オプションをチェックすること。

 Windowsのコマンドプロンプトからgemをインストールして下さい:
  $ gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 <Mac OS Xの場合>


 Mac OS X上では、Full Xcode Suite もしくは git for OS Xのいずれかのインストールが必要です。これらのパッケージは、RubyおよびGitのインストール及び設定が含まれています。

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc



 <FedoraおよびRedHat Enterprise Linuxの場合>


 YUM経由でOpenShift前提条件をインストールして下さい。
  $ sudo yum install rubygems git

 (RHEL 6.2のみ)RHN Classicを使用している場合は、"rubygems"パッケージをインストールしてRHEL6.2オプショナルチャンネルを追加する必要があります。
  $ sudo rhc-channel --add --channel=rhel-x86_64-server-optional-6

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 <Linuxの場合>


 前提となるパッケージをインストールして下さい:Ruby1.8.7以降、rubygems、git

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 →より詳細のヘルプは、クライアントインストレーションガイドを読んで下さい。


3. 環境のセットアップ

OpenShift ログインアカウントおよびパスワードを使って、rhc setupを実行してOpenShiftへ接続し、アプリケーションの一意な名前空間を作成します。

ウィザード画面からSSHキーのアップロードを行い、Gitを使った通信が可能になります、もし必要な設定が誤っているならば確認して下さい、そして次にドメイン名を作成します。OpenShiftにおけるドメイン名はアプリケーションのURLの一部となります。ドメイン名はすべてのOpenShiftユーザのなかで一意となります。このため賢くクリエイティに選択して下さい!

ウィザード実行時に、あなたのログインIDが含まれる設定ファイル「<ホームディレクトリ>/.openshift/express.conf」が作成されます。もし再びセットアップする場合は、rhc setupから再び実行して下さい。
 $ rhc setup
 OpenShiftコマンドラインインターフェイスの対話型セットアップが開始される
 openshift.redhat.comへ接続するために、OpenShiftログインID(電子メールもしくはRedHatログインID)


4. 最初のアプリケーションを作成


これで、アプリケーションが作成可能な状態になりました。
  $ rhc app create myapp php-5.3
  Password: (アカウントのパスワード)

このコマンドで、アプリケーションのためのリモートgitリポジトリが作成し、ローカルのカレントディレクトリにクローンを作成します。

OpenShiftは多くのアプリケーションスタックを提供します。rhc cartridge listを実行して、すべてのオプションを確認して下さい。

あなたのアプリケーションのドメイン名は「<アプリケーション名>-<名前空間>.rhcloud.com」となります。 このため、exampleコマンドによって作成されたアプリケーションは、myapp-mydomain.rhcloud.com となります。


5. 変更と更新


アプリケーションの構築の最初のステップは終わりました。ここからは、自分のアプリケーションを構築していくことになります。

gitをサポートするIDEかエディタを使ってください。もしサポートしていないのであれば、2つの簡単なコマンドを使う方法もあります。

  $ cd myapp
  $ vim php/index.php
  (エディタで修正して、":wq")
  $ git commit -a -m "My first change"
  $ git push


実行後、URLを参照して、変更が反映されていることを確認して下さい。

 →開発のためのフレームワークの素晴らしいガイドを確認して下さい


6. 次のステップ


これで、アプリケーション開発のスタートを着ることができました。これからはOpenShftを用いたいろんな作業を行うことができます。以下のリンクのビデオ、ブログやユーとリアルを参照して下さい。

</> IDE

IDEを使った迅速な開発
Eclipse開発環境を使ったシームレスなインテグレーション
コーディングやデバッギング、アプリケーション管理向き

Eclipseベースの統合開発環境であるJBoss Developer Studioは、リッチなWebアプリケーションやトランザクショナルな企業アプリケーションを構築するために必要なすべてを開発者に提供します。指先ひとつでOpenShift環境へのアプリケーションの作成、編集、配置する機能を統合します。

1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。今日から始めましょう。


2 JBoss Developer Studioのダウンロード(要サインイン)


 (訳者注)
 章題のリンク先はJBossサイトになっています。
 Cloud FoundryでいうところのSTS相当です。

 ドキュメント


 ビデオ



2013年6月26日水曜日

OpenShift Origin を Live CDからVMware Player上へインストールする

OpenShiftでぐぐると最初に出てくるのが

“使用”より“構築”で学ぶオープンPaaS「OpenShift」 (1/5)http://www.atmarkit.co.jp/ait/articles/1304/25/news014.html

ここにかいてある手順を参考にOpenShift Originをインストールしてみた。

 先に書いておくが、
 
 OpenShift Origin GitHub 
 http://openshift.github.io/
 
 にVMware Playerイメージもあるので、
 インストールが面倒な人はこっちのほうが簡単だと思う。
 (実は、ためしていない)
 Cloud Foundryも用意してくれてたからなあ..


この手順では、BrokerとNodeが同一PC(使ったのは仮想マシンだけど)上に構築される。
もっと簡単に言うと、開発クライアントも実行も全部このマシンで動作する。

DHCP管理下の物理PCでも大丈夫だとおもう。


上記サイトと異なるのは
  • Virtual BoxではなくVMware Playerを使用
  • VMware Playerホスト側はproxy環境下でインターネット接続
の2点のみ。


---------------

1. Live CDのダウンロード

https://openshift.redhat.com/app/download/remix へアクセス
 ダウンロードするにはアカウントを作らないといけないので
 "Create One"を選択し、メールアドレスとパスワードを登録する。
 その後再度上記サイトへアクセスしてログインすると
 ダウンロード開始する。
 ※1.3GBなので、結構時間が掛かる。私の環境で1時間半かかった..

2. 仮想マシン準備

VMware Playerを起動
 「新規仮想マシンの作成(N)」を選択
 「インストーラディスクイメージファイル(M)(iso):」
  ファイルはLive CDのイメージISOファイルパスを指定
 「次へ(N)」

 「Linux(L)」、バージョン「Fedora64ビット」
  LiveCDを使うとFedora16上に構築される
 「次へ(N)」

 仮想マシン名「OpenShift Origin」
 場所は好きなディレクトリで
 「次へ(N)」

 「仮想ディスクを複数のファイルに分割(M)」
 「次へ(N)」

 「ハードウェアカスタマイズ(C)」
 「メモリ」を選択
 この仮想マシンのメモリ「2048MB」
 「プロセッサ」を選択
 プロセッサコアの数(C)「2」
 「閉じる」

 「完了」

3. Live CDを使ってインストール

「OpenShift Origin」を選択
 「仮想マシンの再生(L)」

 「Start Openshift_Origin」でリターン
 ※Fedora16があがり、コンソールとブラウザが立ち上がる

 右上の「Live System User」>「System Settings」
 「Keyboard」

 「Layout Settings」を押す
 「Layouts」タブを選択
 「+」を押す
 「Japanese」を選択し「Add」を押す
 「English(US)」を選択し「-」を押す
 ウィンドウ右上の「X」を押す

 ※コンソールが裏で上がっているのでAlt+Tabなどでスイッチ
 $ xhost +
 $ su
 # liveinst
 ※liveinstコマンドでCDから
  仮想マシンの20GB HDDへ
  インストールを開始する

 ※Generic Installerウィンドウがあがる
 「Japanese」を選択
 「Next」を押す

 「Next」を押す

 「Yes, discard any data」を押す
 ※20GB HDDに何かファイルが残ってても無視する

 Hostname「broker.example.com」
 「Next」を押す

 「Tokyo」を選択
 「Next」を押す

 Root Password「passmaster」
 Confirm「passmaster」
 ※ここでは、ユーザ/パスワードは
  @IT記事のまま使用してます
 「Next」を押す

 「Create Custom Layout」を選択
 「Next」を押す

 ※ここからHDDパーティション構成
 「Hard Drive>sda>Free」を選択し「Create」を押す
 「Standard Partition」を選択し「Create」を押す

 File System Type「BIOS Boot」
 Size(MB)「1」
 「Fixed size」を選択
 「OK」を押す

 「Hard Drive>sda>Free」を選択し「Create」を押す
 「Standard Partition」を選択し「Create」を押す

 Mount Point「/boot」
 File System Type「ext4」
 Size(MB)「500」
 「Fixed size」を選択
 「OK」を押す

 「Hard Drive>sda>Free」を選択し「Create」を押す
 「LVM Physical Volume」を選択し「Create」を押す

 File System Type「physical volume(LVM)」
 「Fill to maximum allowable size」を選択
 「OK」を押す

 「Hard Drive>sda>sda3」を選択し「Create」を押す
 「LVM Volume Group」を選択し「Create」を押す

 Volume Group Name「vg」
 「add」を押す

 Mount Point「/」
 File System Type「ext4」
 Logical Volume Name「lv_root」
 Size(MB)はそのまま
 「OK」を押す

 「OK」を押す

 「Next」を押す

 ※Partitioning Warningsダイアログ
 「Yes」を押す

 ※Format Warningsダイアログ
 「Format」を押す

 ※Confirmダイアログ
 「Write Changes to Disk」を押す

 そのまま「Next」を押す
 ※しばらくかかる

 ※Congraturations, your Generic installation is complete.
 ※ここでCDは刺したまま(まだCD上のバイナリで動作しているので)
 「Reboot」を押しリブート
 ※実PCの場合、ここでCDを抜かないと
  またLiveCDからブートしようとするが、
  VMware Playerの場合はそのまま上がった

 ※GNU GRUB version 1.99
 「Generic Linux, with Linux 3.4.6-1.fc16.x86_64」を選択
 ※そのまま放置でもよい

 ※Fedora16 初期設定ウィザードを完了させる
 ※ホットドッグの絵(Welcome)画面
 「Forward」を押す

 「Forward」を押す

 「Forward」を押す
 ※時刻を治したい人は直す

 Full Name「Shifter」
 Username「shifter」
 「Add to Administrators group」をチェック
 Password「shifter」
 Confirm Password「shifter」
 「Forward」を押す

 ※VMware Playerウィンドウを操作する
 画面左上の「Payer>管理>仮想マシン設定(S)」を選択
 「CD/DVD(IDE)」を選択
 「物理ドライブを使用する」をチェック(自動検出)
 「OK」を押す

 ※OpenShift Origin - VMware Playerダイアログ
 「はい(Y)」を押す

 ※Hardware Profileへ戻る
 「Do not send profile」を選択
 「Finish」を押す
 ※しつこくダイアログが出るがDo not sendでよい
 ※再起動

 「Shifter」をクリック
 パスワード「shifter」でログイン
 ※GNOMEがエラー云々のダイアログが出る
  VMware toolsをインストールして解消させる

 ※VMware Playerウィンドウを操作する
 画面左上の「Payer>管理>VMware Toolsのインストール(T)」を選択

 ※コンソールへ
 $ su
 Password: passmaster
 # cd /tmp
 # tar xvfz /media/VMware\ Tools/VMwareTools-9.2.3-1031360.tar.gz
 ※アーカイブが/tmp以下へ展開される
 # cd vmwafre-tools-distrib
 # ./vmare-install.pl
 ※対話型インストールだが原則「リターン」でよい
 ※もし何度も同じ選択になった場合のみ選択肢を変更する
 ※インストールが終わると
  画面下の「VMware Toolsをインストールしています」という帯が消える

Enterを連発している最中に

The path "" is not a valid path to the 3.4.6-1.fc16.x86_64 kernel headers.

Would you like to change it? [yes]

でループするので、ここだけはnoを選択する。

カーネルヘッダがないので、本来はカーネルの
インストールをしてパス先を用意する必要があるのだけど、
ここではお試しなのでとりあえずスキップさせる。


 # exit
 $ cd
 $ sudo sed -i -e '/gpgkey=/aexclude=ruby \
 > ruby-devel ruby-irb ruby-libs ruby-rdoc' \
 > /etc/yum.repos.d/fedora-updates.repo
 ※上記は1行で書いても良い
 [sudo] password for shifter: shifter
 $ su
 Password: passmaster
 # chkconfig httpd on
 # service httpd start
 # chkconfig stickshift-broker on
 # service stickshift-broker start
 # chkconfig --del livesys
 # chkconfig --del livesys-late
 # chkconfig --del livesys-late-openshift
 # exit
 $ cat ~/.openshift/express.conf
  # SSH key file
  #ssh_key_file = 'libra_id_rsa'
  libra_server=localhost
  # Default rhlogin to use if none is specified
  default_rhlogin=admin
 ※上記のcatは中身の設定確認のみ
 # sudo reboot
 [sudo] password for shifter: shifter
 ※再起動


4. 動作確認

4.1 PHPアプリ"hello"

※ログイン画面
 「Shifter」をクリック
 パスワード「shifter」でログイン
 ※GNOMEがエラー云々のダイアログが出なくなる

 ※コンソール
 $ cd
 $ mkdir workspace
 $ cd workspace
 $ rhc domain create -n hara2 -l admin
 Password: admin
 ※hara2はOpenShiftのドメイン名
  アプリのURLが"http://xxx-hara2.example.com"になる
  xxxはアプリ別に名前をつける
 ※adminはOpenShiftのアカウント名、パスワードもadmin
 ※途中1度聞いてくるので「yes」と入力
 $ rhc app create -a hello -t php-5.3
 Password: admin
 ※helloはOpenShift上のアプリケーション名
  アプリのURLが"http://hello-hara2.example.com"になる
 ※adminはOpenShiftのアカウント名、パスワードもadmin
 ※途中1度聞いてくるので「yes」と入力
 ※これでhelloアプリ(初期画面)が上がっている

 ※ブラウザへ
 URL「http://hello-hara2.example.com」
 ※Welcome To OpenShiftという画面が出れば正常動作

 ※アプリ更新を試す
 ※コンソールへ
 $ cd ~/workspace/hello
 $ sed -i 's/Welcome to OpenShift/Welcome to Hara2 OpenShift/' php/index.php
 $ git commit -am "changed"
 $ git push

 ※再びブラウザへ戻る
 タブ「Welcome to OpenShift」を選択
 再読み込み(URL欄の一番右のアイコンを押す)
 ※Welcome To Hara2 OpenShiftと表示されれば正常動作

4.2 jBossアプリ"hellojboss"

※Eclipse+プラグインをインストールして
  hellojbossアプリを作成してブラウザで表示してみる
  というシナリオ

 ※ブラウザ
 URL「http://www.eclipse.org」を開く
 「Get Start now... Download Eclipse」を押す

 「Eclipse IDE for JavaEE Developers」の「Linux 64Bits」を押す

 「[Japan] Japan Advanced Institute of Science and Technokigy[http]」を押す
 ※上記のサイトではない場合もある

 「Save File」を選択し「OK」を押す
 ※しばらくかかる(~/Downloadsへ格納される)

 ※ダウンロード完了後コンソールへ
 $ mkdir ~/applications
 $ cd ~/applications
 $ tar xvfz ~/Downloads/eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz
 ※アーカイブが展開される
  実行する時期によりバージョンがあがり
  ファイル名が変わることがある
 $ cd
 $ mkdir ~/workspace/eclipse
 $ ~/applications/eclipse/eclipse -data ~/workspace/eclipse

 ※Eclipse起動
 メニューバー「Window>Preferences」を選択
 「Generic>Network Connections」を選択
 Active Provider「Manual」
 Proxy entries「HTTP」を選択し「Edit..」を押す
 Proxy設定は省略
 ※出てきた画面に各自の環境に合わせたproxy設定を行う
 「OK」を押す

 メニューバー「Help>Eclipse Marketplace...」を選択
 タブ「Search」のFind「jBoss」を入力し「Go」を押す
 「JBoss Tools(Juno)」の「Install」を押す
 「Next」を押す
 「I accept the terms of the license agreements」を選択
 「Finish」を押す

 ※Security Warningダイアログ
 「OK」を押す

 ※Software Updatesダイアログ
 「Yes」を押す

 ※JBoss Tools Usageダイアログ
 「Yes」を押す
 ※上記のYesは、JBoss Tools teamへ
  統計データを送ることを許可する場合
  各自で変更のこと

 ※ここで@ITの記事ではEGitもインストールするが
  上記のバージョンのEclipseはすでにこの段階で
  EGit2.5(作業時の最新は3.0)が入っていてエラーになる
  このため省略した

 「Welcome」タブの「X」を押して消す

 ※ここからプラグインを使って"jbosshello"アプリを作成
 ※画面中央上部に「JBoss Central」が表示される
 「CreateProject」欄の「OpenShift Application」を押す

 ※New OpenShift Applicationダイアログ
 Username「admin」
 Password「admin」
 「Save password(could trigger secure storage login)」を選択
 「Next>」を押す

 ※Secure Storageダイアログ
 Password「admin」
 Confirm password「admin」
 「OK」を押す

 ※Secure Storageダイアログ(小)
 「Yes」を押す

 ※Password Recoveryダイアログ
 Question1のQuestion「What is your mother's family name?」
 Andwerにあなたの母親の姓を入れる
 Question2のQuestion「What is your pet's name?」
 Andwerにあなたのペットの名前を入れる
 ※もちろん上記は適当に変更して良い
 「OK」を押す

 ※New OpenShift Applicationダイアログ
 Name「hellojboss」
 Type「jbossas-7」
 Embeddedable Cartridges「mysql-5.1」のみチェック
 「Next>」を押す

 ※ターミナルへ
 $ mkdir ~/git
 $ chmod a+rw ~/git

 ※EclipseのNew OpenShift Applicationダイアログへ
 「Next>」を押す

 「Use default location」をチェック
 Location「/home/shifter/git」
 「Finish」を押す

 ※ブラウザへ
 URL「http://hellojboss-hara2.example.com」を開く
 ※Welcome To OpenShift, JBossAS7 Cartridgeと表示されれば
  正常動作している

                          以上
---------------

..Cloud Foundryと比較すると明らかに面倒..つまりこなれてない..
RHELだけでなくUbuntuも取りこんでくれないかな..


よしとりあえずシングル構成はこれでいいから
マルチノード構成どうすれば出来るのか調べよう..
とおもったら、

これからのOpenShiftの話をしよう
http://www.slideshare.net/jacopen/openshift-13407714
を読んだら..

あれ、まだできないのか..
じゃあUbuntu派の私には旨味がほとんどないなあ..
このスライド書いた人、比較記事の人か..


【徹底比較】2大Open Paas、Cloud FoundryとOpenShiftの強み/弱み
http://techtarget.itmedia.co.jp/tt/news/1206/18/news02.html



なるほどCloud Foundryと比べても1年遅れか..
ただでさえ日本人はVMware好きがおおいしなあ..

たしかにWeb UIもないし。

StickShift Origin Web UI
https://www.openshift.com/forums/openshift/stickshift-origin-web-ui


でもGoogle Trendさまは、OpenShiftのほうが人気だとのたまう..


日本だけにすると、以下のグラフになる。


..バズワードとしても、国内じゃ両方起爆失敗?


ただ、Cloud Foundry、OpenShiftとも
パブリックPaaSとの親和性をうたっているのだけど、
エンタープライズシステム(SOA+BPM/BRM)の基盤としては..
結局チャネル層レベルだけなんだよなあ..

コマーシャルとのチャネルがあまりない企業だと
PaaS自体旨味があんまりない..

さて、どうするか..

p.s.
上記、作業していたのが2013/6/26で、
ちょうどEclipseがJunoからKeplerへ変わる途中で
JavaEE版はJuno、素EclipseがKeplerと微妙なダウンロード状況だったので
Eclipseまわりはごっちゃになってるかもしれません。
ご容赦願います..

2013年6月24日月曜日

OpenShiftのアーキテクチャ概要を翻訳する

CloudFoundryだけでなく、そろそろOpenShiftも
なんぞやということくらいはわかっていないと
社会についていけなくなるかもしれない..


なので、アーキテクチャについてだけドキュメントを翻訳して
勉強してみた。


なお、原本は以下のサイトです。

OpenShift
Architecture Overview
https://www.openshift.com/wiki/architecture-overview


翻訳内容についてはat your own riskで参照下さい。


---------------

アーキテクチャ概要


OpenShift Origin


OpenShift Origin はアプリケーションの作成、配置、管理をクラウドの内部で可能にします。OpenShift Originは、ディスクスペース、CPUリソース、メモリ、ネットワーク接続、ApacheもしくはJBossサーバを提供します。開発されるアプリケーションのタイプによって、テンプレートファイルシステムレイアウトが提供されます(例えば、PHP、Python、Ruby/Rails)。またアプリケーションのために1つの制限されたDNSも管理します。

プラットフォーム概要






2つの基本機能単位、インターフェイスを提供するブローカ(Broker)と、アプリケーションフレームワークを提供するカートリッジ(Cartridges)に分類されます。

  • ブローカ(Broker)は、すべてのアプリケーション管理アクティビティのための単一の接続ポイントです。ブローカはユーザログイン、DNS、アプリケーションの状態、アプリケーションの一般的なオーケストレーションに責任を持ちます。顧客は直接ブローカへ接続詞ません;代わりにRESTベースAPI経由で、Webコンソール、CLIツール、もしくはJBossツールを使ってブローカとやりとりをおこないます。
  • カートリッジ(Cartridges)は、ユーザアプリケーションを実行するために必要な実際の機能を提供します。現在、JBoss、PHP、Rubyなどの多くの言語カートリッジがあり、同様にPostgres、MySQL、Mongoなどのような多くのDBカートリッジがあります。


システムリソースとアプリケーションコンテナ



プラットフォームにより提供されるシステムリソースとセキュリティコンテナはギア(Gears)とノード(Nodes)です。

  • ギア(Gears):ギアは、1つ以上のカートリッジを実行するためのリソース制約のあるコンテナを提供します。カートリッジに対して、RAM容量や有効なディスク容量の制限があります。
  • ノード(Nodes):リソース共有を有効にするために、複数のギアを単一の物理マシンもしくは仮想マシン上で実行します。このマシンをノードと呼びます。すべてのアプリケーションが同時に有効にはならないため、一般的にギアはノード上にオーバーアロケートされます。


アプリケーション

 

  • ドメイン(Domain):ドメインはDNSに直接関係しているわけではない;代わりに、すべてのアプリケーションや定義されたユーザのために一意な名前空間を提供する。ドメイン名はアプリケーション名に追加され、最終的なアプリケーションURLを編成する。
  • アプリケーション名(Application Name):アプリケーションの名称を識別する。アプリケーションへアクセスするための最終的なURLは、https://[アプリケーション名]-[ドメイン].rhcloud.com 形式となる。
  • エイリアス(Aliases):ユーザはプラットフォームにてエイリアスを登録することでアプリケーションのDNS名を提供することができる。
  • アプリケーションの依存関係(Application Dependencies):ユーザはカートリッジを特定してアプリケーション実行要求を行う。現在2つのタイプのカートリッジがある。
  • フレームワークカートリッジ(Framework Cartridges)は、Webページを提供する機能をもつ主なカートリッジである。すべてのアプリケーションは1つのフレームワークカートリッジを保有し無くてはならない。
  • エンベデッドカートリッジ(Embedded Cartridges)は、DBやDBウェブインターフェイスのような支援カートリッジである。多くのエンベデッドカートリッジは、単一のアプリケーションとして追加可能である。
  • アプリケーションGITリポジトリ(Application GIT Repository):各アプリケーションは、1つのGITリポジトリを取得する。ユーザはリポジトリ上のコードを修正し、git pushを実行することで、コードをデプロイする。
注意:
近い将来、どちらのカートリッジを一緒にコロケートされそしてスケールされるべきかについての論述を支持して、エンベデッドvsフレームワークカートリッジは削除することになります。
アプリケーションとカートリッジ記述子についてのセクションを参照して下さい。


主なユーザとのやりとり


1. 単純なアプリケーション構築


このフローは単純なPHPアプリケーションの構築およびデプロイをおこなうケースを説明している。



2. Jenkinsを使ったアプリケーションのデプロイ


OpenShift OriginもまたすべてのアプリケーションのためにJenkinsベースのビルドワークフローを提供します。Jenkinsサーバは、ユーザギアの1つが使用する、分離したアプリケーションとして実行します。Jenkinsビルダエージェントもまた、SSH/REST APIを使ってブローカやビルドされたアプリケーションとやり取りを行う、分離したアプリケーションとして実行します。



4. ディスクリプタを使ったアプリケーションの記述


アプリケーションディスクリプタはアプリケーションビルドの宣言的手法の1つです。ディスクリプタは、name(名前)、version(バージョン)、depenmdencies(依存)などの属性を含んだYAMLファイルです。またそして、アプリケーションが要求されるアーキテクチャも含んでいます。ブローカ/コントローラはディスクリプタYAMLを使いアプリケーションの新規構築や変更を行うことができます、そしてディスクリプタ内のフィールド操作を多くのユーティリティREST APIが提供します。アプリケーションやカートリッジディスクリプタについては後続の章で詳細説明があります。





ディスクリプタからアプリケーションをビルドするために、ブローカはディスクリプタを解釈しアプリケーションのdependency(依存)をリゾルブします。それぞれのdependency(依存)はカートリッジディスクリプタに含まれているカートリッジによって満たされます。アプリケーションディスクリプタのように、カートリッジディスクリプタはコンポーネントやカートリッジに寄ってサポートされる機能を定義します。

アプリケーションやカートリッジディスクリプタを使用することで、ブローカは一緒にコンポーネントをグループ化することができ、またどのギアをインスタンス化するかなどを決めることができます。


論理ビュー



パッケージ構造


パッケージ依存関係とプラグイン選択に関する情報のために「パッケージ構造」を参照して下さい。

StickShift


StickShiftは、OpenShift OriginプラットフォームのコアAPIパートです。PaaSプラットフォームの作成やカートリッジのデプロイのために必要なすべての基本APIを提供します。3つのパートで構成しています。

  1. コントローラ(Controller)は、REST API、ビジネスロジック、PaaSプラットフォームの状態管理を含む Rails エンジン(プラグイン)である。またDNS管理、認証、データ/状態ストレージ、そしてブローカとノードの間のコミュニケーションのためのプラグインAPIの集合でもある。
  2. ノード(Node)は、ギアやアプリケーションコンポーネントのライフサイクルの管理に必要なAPIの基本的な集合を含む。
  3. 共通(Common)は、コントローラやノードコンポーネントが使用するデータ構造を含む。

Proxyポート




Proxyポートは、ロードバランシングや関連するアプリケーションギアに提供するために内部サービスを露出させることを許可する。

それぞれのギアは5つのProxyポートを割り当てることができます。これらはルータブルアドレスとして露出するので、関連するギアは分離されたノード上にあっても接続することが可能です。

Proxyポートはシステムサービスとして実行中のHAProxyにより有効化され、低水準TCP接続をproxyへ設定されます;Webロードバランシングサービスを提供するHAProxyの対置として。将来的にそれらは、アプリケーションディスクリプタによって記述されるTCP接続を提供する基礎メカニズムとなります。

Proxyポートはノード集合の外部から直接アクセスすることができません。



ギアファイルシステムレイアウト

 .                                              
 ├── git
 # ギア git リポジトリ。
 # Webフレームワークカートリッジにより初期設定される。
 │   └── [アプリケーション名].git
 |       |
 # ユーザによる変更を避けるためルートによって所有される
 # 唯一のフックディレクトリ。
 │       ├── hooks                           
 |       |   |                                  
 |       |   |                                  
 │       │   └── pre-receive
 # Post受信フックをビルドやデプロイに割り当てる
 │       └── ... その他のgitディレクトリ     
 └── [アプリケーション名]
 # Jenkinsが行うクローンやアプリケーションのビルドのための
 # CIディレクトリ
     ├── ci               
 # ノード再起動時のアプリケーションの開始・停止を行う
 # コントロールスクリプト。
     ├── kraman3a_ctl.sh
     ├── <カートリッジ名>
     │   └── <カートリッジ固有の設定> 
     ├── data                                   
     │   └── ... 短命データストレージ
     ├── run                                    
     │   └── ... 実行のためのPID ファイル
     ├── logs                                   
     │   └── ... 全カートリッジのログファイル
     ├── sessions                               
     │   └── ... アプリケーションセッション情報
     ├── tmp                                    
     │   └── ... アプリケーション一次データ
     ├── repo -> runtime/repo                   
     └── runtime                                
         └── repo
 # 自身を持たないPHPのようなカートリッジの依存管理のための
 # プラットフォームサポート
             ├── deplist.txt                       
             |                                  
             ├── ... デプロイ済みアプリケーションコード
             └── README

ディスクリプタ


アプリケーションディスクリプタ


この章では、ユーザが、依存関係定義やスケーリングアーキテクチャ、各アプリケーションへの接続を定義するために、どのようにしてアプリケーションディスクリプタを構築するかを説明します。

用語:

  • Name:アプリケーション名(必須)
  • Version:アプリケーションのバージョン(必須)
  • Requires:依存関係リスト。カートリッジ名か性能のどちらか。
  • Cartridge:性能を提供するためのコンポーネント動作のパッケージされた集合
  • Connections:各々通信する必要のある2つのコンポーネントを指定する(Eg:PHPは直接関係がないがお互い通信が必要)
  • Group Override:関連のないカートリッジを同じギア上にグループ化させるための定義に使用される。本質的にそれらは一緒にエンベデッドする。これらのコンポーネントは一緒にスケールする。
  • Gear:コンポーネントが動作可能なCPU単位、メモリ、ディスク容量

単純なディスクリプタ:

 Name: myapp
 Version: 1.0
 Requires: php-1.0, mysql, mongodb
 Connections:
   - php-1.0, mysql
   - php-1.0, mongodb
 Group override:
   - php-1.0, mysql
上記のディスクリプタは、アプリケーション名"myapp"が php-1.0、mysql、mongodbに依存している事を示しています。PHP、MySQKおよびPHP、MongoDBはお互いに通信が必要となります。MongoDBが自身のギア上で動作している間、PHPおよびMySQLは同一のギア上でエンベデッドカートリッジとして動作します。

カートリッジディスクリプタ


この章ではいかにしてパートナ/カートリッジ開発者がディスクリプタを使ってそれらのカートリッジの能力を定義するかについて説明します。システム内のそれらの視点はアプリケーション開発社と異なっており、それらはより先進的な機能を露出させます。

用語:

  • バージョン(Version)、ベンダ(Vendor)、ライセンス(License):メタ情報フィールドはシステムが直接使用しない
  • 内部要求(Requires native):内部/実行時固有 パッケージ依存関係(RPM)
  • 提供者(Providers):カートリッジに寄って提供される能力リスト
  • プロファイル(Profile):カートリッジは、同一区画のソフトウェアに異なるアーキテクチャを提供するために、プロファイル内にグループを作ることが可能である(例:MySQL はマスタ-マスタおよびマスタ-スレーブプロファイルを提供することができる)
  • パブリッシャ(Publishers):接続エンドポイントのリストはコンポーネントから情報を獲得するためにインボーク可能なものをフックする(例:mysql カートリッジは、インボーク時JDBC接続文字列を提供する、JDBCエンドポイントを提供することができる)
  • サブスクライバ(SubScribers):接続エンドポイントのリストは、コンポーネントへ情報を提供するためにインボーク可能なものをフックする(例:jbossカートリッジは、インボーク時やデータソースとして設定されたJDBC文字列で提供された時にJDBCエンドポイントをサブスクライブすることができる)
  • 接続タイプ(Connection types):パブリッシャおよびサブスクライバは、どうやってお互いリンクするかを元にした接続タイプを定義する。Cloud-SDKは、いくつかのビルトインタイプを提供する(NET:TCP、NET:UNIX、FILESYSTEMなど)
  • グループ(Groups):プロビジョニングを目的としたコンポーネントのグループ化。各グループは一意のギアタイプで提供される。グループ範囲内のすべてのコンポーネントは同一ギア集合に配置される
  • ComponentRef:どちらのコンポーネントがグループの一部であるかを定義するグループ下の1エントリ
  • 設定順序(Configure-Order):カートリッジの中やその依存関係の中のコンポーネントに対して設定順序の定義が可能である
  • 開始順序(Start-Order):カートリッジの中やその依存関係の中のコンポーネントに対して開始順序の定義が可能である

ディスクリプタの例:


 Name: mysql-server
 Version: 1.0
 Native-Requires: mysql-server
 Provides: mysql
 Profiles:
  simple:
    Components:
      master:
        Provides:
          jdbc-uri:
            Type: NET:TCP:JDBC
  master-master:
    ...

上記のディスクリプタは、カートリッジ名"mysql-server"でmysqlの能力を定義しています。mysql-server RPMのインストールや実行に依存しています。またシンプルな場合とマスタ-マスタの場合の2つのプロファイルを定義しています。シンプルプロファイルは、"NET;TCP:JDBC"タイプのパブリッシャを提供する"master"という名前の1つのコンポーネントを保持しています。

接続タイプ


それぞれの(パブリッシャとサブスクライバの)接続は1つの接続タイプを定義し無くてはなりません。このタイプは、提供・消費されるデータを示す1つの分離された文字列です。Cloud-SDKはその他新しいタイプを提供する既存タイプのサブクラスを保持しています。

  • NET:TCP - ホスト名、ポートを提供する
  • NET:UNIX - UNIXソケットへのパスを提供する
  • FILESYSTEM - ローカルシステムのリソースへのパスを提供する
  • FILESYSTEM:SHARED - クラスタファイルシステム上のリソースへのパスを提供する

コネクタ確立


コンポーネントの設定・開始・終了中、パブリッシャコネクはインボークされているものをフックして、それぞれのギア上の各コンポネント情報がサブスクライブ中のコネクタへパスされます。コンポネントのギア割り当て:あるアプリケーションがカートリッジを使用している場合、そのコンポーネントはいくつかのファクターに依存する同一もしくは異なったギアの集合へ配置されます:

  • コンポーネントが同一のカートリッジの一部であり、カートリッジディスクリプタが同一グループである要求を行う場合、コンポーネントは同一ギア上に配置される
  • NET:UNIX、FILESYSTEM、NET:TCP:INTERNALのいずれかのタイプでコンポーネント間の接続が確立される場合、コンポーネントは同一のギア集合上に配置される
  • あるグループ内のエントリが、カートリッジ/アプリケーションエィスクリプタがコロケートされる要求を行うフィールドをオーバライドする場合、コンポーネントは同一のギア集合上に配置される

アプリケーション/カートリッジディスクリプタのランタイムレゾリューション


この章ではどのようにしてCloud-SDKがアプリケーションや依存関係やギアへの割り当てを組み合わせるかを説明します。

用語(ブローカ上の実行時の状態ストレージ):実行時階層は、アプリケーションディスクリプタやカートリッジディスクリプタから情報を使用する推敲フェーズ中に構築されます。

  • コンポーネントインスタンス - コンポーネントインスタンスは、カートリッジ/アプリケーションディスクリプタ内に定義されたコンポーネントごとに生成される。コンポーネントインスタンスは、カートリッジ数、プロファイル、コンポーネント名を保持する
  • グループインスタンス - コンポーネントインスタンスと類似して、グループインスタンスは、カートリッジ/アプリケーションディスクリプタ内に定義されたコンポーネントごとに生成される。その結果として起こる、元のカートリッジやプロファイルのトラックを保持するカートリッジインスタンスやグループの一部であるギアのトラックもマタ保持する。グループ範囲内のすべてのギアは同一のコンポーネント集合を実行している
  • ギア-

用語(ノード上の実行モデル):

  • ApplicationContainer:Cloud-SDKのノードサイド上のギアをあらわす
  • UnixUser:Cloud-SDKのノードサイド上のUNIXユーザをあらわす

ディスクリプタの推敲


ディスクリプタの推敲には2つの基本ステップがあります。効果があるのであれば、これらのステップは組み合わせることもあります。

  • すべての依存関係を解決しコンポーネントインスタンスやグループインスタンスの実行時構造を構築する
  • 通信やグルーピングのオーバライドを元にしてグループを組み合わせる

2012年4月27日(金) 10:00 matwoodが更新

2013年5月17日金曜日

monacaでスマートフォンアプリ




"monaca"
というサービスを教えてもらった。

Chrome(webkitベース?)ブラウザだけあれば
簡単にスマホアプリができるとのこと。

これまでも、
できるだけ簡単に
しかもただでスマートフォンアプリを
作る方法がないか探していて
mgwt+GWTあたりを調べており


ちょっとmonacaもためしてみてやるか
的な上から目線で調べてみた。


以下のサイトを見つけ、

PhoneGap Fan: PhoneGap講座


ためしにやってみた。


このサイトは、
PCを知っている学生さんでも
簡単にできるレベルで書かれており、
30分くらいで3章のサンプルアプリまで作ることができた。

しかも、mgwtのサイトに書いた手順より手数少ないし..


アプリはネイティブではなくHTML5のアプリ。
(HTML5+CSS3+PhoneGap+jQuery)

動作速度はおそらくGWTの最適化には
ついていけないとは思うが
それでもこの簡単さ..


PhoneGapも無料、
monacaも(今のところ?)無料、
PhoneGap講座を読むのも無料..


ホント、世の中便利になったなあ..


2013年4月16日火曜日

mgwtを使った簡単なアプリをApp Engineに配置してiPhoneで見る

日本語で書かれたmgwtの使い方をGoogleって探してみたら

理想を抱いて..
http://susie-zero.blogspot.jp/search/label/MGWT

という記事を見つけただけだった。

この記事にあるサンプルを実行しようと思ったのだが
当然iPhoneで動きを見たい..

なのでApp EngineのアプリケーションID1つ使って
iPhoneのSafariで開いてみた。


用意するもの
 Java+Eclipse+Google,Safariプラグインが入ったPC
 Google App Engineの空いているアプリケーションID
 iPhone

0. mgwt-1.1.2.jarをダウンロードし適当なフォルダへ置く
1. Eclipse(+Googleプラグイン)を起動
2. 新規「Webアプリケーションプロジェクト」を作成
 プロジェクト名称、パッケージ名は適当
 Google Web ツールキットを使用、Google App エンジン使用ともにチェック
 サンプルコードを生成もチェック(面倒なのでサンプルベースで試す)
 ※ワークスペースはUTF-8にしておく
3. プロジェクト名の上で右クリック、ビルドパス>ビルドパスの構成
 ライブラリタブ
 外部Jar追加(mgwt-1.1.2.jarを追加する)
 OKボタン
4. src/~/~.gwt.xmlを編集
 コメント行の下に以下の行を挿入

<inherits name="com.googlecode.mgwt.MGWT">
<set-property name="user.agent" value="safari"></set-property> ←Safariを使う
<set-property name="mgwt.os" value="iphone"></set-property> ←iPhone風に
<set-configuration-property name="mgwt.css" value="pretty"></set-configuration-property>
←スタイル名難読化解除

※safariをgecko1_8とかにかえるとFireFoxでも開くが、
 iPhoneで開く時にエラーダイアログが出てしまう

5. war/~.htmlを開く
 
<h1> WebApplication Starter Project</h1>
 から
 </table>

 まで削除する

5. src/~.clientパッケージ以下のEntryPoint実装クラスを開く
 onModuleLoad()以外全部のフィールドとインナークラスを削除する
 onModuleLoad()内の実装をすべて削除する
 黄色いアンダーラインのついているimport文を全部削除する

6. onModuleLoad()内に以下の実装
 //ViewPointのセット、モバイルセッティング
 MGWT.applySettings(MGWTSettings.getAppSetting());

 //AnimationHelperを生成、パネルへ
 AnimationHelper animationHelper = new AnimationHelper();
 RootPanel.get().add(animationHelper);

 //mgwtレイアウトパネル
 LayoutPanel layoutPanel = new LayoutPanel();
 //mgwtボタン
 Button button = new Button("Hello mgwt");
 layoutPanel.add(button);
 
 //AnimationHelperへ
 animationHelper.goTo(layoutPanel, Animation.SLIDE);


 ※コードは上記サイトからお借りしました


※パッケージは候補2つ出てきたらmgwtの方を選択すること

7. プロジェクトを右クリック
 実行>Webアプリケーション
 開発モードタブ内のURLをコピー
 ブラウザを起動しコピーしたURLを開く
 ※iPhone風のボタンが1個(1行?)ぺたっと表示される
 コンソールタブの赤四角ボタンを押し実行終了

8. プロジェクトを右クリック
 Google>Appエンジンへデプロイ
 App Engineプロジェクト設定...
 アプリケーションIDに用意したIDをセット
 配置ボタン押下

9. iPhoneのSafariを起動
 http://~.appspot.com/ を開く
 ※iPhone風の背景とボタンが出ればOK

なんか最初に出た画面だけ右端消えていたけど、
iPhoneの上下を変えてみたら綺麗に右端が戻った。


ブラウザのバーがいやな場合は
HTML+JavaScriptで封じ込めるか。。
Safari側の動きをなんとかするJavaScript調べないと..

というより基本部品


でもこれでMacBookがない環境でも
iPhone向けアプリ開発もどきができるようになった。

これはWindows PCばかりのIT会社とかでは
けっこう大きいメリットじゃないかな


にしても使っている日本人が少ないのは悲しいけど..

2013年3月28日木曜日

Dartチュートリアルを探す




Dartが何物なのか
全く知らないので

A Game of Darts—Tutorials
http://www.dartlang.org/docs/tutorials/

の頭の英文だけ翻訳してみた。

どうもここのコンテンツを理解すれば
概要がさわりだけでもわかりそうだ。

以下、翻訳したもの
#AT YOUR OWN RISKで参照してください
-----

A Game of Darts - チュートリアル集


Dartを使った素晴らしいWebアプリケーションを構築するためのガイドへようこそ。

"A Game of Darts"はチュートリアル、ターゲット(Dart言語を使ってどうやってWebアプリを構築するかの学習)、ツール、そしてAPI群をあつめたものです。順番にターゲットをフォローしても、必要なターゲットだけを選択してもどちらでもかまいません。

CやJavaのような構造化言語によるプログラム方法については既に知っている前提とします。

チュートリアル集を使用するにあたって、JavaScriptやDOM(Document Object Model)を知っている必要はありません。DOMはプログラミングの鍵であり、ターゲット2内の基本コンセプトにて学習することになるでしょう。


Dart ターゲット1:はじめに


Dartソフトウェアバンドルをダウンロードします、そしてDartソフトェアでどのツールやライブラリがあるかを発見し、Dart Editorを使って2つのアプリを動かします。


Dart ターゲット2:DartとHTMLをつなげる

Dart Editorを使って余計なものが一切ないブラウザページの上にテキストを置くだけの簡単なDartプログラムを作成します。この簡単なプログラムは、シンプルですが、DartプログラムがWebページ上でどうホストされDOMをどう操るかを確認することができます。


Dart ターゲット3:DOMへエレメントを追加する

このターゲットであつかう小さなプログラムは、DOMへエレメント追加することで発生するユーザ生成イベントに応答します。


Dartターゲット4:DOMエレメントの削除


このターゲットでは、ターゲット3をもとにDOMからエレメントを削除する小さなToDoアプリを作成します。



Dartターゲット5:共有パッケージのインストール

パッケージはプログラマはコードの組織化、共有を助けてくれます。多くのオープンソースDartパッケージは pub.dartlang.org リポジトリにホストされています。このターゲットでは1つのパッケージをインストールする手順の練習をします。





DartのWeb UIパッケージ

Webコンポーネントとテンプレートは、Webアプリ開発における次に素晴らしいアイディアです。あわせて、よりリッチで動的なWebアプリケーションを構築するためのビルディングブロックを提供します。DartチームのWeb UIパッケージで、いますぐいWebコンポーネントやテンプレートの利用を始めることができます。

ターゲット6:はじめてのWeb UI利用


このターゲットでは、Web UIパッケージのインストールからDart Editorの自動ビルドプロセスまでのロジスティックスからはじまります。
次に、Webアプリパッケージ内に変更の多いDartデータを組み込むための片方向/双方向データバインディングの使い方を紹介し、データ同期中のUIを維持するためにウォッチャーの利用を説明します。
最後に、テンプレート表現や宣言的なUIエレメントへのイベントハンドラのアタッチについて学習します。

ターゲット7:<テンプレート>の使用


このターゲットでは条件付きでUIエレメントをアクティベートするWeb UIテンプレートの使い方を紹介します。またDartオブジェクトのCollectionを元にしたUI構築のためのテンプレートループの使い方も紹介します。



ターゲット8:カスタムDOMタグの定義

Web UIパッケージ紹介の続きとして新規DOMタグ定義によるカスタムエレメントの使い方を紹介します。カスタムエレメントは、W3Cコンソーシアム提供のWebコンポーネントモデルの機能の一つです。

----
サンプルコードの一部をみたけど
JavaやCよりもJavaに近い。
型宣言は緩そうな気配..


2013年3月18日月曜日

MGWTにおけるスタイル表示方法

MGWTのProjectページに
スタイルシートの設定方法についての
Wikiページがあったので
翻訳してみました。


先に謝っておきますが、
このパートの翻訳はあまり品質が良くありません。
AT YOUR OWN RISKでの参照願います。

翻訳元:


----
MGWTにおけるスタイル表示方法
提供されているテーマの使い方や独自構築方法などを紹介します。

イントロダクション

表示の際にもっとも効果的にするために、mgwtはGWT ClientBundlesを使用します。
この文書ではGWT ClientBundlesがどうやって動作するのか説明しません、かわりにmgwtがどうやってGWT ClientBundlesを使用しているのかに焦点をあてます。

ClientBundlesについての基本的な情報は完璧なGWTドキュメントを参照して下さい:

ClientBundle


mgwtの見た目をカスタマイズするためにはいくつかの方法があります:

 1. selector obfuscationを分岐し、カスタムCSSファイルを追加
 2. mgwt cssインターフェイスを拡張し、ベースとなるCSSファイルを変更もしくは拡張
 3. デフォルトのカスタムカラーテーマを使用
 4. スタイルに影響する他のGWTメカニズムを使用

このドキュメントはカスタムテーマのローリング同様にmgwtの見た目の小さな変更をどうやって行うかについて明確にすることを意図しています。

デザインをどう見せるかについて決まっているのであれば、それらの最適化のためにClient Bundleを使用すべきです。それゆえgwt css インターフェイスとバンドル、いくつかのCSSを簡単に拡張することができます。


Selector Obfuscationの分岐

もしあなたがselector obfuscationを分岐させるならあなたはプレーンなCSSクラス名を使ってアプリケーションを表現することができます。しかし同時ににコンパイル時チェックとパフォーマンを犠牲にしています。このアプローチは素早くテストしたい場合にはよいアイディアです。

gwt.xmlファイルにこのルールを記述します:

 

設定後、このプロパティクラス名はこれ以上わかりずらい難読化されません、それらは"mgwt-Button"の様な可読なプレーンな名称になります。
CSSが処理すべきことを終了し計算し終えたら、同様にClientBundlesの使用を始めます。

CSSを使ったスタイリング:

selector obfuscationを切った後、DOM内のmgwt クライアントバンドルよりも後にCSSファイルをインクルードする必要があります、このため、スタイルをオーバライドすることができます。

これによりCSSを簡単に拡張可能となります:

//this will create a link element at the end of head 
  MGWTStyle.getTheme().getMGWTClientBundle().getMainCss().ensureInjected();

//append your own css as last thing in the head 
MGWTStyle.injectStyleSheet("yourcssfile.css");


エントリポイントへ記述してください、ただしClientBundleの使用やエンベッデッドバンドルをオーバライド使用がより効果的です。

拡張mgwt css インタフェイス

gitリポジトリに完全なスタイリング例があります。


この方法で、簡単にウィジェットをオーバライドして気の向くままにスタイリングを行うことができます:


1. ClientBundleマッチングの拡張
2. 適当なgetter(例:getButtonCss())をオーバライド
3. 最初にベースCSSをアノテート+カスタムCSS
4. バンドルを返却するMGWTThemeのカスタム実装を記述
5. テーマをデフォルトとしてセット、もしくはカスタムWidgetのコンストラクタを通す

GWTはCSSファイルを記述するためのインタフェイスを使用します。mgwtにおいても怒鳴時アプローチを使用しています。Widgetごとに(重要)1つのCSSインタフェイスと(少なくとも)1つのCSSファイルがあります。CSSインタフェイスやCSSファイルは1つのバンドルと一緒に運ばれます。どのCSSファイルがどのインタフェイスのために使用するかを簡単にアノテートします。MGWTは、異なるプラットフォームのために、異なる(イメージを含む)バンドルを保有しています。これは、iOSアプリ内にはAndroidに特化したCSSが無いことを意味しています。

現在7つの異なるBundleが存在します:

 iPhone (非 Retina ディスプレイ)
 iPhone (Retina ディスプレイ)
 iPad
 Android 携帯
 Android タブレット
 Blackberry
 デスクトップ

MGWTColorBundleNonRetinaの例をちょっと見てください:


 public interface MGWTColorBundleNonRetina
  extends MGWTClientBundleBaseThemeNonRetina {
  
  @Source({ "color.css",
   "com/googlecode/mgwt/ui/client/theme/base/css/progressbar.css",
   "css/progressbar.css" })
  ProgressBarCss getProgressBarCss();
   ...
 }

インタフェイスProgressBarCssはProgressBarに関するすべてのCSSクラスを含んでいます。このインタフェイスにCSSファイルをアノテートします。重要:順序は通常のCSSファイル同様重要です。最初にカラーテーマのためのカラー定義、その後にmgwtテーマのベースとなるCSSフォーム、そして最後にカスタムCSS(クラスをオーバライドする場合)をインクルードします。デフォルトのprogressbar.cssのコピーを必要としないことに注意してください。必要な際、オーバライドすることができます。

つぎにやらなくてはならないことは、MGWTThemeインタフェイスを作成する事です。

 public interface MGWTTheme {
 
  public MGWTClientBundle getMGWTClientBundle();
 
 }

すべてのプラットフォームのための単純な2つのカラーテーマの構築を始めましょう(このテーマは実際にmgwtの一部となり大変簡単に使用されます):

最初にMGWTTheme実装の構築が必要です(参照:MGWTColorTheme):



 public class MGWTColorTheme implements MGWTTheme {
  
  private MGWTClientBundle bundle;
  
  public MGWTColorTheme() {
   if (MGWT.getOsDetection().isIOs()) {
    if (MGWT.getOsDetection().isRetina()) {
     bundle =
      (MGWTColorBundleRetina) GWT.create(
       MGWTColorBundleRetina.class);
    } else {
     bundle =
      (MGWTColorBundleNonRetina)GWT.create(
       MGWTColorBundleNonRetina.class);
    }
   } else {
    bundle =
     (MGWTColorBundleNonRetina) GWT.create(
      MGWTColorBundleNonRetina.class);
   }
  }
  
  @Override
  public MGWTClientBundle getMGWTClientBundle() {
   return bundle;
  }
 }


上記実装ではMGWTClientBundleの2つの異なる実装のインスタンスを返します。一方はRetinaディスプレイ搭載iPhone向け、他方はその他すべてのデバイス向けです。
Retinaディスプレイ上できれいに見せるためアイコンはより大きいレゾリューションが必要なため、別々のMGWTClientBundle実装が必要です。
CSSファイル内で条件付きイメージをインクルードできないので(イメージは通常インライン定義される場合が多いが..)、異なるバンドルを使用します。

最後にやるべきこととしてデフォルトとしてのテーマのセットもしくはテーマをWidgetへパスします:

 MGWTStyle.setTheme(new MGWTColorTheme());

重要:アプリ処理の最初に行う必要があります。実行中テーマ変更はできません。

カスタムテーマをただ一つのWidgetへパスします:

 new Button(theme.getMGWTClientBundle().getButtonCss())


mgwtテーマ

mgwtは以下の各プラットフォームに対応するテーマを提供します:

 iPhone
 iPad
 Android
 Blackberry


そして、OSに依存せず簡単に拡張可能なテーマを1つサポートします:

 mgwt base

Widgetのスタイル定義方法

各Widgetや類似するCSSクラスのDOM構造を参照したい場合はWidgetのjavadocをちょっと見てください。Wikiで個別に更新するよりむしろ、コード内に直接文書化するほうが最新版を維持しやすいためjavadocを選択しました。



 Button
 ButtonBar
 CellList
 HeaderButton
 HeaderPanel
 LayoutPanel
 MCheckBox
 MValueBoxBase(MTextBoxのようなほとんどの入力要素向け)
 MListBox
 MRadioBox
 MSearchBox
 MSlider
 ProgressBar
 ProgressIndicator
 PullToRefresh
 ScrollPanel
 WidgetList
 TabPanel


ブラウザ内部のアニメーションの一般的な考え方

ブラウザ内部でどのようにアニメーションが処理されるかに関するブログ:
http://blog.daniel-kurka.de/2011/12/animating-in-browser.html


RootPanel vs RootLayoutPanel


GWT RootLayoutPanelは異なるブラウザでのスクリーンのリサイズをハンドルするために必要な処理を行います。IEにおけるボックスモデルの遅延のため、RootLayoutPanelはボックスモデルをサポートするブラウザ内で動作する必要がないコードを含んでいます。
RootLayoutPanelが複数のブラウザで動作する関連するレイアウトを提供する仕事をしている間、子供要素をレイアウトするためにJavaScriptが動作しています。

MGWTを使用して、WebKitエンジンにのみWidgetのレイアウトさせて、ほかのJavaScriptはレイアウトのための動作は行いません。
これはすべてのWidget上で早くスムースなレスポンスを保証します。なぜならすべてのコードはネイティブのレイアウトエンジンの範囲内で動作しているからです。

RootLayoutPanelはこのパターンを壊すため、MGWTでは使用しません。RootLayoutPanelを決して使用しないで下さい、AnimationDisplayを追加のためにはRootPanelを使用して下さい。
-----

ClientBundleをあまり使用してなかったから
もうちょっとそのあたりをしっかり利用したUI設計になれとかないと..

Google Colab相当の環境をローカルPC上のDocker Composeで実現する

 Docker Composeの有料版に、お金を払いたくない ^H^Hが使えない ため古いゲーミングPC(GeForce3080)にDocker Composeを入れてその上のコンテナでGoogle Colab相当のノート操作ができないかためしてみた: コンテナイメージとして a...