From: Michael Tremer Date: Sun, 21 Aug 2022 12:51:21 +0000 (+0000) Subject: packager: Drop support for mtrees X-Git-Tag: 0.9.28~410 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfdad79699019e1a4866ae35dfb3d662971c00d2;p=pakfire.git packager: Drop support for mtrees Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 76c12feca..ceaade367 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -56,8 +56,6 @@ struct pakfire_packager { // Payload struct archive* payload; FILE* fpayload; - struct archive* mtree; - FILE* fmtree; size_t installsize; unsigned int files; @@ -65,75 +63,6 @@ struct pakfire_packager { unsigned int num_scriptlets; }; -static int pakfire_packager_create_mtree(struct pakfire* pakfire, struct archive** mtree, - FILE** f, const char** fields) { - char path[] = PAKFIRE_TMP_DIR "/pakfire-mtree.XXXXXX"; - int r; - - // Create an mtree - *mtree = archive_write_new(); - if (!*mtree) { - ERROR(pakfire, "archive_write_new() failed\n"); - goto ERROR; - } - - // Use mtree format - r = archive_write_set_format_mtree(*mtree); - if (r) { - ERROR(pakfire, "Could not set format to mtree: %s\n", - archive_error_string(*mtree)); - goto ERROR; - } - - // Always compress using Zstd - r = archive_write_add_filter_zstd(*mtree); - if (r) { - ERROR(pakfire, "Could not enable Zstandard compression: %s\n", - archive_error_string(*mtree)); - goto ERROR; - } - - // Enable mtree fields - if (fields) { - for (const char** field = fields; *field; field++) { - r = archive_write_set_options(*mtree, *field); - if (r) { - ERROR(pakfire, "Could not set mtree options %s: %s\n", - *field, archive_error_string(*mtree)); - goto ERROR; - } - } - } - - // Create a new temporary file - *f = pakfire_mktemp(path); - if (!*f) - goto ERROR; - - // Unlink the file straight away - unlink(path); - - // Write mtree to file - r = archive_write_open_FILE(*mtree, *f); - if (r) - goto ERROR; - - return 0; - -ERROR: - if (*mtree) { - archive_write_free(*mtree); - *mtree = NULL; - } - - if (*f) { - fclose(*f); - *f = NULL; - } - - return 1; -} - static int pakfire_packager_create_payload(struct pakfire_packager* p) { char path[] = PAKFIRE_TMP_DIR "/pakfire-payload.XXXXXX"; @@ -200,35 +129,6 @@ static int pakfire_packager_create_payload(struct pakfire_packager* p) { if (r) return r; - static const char* mtree_fields[] = { - // Disable the default - "!all", - - // Enable standard file fields - "device", - "gname", - "link", - "mode", - "nlink", - "size", - "time", - "type", - "uname", - - // Enable cryptographic checksums - "sha512", - "sha256", - - NULL, - }; - - // Create an mtree - r = pakfire_packager_create_mtree(p->pakfire, &p->mtree, &p->fmtree, mtree_fields); - if (r) { - ERROR(p->pakfire, "Could not create mtree\n"); - return r; - } - // Add a requirement for the cryptographic algorithms we are using pakfire_package_add_requires(p->pkg, "pakfire(Digest-SHA512)"); pakfire_package_add_requires(p->pkg, "pakfire(Digest-SHA256)"); @@ -251,13 +151,6 @@ static void pakfire_packager_free(struct pakfire_packager* packager) { if (packager->fpayload) fclose(packager->fpayload); - // mtree - if (packager->mtree) - archive_write_free(packager->mtree); - - if (packager->fmtree) - fclose(packager->fmtree); - if (packager->reader) archive_read_free(packager->reader); @@ -379,7 +272,7 @@ static struct archive_entry* pakfire_packager_create_file( } static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* packager, - struct archive* a, struct archive* mtree, const char* filename, mode_t mode, const char* buffer) { + struct archive* a, const char* filename, mode_t mode, const char* buffer) { size_t size = strlen(buffer); // Create a new file @@ -403,23 +296,6 @@ static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* pack goto ERROR; } - // Add this file to the mtree - if (mtree) { - r = archive_write_header(mtree, entry); - if (r) { - ERROR(packager->pakfire, "Error adding file to mtree: %s\n", - archive_error_string(mtree)); - goto ERROR; - } - - // Write content - r = archive_write_data(mtree, buffer, strlen(buffer)); - if (r < 0) { - ERROR(packager->pakfire, "Error writing data: %s\n", archive_error_string(mtree)); - goto ERROR; - } - } - // Success r = 0; @@ -435,7 +311,7 @@ static int pakfire_packager_write_format(struct pakfire_packager* packager, DEBUG(packager->pakfire, "Writing package format\n"); - int r = pakfire_packager_write_file_from_buffer(packager, a, NULL, + int r = pakfire_packager_write_file_from_buffer(packager, a, "pakfire-format", 0444, buffer); if (r) return r; @@ -474,7 +350,7 @@ ERROR: } static int pakfire_packager_write_metadata(struct pakfire_packager* packager, - struct archive* a, struct archive* mtree) { + struct archive* a) { // Make metadata char* buffer = pakfire_packager_make_metadata(packager); if (!buffer) @@ -483,7 +359,7 @@ static int pakfire_packager_write_metadata(struct pakfire_packager* packager, DEBUG(packager->pakfire, "Generated package metadata:\n%s\n", buffer); // Write buffer - int r = pakfire_packager_write_file_from_buffer(packager, a, mtree, + int r = pakfire_packager_write_file_from_buffer(packager, a, "PKGINFO", 0444, buffer); free(buffer); @@ -492,7 +368,7 @@ static int pakfire_packager_write_metadata(struct pakfire_packager* packager, } static int pakfire_packager_write_archive(struct pakfire_packager* packager, - struct archive* a, struct archive* mtree, const char* filename, + struct archive* a, const char* filename, struct archive** payload, FILE* f) { struct stat st; @@ -540,23 +416,6 @@ static int pakfire_packager_write_archive(struct pakfire_packager* packager, goto ERROR; } - // Add this file to the mtree - if (mtree) { - r = archive_write_header(mtree, entry); - if (r) { - ERROR(packager->pakfire, "Error adding file to mtree: %s\n", - archive_error_string(mtree)); - goto ERROR; - } - - r = pakfire_archive_copy_data_from_file(packager->pakfire, mtree, f); - if (r) { - ERROR(packager->pakfire, "Error copying data to mtree: %s\n", - archive_error_string(mtree)); - goto ERROR; - } - } - // Success r = 0; @@ -567,7 +426,7 @@ ERROR: } static int pakfire_packager_write_scriptlet(struct pakfire_packager* packager, - struct archive* a, struct archive* mtree, struct pakfire_scriptlet* scriptlet) { + struct archive* a, struct pakfire_scriptlet* scriptlet) { char filename[PATH_MAX]; size_t size; int r; @@ -586,7 +445,7 @@ static int pakfire_packager_write_scriptlet(struct pakfire_packager* packager, const char* data = pakfire_scriptlet_get_data(scriptlet, &size); // Write file - return pakfire_packager_write_file_from_buffer(packager, a, mtree, filename, 0544, data); + return pakfire_packager_write_file_from_buffer(packager, a, filename, 0544, data); } /* @@ -595,8 +454,6 @@ static int pakfire_packager_write_scriptlet(struct pakfire_packager* packager, It will create a new archive and write the package to the given file descriptor. */ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) { - struct archive* mtree = NULL; - FILE* fmtree = NULL; int r = 1; // Add requires feature markers @@ -636,30 +493,6 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) { goto ERROR; } - static const char* mtree_fields[] = { - // Disable everything - "!all", - - // File type is mandatory - "type", - - // Include the file size - "size", - - // Add the checksums - "sha512", - "sha256", - - NULL, - }; - - // Create an mtree for the checksums - r = pakfire_packager_create_mtree(packager->pakfire, &mtree, &fmtree, mtree_fields); - if (r) { - ERROR(packager->pakfire, "Could not create mtree\n"); - goto ERROR; - } - // Start with the format file r = pakfire_packager_write_format(packager, a); if (r) { @@ -669,25 +502,16 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) { } // Write the metadata - r = pakfire_packager_write_metadata(packager, a, mtree); + r = pakfire_packager_write_metadata(packager, a); if (r) { ERROR(packager->pakfire, "Could not add metadata file to archive: %s\n", archive_error_string(a)); goto ERROR; } - // Write the filelist in mtree format + // Write the payload if (packager->files) { - r = pakfire_packager_write_archive(packager, a, mtree, "FILELIST", - &packager->mtree, packager->fmtree); - if (r) { - ERROR(packager->pakfire, "Could not add filelist to archive: %s\n", - archive_error_string(a)); - goto ERROR; - } - - // Write the payload - r = pakfire_packager_write_archive(packager, a, mtree, "DATA", + r = pakfire_packager_write_archive(packager, a, "DATA", &packager->payload, packager->fpayload); if (r) { ERROR(packager->pakfire, "Could not add payload to archive: %s\n", @@ -698,39 +522,19 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) { // Write scriptlets for (unsigned int i = 0; i < packager->num_scriptlets; i++) { - r = pakfire_packager_write_scriptlet(packager, a, mtree, packager->scriptlets[i]); + r = pakfire_packager_write_scriptlet(packager, a, packager->scriptlets[i]); if (r) { ERROR(packager->pakfire, "Could not add scriptlet to the archive: %m\n"); goto ERROR; } } - // Finish checksums - r = archive_write_finish_entry(mtree); - if (r) { - ERROR(packager->pakfire, "Could not finish mtree: %s\n", - archive_error_string(mtree)); - goto ERROR; - } - - // Write checksums - r = pakfire_packager_write_archive(packager, a, NULL, "CHKSUMS", &mtree, fmtree); - if (r) { - ERROR(packager->pakfire, "Could not add checksums to archive: %s\n", - archive_error_string(a)); - goto ERROR; - } - // Success r = 0; ERROR: if (a) archive_write_free(a); - if (mtree) - archive_write_free(mtree); - if (fmtree) - fclose(fmtree); return r; } @@ -881,25 +685,12 @@ int pakfire_packager_add(struct pakfire_packager* packager, goto ERROR; } - // Write to mtree - r = archive_write_header(packager->mtree, entry); - if (r) { - ERROR(packager->pakfire, "Adding file to mtree failed: %s\n", - archive_error_string(packager->mtree)); - goto ERROR; - } - // Copy the data of regular files if (archive_entry_filetype(entry) == AE_IFREG) { // Copy the payload into the archive r = pakfire_archive_copy_data_from_file(packager->pakfire, packager->payload, f); if (r) goto ERROR; - - // Copy the payload into the mtree for hashing - r = pakfire_archive_copy_data_from_file(packager->pakfire, packager->mtree, f); - if (r) - goto ERROR; } // Increment installsize