Репозитории apt
Структура репозитория
Удаленный репозиторий состоит из двух поддиректорий: pool хранит deb-пакеты, а dists хранит мета-информацию о вариантах поставки (suites):
repo
├─ dists
│ └─ stable
│ ├─ InRelease
│ ├─ main
│ │ └─ binary-all
│ │ ├─ Packages
│ │ └─ Packages.gz
│ ├─ Release
│ └─ Release.gpg
├─ pool
│ └─ main
│ └─ fenrir-1bah-2026.0+2_all.deb
└─ release.conf
Хранение пакетов разделяется по компонентам. На примере выше есть только одна компонента — main.
Создание и обновление репозитория
Для автоматической генерации файлов с мета-информацией используется утилита apt-ftparchive.
Чтобы создать индекс пакетов для каждой компоненты, необходимо выполнить команду apt-ftparchive --arch <ARCH> packages pool/main > dists/stable/main/binary-<ARCH>/Packages
$ cat dists/stable/main/binary-all/Packages
Package: fenrir-1bah
Architecture: all
Version: 2026.0+2
Maintainer: Iwan Kalinin <koefic.cien@gmail.com>
Depends: bash (>= 5.0.0), curl
Filename: pool/main/fenrir-1bah-2026.0+2_all.deb
Size: 26340
MD5sum: 692af142897f8dcd7c8c9248903a0c64
SHA1: d954f08ddb60c91cafb102421d8abe10e99c923c
SHA256: 3e079ab4306ec001ff4d680b26ca72c86c3c1074ec23e3b6f4553e3c1ddbaa6f
SHA512: 06f2e1b9b0c03e609d60db7b904cb541e0791e7d956450cd10449c127b2ab86eb35476205541fc3ec991f4fa50d6d48a4cbbac911461ced924a369445e2dca5e
Description: A lightweight general purpose testing tool
Чтобы данная утилита работала корректно, имя пакетов должно иметь вид <NAME>_<ARCH>.deb
|
Для создания Packages.gz используйте команду gzip.
|
Сcыль на gzip |
Для создания общего индекса потребуется уже команда
apt-ftparchive -c <PATH TO release.conf> release dists/stable > dists/stable/Release
Конфиг будет иметь следующее содержание:
APT::FTPArchive::Release {
Origin "1bah";
Label "1bah registry";
Suite "stable";
Codename "stable";
Architectures "all";
Components "main";
Description "deb packages by 1bah";
};
Из незнакомых тегов для нас только Origin — название организации, развивающей проект, и Label — имя для репозитория.
Файлы Release.gpg и InRelease — это gpg подпись файла Release. Первый содержит только подпись, а второй исходный файл + подпись.