]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
packager: Drop support for mtrees
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 21 Aug 2022 12:51:21 +0000 (12:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 21 Aug 2022 12:51:21 +0000 (12:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/packager.c

index 76c12feca5aa6210dd3a72432d6239fbbefa6439..ceaade3670acd3a4922d01aa070ebf1d88d52f52 100644 (file)
@@ -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