APT リポジトリの作製 階層型のリポジトリは reprepro コマンドで構築すると簡単。 reprepro はかなり多くの機能があるが リポジトリ作成なら apt-ftparchive よりも簡単。 準備 reprepro パッケージを入れる。 リポジトリのトップディレクトリを として 設定ファイル置き場を作成する。 % mkdir -p /conf この中に distributions ファイルを作製する。 ファイルには対象 distribution の説明(Release ファイルに似ている)を書く。 Origin: Me Label: My label Suite: stable Codename: squeeze Version: 6.0 Architectures: amd64 source Components: main contrib non-free Description: Privately used/packaged software 空行で区切って複数の distribution の説明を記載できる。 Codename, Architectures, Components は必須。 Codename が distribution の名前となる。 ソースコードを扱う場合は Architectures に source を指定する。 生成される Release ファイルには source は出てこない。 Components の先頭はデフォルトのコンポーネントとしても使われるので main の様な主要なコンポーネント名を最初に書くとよい。 Origin, Label, Version, Description は、 あればそのまま Release ファイルに反映される。 設定可能な項目は他にも多数。 注意 reprepro は、いくつかの情報を /db/ の下に格納する。 この中のファイル(DBM)が壊れた時の修復方法が不明。 ファイルシステムが溢れたり、 reprepro の実行を強制終了したりしない 配慮が必要。 deb ファイルの配置 % reprepro -b includedeb squeeze mypackage.deb を実行すると指定された deb ファイルを squeeze distribution として リポジトリに配置し、 Packages 等を生成する。 この時、必要なディレクトリ(pool, dists)も作製する。 オプション -b を省略するとカレントディレクトリを使う。 ソースファイルの配置 dsc ファイルとそこから参照される orig.tar.gz や diff.gz ファイルを用意して % reprepro -b includedsc squeeze mypackage.dsc を実行する。 パッケージを更新する場合は .changes ファイルを指定する。 % reprepro -b include squeeze mypackage.changes 配置場所の指定 所属コンポーネントは distributions 中の Components 蘭と 制御ファイル中の Section 欄から推測される。 例: contrib/games なら contrib コンポーネント。 コンポーネントを指定したい場合は -C オプションで指定するか、 上書き(override)ファイル中で $Component を指定する。 上書きファイルでも Filename は指定できないので、 おそらくは、 pool 内での置き場所は決め打ちで変更はできない。 上書き指定 conf/distributions 中の DebOverride, DscOverride で 上書きファイル名を指定できる。 上書きファイルは Extra Override 形式のみ扱える。 つまり、パッケージ名、フィールド名、値を空白で区切って1行ずつ記述する。 reprepro 特有の機能として、 パッケージ名をワイルドカード(*, [chars], ?)で指定できる。 コンポーネントを $Component というフィールド名で指定できる。 内容を調べる リポジトリ内のパッケージの情報は ls, list, listfilter 等 色々なコマンドで調べられる。 % reprepro list squeeze 削除する リポジトリからパッケージを削除するには remove コマンドを使う。 reprepro -b remove squeeze mypackage ソースファイルと deb ファイルを消した上、 空ディレクトリ(pool/m など)が生じたらそれも消してくれる。 他に removefilter, removematched などのコマンドもある。 removesrc コマンドは指定したソースファイルから生成されたパッケージも 消すので注意。 /morgue ディレクトリを作製して --morguedir +b/morgue オプションを指定すると、 削除する代わりに morgue ディレクトリに移動する。 その他 パッケージの作製とリポジトリを別ホストに分離する場合は incoming ディレクトリを用意してそれを処理する仕組みがある。 管理対象外のファイルは reprepro dumpunreferenced で確認できる。