diff --git a/gpxe/gpxe-0.9.5.tar.bz2 b/gpxe/gpxe-0.9.5.tar.bz2 deleted file mode 100644 index 6a304f7..0000000 Binary files a/gpxe/gpxe-0.9.5.tar.bz2 and /dev/null differ diff --git a/gpxe/gpxe-0.9.7-kvmworkaround.patch b/gpxe/gpxe-0.9.7-kvmworkaround.patch new file mode 100644 index 0000000..0465308 --- /dev/null +++ b/gpxe/gpxe-0.9.7-kvmworkaround.patch @@ -0,0 +1,11 @@ +diff -urN gpxe-0.9.7/src/arch/i386/prefix/romprefix.S gpxe-0.9.7-kvmworkaround/src/arch/i386/prefix/romprefix.S +--- gpxe-0.9.7/src/arch/i386/prefix/romprefix.S 2009-03-01 21:23:42.000000000 -0500 ++++ gpxe-0.9.7-kvmworkaround/src/arch/i386/prefix/romprefix.S 2009-03-13 13:27:43.000000000 -0400 +@@ -716,6 +716,7 @@ + 1: pushf + sti + hlt ++ nop + popf + cmpl %fs:(0x6c), %eax + je 1b diff --git a/gpxe/gpxe-0.9.7-registeriscsionpxe.patch b/gpxe/gpxe-0.9.7-registeriscsionpxe.patch new file mode 100644 index 0000000..0246029 --- /dev/null +++ b/gpxe/gpxe-0.9.7-registeriscsionpxe.patch @@ -0,0 +1,127 @@ +diff -urN gpxe-0.9.7/src/arch/i386/interface/pcbios/iscsiboot.c gpxe-0.9.7-registeriscsionpxe/src/arch/i386/interface/pcbios/iscsiboot.c +--- gpxe-0.9.7/src/arch/i386/interface/pcbios/iscsiboot.c 2009-03-01 21:23:42.000000000 -0500 ++++ gpxe-0.9.7-registeriscsionpxe/src/arch/i386/interface/pcbios/iscsiboot.c 2009-03-13 14:01:42.000000000 -0400 +@@ -20,6 +20,55 @@ + .type = &setting_type_int8, + }; + ++static int iscsireg ( const char *root_path ) { ++ struct scsi_device *scsi; ++ struct int13_drive *drive; ++ int rc; ++ ++ scsi = zalloc ( sizeof ( *scsi ) ); ++ if ( ! scsi ) { ++ rc = -ENOMEM; ++ goto regerr_alloc_scsi; ++ } ++ drive = zalloc ( sizeof ( *drive ) ); ++ if ( ! drive ) { ++ rc = -ENOMEM; ++ goto regerr_alloc_drive; ++ } ++ ++ printf ( "Configuring iSCSI at %s\n", root_path ); ++ ++ if ( ( rc = iscsi_attach ( scsi, root_path ) ) != 0 ) { ++ printf ( "Could not attach iSCSI device: %s\n", ++ strerror ( rc ) ); ++ goto regerr_attach; ++ } ++ if ( ( rc = init_scsidev ( scsi ) ) != 0 ) { ++ printf ( "Could not initialise iSCSI device: %s\n", ++ strerror ( rc ) ); ++ goto regerr_init; ++ } ++ ++ drive->blockdev = &scsi->blockdev; ++ ++ /* FIXME: ugly, ugly hack */ ++ struct net_device *netdev = last_opened_netdev(); ++ struct iscsi_session *iscsi = ++ container_of ( scsi->backend, struct iscsi_session, refcnt ); ++ ibft_fill_data ( netdev, iscsi ); ++ ++ register_int13_drive ( drive ); ++ printf ( "Registered as BIOS drive %#02x\n", drive->drive ); ++ return 0; ++ regerr_init: ++ iscsi_detach ( scsi ); ++ regerr_attach: ++ free ( drive ); ++ regerr_alloc_drive: ++ free ( scsi ); ++ regerr_alloc_scsi: ++ return rc; ++} + static int iscsiboot ( const char *root_path ) { + struct scsi_device *scsi; + struct int13_drive *drive; +@@ -85,7 +134,9 @@ + return rc; + } + ++ + struct sanboot_protocol iscsi_sanboot_protocol __sanboot_protocol = { + .prefix = "iscsi:", + .boot = iscsiboot, ++ .reg = iscsireg, + }; +diff -urN gpxe-0.9.7/src/include/gpxe/sanboot.h gpxe-0.9.7-registeriscsionpxe/src/include/gpxe/sanboot.h +--- gpxe-0.9.7/src/include/gpxe/sanboot.h 2009-03-01 21:23:42.000000000 -0500 ++++ gpxe-0.9.7-registeriscsionpxe/src/include/gpxe/sanboot.h 2009-03-13 13:57:04.000000000 -0400 +@@ -6,6 +6,7 @@ + struct sanboot_protocol { + const char *prefix; + int ( * boot ) ( const char *root_path ); ++ int ( * reg ) ( const char *root_path ); + }; + + #define __sanboot_protocol \ +diff -urN gpxe-0.9.7/src/usr/autoboot.c gpxe-0.9.7-registeriscsionpxe/src/usr/autoboot.c +--- gpxe-0.9.7/src/usr/autoboot.c 2009-03-01 21:23:42.000000000 -0500 ++++ gpxe-0.9.7-registeriscsionpxe/src/usr/autoboot.c 2009-03-13 13:58:43.000000000 -0400 +@@ -115,6 +115,23 @@ + } + + /** ++ * Register a drive in BIOS, but don't boot from it ++ * ++ * @v root_path Root path ++ * * @ret rc Return status code ++ */ ++int reg_root_path ( const char *root_path ) { ++ struct sanboot_protocol *sanboot; ++ for ( sanboot = sanboot_protocols ; ++ sanboot < sanboot_protocols_end ; sanboot++ ) { ++ if ( strncmp ( root_path, sanboot->prefix, ++ strlen ( sanboot->prefix ) ) == 0 ) { ++ return sanboot->reg ( root_path ); ++ } ++ } ++ return -ENOTSUP; ++} ++/** + * Boot using root path + * + * @v root_path Root path +@@ -149,6 +166,7 @@ + struct setting pxe_boot_menu_setting + = { .tag = DHCP_PXE_BOOT_MENU }; + char buf[256]; ++ char ruf[256]; + struct in_addr next_server; + unsigned int pxe_discovery_control; + int rc; +@@ -188,6 +206,11 @@ + fetch_ipv4_setting ( NULL, &next_server_setting, &next_server ); + fetch_string_setting ( NULL, &filename_setting, buf, sizeof ( buf ) ); + if ( buf[0] ) { ++ /* Going to PXE, but set up iBFT if applicable first */ ++ fetch_string_setting(NULL, &root_path_setting,ruf,sizeof(ruf)); ++ if (ruf[0]) { ++ reg_root_path ( ruf ); ++ } + printf ( "Booting from filename \"%s\"\n", buf ); + return boot_next_server_and_filename ( next_server, buf ); + } diff --git a/gpxe/gpxe-0.9.7-strip.patch b/gpxe/gpxe-0.9.7-strip.patch new file mode 100644 index 0000000..132ed68 --- /dev/null +++ b/gpxe/gpxe-0.9.7-strip.patch @@ -0,0 +1,84 @@ +diff -urN gpxe-0.9.7/src/config/general.h gpxe-0.9.7-strip/src/config/general.h +--- gpxe-0.9.7/src/config/general.h 2009-03-01 21:23:42.000000000 -0500 ++++ gpxe-0.9.7-strip/src/config/general.h 2009-04-12 09:32:49.000000000 -0400 +@@ -29,7 +29,7 @@ + * Timer configuration + * + */ +-#define BANNER_TIMEOUT 20 /* Tenths of a second for which the shell ++#define BANNER_TIMEOUT 5 /* Tenths of a second for which the shell + banner should appear */ + + /* +@@ -46,9 +46,9 @@ + + #define DOWNLOAD_PROTO_TFTP /* Trivial File Transfer Protocol */ + #undef DOWNLOAD_PROTO_NFS /* Network File System */ +-#define DOWNLOAD_PROTO_HTTP /* Hypertext Transfer Protocol */ ++#undef DOWNLOAD_PROTO_HTTP /* Hypertext Transfer Protocol */ + #undef DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */ +-#undef DOWNLOAD_PROTO_FTP /* File Transfer Protocol */ ++#define DOWNLOAD_PROTO_FTP /* File Transfer Protocol */ + #undef DOWNLOAD_PROTO_TFTM /* Multicast Trivial File Transfer Protocol */ + #undef DOWNLOAD_PROTO_SLAM /* Scalable Local Area Multicast */ + #undef DOWNLOAD_PROTO_FSP /* FSP? */ +@@ -59,7 +59,7 @@ + */ + + //#undef SANBOOT_PROTO_ISCSI /* iSCSI protocol */ +-//#undef SANBOOT_PROTO_AOE /* AoE protocol */ ++#undef SANBOOT_PROTO_AOE /* AoE protocol */ + + /* + * Name resolution modules +@@ -76,31 +76,31 @@ + * you want to use. + * + */ +-//#define IMAGE_NBI /* NBI image support */ +-//#define IMAGE_ELF /* ELF image support */ +-//#define IMAGE_FREEBSD /* FreeBSD kernel image support */ +-//#define IMAGE_MULTIBOOT /* MultiBoot image support */ +-//#define IMAGE_AOUT /* a.out image support */ +-//#define IMAGE_WINCE /* WinCE image support */ +-//#define IMAGE_PXE /* PXE image support */ +-//#define IMAGE_SCRIPT /* gPXE script image support */ +-//#define IMAGE_BZIMAGE /* Linux bzImage image support */ +-//#define IMAGE_COMBOOT /* SYSLINUX COMBOOT image support */ +-//#define IMAGE_EFI /* EFI image support */ ++#undef IMAGE_NBI /* NBI image support */ ++#undef IMAGE_ELF /* ELF image support */ ++#undef IMAGE_FREEBSD /* FreeBSD kernel image support */ ++#undef IMAGE_MULTIBOOT /* MultiBoot image support */ ++#undef IMAGE_AOUT /* a.out image support */ ++#undef IMAGE_WINCE /* WinCE image support */ ++#define IMAGE_PXE /* PXE image support */ ++#define IMAGE_SCRIPT /* gPXE script image support */ ++#define IMAGE_BZIMAGE /* Linux bzImage image support */ ++#undef IMAGE_COMBOOT /* SYSLINUX COMBOOT image support */ ++#undef IMAGE_EFI /* EFI image support */ + + /* + * Command-line commands to include + * + */ +-#define AUTOBOOT_CMD /* Automatic booting */ +-#define NVO_CMD /* Non-volatile option storage commands */ +-#define CONFIG_CMD /* Option configuration console */ +-#define IFMGMT_CMD /* Interface management commands */ +-#define ROUTE_CMD /* Routing table management commands */ ++#undef AUTOBOOT_CMD /* Automatic booting */ ++#undef NVO_CMD /* Non-volatile option storage commands */ ++#undef CONFIG_CMD /* Option configuration console */ ++#undef IFMGMT_CMD /* Interface management commands */ ++#undef ROUTE_CMD /* Routing table management commands */ + #define IMAGE_CMD /* Image management commands */ +-#define DHCP_CMD /* DHCP management commands */ +-#define SANBOOT_CMD /* SAN boot commands */ +-#define LOGIN_CMD /* Login command */ ++#undef DHCP_CMD /* DHCP management commands */ ++#undef SANBOOT_CMD /* SAN boot commands */ ++#undef LOGIN_CMD /* Login command */ + + /* + * Obscure configuration options diff --git a/gpxe/gpxe-0.9.7.tar.gz b/gpxe/gpxe-0.9.7.tar.gz new file mode 100644 index 0000000..e5004b0 Binary files /dev/null and b/gpxe/gpxe-0.9.7.tar.gz differ diff --git a/gpxe/gpxe-kvm.spec b/gpxe/gpxe-kvm.spec new file mode 100644 index 0000000..6d9de44 --- /dev/null +++ b/gpxe/gpxe-kvm.spec @@ -0,0 +1,59 @@ +Name: gpxe-kvm +Version: 0.9.7 +Release: 1 +Summary: gPXE loader for virtual guests + +Group: System Environment/Kernel +License: GPL +URL: http://etherboot.org/wiki/index.php +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release} + +ExclusiveArch: i386 x86_64 + + +%define Distribution %(rpm -q -qf /etc/redhat-release --qf '%%{name}' | cut -d"-" -f 1) +%define os_version %(rpm -q --qf '%%{version}' %{Distribution}-release) +%define os_release %(rpm -q --qf '%%{release}' %{Distribution}-release | cut -d"." -f 1) + + +Source0: gpxe-0.9.7.tar.gz +Patch0: gpxe-0.9.7-kvmworkaround.patch +Patch1: gpxe-0.9.7-registeriscsionpxe.patch +Patch2: gpxe-0.9.7-strip.patch + +%description +The gPXE network bootloader provides network boot capability for virtual machines with e1000 and virtio network devices. This includes iSCSI and PXE with tftp or ftp image download capability. + +%prep + +%setup -n gpxe-%{version} +%patch -p1 +%patch1 -p1 +%patch2 -p1 + +%build + +rm -rf %{buildroot} + +cd src +make bin/e1000.rom +make bin/virtio-net.rom + + +%install + +mkdir -p %{buildroot}/usr/share/qemu/ +cp src/bin/e1000.rom %{buildroot}/usr/share/qemu/pxe-e1000.bin +cp src/bin/virtio-net.rom %{buildroot}/usr/share/qemu/pxe-virtio.bin + + +%post + +%preun + +%clean +%{__rm} -rf %{buildroot} + +%files +/usr +%changelog diff --git a/gpxe/gpxe-undi.spec b/gpxe/gpxe-undi.spec new file mode 100644 index 0000000..ddbacd7 --- /dev/null +++ b/gpxe/gpxe-undi.spec @@ -0,0 +1,55 @@ +Name: gpxe-undi +Version: 0.9.7 +Release: 1 +Summary: gPXE loader for PXE clients + +Group: System Environment/Kernel +License: GPL +URL: http://etherboot.org/wiki/index.php +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release} +BuildArch: noarch + +%define Distribution %(rpm -q -qf /etc/redhat-release --qf '%%{name}' | cut -d"-" -f 1) +%define os_version %(rpm -q --qf '%%{version}' %{Distribution}-release) +%define os_release %(rpm -q --qf '%%{release}' %{Distribution}-release | cut -d"." -f 1) + + +Source0: gpxe-0.9.7.tar.gz +Patch0: gpxe-0.9.7-kvmworkaround.patch +Patch1: gpxe-0.9.7-registeriscsionpxe.patch +Patch2: gpxe-0.9.7-strip.patch + +%description +The gPXE network bootloader provides enhanced boot features for any UNDI compliant x86 host. This includes iSCSI, ftp downloads, and gPXE script based booting. + +%prep + +%setup -n gpxe-%{version} +%patch -p1 +%patch1 -p1 +%patch2 -p1 + +%build + +rm -rf %{buildroot} + +cd src +make bin/undionly.kpxe + + +%install + +mkdir -p %{buildroot}/tftpboot/ +cp src/bin/undionly.kpxe %{buildroot}/tftpboot/undionly.kpxe + + +%post + +%preun + +%clean +%{__rm} -rf %{buildroot} + +%files +/tftpboot/undionly.kpxe +%changelog