ページ

2012年6月1日金曜日

UbuntuにGithub連携Redmineサーバを立てる

とにかく急いでRedmineと戯れたい人向けです。

目標は
  • Ubuntu 12.04上にとにかく簡単に構築する
  • Webricを使い、Redmineをport 80に立ち上がらせる
  • githubで公開しているrepositoryと連携させる
構築のポイントは
  • redmineのインストールと設定
    インストール方法が乱立しておりますが、簡単なaptで入れます。
  • redmineのgithub対応設定
    githubと連携するためのpluginを入れます。
  • githubからredmineサーバへ更新情報転送設定
    上記pluginへの入力として、githubから更新情報を自動的に送信するgithub側の設定をします。
の3点です。
それでは、行きます。

1.  Redmineをサーバにinstall 
aptで必要なファイルをインストール
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ondrej/redmine
$ sudo apt-get update
$ sudo apt-get install redmine redmine-mysql

起動スクリプト作成
/etc/init/redmine.conf
-----
# Redmine
description "Redmine"

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon
exec ruby1.8 /usr/share/redmine/script/server webrick -e production -b 0.0.0.0 --port 80 -d 
-----

起動
$ sudo service redmine start

この段階でredmineのWeb serverがport 80 (HTTP)に立ち上がっています。
browserにサーバのIPを入力すれば、見えるはずなので確認してください。

参考: http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_in_Ubuntu

2. Redmine上でプロジェクト作成
github上のrepositoryに対応したredmineのプロジェクトを作成します。
管理者権限などredmine の使い方は、ここでは説明しません。
redmine helpなどを参考にしてください。
  • Projects -> New Projectで、新しいプロジェクトを作成します。
  • 中身は適当で良いですが、Identifierの値は後で使います。
3. Redmineのgithub対応設定
 redmine server用github hookを設定することにより、githubからの更新情報を受けとることができるようにします。
githubから自動的に更新情報を送信させる設定は、もう少し下でします。
$ sudo gem install json
$ cd /usr/share/redmine
$ sudo ruby1.8 script/plugin install git://github.com/koppen/redmine_github_hook.git
$ Redmine を再起動

4. Redmineがローカルで管理するgithubのremote repository設定
githubのrepository内容のミラーリングです。redmineは上記hookでgithubから送られてきた更新情報を元にこのremote repositoryを更新します。
$ cd /var/redmine/git_repositories
$ git clone --mirror git://github.com/<git_user>/<project>.git

次に、ミラーリングした/var/redmine/git_repositories/<project>.git ディレクトリをRedmineで管理するプロジェクトのリポジトリとして設定します。
  • 2.で作成したプロジェクトのSettingsを表示します。
  • Repositoryタブを選択します。
  • SCM: Gitを選択
  • Path to Repository: /var/redmine/git_repositories/<project>.git
この段階で、プロジェクトにRepositoryタブが現れ、中身が見えるようになるはずです。

5. Githubからredmineサーバへ更新情報転送設定
  • github のプロジェクトのAdmin->Service Hooks->WebHook URLsを選択
  • URLに、http://<redmine server ip>/github_hook?project_id=<project id>を入力
  • Update Settings
上記のようにURLには、Redmine の URL に "/github_hook" をくっつけたものを入力します。また、オプションとして?project_id=<project id>をつけておけば間違いないです。
<project id>には、2.でIdentifierに設定した値を入れます。

設定は以上です。

以後、Github へのpush は自動的にredmine serverへ転送され、redmineが管理しているremote(mirror) repositoryが更新されます。更新されない場合は、5.の設定が正しくない可能性があります。

2012年5月29日火曜日

さくらVPSのUbuntuを10.04から12.04にアップデート

さくらVPSのUbuntu10.04アップデートメモです。
ポイントは2点。
  1. grubの設定アップデートを確実に
  2. resolv.conf自動生成の再設定

1. grubの設定アップデートを確実に

Ubuntuのアップデートは、基本的には
sudo do-release-upgrade -d
を実行後、ひたすらYesで問題はありません。が、唯一grubの設定だけはさくらサーバ向け(VPS向け?)設定をしておかないとreboot後立ち上がりません。
(grub promptがさびしく表示される事になります)

このgrubの設定とは

  1. "grubを最新にする" or" 既存のままにする"など4択ぐらいの選択肢が出た際、上位2つのどちらかを選択します。
  2. "Continue without installing GRUB?"と聞かれますので、ここで"No"を選択します。
  3. その後、grubのインストール先を聞かれるので、"/dev/vda"を選択します。


参考: http://d.hatena.ne.jp/tilfin/20120330/1333108053


2.  resolv.conf自動生成の再設定


アップデート後、普通に再起動させると名前が引けなくなっていると思います。原因は、/etc/resolv.conf設定が消えているためです。

Ubuntuは、resolv.confを起動スクリプトでごにょごにょ置き換える仕組み(/etc/init/resolvconf.conf)を導入しているようなのですが、その際使用する設定値が消えているために本現象が起きています。よって、これを再設定します。

設定するファイルは"/etc/resolvconf/resolv.conf.d/base"
内容は
---
search sakura.ne.jp
nameserver 210.188.224.10
nameserver 210.188.224.11
---
再起動、または再読み込み("sudo resolvconf -u")すれば、/etc/resolv.confが復活します。


参考: http://blog.libero-tecnologia.net/?p=6

2012年3月31日土曜日

MiniatureGarden using Ogre

IrrlichtからOgre3Dへの移行を始めてはや半年。
やっといろいろ遊べる形になってきました。
まずは、サッカーでも作って基本的な機能を揃えたいところです。



CPU: Intel(R) Core(TM) i3 CPU  530  @ 2.93GHz
Mem: 2G
Video: GeForce 7600 GS
OS: Ubuntu

Ogre3Dは、影を使った時の性能がIrrlichtより圧倒的に良いですね。
まだ速度的な最適化をやっていないのに、影を入れたまま11vs11で遊べそうです。



2012年3月29日木曜日

シャギーなアニメーションになったら

Boneに関連付けられていない(Vertex Groupに所属していない)浮いているVertexがあるMeshをOgre Mesh Exporterなどでexportさせてアニメーションさせると下図のように飛び出ることがあります。



対策: どこかのVertex GroupにAssignさせてあげると解決します。


2012年3月21日水曜日

blender 2.62 で ogre mesh を exportする

Blender 2.5 exportの最新版を使ってmeshを出力する事に少し手間取ったのでメモ。

1. 最新のexporterは、最新のtreeにあるので
 hg clone https://bitbucket.org/sinbad/ogre
2. Tools/Blender2.5Export/の下にある全ファイルをblenderのaddonを置く場所にコピー
    例えば、blender/blender-2.62-linux-glibc27-i686/2.62/scripts/addons/ogre_mesh_exporter/
3. blender起動
4. File->User Preference->addonsで、Ogre Mesh Exporterを有効にする
5. 再立ち上げ (いらないかな)
6. cube作る
7. cubeにMaterialを作り、名前をOgre/SkinなどのOgre環境上のMaterial Nameにしておく。
6. cubeを選択して、"T"を押す。
7. 出たメニューの下の方に、Ogre Mesh Exporterがある。
8. 書き出すパス(Export Path)指定。
8. exportボタンをぽちっと押す。
9. できたmesh.xmlをOgreXmlConverterで.meshにする

という手順で作成したmeshをOgre Engineで表示できるところまで確認。
また、Properties->ObjectData にもなにやらメニューがあるが、今のところ使い方がよく分からない。

P.S.
どうやら、Textureを適切に貼るには、UV設定にして出力する必要があるようなのですが、現在のscriptでは対応していないようです。なので、お急ぎの方はblender-2.49bとTools/BlenderExportで出力させるのが無難なようです。


参考

Good work, lf3thn4d



2012年3月19日月曜日

blenderで3D Viewにテクスチャが表示されない

プログラムの基盤環境の方の目処が立ってきたので、素材作りのためにBlender 2.6を入れてみた。1年ぶりぐらいなのですがI/Fが変わって、格好良くなっている!
(まぁ、どんなにツールが良くなっても、私のセンスじゃどうしようもないのですが...)

ところで、Texture張っても、3D Viewに表示されない (1年前もハマった気が =)ことで
1時間ぐらい浪費したので、メモ。

ググったところ、対策の7番目
7.3D View画面でNキーを押してShadingをGLSLにする
が今回の原因でした。




2012年3月4日日曜日

Swig対処メモ

Swig 2.0.4を対象としています。
  • privateコンストラクタだから生成できない
    %templateでそのクラスのwrapperを作成している。(wrapper作るとinstantつくるので)
    対策: wrapperを作らない。必要なら、コンストラクタをpublicに置いたclassをswig用interfaceファイル内で再定義。
  • allocate がかぶる
    wrapper作成対象クラスにallocate関数があると、swigが内部生成するallocate関数とかぶる模様。
    対策: クラスのallocate関数を%rename。
  • typedefで定義された別名クラス名でインスタンスは作れない
    そもそも、その別名クラス名のwrapperが作成されない。(元の型と別名型の共通性はswig内で管理されている)
    対策: 元の名前のクラスを使う。
  • template内typedefを利用した何か
    概ねswigでうまく扱えない。もしかしたらできるのかもしれないが、%templateの展開地獄と型不一致地獄に延々巻き込まれるので、精神衛生上swigのversion upを待った方が良い。(2.0.5でtypedef絡みのpatchがありそうなので)。
    対策: そのクラスのwrappingを諦める。伝家の宝刀 %extendを使い、その諦めたクラスを使っているクラスに諦めたクラスに対する代替I/Fを追加する。
    • 例1: map::mapped_typeを使ってごちゃごちゃするOgre::MapIterator
      対策: Managerクラス内のデータ参照に使っているので、Managerクラスにeach_datatypeを作る。
    • 例2: Ogre::vector::typeを使うStringVector
      対策: StringVector自体は、RubyのArrayと等価。なので、StringVectorの代わりにArrayを受け取る/返す操作をするI/Fを追加する。もしくはArrayの代わりに別途StringVectorを内部で使用している新しいクラスを自作、それ向けのI/Fを同様に追加。
  • Listener/Handler対策
    C++側にListenerクラスを継承したRubyクラスを登録し、C++側からRuby側のクラスを呼び出すタイプの話。SwigのドキュメントのCross language polymorphismに対策が書いてある。
    対策
    1. トップの%moduleにdirectors="1"
      %module(directors="1") "MyNameSpace"
    2. Ruby側で継承するListenerクラスwrapperにdirector
      %feature("director") Ogre::FrameListener;