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

72
lfs/pxe
View File

@@ -1,72 +0,0 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###############################################################################
###############################################################################
# Definitions
###############################################################################
include Config
VER = ipfire
THISAPP = pxe
TARGET = $(DIR_INFO)/$(THISAPP)
###############################################################################
# Top-level Rules
###############################################################################
install : $(TARGET)
check :
download :
md5 :
###############################################################################
# Installation Details
###############################################################################
$(TARGET) :
# Create install pxe package as an alternate way to boot during install
rm -rf /tmp/*
mkdir -p /tmp/$(VERSION) /tmp/pxelinux.cfg
cp /usr/lib/syslinux/pxelinux.0 /tmp
cp /install/images/initrd /tmp/$(VERSION)/instroot
cp /boot/vmlinuz-$(KVER)-ipfire /tmp/$(VERSION)/vmlinuz
cp $(DIR_SRC)/config/syslinux/options.msg /tmp/$(VERSION)/options.msg
cp $(DIR_SRC)/config/syslinux/splash.lss /tmp/$(VERSION)/splash.lss
cp /usr/lib/memtest86+/memtest.bin /tmp/$(VERSION)/memtest
sed -e "s|splash.lss|$(VERSION)/splash.lss|" \
$(DIR_SRC)/config/syslinux/boot.msg \
> /tmp/$(VERSION)/boot.msg
sed -e "s|vmlinuz|$(VERSION)/vmlinuz|" \
-e "s|instroot|$(VERSION)/instroot|" \
-e "s|KERNEL memtest|KERNEL $(VERSION)/memtest|" \
-e "s|boot.msg|$(VERSION)/boot.msg|" \
-e "s|options.msg|$(VERSION)/options.msg|" \
$(DIR_SRC)/config/syslinux/syslinux.cfg \
> /tmp/pxelinux.cfg/$(SNAME)-pxe-$(VERSION).model
ln -s $(SNAME)-pxe-$(VERSION).model /tmp/pxelinux.cfg/default
chmod 444 /tmp/$(VERSION)/instroot
cd /tmp && tar cvzf \
/install/images/$(SNAME)-$(VERSION).$(MACHINE)-pxe.tgz *
rm -rf /tmp/*

View File

@@ -598,7 +598,6 @@ buildpackages() {
if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
ipfiremake usb-stick
fi
ipfiremake pxe
mv $LFS/install/images/{*.iso,*.tgz,*.img.gz} $BASEDIR >> $LOGFILE 2>&1
ipfirepackages

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;
}