From 929939341cb62b72a9b5c980ae414b1a6621c23b Mon Sep 17 00:00:00 2001 From: "a.gritsenko" Date: Tue, 22 Sep 2026 03:39:52 +0300 Subject: [PATCH] Add -a/--archive option to package the built repo as a single tar.gz 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. --- README.md | 6 ++++-- altsp-download-repo.sh | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bc5802d..199504a 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,20 @@ ## Использование ```bash -sudo ./altsp-download-repo.sh [-o|--output DIR] PKG1 [PKG2 ...] +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 bash mc htop +sudo ./altsp-download-repo.sh -o /srv/offline-repo -a bash mc htop ``` Повторные запуски с другим набором пакетов дополняют существующий каталог diff --git a/altsp-download-repo.sh b/altsp-download-repo.sh index a7ceba5..9c0377c 100644 --- a/altsp-download-repo.sh +++ b/altsp-download-repo.sh @@ -7,23 +7,26 @@ set -euo pipefail SCRIPT_NAME=$(basename "$0") OUTDIR="./altsp-repo" SKIP_UPDATE=0 +ARCHIVE=0 PACKAGES=() ORIGINAL_ARGS=("$@") usage() { cat <.tar.gz (для переноса одним файлом) -h, --help Показать эту справку Повторные запуски с другим набором пакетов дополняют существующий каталог репозитория, не скачивая заново уже имеющиеся пакеты. Пример: - sudo $SCRIPT_NAME -o /srv/offline-repo bash mc htop + sudo $SCRIPT_NAME -o /srv/offline-repo -a bash mc htop EOF } @@ -33,6 +36,8 @@ while [[ $# -gt 0 ]]; do OUTDIR="$2"; shift 2 ;; --skip-update) SKIP_UPDATE=1; shift ;; + -a|--archive) + ARCHIVE=1; shift ;; -h|--help) usage; exit 0 ;; --) @@ -151,9 +156,22 @@ for archdir in "$OUTDIR"/*/RPMS.classic; do done human_size=$(numfmt --to=iec "$total_bytes" 2>/dev/null || echo "${total_bytes} bytes") +ARCHIVE_PATH="" +if [[ $ARCHIVE -eq 1 ]]; then + ARCHIVE_PATH="$OUTDIR.tar.gz" + echo "Упаковка репозитория в архив..." >&2 + tar -czf "$ARCHIVE_PATH" \ + -C "$(dirname "$OUTDIR")" \ + --exclude="$(basename "$OUTDIR")/.cache" \ + "$(basename "$OUTDIR")" +fi + echo echo "Готово." echo "Репозиторий: $OUTDIR" echo "Пакетов (rpm): $rpm_count" echo "Суммарный размер: $human_size" echo "Инструкция: $README" +if [[ -n "$ARCHIVE_PATH" ]]; then + echo "Архив: $ARCHIVE_PATH" +fi