mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
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:
72
lfs/pxe
72
lfs/pxe
@@ -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/*
|
||||
1
make.sh
1
make.sh
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user