Chef ServerとChef Workstationを同一サーバに導入

一応メモ。

OS: CentOS 6.5 (final) minimal

Chef Server

URLは公式のをコピペ。

# rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.10-1.el6.x86_64.rpm
(略)
########################################### [100%]
Thank you for installing Chef Server!

The next step in the install process is to run:

sudo chef-server-ctl reconfigure

/etc/hosts にIPアドレスとホスト名を書いておく。

# chef-server-ctl reconfigure
(略)
Chef Client finished, 268 resources updated
chef-server Reconfigured!

これで https://(ホスト名)/ でweb-uiにアクセスできるはず。

Chef Workstation

# yum install git

Chef Clientパッケージのインストール

# curl -L http://www.opscode.com/chef/install.sh | bash
(略)
Thank you for installing Chef!

バージョン確認

# chef-client -v
Chef: 11.8.2

configureのテスト

# chef-server-ctl test
Configuring logging...
Creating platform...
Starting Pedant Run: 2014-01-15 05:44:39 UTC
setting up rspec config for #<Pedant::OpenSourcePlatform:0x00000000fe5678>
Configuring RSpec for Open-Source Tests
 _______  _______  _______  _______  _______  ______   _______
|       ||       ||       ||       ||       ||      | |       |
|   _   ||    _  ||  _____||       ||   _   ||  _    ||    ___|
|  | |  ||   |_| || |_____ |       ||  | |  || | |   ||   |___
|  |_|  ||    ___||_____  ||      _||  |_|  || |_|   ||    ___|
|       ||   |     _____| ||     |_ |       ||       ||   |___
|_______||___|    |_______||_______||_______||______| |_______|

     _______  _______  ______   _______  __    _  _______
    |       ||       ||      | |   _   ||  |  | ||       |
    |    _  ||    ___||  _    ||  |_|  ||   |_| ||_     _|
    |   |_| ||   |___ | | |   ||       ||       |  |   |
    |    ___||    ___|| |_|   ||       ||  _    |  |   |
    |   |    |   |___ |       ||   _   || | |   |  |   |
    |___|    |_______||______| |__| |__||_|  |__|  |___|

                    "Accuracy Over Tact"

                  === Testing Environment ===
(略)

Finished in 51.72 seconds
70 examples, 0 failures

ここで 0 examples, 0 failures となっているとどこか間違っている。/etc/hostsの記載漏れとか。

cookbook開発準備

面倒くさいのでrootで…。

# cd
# mkdir .chef
# git clone git://github.com/opscode/chef-repo.git

何も書いてないところはEnter。

# knife configure --initial
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb] 
Please enter the chef server URL: [https://chef:443] https://ホスト名:443
Please enter a name for the new user: [root]
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem]
Please enter the path to a chef repository (or leave blank): /root/chef-repo
Creating initial API user...
Please enter a password for the new user: 任意のパスワード
Created user[root]
Configuration file written to /root/.chef/knife.rb

Redmine認証でgitを使う

嵌りまくった。

OS: CentOS release 5.9 (Final)
Apache: 2.2.3
Database: Mysql Ver 14.12
Redmine: 2.3.3 stable
Git: 1.8.2.1

gitのベアリポジトリを作成

Redmineでのリポジトリ識別子は何でも良い。
gitのリポジトリは「プロジェクト識別子.任意の文字列」という名前で作成という記事をよく見かけたけど、現行のRedmineだとプロジェクト識別子だけでも大丈夫な模様。

mkdir -p /var/www/git/test
chown -R apache:apache /var/www/git
cd /var/www/git/test.repos
git --bare init --shared
git config --file config http.reseivepack true
git config --system core.quotepath false
git update-server-info

Apacheの設定

Redmine.pm や多くの記事ではGitのバージョンが古いものなのか、scriptAliasが/usr/libexecなどのパスになっていた部分はerror_logを見るまで気が付かなかった。

PerlLoadModule Apache::Authn::Redmine

SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL
scriptAlias /git/ /usr/bin/git-http-backend/

<Location /git/>
  PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler

  AuthType Basic
  AuthName Git
  Require valid-user

  RedmineDSN "DBI:mysql:database=Redmineデータベース名;host=localhost"
  RedmineDbUser "Redmine用DBユーザ名"
  RedmineDbPass "Redmine用DBユーザパスワード"
  RedmineGitSmartHttp yes
</Location>

Apache再起動。

接続先URLの指定はconfのLocationとgit上のリポジトリ名の組み合わせとなる。

http://hoge.com/git/test

Redmine認証でローカルのsubversionを使う

探せば情報は転がってるけど備忘録として。以下実施した環境。

OS: CentOS release 5.9 (Final)
Apache: 2.2.3
Database: Mysql Ver 14.12
Redmine: 2.3.3 stable
Subversion: 1.6.11

svnリポジトリの作成

リポジトリ格納場所はDocumentoRoot配下を避ける。リポジトリ名はRedmineのプロジェクト識別子と一致している必要がある。

mkdir /var/www/svn
svnadmin create /var/www/svn/test
chown -R apache:apache /var/www/svn

Apacheでの設定

/etc/http/conf.d 配下にconfファイルを作成。

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
  DAV svn
  SVNParentPath "/var/www/svn"
  AuthType Basic
  AuthName redmine
  Require valid-user
  PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler
  
  RedmineDSN "DBI:mysql:database=データベース名;host=localhost"
  RedmineDbUser "Redmine用DBユーザ名"
  RedmineDbPass "Redmine用ユーザのパスワード"
</Location>

Apacheを再起動。

Uberを利用した。

f:id:r1990297:20131115015921p:plain:right
14日にテスト運行を始めたUber。ちょうど自社に戻る用事があったので早速使ってみたいとTCの記事を読んで以降悶々としていた。とりあえずアプリのダウンロードと登録、プロモーションコードの入力だけは済ませる。

REQUESTできた

f:id:r1990297:20131115015919p:plain:right
ドライバーさんは数台と仰っていたけど、日中アプリで確認できた空き車両は2台。これでは流石に夕方は無理だろうと思っていたけど、運良くETAが11分との表示になったので、すかさずREQUEST PICKUP HEREをタップ。車両アイコンがじわじわ自分のいる場所に近づく。混雑状況などに応じて時々ETAの補正はされているようだけど、概ね時間通り黒いクラウンがすっと目の前で止まった。
ちなみに、アプリ上で来てくれる車種、ナンバーとドライバーさんの顔は分かるので同じような黒塗りが並んでいても迷わない。
REQUESTが受け付けられなかった時、REQUEST時とピックアップ場所への車両が到着直前というタイミングで登録したiPhoneの電話番号宛にSMSが届く。届くメッセージはまだ英語。

乗車

ドライバーさんに名前を確認され、ドアを開けてもらい乗車。ドライバーさんが名を名乗り、そのまま発進かと思いきや、目的地を聞かれる。アプリ上で設定したDROPOFF LOCATIONは伝わらないらしい。目的地をナビに入力してもらい発進。

車内で

本日のお客さんはニュース記事を読んでという人が大半だそうで写真を撮る方が多かったらしい。今晩は夜番で3台追加して運行するとのこと。やっぱり車内は禁煙。タクシーが決まった駅に戻るように、依頼がない場合は六本木に戻るらしい。現在ピックアップ可能なエリアはドライバーさんもご存知ないようだけど、待ち時間が15〜20分以上になる場合は、ドライバーが電話して確認するとのこと。

降車

降車後アプリを起動すると今回の評価をする画面が表示される。5段階評価。これがドライバーさんの評価となるみたい。評価とコメントはtweetしたり、facebookにpostしたり、誰かにメールしたりできる。スクリーンショット撮り損ねた。
降りてまもなく登録したメールアドレス宛に領収書が送付されていた。

メール通知の送信元メールアドレスを変更する

基本的にメール通知の際のFrom:は設定画面の「送信元メールアドレス」で指定する形。これをチケット更新した人のメールアドレスに変更したい。古いバージョンの変更方法はGoogle Groupsにあったけど、現行バージョンはソース自体が変更されていて適用できない。ちょっと探したけど上手く見つけられなかったので、ソースを改修。

2.3.3で確認した。ソースの差分を見るに、2.0.0以降なら大丈夫っぽい。
[REDMINE_HOME]/app/models/mailer.rb

@@ -396,6 +396,7 @@
     end

     if @author && @author.logged?
+      headers[:from] = @author.mail
       redmine_headers 'Sender' => @author.login
     end

本当はReply-to:に入れたりしたいところだけど、とりあえず。

ガントチャートに日付を入れた

IT Room - Redmineのガントチャートに日付の表示を追加Redmine 2.3.3風にしただけ。対象ファイルは[REDMINE_HOME]/app/views/gantts/show.html.erb

@@ -77,6 +77,7 @@
   headers_height = header_height
   show_weeks = false
   show_days  = false
+  show_day_num = false

   if @gantt.zoom > 1
     show_weeks = true
@@ -84,6 +85,10 @@
     if @gantt.zoom > 2
         show_days = true
         headers_height = 3 * header_height
+        if @gantt.zoom > 3
+          show_day_num = true
+          headers_height = 4 * header_height
+        end
     end
   end

@@ -218,19 +223,53 @@
   <% end %>
 <% end %>

+<% ###### Days Number Headers ###### %>
+<% if show_day_num %>
+  <%
+    left = 0
+    height = g_height + header_height - 1
+    wday = @gantt.date_from.cwday
+    day_num = @gantt.date_from
+  %>
+  <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %>
+    <%
+      width = zoom - 1
+      style = ""
+      style += "left: #{left}px;"
+      style += "top: 37px;"
+      style += "width: #{width}px;"
+      style += "height: #{height}px;"
+      style += "font-size: 0.7em;"
+      clss = "gantt_hdr"
+      clss << " nwday" if @gantt.non_working_week_days.include?(wday)
+    %>
+    <%= content_tag(:div, :style => style, :class => clss) do %>
+      <%= day_num.day %>
+    <% end %>
+    <%
+      left = left + width + 1
+      day_num = day_num + 1
+      wday = wday + 1
+      wday = 1 if wday > 7
+    %>
+  <% end %>
+<% end %>
+
 <% ###### Days headers ####### %>
 <% if show_days %>
   <%
     left = 0
     height = g_height + header_height - 1
+    top = (show_day_num ? 55 : 37)
     wday = @gantt.date_from.cwday
+    day_num = @gantt.date_from
   %>
   <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %>
     <%
       width =  zoom - 1
       style  = ""
       style += "left: #{left}px;"
-      style += "top:37px;"
+      style += "top: #{top}px;"
       style += "width: #{width}px;"
       style += "height: #{height}px;"
       style += "font-size:0.7em;"
@@ -242,6 +281,7 @@
     <% end %>
     <%
       left = left + width + 1
+      day_num = day_num + 1
       wday = wday + 1
       wday = 1 if wday > 7
     %>