部内プレゼン向けにプロキシ環境下のパソコン内に VirtualBox を使って仮想ビルドサーバを構築したので手順をメモっておきます。
前提条件
IP アドレスに 192.168.56.101 を指定した仮想マシンに下記ソフトウェアをインストールして、maven プロジェクトを svn でバージョン管理、hudson でビルドします。
- OS : Ubuntu 9.10 Server
- Web サーバ : Apache 2.2.12
- SVN サーバ : Subversion 1.6.5
- JDK : Sun JDK 1.6.0_15
- アプリケーションサーバ : Tomcat 6.0.20
- ビルドツール : Maven 2.2.1
- ビルドサーバ : Hudson 1.352
apache
何はともあれ apache を入れます。
$ sudo apt-get install apache2
http://192.168.56.101/ にアクセスして「It works!」と表示されることを確認します。
svn
subversion をインストールして web_dav 経由でアクセスできるよう設定します。
$ sudo apt-get install subversion subversion-tools libapache2-svn
管理対象プロジェクト名を「test」として、url やら path やらを設定します。
$ sudo vi /etc/apache2/mods-enabled/dav_svn.conf <Location /svn/test> DAV svn SVNPath /home/svn/repos/test AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location>
dav_svn.conf で指定したパスにリポジトリを作成し、web_dav 経由でアクセスできるよう www-data ユーザに所有権を与えます。
$ sudo mkdir -p /home/svn/repos $ sudo svnadmin create /home/svn/repos/test $ sudo chown -R www-data /home/svn/repos/test
dav_svn.conf で指定した認証用ファイルにアカウントを追加します。
$ sudo htpasswd -c dav_svn.passwd xxx New password: Re-type new password: Adding password for user xxx
apache を再起動して http://192.168.56.101/svn/test にアクセスし、「Revision 0:」と表示されることを確認します。
$ sudo /etc/init.d/apache2 restart
java
java をインストールします。他に特に書くことがないので申し訳程度にバージョン確認手順も載せていますが、別に実行する必要はありません。
$ sudo apt-get install sun-java6-jdk sun-java6-source $ 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)
tomcat
hudson は winstone というサーブレットコンテナを内蔵しており、別途コンテナを用意する必要はありませんが、開発したアプリを載せたり何だかんだと使う機会も多いので、tomcat をインストールします。
$ sudo apt-get install tomcat6 tomcat6-admin tomcat6-user tomcat6-common
http://192.168.56.101:8080/ にアクセスして「It works!」と表示されることを確認したら、続いて tomcat-users.xml に admin 権限のユーザを追加します*1。
$ sudo cp -p /etc/tomcat6/tomcat-users.xml /etc/tomcat6/tomcat-users.xml.org $ sudo vi /etc/tomcat6/tomcat-users.xml <tomcat-users> <role rolename="tomcat"/> <role rolename="manager"/> <role rolename="admin"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="admin" password="xxx" roles="admin,manager"/> </tomcat-users>
tomcat を再起動したら http://192.168.56.101:8080/manager/html にアクセスし、設定した admin ユーザで 管理コンソールにログインできることを確認します。
$ sudo /etc/init.d/tomcat6 restart * Stopping Tomcat servlet engine tomcat6 [ OK ] * Starting Tomcat servlet engine tomcat6 [ OK ]
maven
maven プロジェクトをビルドするので maven をインストールします。hudson には maven の自動インストール機能がありますが、プロキシやリポジトリの設定等を予め行っておきたいので、ここでは別途インストールします。
$ sudo apt-get install maven2 $ mvn -version Apache Maven 2.2.1 (rdebian-1) Java version: 1.6.0_15 Java home: /usr/lib/jvm/java-6-sun-1.6.0.15/jre Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux" version: "2.6.31-14-generic-pae" arch: "i386" Family: "unix"
バージョンあたりを表示してインストールが完了したことを確認したら、設定ファイルにプロキシとローカルリポジトリの設定を追加します。
$ sudo cp -p /etc/maven2/setting.xml /etc/maven2/settings.xml.org $ sudo vi /etc/maven2/settings.xml <localRepository>/etc/maven2/repository</localRepository> <proxy> <active>true</active> <protocol>http</protocol> <host>your.proxy.host</host> <port>8080</port> <!-- <nonProxyHosts>local.net|some.host.com</nonProxyHosts> --> </proxy>
tomcat6 ユーザが実行する hudson からリポジトリに書き込めるよう所有権を設定します。
$ sudo chown tomcat6:nogroup /etc/maven2/repository
hudson
いよいよ hudson をインストールします。tomcat のアプリケーションデプロイ用パスに移動して war ファイルを wget します。
$ cd /var/lib/tomcat6/webapps/ $ sudo wget http://hudson-ci.org/latest/hudson.war
hudson の作業用ディレクトリを作成し、tomcat6 ユーザに所有権を与えます。
$ sodo mkdir /home/hudson $ sudo chown tomcat6:nogroup /home/hudson
環境変数 JAVA_OPTS に HUDSON_HOME として上記作業用パスを渡します。また、サーブレットで動的に画像を生成する場合、java.awt.headless に true を設定する必要があるらしいので、これも併せて渡します。
さらに、ubuntu の apt-get で tomcat をインストールした場合、セキュリティマネージャが有効になっているので、これを無効に設定します。
$ sudo vi /etc/default/tomcat6 JAVA_OPTS="-DHUDSON_HOME=/home/hudson -Djava.awt.headless=true" TOMCAT6_SECURITY=no
最後に tomcat 用の設定ファイルに hudson のジョブ名等に日本語を使用できるようにするため URIEncoding 属性を追加します。
$ sudo cp -p /etc/tomcat6/server.xml /etc/tomcat6/server.xml.org $ sudo vi /etc/tomcat6/server.xml <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
設定が完了したら tomcat を再起動し、http://192.168.56.101:8080/hudson/ にアクセスして hudson の画面が表示されることを確認します。
$ sudo /etc/init.d/tomcat6 restart
apache と tomcat
これまでの人生でもう 5,000 回くらい「:8080」と叩き続けてきていい加減いやになったので apache と tomcat を連携します。
まずは mod_proxy 用の設定ファイルに設定を追加します。ここでは物理 LAN からのみのアクセスを想定して Allow from には 192.168.56.0/24 を指定しています。
$ sudo cp -p /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-available/proxy.conf.org $ sudo vi /etc/apache2/mods-available/proxy.conf <IfModule mod_proxy.c> #turning ProxyRequests on and allowing proxying from all may allow #spammers to use your proxy to send email. ProxyRequests Off <Proxy *> AddDefaultCharset off Order deny,allow Deny from all Allow from 192.168.56.0/24 </Proxy> # Enable/disable the handling of HTTP/1.1 "Via:" headers. # ("Full" adds the server version; "Block" removes all outgoing Via: headers) # Set to one of: Off | On | Full | Block ProxyVia On </IfModule>
続いて mod_proxy_ajp 用の設定ファイルに設定を追加します。
$ sudo vi /etc/apache2/mods-available/proxy_ajp.conf <IfModule mod_proxy_ajp.c> <Location /hudson> ProxyPass ajp://localhost:8009/hudson </Location> </IfModule>
設定が完了したら a2enmod でモジュールを有効化します。既に有効だと言われているような気もしますが、ここで a2enmod を叩かないと設定が効きませんでした。
$ sudo a2enmod proxy_ajp Considering dependency proxy for proxy_ajp: Module proxy already enabled Enabling module proxy_ajp. Run '/etc/init.d/apache2 restart' to activate new configuration! $ sudo a2enmod proxy_ajp Considering dependency proxy for proxy_ajp: Module proxy already enabled Enabling module proxy_ajp. Run '/etc/init.d/apache2 restart' to activate new configuration!
$ sudo /etc/init.d/tomcat6 restart * Stopping Tomcat servlet engine tomcat6 [ OK ] * Starting Tomcat servlet engine tomcat6 [ OK ] $ sudo /etc/init.d/apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
なんかループバックアドレスはどうのと文句を言われているような気もしますが、華麗にスルーして http://192.168.56.101/hudson/ にアクセスして hudson の画面が表示されることを確認します。