mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-26 19:00:34 +02:00
Die IDE/SCSI/SATA/USB-Erkennung erstellt nun schoene Ramdisks :D
Kernel ist jetzt noch modularer, da keine IDE/FS-Treiber vorhanden sind. git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@561 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8
This commit is contained in:
13662
src/hwdata/pci.ids
Normal file
13662
src/hwdata/pci.ids
Normal file
File diff suppressed because it is too large
Load Diff
5970
src/hwdata/usb.ids
Normal file
5970
src/hwdata/usb.ids
Normal file
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,15 @@
|
||||
|
||||
#include "install.h"
|
||||
|
||||
int initialize_ide() {
|
||||
mysystem("/sbin/modprobe ide-generic");
|
||||
mysystem("/sbin/modprobe generic");
|
||||
mysystem("/sbin/modprobe ide-cd");
|
||||
mysystem("/sbin/modprobe ide-disk");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* checkide(). Scans the named drive letter and returns the IDE_??? type. */
|
||||
int checkide(char letter)
|
||||
{
|
||||
|
||||
@@ -27,6 +27,7 @@ struct devparams
|
||||
};
|
||||
|
||||
/* ide.c */
|
||||
int initialize_ide();
|
||||
int checkide(char letter);
|
||||
char findidetype(int type);
|
||||
|
||||
|
||||
@@ -73,6 +73,9 @@ int main(int argc, char *argv[])
|
||||
char *installtypes[] = { "CDROM/USB", "HTTP/FTP", NULL };
|
||||
int installtype = CDROM_INSTALL;
|
||||
int choice;
|
||||
int i;
|
||||
int found = 0;
|
||||
int firstrun = 0;
|
||||
char shortlangname[10];
|
||||
char message[1000];
|
||||
char title[STRING_SIZE];
|
||||
@@ -120,6 +123,12 @@ int main(int argc, char *argv[])
|
||||
fprintf(flog, "Couldn't open commandline: /proc/cmdline\n");
|
||||
} else {
|
||||
fgets(line, STRING_SIZE, cmdfile);
|
||||
if (strstr (line, "noide") == NULL) {
|
||||
fprintf(flog, "Initializing IDE controllers.\n");
|
||||
initialize_ide();
|
||||
} else {
|
||||
fprintf(flog, "Skipping IDE detection.\n");
|
||||
}
|
||||
if (strstr (line, "nousb") == NULL) {
|
||||
fprintf(flog, "Initializing USB controllers.\n");
|
||||
initialize_usb();
|
||||
@@ -127,9 +136,11 @@ int main(int argc, char *argv[])
|
||||
fprintf(flog, "Skipping USB detection.\n");
|
||||
}
|
||||
// check if we have to make an unattended install
|
||||
if (strstr (line, "unattended") != NULL) {
|
||||
if (strstr (line, "unattended") != NULL) {
|
||||
unattended = 1;
|
||||
}
|
||||
// Loading the cdrom-filesystem
|
||||
mysystem("/sbin/modprobe iso9660");
|
||||
}
|
||||
|
||||
if (unattended) {
|
||||
@@ -202,9 +213,6 @@ int main(int argc, char *argv[])
|
||||
fgets(sourcedrive, 5, handle);
|
||||
fprintf(flog, "Source drive: %s\n", sourcedrive);
|
||||
fclose(handle);
|
||||
|
||||
//snprintf(cdromparams.devnode_disk, STRING_SIZE, "/dev/%s", sourcedrive);
|
||||
fprintf(flog, "Source device: %s\n", sourcedrive);
|
||||
}
|
||||
|
||||
/* Configure the network now! */
|
||||
@@ -221,17 +229,56 @@ int main(int argc, char *argv[])
|
||||
goto EXIT;
|
||||
}
|
||||
}
|
||||
|
||||
// Now try to find destination device...
|
||||
if ((hdletter = findidetype(IDE_HD))) {
|
||||
sprintf(harddrive, "hd%c", hdletter);
|
||||
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 */
|
||||
i = 0;
|
||||
while (found == 0) {
|
||||
i++;
|
||||
fprintf(flog, "Harddisk scan pass %i\n", i);
|
||||
|
||||
rc = mysystem("/bin/mountdest.sh");
|
||||
fprintf(flog, "RC %d\n", rc);
|
||||
|
||||
if (rc == 0) { // Found IDE disk
|
||||
scsi_disk = 0;
|
||||
found = 1;
|
||||
} else if (rc == 1) { // Found SCSI/USB/SATA disk
|
||||
scsi_disk = 1;
|
||||
found = 1;
|
||||
} else { // 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;
|
||||
}
|
||||
|
||||
/* switch (mysystem("/bin/mountdest.sh")) {
|
||||
case 0: // Found IDE disk
|
||||
scsi_disk = 0;
|
||||
found = 1;
|
||||
break;
|
||||
case 1: // Found SCSI disk
|
||||
scsi_disk = 1;
|
||||
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;
|
||||
} */
|
||||
}
|
||||
|
||||
/*
|
||||
// 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");
|
||||
@@ -266,12 +313,16 @@ int main(int argc, char *argv[])
|
||||
raid_disk = 1;
|
||||
sprintf(harddrive, "ataraid/d0");
|
||||
goto FOUND_DESTINATION;
|
||||
}
|
||||
/* nothing worked, give up */
|
||||
errorbox(ctr[TR_NO_HARDDISK]);
|
||||
goto EXIT;
|
||||
} */
|
||||
|
||||
FOUND_DESTINATION:
|
||||
if ((handle = fopen("/tmp/dest_device", "r")) == NULL) {
|
||||
errorbox(ctr[TR_NO_HARDDISK]);
|
||||
goto EXIT;
|
||||
}
|
||||
fgets(harddrive, 5, handle);
|
||||
fclose(handle);
|
||||
|
||||
/* load unattended configuration */
|
||||
if (unattended) {
|
||||
fprintf(flog, "unattended: Reading unattended.conf\n");
|
||||
@@ -443,6 +494,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Mount harddisk. */
|
||||
mysystem("/sbin/modprobe reiserfs"); // to be banished...
|
||||
|
||||
snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode_part);
|
||||
if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))
|
||||
@@ -514,8 +566,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* mount proc filesystem */
|
||||
mysystem("mkdir /harddisk/proc");
|
||||
mysystem("/bin/mount -t proc none /harddisk/proc");
|
||||
mysystem("/bin/mount --bind /dev /harddisk/dev");
|
||||
mysystem("/bin/mount --bind /proc /harddisk/proc");
|
||||
mysystem("/bin/mount --bind /dev /harddisk/dev");
|
||||
mysystem("/bin/mount --bind /sys /harddisk/sys");
|
||||
|
||||
/* Build cache lang file */
|
||||
snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
|
||||
@@ -528,25 +581,11 @@ int main(int argc, char *argv[])
|
||||
/* Update /etc/fstab */
|
||||
replace("/harddisk/etc/fstab", "DEVICE", hdparams.devnode_part_run);
|
||||
|
||||
/* if we detected SCSI/USB then fixup */
|
||||
/* mysystem("/bin/probecntrl.sh");
|
||||
if ((handle = fopen("/tmp/cntrldriver", "r")))
|
||||
{
|
||||
char *driver;
|
||||
fgets(line, STRING_SIZE-1, handle);
|
||||
fclose(handle);
|
||||
line[strlen(line) - 1] = 0;
|
||||
driver = strtok(line, ".");
|
||||
if (strlen(driver) > 1) {
|
||||
fprintf(flog, "Fixing up ipfirerd.img\n");
|
||||
mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);
|
||||
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 %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");
|
||||
}
|
||||
} */
|
||||
/* Going to make our initrd... */
|
||||
snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitcpio -v -g /boot/ipfirerd.img -k %s-ipfire", KERNEL_VERSION);
|
||||
runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
|
||||
snprintf(commandstring, STRING_SIZE, "/sbin/chroot /harddisk /sbin/mkinitcpio -v -g /boot/ipfirerd-smp.img -k %s-smp-ipfire", KERNEL_VERSION);
|
||||
runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
|
||||
|
||||
sprintf(string, "root=%s3", hdparams.devnode_part_run);
|
||||
replace( "/harddisk/boot/grub/grub.conf", "root=ROOT", string);
|
||||
@@ -563,11 +602,9 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Install bootsplash */
|
||||
mysystem("/bin/installbootsplash.sh");
|
||||
// mysystem("/bin/installbootsplash.sh"); We cannot use this at the moment, it conflicts with our initrds...
|
||||
|
||||
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],
|
||||
@@ -580,8 +617,6 @@ int main(int argc, char *argv[])
|
||||
EXIT:
|
||||
fprintf(flog, "Install program ended.\n");
|
||||
|
||||
|
||||
|
||||
if (!(allok))
|
||||
newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]);
|
||||
|
||||
@@ -589,39 +624,32 @@ EXIT:
|
||||
|
||||
if (allok && !allok_fastexit)
|
||||
{
|
||||
/* /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 (unattended) {
|
||||
fprintf(flog, "Entering unattended setup\n");
|
||||
if (unattended_setup(unattendedkv)) {
|
||||
if (unattended) {
|
||||
fprintf(flog, "Entering unattended setup\n");
|
||||
if (unattended_setup(unattendedkv)) {
|
||||
snprintf(commandstring, STRING_SIZE, "/bin/sleep 10");
|
||||
runcommandwithstatus(commandstring, "Unattended installation finished, system will reboot");
|
||||
} else {
|
||||
} else {
|
||||
errorbox("Unattended setup failed.");
|
||||
goto EXIT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fflush(flog);
|
||||
fclose(flog);
|
||||
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 (!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");
|
||||
// }
|
||||
if (system("/bin/umount /harddisk/proc"))
|
||||
printf("Unable to umount /harddisk/proc.\n");
|
||||
} else {
|
||||
fflush(flog);
|
||||
fclose(flog);
|
||||
@@ -638,6 +666,7 @@ EXIT:
|
||||
|
||||
system("/bin/umount /harddisk/proc");
|
||||
system("/bin/umount /harddisk/dev");
|
||||
system("/bin/umount /harddisk/sys");
|
||||
|
||||
system("/bin/umount /harddisk/var");
|
||||
system("/bin/umount /harddisk/boot");
|
||||
|
||||
39
src/install+setup/install/mountdest.sh
Normal file
39
src/install+setup/install/mountdest.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Scanning for possible destination drives"
|
||||
|
||||
# scan IDE devices
|
||||
echo "--> IDE"
|
||||
for DEVICE in $(kudzu -qps -t 30 -c HD -b IDE | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
echo -n "---> $DEVICE"
|
||||
mount /dev/${DEVICE}1 /harddisk 2> /dev/null
|
||||
if [ -e /harddisk/ipfire-*.tbz2 ]; then
|
||||
umount /harddisk 2> /dev/null
|
||||
echo " is source drive"
|
||||
continue
|
||||
else
|
||||
umount /harddisk 2> /dev/null
|
||||
echo -n "$DEVICE" > /tmp/dest_device
|
||||
echo " - yes, it is our destination"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
# scan USB/SCSI devices
|
||||
echo "--> USB/SCSI"
|
||||
for DEVICE in $(kudzu -qps -t 30 -c HD -b SCSI | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
echo -n "---> $DEVICE"
|
||||
mount /dev/${DEVICE}1 /harddisk 2> /dev/null
|
||||
if [ -e /harddisk/ipfire-*.tbz2 ]; then
|
||||
umount /harddisk 2> /dev/null
|
||||
echo " is source drive"
|
||||
continue
|
||||
else
|
||||
umount /harddisk 2> /dev/null
|
||||
echo -n "$DEVICE" > /tmp/dest_device
|
||||
echo " - yes, it is our destination"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
exit 10 # Nothing found
|
||||
@@ -3,22 +3,21 @@
|
||||
echo "Scanning source media"
|
||||
|
||||
# scan CDROM devices
|
||||
|
||||
for DEVICE in $(kudzu -qps -t 30 -c CDROM | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
for DEVICE in $(kudzu -qps -t 30 -c CDROM | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
mount /dev/${DEVICE} /cdrom 2> /dev/null
|
||||
if [ -e /cdrom/boot ]; then
|
||||
echo -n ${DEVICE} > /tmp/source_device
|
||||
exit 0
|
||||
if [ -e /cdrom/ipfire-*.tbz2 ]; then
|
||||
echo -n ${DEVICE} > /tmp/source_device
|
||||
exit 0
|
||||
fi
|
||||
umount /cdrom 2> /dev/null
|
||||
done
|
||||
|
||||
# scan HD device (usb sticks, etc.)
|
||||
for DEVICE in $(kudzu -qps -t 30 -c HD | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
for DEVICE in $(kudzu -qps -t 30 -c HD | grep device: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
mount /dev/${DEVICE}1 /cdrom 2> /dev/null
|
||||
if [ -e /cdrom/boot ]; then
|
||||
echo -n ${DEVICE}1 > /tmp/source_device
|
||||
exit 1
|
||||
if [ -e /cdrom/ipfire-*.tbz2 ]; then
|
||||
echo -n ${DEVICE}1 > /tmp/source_device
|
||||
exit 1
|
||||
fi
|
||||
umount /cdrom 2> /dev/null
|
||||
done
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Detecting Hardware"
|
||||
for MODULE in $(kudzu -qps -t 30 | grep driver | cut -d ' ' -f 2 | sort | uniq); do
|
||||
echo "Detecting Hardware..."
|
||||
for MODULE in $(kudzu -qps -t 30 | grep driver: | cut -d ' ' -f 2 | sort | uniq); do
|
||||
if [ "${MODULE}" = "unknown" ] || \
|
||||
[ "${MODULE}" = "ignore" ]; then
|
||||
continue
|
||||
@@ -9,9 +9,42 @@ for MODULE in $(kudzu -qps -t 30 | grep driver | cut -d ' ' -f 2 | sort | uniq)
|
||||
if grep -Eqe "^${MODULE} " /proc/modules; then
|
||||
continue
|
||||
fi
|
||||
echo "Loading ${MODULE}"
|
||||
modprobe -k ${MODULE}
|
||||
udevstart
|
||||
echo -n "Loading ${MODULE}"
|
||||
modprobe ${MODULE} >/dev/null 2>&1
|
||||
echo " --> ecode: $?"
|
||||
done
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## If the autodetection fails we will try to load every module...
|
||||
## Do this only when we want...
|
||||
|
||||
for i in a b c d e f g; do
|
||||
if [ ! -e /dev/sd$i ]; then
|
||||
DEVICE="/dev/sd$i"
|
||||
echo "Checking for: $DEVICE"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
for MODULE in $(ls /lib/modules/*/kernel/drivers/scsi); do
|
||||
MODULE=`basename $MODULE | awk -F. '{ print $1 }'`
|
||||
|
||||
echo -n "Probing for $MODULE"
|
||||
modprobe $MODULE >/dev/null 2>&1
|
||||
RETVAL=$?
|
||||
echo " --> ecode: $RETVAL"
|
||||
if [ "$RETVAL" -eq "0" ]; then
|
||||
sleep 3
|
||||
if [ -e "$DEVICE" ]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
sleep 5
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -52,7 +52,6 @@ int initialize_usb() {
|
||||
usbuhci = 1;
|
||||
|
||||
mysystem("/sbin/modprobe usbhid");
|
||||
mysystem("/sbin/udevstart");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user