extern char url[STRING_SIZE];
+struct nic nics[20] = { { "" , "" } }; // only defined for compile
+struct knic knics[20] = { { "" , "" , "" } }; // only defined for compile
+
extern char *en_tr[];
extern char *de_tr[];
long memory = 0;
long system_partition, boot_partition, root_partition, swap_file;
int scsi_disk = 0;
- char *yesnoharddisk[] = { "NO", "YES", NULL };
+ char *yesnoharddisk[3]; // char *yesnoharddisk = { "NO", "YES", NULL };
+
int unattended = 0;
struct keyvalue *unattendedkv = initkeyvalues();
int hardyn = 0;
}
}
- // make some beeps before wiping the system :)
if (unattended) {
runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds...");
}
ctr = langtrs[choice];
strcpy(shortlangname, shortlangnames[choice]);
-
- mysystem("/bin/setfont lat0-16");
+ fprintf(flog, "Selected language: %s\n", shortlangname);
newtDrawRootText(14, 0, NAME " " VERSION " - " SLOGAN );
newtPushHelpLine(ctr[TR_HELPLINE]);
rc = newtWinMenu(ctr[TR_SELECT_INSTALLATION_MEDIA], message,
50, 5, 5, 6, installtypes, &installtype, ctr[TR_OK],
ctr[TR_CANCEL], NULL);
- }
- else {
+ } else {
rc = 1;
installtype = CDROM_INSTALL;
}
// Starting hardware detection
runcommandwithstatus("/bin/probehw.sh", ctr[TR_PROBING_HARDWARE]);
+ runcommandwithstatus("/bin/probenic.sh install", ctr[TR_PROBING_HARDWARE]);
/* CDROM INSTALL */
if (installtype == CDROM_INSTALL) {
-
switch (mysystem("/bin/mountsource.sh")) {
case 0:
installtype = CDROM_INSTALL;
fprintf(flog, "Source drive: %s\n", sourcedrive);
fclose(handle);
- snprintf(cdromparams.devnode, STRING_SIZE, "/dev/%s", sourcedrive);
- cdromparams.module = 0;
- fprintf(flog, "Source device: %s\n", cdromparams.devnode);
+ //snprintf(cdromparams.devnode_disk, STRING_SIZE, "/dev/%s", sourcedrive);
+ fprintf(flog, "Source device: %s\n", sourcedrive);
}
/* Configure the network now! */
goto EXIT;
}
- /* Check for ipcop-<VERSION>.tbz2 */
+ /* Check for ipfire-<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. */
- if (!(hdletter = findidetype(IDE_HD)))
- {
- /* Need to clean this up at some point */
- if (!try_scsi("sda") || strstr(sourcedrive, "sda") != NULL) {
- if (!try_scsi("ida/c0d0")) {
- if (!try_scsi("cciss/c0d0")) {
- if (!try_scsi("rd/c0d0")) {
- if (!try_scsi("ataraid/d0")) {
- errorbox(ctr[TR_NO_HARDDISK]);
- goto EXIT;
- } else {
- raid_disk = 1;
- sprintf(harddrive, "ataraid/d0");
- }
- } else {
- raid_disk = 1;
- sprintf(harddrive, "rd/c0d0");
- }
- } else {
- raid_disk = 1;
- sprintf(harddrive, "cciss/c0d0");
- }
- } else {
- raid_disk = 1;
- sprintf(harddrive, "ida/c0d0");
- }
- } else {
- if (strstr(sourcedrive, "sda") != NULL) {
- // probably installing from usb stick, try sdb
- if (try_scsi("sdb")) {
- sprintf(harddrive, "sdb");
- }
- else {
- errorbox(ctr[TR_NO_HARDDISK]);
- goto EXIT;
- }
- }
- else {
- sprintf(harddrive, "sda");
- }
- }
- scsi_disk = 1;
- } else
+ // Now try to find destination device...
+ if ((hdletter = findidetype(IDE_HD))) {
sprintf(harddrive, "hd%c", hdletter);
-
- fprintf(flog, "Destination drive: %s\n", harddrive);
-
+ goto FOUND_DESTINATION;
+ }
+
+ /* Need to clean this up at some point
+ scsi disk is sdb/sdc when sda/sdb is used for usb-key
+ if scsi-disk is sdd or more, it is not discovered
+ Support only 2 usb keys, none could be unplugged */
+ if (checkusb("sdb") && try_scsi("sdc")) {
+ scsi_disk = 1;
+ sprintf(harddrive, "sdc");
+ goto FOUND_DESTINATION;
+ }
+ if (checkusb("sda") && try_scsi("sdb")) {
+ scsi_disk = 1;
+ sprintf(harddrive, "sdb");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("sda")) {
+ scsi_disk = 1;
+ sprintf(harddrive, "sda");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("ida/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "ida/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("cciss/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "cciss/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("rd/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "rd/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("ataraid/d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "ataraid/d0");
+ goto FOUND_DESTINATION;
+ }
+ /* nothing worked, give up */
+ errorbox(ctr[TR_NO_HARDDISK]);
+ goto EXIT;
+
+ FOUND_DESTINATION:
/* load unattended configuration */
if (unattended) {
fprintf(flog, "unattended: Reading unattended.conf\n");
(void) readkeyvalues(unattendedkv, UNATTENDED_CONF);
}
-
- /* Make the hdparms struct and print the contents. */
- snprintf(hdparams.devnode, STRING_SIZE, "/dev/%s", harddrive);
- hdparams.module = 0;
-
- sprintf(message, ctr[TR_PREPARE_HARDDISK], hdparams.devnode);
+ /* Make the hdparms struct and print the contents.
+ With USB-KEY install and SCSI disk, while installing, the disk
+ is named 'sdb,sdc,...' (following keys)
+ On reboot, it will become 'sda'
+ To avoid many test, all names are built in the struct.
+ */
+ sprintf(hdparams.devnode_disk, "/dev/%s", harddrive);
+ /* Address the partition or raid partition (eg dev/sda or /dev/sdap1 */
+ sprintf(hdparams.devnode_part, "/dev/%s%s", harddrive,raid_disk ? "p" : "");
+ /* Now the names after the machine is booted. Only scsi is affected
+ and we only install on the first scsi disk. */
+ { char tmp[30];
+ strcpy(tmp, scsi_disk ? "sda" : harddrive);
+ sprintf(hdparams.devnode_disk_run, "/dev/%s", tmp);
+ sprintf(hdparams.devnode_part_run, "/dev/%s%s", tmp, raid_disk ? "p" : "");
+ }
+
+ fprintf(flog, "Destination drive: %s\n", hdparams.devnode_disk);
+
+ sprintf(message, ctr[TR_PREPARE_HARDDISK], hdparams.devnode_disk);
if (unattended) {
hardyn = 1;
}
-
+
+ yesnoharddisk[0] = ctr[TR_NO];
+ yesnoharddisk[1] = ctr[TR_YES];
+ yesnoharddisk[2] = NULL;
+
while (! hardyn) {
rc = newtWinMenu(title, message,
50, 5, 5, 6, yesnoharddisk,
if (rc == 2)
goto EXIT;
}
-
if (rc == 2)
goto EXIT;
fclose(handle);
- snprintf(commandstring, STRING_SIZE, "/bin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/bin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode_disk);
if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))
{
errorbox(ctr[TR_UNABLE_TO_PARTITION]);
mysystem("/sbin/udevstart");
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -T ext2 -c %sp1", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -T ext2 -c %s1", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -T ext2 -c %s1", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]);
}
if (swap_file) {
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %sp2", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s2", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s2", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))
{
errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);
}
}
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %sp3", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %s3", hdparams.devnode);
-
+ snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %s3", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);
goto EXIT;
}
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %sp4", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %s4", hdparams.devnode);
-
+ snprintf(commandstring, STRING_SIZE, "/sbin/mkreiserfs -f %s4", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);
}
/* Mount harddisk. */
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/bin/mount %sp3 /harddisk", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode);
+
+ snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);
mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO);
mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/bin/mount %sp1 /harddisk/boot", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode);
-
+ snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]);
goto EXIT;
}
if (swap_file) {
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/sbin/swapon %sp2", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s2", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s2", hdparams.devnode_part);
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, "/bin/mount %sp4 /harddisk/var", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/bin/mount %s4 /harddisk/var", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/bin/mount %s4 /harddisk/var", hdparams.devnode_part);
if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))
{
errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);
"/bin/wget -q -O - %s/" SNAME "-" VERSION ".tbz2 | /bin/tar -C /harddisk -xvjf -", url);
}
- if (installtype == CDROM_INSTALL) {
+ if (installtype == CDROM_INSTALL) {
snprintf(commandstring, STRING_SIZE,
"/bin/tar -C /harddisk -xvjf /cdrom/" SNAME "-" VERSION ".tbz2");
}
/* Save USB controller type to modules.conf */
write_usb_modules_conf();
+
+ /* Save language und local settings */
+ write_lang_configs(shortlangname);
/* touch the modules.dep files */
snprintf(commandstring, STRING_SIZE,
/* Rename uname */
rename ("/harddisk/bin/uname.bak", "/harddisk/bin/uname");
- /* *always* write disk configuration */
- if (!(write_disk_configs(&hdparams))){
- errorbox(ctr[TR_ERROR_WRITING_CONFIG]);
- goto EXIT;
- }
-
/* mount proc filesystem */
mysystem("mkdir /harddisk/proc");
mysystem("/bin/mount -t proc none /harddisk/proc");
mysystem("/bin/mount --bind /dev /harddisk/dev");
+ /* 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;
+ }
+
+ /* Update /etc/fstab */
+ replace("/harddisk/etc/fstab", "DEVICE", hdparams.devnode_part_run);
- /* if we detected SCSI then fixup */
- /* doesn't really work cause it sometimes creates a ramdisk on ide systems */
+ /* if we detected SCSI/USB then fixup */
/* mysystem("/bin/probecntrl.sh");
- if ((handle = fopen("/cntrldriver", "r")))
+ if ((handle = fopen("/tmp/cntrldriver", "r")))
{
char *driver;
- fgets(line, STRING_SIZE-1, handle);
- fclose(handle);
+ 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);
+ snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitrd --with=scsi_mod %s --with=sd_mod --with=sr_mod /boot/ipfirerd.img %s-ipfire", 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);
+ snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitrd --with=scsi_mod %s --with=sd_mod --with=sr_mod /boot/ipfirerd-smp.img %s-ipfire-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);
- else
- sprintf(string, "root=%s3", hdparams.devnode);
+ sprintf(string, "root=%s3", hdparams.devnode_part_run);
replace( "/harddisk/boot/grub/grub.conf", "root=ROOT", string);
- replace( "/harddisk/boot/grub/grubbatch", "DEVICE", hdparams.devnode);
+ replace( "/harddisk/boot/grub/grubbatch", "DEVICE", hdparams.devnode_disk);
/* restore permissions */
chmod("/harddisk/boot/grub/grubbatch", S_IXUSR | S_IRUSR | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH);
goto EXIT;
}
- /* 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");
+// mysystem("umount /harddisk/proc");
+// mysystem("umount /harddisk/dev");
if (!unattended) {
sprintf(message, ctr[TR_CONGRATULATIONS_LONG],
- NAME, SNAME, SNAME, NAME, NAME, NAME);
+ NAME, SNAME, NAME);
newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_OK], message);
}
EXIT:
fprintf(flog, "Install program ended.\n");
+
+
if (!(allok))
newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]);
{
/* /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("/bin/mount proc -t proc /harddisk/proc"))
- printf("Unable to mount proc in /harddisk.");
- else
- {
+// if (system("/bin/mount proc -t proc /harddisk/proc"))
+// printf("Unable to mount proc in /harddisk.");
+// else
+// {
if (unattended) {
fprintf(flog, "Entering unattended setup\n");
if (unattended_setup(unattendedkv)) {
}
}
- newtFinished();
fflush(flog);
fclose(flog);
+ newtFinished();
if (!unattended) {
+ // Copy our scanned nics to the disk and lock because scan doesn't work in chroot
+ system("touch /harddisk/var/ipfire/ethernet/scan_lock");
+ system("cp -f /tmp/scanned_nics /harddisk/var/ipfire/ethernet/scanned_nics");
if (system("/sbin/chroot /harddisk /usr/local/sbin/setup /dev/tty2 INSTALL"))
printf("Unable to run setup.\n");
+ system("rm -f /harddisk/var/ipfire/ethernet/scan_lock");
}
if (system("/bin/umount /harddisk/proc"))
printf("Unable to umount /harddisk/proc.\n");
- }
+// }
+ } else {
+ fflush(flog);
+ fclose(flog);
+ newtFinished();
}
+
fcloseall();
if (swap_file) {
- if (raid_disk)
- snprintf(commandstring, STRING_SIZE, "/bin/swapoff %sp2", hdparams.devnode);
- else
- snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s2", hdparams.devnode);
+ snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s2", hdparams.devnode_part);
}
newtFinished();
+ system("/bin/umount /harddisk/proc");
+ system("/bin/umount /harddisk/dev");
+
system("/bin/umount /harddisk/var");
system("/bin/umount /harddisk/boot");
system("/bin/umount /harddisk");