目次: apt
WebサーバーあるいはFTPサーバーでDebianパッケージを配布する場合、*.debファイル以外にContents, Package, Releaseファイルが必要です。これらのファイルを作成するためのツールがapt-ftparchiveです。
今回はHTMLサーバーで配布することを考えます。Debianだと /var/wwwがルートディレクトリになっていることが多いと思います。以降 /var/wwwがルートディレクトリだとします。
ディレクトリ構成は前回紹介(2019年8月11日の日記参照)したDockerのディレクトリ構成に習うとします。Debianパッケージはどんなファイルでも良いです(後ほどテストするときのためamd64向けのパッケージのほうが良いです)が、今回はDockerのパッケージを1つダウンロードしてきて試します。
# cd /var/www # tree linux linux |-- conf | |-- apt_generate_debian_buster.conf | `-- apt_release_debian_buster.conf `-- debian `-- dists `-- buster |-- pool | `-- stable | `-- amd64 | `-- docker-ce_19.03.1~3-0~debian-buster_amd64.deb `-- stable `-- binary-amd64 9 directories, 3 files
Debianパッケージのみを配置した後のディレクトリ構造は上記のようになります。
設定ファイルはapt_generate_debian_buster.confとapt_release_debian_buster.confと2つを使います。前者はディレクトリ構造を指定するファイルで、apt-ftparchive generateの引数に指定します。後者はリリース情報(ラベル、オリジナルなど)を指定するファイルで、apt-ftparchive releaseの -cオプションに指定します。
各設定ファイルの書き方を紹介します。
Dir::ArchiveDir ".";
Dir::CacheDir "dists/buster";
Default::Packages::Compress ". gzip bzip2";
Default::Packages::Extensions ".deb";
Default::Sources::Compress ". gzip bzip2";
Default::Contents::Compress ". gzip bzip2";
Default::FileMode 0644;
TreeDefault::Directory "dists/buster/pool/stable/amd64";
TreeDefault::Packages "dists/buster/stable/binary-amd64/Packages";
Tree "dists/buster" {
Sections "stable";
Architectures "amd64";
};
BinDirectory "dists/buster/stable/binary-amd64" {
Packages "dists/buster/stable/binary-amd64/Packages";
Contents "dists/buster/stable/Contents-amd64";
};
この設定ファイルにはいくつかディレクトリパスが登場します。パスはapt-ftparchiveを実行するディレクトリ(/var/www/linux/buster)からの相対パスで記述します。
Tree::SectionsとTree::Architecturesは少し特殊で、ディレクトリパスの一部を構成します。{Tree}/{Sections} ディレクトリにContentsファイルが作成され、{Tree}/{Sections}/{Architectures} ディレクトリにPackagesファイルが作成されます。
...
Tree "dists/buster" {
Sections "stable testing";
Architectures "amd64";
};
上記のようにTree::Sectionsには複数のセクションが指定でき、Tree::Architecturesには複数のアーキテクチャが指定できるはずですが、今のところTreeDefault::Packagesとの対応がよくわからず、使いこなせていません。複数のセクションを同時に指定する手段が見つかったら、また日記で書こうと思います。
APT::FTPArchive::Release {
Architectures "amd64";
Components "stable";
Label "Test Label";
Origin "Test";
Suite "buster";
};
リリース情報を記述するファイルは上記のように書きます。APT::FTPArchive::Releaseには他のフィールドも記述できます。apt-ftparchiveのreleaseコマンドのヘルプ(リンク)によると「Origin, Label, Suite, Version, Codename, Date, NotAutomatic, ButAutomaticUpgrades, Acquire-By-Hash, Valid-Until, Signed-By, Architectures, Components, Description」が指定できるとのことですが、意味が説明されておらず、何を書くべきなのかわかりません……。
設定ファイルを記述した後はapt-ftparchiveを実行して、Debianパッケージの情報について記述したContents, Packages, Releaseの各ファイルを作成します。
# export TARGET=debian
# export DIST=buster
# export SECT=stable
# export ARCH=amd64
# mkdir -p /var/www/linux/${TARGET}/dists/${DIST}/${SECT}/binary-${ARCH}
# mkdir -p /var/www/linux/${TARGET}/dists/${DIST}/pool/${SECT}/${ARCH}
### *.debファイルをコピーする(モジュールによってコピー元は違うと思うので、これは一例)
### cp *.deb /var/www/linux/${TARGET}/dists/${DIST}/pool/${SECT}/${ARCH}
### Packages, Contentsファイルを作る
### linux/debianの下でapt-ftparchiveを実行しないと *.debが見つからないといわれる
# cd /var/www/linux/${TARGET}
# find . -name "Contents-*" -or -name "Contents-*.*" | xargs rm -f
# find . -name "Packages" -or -name "Packages.*" -or -name "packages-*" | xargs rm -f
# find . -name Release -or -name Release.gpg -or -name InRelease | xargs rm -f
# apt-ftparchive generate ../conf/apt_generate_${TARGET}_${DIST}.conf
### Releaseファイルを作る
### linux/debian/dists/busterの下でapt-ftparchiveを実行しないと、
### 後ほどapt-getを実行した際にパッケージが見つからないといわれる
# cd /var/www/linux/${TARGET}/dists/${DIST}
# apt-ftparchive release -c=../../../conf/apt_release_${TARGET}_${DIST}.conf . > Release
作成手順は以上のような感じですが、かなりパスに依存した動きで癖が強いです。正直言ってわかりにくいです。
# tree linux linux |-- conf | |-- apt_generate_debian_buster.conf | `-- apt_release_debian_buster.conf `-- debian `-- dists `-- buster |-- Release |-- packages-amd64.db |-- pool | `-- stable | `-- amd64 | `-- docker-ce_19.03.1~3-0~debian-buster_amd64.deb `-- stable |-- Contents-amd64 |-- Contents-amd64.bz2 |-- Contents-amd64.gz `-- binary-amd64 |-- Packages |-- Packages.bz2 `-- Packages.gz
コマンド実行後、Contents, Packages, Releaseファイルが生成され、上記のように配置されます。
Contents, Packages, Releaseファイルがあればapt-getにaptサーバーとして認識してもらえるはずです。
deb [arch=amd64] http://192.168.1.1/linux/debian/ buster stable
適当なDebianマシンのaptの設定ファイルに、さきほど作成した独自aptサーバーを追加し apt-get updateを実行します。HTTPサーバーのIPアドレスは192.168.1.1とします。
# apt-get update Ign:1 http://192.168.1.1/linux/debian buster InRelease Get:2 http://192.168.1.1/linux/debian buster Release [3233 B] Ign:3 http://192.168.1.1/linux/debian buster Release.gpg Hit:4 http://ftp.jp.debian.org/debian testing InRelease Reading package lists... Done E: The repository 'http://192.168.1.1/linux/debian buster Release' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.
残念ながらエラーになりました……。
Contents, Packages, Releaseファイルを作成しても終わりではありません。aptには悪意ある者がDebianパッケージを改変しても検知できる仕組みが搭載されていて、その対応をしないと「信用できないリポジトリ」だといわれてエラーになります。
(追記)下記が間違っていたので直しました。
(誤)
TreeDefault::Directory "dists/buster/pool/stable/stable/amd64";
(正)
TreeDefault::Directory "dists/buster/pool/stable/amd64";
< | 2019 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.18.
using GD 2.3.3(png support.)