Drowsy Dog's Diary

any note, any thought

2014年2月18日
by kazoo
2 Comments

[git] masterブランチの入れ替え、的な

といっても実際に乗り変わるわけではなく。

たとえば

みたいなブランチが(名前いまいちだけど)あって、
次バージョンの仕様をいろいろ盛り込んでいる間に feature-v2.0 の歴史が master よりもずっと先に進んでしまって、
「もうこれが master でいいよ」みたいな状態のとき。

git branch -m でブランチのリネーム、git push -f で強制 push してしまえば文字通りブランチの入れ替えはできそう。しかし、おそらく複数人で作業しているとしばき倒されますねこれは。

たぶんいろいろ方法はあると思うのですが、ここでは

と、
git merge の ours ストラテジを使ってコンフリクトをすべて自分のブランチ優先で解決した後に、master 側から merge すれば綺麗に上書きしてくれました。

単純に、master 側から

だけすればいけそうな気もしたけど、

そういうもんではないらしい。。

参考:
https://www.kernel.org/pub/software/scm/git/docs/git-merge.html
http://stackoverflow.com/questions/2862590/how-to-replace-master-branch-in-git-entirely-from-another-branch
http://stackoverflow.com/questions/2303124/git-merge-s-theirs-simply

2014年2月12日
by kazoo
0 comments

[git] mac で git の TAB 補完とか diff-highlight の折り返しとか

Mac で XCode 付属の git を使っていると、git に続くコマンドの TAB 補完が効いてくれない。補完を有効にするには、

して、~/.bashrc などで、

と、読込んでやると、

みたいに補完してくれる。

また、git diff コマンドで、Git の diff を美しく表示するために必要なたった 1 つの設定 #gitにあるように設定すれば、単語レベルの diff を表示してくれて大変ありがたいのだけど、コンソール右端を越える長い行が突き抜けていってしまう。これを折り返すには、同じく ~/.gitconfig の pager 設定に

と、書いてやれば OK でした。
快適!

2013年4月11日
by kazoo
0 comments

launchd.plistの書き方

AppStore のデイリー DL 数の取得スクリプトを CentOS の crond で走らせていたのですが、これを Mac 環境に移すことになり、crontab じゃなくてちゃんと launchd でやってみることにしました。

「(Tiger以降の)Mac では crond じゃなく launchd で」というのは聞いた事はあったのですが、そもそもこれが何なのかよくわかっていなかった。launchd が UNIX の init にあたる pid=1 のプロセスなのですね。各種プロセス・デーモンはこいつの子プロセスとして実行される。crontab の定期実行は launchd から起動されるし、イベントの監視や、inetd/xinetd の代わりにネットワークの監視もこいつが行ってくれる。
なるほど。

で、この launchd の設定ファイルが launchd.plist と呼ばれる各種 XML ファイルであり、
以下のようにファイルシステムドメインごとのディレクトリにそれぞれ存在する。1ファイルごとに1サービスの設定となる。

  • /System/Library/LaunchAgents/
  • /System/Library/LaunchDaemons/
  • /Library/LaunchAgents/
  • /Library/LaunchDaemons/
  • ~/Library/LaunchAgents/

LaunchDaemons ディレクトリにあるのはいわゆるデーモンであり、root権限で走る。(なのでユーザディレクトリには存在しない)。デーモンはログイン状態に関わらず動作する。
LaunchAgents ディレクトリにあるのはエージェントと呼ばれ、ログインしているユーザごとに起動されるプロセスである。全員共通で起動するものを /Library の方に、特定ユーザのみで動作するものを ~/Library の方に書けばよい。
/System/Library/Launch* は基本的に触らない(ハズ)。

launchd.plist はプロパティリストというルールで記述されたXML。
たとえば Adobe のアップデータはこんな感じ。

~/Library/LaunchAgents/com.adobe.AAM.Updater-1.0.plist

主要なキー一覧はこちらの表の通り。

dict タグは key タグで囲まれた要素をキーとし、その直後のタグ要素を値とする連想配列を表す。
Label と ProgramArguments のみ必須キーとなっている。

ProgramArguments は最初の配列要素が実行するプログラムのパス、以降が引数となる。
たとえば特定の ruby プログラムを 出力ディレクトリを引数に
$ ruby ~/workspace/test.rb ~/tmp/outdir
というような呼び出しをしたいとすると、

みたいな感じ。

また、StartCalendarInterval キーは、それに続く連想配列のキー Minute, Hour, Day, WeekDay(0が日曜日), Month の組み合わせで繰り返しが指定できる。Adobe の例ではこのエージェントは毎日 02:00 に実行されることになる。
crond の場合、マシンがスリープしていると実行はスキップされるが、launchd はその復帰時に実行される(複数回の実行が溜まったときは1回だけ実行される)。
また、カレンダー指定でなく単純に時間おきにインターバル実行させたいときは、

のように書くと、60秒毎に実行されるエージェント or デーモンとなる。

標準出力ログを取りたい場合は、StandardOutPath キーでファイルパスを指定してやればよい。
これを指定しなければ、/var/log/system.log にログが書かれるらしいので、それを回避したければ、

と、してやる。

最後に、設定ファイルが記述できたら launchctrl コマンドを使ってシステムにロードしてあげましょう。

このとき、OnDemand キーが true になっていると、ロード時にまず1度実行(デーモンなら最初に1度、エージェントならログインのたびに)される。

また、設定を変更したときは、一度 launchctrl unload してから再度 load する必要があるので注意!

参考:
http://www.itmedia.co.jp/enterprise/articles/0704/26/news009.html
http://www.itmedia.co.jp/enterprise/articles/0704/29/news004.html

2013年4月10日
by kazoo
2 Comments

OS X での locate と updatedb

Linux ではおなじみ高速なファイル検索の locate コマンド。
Spotlight があれば十分なのかもしれませんが、コマンドラインでさくっと探すときは自分はやはり locate です。

で、この locate が探す DB を更新するコマンド、Linux 系では $ sudo updatedb すれば OK ですが、Mac OSX の場合は、

にあるようです。
updatedb にエイリアスしておけばいいかな。

2013年4月1日
by kazoo
0 comments

ローカルの Ubuntu12.04 から Amazon S3 へバックアップ

Déjà Dup を使うのが簡単

Déjà Dup は、コマンドラインのバックアップツール duplicity の簡易 GUI 版です。

SystemSettings

左下のやつ。
システムメニューになければ

してから、管理画面を立ち上げ。

また、デフォルトではバックアップ先として S3 が含まれていないので、
Python の AWS インターフェースである boto をインストールしておきます。

バックアップ設定

backup_003
Storage タブの Backup location の選択肢に Amazon S3 が出てきます。
ここに S3 のアクセスキー ID を入力しましょう。バックアップには AWS のアクセスキーとシークレットアクセスキーが必要になります。これらの情報は、AWS にログインして、右上の「アカウント/コンソール」から Security Credentials で確認できます。
また、バックアップ先のフォルダはここで指定できますが、Deja Dup が S3 で使う Bucket は、GUI からは指定できない模様。Bucket を変更するためには、少し古い情報(deja dup ver.19.0)ですが、このあたりが参考になります。

backup_001

次に、バックアップされるフォルダと無視するフォルダ種別を設定。
個人のバックアップだけならデフォルトのままで良いかと思います。ここでは全員分の /home と、システムワイドな設定を含めて /etc と /var もバックアップすることにします。

Schedule タブでバックアップ間隔や期間を設定したら、Overview タブに戻って、とりあえず “Back Up Now”してみます。

backup_002

すると、AWS のアクセスキーとシークレットアクセスキーを聞かれるので、双方を入力。
さらに暗号化する場合のパスワードなど設定し、問題なければバックアップが始まります。
2回目からは差分バックアップになる模様。

レストア

レストアはちゃんと試していないので未確認ですが、同様に GUI ツールから “Restore…”ボタンでレストアするバックアップ元と日時など指定してレストア。このとき注意するのは、そのファイルに対して書き込み権限が無ければレストアに失敗する、ということです。自分の home だけならいいけど /etc などは一般ユーザではレストア不可(上書きするので当然ですが)。
なので、sudo が使えるならコマンドラインから、

するか、

して、root 権限で GUI を立ち上げてあげれば良さそうです。