VisualStudio 2008 の最初の起動画面で「最も従事する開発作業の種類」をリセットする方法が表示されたのだが忘れそうなのでメモ.
「いつでも設定の別のコレクションを使用できるように変更できます.[ツール] メニューから [設定のインポートとエクスポート] を表示して,[すべての設定をリセット] を選択します」
VisualStudio 2008 の最初の起動画面で「最も従事する開発作業の種類」をリセットする方法が表示されたのだが忘れそうなのでメモ.
「いつでも設定の別のコレクションを使用できるように変更できます.[ツール] メニューから [設定のインポートとエクスポート] を表示して,[すべての設定をリセット] を選択します」
ホスト 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
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
パッケージの上流を開発しているのが自分自身の場合には,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
Debian パッケージを作成するということは,要するに,上流ソースのディレクトリ内に debian/ ディレクトリを作り,その中にいろいろなファイルを用意することである.このようなディレクトリ構成のせいで,debian/ 以下のコードのバージョン管理をどのようにすればよいかが直感的にわかりにくい.
このため,debian/ 以下のコードのバージョン管理を git で簡単に行うためのパッケージ git-buildpackage が用意されている.git-buildpackage では2つのブランチ,すなわち upstream ブランチ(デフォルトでは upstream)と debian ブランチ(デフォルトでは master)を用意し,以下のような手順で管理する.
今回は既に 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
オレオレ apt リポジトリにオレオレ deb パッケージを置いて,特定少人数に対して配布する.
mini-dinstall コマンドと,dupload パッケージを用いてオレオレ apt アーカイブを作成する方法を紹介する.
howto: uploading to people.d.o using dputを参考に作成する.以下を仮定する.
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 を設定する.
$ 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 を適切に設定してやる必要があるかも.