ページ更新: 2010-06-20 (日) (3043日前)

(2009-02-15)

Ubuntuに関するメモ。

目次

[編集]

Ubuntu 10.04 LTS Server, Trac-0.11.7.ja1.zip, Hudson マスター #

(2010-05-01, 作業終わってるけどまだここに書いてない 2010-06-20)

VMware Server 2.0.2 on Windows XP に入れた後、実PCを確保できたので、そっちに移動した。

実PCはPentium4でメモリ512MBのせいか、ちょっと遅い。(20〜50MBくらいスワップしてる)

[編集]

VMware-toolsのインストール #

当初は VMware Server 2.0.2 の上で動かしていたので。実PCに移動した後にアンインストールした。

$ sudo aptitude update && sudo aptitude safe-upgrade && sudo aptitude autoclean
(カーネルが更新されていたら、再起動しておく)
 
$ sudo aptitude install build-essential
$ sudo -i
# mount /dev/sr0 /cdrom
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
# tar zxf /cdrom/VMwareTools-8.1.4-227600.tar.gz
# umount /cdrom
# cd vmware-tools-distrib/
# ~/vmware-tools-distrib# ./vmware-install.pl -d
[編集]

OSとパッケージのバージョン確認 #

$ uname -a
Linux ubuntu1004s 2.6.32-21-generic-pae #32-Ubuntu SMP Fri Apr 16 09:39:35 UTC 2010 i686 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04 LTS
Release:        10.04
Codename:       lucid

mod_wsgi, subverison, mercurialのバージョンを確認:

$ aptitude show libapache2-mod-wsgi
...
Version: 2.8-2ubuntu1
...

$ aptitude show subversion
...
Version: 1.6.6dfsg-2ubuntu1
...

$ aptitude show mercurial
...
Version: 1.4.3-1
...
[編集]

Subversion, Mercurial, その他のパッケージのインストール #

エディタ、etckeeper、Mercurial をインストールする

$ sudo aptitude install mercurial etckeeper emacs23-nox ng-cjk
(/root/.hgrc と /etc/etckeeper/etckeeper.conf を修正、etckeeper init 、etckeeper commit を実行)

Subversion と Python-binding、Apache2 をインストールする:

$ sudo aptitude install libapache2-mod-wsgi libapache2-svn
$ sudo aptitude install python-dev python-setuptools unzip
$ sudo aptitude install python-subversion subversion
(GenshiとPygments はsetuptoolsでインストールする。Genshiにはpython-devが必要)

ついでに:

$ sudo aptitude install htop gawk

python, subverison, mercurialのバージョンを確認:

$ python -V
Python 2.6.5

$ svn --version
svn, バージョン 1.6.6 (r40053)
   コンパイル日時: Dec 12 2009, 05:04:54
...

$ hg version
Mercurial - 分散構成管理ツール(バージョン 1.4.3)
...

Subversion-binding, Mercurial-binding の動作確認:

$ python -c "from svn import core"
$ python -c "import mercurial"

setuptoolsのバージョンを確認:

$ aptitude show python-setuptools
パッケージ: python-setuptools
新規: yes
状態: インストール済み
自動的にインストールされた: no
バージョン: 0.6.10-4ubuntu1
...

Subversionフックで使うメール送信スクリプトとメールクライアント、ローカル用のメールサーバ(自分はpostfixを使った)をインストールする(subversion-tools しか使わないけど):

$ sudo aptitude install postfix subversion-tools svnmailer bsd-mailx
...
The following NEW packages will be installed:
  bsd-mailx libconfig-inifiles-perl{a} libsvn-perl{a} libxslt1.1{a} postfix subversion-tools svnmailer
  xsltproc{a}
0 packages upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 155kB/3623kB of archives. After unpacking 14.1MB will be used.
Do you want to continue? [Y/n/?] y
...
(Postfix Configuration は Local only にした。後で dpkg-reconfigure postfix で変更可能)

subversion-tools に含まれる mailer.py と設定ファイルのサンプルの位置を確認する:

$ dpkg -L subversion-tools | grep mailer
/usr/share/subversion/hook-scripts/mailer
/usr/share/subversion/hook-scripts/mailer/mailer.conf.example
/usr/share/subversion/hook-scripts/mailer/mailer.py

svnmailer の位置を確認する (当面は使わないけど):

$ dpkg -L svnmailer | grep /bin/
/usr/bin/svn-mailer
[編集]

Genshi, Pygments #

GenshiとPygmentsをインストールする:

$ sudo easy_install --always-unzip Genshi==0.5.1
...
Installed /usr/local/lib/python2.6/dist-packages/Genshi-0.5.1-py2.6-linux-i686.egg
Processing dependencies for Genshi==0.5.1
Finished processing dependencies for Genshi==0.5.1
$ sudo easy_install Pygments
...
Installed /usr/local/lib/python2.6/dist-packages/Pygments-1.3.1-py2.6.egg
Processing dependencies for Pygments
Finished processing dependencies for Pygments
[編集]

Trac #

Trac-ja を入手する:

$ mkdir src
$ cd src
$ wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.7.ja1.zip
...

Tracのアーカイブを展開して、名前を変えて、Mercurialのリポジトリを作成して、コミットする:

$ unzip Trac-0.11.7.ja1.zip
$ mv Trac-0.11.7.ja1 Trac-ja-repo
$ cd Trac-ja-repo/
$ hg init
$ hg commit -A -m "Trac-0.11.7.ja1"
 ...

$ hg branch interact
作業領域をブランチ interact に設定

$ hg tag interact-base

defaultブランチに切り替えて、trac.css を修正する (余談:TracLightning-2.2.5でtrac.cssがちょっと変わった? - 大食雑記 ):

$ hg update default
ファイル状態: 更新数 0、マージ数 0、削除数 1、衝突未解決数 0

$ find . -name trac.css
./trac/htdocs/css/trac.css
$ emacs trac/htdocs/css/trac.css
...
$ hg diff
...
$ hg commit -m "fixed: extlink position http://d.hatena.ne.jp/ohgui/20090530/1243684618"
新規ヘッドが増えました

Tracをインストールする。(Tracはさほど大きくないので)Mercurial でcloneして作業する:

$ cd ~/src
$ hg clone Trac-ja-repo/ trac-work
ブランチ default へ更新中
ファイル状態: 更新数 446、マージ数 0、削除数 0、衝突未解決数 0

$ cd trac-work
$ sudo python setup.py install
...
Processing Trac-0.11.7.ja1-py2.6.egg
creating /usr/local/lib/python2.6/dist-packages/Trac-0.11.7.ja1-py2.6.egg
Extracting Trac-0.11.7.ja1-py2.6.egg to /usr/local/lib/python2.6/dist-packages
Adding Trac 0.11.7.ja1 to easy-install.pth file
Installing trac-admin script to /usr/local/bin
Installing tracd script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/Trac-0.11.7.ja1-py2.6.egg
Processing dependencies for Trac==0.11.7.ja1
Searching for Genshi==0.5.1
Best match: Genshi 0.5.1
Processing Genshi-0.5.1-py2.6-linux-i686.egg
Genshi 0.5.1 is already the active version in easy-install.pth

Using /usr/local/lib/python2.6/dist-packages/Genshi-0.5.1-py2.6-linux-i686.egg
Searching for distribute==0.6.10
Best match: distribute 0.6.10
Adding distribute 0.6.10 to easy-install.pth file
Installing easy_install script to /usr/local/bin
Installing easy_install-2.6 script to /usr/local/bin

Using /usr/lib/python2.6/dist-packages
Finished processing dependencies for Trac==0.11.7.ja1

(もし大きければ、hg clone する代わりに、setup.py の終了後に、「hg status -u -n | sudo xargs rm」で Mercurial の管理外のファイルを消しても良い)

$ which trac-admin
/usr/local/bin/trac-admin

/usr/local/bin に、TracのcontribのSubversionフックスクリプトのシンボリックリンクを作成する:

$ cd ~/src/trac-work/contrib
$ cd contrib
$ ls *hook
trac-post-commit-hook*  trac-pre-commit-hook*

$ sudo ln -s trac-post-commit-hook /usr/local/bin
$ sudo ln -s trac-pre-commit-hook /usr/local/bin
$ ls /usr/local/bin/*hook
/usr/local/bin/trac-post-commit-hook@  /usr/local/bin/trac-pre-commit-hook@
[編集]

Tracプラグイン #

accountmanagerpluginをインストールする(後でも良いが):

$ sudo easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk
Downloading http://trac-hacks.org/svn/accountmanagerplugin/trunk
Doing subversion checkout from http://trac-hacks.org/svn/accountmanagerplugin/trunk to /tmp/...
Processing trunk
Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-zBKcqk/trunk/egg-dist-tmp-ubQYx_
Adding TracAccountManager 0.2.1dev-r7737 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/TracAccountManager-0.2.1dev_r7737-py2.6.egg
Processing dependencies for TracAccountManager==0.2.1dev-r7737
Finished processing dependencies for TracAccountManager==0.2.1dev-r7737

iniadminにパッチを当ててからインストールする。最初に、ソースコードを取得する:

$ cd ~/src
$ svn co http://trac-hacks.org/svn/iniadminplugin/0.11 iniadminplugin-0.11
A    iniadminplugin-0.11/setup.py
...
リビジョン 7912 をチェックアウトしました。

Mercurial (hg) のリポジトリを作って、コミットする:

$ cd iniadminplugin-0.11
$ ls
iniadmin/  setup.py
$ hg init
$ echo -e 'syntax: glob\n.svn' > .hgignore
$ svnversion
7912
$ hg commit -A -m "initadminplugin-0.11 r7912"
.hgignore を追加登録中
iniadmin/__init__.py を追加登録中
iniadmin/htdocs/css/iniadmin.css を追加登録中
iniadmin/iniadmin.py を追加登録中
iniadmin/templates/iniadmin.html を追加登録中
setup.py を追加登録中

パッチ(#4179 ([Patch] Against UnicodeDecodeError on Option with non-ASCII doc) - Trac Hacks) を取得する:

$ cd ~/src
$ wget 'http://trac-hacks.org/attachment/ticket/4179/nonasciidoc-0.11_r3915.patch?format=raw' \
-O nonasciidoc-0.11_r3915.patch
...

パッチを当てて、コミットする:

$ cd ~/src/iniadminplugin-0.11/iniadmin
$ patch < ../../nonasciidoc-0.11_r3915.patch
patching file iniadmin.py

$ hg st
M iniadmin/iniadmin.py
$ hg diff
...

$ hg commit -m "patch: interact http://trac-hacks.org/ticket/4179"

パッチを当てたiniadminpluginをインストールする

$ cd ~/src/iniadminplugin-0.11/
$ sudo python setup.py install
...
Processing IniAdmin-0.2-py2.6.egg
creating /usr/local/lib/python2.6/dist-packages/IniAdmin-0.2-py2.6.egg
Extracting IniAdmin-0.2-py2.6.egg to /usr/local/lib/python2.6/dist-packages
Adding IniAdmin 0.2 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/IniAdmin-0.2-py2.6.egg
Processing dependencies for IniAdmin==0.2
Finished processing dependencies for IniAdmin==0.2

$ hg st -un | sudo xargs rm
[編集]

Apache, wsgi #

Trac, Subverison, WSGIで使うディレクトリを作成:

$ sudo mkdir /var/svn /var/trac /var/cache/egg /usr/local/lib/wsgi
$ sudo chown -R www-data:www-data /var/svn /var/trac /var/cache/egg /usr/local/lib/wsgi

Subversion用のスタイルシートを取得して、/var/www/ にコピーする:

$ cd ~/src
$ svn co http://guest@tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/svnindex/
...
Username: guest
Password for 'guest': ★リターンのみ
...
A    svnindex/menucheckout.ico
A    svnindex/svnindex.xsl
A    svnindex/svnindex.css
 U   svnindex
リビジョン 18939 をチェックアウトしました。

$ sudo cp svnindex/* /var/www/

Trac起動用のwsgiを作成する:

$ sudo emacs /usr/local/lib/wsgi/trac.wsgi

/usr/local/lib/wsgi/trac.wsgi の内容:

import sys
sys.stdout = sys.stderr

import os
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac'
os.environ['PYTHON_EGG_CACHE'] = '/var/cache/egg'

import trac.web.main

application = trac.web.main.dispatch_request

Trac用のサイト設定を作成する:

$ sudo emacs /etc/apache2/sites-available/trac

/etc/apache2/sites-available/trac の内容:

## Digest認証
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

## mod_deflate(圧縮)
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml text/css application/x-javascript text/x-javascript
    DeflateFilterNote ratio
    LogFormat '%t "%r" %b (%{ratio}n) "%{User-agent}i"' deflate
#    CustomLog logs/deflate.log deflate
</IfModule>

## mod_exipres(キャッシュ期限の設定)
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css A259200
    ExpiresByType application/x-javascript A259200
    ExpiresByType application/javascript A259200
    ExpiresByType text/x-javascript A259200
    ExpiresByType image/gif A259200
    ExpiresByType image/png A259200
    ExpiresByType image/jpeg A259200
    ExpiresByType image/x-icon A259200
</IfModule>

## trac.ini [trac] htdocs_location用 htdocs以下のファイルをApacheで扱うことで高速化する。
Alias /trac_htdocs "/usr/local/lib/python2.6/dist-packages/Trac-0.11.7.ja1-py2.6.egg/trac/htdocs/"
<Location /trac_htdocs>
    Order allow,deny
    Allow from all
    FileETag none
    AddDefaultCharset UTF-8
</Location>

## trac 全プロジェクトの共通設定
WSGIScriptAlias /trac "/usr/local/lib/wsgi/trac.wsgi"
<Location /trac>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Location>

<LocationMatch "/[^/]+/login">
    AuthType Digest
    AuthName trac
    AuthUserFile "/var/trac/htdigest"
    Require valid-user
</LocationMatch>

## svn 全プロジェクトの共通設定
<Location /svn>
    DAV svn
    SVNParentPath "/var/svn"
    SVNListParentPath on
    SVNIndexXSLT /svnindex.xsl
    AuthType Digest
    AuthName trac
    AuthUserFile "/var/trac/htdigest"
    Require valid-user
</Location>

(後で書く)

  • /var/www と /usr/lib/cgi-bin にも、FileEtag none を追加する
    • /etc/apache2/sites-availale/default を修正

Apacheモジュールを有効にする (wsgi, dav_svn, deflate は既に有効になっていたので省略):

$ sudo a2enmod dav_fs
Considering dependency dav for dav_fs:
Module dav already enabled
Enabling module dav_fs.
Run '/etc/init.d/apache2 restart' to activate new configuration!

$ sudo a2enmod expires
Enabling module expires.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Tracサイトを有効にする:

$ sudo a2ensite trac
Enabling site trac.
Run '/etc/init.d/apache2 reload' to activate new configuration!

Apacheに読み込ませて、文法を検査する:

$  . /etc/apache2/envvars
$  apache2 -t
Syntax OK

$  sudo /etc/init.d/apache2 restart
* Restarting web server apache2
... waiting    ...done.

$ sudo tail /var/log/apache2/error.log
...

error.log で KeyError が記録されている。でも apache2 はちゃんと起動しているようだ。

[編集]

動作確認用にSubversionリポジトリを作成し、フックスクリプトを用意する #

Subversionリポジトリ「sandbox」を作成:

$ sudo svnadmin create /var/svn/sandbox
$ sudo svnadmin verify /var/svn/sandbox
* Verified revision 0.
$ sudo chown -R www-data:www-data /var/svn

Subversionのフックスクリプトを作成する。

$ sudo /var/svn/sandbox/hooks
$ sudo rm *.tmpl
$ sudo emacs pre-revprop-change post-revprop-change post-commit post-commit post-lock post-unlock
$ sudo chown www-data:www-data *

/var/svn/sandbox/hooks/pre-revprop-change の内容:

#!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

/var/svn/sandbox/hooks/post-revprop-change の内容:

#!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
TRAC_ENV='/var/trac/sandbox/'

/usr/share/subversion/hook-scripts/mailer/mailer.py propchange2 "$REPOS" "$REV" "$USER" "$PROPNAME" "$ACTION"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]
then
    /usr/local/bin/trac-admin $TRAC_ENV resync $REV
    exit 0
fi

/var/svn/sandbox/hooks/post-commit の内容:

#!/bin/sh

REPOS="$1"
REV="$2"
TRAC_ENV='/var/trac/sandbox/'

/usr/share/subversion/hook-scripts/mailer/mailer.py commit "$REPOS" "$REV"

LANG=ja_JP.UTF-8 /usr/bin/python /usr/local/bin/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"

/var/svn/sandbox/hooks/post-lock の内容:

#!/bin/sh

REPOS="$1"
USER="$2"

/usr/share/subversion/hook-scripts/mailer/mailer.py lock "$REPOS" "$USER"

/var/svn/sandbox/hooks/post-unlock の内容:

#!/bin/sh

REPOS="$1"
USER="$2"

/usr/share/subversion/hook-scripts/mailer/mailer.py unlock "$REPOS" "$USER"

メール通知用のスクリプト mailer.py 用の設定ファイルを作成する:

$ cd /var/svn/sandbox/conf
$ sudo rm *
$ sudo emacs mailer.conf
$ sudo chown www-data:www-data *

/var/svn/sandbox/conf/mailer.conf の内容:

[general]
mail_command = /usr/sbin/sendmail

[defaults]
diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s
commit_subject_prefix =
propchange_subject_prefix =
lock_subject_prefix =
unlock_subject_prefix =
from_addr =
to_addr = sandbox
reply_to =
generate_diffs = none
commit_url = http://trac.example.jp/trac/sandbox/changeset/%(rev)s
show_nonmatching_paths = yes

[maps]

なお、mailer.conf のサンプルが /usr/share/subversion/hook-scripts/mailer/mailer.conf.example をコピーして修正しても良い。 このサンプルを用いる場合、以下のようにすると、設定だけを抜き出して表示できる:

$ grep -v ^# /var/svn/sandbox/conf/mailer.conf | gawk 'length($0)>0'

メール通知用のaliasを作成する。別途、メーリングリストを用意しても良い。 (quickml が便利だ):

$ sudo emacs /etc/aliases
$ sudo newaliases

/etc/aliases の例(mailer.conf の to_addr の宛先「sandbox」を追加):

## user alias

## project alias
sandbox: xxxxxxxxx

xxxxxxxx には、このUbuntuホストの実在のユーザアカウント名を記載する。

実在しないユーザにメールを送りたいときは、user alias にメールアドレスのaliasを追加する:

## user alias
xxxxxxxx : yyyyyyyy@mail.example.jp
[編集]

動作確認用にTracプロジェクトを作成 #

Trac用のadminユーザを作成:

$ sudo -u www-data htdigest -c /var/trac/htdigest trac admin

Tracプロジェクト「sandbox」を作成:

$ sudo trac-admin /var/trac/sandbox initenv Sandbox sqlite:db/trac.db svn /var/svn/sandbox
$ sudo chown -R www-data:www-data /var/trac
$ sudo -u www-data trac-admin /var/trac/sandbox permission add admin TRAC_ADMIN
[編集]

Trac CSSをカスタマイズする #

(以下、作業中)

/usr/local/lib/trac_templates/site.html

site.html (すべてのTracで site.htmlを消したのち、trac.ini [inherit] に指定):

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/" py:strip="">
  <!--! Custom match templates go here -->

  <!--! Add site-specific style sheet -->
  <head py:match="head" py:attrs="select('@*')">
    ${select('*|comment()|text()')}
    <link rel="stylesheet" type="text/css" href="/trac_custom.css" />
  </head>

  <body py:match="body" py:attrs="select('@*')">
    <!--! Add site-specific header -->
    <div id="siteheader">
      project list:
      <a href="/trac/sandbox">sandbox</a>
      <a href="/trac/tips">tips</a>
    </div>

    ${select('*|text()')}

    <!--! Add site-specific footer -->
    <div id="sitefooter">
    </div>
  </body>
</html>

/var/www/trac_custom.css:

.wikipage h2 {
 border-bottom: 1px solid #b00;
 border-left: 6px solid #b00;
 font-size: 120%;
 margin-top: .5em
 margin-bottom: .5em;
 padding-left: 5px;
 padding-top: 3px;
 padding-bottom: 0px;
 width:98%;
}

.wikipage h3 {
 border-bottom: 1px dashed #b00;
 width:98%;
 padding-left: 11px;
}

/* Quick search */
#proj-search { width: 20em }

/* Navigation */
.nav li {
 padding: 0 .4em;
}

/* Main navigation bar */
#mainnav :link, #mainnav :visited {
 padding: .2em 0.8em;
}

/* changeset diff, code */
table.sidebyside td.l,
table.sidebyside td.r,
table.inline td.l,
table.inline td.r,
table.code tbody tr td {
 font-size: 12.0px;
}

#dirlist td.change, #dirlist td.size {
 color: #000000;
}

#info .props {
 color: #000000;
}

#preview h3, #changelog h3 {
 color: #000000;
}
[編集]

グループに権限を付与 #

グループ anonymous, authenticated, observer, developer に、以下の権限を割り振る:

User       Action         
--------------------------
admin      TRAC_ADMIN     
anonymous  CHANGESET_VIEW 
anonymous  LOG_VIEW       
anonymous  MILESTONE_VIEW 
anonymous  ROADMAP_VIEW   
anonymous  SEARCH_VIEW    
anonymous  TICKET_VIEW    
anonymous  TIMELINE_VIEW  
anonymous  WIKI_VIEW      
developer  CODE_REVIEW_DEV
developer  CODE_REVIEW_MGR
developer  MILESTONE_ADMIN
developer  TICKET_ADMIN   
developer  WIKI_ADMIN     
developer  observer       
observer   BROWSER_VIEW   
observer   FILE_VIEW      
observer   TICKET_APPEND  
observer   TICKET_CHGPROP 
observer   TICKET_CREATE  
observer   TICKET_MODIFY  
[編集]

Hudson #

(2010-05-13)

Hudsonのパッケージをインストールするための設定を行う。

$ wget -O - http://hudson-ci.org/debian/hudson-ci.org.key | sudo apt-key add -
...
$ sudo emacs /etc/apt/sources.list
$ sudo aptitude update

/etc/apt/sources.list のHudson用設定:

...
## Hudson-CI http://hudson-ci.org/debian/readme.html
deb http://hudson-ci.org/debian binary/
...

また、Hudson パッケージはまだ sun-java6-jre や gcj に依存しているようなので、sun-java6 を使うために sources.list の以下の部分をコメントアウトしておく:

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
deb http://archive.canonical.com/ubuntu lucid partner
# deb-src http://archive.canonical.com/ubuntu lucid partner

Java をインストールする。Javaプログラムもコンパイルしたいので、jre ではなく、jdkを使う。

$ sudo aptitude install sun-java6-jdk

(できれば openjdk-6 を使えると良いのだが)

javaは複数インストールできるので、他のがあったら、今回インストールした物 (sun-java6) を使うように切り替えておく:

$ sudo update-alternatives --config java
There is only one alternative in link group java: /usr/lib/jvm/java-6-sun/jre/bin/java
Nothing to configure.

$ sudo update-alternatives --config javac
There is only one alternative in link group javac: /usr/lib/jvm/java-6-sun/bin/javac
Nothing to configure.

javaのバージョンを確認(この当時のSun/Oracleの最新版は 1.6.0_20)

$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)

$ java -server -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode)

$ javac -version
javac 1.6.0_15

Hudsonパッケージをインストールする:

$ sudo aptitude install hudson
...
以下の新規パッケージがインストールされます:
  daemon{a} hudson
0 個のパッケージを更新、 2 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
29.1MB のアーカイブを取得する必要があります。 展開後に 29.6MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] y
...
hudson (1.352) を設定しています ...
システムユーザ `hudson' (UID 108) を追加しています...
新しいユーザ `hudson' (UID 108) をグループ `nogroup' に追加しています...
ホームディレクトリ `/var/lib/hudson' は作成しませんでした.
Setting up max open files limit to 8192
...
daemon.conf を追加登録中
default/hudson を追加登録中
init.d/hudson を追加登録中
...

Hudsonパッケージのファイルの一覧を表示:

$ dpkg -L hudson
/.
/etc
/etc/default
/etc/default/hudson
/etc/init.d
/etc/init.d/hudson
/usr
/usr/sbin
/usr/share
/usr/share/doc
/usr/share/doc/hudson
/usr/share/doc/hudson/copyright
/usr/share/doc/hudson/changelog.gz
/usr/share/hudson
/usr/share/hudson/hudson.war
/usr/bin
/var
/var/run
/var/run/hudson
/var/lib
/var/lib/hudson
/var/log
/var/log/hudson
$ sudo /etc/init.d/hudson
Usage: /etc/init.d/hudson {start|stop|restart|force-reload}

/var/log/hudson/hudson.log を見たところ、すでにhudsonが稼働していた。特にエラーなし。 http://ホスト名:8080/ にアクセスすると、Hudsonのダッシュボードも表示できた。

Hudsonをアップデートする。

$ wget http://hudson-ci.org/latest/hudson.war
$ sudo cp hudson.war /usr/share/hudson/
$ sudo /etc/init.d/hudson restart

メモ

  1. hudson パッケージのソースコードは apt-get source では入手できない。 Source code - hudson - Hudson Wiki より、 https://hudson.dev.java.net/svn/hudson/trunk/hudson/main/debian/ からsvn co すればよい。
[編集]

Hudson を Apache の背後で動かす #

(2010-05-13) 作業中

Apacheのhttpプロキシモジュールを有効にする:

$ sudo a2enmod proxy_http

(proxy_http のかわりに proxy_ajp を使う場合は、次のようにする)

$ sudo a2enmod proxy_ajp

次に、Hudson用の設定を用意する:

$ sudo emacs /etc/apache2/sites-available/hudson

/etc/apache2/sites-available/hudson の内容

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

<Location "/hudson">
    AuthType Digest
    AuthName "verify"
    AuthUserFile "/var/trac/htdigest"
    Require valid-user

    Order allow,deny
    Allow from 127.0.0.1
    Satisfy Any

    ProxyPass         http://127.0.0.1:8011/hudson
    ProxyPassReverse  http://127.0.0.1:8011/hudson
#    ProxyPass         ajp://127.0.0.1:8010/hudson
#    ProxyPassReverse  ajp://127.0.0.1:8010/hudson

    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/css application/javascript application/x-javascript text/x-javascript
    </IfModule>
</Location>

## slave agentからの認証を不要にする 
<LocationMatch "/hudson/computer/.*/slave-agent.jnlp">
    Allow from 127.0.0.1 XXX.XXX.XXX.XXX
    Satisfy Any
</LocationMatch>

<LocationMatch "/hudson/tcpSlaveAgentListener/">
    Allow from 127.0.0.1 XXX.XXX.XXX.XXX
    Satisfy Any
</LocationMatch>

Apache側のHudsonの設定を有効にする:

$ sudo a2ensite hudson
Enabling site hudson.
Run '/etc/init.d/apache2 reload' to activate new configuration!

$ source /etc/apache2/envvars
$ apache2 -t
Syntax OK
$ sudo /etc/init.d/apache2 restart

Hudson の設定を変えつつ、動作確認を行う。最初に--prefixを追加して確認する:

$ sudo emacs /etc/default/hudson
$ sudo /etc/init.d/hudson restart
(http://host:8080/hudson にアクセスして、ダッシュボードが表示されることを確認)

/etc/default/hudson の変更内容(1)

$ sudo hg diff -U0 /etc/default/hudson
diff -r 06dfee97cb5b default/hudson
--- a/default/hudson    Wed May 12 21:13:57 2010 +0900
+++ b/default/hudson    Wed May 12 22:24:39 2010 +0900
@@ -47,1 +47,1 @@
-HUDSON_ARGS="--webroot=/var/run/hudson/war"
+HUDSON_ARGS="--webroot=/var/run/hudson/war --prefix=/hudson"

(作業中)

次に、httpのIPアドレスを127.0.0.1に、httpのポート番号を8011に、ajpを無効にする:

$ sudo emacs /etc/default/hudson
$ sudo /etc/init.d/hudson restart
$ 

/etc/default/hudson の変更内容(2)

$ sudo hg diff -U0 /etc/default/hudson
diff -r 06dfee97cb5b default/hudson
--- a/default/hudson    Wed May 12 21:13:57 2010 +0900
+++ b/default/hudson    Wed May 12 22:27:21 2010 +0900
@@ -47,1 +47,1 @@
-HUDSON_ARGS="--webroot=/var/run/hudson/war"
+HUDSON_ARGS="--webroot=/var/run/hudson/war --prefix=/hudson --httpListenAddress=127.0.0.1 --httpPort=8011 --ajp13Port=-1"

(2010-05-13) httpではなく、ajp を用いてみたところ、エラーが発生した。

/etc/default/hudson

HUDSON_ARGS="--webroot=/var/run/hudson/war --prefix=/hudson --ajp13ListenAddress=127.0.0.1 --ajp13Port=8010 --httpPort=-1"

/etc/apache2/sites-available の httpプロキシをコメントアウト、ajpのコメント外した。

http://ホスト/hudson にアクセスしたところ、503 Service Temporarily Unavailable が発生した。 ログを見ると、エラーが発生していた。

なお、http://ホスト:8080/hudson には、問題なくアクセスできる。

/var/log/hudson/hudson.log の内容:

[Winstone 2010/05/12 23:05:54] - Error within request handler thread
java.lang.StringIndexOutOfBoundsException: String index out of range: 1963
        at java.lang.String.checkBounds(String.java:401)
        at java.lang.String.<init>(String.java:442)
        at winstone.ajp13.Ajp13IncomingPacket.readString(Ajp13IncomingPacket.java:275)
        at winstone.ajp13.Ajp13IncomingPacket.parsePacket(Ajp13IncomingPacket.java:189)
        at winstone.ajp13.Ajp13Listener.allocateRequestResponse(Ajp13Listener.java:179)
        at winstone.RequestHandlerThread.run(RequestHandlerThread.java:79)
        at java.lang.Thread.run(Thread.java:619)

/var/log/apache2/error.log の内容:

[Wed May 12 13:05:54 2010] [error] (70014)End of file found: ajp_ilink_receive() can't receive header
[Wed May 12 13:05:54 2010] [error] ajp_read_header: ajp_ilink_receive failed
[Wed May 12 13:05:54 2010] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) (127.0.0.1)
$ netstat -an | grep :8010
tcp6       0      0 127.0.0.1:8010          :::*                    LISTEN

(2010-05-13)

Hudsonのダッシュボード -> Hudsonの管理 -> システムの設定

E-mail通知

[編集]

Hudson用にSubversionのアカウントを作る #

(2010-05-25, 作業中)

アカウントを作成する:

$ sudo -u www-data htdigest /var/trac/htdigest trac hudson
Adding user hudson in realm trac
New password:
Re-type new password:

Hudsonにチェックアウト (つまりreadのみでよい) を許可する:

$ sudo -u www-data emacs /var/svn/authz
... (編集する)

/var/svn/authz の内容

[group]

[/]
hudson = r  ★ここに追加すると、全リポジトリをチェックアウトできるようになる。
alice = rw
bob = r
charlie = rw

[sandbox:/]   ★このセクションに追加すると、このリポジトリをチェックアウトできるようになる。
alice = r
bob = rw
charlie = rw
[編集]

Hudson用に公開暗号鍵を作る #

(2010-05-25, 作業中)

Hudson用のsshの鍵を作る (もっとも、127.0.0.1経由なら認証なしにしてもよいかも)

鍵を作成する:

$ sudo -u hudson ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/var/lib/hudson/.ssh/id_dsa):
Created directory '/var/lib/hudson/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/lib/hudson/.ssh/id_dsa.
Your public key has been saved in /var/lib/hudson/.ssh/id_dsa.pub.
The key fingerprint is:
07:41:0f:88:2b:30:89:2a:f0:d1:97:4b:6d:12:ab:03 hudson@host
The key's randomart image is:
+--[ DSA 1024]----+
|.. . ..*+        |
|* . o *.o+       |
|o+E. +.+. .      |
|o o....  .       |
|.  .o   S .      |
|     .   .       |
|                 |
|                 |
|                 |
+-----------------+

公開鍵を鍵束に登録する:

$ sudo -u hudson sh -c 'cat /var/lib/hudson/.ssh/id_dsa.pub >> /var/lib/hudson/.ssh/authorized_keys2'
$ sudo -u hudson chmod 600 /var/lib/hudson/.ssh/authorized_keys2

$ sudo -u hudson ls -l /var/lib/hudson/.ssh
合計 12
-rw------- 1 hudson nogroup 608 2010-05-25 20:07 authorized_keys2
-rw------- 1 hudson nogroup 672 2010-05-25 20:06 id_dsa
-rw-r--r-- 1 hudson nogroup 608 2010-05-25 20:06 id_dsa.pub

$ sudo -u hudson ls -ld /var/lib/hudson/.ssh
drwx------ 2 hudson nogroup 4096 2010-05-25 20:06 /var/lib/hudson/.ssh

このホスト自身にログインしてみる:

$ sudo -u hudson ssh hudson@localhost
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 1e:69:30:26:fb:3d:72:19:f5:73:d8:d7:53:d5:9c:af.
Are you sure you want to continue connecting (yes/no)? yes ★
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Linux host 2.6.32-22-generic-pae #33-Ubuntu SMP Wed Apr 28 14:57:29 UTC 2010 i686 GNU/Linux
Ubuntu 10.04 LTS

Welcome to Ubuntu!
...

hudson@host:~$ exit ★
logout
Connection to localhost closed.

$
[編集]

Subversion へのコミットを Hudson に通知 #

(2010-05-17) 作業中

通知手段は複数存在する:

  1. コミットフックでUUID, リポジトリのパスを通知
    1. 同一のSubversionリポジトリを扱っているすべてのHudsonジョブを起動できるので便利。
  2. Hudson から定期的にポーリング
    1. Subversion のhookを修正せずに実現できる
    2. でもSubverson側に負荷がかかる (とはいえ、CVS で同じことをするよりは、まだ現実的、だそうだ)
  3. コミットフックで、job をキック
    1. ジョブごとに設定が必要。あまりうれしくない

/var/svn/sandbox/hooks/post-commit の内容 (Hudson用に UUID..以下を追加)

#!/bin/sh

REPOS="$1"
REV="$2"
TRAC_ENV='/var/trac/sandbox/'

/usr/share/subversion/hook-scripts/mailer/mailer.py commit "$REPOS" "$REV"

LANG=ja_JP.UTF-8 /usr/bin/python /usr/local/bin/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"

UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  http://127.0.0.1/hudson/subversion/${UUID}/notifyCommit?rev=$REV

このリポジトリを使うHudsonジョブを作成しておき、さらに「SCMをポーリング」にチェックを入れる。なお「スケジュール」は空欄でよい。

Subversonでコミットしたと聞き、Hudsonジョブが起動されないときは、/var/log/hudson/hudson.log を見たり、Hudsonの「待機時間」(秒単位)を調べてみること。

[編集]

Ubuntu 8.04.2 LTS server, Trac-0.11.2.1.ja1.zip #

VMware Workstation 6.5.1を使用、Ubuntu 8.04.2 LTS server (8.04 LTS のポイントリリース) をインストールしておく。

手順は 第3回 TracをLinuxにインストール,Tracの基本的な設定:ITpro と大体同じ。 (少し手順を抜いて楽してるけど)

[編集]

パッケージを更新、カーネルが更新されたので再起動 #

$ sudo -i
# aptitude update && aptitude safe-upgrade
[編集]

VMware toolsをインストールして、再起動 #

$ sudo -i
# aptitude install build-essential linux-headers-`uname -r`
# mount /dev/cdrom /mnt
# tar zxf /mnt/VMwareTools-7.8.4-126130.tar.gz
# cd vmware-tools-distrib/
# ./vmware-install.pl
# shutdown -r now
[編集]

Tracに必要なソフトウェアをインストール #

# aptitude install libapache2-mod-python libapache2-svn python-setuptools unzip python-subversion python-pysqlite2
# easy_install -Z Genshi
[編集]

Trac-0.11.2.1.ja1.zipをインストール #

# wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.2.1.ja1.zip
# easy_install Trac-0.11.2.1.ja1.zip

# which trac-admin
/usr/bin/trac-admin
# trac-admin --version
trac-admin 0.11.2.1.ja1
[編集]

trac-admin, tracd で動作確認 #

Tracの環境を試しに作って、tracdで起動。(Subversionなし)

$ trac-admin /tmp/sample_project initenv
 :
Project Name [My Project]> ★Enter
 :
Database connection string [sqlite:db/trac.db]> ★Enter
 :
Repository type [svn]> ★Enter
 :
Path to repository [/path/to/repos]> ★Enter
 :
Congratulations!

$ tracd --port 8000 /tmp/sample_project/
Server starting in PID 6039.
Serving on 0.0.0.0:8000 view at http://127.0.0.1:8000/
 :