[PATCHv2,02/12] installer: Allow to install IPFire on BTRFS

Message ID 20240323105629.371511-2-stefan.schantl@ipfire.org
State Staged
Commit 130815d3f1fb181fd8cbe5a02d6a96f784f34022
Headers
Series [PATCHv2,01/12] btrfs-progs: New package |

Commit Message

Stefan Schantl March 23, 2024, 10:56 a.m. UTC
  Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
 src/installer/dracut-module/module-setup.sh | 4 ++--
 src/installer/hw.c                          | 8 ++++++++
 src/installer/hw.h                          | 1 +
 src/installer/main.c                        | 1 +
 4 files changed, 12 insertions(+), 2 deletions(-)
  

Patch

diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh
index 26a257cf8..09564f885 100755
--- a/src/installer/dracut-module/module-setup.sh
+++ b/src/installer/dracut-module/module-setup.sh
@@ -30,8 +30,8 @@  install() {
     instmods virtio_net hv_netvsc vmxnet3
 
     # Filesystem support
-    inst_multiple parted mkswap mke2fs mkfs.xfs mkfs.vfat
-    instmods ext4 iso9660 vfat xfs ntfs3
+    inst_multiple parted mkswap mke2fs mkfs.xfs mkfs.vfat mkfs.btrfs
+    instmods ext4 iso9660 vfat xfs ntfs3 btrfs
 
     # Extraction
     inst_multiple tar gzip zstd
diff --git a/src/installer/hw.c b/src/installer/hw.c
index 894b887d9..4d214c152 100644
--- a/src/installer/hw.c
+++ b/src/installer/hw.c
@@ -822,6 +822,10 @@  static int hw_format_filesystem(const char* path, int fs, const char* output) {
 	} else if (fs == HW_FS_XFS) {
 		snprintf(cmd, sizeof(cmd), "/sbin/mkfs.xfs -f %s", path);
 
+	// BTRFS
+	} else if (fs == HW_FS_BTRFS) {
+		snprintf(cmd, sizeof(cmd), "/usr/bin/mkfs.btrfs -f %s", path);
+
 	// FAT32
 	} else if (fs == HW_FS_FAT32) {
 		snprintf(cmd, sizeof(cmd), "/sbin/mkfs.vfat %s", path);
@@ -882,6 +886,10 @@  int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) {
 			filesystem = "xfs";
 			break;
 
+		case HW_FS_BTRFS:
+			filesystem = "btrfs";
+			break;
+
 		case HW_FS_FAT32:
 			filesystem = "vfat";
 			break;
diff --git a/src/installer/hw.h b/src/installer/hw.h
index 6a7f23aa7..e5ee65a6d 100644
--- a/src/installer/hw.h
+++ b/src/installer/hw.h
@@ -46,6 +46,7 @@ 
 #define HW_FS_EXT4_WO_JOURNAL         2
 #define HW_FS_XFS                     3
 #define HW_FS_FAT32                   4
+#define HW_FS_BTRFS                   5
 
 #define HW_FS_DEFAULT                 HW_FS_EXT4
 
diff --git a/src/installer/main.c b/src/installer/main.c
index cddb0d91a..47daccdaa 100644
--- a/src/installer/main.c
+++ b/src/installer/main.c
@@ -720,6 +720,7 @@  int main(int argc, char *argv[]) {
 			{ HW_FS_EXT4,            _("ext4 Filesystem") },
 			{ HW_FS_EXT4_WO_JOURNAL, _("ext4 Filesystem without journal") },
 			{ HW_FS_XFS,             _("XFS Filesystem") },
+			{ HW_FS_BTRFS,           _("BTRFS Filesystem (EXPERIMENTAL)") },
 			{ 0, NULL },
 		};
 		unsigned int num_filesystems = sizeof(filesystems) / sizeof(*filesystems);