From 8a42dfe232e59163654bc0fa536f051210160e16 Mon Sep 17 00:00:00 2001 From: Luc Ritchie Date: Tue, 25 Jan 2022 17:19:15 -0500 Subject: [PATCH] Fix loading world from compressed tar archives (#1304) --- Dockerfile | 1 + scripts/start-utils | 22 +++++++++++------- .../docker-compose.yml | 2 +- .../verify.sh | 0 .../worlds/world-for-testing.tar} | Bin .../world_from_tarbz2/docker-compose.yml | 14 +++++++++++ .../world_from_tarbz2/verify.sh | 1 + .../worlds/world-for-testing.tar.bz2 | Bin 0 -> 125 bytes .../world_from_targz/docker-compose.yml | 14 +++++++++++ .../setuponlytests/world_from_targz/verify.sh | 1 + .../worlds/world-for-testing.tar.gz | Bin 0 -> 120 bytes .../world_from_tarzst/docker-compose.yml | 14 +++++++++++ .../world_from_tarzst/verify.sh | 1 + .../worlds/world-for-testing.tar.zst | Bin 0 -> 90 bytes 14 files changed, 60 insertions(+), 10 deletions(-) rename tests/setuponlytests/{world_from_tgz => world_from_tar}/docker-compose.yml (86%) rename tests/setuponlytests/{world_from_tgz => world_from_tar}/verify.sh (100%) rename tests/setuponlytests/{world_from_tgz/worlds/world-for-testing.tgz => world_from_tar/worlds/world-for-testing.tar} (100%) create mode 100644 tests/setuponlytests/world_from_tarbz2/docker-compose.yml create mode 100644 tests/setuponlytests/world_from_tarbz2/verify.sh create mode 100644 tests/setuponlytests/world_from_tarbz2/worlds/world-for-testing.tar.bz2 create mode 100644 tests/setuponlytests/world_from_targz/docker-compose.yml create mode 100644 tests/setuponlytests/world_from_targz/verify.sh create mode 100644 tests/setuponlytests/world_from_targz/worlds/world-for-testing.tar.gz create mode 100644 tests/setuponlytests/world_from_tarzst/docker-compose.yml create mode 100644 tests/setuponlytests/world_from_tarzst/verify.sh create mode 100644 tests/setuponlytests/world_from_tarzst/worlds/world-for-testing.tar.zst diff --git a/Dockerfile b/Dockerfile index 836ee443..4e9db69f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,6 +20,7 @@ RUN apt-get update \ rsync \ nano \ unzip \ + zstd \ knockd \ ttf-dejavu \ && apt-get clean diff --git a/scripts/start-utils b/scripts/start-utils index a2da3d5c..9b8b9d84 100755 --- a/scripts/start-utils +++ b/scripts/start-utils @@ -195,12 +195,16 @@ function extract() { destDir=${2?} type=$(file -b --mime-type "${src}") - if [[ $type == application/zip ]]; then - unzip -q -d "${destDir}" "${src}" - elif [[ $type == application/x-tar ]]; then - tar -C "${destDir}" -xf "${src}" - else - log "ERROR: unsupported archive type: $type" - return 1 - fi -} \ No newline at end of file + case "${type}" in + application/zip) + unzip -q -d "${destDir}" "${src}" + ;; + application/x-tar|application/gzip|application/x-bzip2|application/zstd) + tar -C "${destDir}" -xf "${src}" + ;; + *) + log "ERROR: unsupported archive type: $type" + return 1 + ;; + esac +} diff --git a/tests/setuponlytests/world_from_tgz/docker-compose.yml b/tests/setuponlytests/world_from_tar/docker-compose.yml similarity index 86% rename from tests/setuponlytests/world_from_tgz/docker-compose.yml rename to tests/setuponlytests/world_from_tar/docker-compose.yml index 530b1ed8..89aba954 100644 --- a/tests/setuponlytests/world_from_tgz/docker-compose.yml +++ b/tests/setuponlytests/world_from_tar/docker-compose.yml @@ -8,7 +8,7 @@ services: EULA: "TRUE" SETUP_ONLY: "TRUE" VERSION: ${MINECRAFT_VERSION:-LATEST} - WORLD: /worlds/world-for-testing.tgz + WORLD: /worlds/world-for-testing.tar volumes: - ./worlds:/worlds:ro - ./data:/data diff --git a/tests/setuponlytests/world_from_tgz/verify.sh b/tests/setuponlytests/world_from_tar/verify.sh similarity index 100% rename from tests/setuponlytests/world_from_tgz/verify.sh rename to tests/setuponlytests/world_from_tar/verify.sh diff --git a/tests/setuponlytests/world_from_tgz/worlds/world-for-testing.tgz b/tests/setuponlytests/world_from_tar/worlds/world-for-testing.tar similarity index 100% rename from tests/setuponlytests/world_from_tgz/worlds/world-for-testing.tgz rename to tests/setuponlytests/world_from_tar/worlds/world-for-testing.tar diff --git a/tests/setuponlytests/world_from_tarbz2/docker-compose.yml b/tests/setuponlytests/world_from_tarbz2/docker-compose.yml new file mode 100644 index 00000000..7f5bc2aa --- /dev/null +++ b/tests/setuponlytests/world_from_tarbz2/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.tar.bz2 + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/world_from_tarbz2/verify.sh b/tests/setuponlytests/world_from_tarbz2/verify.sh new file mode 100644 index 00000000..b2138d04 --- /dev/null +++ b/tests/setuponlytests/world_from_tarbz2/verify.sh @@ -0,0 +1 @@ +mc-image-helper assert fileExists world/level.dat \ No newline at end of file diff --git a/tests/setuponlytests/world_from_tarbz2/worlds/world-for-testing.tar.bz2 b/tests/setuponlytests/world_from_tarbz2/worlds/world-for-testing.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..a3fa505e9f5a25e0defef3b8f3e21bf2992001bd GIT binary patch literal 125 zcmV-@0D}KQT4*^jL0KkKSucWf+5iA}`+&fJ1OPw*Z-4-RZe$;TAP67;bqy){C^R%= z&}pZrB&LLDXaLY@y)CGaJ_tfEfjP!hJZ1z literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/world_from_targz/docker-compose.yml b/tests/setuponlytests/world_from_targz/docker-compose.yml new file mode 100644 index 00000000..59369b9f --- /dev/null +++ b/tests/setuponlytests/world_from_targz/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.tar.gz + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/world_from_targz/verify.sh b/tests/setuponlytests/world_from_targz/verify.sh new file mode 100644 index 00000000..b2138d04 --- /dev/null +++ b/tests/setuponlytests/world_from_targz/verify.sh @@ -0,0 +1 @@ +mc-image-helper assert fileExists world/level.dat \ No newline at end of file diff --git a/tests/setuponlytests/world_from_targz/worlds/world-for-testing.tar.gz b/tests/setuponlytests/world_from_targz/worlds/world-for-testing.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d5e9f34e3301fa335f7a99aa79e15d86117665b1 GIT binary patch literal 120 zcmb2|=3oE==C|hz`I-#`TrS#n`8Skpm6*>is4^j@vGFyt>mrj5u2uhMX{L3Z{Cn&9 ztIJ}QeR4rP=}}$3=Eo;(RsHUEHTKG#Ez=h8*ZqoocF9li#I)rbOAc3T-Tj&oVmOqn PxX8DCe)v@e4F(1Pf#)#K literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/world_from_tarzst/docker-compose.yml b/tests/setuponlytests/world_from_tarzst/docker-compose.yml new file mode 100644 index 00000000..3008f391 --- /dev/null +++ b/tests/setuponlytests/world_from_tarzst/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.tar.zst + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/world_from_tarzst/verify.sh b/tests/setuponlytests/world_from_tarzst/verify.sh new file mode 100644 index 00000000..b2138d04 --- /dev/null +++ b/tests/setuponlytests/world_from_tarzst/verify.sh @@ -0,0 +1 @@ +mc-image-helper assert fileExists world/level.dat \ No newline at end of file diff --git a/tests/setuponlytests/world_from_tarzst/worlds/world-for-testing.tar.zst b/tests/setuponlytests/world_from_tarzst/worlds/world-for-testing.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..80a8a60dadc04fc3fa712f264ad2049841dfed00 GIT binary patch literal 90 zcmV-g0HyyZwJ-eySZx9T5`+yDfHmrYWUU-2Kx70{WXX|D0!2n;RK?H~TLBWnP%{or w*jqZyrsX@ma&!9gPWWd-M6ePdtp@