Netzwerkinstallation und PXE ausgebaut.

git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@892 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8
This commit is contained in:
ms
2007-09-15 19:10:07 +00:00
parent 58493e1ef0
commit 03d956bec0
7 changed files with 18 additions and 330 deletions

View File

@@ -40,7 +40,7 @@ clean :
######
OBJS=main.o nic.o net.o config.o ../libsmooth/libsmooth.o unattended.o
OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o
install: $(OBJS)
$(LINK) $(OBJS) -o $@ $(LIBS)

View File

@@ -26,12 +26,6 @@ struct devparams
char options[STRING_SIZE];
};
/* nic.c */
int networkmenu(struct keyvalue *ethernetkv);
/* net.c */
int checktarball(char *, char *message);
/* config.c */
int write_disk_configs(struct devparams *dp);
int write_lang_configs( char *lang);

View File

@@ -11,9 +11,6 @@
#include "install.h"
#define _GNU_SOURCE
#define CDROM_INSTALL 0
#define URL_INSTALL 1
#define DISK_INSTALL 2
#define INST_FILECOUNT 6200
#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
@@ -34,23 +31,6 @@ struct knic knics[20] = { { "" , "" , "" , "" } }; // only defined for compile
extern char *en_tr[];
extern char *de_tr[];
int detect_smp() {
FILE *fd = NULL;
char line[STRING_SIZE];
int cpu_count = 0;
if ((fd = fopen("/proc/cpuinfo", "r")) == NULL) {
return 0;
}
while (fgets(line, STRING_SIZE, fd) != NULL) {
if (strstr(line, "processor") == line) {
cpu_count++;
}
}
(void)fclose(fd);
return (cpu_count > 1);
}
int main(int argc, char *argv[])
{
char *langnames[] = { "Deutsch", "English", NULL };
@@ -59,11 +39,8 @@ int main(int argc, char *argv[])
char hdletter;
char harddrive[11], sourcedrive[5]; /* Device holder. */
struct devparams hdparams, cdromparams; /* Params for CDROM and HD */
int cdmounted = 0; /* Loop flag for inserting a cd. */
int rc = 0;
char commandstring[STRING_SIZE];
char *installtypes[] = { "CDROM/USB", "HTTP/FTP", NULL };
int installtype = CDROM_INSTALL;
char mkfscommand[STRING_SIZE];
char *fstypes[] = { "Reiser4", "ReiserFS", "ext3", NULL };
int fstype = REISER4;
@@ -167,61 +144,25 @@ int main(int argc, char *argv[])
// Starting hardware detection
runcommandwithstatus("/bin/probehw.sh", ctr[TR_PROBING_HARDWARE]);
if (!unattended) {
sprintf(message, ctr[TR_WELCOME], NAME);
newtWinMessage(title, ctr[TR_OK], message);
sprintf(message, ctr[TR_WELCOME], NAME);
newtWinMessage(title, ctr[TR_OK], message);
sprintf(message, ctr[TR_SELECT_INSTALLATION_MEDIA_LONG], NAME);
rc = newtWinMenu(ctr[TR_SELECT_INSTALLATION_MEDIA], message,
50, 5, 5, 6, installtypes, &installtype, ctr[TR_OK],
ctr[TR_CANCEL], NULL);
} else {
rc = 1;
installtype = CDROM_INSTALL;
}
if (rc == 2)
switch (mysystem("/bin/mountsource.sh")) {
case 0:
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("/tmp/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);
}
/* 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 ipfire-<VERSION>.tbz2 */
if (checktarball(SNAME "-" VERSION ".tbz2", ctr[TR_ENTER_URL])) {
errorbox(ctr[TR_NO_IPCOP_TARBALL_FOUND]);
goto EXIT;
}
/* read source drive letter */
if ((handle = fopen("/tmp/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);
i = 0;
while (found == 0) {
@@ -489,15 +430,8 @@ int main(int argc, char *argv[])
goto EXIT;
}
if (installtype == URL_INSTALL) {
snprintf(commandstring, STRING_SIZE,
"/bin/wget -q -O - %s/" SNAME "-" VERSION ".tbz2 | /bin/tar -C /harddisk -xvjf -", url);
}
if (installtype == CDROM_INSTALL) {
snprintf(commandstring, STRING_SIZE,
"/bin/tar -C /harddisk -xvjf /cdrom/" SNAME "-" VERSION ".tbz2");
}
snprintf(commandstring, STRING_SIZE,
"/bin/tar -C /harddisk -xvjf /cdrom/" SNAME "-" VERSION ".tbz2");
if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT,
ctr[TR_INSTALLING_FILES]))
@@ -581,7 +515,7 @@ int main(int argc, char *argv[])
chmod("/harddisk/boot/grub/grubbatch", S_IXUSR | S_IRUSR | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH);
snprintf(commandstring, STRING_SIZE,
"/sbin/chroot /harddisk /boot/grub/grubbatch");
"/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", hdparams.devnode_disk);
if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) {
errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);
goto EXIT;

View File

@@ -1,73 +0,0 @@
/* SmoothWall install program.
*
* This program is distributed under the terms of the GNU General Public
* Licence. See the file COPYING for details.
*
* (c) Lawrence Manning, 2001
* Stuff for downloading the smoothwall tarball using wget.
*
*/
#include "install.h"
extern FILE *flog;
extern char *mylog;
extern char **ctr;
static int got_url = 0;
char url[STRING_SIZE] = "http://";;
static int gettarballurl(char *url, char *message);
int checktarball(char *file, char *message)
{
int done;
int tries = 0;
char commandstring[STRING_SIZE];
done = 0;
while (!done)
{
if (!got_url && gettarballurl(url, message) != 1)
return 0;
/* remove any successive /'s */
while (url[strlen(url)-1] == '/') { url[strlen(url)-1] = '\0'; }
snprintf(commandstring, STRING_SIZE, "/bin/wget -q --spider -O /dev/null %s/%s", url, file);
if (!(runcommandwithstatus(commandstring, ctr[TR_CHECKING])))
{
done = 1;
got_url = 1;
}
else
{
errorbox(ctr[TR_FAILED_TO_FIND]);
got_url = 0;
if (tries == 3)
return 1; /* failure */
}
tries++;
}
return 0;
}
static int gettarballurl(char *url, char *message)
{
char *values[] = { url, NULL }; /* pointers for the values. */
struct newtWinEntry entries[] =
{ { "", &values[0], 0,}, { NULL, NULL, 0 } };
char title[STRING_SIZE];
int rc;
sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
rc = newtWinEntries(title, message,
60, 5, 5, 50, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
strncpy(url, values[0], STRING_SIZE);
return rc;
}

View File

@@ -1,94 +0,0 @@
/* SmoothWall install program.
*
* This program is distributed under the terms of the GNU General Public
* Licence. See the file COPYING for details.
*
* (c) Lawrence Manning, 2001
* Contains stuff related to firing up the network card, including a crude
* autodector.
*
*/
#include "install.h"
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
extern FILE *flog;
extern char *mylog;
extern char **ctr;
//extern struct nic nics[];
//extern struct knic knics[];
int networkmenu(struct keyvalue *ethernetkv)
{
int rc;
char driver[STRING_SIZE] = "";
char driveroptions[STRING_SIZE] = "";
int result = 0;
char commandstring[STRING_SIZE];
char address[STRING_SIZE], netmask[STRING_SIZE];
int done;
char description[1000];
char message[1000];
char title[STRING_SIZE];
done = 0;
while (!done)
{
rc = newtWinTernary(ctr[TR_CONFIGURE_NETWORKING], ctr[TR_PROBE],
ctr[TR_SELECT], ctr[TR_CANCEL], ctr[TR_CONFIGURE_NETWORKING_LONG]);
if (rc == 0 || rc == 1)
{
probecards(driver, driveroptions);
if (!strlen(driver))
errorbox(ctr[TR_PROBE_FAILED]);
else
{
//findnicdescription(driver, description);
sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
newtWinMessage(title, ctr[TR_OK], message);
}
}
else
done = 1;
if (strlen(driver))
done = 1;
}
if (!strlen(driver))
goto EXIT;
/* Default is a GREEN nic only. */
/* Smoothie is not untarred yet, so we have to delay actually writing the
* settings till later. */
replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0");
replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0");
replacekeyvalue(ethernetkv, "GREEN_DISPLAYDRIVER", driver);
if (!(changeaddress(ethernetkv, "GREEN", 0, "")))
goto EXIT;
strcpy(address, ""); findkey(ethernetkv, "GREEN_ADDRESS", address);
strcpy(netmask, ""); findkey(ethernetkv, "GREEN_NETMASK", netmask);
snprintf(commandstring, STRING_SIZE, "/sbin/ifconfig eth0 %s netmask %s up",
address, netmask);
if (mysystem(commandstring))
{
errorbox(ctr[TR_INTERFACE_FAILED_TO_COME_UP]);
goto EXIT;
}
result = 1;
EXIT:
return result;
}