# altsp-downloader Скрипт для ALT SP Server: скачивает один или несколько пакетов вместе со всеми зависимостями и собирает из них автономный локальный apt-rpm репозиторий (схема `classic`), готовый для переноса на машину без интернета. ## Требования - ALT Linux / ALT SP Server, apt-rpm (`apt-get`, `rpm`). - Доступ к реальным (интернет) репозиториям на машине, где запускается скрипт. - root / sudo. Пакет `apt-repo-tools` (для `genbasedir`) устанавливается скриптом автоматически, если отсутствует. ## Использование ```bash 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`, чтобы перенести его одним файлом. Пример: ```bash sudo ./altsp-download-repo.sh -o /srv/offline-repo -a bash mc htop ``` Повторные запуски с другим набором пакетов дополняют существующий каталог репозитория, не скачивая заново уже имеющиеся пакеты. Если часть пакетов не удалось скачать (опечатка в имени, пакет отсутствует в репозитории, сетевой сбой), скрипт выводит предупреждение по каждому такому пакету, но всё равно собирает репозиторий/архив из того, что удалось скачать. Коды возврата: - `0` — все пакеты скачаны успешно; - `1` — фатальная ошибка (например, не скачался вообще ни один пакет); - `2` — репозиторий/архив собраны, но часть пакетов пропущена. ## Как это работает Зависимости резолвятся против **пустой** rpm-базы (`rpm --initdb` во временном fakeroot + `apt-get -o RPM::RootDir=...`), поэтому скачивается **полное** дерево зависимостей запрошенных пакетов, а не только то, чего не хватает на машине, где запущен скрипт. Это важно, так как репозиторий предназначен для переноса на другую, возможно не идентичную по составу пакетов машину. Скачанные `.rpm` раскладываются по архитектурам (`//RPMS.classic/`), для каждой архитектуры генерируются метаданные через `genbasedir` (`//base/`). ## Установка на офлайн-машине Результат работы скрипта (`README.txt` внутри каталога репозитория) содержит готовые строки для `sources.list`, например: ``` rpm file:/srv/offline-repo x86_64 classic ``` Затем: ```bash apt-get update apt-get install <имена пакетов> ``` Подпись репозитория не требуется — тег вроде `[cert8]` указывать не нужно.