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.
This commit is contained in:
2026-09-22 03:39:52 +03:00
parent 33e8d18f94
commit 929939341c
2 changed files with 24 additions and 4 deletions
+4 -2
View File
@@ -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
```
Повторные запуски с другим набором пакетов дополняют существующий каталог
+20 -2
View File
@@ -7,23 +7,26 @@ set -euo pipefail
SCRIPT_NAME=$(basename "$0")
OUTDIR="./altsp-repo"
SKIP_UPDATE=0
ARCHIVE=0
PACKAGES=()
ORIGINAL_ARGS=("$@")
usage() {
cat <<EOF
Использование: $SCRIPT_NAME [-o|--output DIR] [--skip-update] PKG1 [PKG2 ...]
Использование: $SCRIPT_NAME [-o|--output DIR] [--skip-update] [-a|--archive] PKG1 [PKG2 ...]
Опции:
-o, --output DIR Каталог репозитория (по умолчанию: $OUTDIR)
--skip-update Не выполнять apt-get update перед скачиванием
-a, --archive Дополнительно упаковать готовый репозиторий в
<каталог>.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