]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
installer: Write fstab
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 27 Jul 2014 17:12:12 +0000 (19:12 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 27 Jul 2014 17:12:12 +0000 (19:12 +0200)
src/install+setup/install/hw.c
src/install+setup/install/hw.h
src/install+setup/install/main.c

index e19632c97931f28b3a91998945d327baf206e8e4..3e74e872c6800140d91f20b3784f8da0796475a9 100644 (file)
@@ -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;
+}
index a891a831a9a852703d8c016f9a1a3faacb447e9a..ddaceb6ef625cc9262140935cff4c895d2f4e1d6 100644 (file)
@@ -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 */
index 9fe59bb022d3d9f9de6cba85fd852a4624a7a6e0..b540d7142afffada978e7d1a42767a47a551fc21 100644 (file)
@@ -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]);