Chef solo users cookbook

/etc/passwd/etc/shadow を管理する users クックブックを利用します。

http://community.opscode.com/cookbooks/users

環境

  • Ubuntu 12.04 LTS
  • Ruby 2.0.0p0
  • Gems
    • berkshelf (2.0.0.beta)
    • knife-solo (0.3.0.pre5)
    • chef (11.4.4)

使い方

Berksfile には chef-solo-search, users を追記します。 chef-solo-search は Chef solo でローカルの data-bag を検索するようにするクックブックです。

cookbook "chef-solo-search"
cookbook "users"

ユーザ情報を格納した data_bag を作成します。data_bags/users/<user-id>.json

password は以下のコマンドで生成します。

% openssl passwd -1 "plaintextpassword"
{
    "id": "<user-id>",
    "password": "<passowrd>",
    "ssh_keys": [
        "ssh-rsa AAAA..."
    ],
    "groups": ["sysadmin"],
    "uid": 1000,
    "shell": "\/bin\/bash"
}

users クックブックは全ノードで利用するので、共通利用する site-cookbooks/common を生成します。

% knife cookbook create common -o site-cookbooks

common クックブックの recipes/default.rb で users クックブックの users_manage LWRP を利用します。

include_recipe 'users'

users_manage 'sysadmin' do
  group_id 2300
  action [:remove, :create]
end

users, chef-solo-search を common クックブック metadata.rb の depends に指定します。

depends 'chef-solo-search'
depends 'users'

common クックブックを適切な Role または Node の run_list に追加してください。

まとめ

ざっくり手順をまとめました。細かいところはドキュメントを参照してください。

Chef 難しすぎる気がします。自分だけの利用で足りる簡単なクックブックを作成して構成管理するのはまだ簡単でシンプルに済ませることができたけど、 Berkshelf などを用いた外部のクックブックを利用しようとするとそのクックブックの利用方法を理解するだけでしんどいです。

今のところは基本的な users, openssh, sudo クックブックなどは外部のものを使用しています。全ノード対象な設定は common クックブックに書いて、 base ロールで管理しているけど、これでいいんだろうか。あと話題になっているわりには公式ドキュメント、海外エントリが主な情報源になっていて ぐぬぬ... な感じです。

iTerm2 でプロファイルごとにログインシェルの設定を変更する

iTerm2 でプロファイルを Login shell に設定している場合、プロファイル名がログインシェルの環境変数 ITERM_PROFILE に設定されているので、それを用いてシェルの設定を出し分けます。

% echo $ITERM_PROFILE
Hotkey Window

自分はログイン時に screen を自動で起動するようにしているんだけど、Hotkey Window プロファイルで起動したときは自動で起動しないようにしている。

if [ "$ITERM_PROFILE" != "Hotkey Window" -a \
     $SHLVL -eq 1 -a -x "`which screen 2>/dev/null`" ]; then
    screen -UxR
fi

GNU screen の title に ssh リモートホスト名を表示する

別途シェルスクリプトを介してやってたんですが、 .ssh/config だけで済んだので更新。
以下を .ssh/config に貼りつけたら動きます。 % man ssh_config にありますが、%hリモートホスト名に置換されるため、それを弄ってます。

PermitLocalCommand yes
LocalCommand [[ "$TERM" =~ ^screen ]] && echo -ne "\ek$(echo '%h' | awk -F '.' '{print $1}')\e\\"

ローカルホストでは実行しているコマンド名を表示するようにしてます(zsh

autoload -Uz add-zsh-hook
function _precmd_screen_title() {
        echo -ne "\ek$(basename $SHELL)\e\\"
}
function _preexec_screen_title() {
        echo -ne "\ek$1\e\\"
}
add-zsh-hook precmd _precmd_screen_title
add-zsh-hook preexec _preexec_screen_title

iMac (2008 Early) の HDD を SSD に換装した

Macbook Pro 15 Retina をメインにしてから利用していなかった iMac (Early 2008) をサーバ用途で再利用しようと思い、せっかくなので SSD に換装した。

f:id:superbrothers:20130518220233j:plain

SSD は安定してるらしいインテルならなんでもいいかなと思い、アマゾンがおすすめしてきたものを安直に選択した。kakaku 最安よりちょい高い。

インテル Boxed SSD 335 Series 240GB MLC 2.5inch 9.5mm Jay Crest Reseller BOX SSDSC2CT240A4K5

iMac の分解は初めての作業だったが、表に出てくるネジを外していくだけで済んだので思っていたより楽に済んだ。必要な工具は、100均の吸盤(正面パネルを外す)、トルクスドライバ T8、プラスドライバ 2番(不確か)。ディスプレイを本体から引き剥がす際に勢い良く引くとケーブルが千切れることが考えられるため、そこだけ注意したい。SSD の固定は難しかったためセロハンテーブで本体に貼り付けて固定した。HDD と違い振動しないし、たぶん剥がれることもないと思う。

OS は後日 Ubuntu Server LTS 12.04 を入れる予定。

Homebrew で screen (git-master) をインストールする

screen のデフォルトの formula は縦割りに対応していないため、見つけた formula を利用してみたが、 ansi.c へのパッチが当たっておらずビルドできなかったので修正して利用させてもらった。

% brew install --HEAD  https://gist.github.com/superbrothers/908aedf677eb512e9ea1/raw/6b0c396d8be8bc137131a7caf43d6608e7771e8f/screen-vertical-split.rb

UFJ ダイレクトトップページの口座残高をマスクするユーザスクリプト

数ヶ月に UFJ ダイレクトがリニューアルされてからサイトトップの口座残高の表示が気になっていた。

f:id:superbrothers:20130428211940p:plain

以前はトップに口座残高の表示はなかったような覚えがあるけど、残高確認の利用が多いからかでっかくサイトトップに載るようになった。口座残高は秘密にしたい情報であるし、公共の場で開くと覗き見されることも考えられるため非常に良くないと思う。

口座残高の表示は便利なので残しつつ通常はコメ印とし、マウスオーバーで数字に変更する実装を要望として投げたが、いつ実装されるかそもそも聞き入れられるかもわからないため、ユーザスクリプトでひとまず対応した。銀行サイトで利用されるスクリプトなため、利用される方は実装内容を正しく理解し自己責任でお願いします。

livedoor Reader のクリップ登録を Pocket に変更する

livedoor Reader のクリップボタンは他のサービスを使うように変更ができる。任意を URL を別ウィンドウで展開でき、その際記事のタイトル、URL、選択文字列を置換できるようになっている。最近は Pocket を頻繁に利用するので、Pocket に登録するように変更した。

Pocket はエントリを登録するブックマークレットが用意されているため、ブックマークレットのエントリのタイトル、URL を設定する部分を指定の文字列に書き換える。また、別ウィンドウでブックマークレットを実行後ウィンドウが開きっぱなしになるので、スクリプト読み込み完了後 100ms 遅れてウィンドウを閉じるようにした。

設定変更 -> クリップの設定 -> クリップボタンの設定 -> 他のサービスを使う

以下のブックマークレットジャンプするURL(別ウィンドウに表示されます) に入力して 設定を保存 をクリック。

javascript:(function(){var e=function(t,n,r,i,s){var o=[2272008,2689325,5299544,1474200,2649928,6356120,1279247,5950253,7548592,5987561];var i=i||0,u=0,n=n||[],r=r||0,s=s||0;var a={'a':97,'b':98,'c':99,'d':100,'e':101,'f':102,'g':103,'h':104,'i':105,'j':106,'k':107,'l':108,'m':109,'n':110,'o':111,'p':112,'q':113,'r':114,'s':115,'t':116,'u':117,'v':118,'w':119,'x':120,'y':121,'z':122,'A':65,'B':66,'C':67,'D':68,'E':69,'F':70,'G':71,'H':72,'I':73,'J':74,'K':75,'L':76,'M':77,'N':78,'O':79,'P':80,'Q':81,'R':82,'S':83,'T':84,'U':85,'V':86,'W':87,'X':88,'Y':89,'Z':90,'0':48,'1':49,'2':50,'3':51,'4':52,'5':53,'6':54,'7':55,'8':56,'9':57,'\/':47,':':58,'?':63,'=':61,'-':45,'_':95,'&':38,'$':36,'!':33,'.':46};if(!s||s==0){t=o[0]+t}for(var f=0;f<t.length;f++){var l=function(e,t){return a[e[t]]?a[e[t]]:e.charCodeAt(t)}(t,f);if(!l*1)l=3;var c=l*(o[i]+l*o[u%o.length]);n[r]=(n[r]?n[r]+c:c)+s+u;var p=c%(50*1);if(n[p]){var d=n[r];n[r]=n[p];n[p]=d}u+=c;r=r==50?0:r+1;i=i==o.length-1?0:i+1}if(s==189){var v='';for(var f=0;f<n.length;f++){v+=String.fromCharCode(n[f]%(25*1)+97)}o=function(){};return v+'077a87607f'}else{return e(u+'',n,r,i,s+1)}};var t=document,n='[[url]]',r='[[title]]';var i=e(n);var s=t.createElement('script');s.type='text/javascript';s.src='https://getpocket.com/b/r4.js?h='+i+'&u='+encodeURIComponent(n)+'&t='+encodeURIComponent(r);s.onload=function(){setTimeout(function(){window.close()},100)};e=i=function(){};var o=t.getElementsByTagName('head')[0]||t.documentElement;o.appendChild(s)})()