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:
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user