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を利用した。
14日にテスト運行を始めたUber。ちょうど自社に戻る用事があったので早速使ってみたいとTCの記事を読んで以降悶々としていた。とりあえずアプリのダウンロードと登録、プロモーションコードの入力だけは済ませる。
REQUESTできた
ドライバーさんは数台と仰っていたけど、日中アプリで確認できた空き車両は2台。これでは流石に夕方は無理だろうと思っていたけど、運良くETAが11分との表示になったので、すかさずREQUEST PICKUP HEREをタップ。車両アイコンがじわじわ自分のいる場所に近づく。混雑状況などに応じて時々ETAの補正はされているようだけど、概ね時間通り黒いクラウンがすっと目の前で止まった。
ちなみに、アプリ上で来てくれる車種、ナンバーとドライバーさんの顔は分かるので同じような黒塗りが並んでいても迷わない。
REQUESTが受け付けられなかった時、REQUEST時とピックアップ場所への車両が到着直前というタイミングで登録したiPhoneの電話番号宛にSMSが届く。届くメッセージはまだ英語。
乗車
ドライバーさんに名前を確認され、ドアを開けてもらい乗車。ドライバーさんが名を名乗り、そのまま発進かと思いきや、目的地を聞かれる。アプリ上で設定したDROPOFF LOCATIONは伝わらないらしい。目的地をナビに入力してもらい発進。
車内で
本日のお客さんはニュース記事を読んでという人が大半だそうで写真を撮る方が多かったらしい。今晩は夜番で3台追加して運行するとのこと。やっぱり車内は禁煙。タクシーが決まった駅に戻るように、依頼がない場合は六本木に戻るらしい。現在ピックアップ可能なエリアはドライバーさんもご存知ないようだけど、待ち時間が15〜20分以上になる場合は、ドライバーが電話して確認するとのこと。
■
もう…。
メール通知の送信元メールアドレスを変更する
基本的にメール通知の際の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 %>