snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

mt-daapd を動かしてみたけど

mt-daapd を動かす前に、いろいろ分らない用語を調べたので、 自分なりに理解したつもりのことをメモ。その後 mDNSResponder と mt-daapd の設定をして起動。だけど iTunes が mt-daapd をうまく 見つけられない様で、マルチキャスト通信について色々調べてみたけど、 今のところ解決できてない。

スポンサーサイト

続きを読む »

mt-daapd をインストール

mt-daapd を CentOS 4.6 にインストールした作業メモ。

名前が Firefly Media Server に変わったのかもしれない。
Firefly Media Server :: Home Page
http://www.fireflymediaserver.org/

続きを読む »

一般ユーザで rpmbuild できるようにする

普通 rpmbuild する時は作業領域として /usr/src/redhat 以下が使われる。 ここは一般ユーザは書き込めないので root で作業する事になる。 しかし、実際には /usr/bin とかにコピーする時以外では root 権限は必要無いので、 一般ユーザでも書き込める作業領域を作成して、そこを利用する様にする。

どこでも良いが、ホーム内に作業領域を作成する。

$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

で、rpmbuild でそこを使う様に ~/.rpmmacros ファイルで設定する。

%_topdir   /home//rpmbuild

環境 : CentOS 4.6

Trac のプロジェクト環境のバックアップ、リストア

オフィシャルの Trac Backup Wiki ページにある通り、trac-admin hotcopy する。 バックアップをしている間データベースをロックして、 クライアントからのアクセスにかかわらず安全にバックアップできる。 ただし、バックエンドのデータベースに SQLite 以外を使用している場合は この方法ではダメ。

# trac-admin /path/to/projenv hotcopy /path/to/backupdir

実際には、rm -rf /path/to/backupdir してから hotcopy して、 その /path/to/backupdir を pdumpfs する事にした。

作成された /path/to/backupdir は TracEnvironment そのものなので、 リストアはこのディレクトリを然るべき場所にコピーしてパーミッション等を 適切に設定するだけ。

環境 : Trac 0.10.4-1 (rpm)

Trac のリポジトリ・ブラウザで日本語が文字化けないよう設定

Trac のリポジトリ・ブラウザで、日本語を含むファイルの差分が文字化けしていた。 PROJENV/conf/trac.ini の default_charset が iso-8859-15 だったので utf-8 に書き換えたら直った。

Subversion リポジトリのバックアップ、リストア

Subversion リポジトリのバックアップ方法として svnadmin dump, svnadmin hotcopy, hot-backup.py の 3 つを検討した結果、hot-backup.py を使う事にした。 1 日 1 回、同スクリプトを cron から実行する様にした。

環境 : CentOS 4.6 / Subversion 1.1.4-2 (rpm)

svnadmin dump

  • リポジトリ全体ではなくデータベースしかバックアップできない。
  • 他のクライアントがリポジトリにアクセスしていても安全にバックアップできる。
  • dump ファイルが壊れていて svnadmin load でリストアできない場合を考慮して リビジョンを分けてバックアップしておく等の対策が必要。

/path/to/repo のデータベースを /path/to/dump-file にバックアップ。

# svnadmin dump /path/to/repo > /path/to/dump-file

それをリストアするには、新たにリポジトリを作成して svnadmin load する。

# svnadmin create /path/to/newrepo
# svnadmin load /path/to/newrepo < /pato/to/dump-file

svnadmin hotcopy

  • リポジトリ全体をバックアップできる。
  • 他のクライアントがリポジトリにアクセスしていても安全にバックアップできる。

/path/to/repo を /path/to/backup にバックアップ。 /path/to/backup は空ディレクトリでなければならない。

# svnadmin hotcopy /path/to/repo /path/to/backup

バックアップしたものはリポジトリそのものなので、そのままリストア可能。

hot-backup.py

/usr/share/doc/subversion-1.1.4/tools/backup/hot-backup.py スクリプトを 利用すると svnadmin hotcopy で複数バックアップしてくれる。

# python /usr/share/doc/subversion-1.1.4/tools/backup/hot-backup.py /path/to/repo /path/to/dir

最新リビジョンが 123 の時、/path/to/dir/repo-123 リポジトリが作成される。 /path/to/dir/repo-123 が既に存在する場合は /path/to/dir/repo-123-1 に作成される。 標準では 64 個のリポジトリが作成され、それ以上になった場合は古いものから削除される。 変更するにはスクリプト中の num_backups 変数の初期値を直接書き換える。

# Number of backups to keep around (0 for "keep them all")
#num_backups = 64
num_backups = 16

ちなみに、以下でリポジトリのデータベースを検証できる。

# svnadmin verify /path/to/repo

Trac と Subversion を連携させる

Trac の配布アーカイブやリポジトリの contrib ディレクトリにある trac-pre-commit-hook と trac-post-commit-hook スクリプトを利用すると、 Trac と SCM を連携させる事ができる。 今回は Trac と Subversion を連携させてみる。

環境 : CentOS 4.6 / Subversion 1.1.4-2 (rpm) / Trac 0.10.4-1 (rpmforge)

標準状態でも Subversion のコミット・ログに #4 とか書いておくと、 Trac のリポジトリ・ブラウザがチケット 4 へのリンクに変換してくれる。 上記のスクリプトを利用すると、メッセージ (今回は Subversion のコミット・ログ) を Trac のチケット・コメントとして投稿し、それにチェンジセットへのリンクを追加してくれる。 これによって、要求と、変更内容の双方向リンクが作成できる。

スクリプトに与えるメッセージ (コミット・ログ) には、 キーワードとチケット番号が含まれている必要がある。 ここではそれをチケット・コマンドと言う事にする。

チケット・コマンドはコマンドとチケット番号から成り、 他の語句とは英数字以外で分離している必要がある。

コマンドは 2 種類あって、それぞれ複数の書き方ができる。 大文字、小文字の区別はない。

address, references, refs, re コマンドは、メッセージを指定したチケット番号にコメントとして投稿し、 チェンジセットへのリンクを作成する。

これはチケット references #4 に対するコメントになる
これ refs #4 は上と同じ

closes, fixes コマンドは、 それに加えてチケットを close する。

これはチケット closes #21 に対するコメントになり、しかもクローズする
これ fixes #21 は上と同じ

チケット番号はコマンドに対して複数指定可能。

チケット番号を複数指定する例 refs #14 #27
こう書いても refs #14, #27
こう書いても refs #14 & #27
こう書いても refs #14 and #27 同じ
異なる方法で refs #1, #2 & #3 and #4 指定してあっても平気

コマンドが混在していても良い。

refs #5, #6 and #9
fixes #7 & #8

詳細はスクリプトと Python ライブラリリファレンスの 4.2.1 正規表現のシンタックス を参照。

で、ここからが連携の為の作業。

trac-pre-commit-hook スクリプトは、 メッセージに有効なチケット・コマンドが含まれるかチェックする。 有効と判断されるには、 チケット・コマンドの書式が正しい、 チケットが存在する、 チケットが close されていない、 事が必要。 含まれていない場合は 0 以外の終了コードを返す。

$ python /usr/local/trac/contrib/trac-pre-commit-hook
Usage: /usr/local/trac/contrib/trac-pre-commit-hook <trac_project> <log_message>

pre-commit フック・スクリプトから trac-pre-commit-hook を実行して、 コミット・ログにチケット・コマンドを書かないとコミットできない様にする。

#!/bin/sh

REPOS="$1"
TXN="$2"

TRAC_ENV='/var/lib/trac/tractest'
LOG=`/usr/bin/svnlook log -t "$TXN" "$REPOS"`

/usr/bin/python /usr/local/trac/contrib/trac-pre-commit-hook "$TRAC_ENV" "$LOG" || exit 1

trac-post-commit-hook スクリプトは、 メッセージに含まれるチケット・コマンドを解釈し、 該当するチケットにコメントとして投稿する。 且つそのコメントにチェンジセットへのリンクを付加する。 また、コマンドが closes, fixes の場合、そのチケットを close する。

$ python /usr/local/trac/contrib/trac-post-commit-hook --help
usage: trac-post-commit-hook [options]

options:
  -h, --help            show this help message and exit
  -eENV, --require-envelope=ENV
                         Require commands to be enclosed in an envelope. If
                        -e[], then commands must be in the form of [closes #4].
                        Must be two characters.
  -pPROJECT, --project=PROJECT
                        Path to the Trac project.
  -rREV, --revision=REV
                        Repository revision number.
  -uUSER, --user=USER   The user who is responsible for this action (not used
                        anymore)
  -mMSG, --msg=MSG      The log message to search (not used anymore)
  -cENCODING, --encoding=ENCODING
                        The encoding used by the log message (not used anymore)
  -sURL, --siteurl=URL  The base URL to the project's trac website (to which
                        /ticket/## is appended).  If this is not specified, the
                        project URL from trac.ini will be used.

post-commit フック・スクリプトから trac-post-commit-hook を実行して、 コミット・ログを通じてチケットと変更内容を関連付ける。

#!/bin/sh

REPOS="$1"
REV="$2"

LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/var/lib/trac/tractest'

/usr/bin/python /usr/local/trac/contrib/trac-post-commit-hook \
 -p "$TRAC_ENV"  \
 -r "$REV"       \
 -u "$AUTHOR"    \
 -m "$LOG"

-s オプションを付けても付けなくても変わりなかった。

-e オプションでチケット・コマンドを囲む文字を指定できる。 例えば -e "[]" とすると refs #1 では認識されず、[refs #1] と書く必要がある。 ただし、trac-pre-commit-hook はこれに該当するオプションが無いので refs #1 を 有効なチケット・コマンドと認識してしまう。

参考
[Think IT] 第4回: チケットとソースコードを連携せよ! (1/3)

Subversion のフック・スクリプト (コミット関連)

Subversion では、いくつかのタイミングで、外部プログラムを実行できる。 そのプログラムは一般的にフック・スクリプトと言われる。

環境 : subversion-1.1.4-2 (rpm) / CentOS 4.6

プログラムが実行される条件

  • リポジトリの hooks ディレクトリに決められたファイル名で存在する。
  • そのファイルが実行可能。 フック・スクリプトと言っているがバイナリの実行ファイルでも OK 。 linux の場合は実行パーミッションがセットされている必要がある。
  • ユーザにそのファイルを実行する権限がある。

実行されるファイル (ここではコミット関連のみ)

start-commit ファイル
コミット・トランザクションが作られる前に実行される。
第一引数 : リポジトリへのパス
第二引数 : コミットしようとしているユーザ名
終了コードが 0 以外の場合トランザクションが作られる前に中止。
pre-commit ファイル
実際のコミットの前に実行。
第一引数 : リポジトリへのパス
第二引数 : コミットされる筈のトランザクションの名前
終了コードが 0 以外の場合トランザクションが作られる前に中止。
post-commit ファイル
コミットされ、新しいリビジョンが作られた後に実行。
第一引数 : リポジトリへのパス
第二引数 : 今回作られたリビジョン番号
終了コードは無視される。

/home/svn/test1 リポジトリにフック・スクリプトを作成してみる。

$ cat /home/svn/test1/hooks/start-commit
#!/bin/sh

REPOS="$1"
USER="$2"

LOG=/tmp/test1-start-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "user[$USER]" >> $LOG
/usr/bin/id >> $LOG
umask >> $LOG
echo "LANG[$LANG]" >> $LOG
/bin/env >> $LOG

exit 0
$ cat /home/svn/test1/hooks/pre-commit
#!/bin/sh

REPOS="$1"
TXN="$2"

LOG=/tmp/test1-pre-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "transaction[$TXN]" >> $LOG

exit 0
$ cat /home/svn/test1/hooks/post-commit
#!/bin/sh

REPOS="$1"
REV="$2"

LOG=/tmp/test1-post-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "revision[$REV]" >> $LOG

このリポジトリに Apache からアクセスする。 Apache の実行アカウントが apache:apache で、 これらのスクリプトの所有グループが apache なので グループにも実行パーミッションを設定。

# chmod ug+x start-commit

コミットした結果。 環境変数 PATH が設定されてないので、スクリプトを書く時は注意だ。

# ls -l /tmp
total 24
-rw-r--r--  1 apache apache 106 Apr  9 19:05 test1-post-commit.log
-rw-r--r--  1 apache apache 111 Apr  9 19:05 test1-pre-commit.log
-rw-r--r--  1 apache apache 235 Apr  9 19:05 test1-start-commit.log
$ cat /tmp/test1-start-commit.log
2008-04-09 19:05:46 381595000  ------------------------------
repository[/home/svn/test1]
user[snbhsmt]
uid=***(apache) gid=***(apache) groups=********** context=user_u:system_r:httpd_sys_script_t
0022
LANG[]
PWD=/
SHLVL=1
_=/bin/env
$ cat /tmp/test1-pre-commit.log
2008-04-09 19:05:46 487601000  ------------------------------
repository[/home/svn/test1]
transaction[11-1]
$ cat /tmp/test1-post-commit.log
2008-04-09 19:05:46 532045000  ------------------------------
repository[/home/svn/test1]
revision[12]

Trac の attachments ディレクトリに書き込み権限を追加

Trac でチケットにファイルを添付しようとして気付いたが、 添付ファイルは PROJENV/attachments ディレクトリに置かれる。 だけど Trac を インストールした時 に、このディレクトリに書き込み権限を設定していなかったので エラーになってしまった。

Trac の XML-RPC プラグインをインストール

Trac の XML-RPC プラグイン をインストールする。

環境 : Trac 0.10.4-1 (rpm) / Apache HTTP Server 2.0.52 (rpm) / CentOS 4.6

zip ファイルをダウンロードして展開。

$ wget -O xmlrpcplugin.zip 'http://trac-hacks.org/changeset/latest/xmlrpcplugin?old_path=/&filename=xmlrpcplugin&format=zip'
$ unzip xmlrpcplugin.zip
$ cd xmlrpcplugin/0.10

egg を作成してインストール。
今まで使っていなかった easy_install コマンドでインストールしてみた。

$ python setup.py bdist_egg
$ easy_install dist/TracXMLRPC-0.1-py2.3.egg
Processing TracXMLRPC-0.1-py2.3.egg
Copying TracXMLRPC-0.1-py2.3.egg to /usr/lib/python2.3/site-packages
Adding TracXMLRPC 0.1 to easy-install.pth file

Installed /usr/lib/python2.3/site-packages/TracXMLRPC-0.1-py2.3.egg
Processing dependencies for TracXMLRPC==0.1
Finished processing dependencies for TracXMLRPC==0.1

trac.ini に設定を記述。

[components]
      :
tracrpc.* = enabled

Egg cache ディレクトリを、まだ作成していなければ作成。

利用するには XML_RPC 権限とそれぞれの API が求める権限が必要。
とりあえず anonymous に与える。

# trac-admin /var/lib/trac/tractest permission add anonymous XML_RPC

http://example.com/trac/tractest/xmlrpc を HTTP GET リクエストすると API 一覧のウェブページが参照できる。

XML-RPC で Status が Closed なチケットを取得してみる。

$ cat ticket.query.xml
<?xml version="1.0"?>
<methodCall>
  <methodName>ticket.query</methodName>
  <params>
    <param>
      <value><string>status=closed</string></value>
    </param>
  </params>
</methodCall>
$ 
$ wget -q -O - --header="Content-Type: text/xml" --post-file ticket.query.xml http://example.com/trac/tractest/xmlrpc
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><array><data>
<value><int>1</int></value>
</data></array></value>
</param>
</params>
</methodResponse>

anonymous に XML_RPC 権限を与えているため URL を TRACPROJ/xmlrpc にしているが、 認証が必要な場合 URL は TRACPROJ/login/xmlrpc になる。

Top

HOME

snbhsmt

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。