fix tar进度问题

This commit is contained in:
anlicheng 2026-06-01 16:28:55 +08:00
parent 719b539b3f
commit ee8d6e2963
3 changed files with 53 additions and 5 deletions

View File

@ -161,6 +161,31 @@ archive_name_from_url() {
basename "$clean_url" basename "$clean_url"
} }
tar_supports_checkpoint() {
local tar_help
tar_help="$(tar --help 2>&1 || true)"
case "$tar_help" in
*--checkpoint*) return 0 ;;
*) return 1 ;;
esac
}
extract_archive() {
local archive_path="$1"
local install_dir="$2"
log "Extracting archive to $install_dir"
if tar_supports_checkpoint; then
log "Extraction progress: one dot per 100 archive records"
run_as_root tar -zxf "$archive_path" -C "$install_dir" --checkpoint=100 --checkpoint-action=dot
printf '\n'
else
log "tar checkpoint progress is not supported; extracting quietly"
run_as_root tar -zxf "$archive_path" -C "$install_dir"
fi
}
parse_args() { parse_args() {
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
@ -431,8 +456,7 @@ install_program() {
log "Creating install directory: $install_dir" log "Creating install directory: $install_dir"
run_as_root install -d -m 0755 "$install_dir" run_as_root install -d -m 0755 "$install_dir"
log "Extracting archive to $install_dir" extract_archive "$archive_path" "$install_dir"
run_as_root tar -zxvf "$archive_path" -C "$install_dir"
log "Removing downloaded archive: $archive_path" log "Removing downloaded archive: $archive_path"
run_as_root rm -f "$archive_path" run_as_root rm -f "$archive_path"

View File

@ -167,6 +167,31 @@ archive_name_from_url() {
basename "$clean_url" basename "$clean_url"
} }
tar_supports_checkpoint() {
local tar_help
tar_help="$(tar --help 2>&1 || true)"
case "$tar_help" in
*--checkpoint*) return 0 ;;
*) return 1 ;;
esac
}
extract_archive() {
local archive_path="$1"
local install_dir="$2"
log "Extracting archive to $install_dir"
if tar_supports_checkpoint; then
log "Extraction progress: one dot per 100 archive records"
run_as_root tar -zxf "$archive_path" -C "$install_dir" --checkpoint=100 --checkpoint-action=dot
printf '\n'
else
log "tar checkpoint progress is not supported; extracting quietly"
run_as_root tar -zxf "$archive_path" -C "$install_dir"
fi
}
parse_args() { parse_args() {
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
@ -497,8 +522,7 @@ install_program() {
log "Creating install directory: $install_dir" log "Creating install directory: $install_dir"
run_as_root install -d -m 0755 "$install_dir" run_as_root install -d -m 0755 "$install_dir"
log "Extracting archive to $install_dir" extract_archive "$archive_path" "$install_dir"
run_as_root tar -zxvf "$archive_path" -C "$install_dir"
log "Removing downloaded archive: $archive_path" log "Removing downloaded archive: $archive_path"
run_as_root rm -f "$archive_path" run_as_root rm -f "$archive_path"

View File

@ -138,7 +138,7 @@ Environment="KEY=value"
3. 下载压缩包到临时文件。 3. 下载压缩包到临时文件。
4. 保存压缩包到 `WORK_DIR` 4. 保存压缩包到 `WORK_DIR`
5. 创建安装目录。 5. 创建安装目录。
6. 解压压缩包。 6. 解压压缩包。GNU tar 环境下显示 checkpoint 点状进度,不输出文件列表;不支持 checkpoint 的 tar 会安静解压。
7. 删除保存到 `WORK_DIR` 的压缩包。 7. 删除保存到 `WORK_DIR` 的压缩包。
8. 设置安装目录 owner。 8. 设置安装目录 owner。
9. 根据 `*_DIR_ENV_KEYS` 创建数据目录,并根据 `*_PARENT_DIR_ENV_KEYS` 创建文件路径父目录。 9. 根据 `*_DIR_ENV_KEYS` 创建数据目录,并根据 `*_PARENT_DIR_ENV_KEYS` 创建文件路径父目录。