From 25da7eea535f8aae34fd36db21e5bae2dc2ba90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0abata?= Date: Thu, 15 Oct 2020 22:58:15 +0200 Subject: [PATCH] RHEL 9.0.0 Alpha bootstrap The content of this branch was automatically imported from Fedora ELN with the following as its source: https://src.fedoraproject.org/rpms/parted#0dd29ac6e146bd9e8f865e526ec393fe75aee111 --- .gitignore | 17 + ...er-move-and-msdos-overlap-to-python3.patch | 34 ++ ...s-Test-incomplete-resizepart-command.patch | 25 ++ ...Fix-end_input-usage-in-do_resizepart.patch | 34 ++ ...d-Add-ChromeOS-Kernel-partition-flag.patch | 283 ++++++++++++ ...pport-for-MSDOS-partition-type-bls_b.patch | 139 ++++++ ...dd-support-for-bls_boot-to-GPT-disks.patch | 248 +++++++++++ ...-reference-to-ped_file_system_create.patch | 29 ++ ...-Add-support-for-the-F2FS-filesystem.patch | 201 +++++++++ ...-tests-Add-f2fs-to-the-fs-probe-test.patch | 27 ++ ...resizepart-End-when-prompted-for-bus.patch | 53 +++ ...t-for-resizepart-on-a-busy-partition.patch | 85 ++++ mirrors | 1 + parted.spec | 405 ++++++++++++++++++ pubkey.brian.lane | 108 +++++ pubkey.jim.meyering | 371 ++++++++++++++++ pubkey.phillip.susi | 153 +++++++ sources | 2 + tests/.fmf/version | 1 + tests/provision.fmf | 5 + tests/simple/run_tests.sh | 29 ++ tests/tests.yml | 14 + 22 files changed, 2264 insertions(+) create mode 100644 0001-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch create mode 100644 0003-tests-Test-incomplete-resizepart-command.patch create mode 100644 0004-Fix-end_input-usage-in-do_resizepart.patch create mode 100644 0005-libparted-Add-ChromeOS-Kernel-partition-flag.patch create mode 100644 0006-libparted-Add-support-for-MSDOS-partition-type-bls_b.patch create mode 100644 0007-libparted-Add-support-for-bls_boot-to-GPT-disks.patch create mode 100644 0008-Removed-reference-to-ped_file_system_create.patch create mode 100644 0009-Add-support-for-the-F2FS-filesystem.patch create mode 100644 0010-tests-Add-f2fs-to-the-fs-probe-test.patch create mode 100644 0011-parted-Preserve-resizepart-End-when-prompted-for-bus.patch create mode 100644 0012-tests-Add-a-test-for-resizepart-on-a-busy-partition.patch create mode 100644 mirrors create mode 100644 parted.spec create mode 100644 pubkey.brian.lane create mode 100644 pubkey.jim.meyering create mode 100644 pubkey.phillip.susi create mode 100644 sources create mode 100644 tests/.fmf/version create mode 100644 tests/provision.fmf create mode 100755 tests/simple/run_tests.sh create mode 100644 tests/tests.yml diff --git a/.gitignore b/.gitignore index e69de29..e5f9ad4 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,17 @@ +parted-2.3.tar.xz +parted-2.3.tar.xz.sig +clog +/parted-2.4.tar.xz +/parted-2.4.tar.xz.sig +/parted-3.0.tar.xz +/parted-3.0.tar.xz.sig +/parted-3.1.tar.xz +/parted-3.1.tar.xz.sig +/parted-3.1.90.tar.xz +/parted-3.1.90.tar.xz.sig +/parted-3.2.tar.xz +/parted-3.2.tar.xz.sig +/parted-3.2.153.tar.xz +/parted-3.2.153.tar.xz.sig +/parted-3.3.tar.xz +/parted-3.3.tar.xz.sig diff --git a/0001-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch b/0001-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch new file mode 100644 index 0000000..90bf71a --- /dev/null +++ b/0001-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch @@ -0,0 +1,34 @@ +From 22a4baba11ab299722e68f9ea37a53869afef7e1 Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Wed, 27 Jun 2018 13:47:33 -0700 +Subject: [PATCH 1/4] Switch gpt-header-move and msdos-overlap to python3 + +python2 is EOL on January 1, 2020 so it is time to switch to python3. +--- + tests/gpt-header-move | 2 +- + tests/msdos-overlap | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/gpt-header-move b/tests/gpt-header-move +index 3dda5cb..18f58d0 100755 +--- a/tests/gpt-header-move ++++ b/tests/gpt-header-move +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + + # open img file, subtract 33 from altlba address, and move the last 33 sectors + # back by 33 sectors +diff --git a/tests/msdos-overlap b/tests/msdos-overlap +index d6ae8d6..b2b03e6 100755 +--- a/tests/msdos-overlap ++++ b/tests/msdos-overlap +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + """ + Write an overlapping partition to a msdos disk + +-- +2.23.0 + diff --git a/0003-tests-Test-incomplete-resizepart-command.patch b/0003-tests-Test-incomplete-resizepart-command.patch new file mode 100644 index 0000000..cbea90a --- /dev/null +++ b/0003-tests-Test-incomplete-resizepart-command.patch @@ -0,0 +1,25 @@ +From 679da92c54c75d7fca1fd825f1d42a750d115f2d Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Tue, 23 Apr 2019 10:25:20 -0700 +Subject: [PATCH 3/4] tests: Test incomplete resizepart command + +--- + tests/t3200-resize-partition.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tests/t3200-resize-partition.sh b/tests/t3200-resize-partition.sh +index 4565e99..06dbe68 100755 +--- a/tests/t3200-resize-partition.sh ++++ b/tests/t3200-resize-partition.sh +@@ -63,6 +63,8 @@ parted -m -s $dev u s p > out 2>&1 || fail=1 + wait_for_dev_to_appear_ ${dev}1 || { warn_ "${dev}1 did not appear" fail=1; } + sleep 1 + ++# Running it without end should not core-dump or prompt ++parted -s $dev resizepart 1 > out 2> err || fail=1 + + # extend the filesystem to end on sector 4096 + new_end=4096s +-- +2.23.0 + diff --git a/0004-Fix-end_input-usage-in-do_resizepart.patch b/0004-Fix-end_input-usage-in-do_resizepart.patch new file mode 100644 index 0000000..2d570fd --- /dev/null +++ b/0004-Fix-end_input-usage-in-do_resizepart.patch @@ -0,0 +1,34 @@ +From ca845aeeddb17343c9289816833ca352f7c0d87b Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Tue, 23 Apr 2019 13:52:25 -0700 +Subject: [PATCH 4/4] Fix end_input usage in do_resizepart + +It needs to be set to NULL, since it may not get set by the call to +command_line_get_sector +--- + parted/parted.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/parted/parted.c b/parted/parted.c +index 9dcdb05..df0c7ed 100644 +--- a/parted/parted.c ++++ b/parted/parted.c +@@ -1545,6 +1545,7 @@ do_resizepart (PedDevice** dev, PedDisk** diskp) + PedGeometry *range_end = NULL; + PedConstraint* constraint; + int rc = 0; ++ char* end_input = NULL; + + if (!disk) { + disk = ped_disk_new (*dev); +@@ -1565,7 +1566,6 @@ do_resizepart (PedDevice** dev, PedDisk** diskp) + + start = part->geom.start; + end = oldend = part->geom.end; +- char *end_input; + if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input)) + goto error; + _adjust_end_if_iec(&start, &end, range_end, end_input); +-- +2.23.0 + diff --git a/0005-libparted-Add-ChromeOS-Kernel-partition-flag.patch b/0005-libparted-Add-ChromeOS-Kernel-partition-flag.patch new file mode 100644 index 0000000..7a4605a --- /dev/null +++ b/0005-libparted-Add-ChromeOS-Kernel-partition-flag.patch @@ -0,0 +1,283 @@ +From e29dfafcf2d9a6886a66506bc84efb4badc5f6d6 Mon Sep 17 00:00:00 2001 +From: Alper Nebi Yasak +Date: Thu, 10 Oct 2019 21:03:22 +0300 +Subject: [PATCH] libparted: Add ChromeOS Kernel partition flag + +This adds a GPT-only partition type flag, chromeos_kernel, for use on +Chrome OS machines, with GUID FE3A2A5D-4F32-41A7-B725-ACCC3285A309. + +The firmware/bootloader in these machines relies on special images being +written to partitions of this type. Among multiple such partitions, it +decides which one it will boot from based on the GUID-specific partition +attributes. This patch is not intended to and does not manipulate these +bits. + +Google refers to these partitions as "ChromeOS kernel" partitions. They +also define partitions for rootfs, firmware, and a reserved one; but +these are not necessary for the boot flow and are not included here. + +Relevant ChromiumOS documentation: +https://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format + +Signed-off-by: Alper Nebi Yasak +--- + doc/C/parted.8 | 2 +- + doc/parted.texi | 4 ++++ + include/parted/disk.in.h | 5 +++-- + libparted/disk.c | 2 ++ + libparted/labels/gpt.c | 45 ++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 55 insertions(+), 3 deletions(-) + +diff --git a/doc/C/parted.8 b/doc/C/parted.8 +index 15932c2..d40279e 100644 +--- a/doc/C/parted.8 ++++ b/doc/C/parted.8 +@@ -112,7 +112,7 @@ or an LVM logical volume if necessary. + .B set \fIpartition\fP \fIflag\fP \fIstate\fP + Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP. + Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba", +-"legacy_boot", "irst", "msftres", "esp" and "palo". ++"legacy_boot", "irst", "msftres", "esp", "chromeos_kernel" and "palo". + \fIstate\fP should be either "on" or "off". + .TP + .B unit \fIunit\fP +diff --git a/doc/parted.texi b/doc/parted.texi +index 77c9628..f983d2c 100644 +--- a/doc/parted.texi ++++ b/doc/parted.texi +@@ -874,6 +874,10 @@ partition. + (MS-DOS, GPT) - this flag identifies a UEFI System Partition. On GPT + it is an alias for boot. + ++@item chromeos_kernel ++(GPT) - this flag indicates a partition that can be used with the Chrome OS ++bootloader and verified boot implementation. ++ + @item lba + (MS-DOS) - this flag can be enabled to tell MS DOS, MS Windows 9x and + MS Windows ME based operating systems to use Linear (LBA) mode. +diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h +index a3b380d..b257c27 100644 +--- a/include/parted/disk.in.h ++++ b/include/parted/disk.in.h +@@ -75,10 +75,11 @@ enum _PedPartitionFlag { + PED_PARTITION_LEGACY_BOOT=15, + PED_PARTITION_MSFT_DATA=16, + PED_PARTITION_IRST=17, +- PED_PARTITION_ESP=18 ++ PED_PARTITION_ESP=18, ++ PED_PARTITION_CHROMEOS_KERNEL=19 + }; + #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT +-#define PED_PARTITION_LAST_FLAG PED_PARTITION_ESP ++#define PED_PARTITION_LAST_FLAG PED_PARTITION_CHROMEOS_KERNEL + + enum _PedDiskTypeFeature { + PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ +diff --git a/libparted/disk.c b/libparted/disk.c +index 5aaac5a..d1f1077 100644 +--- a/libparted/disk.c ++++ b/libparted/disk.c +@@ -2407,6 +2407,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag) + return N_("irst"); + case PED_PARTITION_ESP: + return N_("esp"); ++ case PED_PARTITION_CHROMEOS_KERNEL: ++ return N_("chromeos_kernel"); + + default: + ped_exception_throw ( +diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c +index 8e9500b..b8b58cd 100644 +--- a/libparted/labels/gpt.c ++++ b/libparted/labels/gpt.c +@@ -156,6 +156,10 @@ typedef struct + ((efi_guid_t) { PED_CPU_TO_LE32 (0xD3BFE2DE), PED_CPU_TO_LE16 (0x3DAF), \ + PED_CPU_TO_LE16 (0x11DF), 0xba, 0x40, \ + { 0xE3, 0xA5, 0x56, 0xD8, 0x95, 0x93 }}) ++#define PARTITION_CHROMEOS_KERNEL_GUID \ ++ ((efi_guid_t) { PED_CPU_TO_LE32 (0xfe3a2a5d), PED_CPU_TO_LE16 (0x4f32), \ ++ PED_CPU_TO_LE16 (0x41a7), 0xb7, 0x25, \ ++ { 0xac, 0xcc, 0x32, 0x85, 0xa3, 0x09 }}) + + struct __attribute__ ((packed)) _GuidPartitionTableHeader_t + { +@@ -303,6 +307,7 @@ typedef struct _GPTPartitionData + int legacy_boot; + int prep; + int irst; ++ int chromeos_kernel; + } GPTPartitionData; + + static PedDiskType gpt_disk_type; +@@ -826,6 +831,7 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) + = gpt_part_data->legacy_boot + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0; + + if (pte->Attributes.RequiredToFunction & 0x1) +@@ -857,6 +863,8 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) + gpt_part_data->prep = 1; + else if (!guid_cmp (gpt_part_data->type, PARTITION_IRST_GUID)) + gpt_part_data->irst = 1; ++ else if (!guid_cmp (gpt_part_data->type, PARTITION_CHROMEOS_KERNEL_GUID)) ++ gpt_part_data->chromeos_kernel = 1; + + return part; + } +@@ -1377,6 +1385,7 @@ gpt_partition_new (const PedDisk *disk, + gpt_part_data->prep = 0; + gpt_part_data->translated_name = 0; + gpt_part_data->irst = 0; ++ gpt_part_data->chromeos_kernel = 0; + uuid_generate ((unsigned char *) &gpt_part_data->uuid); + swap_uuid_and_efi_guid (&gpt_part_data->uuid); + memset (gpt_part_data->name, 0, sizeof gpt_part_data->name); +@@ -1507,6 +1516,11 @@ gpt_partition_set_system (PedPartition *part, + gpt_part_data->type = PARTITION_IRST_GUID; + return 1; + } ++ if (gpt_part_data->chromeos_kernel) ++ { ++ gpt_part_data->type = PARTITION_CHROMEOS_KERNEL_GUID; ++ return 1; ++ } + + if (fs_type) + { +@@ -1653,6 +1667,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_BIOS_GRUB: +@@ -1668,6 +1683,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_RAID: +@@ -1683,6 +1699,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_LVM: +@@ -1698,6 +1715,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_SWAP: +@@ -1713,6 +1731,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_HPSERVICE: +@@ -1728,6 +1747,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_MSFT_RESERVED: +@@ -1743,6 +1763,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_MSFT_DATA: +@@ -1758,6 +1779,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + gpt_part_data->msftdata = 1; + } else { +@@ -1777,6 +1799,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftres + = gpt_part_data->prep + = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_APPLE_TV_RECOVERY: +@@ -1791,6 +1814,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftres + = gpt_part_data->msftdata + = gpt_part_data->prep ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->msftrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_PREP: +@@ -1805,6 +1829,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftres + = gpt_part_data->irst + = gpt_part_data->atvrecv ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->msftrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_IRST: +@@ -1820,8 +1845,25 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftdata + = gpt_part_data->msftrecv + = gpt_part_data->prep ++ = gpt_part_data->chromeos_kernel + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); ++ case PED_PARTITION_CHROMEOS_KERNEL: ++ gpt_part_data->chromeos_kernel = state; ++ if (state) ++ gpt_part_data->boot ++ = gpt_part_data->bios_grub ++ = gpt_part_data->raid ++ = gpt_part_data->lvm ++ = gpt_part_data->swap ++ = gpt_part_data->hp_service ++ = gpt_part_data->msftres ++ = gpt_part_data->msftdata ++ = gpt_part_data->msftrecv ++ = gpt_part_data->atvrecv ++ = gpt_part_data->prep ++ = gpt_part_data->irst = 0; ++ return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_HIDDEN: + gpt_part_data->hidden = state; + return 1; +@@ -1874,6 +1916,8 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag) + return gpt_part_data->irst; + case PED_PARTITION_SWAP: + return gpt_part_data->swap; ++ case PED_PARTITION_CHROMEOS_KERNEL: ++ return gpt_part_data->chromeos_kernel; + case PED_PARTITION_LBA: + case PED_PARTITION_ROOT: + default: +@@ -1903,6 +1947,7 @@ gpt_partition_is_flag_available (const PedPartition *part, + case PED_PARTITION_PREP: + case PED_PARTITION_IRST: + case PED_PARTITION_ESP: ++ case PED_PARTITION_CHROMEOS_KERNEL: + return 1; + case PED_PARTITION_ROOT: + case PED_PARTITION_LBA: +-- +2.24.1 + diff --git a/0006-libparted-Add-support-for-MSDOS-partition-type-bls_b.patch b/0006-libparted-Add-support-for-MSDOS-partition-type-bls_b.patch new file mode 100644 index 0000000..7bba38a --- /dev/null +++ b/0006-libparted-Add-support-for-MSDOS-partition-type-bls_b.patch @@ -0,0 +1,139 @@ +From d6056299028f60b96802487de0d1d65e51e1fd33 Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Thu, 19 Dec 2019 16:05:59 -0800 +Subject: [PATCH 6/7] libparted: Add support for MSDOS partition type bls_boot + (0xea) + +This type is used by the Boot Loader Specification to identify a +compatible /boot boot partition. +--- + doc/C/parted.8 | 2 +- + libparted/labels/dos.c | 33 ++++++++++++++++++++------------- + 2 files changed, 21 insertions(+), 14 deletions(-) + +diff --git a/doc/C/parted.8 b/doc/C/parted.8 +index d40279e..297c39a 100644 +--- a/doc/C/parted.8 ++++ b/doc/C/parted.8 +@@ -112,7 +112,7 @@ or an LVM logical volume if necessary. + .B set \fIpartition\fP \fIflag\fP \fIstate\fP + Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP. + Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba", +-"legacy_boot", "irst", "msftres", "esp", "chromeos_kernel" and "palo". ++"legacy_boot", "irst", "msftres", "esp", "chromeos_kernel", "bls_boot" and "palo". + \fIstate\fP should be either "on" or "off". + .TP + .B unit \fIunit\fP +diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c +index ed1341e..d859b33 100644 +--- a/libparted/labels/dos.c ++++ b/libparted/labels/dos.c +@@ -92,6 +92,7 @@ static const char MBR_BOOT_CODE[] = { + #define PARTITION_HFS 0xaf + #define PARTITION_SUN_UFS 0xbf + #define PARTITION_DELL_DIAG 0xde ++#define PARTITION_BLS_BOOT 0xea + #define PARTITION_GPT 0xee + #define PARTITION_ESP 0xef + #define PARTITION_PALO 0xf0 +@@ -165,6 +166,7 @@ typedef struct { + int diag; + int irst; + int esp; ++ int bls_boot; + OrigState* orig; /* used for CHS stuff */ + } DosPartitionData; + +@@ -961,6 +963,7 @@ raw_part_parse (const PedDisk* disk, const DosRawPartition* raw_part, + dos_data->prep = raw_part->type == PARTITION_PREP; + dos_data->irst = raw_part->type == PARTITION_IRST; + dos_data->esp = raw_part->type == PARTITION_ESP; ++ dos_data->bls_boot = raw_part->type == PARTITION_BLS_BOOT; + dos_data->orig = ped_malloc (sizeof (OrigState)); + if (!dos_data->orig) { + ped_partition_destroy (part); +@@ -1340,22 +1343,10 @@ msdos_partition_new (const PedDisk* disk, PedPartitionType part_type, + + if (ped_partition_is_active (part)) { + part->disk_specific +- = dos_data = ped_malloc (sizeof (DosPartitionData)); ++ = dos_data = ped_calloc (sizeof (DosPartitionData)); + if (!dos_data) + goto error_free_part; +- dos_data->orig = NULL; + dos_data->system = PARTITION_LINUX; +- dos_data->hidden = 0; +- dos_data->msftres = 0; +- dos_data->boot = 0; +- dos_data->diag = 0; +- dos_data->raid = 0; +- dos_data->lvm = 0; +- dos_data->lba = 0; +- dos_data->palo = 0; +- dos_data->prep = 0; +- dos_data->irst = 0; +- dos_data->esp = 0; + } else { + part->disk_specific = NULL; + } +@@ -1394,6 +1385,7 @@ msdos_partition_duplicate (const PedPartition* part) + new_dos_data->prep = old_dos_data->prep; + new_dos_data->irst = old_dos_data->irst; + new_dos_data->esp = old_dos_data->esp; ++ new_dos_data->bls_boot = old_dos_data->bls_boot; + + if (old_dos_data->orig) { + new_dos_data->orig = ped_malloc (sizeof (OrigState)); +@@ -1492,6 +1484,10 @@ msdos_partition_set_system (PedPartition* part, + dos_data->system = PARTITION_ESP; + return 1; + } ++ if (dos_data->bls_boot) { ++ dos_data->system = PARTITION_BLS_BOOT; ++ return 1; ++ } + + if (!fs_type) + dos_data->system = PARTITION_LINUX; +@@ -1534,6 +1530,7 @@ clear_flags (DosPartitionData *dos_data) + dos_data->irst = 0; + dos_data->esp = 0; + dos_data->raid = 0; ++ dos_data->bls_boot = 0; + } + + static int +@@ -1635,6 +1632,12 @@ msdos_partition_set_flag (PedPartition* part, + dos_data->esp = state; + return ped_partition_set_system (part, part->fs_type); + ++ case PED_PARTITION_BLS_BOOT: ++ if (state) ++ clear_flags (dos_data); ++ dos_data->bls_boot = state; ++ return ped_partition_set_system (part, part->fs_type); ++ + default: + return 0; + } +@@ -1689,6 +1692,9 @@ msdos_partition_get_flag (const PedPartition* part, PedPartitionFlag flag) + case PED_PARTITION_ESP: + return dos_data->esp; + ++ case PED_PARTITION_BLS_BOOT: ++ return dos_data->bls_boot; ++ + default: + return 0; + } +@@ -1719,6 +1725,7 @@ msdos_partition_is_flag_available (const PedPartition* part, + case PED_PARTITION_PREP: + case PED_PARTITION_IRST: + case PED_PARTITION_ESP: ++ case PED_PARTITION_BLS_BOOT: + case PED_PARTITION_DIAG: + return 1; + +-- +2.24.1 + diff --git a/0007-libparted-Add-support-for-bls_boot-to-GPT-disks.patch b/0007-libparted-Add-support-for-bls_boot-to-GPT-disks.patch new file mode 100644 index 0000000..d46742f --- /dev/null +++ b/0007-libparted-Add-support-for-bls_boot-to-GPT-disks.patch @@ -0,0 +1,248 @@ +From e5fe9328c890a266544a7ef0d272150519fdfc5d Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Fri, 20 Dec 2019 10:52:35 -0800 +Subject: [PATCH 7/7] libparted: Add support for bls_boot to GPT disks + +This sets the partition GUID to bc13c2ff-59e6-4262-a352-b275fd6f7172 to +indicate that the partition is a Boot Loader Specification compatible +/boot partition. +--- + doc/parted.texi | 4 ++++ + include/parted/disk.in.h | 5 +++-- + libparted/disk.c | 2 ++ + libparted/labels/gpt.c | 47 +++++++++++++++++++++++++++++++++++++++- + 4 files changed, 55 insertions(+), 3 deletions(-) + +diff --git a/doc/parted.texi b/doc/parted.texi +index f983d2c..213fc84 100644 +--- a/doc/parted.texi ++++ b/doc/parted.texi +@@ -844,6 +844,10 @@ GRUB BIOS partition. + (GPT) - this flag is used to tell special purpose software that the GPT + partition may be bootable. + ++@item bls_boot ++(MS-DOS, GPT) - Enable this to indicate that the selected partition is a ++Linux Boot Loader Specification compatible /boot partition. ++ + @item boot + (Mac, MS-DOS, PC98) - should be enabled if you want to boot off the + partition. The semantics vary between disk labels. For MS-DOS disk +diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h +index b257c27..fadb995 100644 +--- a/include/parted/disk.in.h ++++ b/include/parted/disk.in.h +@@ -76,10 +76,11 @@ enum _PedPartitionFlag { + PED_PARTITION_MSFT_DATA=16, + PED_PARTITION_IRST=17, + PED_PARTITION_ESP=18, +- PED_PARTITION_CHROMEOS_KERNEL=19 ++ PED_PARTITION_CHROMEOS_KERNEL=19, ++ PED_PARTITION_BLS_BOOT=20 + }; + #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT +-#define PED_PARTITION_LAST_FLAG PED_PARTITION_CHROMEOS_KERNEL ++#define PED_PARTITION_LAST_FLAG PED_PARTITION_BLS_BOOT + + enum _PedDiskTypeFeature { + PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ +diff --git a/libparted/disk.c b/libparted/disk.c +index d1f1077..099837b 100644 +--- a/libparted/disk.c ++++ b/libparted/disk.c +@@ -2409,6 +2409,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag) + return N_("esp"); + case PED_PARTITION_CHROMEOS_KERNEL: + return N_("chromeos_kernel"); ++ case PED_PARTITION_BLS_BOOT: ++ return N_("bls_boot"); + + default: + ped_exception_throw ( +diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c +index b8b58cd..93f7add 100644 +--- a/libparted/labels/gpt.c ++++ b/libparted/labels/gpt.c +@@ -160,6 +160,10 @@ typedef struct + ((efi_guid_t) { PED_CPU_TO_LE32 (0xfe3a2a5d), PED_CPU_TO_LE16 (0x4f32), \ + PED_CPU_TO_LE16 (0x41a7), 0xb7, 0x25, \ + { 0xac, 0xcc, 0x32, 0x85, 0xa3, 0x09 }}) ++#define PARTITION_BLS_BOOT_GUID \ ++ ((efi_guid_t) { PED_CPU_TO_LE32 (0xbc13c2ff), PED_CPU_TO_LE16 (0x59e6), \ ++ PED_CPU_TO_LE16 (0x4262), 0xa3, 0x52, \ ++ { 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 }}) + + struct __attribute__ ((packed)) _GuidPartitionTableHeader_t + { +@@ -308,6 +312,7 @@ typedef struct _GPTPartitionData + int prep; + int irst; + int chromeos_kernel; ++ int bls_boot; + } GPTPartitionData; + + static PedDiskType gpt_disk_type; +@@ -832,6 +837,7 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0; + + if (pte->Attributes.RequiredToFunction & 0x1) +@@ -865,6 +871,8 @@ _parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte) + gpt_part_data->irst = 1; + else if (!guid_cmp (gpt_part_data->type, PARTITION_CHROMEOS_KERNEL_GUID)) + gpt_part_data->chromeos_kernel = 1; ++ else if (!guid_cmp (gpt_part_data->type, PARTITION_BLS_BOOT_GUID)) ++ gpt_part_data->bls_boot = 1; + + return part; + } +@@ -1386,6 +1394,7 @@ gpt_partition_new (const PedDisk *disk, + gpt_part_data->translated_name = 0; + gpt_part_data->irst = 0; + gpt_part_data->chromeos_kernel = 0; ++ gpt_part_data->bls_boot = 0; + uuid_generate ((unsigned char *) &gpt_part_data->uuid); + swap_uuid_and_efi_guid (&gpt_part_data->uuid); + memset (gpt_part_data->name, 0, sizeof gpt_part_data->name); +@@ -1521,6 +1530,11 @@ gpt_partition_set_system (PedPartition *part, + gpt_part_data->type = PARTITION_CHROMEOS_KERNEL_GUID; + return 1; + } ++ if (gpt_part_data->bls_boot) ++ { ++ gpt_part_data->type = PARTITION_BLS_BOOT_GUID; ++ return 1; ++ } + + if (fs_type) + { +@@ -1668,6 +1682,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_BIOS_GRUB: +@@ -1684,6 +1699,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_RAID: +@@ -1700,6 +1716,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_LVM: +@@ -1716,6 +1733,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_SWAP: +@@ -1732,6 +1750,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_HPSERVICE: +@@ -1748,6 +1767,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_MSFT_RESERVED: +@@ -1764,6 +1784,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_MSFT_DATA: +@@ -1780,6 +1801,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->prep + = gpt_part_data->irst + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + gpt_part_data->msftdata = 1; + } else { +@@ -1830,6 +1852,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->irst + = gpt_part_data->atvrecv + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->msftrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_IRST: +@@ -1846,6 +1869,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->prep + = gpt_part_data->chromeos_kernel ++ = gpt_part_data->bls_boot + = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_CHROMEOS_KERNEL: +@@ -1862,7 +1886,25 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state) + = gpt_part_data->msftrecv + = gpt_part_data->atvrecv + = gpt_part_data->prep +- = gpt_part_data->irst = 0; ++ = gpt_part_data->irst ++ = gpt_part_data->bls_boot = 0; ++ return gpt_partition_set_system (part, part->fs_type); ++ case PED_PARTITION_BLS_BOOT: ++ gpt_part_data->bls_boot = state; ++ if (state) ++ gpt_part_data->boot ++ = gpt_part_data->raid ++ = gpt_part_data->lvm ++ = gpt_part_data->swap ++ = gpt_part_data->bios_grub ++ = gpt_part_data->hp_service ++ = gpt_part_data->msftres ++ = gpt_part_data->msftdata ++ = gpt_part_data->msftrecv ++ = gpt_part_data->prep ++ = gpt_part_data->irst ++ = gpt_part_data->chromeos_kernel ++ = gpt_part_data->atvrecv = 0; + return gpt_partition_set_system (part, part->fs_type); + case PED_PARTITION_HIDDEN: + gpt_part_data->hidden = state; +@@ -1914,6 +1956,8 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag) + return gpt_part_data->prep; + case PED_PARTITION_IRST: + return gpt_part_data->irst; ++ case PED_PARTITION_BLS_BOOT: ++ return gpt_part_data->bls_boot; + case PED_PARTITION_SWAP: + return gpt_part_data->swap; + case PED_PARTITION_CHROMEOS_KERNEL: +@@ -1948,6 +1992,7 @@ gpt_partition_is_flag_available (const PedPartition *part, + case PED_PARTITION_IRST: + case PED_PARTITION_ESP: + case PED_PARTITION_CHROMEOS_KERNEL: ++ case PED_PARTITION_BLS_BOOT: + return 1; + case PED_PARTITION_ROOT: + case PED_PARTITION_LBA: +-- +2.24.1 + diff --git a/0008-Removed-reference-to-ped_file_system_create.patch b/0008-Removed-reference-to-ped_file_system_create.patch new file mode 100644 index 0000000..5307d5a --- /dev/null +++ b/0008-Removed-reference-to-ped_file_system_create.patch @@ -0,0 +1,29 @@ +From 8c50fec522f475c51e2aaa3c972ce4c6690dda92 Mon Sep 17 00:00:00 2001 +From: Max Campbell +Date: Thu, 12 Dec 2019 16:54:29 +0100 +Subject: [PATCH 08/12] Removed reference to ped_file_system_create + +Removed a reference to the removed function ped_file_system_create in +the docs for ped_file_system_clobber. + +Signed-off-by: Brian C. Lane +--- + libparted/fs/r/filesys.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/libparted/fs/r/filesys.c b/libparted/fs/r/filesys.c +index d57447c..dd316aa 100644 +--- a/libparted/fs/r/filesys.c ++++ b/libparted/fs/r/filesys.c +@@ -213,8 +213,6 @@ error_close_dev: + * file system occupies a given region described by \p geom. + * After this operation ped_file_system_probe() won't detect any file system. + * +- * \note ped_file_system_create() calls this before creating a new file system. +- * + * \return \c 1 on success, \c 0 on failure + */ + static int +-- +2.26.2 + diff --git a/0009-Add-support-for-the-F2FS-filesystem.patch b/0009-Add-support-for-the-F2FS-filesystem.patch new file mode 100644 index 0000000..c0578fd --- /dev/null +++ b/0009-Add-support-for-the-F2FS-filesystem.patch @@ -0,0 +1,201 @@ +From c6b61814cd4cf958e12d35a36184ff7d767e57d9 Mon Sep 17 00:00:00 2001 +From: Romain Perier +Date: Fri, 20 Mar 2020 17:43:16 +0100 +Subject: [PATCH 09/12] Add support for the F2FS filesystem + +This adds a basic support for the Flash-Friendly File System. So +we can manipulate the file system by using the PedFileSystem API and we +can do basic device probing for autodetecting the current fs. + +Signed-off-by: Romain Perier +Signed-off-by: Brian C. Lane +--- + libparted/fs/Makefile.am | 2 ++ + libparted/fs/f2fs/f2fs.c | 60 ++++++++++++++++++++++++++++++++++++++++ + libparted/fs/f2fs/f2fs.h | 57 ++++++++++++++++++++++++++++++++++++++ + libparted/libparted.c | 4 +++ + 4 files changed, 123 insertions(+) + create mode 100644 libparted/fs/f2fs/f2fs.c + create mode 100644 libparted/fs/f2fs/f2fs.h + +diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am +index 74f275a..e40eee8 100644 +--- a/libparted/fs/Makefile.am ++++ b/libparted/fs/Makefile.am +@@ -32,6 +32,8 @@ libfs_la_SOURCES = \ + fat/count.h \ + fat/fat.c \ + fat/fat.h \ ++ f2fs/f2fs.c \ ++ f2fs/f2fs.h \ + hfs/hfs.c \ + hfs/hfs.h \ + hfs/probe.c \ +diff --git a/libparted/fs/f2fs/f2fs.c b/libparted/fs/f2fs/f2fs.c +new file mode 100644 +index 0000000..64883e9 +--- /dev/null ++++ b/libparted/fs/f2fs/f2fs.c +@@ -0,0 +1,60 @@ ++/* ++ libparted/fs/f2fs - Flash-Friendly File System ++ Copyright (C) 2020 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++*/ ++ ++#include ++ ++#include ++#include ++ ++#include "f2fs.h" ++ ++static PedGeometry* ++f2fs_probe (PedGeometry* geom) ++{ ++ struct f2fs_super_block *sb = alloca(geom->dev->sector_size); ++ ++ if (!ped_geometry_read (geom, sb, F2FS_SB_OFFSET, 1)) ++ return NULL; ++ ++ if (PED_LE32_TO_CPU(sb->magic) == F2FS_MAGIC) ++ return ped_geometry_new (geom->dev, geom->start, geom->length); ++ ++ return NULL; ++} ++ ++static PedFileSystemOps f2fs_ops = { ++ probe: f2fs_probe, ++}; ++ ++static PedFileSystemType f2fs_type = { ++ next: NULL, ++ ops: &f2fs_ops, ++ name: "f2fs", ++}; ++ ++void ++ped_file_system_f2fs_init () ++{ ++ ped_file_system_type_register (&f2fs_type); ++} ++ ++void ++ped_file_system_f2fs_done () ++{ ++ ped_file_system_type_unregister (&f2fs_type); ++} +diff --git a/libparted/fs/f2fs/f2fs.h b/libparted/fs/f2fs/f2fs.h +new file mode 100644 +index 0000000..c96b88f +--- /dev/null ++++ b/libparted/fs/f2fs/f2fs.h +@@ -0,0 +1,57 @@ ++/* ++ libparted/fs/f2fs - Flash-Friendly File System ++ Copyright (C) 2020 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++*/ ++#ifndef _F2FS_H ++#define _F2FS_H ++ ++#define F2FS_MAGIC 0xF2F52010 ++#define F2FS_MAX_VOLUME_NAME 512 ++#define F2FS_SB_OFFSET 0x02 ++ ++struct f2fs_super_block { ++ uint32_t magic; /* Magic Number */ ++ uint16_t major_ver; /* Major Version */ ++ uint16_t minor_ver; /* Minor Version */ ++ uint32_t log_sectorsize; /* log2 sector size in bytes */ ++ uint32_t log_sectors_per_block; /* log2 # of sectors per block */ ++ uint32_t log_blocksize; /* log2 block size in bytes */ ++ uint32_t log_blocks_per_seg; /* log2 # of blocks per segment */ ++ uint32_t segs_per_sec; /* # of segments per section */ ++ uint32_t secs_per_zone; /* # of sections per zone */ ++ uint32_t checksum_offset; /* checksum offset inside super block */ ++ uint64_t block_count; /* total # of user blocks */ ++ uint32_t section_count; /* total # of sections */ ++ uint32_t segment_count; /* total # of segments */ ++ uint32_t segment_count_ckpt; /* # of segments for checkpoint */ ++ uint32_t segment_count_sit; /* # of segments for SIT */ ++ uint32_t segment_count_nat; /* # of segments for NAT */ ++ uint32_t segment_count_ssa; /* # of segments for SSA */ ++ uint32_t segment_count_main; /* # of segments for main area */ ++ uint32_t segment0_blkaddr; /* start block address of segment 0 */ ++ uint32_t cp_blkaddr; /* start block address of checkpoint */ ++ uint32_t sit_blkaddr; /* start block address of SIT */ ++ uint32_t nat_blkaddr; /* start block address of NAT */ ++ uint32_t ssa_blkaddr; /* start block address of SSA */ ++ uint32_t main_blkaddr; /* start block address of main area */ ++ uint32_t root_ino; /* root inode number */ ++ uint32_t node_ino; /* node inode number */ ++ uint32_t meta_ino; /* meta inode number */ ++ uint8_t uuid[16]; /* 128-bit uuid for volume */ ++ uint16_t volume_name[F2FS_MAX_VOLUME_NAME]; /* volume name */ ++} __attribute__((packed)); ++ ++#endif +diff --git a/libparted/libparted.c b/libparted/libparted.c +index 00f5ff8..4a57a80 100644 +--- a/libparted/libparted.c ++++ b/libparted/libparted.c +@@ -109,6 +109,7 @@ extern void ped_file_system_linux_swap_init (void); + extern void ped_file_system_jfs_init (void); + extern void ped_file_system_hfs_init (void); + extern void ped_file_system_fat_init (void); ++extern void ped_file_system_f2fs_init (void); + extern void ped_file_system_ext2_init (void); + extern void ped_file_system_nilfs2_init (void); + extern void ped_file_system_btrfs_init (void); +@@ -126,6 +127,7 @@ init_file_system_types () + ped_file_system_jfs_init (); + ped_file_system_hfs_init (); + ped_file_system_fat_init (); ++ ped_file_system_f2fs_init (); + ped_file_system_ext2_init (); + ped_file_system_nilfs2_init (); + ped_file_system_btrfs_init (); +@@ -186,6 +188,7 @@ _init() + extern void ped_file_system_nilfs2_done (void); + extern void ped_file_system_ext2_done (void); + extern void ped_file_system_fat_done (void); ++extern void ped_file_system_f2fs_done (void); + extern void ped_file_system_hfs_done (void); + extern void ped_file_system_jfs_done (void); + extern void ped_file_system_linux_swap_done (void); +@@ -202,6 +205,7 @@ done_file_system_types () + { + ped_file_system_nilfs2_done (); + ped_file_system_ext2_done (); ++ ped_file_system_f2fs_done (); + ped_file_system_fat_done (); + ped_file_system_hfs_done (); + ped_file_system_jfs_done (); +-- +2.26.2 + diff --git a/0010-tests-Add-f2fs-to-the-fs-probe-test.patch b/0010-tests-Add-f2fs-to-the-fs-probe-test.patch new file mode 100644 index 0000000..cf376ad --- /dev/null +++ b/0010-tests-Add-f2fs-to-the-fs-probe-test.patch @@ -0,0 +1,27 @@ +From eaada0bc9e1cc8adb3a0260707d9474a3e01b835 Mon Sep 17 00:00:00 2001 +From: Romain Perier +Date: Fri, 20 Mar 2020 17:43:17 +0100 +Subject: [PATCH 10/12] tests: Add f2fs to the fs probe test + +Signed-off-by: Romain Perier +Signed-off-by: Brian C. Lane +--- + tests/t1700-probe-fs.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh +index 1fe3309..9150a37 100755 +--- a/tests/t1700-probe-fs.sh ++++ b/tests/t1700-probe-fs.sh +@@ -23,7 +23,7 @@ dev=loop-file + ss=$sector_size_ + n_sectors=$((512*1024)) + +-for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus udf; do ++for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus udf f2fs; do + + ( mkfs.$type 2>&1 | grep -i '^usage' ) > /dev/null \ + || { warn_ "$ME: no $type support"; continue; } +-- +2.26.2 + diff --git a/0011-parted-Preserve-resizepart-End-when-prompted-for-bus.patch b/0011-parted-Preserve-resizepart-End-when-prompted-for-bus.patch new file mode 100644 index 0000000..292cc69 --- /dev/null +++ b/0011-parted-Preserve-resizepart-End-when-prompted-for-bus.patch @@ -0,0 +1,53 @@ +From 691dabc930a6d544dfd8da787cddd159bab34b1e Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Mon, 31 Aug 2020 16:40:07 -0700 +Subject: [PATCH 11/12] parted: Preserve resizepart End when prompted for busy + partition + +Resizing busy partitions is allowed, but the user is prompted, which +erases the cmdline. It is annoying to have to re-end the ending location +after answering Yes. This saves the word and pushes it back onto the +cmdline after the user agrees to resize the busy partition. +--- + parted/parted.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/parted/parted.c b/parted/parted.c +index df0c7ed..dbd38d0 100644 +--- a/parted/parted.c ++++ b/parted/parted.c +@@ -1546,6 +1546,7 @@ do_resizepart (PedDevice** dev, PedDisk** diskp) + PedConstraint* constraint; + int rc = 0; + char* end_input = NULL; ++ char* end_size = NULL; + + if (!disk) { + disk = ped_disk_new (*dev); +@@ -1561,9 +1562,23 @@ do_resizepart (PedDevice** dev, PedDisk** diskp) + + if (!command_line_get_partition (_("Partition number?"), disk, &part)) + goto error; ++ ++ /* Save the optional End value if the partition is busy. */ ++ if (ped_partition_is_busy(part)) { ++ if (command_line_get_word_count()) ++ end_size = command_line_pop_word(); ++ } ++ ++ /* If the partition is busy this may clear the command_line and prompt the user */ + if (!_partition_warn_busy (part)) + goto error; + ++ /* Push the End value back onto the command_line, if it exists */ ++ if (end_size) { ++ command_line_push_word(end_size); ++ free(end_size); ++ } ++ + start = part->geom.start; + end = oldend = part->geom.end; + if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input)) +-- +2.26.2 + diff --git a/0012-tests-Add-a-test-for-resizepart-on-a-busy-partition.patch b/0012-tests-Add-a-test-for-resizepart-on-a-busy-partition.patch new file mode 100644 index 0000000..327d872 --- /dev/null +++ b/0012-tests-Add-a-test-for-resizepart-on-a-busy-partition.patch @@ -0,0 +1,85 @@ +From dfc611bd5126840d68493ad0e761511a71325af7 Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Tue, 1 Sep 2020 14:51:54 -0700 +Subject: [PATCH 12/12] tests: Add a test for resizepart on a busy partition + +This makes sure that the resizepart on a busy partition with the size on +the cmdline will work. +--- + tests/t3200-resize-partition.sh | 44 ++++++++++++++++++++++++++++++--- + 1 file changed, 40 insertions(+), 4 deletions(-) + +diff --git a/tests/t3200-resize-partition.sh b/tests/t3200-resize-partition.sh +index 06dbe68..2200977 100755 +--- a/tests/t3200-resize-partition.sh ++++ b/tests/t3200-resize-partition.sh +@@ -2,7 +2,7 @@ + # exercise the resize sub-command + # based on t3000-resize-fs.sh test + +-# Copyright (C) 2009-2011, 2019 Free Software Foundation, Inc. ++# Copyright (C) 2009-2020 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -66,8 +66,8 @@ sleep 1 + # Running it without end should not core-dump or prompt + parted -s $dev resizepart 1 > out 2> err || fail=1 + +-# extend the filesystem to end on sector 4096 +-new_end=4096s ++# extend the filesystem to end on sector 2048 ++new_end=2048s + parted -s $dev resizepart 1 $new_end > out 2> err || fail=1 + # expect no output + compare /dev/null out || fail=1 +@@ -77,9 +77,45 @@ compare /dev/null err || fail=1 + parted -m -s $dev u s p > out 2>&1 || fail=1 + + sed -n 3p out > k && mv k out || fail=1 +-printf "1:$default_start:$new_end:3073s:::$ms;\n" > exp || fail=1 ++printf "1:$default_start:$new_end:1025s:::$ms;\n" > exp || fail=1 + compare exp out || fail=1 + ++## Make sure resizing a busy partition works when user answers 'yes' ++# Format the partition and mount it for the busy check ++mkfs.ext4 "${dev}1" || skip_ mkfs.ext4 failed ++ ++# be sure to unmount upon interrupt, failure, etc. ++cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; } ++ ++mount_point=$(pwd)/mnt ++ ++mkdir $mount_point || fail=1 ++mount "${dev}1" "$mount_point" || fail=1 ++ ++# extend the filesystem to end on sector 4096 ++new_end=4096s ++echo yes | parted ---pretend-input-tty $dev resizepart 1 $new_end > out 2>&1 ++cat > exp < out ++compare exp out || fail=1 ++ ++# print partition table ++parted -m -s $dev u s p > out 2>&1 || fail=1 ++ ++sed -n 3p out > k && mv k out || fail=1 ++printf "1:$default_start:$new_end:3073s:ext2::$ms;\n" > exp || fail=1 ++compare exp out || fail=1 ++ ++umount "${dev}1" || fail=1 ++ + # Remove the partition explicitly, so that mklabel doesn't evoke a warning. + parted -s $dev rm 1 || fail=1 + +-- +2.26.2 + diff --git a/mirrors b/mirrors new file mode 100644 index 0000000..319b383 --- /dev/null +++ b/mirrors @@ -0,0 +1 @@ +ftp://ftp.gnu.org/gnu/parted/ diff --git a/parted.spec b/parted.spec new file mode 100644 index 0000000..13c77b5 --- /dev/null +++ b/parted.spec @@ -0,0 +1,405 @@ +%define _sbindir /sbin +%define _libdir /%{_lib} + +Summary: The GNU disk partition manipulation program +Name: parted +Version: 3.3 +Release: 6%{?dist} +License: GPLv3+ +URL: http://www.gnu.org/software/parted + +Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz +Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig +Source2: pubkey.phillip.susi +Source3: pubkey.brian.lane + +# Upstream patches since v3.3 release +Patch0001: 0001-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch +Patch0002: 0003-tests-Test-incomplete-resizepart-command.patch +Patch0003: 0004-Fix-end_input-usage-in-do_resizepart.patch +Patch0004: 0005-libparted-Add-ChromeOS-Kernel-partition-flag.patch +Patch0005: 0006-libparted-Add-support-for-MSDOS-partition-type-bls_b.patch +Patch0006: 0007-libparted-Add-support-for-bls_boot-to-GPT-disks.patch +Patch0007: 0008-Removed-reference-to-ped_file_system_create.patch +Patch0008: 0009-Add-support-for-the-F2FS-filesystem.patch +Patch0009: 0010-tests-Add-f2fs-to-the-fs-probe-test.patch +Patch0010: 0011-parted-Preserve-resizepart-End-when-prompted-for-bus.patch +Patch0011: 0012-tests-Add-a-test-for-resizepart-on-a-busy-partition.patch + +BuildRequires: gcc +BuildRequires: e2fsprogs-devel +BuildRequires: readline-devel +BuildRequires: ncurses-devel +BuildRequires: gettext-devel +BuildRequires: texinfo +BuildRequires: device-mapper-devel +BuildRequires: libselinux-devel +BuildRequires: libuuid-devel +BuildRequires: libblkid-devel >= 2.17 +BuildRequires: gnupg2 +BuildRequires: git +BuildRequires: autoconf automake +BuildRequires: e2fsprogs +BuildRequires: xfsprogs +BuildRequires: dosfstools +BuildRequires: perl-Digest-CRC +BuildRequires: bc +Buildrequires: python3 +BuildRequires: gperf +BuildRequires: make + +# bundled gnulib library exception, as per packaging guidelines +# https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries +Provides: bundled(gnulib) + +%description +The GNU Parted program allows you to create, destroy, resize, move, +and copy hard disk partitions. Parted can be used for creating space +for new operating systems, reorganizing disk usage, and copying data +to new hard disks. + + +%package devel +Summary: Files for developing apps which will manipulate disk partitions +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig + +%description devel +The GNU Parted library is a set of routines for hard disk partition +manipulation. If you want to develop programs that manipulate disk +partitions and filesystems using the routines provided by the GNU +Parted library, you need to install this package. + + +%prep +%autosetup -S git_am +gpg2 --import %{SOURCE2} %{SOURCE3} +gpg2 --verify %{SOURCE1} %{SOURCE0} +iconv -f ISO-8859-1 -t UTF8 AUTHORS > tmp; touch -r AUTHORS tmp; mv tmp AUTHORS + +%build +autoreconf +autoconf +CFLAGS="$RPM_OPT_FLAGS -Wno-unused-but-set-variable"; export CFLAGS +%configure --enable-selinux --disable-static --disable-gcc-warnings +# Don't use rpath! +%{__sed} -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool +%{__sed} -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool +%make_build + + +%install +%{__rm} -rf %{buildroot} +%make_install + +# Remove components we do not ship +%{__rm} -rf %{buildroot}%{_libdir}/*.la +%{__rm} -rf %{buildroot}%{_infodir}/dir +%{__rm} -rf %{buildroot}%{_bindir}/label +%{__rm} -rf %{buildroot}%{_bindir}/disk + +%find_lang %{name} + + +%check +export LD_LIBRARY_PATH=$(pwd)/libparted/.libs:$(pwd)/libparted/fs/.libs +make check + +%files -f %{name}.lang +%doc AUTHORS NEWS README THANKS +%{!?_licensedir:%global license %%doc} +%license COPYING +%{_sbindir}/parted +%{_sbindir}/partprobe +%{_mandir}/man8/parted.8.gz +%{_mandir}/man8/partprobe.8.gz +%{_libdir}/libparted.so.2 +%{_libdir}/libparted.so.2.0.2 +%{_libdir}/libparted-fs-resize.so.0 +%{_libdir}/libparted-fs-resize.so.0.0.2 +%{_infodir}/parted.info.* + +%files devel +%doc TODO doc/API doc/FAT +%{_includedir}/parted +%{_libdir}/libparted.so +%{_libdir}/libparted-fs-resize.so +%{_libdir}/pkgconfig/libparted.pc +%{_libdir}/pkgconfig/libparted-fs-resize.pc + + +%changelog +* Fri Sep 25 2020 Brian C. Lane - 3.3-6 +- tests: Add a test for resizepart on a busy partition (bcl) +- parted: Preserve resizepart End when prompted for busy partition (bcl) +- tests: Add f2fs to the fs probe test (romain.perier) +- Add support for the F2FS filesystem (romain.perier) +- Removed reference to ped_file_system_create (max) + +* Tue Jul 28 2020 Fedora Release Engineering - 3.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 14 2020 Tom Stellard - 3.3-4 +- Use make macros + https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro +- Switch to using %%autosetup instead of %%setup and git (bcl) +- Update tests.yml to install git and simplify source usage (bgoncalv) + +* Fri Mar 06 2020 Brian C. Lane - 3.3-3 +- Add chromeos_kernel partition flag for gpt disklabels +- Add bls_boot partition flag for msdos and gpt disklabels + +* Wed Jan 29 2020 Fedora Release Engineering - 3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Dec 16 2019 Brian C. Lane - 3.3-2 +- tests: Test incomplete resizepart command +- Fix end_input usage in do_resizepart + Resolves: rhbz#1701411 + +* Fri Oct 11 2019 Brian C. Lane - 3.3-1 +- New upstream release v3.3 + Includes the DASD virtio-blk fix. +- Dropping pre-3.2 changelog entries + +* Wed Oct 02 2019 Brian C. Lane - 3.2.153-2 +- libparted/s390: Re-enabled virtio-attached DASD heuristics + Fixes DASD backed virtblk devices + +* Mon Aug 12 2019 Brian C. Lane - 3.2.153-1 +- New upstream ALPHA release v3.2.153 +- Includes all patches except the python2 -> python3 change for test helpers + +* Fri Jul 26 2019 Fedora Release Engineering - 3.2-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Apr 24 2019 Björn Esser - 3.2-42 +- Remove hardcoded gzip suffix from GNU info pages + +* Tue Apr 09 2019 Brian C. Lane - 3.2-41 +- Add fix and tests for nilfs2 sigsegv + +* Fri Mar 01 2019 Brian C. Lane - 3.2-40 +- Run the CI tests using rpmbuild +- t6000-dm: Stop using private lvm root + +* Sun Feb 17 2019 Igor Gnatenko - 3.2-39 +- Rebuild for readline 8.0 + +* Thu Jan 31 2019 Brian C. Lane - 3.2-38 +- Add missing patches from Wang Dong +- fix crash due to improper partition number (dongdwdw) +- fix wrong error label jump in mkpart (dongdwdw) +- clean the disk information when commands fail (dongdwdw) +- Remove PED_ASSERT from ped_partition_set_name (bcl) +- Added support for Windows recovery partition (Hans-Joachim.Baader) + +* Tue Oct 16 2018 Brian C. Lane - 3.2-37 +- Read NVMe model names from sysfs (dann.frazier) +- Fix warnings from GCC 7's -Wimplicit-fallthrough (dann.frazier) +- ped_unit_get_name: Resolve conflicting attributes 'const' and 'pure' (dann.frazier) +- Add udf to t1700-probe-fs and to the manpage (bcl) +- libparted: Add support for MBR id, GPT GUID and detection of UDF filesystem (pali.rohar) +- Fix potential command line buffer overflow (xu.simon) +- t6100-mdraid-partitions: Use v0.90 metadata for the test (bcl) +- parted.c: Make sure dev_name is freed (bcl) +- parted.c: Always free peek_word (bcl) +- Fix the length of several strncpy calls (bcl) + +* Thu Jul 19 2018 Brian C. Lane - 3.2-36 +- drop ldconfig, it no longer needs to be called on un/install (bcl) +- Fix msdos-overlap py3 conversion (bcl) + +* Fri Jul 13 2018 Fedora Release Engineering - 3.2-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jun 27 2018 Brian C. Lane - 3.2-34 +- Use python3 in buildroot +- Add make to BuildRequires +- Switch gpt-header-move and msdos-overlap to python3 (bcl) +- Modify gpt-header-move and msdos-overlap to work with py2 or py3 (bcl) +- Fix atari label false positives (psusi) +- Lift 512 byte restriction on fat resize (psusi) +- build: Remove unused traces of dynamic loading (cjwatson) +- Fix resizepart iec unit end sector (psusi) +- mkpart: Allow negative start value when FS-TYPE is not given (mail) +- Fix set and disk_set to not crash when no flags are supported (psusi) +- tests: fix t6100-mdraid-partitions (psusi) +- Fix make check (psusi) +- linux: Include for major() macro. (rjones) + +* Thu Jun 07 2018 Brian C. Lane - 3.2-33 +- Use gpg2 for signature checking + +* Sat Mar 24 2018 Richard W.M. Jones - 3.2-32 +- Fix for missing major/minor() macros in glibc 2.27. + +* Mon Feb 19 2018 Brian C. Lane - 3.2-31 +- Add gcc BuildRequires for future minimal buildroot support +- Remove %%clean section + +* Thu Feb 08 2018 Fedora Release Engineering - 3.2-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Dec 19 2017 Brian C. Lane - 3.2-29 +- Add support for NVDIMM devices (sparschauer) +- libparted/labels: link with libiconv if needed (arnout) + +* Mon Jul 31 2017 Brian C. Lane - 3.2-28 +- atari.c: Drop xlocale.h + Resloves: rhbz#1476934 + +* Thu Jul 27 2017 Fedora Release Engineering - 3.2-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jun 06 2017 Brian C. Lane - 3.2-26 +- libparted: Fix udev cookie leak in _dm_resize_partition (bcl) + Resolves: rhbz#1455564 + +* Mon May 01 2017 Brian C. Lane - 3.2-25 ++ Updating to upstream patches +- tests/t1701-rescue-fs wait for the device to appear. (bcl) +- Increase timeout for rmmod scsi_debug and make it a framework failure (bcl) +- libparted/dasd: add test cases for the new fdasd functions (dongdwdw) +- libparted/dasd: add an exception for changing DASD-LDL partition table + (dongdwdw) +- libpartd/dasd: improve flag processing for DASD-LDL (dongdwdw) +- parted/ui: remove unneccesary information of command line (dongdwdw) +- parted: check the name of partition first when to name a partition (dongdwdw) +- Add support for RAM drives (sparschauer) +- Fix crash when localized (psusi) +- libparted: Fix typo in hfs error message (sebras) +- libparted: Fix MacOS boot support (laurent) +- mac: copy partition type and name correctly (saproj) +- libparted: Add support for atari partition tables (glaubitz) +- libparted:tests: Move get_sector_size() to common.c (glaubitz) +- tests: Update t0220 and t0280 for the swap flag. (bcl) +- libparted: set swap flag on GPT partitions (aschnell) +- libparted/dasd: add test cases for the new fdasd functions (dongdwdw) +- libparted/dasd: add new fdasd functions (dongdwdw) +- libparted/dasd: update and improve fdasd functions (dongdwdw) +- libparted/dasd: unify vtoc handling for cdl/ldl (dongdwdw) +- libparted: Don't warn if no HDIO_GET_IDENTITY ioctl (sparschauer) +- libparted: Fix starting CHS in protective MBR (petr.uzel) +- tests: Stop timing t9040 (#1172675) (bcl) + +* Sat Feb 11 2017 Fedora Release Engineering - 3.2-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Igor Gnatenko - 3.2-23 +- Rebuild for readline 7.x + +* Tue Oct 04 2016 Brian C. Lane - 3.2-22 +- tests: t3310-flags.sh: skip pc98 when sector size != 512 (bcl) +- tests: Set optimal blocks to 64 for scsi_debug devices (bcl) +- tests: t3310-flags.sh: Add tests for remaining table types (mike.fleetwood) +- tests: t3310-flags.sh: Add test for dvh table flags (mike.fleetwood) +- tests: t3310-flags.sh: Add test for mac table flags (mike.fleetwood) +- libparted: Remove commented local variable from bsd_partition_set_flag() + (mike.fleetwood) +- libparted: Fix to report success when setting lvm flag on bsd table + (mike.fleetwood) +- tests: t3310-flags.sh: Add test for bsd table flags (mike.fleetwood) +- tests: t3310-flags.sh: Stop excluding certain flags from being tested + (mike.fleetwood) +- tests: t3310-flags.sh: Query libparted for all flags to be tested + (mike.fleetwood) +- libparted: only IEC units are treated as exact (petr.uzel) +- docs: Improve partition description in parted.texi (gareth.randall) +- Add support for NVMe devices (petr.uzel) +- libparted/dasd: correct the offset where the first partition begins + (dongdwdw) + +* Wed Jun 15 2016 Brian C. Lane - 3.2-21 +- Cleanup mkpart manpage entry (#1183077) +- doc: Add information about quoting + +* Thu May 26 2016 Brian C. Lane - 3.2-20 +- libparted: Fix probing AIX disks on other arches +- partprobe: Open the device once for probing + +* Tue Apr 12 2016 Brian C. Lane 3.2-19 +- libparted: Remove fdasd geometry code from alloc_metadata (#1244833) (bcl) +- parted: Display details of partition alignment failure (#726856) (bcl) +- docs: Add list of filesystems for fs-type (#1311596) (bcl) +- Use disk geometry as basis for ext2 sector sizes. (Steven.Lang) +- parted: fix the rescue command (psusi) + +* Tue Mar 29 2016 Brian C. Lane 3.2-18 +- Use BLKSSZGET to get device sector size in _device_probe_geometry() + +* Mon Mar 07 2016 Brian C. Lane 3.2-17 +- lib-fs-resize: Prevent crash resizing FAT with very deep directories +- Add libparted/fs/.libs/ to LD_LIBRARY_PATH during make check + +* Mon Feb 29 2016 Brian C. Lane 3.2-16 +- Cleanup library path usage in specfile + pkgconfig wasn't finding libparted.pc because it was under /usr/lib64/ +- Explicitly reference the library files instead of use wildcards. +- Move libparted-fs-resize.so to the -devel package where it belongs. +- Add a pkgconfig file for the filesystem resize library +- tests: Add udevadm settle to wait_for_ loop +- tests: Add wait to t9042 +- tests: Fix t1700 failing on a host with a 4k xfs file + +* Tue Feb 09 2016 Brian C. Lane 3.2-15 +- fdasd.c Safeguard against geometry misprobing.patch (#1305931) + +* Thu Feb 04 2016 Fedora Release Engineering - 3.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Oct 29 2015 Brian C. Lane 3.2-13 +- parted: fix build error on s390 + +* Tue Oct 27 2015 Brian C. Lane 3.2-12 +- dasd: enhance device probing +- fdasd: geometry handling updated from upstream s390-tools + +* Fri Aug 07 2015 Brian C. Lane 3.2-11 +- tests: Fix patch 0012 test for extended partition length +- UI: Avoid memory leaks +- libparted: Fix memory leaks.patch +- libparted: Fix possible memory leaks.patch +- libparted: Stop converting . in-sys-path-to / +- libparted: Use read-only when probing devices on linux +- tests: Use wait_for_dev_to_ functions + +* Mon Jul 13 2015 Brian C. Lane 3.2-10 +- parted: Fix crash with name command and no disklabel (#1226067) + +* Thu Jun 18 2015 Fedora Release Engineering - 3.2-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Brian C. Lane 3.2-8 +- tests: Make sure the extended partition length is 2 (#1135493) +- libparted: BLKPG_RESIZE_PARTITION uses bytes not sectors (#1135493) + +* Tue Apr 28 2015 Brian C. Lane 3.2-7 +- Add python2 as a BuildRequires, used in some of the tests + +* Tue Apr 28 2015 Brian C. Lane 3.2-6 +- Update manpage NAME so whatis will work (bcl) +- libparted: device mapper uses 512b sectors (bcl) +- tests: Add a test for device-mapper partition sizes (bcl) +- parted: don't crash in disk_set when disk label not found (psusi) + +* Fri Nov 07 2014 Brian C. Lane 3.2-5 +- tests: Change minimum size to 256MiB for t1700-probe-fs + +* Fri Oct 31 2014 Brian C. Lane 3.2-4 +- Update to current master commit ac74b83 to fix fat16 resize (#1159083) +- tests: t3000-resize-fs.sh: Add requirement on mkfs.vfat (mike.fleetwood) +- tests: t3000-resize-fs.sh: Add FAT16 resizing test (mike.fleetwood) +- lib-fs-resize: Prevent crash resizing FAT16 file systems (mike.fleetwood) +- libparted: also link to UUID_LIBS (heirecka) + +* Sun Aug 17 2014 Fedora Release Engineering - 3.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Aug 13 2014 Brian C. Lane 3.2-2 +- Use a better patch to find the UTF8 locale for t0251 + +* Wed Jul 30 2014 Brian C. Lane 3.2-1 +- Rebase on upstream stable release v3.2 +- Drop upstream patches. +- Patch t0251 to use en_US.UTF-8 if possible. Fedora doesn't have C.UTF-8 diff --git a/pubkey.brian.lane b/pubkey.brian.lane new file mode 100644 index 0000000..04ef38a --- /dev/null +++ b/pubkey.brian.lane @@ -0,0 +1,108 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +MupQVzWmw8NNbNuPfGmsE/s= +=a7qH +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pubkey.jim.meyering b/pubkey.jim.meyering new file mode 100644 index 0000000..c23169b --- /dev/null +++ b/pubkey.jim.meyering @@ -0,0 +1,371 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.11 (GNU/Linux) + +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 +TsT5hoBVIBulDJ13iotYt5qIhAlhASJs +=Nb2k +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pubkey.phillip.susi b/pubkey.phillip.susi new file mode 100644 index 0000000..3e02657 --- /dev/null +++ b/pubkey.phillip.susi @@ -0,0 +1,153 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +J06Mmq/4oTsyCpbhLO1MtYvb45vm0/qStw== +=/VGh +-----END PGP PUBLIC KEY BLOCK----- diff --git a/sources b/sources new file mode 100644 index 0000000..ed18e98 --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (parted-3.3.tar.xz) = d1384694a491aa53bab6206fdeccd1d192de2ed379fe25aa865dd6aa06ed945a728e85b2ccc2fb23f5aa9dfee4a8bd8f0f2be1dd386cb8e8861b73382c6a07e4 +SHA512 (parted-3.3.tar.xz.sig) = b96f048b92e4056ca327635b3b6c00c86e9213be1af4d42ddc1dace91fe44bf40f2d99052ef04509ef8097fea69eca758bcb0de37ef7afc6a1c0d982c2aac5bd diff --git a/tests/.fmf/version b/tests/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/tests/provision.fmf b/tests/provision.fmf new file mode 100644 index 0000000..dd69f34 --- /dev/null +++ b/tests/provision.fmf @@ -0,0 +1,5 @@ +--- + +standard-inventory-qcow2: + qemu: + m: 4G diff --git a/tests/simple/run_tests.sh b/tests/simple/run_tests.sh new file mode 100755 index 0000000..9d40419 --- /dev/null +++ b/tests/simple/run_tests.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -eux + +: ${1?"Usage: $0 TESTSDIR"} + +TESTSDIR="$1" +SOURCEDIR="${TESTSDIR}/source/" +PACKAGE=parted + +cd "${TESTSDIR}" +if [ ! -e ${PACKAGE}.spec ]; then + echo "Missing ${PACKAGE}.spec" + pwd + ls + exit 1 +fi + +# This runs from the ./tests/ directory +# Install the dependencies from the spec which MUST be copied over by tests.yml +dnf -y build-dep ${PACKAGE}.spec + +# Flattened sources from standard-role-sources +cd "${SOURCEDIR}" || exit + +# Rebuild the package in place, also runs the %check +# skip %prep, it was already run on the source before it was copied over +rpmbuild --noprep --nodeps -bb --build-in-place "${TESTSDIR}/${PACKAGE}.spec" +RET=$? +exit ${RET} diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..5fde476 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,14 @@ +--- +- hosts: localhost + tags: + - classic + roles: + - role: standard-test-source + required_packages: + - dnf + - rpm-build + - git + - role: standard-test-basic + tests: + - simple: + run: "./run_tests.sh {{ tenv_workdir }}"