投稿

Mercurial リポジトリーのチェンジセット ID を成果物に取り込む

Mercurial で管理しているプログラムや文書などにチェンジセット ID を取り込んでバージョン番号みたいに使いたいと考えていました。 最初は hg log の出力からスクリプトで抽出する方法を考えましたが、 hg identify で取得できることがわかりましたので簡単にできます。 ビルドする場合、Make を使うので Makefile 内で チェンジセット ID を取り込んでみます。 ifneq ($(wildcard .hg_archival.txt),) changeset = $(shell $(awk) 'match ($$1, /node:/) { print substr($$2, 0, 12) }' .hg_archival.txt) endif ifneq ($(wildcard .hg),) changeset = $(shell $(hg) identify --id) endif changeset? = unknown これで Makefile の変数 changeset にチェンジセット ID が取り込まれました。 アーカイブからのビルドでもちゃんと動きます。 あとは CHANGESET.txt: $(src) @echo $(changeset) > $@ みたいに自由に使用できます。

バイナリーファイルを C 言語の配列で出力

仕事柄、バイナリーデーターをそのまま C 言語の配列に変換してプログラムに組み込むことがあるのですが、これまでは自作のプログラムでやってました。 Linux 環境には od とか hexdump とか hd とかあるのでそれでできないか考えていましたが、 xxd というコマンドがあってそれを使うと簡単に C 言語の配列に変換してくれます。 xxd -i ファイル名 ためしに .bashrc を 変換してみました。 $ xxd -i .bashrc unsigned char _bashrc[] = { 0x23, 0x20, 0x2e, 0x62, 0x61, 0x73, 0x68, 0x72, 0x63, 0x0a, 0x0a, 0x23, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x69, 0x66, 0x20, 0x5b, 0x20, 0x2d, 0x66, 0x20, 0x2f, 0x65, 0x74, 0x63, 0x2f, 0x62, 0x61, 0x73, 0x68, 0x72, 0x63, 0x20, 0x5d, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x2e, 0x20, 0x2f, 0x65, 0x74, 0x63, 0x2f, 0x62, 0x61, 0x73, 0x68, 0x72, 0x63, 0x0a, 0x66, 0x69, 0x0a, 0x0a, 0x23, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x...

SCM Manager にグループを追加する

イメージ
ユーザーの追加 に続いてユーザーグループを作成します。 グループの作成 Security → Groups を選択します。 Add を押すと画面下半分の Settings に入力フィールドが表示されますので、グループの名前と説明分を入力し、 OK を押します。 グループができました。 グループにユーザーを追加 作成したグループを選択します。 画面下半分に Member のタブがあるのでそれを選択します。 Add ボタンを押すと一行追加されます。 追加された行に ユーザー名を入力します。途中まで入力すると候補が表示されますのでそれを選択してもよいです。最後に OK を押すとユーザーがグループに追加されます。 いろいろと登録してみました。 グループもいろいろ登録してみました。

SCM Manager にユーザーを追加する

イメージ
SCM Manager を使っていますが使い方に関する記述があまりないので少し書いてみようと思います。大体は特に説明しなくてもわかるとは思いますが。 まずはユーザーを追加します。 scmadmin でログインします。 ユーザーの作成 Security → Users を選択します。 Add を押します。画面下側の User Form に必要な項目を入力して OK を押します。 Name: ログインに使用するユーザー名です。日本語は使えません。英数文字と一部の記号が使えるようです。 Display name: 表示に使用する名前です。日本語でも大丈夫です。 Mail: このユーザーのメールアドレスです。存在するアドレスである必要はなさそうですが、ある程度メールアドレスっぽい文字列を入力する必要があります。 a@b.c とか 1@2.com ではエラーになりました。 Password: パスワードを二か所入力します。6 文字以上と表示されますがそれ以下でも作成できました。 Administrator: このユーザーに管理者権限を与える場合にチェックします。 Active: このユーザーを使用可能にする場合にチェックします。 OK を押しても表示に反映されないので何度も OK を押さないように。Reload を押してください。 作成したユーザーが表示されました。 適当にユーザーを作成してみました。

SCM Manager を デーモンとして起動する。

イメージ
SCM Manager を CentOS 6.5 にインストール で書いた SCM Manager の起動方法についてはすこしごまかして書いていました。というのもそのままではデーモンで起動しなかったからです。対処方法がわかったので追記します。 SCM-Manager Wiki の daemons に以下のように記載されています。 Unix Daemons You could run scm-server in background as unix daemon with one simple command: scm-server start If you would like to stop the running daemon instance just call: scm-server stop しかし、CentOS 6.5 では以下の通り動作しませんでした。 $ sudo /opt/scm-server/bin/ scm-server start Cannot locate Java Home JAVA_HOME が設定されていないことが理由のようです。  https://issues.jboss.org/browse/JBEWS-223  と同じでしょうか。 ここでは scm-server スクリプトを直接編集して JAVA_HOME を指定します。 $ sudo vi  /opt/scm-server/bin /scm-server ファイルの終わりの付近に  JAVA_HOME="/etc/alternatives" を追加してみました。   fi   # TODO JVM Arguments   JAVA_HOME="/etc/alternatives"   $JSVCCMD -cp "$CLASSPATH" $JAVA_OPTS \     $EXTRA_JVM_ARGUMENTS $USER_ARGUMENT \ 保存したら起動して確認してみます。 $ sudo /opt/scm-server/bin /scm-server start ブラウザーで開けるようになっていたら成功で...

SCM Manager で Mercurial を使用できるようにする

イメージ
さきにインストールした  SCM Manager  から  Mercurial  を使用できるようにします。 ウェブブラウザーで SCM Manager (http://******:8080/) を開きます。 ユーザー名、パスワードとも scmadmin を入力してログインします。 ログインしました。まずは Security → Change Password 開いて scmadmin のパスワードを変更しておきます。 新しいパスワードを入力して OK を押します。 次に Config → General を開いて Base Url を localhost から ホスト名に変更します。 Save を押します。 Config → Repository Types を開きます。いくつかのフィールドは自動的に検出されています。インストールされた環境によって設定値は違いますが今回のセットアップでは次のようになりました。 HG Binary: /usr/local/bin/hg Python Binary: python Python Module Search Path: /usr/local/lib64/python2.6/site-packages/ HG Binary と Python Binary はデフォルトで入っていましたが Python Module Search Path (Mercurial のモジュールがあるディレクトリー)は指定しないと外部からリポジトリーを操作する場合にエラーが起きますのでちゃんと指定する必要があります。 リポジトリーを保存するディレクトリーはデフォルトでは起動したユーザーのホームディレクトリーに作成されてしまいますので別の場所を指定しました。 Repository directory: /var/.scm/repositories/hg 入力が終わったら Save を押します。 git や Subversion を使用するときも Repository directory は変更しておいた方が良いかも。 使用しないときは Disabled にチェックを入れて Save を押しましょう。 これで Mercuri...

SCM Manager を CentOS 6.5 にインストール

イメージ
Mercurial をインストール したので続いて SCM Manager のインストールを行います。ここでは一番簡単な方法をやってみます。簡単なので機能確認には良いと思います。(セキュリティ的には問題かも・・) 1. 端末を開き次のコマンドで java がインストールされていることを確認します。 $ java -version 2. ウェブブラウザーで SCM Manager のサイト ( http://www.scm-manager.org ) を開きます。 3. Download を押します。 4. scm-server-1.35-app.tar.gz を押します。ダイアログが表示されますので ファイルを保存する(S) を選択し OK を押します。 5. 端末を開き、ダウンロードしたファイルを展開します。場所はどこでも良いのですが、公開することを考えて /opt 以下に展開することにします。 $ sudo tar xvf scm-server-1.35-app.tar.gz -C /opt 6. 次のコマンドを実行します。 $ sudo /opt/scm-server/bin/scm-server 7. ウェブブラウザーで http://localhost:8080 を開くと... すでに起動しています!後はシステムの起動時に起動すればいいだけ。 8. 起動している SCM Manager を Ctrl+C で停止します。 9. /etc/rc.local の最後に /opt/scm-server/bin/scm-server & を追加して保存します。 $ sudo vi /etc/rc.local # SCM MANAGER /opt/scm-server/bin/scm-server & & を忘れると大変なことになるので必ず入れましょう・・・ (追記  SCM Manager をデーモンとして起動する 方法を書きました。こちらをおすすめします。) 10. ファイアーウォールの設定で 8080 ポートを開きます。 こちらの記事 を参考にしてください。 11. 一旦再起動します。 インストールは以上です。 http://...