From 7f69d8a417e506593def3c1cf9781a440c3163bc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 19:12:12 +0200 Subject: [PATCH] installer: Write fstab --- src/install+setup/install/hw.c | 69 ++++++++++++++++++++++++++++++++ src/install+setup/install/hw.h | 1 + src/install+setup/install/main.c | 21 ++++------ 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index e19632c979..3e74e872c6 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -843,3 +843,72 @@ int hw_install_bootloader(struct hw_destination* dest) { return r; } + +static char* hw_get_uuid(const char* dev) { + blkid_probe p = blkid_new_probe_from_filename(dev); + const char* buffer = NULL; + char* uuid = NULL; + + if (!p) + return NULL; + + blkid_do_probe(p); + blkid_probe_lookup_value(p, "UUID", &buffer, NULL); + + if (buffer) + uuid = strdup(buffer); + + blkid_free_probe(p); + + return uuid; +} + +int hw_write_fstab(struct hw_destination* dest) { + FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/fstab", "w"); + if (!f) + return -1; + + const char* fmt = "UUID=%s %-8s %-4s %-10s %d %d\n"; + char* uuid = NULL; + + // boot + if (*dest->part_boot) { + uuid = hw_get_uuid(dest->part_boot); + + if (uuid) { + fprintf(f, fmt, uuid, "/boot", "auto", "defaults", 1, 2); + free(uuid); + } + } + + // swap + if (*dest->part_swap) { + uuid = hw_get_uuid(dest->part_swap); + + if (uuid) { + fprintf(f, fmt, uuid, "swap", "swap", "defaults,pri=1", 0, 0); + free(uuid); + } + } + + // root + uuid = hw_get_uuid(dest->part_root); + if (uuid) { + fprintf(f, fmt, uuid, "/", "auto", "defaults", 1, 1); + free(uuid); + } + + // data + if (*dest->part_data) { + uuid = hw_get_uuid(dest->part_data); + + if (uuid) { + fprintf(f, fmt, uuid, "/var", "auto", "defaults", 1, 1); + free(uuid); + } + } + + fclose(f); + + return 0; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index a891a831a9..ddaceb6ef6 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -120,5 +120,6 @@ int hw_setup_raid(struct hw_destination* dest); int hw_stop_all_raid_arrays(); int hw_install_bootloader(struct hw_destination* dest); +int hw_write_fstab(struct hw_destination* dest); #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 9fe59bb022..b540d7142a 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -508,7 +508,14 @@ int main(int argc, char *argv[]) { errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]); goto EXIT; } - + + // Write fstab + rc = hw_write_fstab(destination); + if (rc) { + fprintf(flog, "Could not write /etc/fstab\n"); + goto EXIT; + } + /* Save language und local settings */ write_lang_configs(shortlangname); @@ -520,18 +527,6 @@ int main(int argc, char *argv[]) { goto EXIT; } - /* Update /etc/fstab */ - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE1#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_boot); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE2#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_swap); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE3#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_root); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); - system(commandstring); - - system("/bin/sed -e 's#/harddisk#/#g' -e 's#//#/#g' < /proc/mounts > /harddisk/etc/mtab"); - // Installing bootloader... statuswindow(60, 4, title, ctr[TR_INSTALLING_GRUB]); -- 2.39.2