Convenient for transferring the offline repo as one file instead of a directory tree; excludes the internal .cache/ (download cache + fakeroot rpm db), which the target machine doesn't need.
3.2 KiB
altsp-downloader
Скрипт для ALT SP Server: скачивает один или несколько пакетов вместе со
всеми зависимостями и собирает из них автономный локальный apt-rpm
репозиторий (схема classic), готовый для переноса на машину без
интернета.
Требования
- ALT Linux / ALT SP Server, apt-rpm (
apt-get,rpm). - Доступ к реальным (интернет) репозиториям на машине, где запускается скрипт.
- root / sudo.
Пакет apt-repo-tools (для genbasedir) устанавливается скриптом
автоматически, если отсутствует.
Использование
sudo ./altsp-download-repo.sh [-o|--output DIR] [-a|--archive] PKG1 [PKG2 ...]
- Пакеты передаются аргументами командной строки — можно указать сразу несколько для batch-скачивания.
-o/--output DIR— каталог репозитория (по умолчанию./altsp-repo).--skip-update— пропуститьapt-get updateперед скачиванием.-a/--archive— дополнительно упаковать готовый репозиторий в<каталог>.tar.gz, чтобы перенести его одним файлом.
Пример:
sudo ./altsp-download-repo.sh -o /srv/offline-repo -a bash mc htop
Повторные запуски с другим набором пакетов дополняют существующий каталог репозитория, не скачивая заново уже имеющиеся пакеты.
Как это работает
Зависимости резолвятся против пустой rpm-базы (rpm --initdb во
временном fakeroot + apt-get -o RPM::RootDir=...), поэтому скачивается
полное дерево зависимостей запрошенных пакетов, а не только то, чего
не хватает на машине, где запущен скрипт. Это важно, так как репозиторий
предназначен для переноса на другую, возможно не идентичную по составу
пакетов машину.
Скачанные .rpm раскладываются по архитектурам
(<repo>/<arch>/RPMS.classic/), для каждой архитектуры генерируются
метаданные через genbasedir (<repo>/<arch>/base/).
Установка на офлайн-машине
Результат работы скрипта (README.txt внутри каталога репозитория)
содержит готовые строки для sources.list, например:
rpm file:/srv/offline-repo x86_64 classic
Затем:
apt-get update
apt-get install <имена пакетов>
Подпись репозитория не требуется — тег вроде [cert8] указывать не нужно.