ページ更新: 2010-06-20 (日) (4727日前)
(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> (後で書く)
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 メモ
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) 作業中 通知手段は複数存在する:
/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/ : |