2010-04-22

VisualStudio 2008 で「最も従事する開発作業の種類」をリセットする方法

VisualStudio 2008 の最初の起動画面で「最も従事する開発作業の種類」をリセットする方法が表示されたのだが忘れそうなのでメモ.

「いつでも設定の別のコレクションを使用できるように変更できます.[ツール] メニューから [設定のインポートとエクスポート] を表示して,[すべての設定をリセット] を選択します」

2010-04-12

MacPorts 用のオレオレリポジトリの運用例

ホスト www.exapmle.com の /srv/www/example/macports (http://www.example.com/macports/, rsync://www.example.com/macports/) にセットアップすると仮定する.ディストリビューションは debian を用いる.まずディレクトリを準備する.

deb$ mkdir /srv/www/example/macports
deb$ cd /srv/www/example/macports
deb$ mkdir portfiles distfiles

/srv/www/example/macports/portfiles を rsync プロトコルでアクセスできるようにする.

deb# vi /etc/default/rsync
RSYNC_ENABLE=inetd
deb# vi /etc/inetd.conf
rsync  stream tcp  nowait  root  /usr/bin/rsync rsyncd --daemon
deb# cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
deb# vi /etc/rsyncd.conf
[macports]
    path = /srv/www/example/macports
deb# /etc/init.d/openbsd-inetd restart
deb# /etc/init.d/rsync restart

Portfile を更新する.

osx$ rsync -avzh www.example.com:/srv/www/example/macports .
osx$ cd macports/portfiles
osx$ mkdir -p sysutils/samplepackage
osx$ cp somewhere/Portfile sysutils/samplepackage
osx$ portindex
osx$ rsync -avzh ./ www.example.com:/srv/www/example/macports/portfiles

パッケージ本体を更新する.

osx$ rsync samplepackage-1.2.3.tar.gz www.example.com:/srv/www/example/macports/distfiles

ports クライアントを設定する.

osx# vi /opt/local/etc/macports/sources.conf
rsync://www.example.com/macports/portfiles/
rsync://rsync.macports.org/release/ports/ [default]
osx# port -v sync
osx# port install samplepackage

Portfile の準備のしかた

osx$ rsync samplepackage-1.2.3.tar.gz www.example.com:/srv/www/example/macports/distfiles
osx$ mkdir temp; cd temp
osx$ vi Portfile
...
master_sites        http://www.example.com/macports/distfiles/
...
osx$ port -d checksum
...
checksums           md5     3b55d5016728cfb4e76b0af952b73fff \
                    sha1    51c9e64d720732a016f39475f00ca939c6bfd512 \
                    rmd160  cd74cc78de6adedb3278aa435b374695c70d92d9
...
osx$ vi Portfile
( paste above checksums )
osx$ port -d build

2010-04-09

git-buildpackage を用いない Debian パッケージの git による管理

パッケージの上流を開発しているのが自分自身の場合には,git-buildpackage のやり方を援用して自分でやるのもよいような気がしてきた.

最初のパッケージリリース:

$ cd foo  # package top directory managed by GIT
$ git checkout master
$ git checkout -b debian
$ git checkout master
... developing version 0.0.1 ...
$ git commit
$ git tag v00.00.01
$ git checkout debian
$ git merge --squash v00.00.01
$ DEBFULLNAME='Your Name' dh_make -e yourname@example.com -p foo_0.0.1 --native
$ git add debian
$ git commit
$ vi control rules changelog  # set version to 0.0.1-1
$ git commit
$ debuild -i -us -uc -tc  # answer 'y' to warning
$ git tag debian/00.00.01-01

次のパッケージリリース:

$ git checkout debian
$ dch  # set version to 0.0.1-2
... developing version 0.0.1-2 ...
$ git commit
$ debuild -i -us -uc -tc  # answer 'y' to warning
$ git tag debian/00.00.01-02

次のバージョンリリース:

$ git checkout master
... developing version 0.0.2 ...
$ git tag version/00.00.02
$ git checkout debian
$ git merge --squash version/00.00.02
$ dch  # set version to 0.0.2-1
... developing version 0.0.2-1 ...
$ git commit
$ debuild -i -us -uc -tc  # answer 'y' to warning
$ git tag debian/00.00.02-01

git-buildpackage を用いた Debian パッケージのソースコード管理

はじめに

Debian パッケージを作成するということは,要するに,上流ソースのディレクトリ内に debian/ ディレクトリを作り,その中にいろいろなファイルを用意することである.このようなディレクトリ構成のせいで,debian/ 以下のコードのバージョン管理をどのようにすればよいかが直感的にわかりにくい.

このため,debian/ 以下のコードのバージョン管理を git で簡単に行うためのパッケージ git-buildpackage が用意されている.git-buildpackage では2つのブランチ,すなわち upstream ブランチ(デフォルトでは upstream)と debian ブランチ(デフォルトでは master)を用意し,以下のような手順で管理する.

  1. 上流の新しいバージョンをインポートする.これは upstream にコミットされた後,master にマージされる.
  2. パッケージ管理者は master で作業し,debian/ 以下を作成・変更し,コミットする.
  3. 手元でうまくいったらリリースする.リリースしたポイントを記録するためにタグが付けられる.
  4. debian/ 以下にバグが発見されたら 2 に戻る.
  5. 上流がバージョンアップしたら 1 に戻る.

今回は既に Debian リポジトリにあるパッケージを git-import-dsc でインポートする方法には触れず,最初から git-buildpackage を用いるとどうなるかを説明する.

準備

例としてパッケージ foo を管理することとする.foo の上流は git でバージョン管理されていて,それは ssh://www.example.com/srv/git/foo.git にあるとする.

$ cd /tmp
$ git clone -b release0.0.1 ssh://www.example.com/srv/git/foo
$ cd foo
$ git archive --prefix=foo/ HEAD | gzip > ../foo-0.0.1.tar.gz

最初のインポート

git-import-orig コマンドを用いる.

$ mkdir -p ~/debian-foo/foo
$ cd ~/debian-foo/foo
$ git init
$ git-import-orig /tmp/foo-0.0.1.tar.gz
Upstream version is 0.0.1
Warning: Can't symlink orig tarball due to missing debian/changelog
Initial import of '/tmp/foo-0.0.1.tar.gz' ...
Succesfully imported version 0.0.1 of /tmp/foo-0.0.1.tar.gz
$ git branch
* master
  upstream
$ git tag
upstream/0.0.1

debian ブランチである master で debian/ ディレクトリを作成する.

$ DEBFULLNAME='Your Name' dh_make -e yourname@example.com -p foo_0.0.1 -f /tmp/foo-0.0.1.tar.gz
$ git add debian
$ git commit
$ vi debian/control
$ vi debian/rules
$ vi debian/changelog
$ debuild -i -us -uc -tc  # test build

うまくいったら git-buildpackage を用いてパッケージを生成する.ここで dh_make が作った .orig. ファイルを消しておかないと後で変なことになるので注意.

$ git commit
$ rm ../foo_0.0.1.orig.tar.gz
$ git-buildpackage --git-tag -us -uc -tc

下流のバージョンアップ

debian/ 以下にバグが見つかった場合.

$ vi debian/...
$ git commit
$ DEBFULLNAME='Your Name' DEBEMAIL='yourname@example.com' git-dch --release
$ git commit
$ git-buildpackage --git-tag -us -uc -tc

上流のバージョンアップ

git-import-orig でインポートしたら,dch でバージョンを 0.0.2 に上げておかなければならない点に注意.あいかわらず orig ファイルは消しておいた方が無難.

$ cd /tmp/foo
$ git pull
$ git archive --prefix=foo/ HEAD | gzip > ../foo-0.0.2.tar.gz
$ cd ~/debian-foo/foo
$ git-import-orig /tmp/foo-0.0.2.tar.gz
$ rm ../foo_0.0.2.orig.tar.gz
$ dch -i
$ git commit
$ git-buildpackage --git-tag -us -uc -tc

2010-04-08

オレオレ Debian アーカイブの作成 (mini-dinstall 編)

最終ゴール

オレオレ apt リポジトリにオレオレ deb パッケージを置いて,特定少人数に対して配布する.

今回のお題

mini-dinstall コマンドと,dupload パッケージを用いてオレオレ apt アーカイブを作成する方法を紹介する.

準備

howto: uploading to people.d.o using dputを参考に作成する.以下を仮定する.

  • ホスト名: www.example.com
  • 管理者アカウント: foo
  • URL: http://www.example.com/debian
  • ローカルパス: /srv/www/example/debian
  • パッケージアーキテクチャ: i386

mini-dinstall をインストールする.

$ sudo aptitude install mini-dinstall

アーカイブ用の公開鍵暗号鍵の生成

$ ssh foo@www.example.com
$ gpg --gen-key
Please select what kind of key you want: DSA and Elgamal
What keysize do you want? (2048)
Key is valid for? (0)
Real name: foo
Email address:
Comment: Debian Archive Key

パスフレーズは空にしておく.空にしていないと後で dupload でアップロードしたときにパスフレーズをリモートからでは入力できなくて失敗する.

この鍵の ID を取得しておく.

$ gpg -k
pub   1024D/6789ABCD 2010-04-07
uid                  foo (Debian Archive Key)

ここでは 6789ABCD が ID である.

アーカイブツリーの作成

Origin (アーカイブの作成者/管理者) が foo で Label (アーカイブの名称) が foo のアーカイブツリーを作成する.Origin, Label については Debian Repository HOWTO を参照.

$ cd /srv/www/example/debian
$ mkdir -p mini-dinstall/incoming
$ vi sign_release.sh
#!/bin/sh
rm -f Release.gpg
gpg -u 6789ABCD -bao Release.gpg "$1"
$ chmod 750 sign_release.sh

mini-dinstall の設定ファイルを作成する.

$ vi ~/.mini-dinstall.conf
[DEFAULT]
mail_to = foo
architectures = all, i386
archive_style = flat
archivedir = /srv/www/example/debian
generate_release = 1
release_origin = foo
release_label = foo
release_description = foo
release_signscript = /srv/www/example/debian/sign_release.sh

[unstable]
release_suite = unstable

アップロードの設定

手元のマシンでアップロードの設定を行う.

$ sudo aptitude install dupload
$ vi ~/.dupload.conf
package config;

$cfg{'foo'} = {
  fqdn => "www.example.com",
  method => "scpb",
  incoming => "/srv/www/example/debian/pool/main",
  # The dinstall on ftp-master sends emails itself
  dinstall_runs => 1,
};

$cfg{'foo'}{postupload}{'changes'} = "ssh foo@www.example.com mini-dinstall -b";

アップロード

*.changes ファイルがあるディレクトリで下のようにする.

$ dupload --to foo .

apt

インストールするマシンの apt を設定する.

$ sudo vi /etc/apt/sources.list
deb http://www.example.com/debian/ unstable/
deb-src http://www.example.com/debian/ unstable/

リポジトリの公開鍵をインストールするマシンの鍵束に加える.

$ ssh foo@www.example.com gpg --export -a 6789ABCD | sudo apt-key add -

これで通常の操作をすればよい.

$ sudo aptitude update

まとめ

見てきたように apt-ftparchive を使うより著しく簡単である.また,バージョンアップしたパッケージのアップロード時の問題も解決された.

ただ,apt-ftparchive を使う方法で可能だった component の利用ができないのが少し残念(sources.list の記述を deb http://www.example.com/debian/ unstable main のようにできないということ).

あと,debian ディレクトリの .htaccess を適切に設定してやる必要があるかも.

2010-04-01

MacPorts の portfile 開発のためのリファレンス

総合/ポータル

詳細