]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/install+setup/install/main.c
Installer-Pfade gefixxt.
[people/pmueller/ipfire-2.x.git] / src / install+setup / install / main.c
index 62fed73678e61247e90e5ce05d9da9ef08620dff..f3d665f2c63053b8c8d2fee7162651a58ee56a6c 100644 (file)
@@ -15,7 +15,7 @@
 #define URL_INSTALL 1
 #define DISK_INSTALL 2
 #define INST_FILECOUNT 6600
-#define UNATTENDED_CONF "/cdrom/data/unattended.conf"
+#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
 
 int raid_disk = 0;
 FILE *flog = NULL;
@@ -198,14 +198,14 @@ int unattended_setup(struct keyvalue *unattendedkv) {
 
     if (strcmp(serial_console, "yes") != 0) {
            snprintf(commandstring, STRING_SIZE,
-                    "/bin/chroot /harddisk /bin/sed -i -e \"s/^s0/#s0/\" /etc/inittab");
+                    "/sbin/chroot /harddisk /bin/sed -i -e \"s/^s0/#s0/\" /etc/inittab");
            if (mysystem(commandstring)) {
                    errorbox("unattended: ERROR modifying inittab");
                    return 0;    
            }
 
            snprintf(commandstring, STRING_SIZE,
-                    "/bin/chroot /harddisk /bin/sed -i -e \"s/^serial/#serial/; s/^terminal/#terminal/\" /boot/grub/grub.conf");
+                    "/sbin/chroot /harddisk /bin/sed -i -e \"s/^serial/#serial/; s/^terminal/#terminal/\" /boot/grub/grub.conf");
            if (mysystem(commandstring)) {
                    errorbox("unattended: ERROR modifying inittab");
                    return 0;
@@ -221,7 +221,7 @@ int unattended_setup(struct keyvalue *unattendedkv) {
     fprintf(flog, "unattended: setting root password\n");
     
     snprintf(commandstring, STRING_SIZE,
-           "/bin/chroot /harddisk /bin/sh -c \"echo 'root:%s' | /usr/sbin/chpasswd\"", root_password);
+           "/sbin/chroot /harddisk /bin/sh -c \"echo 'root:%s' | /usr/sbin/chpasswd\"", root_password);
     if (mysystem(commandstring)) {
        errorbox("unattended: ERROR setting root password");
        return 0;
@@ -230,7 +230,7 @@ int unattended_setup(struct keyvalue *unattendedkv) {
     /* set admin password */
     fprintf(flog, "unattended: setting admin password\n");
     snprintf(commandstring, STRING_SIZE,
-           "/bin/chroot /harddisk /usr/bin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", admin_password);
+           "/sbin/chroot /harddisk /usr/bin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", admin_password);
     if (mysystem(commandstring)) {
        errorbox("unattended: ERROR setting admin password");
        return 0;    
@@ -347,7 +347,7 @@ int main(int argc, char *argv[])
 
        // make some beeps before wiping the system :)
        if (unattended) {
-           runcommandwithstatus("/bin/beep -f 450 -r 10 -D 800 -n -f 900 -l 1000", "WARNING: Unattended installation will start in 10 seconds...");
+           runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds...");
        }
        
        /* German is the default */
@@ -370,7 +370,7 @@ int main(int argc, char *argv[])
 
        mysystem("/bin/setfont lat0-16");
 
-       newtDrawRootText(14, 0, NAME " v" VERSION " - " SLOGAN );
+       newtDrawRootText(14, 0, NAME " " VERSION " - " SLOGAN );
        newtPushHelpLine(ctr[TR_HELPLINE]);
 
        if (!unattended) {
@@ -394,31 +394,49 @@ int main(int argc, char *argv[])
        // Starting hardware detection
        runcommandwithstatus("/bin/probehw.sh", ctr[TR_PROBING_HARDWARE]);
 
-       switch (mysystem("/bin/mountsource.sh")) {
-           case 0:
-               installtype = CDROM_INSTALL;
-               cdmounted = 1;
-               break;
-           case 1:
-               installtype = DISK_INSTALL;
-               break;
-           case 10:
-               errorbox(ctr[TR_NO_CDROM]);
-               goto EXIT;
-       }
+       /* CDROM INSTALL */
+       if (installtype == CDROM_INSTALL) {
+
+               switch (mysystem("/bin/mountsource.sh")) {
+                   case 0:
+                       installtype = CDROM_INSTALL;
+                       cdmounted = 1;
+                       break;
+                   case 1:
+                       installtype = DISK_INSTALL;
+                       break;
+                   case 10:
+                       errorbox(ctr[TR_NO_CDROM]);
+                       goto EXIT;
+               }
+
+               /* read source drive letter */
+               if ((handle = fopen("/source_device", "r")) == NULL) {
+                       errorbox(ctr[TR_ERROR_PROBING_CDROM]);
+                       goto EXIT;
+               }
+               fgets(sourcedrive, 5, handle);
+               fprintf(flog, "Source drive: %s\n", sourcedrive);
+               fclose(handle);
 
-       /* read source drive letter */
-       if ((handle = fopen("/source_device", "r")) == NULL) {
-           errorbox("ERROR reading source_device");
+               snprintf(cdromparams.devnode, STRING_SIZE, "/dev/%s", sourcedrive);
+               cdromparams.module = 0;
+               fprintf(flog, "Source device: %s\n", cdromparams.devnode);
        }
-       fgets(sourcedrive, 5, handle);
-       fprintf(flog, "Source drive: %s\n", sourcedrive);
-       fclose(handle);
-       
-       if (installtype == CDROM_INSTALL) {
-           snprintf(cdromparams.devnode, STRING_SIZE, "/dev/%s", sourcedrive);
-           cdromparams.module = 0;
-           fprintf(flog, "Source device: %s\n", cdromparams.devnode);
+
+       /* Configure the network now! */
+       if (installtype == URL_INSTALL) {
+               /* Network driver and params. */
+               if (!(networkmenu(ethernetkv))) {
+                       errorbox(ctr[TR_NETWORK_SETUP_FAILED]);
+                       goto EXIT;
+               }
+
+               /* Check for ipcop-<VERSION>.tbz2 */
+               if (checktarball(SNAME "-" VERSION ".tbz2", ctr[TR_ENTER_URL])) {
+                       errorbox(ctr[TR_NO_IPCOP_TARBALL_FOUND]);
+                       goto EXIT;
+               }
        }
 
        /* Get device for the HD.  This has to succeed. */
@@ -467,6 +485,7 @@ int main(int argc, char *argv[])
        } else
                sprintf(harddrive, "hd%c", hdletter);
 
+       fprintf(flog, "Destination drive: %s\n", harddrive);
 
        /* load unattended configuration */
        if (unattended) {
@@ -571,13 +590,12 @@ int main(int argc, char *argv[])
 
        handle = fopen("/tmp/partitiontable", "w");
 
-
        /* Make swapfile */
        if (swap_file) {
-               fprintf(handle, ",%ld,L,*\n,%ld,S,\n,%ld,L,\n",
+               fprintf(handle, ",%ld,L,*\n,%ld,S,\n,%ld,L,\n,,L,\n",
                        boot_partition, swap_file, root_partition);
        } else {
-               fprintf(handle, ",%ld,L,*\n,0,0,\n,%ld,L,\n",
+               fprintf(handle, ",%ld,L,*\n,0,0,\n,%ld,L,\n,,L,\n",
                        boot_partition, root_partition);
        }
 
@@ -590,7 +608,7 @@ int main(int argc, char *argv[])
                goto EXIT;
        }
 
-       mysystem("/bin/udevstart");
+       mysystem("/sbin/udevstart");
 
        if (raid_disk)
                snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -T ext2 -c %sp1", hdparams.devnode);
@@ -604,9 +622,9 @@ int main(int argc, char *argv[])
 
        if (swap_file) {
                if (raid_disk)
-                       snprintf(commandstring, STRING_SIZE, "/bin/mkswap %sp2", hdparams.devnode);     
+                       snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %sp2", hdparams.devnode);    
                else
-                       snprintf(commandstring, STRING_SIZE, "/bin/mkswap %s2", hdparams.devnode);
+                       snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s2", hdparams.devnode);
                if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))
                {
                        errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);
@@ -625,7 +643,7 @@ int main(int argc, char *argv[])
                goto EXIT;
        }
 
-/*     if (raid_disk)
+       if (raid_disk)
                snprintf(commandstring, STRING_SIZE, "/bin/mkreiserfs -f %sp4", hdparams.devnode);      
        else
                snprintf(commandstring, STRING_SIZE, "/bin/mkreiserfs -f %s4", hdparams.devnode);       
@@ -634,13 +652,13 @@ int main(int argc, char *argv[])
        {
                errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);
                goto EXIT;
-       } */
+       }
 
        /* Mount harddisk. */
        if (raid_disk)
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %sp3 /harddisk", hdparams.devnode);
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %sp3 /harddisk", hdparams.devnode);
        else
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %s3 /harddisk", hdparams.devnode);
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode);
        if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))
        {
                errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);
@@ -652,9 +670,9 @@ int main(int argc, char *argv[])
        mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);
        
        if (raid_disk)
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %sp1 /harddisk/boot", hdparams.devnode);
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %sp1 /harddisk/boot", hdparams.devnode);
        else
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %s1 /harddisk/boot", hdparams.devnode);
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode);
 
        if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))
        {
@@ -663,24 +681,24 @@ int main(int argc, char *argv[])
        }
        if (swap_file) {
                if (raid_disk)
-                       snprintf(commandstring, STRING_SIZE, "/bin/swapon %sp2", hdparams.devnode);
+                       snprintf(commandstring, STRING_SIZE, "/sbin/swapon %sp2", hdparams.devnode);
                else
-                       snprintf(commandstring, STRING_SIZE, "/bin/swapon %s2", hdparams.devnode);
+                       snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s2", hdparams.devnode);
                if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_SWAP_PARTITION]))
                {
                        errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]);
                        goto EXIT;
                }
        }
-/*     if (raid_disk)
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %sp4 /harddisk/var", hdparams.devnode);
+       if (raid_disk)
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %sp4 /harddisk/var", hdparams.devnode);
        else
-               snprintf(commandstring, STRING_SIZE, "/sbin/mount %s4 /harddisk/var", hdparams.devnode);
+               snprintf(commandstring, STRING_SIZE, "/bin/mount %s4 /harddisk/var", hdparams.devnode);
        if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))
        {
                errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);
                goto EXIT;
-       } */
+       }
        
        snprintf(commandstring, STRING_SIZE, "/bin/tar -C /harddisk -xvjf /cdrom/" SNAME "-" VERSION ".tbz2");
        
@@ -696,11 +714,11 @@ int main(int argc, char *argv[])
 
        /* touch the modules.dep files */
        snprintf(commandstring, STRING_SIZE, 
-               "/bin/chroot /harddisk /usr/bin/touch /lib/modules/%s/modules.dep",
+               "/sbin/chroot /harddisk /usr/bin/touch /lib/modules/%s/modules.dep",
                KERNEL_VERSION);
        mysystem(commandstring);
        snprintf(commandstring, STRING_SIZE, 
-               "/bin/chroot /harddisk /usr/bin/touch /lib/modules/%s-smp/modules.dep",
+               "/sbin/chroot /harddisk /usr/bin/touch /lib/modules/%s-smp/modules.dep",
                KERNEL_VERSION);
        mysystem(commandstring);
 
@@ -737,13 +755,43 @@ int main(int argc, char *argv[])
          goto EXIT;
        }
 
-        /* Build cache lang file */             
-        snprintf(commandstring, STRING_SIZE, "/bin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
-        if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE]))
-        {
-                errorbox(ctr[TR_UNABLE_TO_INSTALL_LANG_CACHE]);
-                goto EXIT;
-        }
+       /* mount proc filesystem */
+       mysystem("mkdir /harddisk/proc");
+       mysystem("/bin/mount -t proc none /harddisk/proc");
+       mysystem("/bin/mount --bind /dev /harddisk/dev");
+
+
+
+       /* if we detected SCSI then fixup */
+       /* doesn't really work cause it sometimes creates a ramdisk on ide systems */
+/*     mysystem("/bin/probecntrl.sh");
+       if ((handle = fopen("/cntrldriver", "r")))
+       {
+               char *driver;
+                       fgets(line, STRING_SIZE-1, handle);
+                       fclose(handle);
+               line[strlen(line) - 1] = 0;
+               driver = strtok(line, ".");
+               fprintf(flog, "Detected SCSI driver %s\n",driver);
+               if (strlen(driver) > 1) {
+                       fprintf(flog, "Fixing up ipfirerd.img\n");
+                       mysystem("/sbin/chroot /harddisk /sbin/modprobe loop");
+                       mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);
+                       snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitrd --with=scsi_mod --with=%s --with=sd_mod --with=sr_mod --with=libata /boot/ipfirerd.img %s", driver, KERNEL_VERSION);
+                       runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
+                       snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitrd --with=scsi_mod --with=%s --with=sd_mod --with=sr_mod --with=libata /boot/ipfirerd-smp.img %s-smp", driver, KERNEL_VERSION);
+                       runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
+                       mysystem("/sbin/chroot /harddisk /bin/mv /boot/grub/scsigrub.conf /boot/grub/grub.conf");
+               }
+       } */
+
+       /* Build cache lang file */
+       snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
+       if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE]))
+       {
+               errorbox(ctr[TR_UNABLE_TO_INSTALL_LANG_CACHE]);
+               goto EXIT;
+       }
 
        if (raid_disk)
                sprintf(string, "root=%sp3", hdparams.devnode);
@@ -756,20 +804,30 @@ int main(int argc, char *argv[])
        /* restore permissions */
        chmod("/harddisk/boot/grub/grubbatch", S_IXUSR | S_IRUSR | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH);
 
-       /* mount proc filesystem */
-       mysystem("mkdir /harddisk/proc");
-       mysystem("/bin/mount -t proc none /harddisk/proc");
-       mysystem("/bin/mount --bind /dev /harddisk/dev");
-
        snprintf(commandstring, STRING_SIZE, 
-                "/bin/chroot /harddisk /boot/grub/grubbatch");
+                "/sbin/chroot /harddisk /boot/grub/grubbatch");
        if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) {
                errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);
                goto EXIT;
        }
 
-       mysystem("umount /harddisk/proc/");
-       mysystem("umount /harddisk/dev/");
+       /* Update /etc/fstab */
+       replace( "/harddisk/etc/fstab", "DEVICE", hdparams.devnode);
+
+       /* Install bootsplash */
+       mysystem("/bin/installbootsplash.sh");
+
+       mysystem("ln -s grub.conf /harddisk/boot/grub/menu.lst");
+       mysystem("umount /harddisk/proc");
+       mysystem("umount /harddisk/dev");
+
+       if (!unattended) {
+               sprintf(message, ctr[TR_CONGRATULATIONS_LONG],
+                               NAME, SNAME, SNAME, NAME, NAME, NAME);
+               newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_OK], message);
+       }
+                
+       allok = 1;
 
 EXIT:
        fprintf(flog, "Install program ended.\n");      
@@ -787,23 +845,23 @@ EXIT:
        {
                /* /proc is needed by the module checker.  We have to mount it
                 * so it can be seen by setup, which is run chrooted. */
-               if (system("/sbin/mount proc -t proc /harddisk/proc"))
+               if (system("/bin/mount proc -t proc /harddisk/proc"))
                        printf("Unable to mount proc in /harddisk.");
                else
                {
-                       if (system("/bin/chroot /harddisk /usr/local/sbin/setup /dev/tty2 INSTALL"))
+                       if (system("/sbin/chroot /harddisk /usr/local/sbin/setup /dev/tty2 INSTALL"))
                                printf("Unable to run setup.\n");
-                       if (system("/sbin/umount /harddisk/proc"))
+                       if (system("/bin/umount /harddisk/proc"))
                                printf("Unable to umount /harddisk/proc.\n");
                }
        }
 
        fcloseall();
 
-       system("/bin/swapoff /harddisk/swapfile");
-       system("/sbin/umount /harddisk/var/log");
-       system("/sbin/umount /harddisk/boot");
-       system("/sbin/umount /harddisk");
+       system("/sbin/swapoff /harddisk/swapfile");
+       system("/bin/umount /harddisk/var");
+       system("/bin/umount /harddisk/boot");
+       system("/bin/umount /harddisk");
          
        system("/etc/halt");