]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/install+setup/install/main.c
glibc: fix image, updater and filecount in installer.
[people/teissler/ipfire-2.x.git] / src / install+setup / install / main.c
index daa1c3f26f2aa92787b390464895b234eb257923..b503c8bb1747f38706517a4043255457811c85b0 100644 (file)
@@ -12,8 +12,9 @@
 #include "install.h"
 #define _GNU_SOURCE
  
-#define INST_FILECOUNT 10700
+#define INST_FILECOUNT 21000
 #define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
+#define LICENSE_FILE   "/cdrom/COPYING"
 
 #define EXT2 0
 #define EXT3 1
@@ -34,19 +35,22 @@ extern char *en_tr[];
 extern char *es_tr[];
 extern char *de_tr[];
 extern char *fr_tr[];
+extern char *nl_tr[];
 extern char *pl_tr[];
 extern char *ru_tr[];
+extern char *tr_tr[];
 
 int main(int argc, char *argv[])
 {
 
        char discl_msg[40000] = "Disclaimer\n";
 
-       char *langnames[] = { "Deutsch", "English", "Français", "Español", "Polski", "Русский", NULL };
-       char *shortlangnames[] = { "de", "en", "fr", "es", "pl", "ru", NULL };
-       char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, pl_tr, ru_tr, NULL };
+       char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL };
+       char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL };
+       char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL };
        char hdletter;
        char harddrive[30], sourcedrive[5];     /* Device holder. */
+       char harddrive_info[STRING_SIZE];       /* Additional infos about target */
        struct devparams hdparams, cdromparams; /* Params for CDROM and HD */
        int rc = 0;
        char commandstring[STRING_SIZE];
@@ -56,7 +60,6 @@ int main(int argc, char *argv[])
        int choice;
        int i;
        int found = 0;
-       int firstrun = 0;
        char shortlangname[10];
        char message[1000];
        char title[STRING_SIZE];
@@ -120,19 +123,9 @@ int main(int argc, char *argv[])
                }
        }
 
-       // Read gpl ...
-       if (! (copying = fopen("/COPYING", "r")))
-       {
-               fprintf(flog,      "Couldn't open gpl (/COPYING)\n");
-               sprintf(discl_msg, "Couldn't open gpl (/COPYING)\n");
-       } else {
-               fread(discl_msg, 1, 40000, copying);
-               fclose(copying);
-       }
-
        // Load common modules
        mysystem("/sbin/modprobe iso9660"); // CDROM
-       mysystem("/sbin/modprobe ext2"); // Boot patition
+//     mysystem("/sbin/modprobe ext2"); // Boot patition
        mysystem("/sbin/modprobe vfat"); // USB key
        
        /* German is the default */
@@ -157,11 +150,6 @@ int main(int argc, char *argv[])
        if (!unattended) {
                sprintf(message, ctr[TR_WELCOME], NAME);
                newtWinMessage(title, ctr[TR_OK], message);
-
-               if (disclaimerbox(discl_msg)==0) {
-                       errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]);
-                       goto EXIT;
-               }
        }
 
        mysystem("/bin/mountsource.sh");
@@ -178,7 +166,23 @@ int main(int argc, char *argv[])
        fgets(sourcedrive, 5, handle);
        fprintf(flog, "Source drive: %s\n", sourcedrive);
        fclose(handle);
-       
+
+       if (!unattended) {
+               // Read the license file.
+               if (!(copying = fopen(LICENSE_FILE, "r"))) {
+                       sprintf(discl_msg, "Could not open license file: %s\n", LICENSE_FILE);
+                       fprintf(flog, discl_msg);
+               } else {
+                       fread(discl_msg, 1, 40000, copying);
+                       fclose(copying);
+
+                       if (disclaimerbox(discl_msg)==0) {
+                               errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]);
+                               goto EXIT;
+                       }
+               }
+       }
+
        i = 0;
        while (found == 0) {
                i++;
@@ -201,13 +205,8 @@ int main(int argc, char *argv[])
                                found = 1;
                                break;
                        case 10: // No harddisk found
-                               if (firstrun == 1) {
-                                       errorbox(ctr[TR_NO_HARDDISK]);
-                                       goto EXIT;
-                               }
-                               // Do this if the kudzu-scan fails...
-                               runcommandwithstatus("/bin/probehw.sh deep-scan", ctr[TR_PROBING_HARDWARE]);
-                               firstrun = 1;
+                               errorbox(ctr[TR_NO_HARDDISK]);
+                               goto EXIT;
                }
        }
 
@@ -217,6 +216,12 @@ int main(int argc, char *argv[])
        }
        fgets(harddrive, 30, handle);
        fclose(handle);
+       if ((handle = fopen("/tmp/dest_device_info", "r")) == NULL) {
+               sprintf(harddrive_info, "%s", harddrive);
+       }
+       fgets(harddrive_info, 70, handle);
+       fclose(handle);
+
                        
        /* load unattended configuration */
        if (unattended) {
@@ -240,7 +245,7 @@ int main(int argc, char *argv[])
 
        fprintf(flog, "Destination drive: %s\n", hdparams.devnode_disk);
        
-       sprintf(message, ctr[TR_PREPARE_HARDDISK], hdparams.devnode_disk);
+       sprintf(message, ctr[TR_PREPARE_HARDDISK], harddrive_info);
        if (unattended) {
            hardyn = 1;
        } else {
@@ -273,7 +278,7 @@ int main(int argc, char *argv[])
                        ctr[TR_CANCEL], NULL);
        } else {
            rc = 1;
-           fstype = EXT3;
+           fstype = EXT4;
        }
        if (rc == 2)
                goto EXIT;
@@ -327,7 +332,7 @@ int main(int argc, char *argv[])
                
        
   /* Calculating the amount of free space */
-       boot_partition = 20; /* in MB */
+       boot_partition = 64; /* in MB */
        system_partition = disk - ( root_partition + swap_file + boot_partition );
        
        fprintf(flog, ", boot = %ld, swap = %ld, mylog = %ld, root = %ld\n",
@@ -367,24 +372,31 @@ int main(int argc, char *argv[])
 
        fclose(handle);
 
-       snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode_disk);
+       if (disk < 2097150) {
+               // <2TB use sfdisk and normal mbr
+               snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode_disk);
+       } else {
+               // >2TB use parted with gpt
+               snprintf(commandstring, STRING_SIZE, "/usr/sbin/parted -s %s mklabel gpt mkpart boot ext2 1M 64M mkpart swap linux-swap 64M 1000M mkpart root ext4 1000M 5000M mkpart var ext4 5000M 100%% disk_set pmbr_boot on", hdparams.devnode_disk);
+       }
+
        if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))
        {
                errorbox(ctr[TR_UNABLE_TO_PARTITION]);
                goto EXIT;
        }
-       
+
        if (fstype == EXT2) {
-               mysystem("/sbin/modprobe ext2");
+//             mysystem("/sbin/modprobe ext2");
                sprintf(mkfscommand, "/sbin/mke2fs -T ext2");
        } else if (fstype == REISERFS) {
                mysystem("/sbin/modprobe reiserfs");
                sprintf(mkfscommand, "/sbin/mkreiserfs -f");
        } else if (fstype == EXT3) {
-               mysystem("/sbin/modprobe ext3");
+//             mysystem("/sbin/modprobe ext3");
                sprintf(mkfscommand, "/sbin/mke2fs -T ext3");
        } else if (fstype == EXT4) {
-               mysystem("/sbin/modprobe ext4");
+//             mysystem("/sbin/modprobe ext4");
                sprintf(mkfscommand, "/sbin/mke2fs -T ext4");
        }
 
@@ -428,7 +440,7 @@ int main(int argc, char *argv[])
        mkdir("/harddisk/boot", S_IRWXU|S_IRWXG|S_IRWXO);
        mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO);
        mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);
-       
+
        snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode_part);
        if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))
        {
@@ -510,6 +522,15 @@ int main(int argc, char *argv[])
 
        system("/bin/sed -e 's#/harddisk#/#g' -e 's#//#/#g'  < /proc/mounts > /harddisk/etc/mtab");
 
+       /*
+        * Generate device.map to help grub finding the device to install itself on.
+        */
+       FILE *f = NULL;
+       if (f = fopen("/harddisk/boot/grub/device.map", "w")) {
+               fprintf(f, "(hd0) %s\n", hdparams.devnode_disk);
+               fclose(f);
+       }
+
        snprintf(commandstring, STRING_SIZE, 
                 "/usr/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", hdparams.devnode_disk);
        if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) {
@@ -583,12 +604,6 @@ EXIT:
                fclose(flog);
                newtFinished();
 
-               if (unattended) {
-                       // Remove Setup autorun after boot
-                       if (system("rm -f /harddisk/etc/rc.d/rcsysinit.d/S75firstsetup"))
-                               printf("Unable to disable setup autorun.\n");
-               }
-
                if (system("/bin/umount /harddisk/proc"))
                        printf("Unable to umount /harddisk/proc.\n"); 
        } else {