Hudson SlaveのLive USBを作る 2

続きます。

ここで、USBからブートしてSLAX上で作業します。ブートに成功するとKDEが立ち上がるはずです。

KConsoleを立ち上げて作業します。

Hudsonのアカウントを作る

swarmクラインアントを動かすアカウントを作ります。rootでもいいですがとりあえず"hudson"グループの"hudson"というアカウントを作ります。

root@slax:~# addgroup hudson
root@slax:~# useradd -g hudson -d /home/hudson -s /bin/bash hudson
root@slax:~# mkdir /home/hudson
root@slax:~# chown hudson:hudson /home/hudson

Swarmクライアントの動作環境を作る

/home/hudsonにswarmクライアントを配置し、FSルートを作成します。

root@slax:~# su - hudson
hudson@slax:~$ mkdir fsroot
hudson@slax:~$ ls 
fsroot/  swarm-client-1.0-jar-with-dependencies.jar

Swarmクライアントを起動時に実行する

ブートしたときに自動で起動するように、/etc/rc.d/rc.localを以下のように修正します。

root@slax:~# cat /etc/rc.d/rc.local
#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.

USER=hudson
USER_HOME=/home/${USER}
CLIENT=${USER_HOME}/swarm-client-1.0-jar-with-dependencies.jar
LOG=${USER_HOME}/hudson.log

JAVA_HOME=/usr/lib/java

# Swarm client option
DESCRIPTION="SLAX Live-USB"
EXECUTORS=2
FSROOT=${USER_HOME}/fsroot
LABELS="Swarm"

hudson_start() {
if [ -e ${CLIENT} ]; then
        /bin/su - "${USER}" \
        -c \
        "${JAVA_HOME}/bin/java -jar \"${CLIENT}\" \
        -description \"${DESCRIPTION}\" \
        -executors \"${EXECUTORS}\" \
        -fsroot \"${FSROOT}\" \
        -labels \"${LABELS}\" \
        > \"${LOG}\" 2>&1  &"
fi
}

hudson_start

また、/etc/rc.d/rc.local_shutdownを編集して、shutdown時にswarmクライアントを終了しログ等を削除するようにします。

root@slax:~# cat /etc/rc.d/rc.lo
rc.local           rc.local_shutdown
root@slax:~# cat /etc/rc.d/rc.local_shutdown
#!/bin/sh
#
USER=hudson
USER_HOME=/home/${USER}
LOG=${USER_HOME}/hudson.log
FSROOT=${USER_HOME}/fsroot

hudson_stop() {
        PID=`ps ax | grep swarm-client | grep -v grep | awk '{ print $1 }'`
        if [ -n "${PID}" ]; then
                /bin/kill "${PID}" > /dev/null 2>&1
        fi
        if [ -e "${LOG}" ]; then
                /bin/rm "${LOG}" > /dev/null 2>&1
        fi
        for jar in "${FSROOT}"/maven*.jar ; do
                /bin/rm "${jar}" > /dev/null 2>&1
        done
}

hudson_stop

Swarmクライアントが起動するか確認する

ここで、Swarmクライアントが動作するか確認します。

root@slax:~# /etc/rc.d/rc.local
root@slax:~# ps aux | grep swarm
hudson   14414  9.4  1.2 662988 25576 pts/1    Sl   19:47   0:00 /usr/lib/java/bin/java -jar /home/hudson/swarm-client-1.0-jar-with-dependencies.jar -description SLAX Live-USB -executors 2 -fsroot /home/hudson/fsroot -labels Swarm
root     14465  0.0  0.0   2972   824 pts/1    S+   19:48   0:00 grep swarm


Hudsonの画面も確認します。 Hudsonの管理 -> ノードの管理

設定画面


起動していることを確認できれば終了です。 shutdownがしっかり完了するまでUSBを抜かないでください。

USBの確認

USBの内容を確認してみます。

sogabe@nanaka ~/Desktop $ cd /media/disk/
sogabe@nanaka /media/disk $ ls
boot  slax
sogabe@nanaka /media/disk $ cd slax/
sogabe@nanaka /media/disk/slax $ ls
GNU_GPL  base     cheatcodes.txt  livecd.sgn    make_iso.sh  optional          rootcopy      tools
LICENSE  changes  images          make_iso.bat  modules      requirements.txt  slaxsave.zip  xino
sogabe@nanaka /media/disk/slax $ cd changes/
sogabe@nanaka /media/disk/slax/changes $ ls
dev  etc  home  lib  mnt  opt  root  tmp  usr  var
sogabe@nanaka /media/disk/slax/changes $ cd home/hudson
sogabe@nanaka /media/disk/slax/changes/home/hudson $ ls
fsroot  swarm-client-1.0-jar-with-dependencies.jar

slax/changesに先ほど作成したファイルが保存されていることが分かります。何か変更が必要な場合は、slax/changesにあるファイルを編集すればいいでしょう。

SLAX的には、slax/rootcopyというディレクトリにファイルを保存しておくと、起動時に該当のディレクトリにコピーされるようです。例えば、/home/hudson/fsrootというディレクトリが必要であれば、slax/rootcopy/home/hudson/fsrootというディレクトリを作っておけばいいようです。


これで、swarmクライアントのLiveUSB化は終わりです。SLAXのおかげで非常に容易にできることがわかります。たしかに、rootでログイン済みになってしまうとかセキュリティの面では不安ではありますが、そんな危険なところでHudsonのスレーブを使うこともないでしょう。


問題は、余ってる古いマシンでUSBブートできるのかとか、情報漏洩の関係でCD-ROMやUSBを使えないことが多くなっていることでしょう。私の職場でも、CD-ROMやUSBの使用には許可が必要ですし、もう少ししたらブレードサーバを導入してリモートデスクトップのみになる予定で、USBポートそのものがなくなりそうです。ついでに、インストールするソフトも制限されるのですが...。すばらしい開発環境になりそうです。そこまで開発効率を落としたいのか、開発をやらないSIerはこんなもんなのでしょうか。単なる愚痴です。


その3に続くかも。