cd $(1); \
if [ -n "$(CONFIG_USE_APK)" ]; then \
IPKG_POSTINST_PATH=./lib/apk/db/*.post-install; \
- $(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install"; \
+ $(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xzf ./lib/apk/db/scripts.tar.gz --wildcards "*.post-install"; \
else \
IPKG_POSTINST_PATH=./usr/lib/opkg/info/*.postinst; \
fi; \
echo "postinst script $$script has failed with exit code $$ret" >&2; \
exit 1; \
fi; \
- [ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -f ./lib/apk/db/scripts.tar $$(basename $$script); \
+ [ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -zf ./lib/apk/db/scripts.tar.gz $$(basename $$script); \
done; \
if [ -z "$(CONFIG_USE_APK)" ]; then \
$(if $(IB),,awk -i inplace \
--- /dev/null
+diff --git a/doc/apk.8.scd b/doc/apk.8.scd
+index bd15fe75d7a4..cbac8c6c8b7b 100644
+--- a/doc/apk.8.scd
++++ b/doc/apk.8.scd
+@@ -461,7 +461,8 @@ timeout 120
+ */lib/apk/db/installed*
+ Database of installed packages and their contents.
+
+-*/lib/apk/db/scripts.tar*
++*/lib/apk/db/scripts.tar*++
++*/lib/apk/db/scripts.tar.gz*
+ Collection of all package scripts from currently installed packages.
+
+ */lib/apk/db/triggers*
+diff --git a/src/apk_database.h b/src/apk_database.h
+index 9f8670ac8ebb..10f1414c9e06 100644
+--- a/src/apk_database.h
++++ b/src/apk_database.h
+@@ -202,6 +202,7 @@ struct apk_database {
+ unsigned int compat_depversions : 1;
+ unsigned int sorted_names : 1;
+ unsigned int sorted_installed_packages : 1;
++ unsigned int scripts_tar : 1;
+
+ struct apk_dependency_array *world;
+ struct apk_id_cache *id_cache;
+diff --git a/src/database.c b/src/database.c
+index cbe58ebbf885..cb1b709140af 100644
+--- a/src/database.c
++++ b/src/database.c
+@@ -1255,8 +1255,11 @@ static int apk_db_read_layer(struct apk_database *db, unsigned layer)
+ }
+
+ if (!(flags & APK_OPENF_NO_SCRIPTS)) {
+- r = apk_tar_parse(apk_istream_from_file(fd, "scripts.tar"),
+- apk_read_script_archive_entry, db, db->id_cache);
++ struct apk_istream *is = apk_istream_from_file(fd, "scripts.tar");
++ if (!IS_ERR(is) || PTR_ERR(is) != -ENOENT) db->scripts_tar = 1;
++ else is = apk_istream_gunzip(apk_istream_from_file(fd, "scripts.tar.gz"));
++
++ r = apk_tar_parse(is, apk_read_script_archive_entry, db, db->id_cache);
+ if (!ret && r != -ENOENT) ret = r;
+ }
+
+@@ -2128,8 +2131,9 @@ static int apk_db_write_layers(struct apk_database *db)
+ continue;
+ }
+ ld->installed = apk_ostream_to_file(ld->fd, "installed", 0644);
+- ld->scripts = apk_ostream_to_file(ld->fd, "scripts.tar", 0644);
+ ld->triggers = apk_ostream_to_file(ld->fd, "triggers", 0644);
++ if (db->scripts_tar) ld->scripts = apk_ostream_to_file(ld->fd, "scripts.tar", 0644);
++ else ld->scripts = apk_ostream_gzip(apk_ostream_to_file(ld->fd, "scripts.tar.gz", 0644));
+
+ if (i == APK_DB_LAYER_ROOT)
+ os = apk_ostream_to_file(db->root_fd, apk_world_file, 0644);