以前書いた Rundeck のメモです。死蔵しておいてももったいないので Qiita で公開します。
内容は多少古くなっているので注意しください。
インストール
Rundeckをインストールします。今回使った環境は Ubuntu Linux 14.04 です。
使用した版はVersion 2.4.1です。これより古い版では、コマンド実行時の出力にASCII以外の文字が含まれていると、実行結果をそのままの形で扱えませんでした。
マルチバイト文字を正しく扱うために最新版を使用しましょう。
註) 2015-02-13 に 2.4.2 がリリースされました。
本稿の環境
Ubuntu 14.04
準備
http://rundeck.org/downloads.html からパッケージを入手します。
Debian/Ubuntu Install
Execute:
dpkg -i rundeck-2.4.1-1-GA.deb
ファイルのチェックサムを確認します。
% shasum rundeck-2.4.1-1-GA.deb
5ce117bc994c6911bfbd46cc6a7f58b76e2e228f rundeck-2.4.1-1-GA.deb
スーパーユーザになってパッケージをインストールします。
# dpkg -i rundeck-2.4.1-1-GA.deb
Selecting previously unselected package rundeck.
(Reading database ... 58039 files and directories currently installed.)
Preparing to unpack rundeck-2.4.1-1-GA.deb ...
Unpacking rundeck (2.4.1) ...
dpkg: dependency problems prevent configuration of rundeck:
rundeck depends on java6-runtime | java6-runtime-headless | java7-runtime | java7-runtime-headless; however:
Package java6-runtime is not installed.
Package java6-runtime-headless is not installed.
Package java7-runtime is not installed.
Package java7-runtime-headless is not installed.
dpkg: error processing package rundeck (--install):
dependency problems - leaving unconfigured
Processing triggers for ureadahead (0.100.0-16) ...
Errors were encountered while processing:
rundeck
残念ながらエラーになりました。
RundeckはJavaアプリケーションであるため、Javaのランタイム環境が必要です。推奨パッケージも含め一括でインストールするため、aptitudeでopenjdk-7-jreをインストールします。
# aptitude install openjdk-7-jre
The following NEW packages will be installed:
acl{a} at-spi2-core{a} ca-certificates-java{a} colord{a} cpp{a}
cpp-4.8{a} dbus-x11{a} dconf-gsettings-backend{a} dconf-service{a}
desktop-file-utils{a} fontconfig{a} fontconfig-config{a}
fonts-dejavu-core{a} fonts-dejavu-extra{a} gconf-service{a}
gconf-service-backend{a} gconf2{a} gconf2-common{a} gdisk{a} gvfs{a}
gvfs-common{a} gvfs-daemons{a} gvfs-libs{a} hicolor-icon-theme{a}
java-common{a} libasound2{a} libasound2-data{a} libasyncns0{a}
libatasmart4{a} libatk-bridge2.0-0{a} libatk-wrapper-java{a}
libatk-wrapper-java-jni{a} libatk1.0-0{a} libatk1.0-data{a}
libatspi2.0-0{a} libavahi-client3{a} libavahi-common-data{a}
libavahi-common3{a} libavahi-glib1{a} libbonobo2-0{a}
libbonobo2-common{a} libcairo-gobject2{a} libcairo2{a} libcanberra0{a}
libcloog-isl4{a} libcolord1{a} libcolorhug1{a} libcups2{a} libdatrie1{a}
libdconf1{a} libdrm-intel1{a} libdrm-nouveau2{a} libdrm-radeon1{a}
libexif12{a} libflac8{a} libfontconfig1{a} libfontenc1{a} libgconf-2-4{a}
libgconf2-4{a} libgd3{a} libgdk-pixbuf2.0-0{a} libgdk-pixbuf2.0-common{a}
libgif4{a} libgl1-mesa-dri{a} libgl1-mesa-glx{a} libglapi-mesa{a}
libgmp10{a} libgnome2-0{a} libgnome2-bin{a} libgnome2-common{a}
libgnomevfs2-0{a} libgnomevfs2-common{a} libgphoto2-6{a}
libgphoto2-l10n{a} libgphoto2-port10{a} libgraphite2-3{a} libgtk-3-0{a}
libgtk-3-bin{a} libgtk-3-common{a} libgtk2.0-0{a} libgtk2.0-bin{a}
libgtk2.0-common{a} libgudev-1.0-0{a} libgusb2{a} libharfbuzz0b{a}
libice6{a} libicu52{a} libidl-common{a} libidl0{a} libieee1284-3{a}
libisl10{a} libjasper1{a} libjbig0{a} libjpeg-turbo8{a} libjpeg8{a}
liblcms2-2{a} libllvm3.4{a} libltdl7{a} libmpc3{a} libmpfr4{a}
libnspr4{a} libnss3{a} libnss3-nssdb{a} libogg0{a} liborbit-2-0{a}
liborbit2{a} libpango-1.0-0{a} libpangocairo-1.0-0{a}
libpangoft2-1.0-0{a} libpciaccess0{a} libpixman-1-0{a} libpulse0{a}
libsane{a} libsane-common{a} libsecret-1-0{a} libsecret-common{a}
libsm6{a} libsndfile1{a} libtdb1{a} libthai-data{a} libthai0{a}
libtiff5{a} libtxc-dxtn-s2tc0{a} libudisks2-0{a} libv4l-0{a}
libv4lconvert0{a} libvorbis0a{a} libvorbisenc2{a} libvorbisfile3{a}
libvpx1{a} libwayland-client0{a} libwayland-cursor0{a} libx11-xcb1{a}
libxaw7{a} libxcb-dri2-0{a} libxcb-dri3-0{a} libxcb-glx0{a}
libxcb-present0{a} libxcb-render0{a} libxcb-shape0{a} libxcb-shm0{a}
libxcb-sync1{a} libxcomposite1{a} libxcursor1{a} libxdamage1{a}
libxfixes3{a} libxft2{a} libxi6{a} libxinerama1{a} libxkbcommon0{a}
libxmu6{a} libxpm4{a} libxrandr2{a} libxrender1{a} libxshmfence1{a}
libxt6{a} libxtst6{a} libxv1{a} libxxf86dga1{a} libxxf86vm1{a}
openjdk-7-jre openjdk-7-jre-headless{a} policykit-1-gnome{a}
sound-theme-freedesktop{a} tzdata-java{a} udisks2{a} x11-common{a}
x11-utils{a}
The following packages will be upgraded:
tzdata
The following partially installed packages will be configured:
rundeck
1 packages upgraded, 168 newly installed, 0 to remove and 8 not upgraded.
Need to get 241 kB/83.8 MB of archives. After unpacking 257 MB will be used.
Do you want to continue? [Y/n/?]
(中略)
Current status: 0 broken [-1], 8 updates [-1].
JREがインストールできたので、Rundeckのパッケージをインストールします。
# dpkg -i rundeck-2.4.1-1-GA.deb
(Reading database ... 66206 files and directories currently installed.)
Preparing to unpack rundeck-2.4.1-1-GA.deb ...
Unpacking rundeck (2.4.1) over (2.4.1) ...
Setting up rundeck (2.4.1) ...
usermod: no changes
Processing triggers for ureadahead (0.100.0-16) ...
インストールできました。サービスを起動します。
# service rundeckd start
rundeckd start/running, process 58776
起動には少し時間がかかります。ログが/var/log/rundeck/service.logに出力されているので確認してみます。
# tail /var/log/rundeck/service.log
2015-01-30 23:23:56.852:INFO:oejs.Server:jetty-7.6.0.v20120127
2015-01-30 23:23:58.750:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
2015-01-30 23:23:59.925:INFO:/:Initializing Spring root WebApplicationContext
INFO BootStrap: Starting Rundeck 2.4.1-1...
INFO BootStrap: using rdeck.base config property: /var/lib/rundeck
INFO BootStrap: loaded configuration: /etc/rundeck/framework.properties
INFO BootStrap: RSS feeds disabled
2015-01-30 23:24:20.216:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/var/lib/rundeck/exp/webapp/},/var/lib/rundeck/exp/webapp
2015-01-30 23:24:20.271:INFO:/:Initializing Spring FrameworkServlet 'grails'
2015-01-30 23:24:20.354:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:4440
oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:4440
が出力されていれば起動が完了しています。
古いバージョンのパッケージを使ったときに、インストール後のいくつかアクセス権の設定がおかしく、エラーが出ているかもしれません。筆者が試したときは /tmp/rundeck の所有者が root ユーザになって書き込みエラーが出ていました。正しくは rundeck ユーザが所有者であるべきですので、修正してください。
chown rundeck:rundeck /tmp/rundeckchmod 750 /tmp/rundeck
初期設定
デフォルトでは、Rundeck サービスのアクセス URL が
になっています。ソケット自体はIN6ADDR_ANY_INIT
でバインドしているため、どこからでもアクセスできるのですが、ログイン認証の後このURLにリダイレクトされてしまうため操作が継続できないと思います。
本稿では、SSH のダイナミックポートフォワードを利用して、Socks5プロキシ経由でアクセスしているため、このURLのままでも問題がないのですが、ほとんどの場合、デフォルトのままでは都合が悪いと思われます。
/etc/rundeck/rundeck-config.properties
に設定がありますのでこれを修正してください。
grails.serverURL=http://localhost:4440
修正後
grails.serverURL=http://ホスト名orIPアドレス:4440
I18N
デフォルトの設定ではコマンド出力がUTF-8なマルチバイトの文字を含むと、そこが ? に置換されてしまいます。rundeckdの実行時のcharsetがUTF-8になるように、/etc/rundeck/profileで
LANG=en_US.UTF-8
export LANG
あるいは
LANG=ja_JP.UTF-8
export LANG
を設定して起動する必要があります。
注意
古い版では、そもそもマルチバイトな文字列が扱えませんでした。この問題はv2.4.1で修正されていますので、v2.4.1以上を使うようにしてください。
ログイン
初期アカウントは、ユーザ名、パスワード共に admin です。
ログインできればこのような画面が表示されるでしょう。
ユーザアカウント
認証情報は/etc/rundeck/realm.propertiesで設定します。
形式は次の通りです。
<username>:<password>[,<rolename> ...]
初期状態ではadminユーザのデフォルトパスワードは平文で書かれていますが、これを秘匿するには次のようにします。
# java -cp /var/lib/rundeck/bootstrap/jetty-all-7.6.0.v20120127.jar org.eclipse.jetty.util.security.Password username password
Rundeckの管理者マニュアルに書かれているコマンドは古いJettyのときのものなので使用できません。現在のJetty 7での方法はこちらを参照してください。
MD5の形式でよければ、つぎのワンライナーでも作成できます。
printf "MD5:%s" $(read -sp "Password: " passwd; echo "$passwd") | md5sum
実行例
# java -cp /var/lib/rundeck/bootstrap/jetty-all-7.6.0.v20120127.jar org.eclipse.jetty.util.security.Password admin admin
admin
OBF:1u2a1toa1w8v1tok1u30
MD5:21232f297a57a5a743894a0e4a801fc3
CRYPT:adpexzg3FUZAk
出力の OBF:, MD5:, CRYPT: 行のいずれかをとして設定します。ハッシュ形式を示すOBF:, MD5:,
CRYPT:の部分も必要です。
admin:MD5:21232f297a57a5a743894a0e4a801fc3,user,admin,architect,deploy,build
ファイルを変更すると、つぎの認証からは新しい値が使用されます。サービスの再起動は不要です。
SSH 鍵の作成
Rundeckがコマンド実行際に使用するデフォルトのSSH鍵を作成しておきます。
プロジェクトごとに認証に使用する鍵を指定することができますので、からなずしもこの鍵を使う必要はありません。
# mkdir /var/lib/rundeck/.ssh
# chown rundeck:rundeck /var/lib/rundeck/.ssh
# chmod go-rwx /var/lib/rundeck/.ssh
# ssh-keygen -t rsa -f /var/lib/rundeck/.ssh/id_rsa -N '' -C Rundeck
Generating public/private rsa key pair.
Your identification has been saved in /var/lib/rundeck/.ssh/id_rsa.
Your public key has been saved in /var/lib/rundeck/.ssh/id_rsa.pub.
The key fingerprint is:
83:06:12:c0:bc:29:96:b3:1b:ae:c7:f8:71:b9:53:37 Rundeck
The key's randomart image is:
+--[ RSA 2048]----+
|+.. |
| o . |
| = . |
|.* . . . |
|o o o S |
| o o. E. |
|.o+ o. . . |
|.ooo.. |
|oo. .. |
+-----------------+
# chown rundeck:rundeck /var/lib/rundeck/.ssh/id_rsa*
つぎはプロジェクトの作成をします。