最終ゴール
オレオレ apt リポジトリにオレオレ deb パッケージを置いて,特定少人数に対して配布する.
今回のお題
標準インストールされている apt-ftparchive コマンドと,dupload パッケージを用いてオレオレ apt アーカイブを作成する方法を紹介する.
準備
Chapter 2. Debian Package Management を参考に作成する.以下を仮定する.
- ホスト名: www.example.com
- 管理者アカウント: foo
- URL: http://www.example.com/debian
- ローカルパス: /srv/www/example/debian
- パッケージアーキテクチャ: i386
アーカイブ用の公開鍵暗号鍵の生成
$ 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 pool/main $ mkdir -p dists/unstable/main/binary-i386 $ mkdir -p dists/unstable/main/source $ vi dists/unstable/main/binary-i386/Release Archive: unstable Version: 4.0 Component: main Origin: foo Label: foo Architecture: i386 $ vi dists/unstable/main/source/Release Archive: unstable Version: 4.0 Component: main Origin: foo Label: foo Architecture: source $ vi aptftp.conf APT::FTPArchive::Release { Origin "foo"; Label "foo"; Suite "unstable"; Codename "sid"; Architectures "i386"; Components "main"; Description "Private archive for foo"; }; $ vi aptgenerate.conf Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress ". gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "dists/unstable/main/binary-i386" { Packages "dists/unstable/main/binary-i386/Packages"; Contents "dists/unstable/Contents-i386"; SrcPackages "dists/unstable/main/source/Sources"; }; Tree "dists/unstable" { Sections "main"; Architectures "i386 source"; };
なお,元記事では
Default::Sources::Compress "gzip bzip2";
となっていたが,これでは /etc/apt/sources.list に deb-src を指定したときに apt-get update でエラーになってしまうので上のように修正した.
アップロードの設定
手元のマシンでアップロードの設定を行う.
$ 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'} = " echo 'cd /srv/www/example/debian; apt-ftparchive generate -c=aptftp.conf aptgenerate.conf; apt-ftparchive release -c=aptftp.conf dists/unstable > dists/unstable/Release; rm -f dists/unstable/Release.gpg; gpg -u 6789ABCD -bao dists/unstable/Release.gpg dists/unstable/Release' | ssh foo@www.example.com 2>/dev/null; echo 'Package archive created!'";
アップロード
*.changes ファイルがあるディレクトリで下のようにする.
$ dupload --to foo .
apt
インストールするマシンの apt を設定する.リポジトリの公開鍵をインストールするマシンの鍵束に加える.
$ ssh foo@www.example.com gpg --export -a 6789ABCD | sudo apt-key add -
これで通常の操作をすればよい.
$ sudo aptitude update
問題点
このやりかただと,パッケージをバージョンアップしてアップロードすると,前のバージョンがそのままアーカイブに残るという問題点がある.この場合でもインストール時には最新バージョンがインストールされるが,apt-cache search や apt-cache show で複数のバージョンが表示されてしまい気持ち悪い.以下の記事を参照して新しい方法を試してみる方がいいかもしれない.
- apt-ftparchive を使った方法の解説
- この記事の著者が,記事のやり方は deprecated だと言っていて,以下の記事を推奨している:
- Setting up your own APT repository with upload support
- あるいはこちらを試してみるとか: howto: uploading to people.d.o using dput
0 件のコメント:
コメントを投稿