main.c

来自「IPcop软路由防火墙 FREE 开源源代码」· C语言 代码 · 共 1,019 行 · 第 1/3 页

C
1,019
字号
	 * On Boot floppy, we didn't have the PCMCIA drivers	 * so load them now because they are installed from Drivers. */	if (!(handle = fopen("/CDROMBOOT", "r"))) {		if (strstr (line, "nopcmcia") == NULL) {			fprintf(flog,"Floppy boot detected, loading PCMCIA drivers.\n");			if (pcmcia) {				fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);				sprintf(commandstring, "/sbin/modprobe %s", pcmcia);				mysystem("/sbin/modprobe pcmcia_core");				mysystem(commandstring);				mysystem("/sbin/modprobe ds");			} else {				fprintf (flog, "Detected No PCMCIA Controller.\n");			}		} else {			fprintf(flog, "Skipping PCMCIA detection.\n");		}		if (strstr (line, "nousb") == NULL) {			fprintf(flog, "Initializing USB controllers.\n");			initialize_usb();		} else {			fprintf(flog, "Skipping USB detection.\n");		}	} else		fclose(handle); 	/* 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>.tgz */		if (!(checktarball(SNAME "-" VERSION ".tgz")))		{			errorbox(ctr[TR_NO_IPCOP_TARBALL_FOUND]);			goto EXIT;		}	}	/* Get device for the HD.  This has to succeed. */	if (!(hdletter = findidetype(IDE_HD)))	{		if (installtype == URL_INSTALL)		{			/* If we've done a PXE boot, we can skip the SCSI		 	 * floppy as we've already got the modules in our 			 * instroot.gz */        		if (!(handle = fopen("/CDROMBOOT", "r"))) 			{				/* search img where it is on a mounted loop iso */				sprintf(string, "images/scsidrv-%s.img", VERSION);				if (!(checktarball(string)))				{					/* Couldn't find the SCSI drivers on the URL page,					 * so after 3 failed attempts, ask the user for the					 * SCSI drivers floppy disk. */					errorbox(ctr[TR_NO_SCSI_IMAGE_FOUND]);					sprintf(insertmessage, ctr[TR_INSERT_FLOPPY], NAME" SCSI");					rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);					if (rc != 1)					{						errorbox(ctr[TR_INSTALLATION_CANCELED]);						goto EXIT;					}					if (runcommandwithstatus("/bin/tar -C / -xvzf /dev/floppy", ctr[TR_EXTRACTING_MODULES]))					{						errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);						goto EXIT;					}				} else {					/* unpack... */					snprintf(commandstring, STRING_SIZE,						"/bin/wget -O - %s/%s | /bin/tar -C / -xvzf -",						url, string);					if (runcommandwithprogress(60, 4, title, commandstring,						4500, ctr[TR_INSTALLING_FILES]))					{						errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);						goto EXIT;					}				}			} else				fclose(handle);		} else {			if (ide_cdrom) {				sprintf(string, "/bin/tar -C / -xvzf /cdrom/images/scsidrv-%s.img", VERSION);				if (runcommandwithstatus(string, ctr[TR_EXTRACTING_MODULES]))				{					errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);					goto EXIT;				}			}		}		if (!scsi_cdrom) {#if 0 /* not yet */			if (pcmcia)			{				/* trying to support SCSI pcmcia :-) */				runcommandwithstatus("cardmgr -o -c /etc/pcmcia/scsi", 					ctr[TR_LOADING_PCMCIA]);				if (try_scsi("sda"))					pcmcia_disk = 1;			}#endif			/* try loading all SCSI modules with default options */			/* Should expand this to allow options later though */			if (!pcmcia_disk)				runcommandwithstatus("/bin/probescsi.sh",					ctr[TR_PROBING_SCSI]);		}			/* Need to clean this up at some point */		if (!try_scsi("sda")) {			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 {			sprintf(harddrive, "sda");		}		scsi_disk = 1;	} else		sprintf(harddrive, "hd%c", hdletter);	/* Make the hdparms struct and print the contents. */	snprintf(hdparams.devnode, STRING_SIZE, "/dev/%s", harddrive);	hdparams.module = 0;	rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL],		ctr[TR_PREPARE_HARDDISK], hdparams.devnode);	if (rc != 1)		goto EXIT;	/* Calculate amount of memory in machine */        if ((handle = fopen("/proc/meminfo", "r")))        {            while (fgets(line, STRING_SIZE-1, handle)) {                if (sscanf (line, "MemTotal: %s kB", string)) {                    memory = atoi(string) / 1024 ;                }            }            fclose(handle);        }	/* Partition, mkswp, mkfs.	 * before partitioning, first determine the sizes of each	 * partition.  In order to do that we need to know the size of	 * the disk. 	 */	/* Don't use mysystem here so we can redirect output */	sprintf(commandstring, "/bin/sfdisk -s /dev/%s > /disksize 2> /dev/null", harddrive);	system(commandstring);	/* Calculate amount of disk space */        if ((handle = fopen("/disksize", "r")))        {           	fgets(line, STRING_SIZE-1, handle);            	if (sscanf (line, "%s", string)) {			maximum_free = atoi(string) / 1024;            	}            	fclose(handle);        }		fprintf(flog, "maximum_free = %d, memory = %d", 		maximum_free, memory);		/* If you need more than this, you should really add physical memory */	/* Minimum: 192 = 64 real + 128 swap */	swap_file = memory < 64 ? 2 * memory : 192 - memory ;	swap_file = swap_file < 32 ? 32 : swap_file ;	if (maximum_free < 135 + swap_file )	{		if (maximum_free < 135) {			errorbox(ctr[TR_DISK_TOO_SMALL]);			goto EXIT;		}		rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]);		if (rc != 1)			goto EXIT;		swap_file = 0;	}	boot_partition = 8; /* in MB */	current_free = maximum_free - boot_partition - swap_file;	/* Give more place for add-on, extend root to 25% of current_free, upper limit to 8 gigas */	root_partition = current_free / 4 ;	root_partition = root_partition > 8192 ? 8192 : root_partition ;	root_partition = current_free < 860 ? 235 : root_partition;	root_partition = current_free < 380 ? 110 : root_partition;	current_free = current_free - root_partition;	root_partition = root_partition + swap_file;	log_partition = current_free;	fprintf(flog, "boot = %d, swap = %d, mylog = %d, root = %d\n",		boot_partition, swap_file, log_partition, root_partition);#ifdef __alpha__	fdisk = 1;#endif	if (fdisk) {		rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], "NOW FDISK");		if (rc != 1)			goto EXIT;	} else {#ifdef __i386__		handle = fopen("/tmp/partitiontable", "w");		fprintf(handle, ",%d,83,*\n,%d,83,\n,0,0,\n,,83,\n",			boot_partition, log_partition);		fclose(handle);				snprintf(commandstring, STRING_SIZE, "/bin/sfdisk -uM %s < /tmp/partitiontable", hdparams.devnode);		if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))		{			errorbox(ctr[TR_UNABLE_TO_PARTITION]);			goto EXIT;		}#endif	}	if (raid_disk)		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -m 0 -j %sp1", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -m 0 -j %s1", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]);		goto EXIT;	}	if (raid_disk)		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -j %sp2", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -j %s2", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]);		goto EXIT;	}	if (raid_disk)		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -m 1 -j %sp4", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/bin/mke2fs -m 1 -j %s4", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);		goto EXIT;	}	/* Mount harddisk. */	if (raid_disk)		snprintf(commandstring, STRING_SIZE, "/sbin/mount -t ext2 %sp4 /harddisk", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/sbin/mount -t ext2 %s4 /harddisk", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);		goto EXIT;	}	/* Make swapfile */	if (swap_file) {		snprintf(commandstring, STRING_SIZE, "/bin/dd if=/dev/zero of=/harddisk/swapfile bs=1024k count=%d", swap_file);		if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))		{			errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);			goto EXIT;		}		snprintf(commandstring, STRING_SIZE, "/bin/mkswap /harddisk/swapfile");		if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))		{			errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);			goto EXIT;		}	}	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);		if (raid_disk)		snprintf(commandstring, STRING_SIZE, "/sbin/mount -t ext2 %sp1 /harddisk/boot", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/sbin/mount -t ext2 %s1 /harddisk/boot", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]);		goto EXIT;	}	if (swap_file) {		snprintf(commandstring, STRING_SIZE, "/bin/swapon /harddisk/swapfile");		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 -t ext2 %sp2 /harddisk/var/log", hdparams.devnode);	else		snprintf(commandstring, STRING_SIZE, "/sbin/mount -t ext2 %s2 /harddisk/var/log", hdparams.devnode);	if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))	{		errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);		goto EXIT;	}	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?