syslinux/000755 000423 000000 00000000000 11113364225 013210 5ustar00luigiwheel000000 000000 syslinux/Makefile000644 000423 000000 00000002660 11113055423 014651 0ustar00luigiwheel000000 000000 # New ports collection makefile for: syslinux # Date created: Nov.15, 2008 # Whom: luigi@FreeBSD.org # # Maintainers: Luigi Rizzo # $FreeBSD: $ # PORTNAME= syslinux PORTVERSION= 3.72 CATEGORIES= sysutils MASTER_SITES= http://www.kernel.org/pub/linux/utils/boot/syslinux/ MAINTAINER= luigi@FreeBSD.org COMMENT= Syslinux for FreeBSD MAN1= syslinux.1 BUILD_DEPENDS= nasm:${PORTSDIR}/devel/nasm RUN_DEPENDS= mtools:${PORTSDIR}/emulators/mtools USE_BZIP2= yes USE_GMAKE= yes .include # Following instructions at http://phaq.phunsites.net/2007/02/14/ # compiling-pxelinux-and-memdisk-on-freebsd/ # convert elf_i386 to elf_i386_fbsd post-extract: (cd ${WRKSRC}; \ find . -type f -exec grep -le 'elf_i386' \{\} \; | \ xargs perl -i -p -e 's/elf_i386/elf_i386_fbsd/g;' ) # utility target to build pkg-plist _A = mbr/mbr.bin mbr/gptmbr.bin _A += core/pxelinux.0 core/isolinux.bin gpxe/gpxelinux.0 _A += memdisk/memdisk _A += com32/menu/*.c32 com32/modules/*.c32 build_pkg-plist: @( echo "bin/syslinux" ; \ cd ${WRKSRC}; for i in ${_A} ; do \ echo share/syslinux/`basename $$i` ; done ; \ echo "@dirrm share/syslinux" ) do-install: ${MKDIR} ${PREFIX}/share/${PORTNAME} ( cd ${WRKSRC}; ${INSTALL_DATA} ${_A} ${PREFIX}/share/${PORTNAME} ) ${INSTALL_PROGRAM} ${WRKSRC}/mtools/syslinux ${PREFIX}/bin ${INSTALL_MAN} ${WRKSRC}/man/syslinux.1 ${PREFIX}/man/man1 .include syslinux/distinfo000644 000423 000000 00000000310 11113055423 014741 0ustar00luigiwheel000000 000000 MD5 (syslinux-3.72.tar.bz2) = 9858c801ecd36265f4374996324f01a0 SHA256 (syslinux-3.72.tar.bz2) = dc19ea3e1297468d9b4c579aba1dd491c963a02887f7fb362c95c6f1c0567e90 SIZE (syslinux-3.72.tar.bz2) = 3262688 syslinux/files/000755 000423 000000 00000000000 11113353167 014315 5ustar00luigiwheel000000 000000 syslinux/pkg-descr000644 000423 000000 00000000445 11113055423 015012 0ustar00luigiwheel000000 000000 The syslinux installs a linux bootloader on a FAT-formatted filesystem or disk image. This version can operate on plain files containing a FAT image, thus requiring no special privilege. It relies on mtools to perform the manipulation of the FAT filesystem. WWW: http://syslinux.zytor.com/ syslinux/pkg-plist000644 000423 000000 00000001135 11113055423 015042 0ustar00luigiwheel000000 000000 bin/syslinux share/syslinux/mbr.bin share/syslinux/gptmbr.bin share/syslinux/pxelinux.0 share/syslinux/isolinux.bin share/syslinux/gpxelinux.0 share/syslinux/memdisk share/syslinux/menu.c32 share/syslinux/vesamenu.c32 share/syslinux/chain.c32 share/syslinux/cpuidtest.c32 share/syslinux/dmitest.c32 share/syslinux/elf.c32 share/syslinux/ethersel.c32 share/syslinux/ifcpu64.c32 share/syslinux/linux.c32 share/syslinux/mboot.c32 share/syslinux/meminfo.c32 share/syslinux/pcitest.c32 share/syslinux/pmload.c32 share/syslinux/reboot.c32 share/syslinux/sanboot.c32 share/syslinux/sdi.c32 @dirrm share/syslinux syslinux/files/patch-1000644 000423 000000 00000011605 11113055423 015472 0ustar00luigiwheel000000 000000 diff -ubwr ./Makefile ../../work/syslinux-3.72/Makefile --- ./Makefile 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/Makefile 2008-11-25 11:38:14.000000000 +0100 @@ -48,18 +48,18 @@ # Note: libinstaller is both a BSUBDIR and an ISUBDIR. It contains # files that depend only on the B phase, but may have to be regenerated # for "make installer". -BSUBDIRS = codepage core memdisk modules com32 mbr memdump gpxe sample \ +BSUBDIRS_ = codepage core memdisk modules com32 mbr memdump gpxe sample \ libinstaller dos win32 ITARGET = IOBJECTS = $(ITARGET) dos/copybs.com \ utils/gethostip utils/isohybrid utils/mkdiskimage \ - mtools/syslinux linux/syslinux extlinux/extlinux -ISUBDIRS = libinstaller mtools linux extlinux utils + mtools/syslinux +ISUBDIRS = libinstaller mtools # Things to install in /usr/bin INSTALL_BIN = mtools/syslinux # Things to install in /sbin -INSTALL_SBIN = extlinux/extlinux +INSTALL_SBIN = #extlinux/extlinux # Things to install in /usr/lib/syslinux INSTALL_AUX = core/pxelinux.0 gpxe/gpxelinux.0 core/isolinux.bin \ core/isolinux-debug.bin \ diff -ubwr ./com32/lib/MCONFIG ../../work/syslinux-3.72/com32/lib/MCONFIG --- ./com32/lib/MCONFIG 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/com32/lib/MCONFIG 2008-11-25 11:32:22.000000000 +0100 @@ -47,7 +47,7 @@ $(CC) $(CFLAGS) -S -o $@ $< .S.o: - $(CC) $(CFLAGS) -D__ASSEMBLY__ -c -o $@ $< + $(CC) $(filter-out -std=gnu99, $(CFLAGS)) -D__ASSEMBLY__ -c -o $@ $< .S.s: $(CC) $(CFLAGS) -D__ASSEMBLY__ -E -o $@ $< diff -ubwr ./com32/libutil/md5.c ../../work/syslinux-3.72/com32/libutil/md5.c --- ./com32/libutil/md5.c 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/com32/libutil/md5.c 2008-11-25 11:32:22.000000000 +0100 @@ -27,7 +27,7 @@ */ #include -#include +#include #include static void MD5Transform(uint32_t [4], const unsigned char [64]); diff -ubwr ./com32/libutil/sha256crypt.c ../../work/syslinux-3.72/com32/libutil/sha256crypt.c --- ./com32/libutil/sha256crypt.c 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/com32/libutil/sha256crypt.c 2008-11-25 11:32:22.000000000 +0100 @@ -1,8 +1,8 @@ /* SHA256-based Unix crypt implementation. Released into the Public Domain by Ulrich Drepper . */ -#include -#include +#include +#include #include #include #include diff -ubwr ./com32/libutil/sha512crypt.c ../../work/syslinux-3.72/com32/libutil/sha512crypt.c --- ./com32/libutil/sha512crypt.c 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/com32/libutil/sha512crypt.c 2008-11-25 11:32:22.000000000 +0100 @@ -1,8 +1,8 @@ /* SHA512-based Unix crypt implementation. Released into the Public Domain by Ulrich Drepper . */ -#include -#include +#include +#include #include #include #include diff -ubwr ./mtools/syslinux.c ../../work/syslinux-3.72/mtools/syslinux.c --- ./mtools/syslinux.c 2008-09-26 01:46:02.000000000 +0200 +++ ../../work/syslinux-3.72/mtools/syslinux.c 2008-11-25 11:32:22.000000000 +0100 @@ -38,6 +38,8 @@ #include "syslinux.h" #include "libfat.h" +int verbose=0; + char *program; /* Name of program */ char *device; /* Device to install to */ pid_t mypid; @@ -159,6 +161,8 @@ while ( *opt ) { if ( *opt == 's' ) { stupid = 1; + } else if ( *opt == 'v' ) { + verbose++; } else if ( *opt == 'r' ) { raid_mode = 1; } else if ( *opt == 'f' ) { @@ -217,11 +221,9 @@ fprintf(mtc, /* "MTOOLS_NO_VFAT=1\n" */ "MTOOLS_SKIP_CHECK=1\n" /* Needed for some flash memories */ - "drive s:\n" - " file=\"/proc/%lu/fd/%d\"\n" + "drive s: file=\"%s\"\n" " offset=%llu\n", - (unsigned long)mypid, - dev_fd, + device, (unsigned long long)filesystem_offset); fclose(mtc); @@ -234,8 +236,10 @@ } /* This command may fail legitimately */ +if (verbose) fprintf(stderr, "doing mattrib\n"); system("mattrib -h -r -s s:/ldlinux.sys 2>/dev/null"); +if (verbose) fprintf(stderr, "doing mcopy\n"); mtp = popen("mcopy -D o -D O -o - s:/ldlinux.sys", "w"); if ( !mtp || (fwrite(syslinux_ldlinux, 1, syslinux_ldlinux_len, mtp) @@ -248,7 +252,9 @@ * Now, use libfat to create a block map */ fs = libfat_open(libfat_xpread, dev_fd); +if (verbose) fprintf(stderr, "libfat_open returns %p\n", fs); ldlinux_cluster = libfat_searchdir(fs, 0, "LDLINUX SYS", NULL); +if (verbose) fprintf(stderr, "libfat_searchdir returns %d\n", ldlinux_cluster); secp = sectors; nsectors = 0; s = libfat_clustertosector(fs, ldlinux_cluster); @@ -256,6 +262,7 @@ *secp++ = s; nsectors++; s = libfat_nextsector(fs, s); +if (verbose) fprintf(stderr, "libfat_nextsector returns %d\n", s); } libfat_close(fs); syslinux/files/patch-syslinux.1000644 000423 000000 00000005227 11113055423 017372 0ustar00luigiwheel000000 000000 --- man/syslinux.1 2008-09-26 01:46:02.000000000 +0200 +++ ../../files/syslinux.1 2008-11-25 15:38:02.000000000 +0100 @@ -9,20 +9,22 @@ .I device .SH DESCRIPTION \fBSyslinux\fP is a boot loader for the Linux operating system which -operates off an MS-DOS/Windows FAT filesystem. It is intended to +operates off a FAT filesystem. It is intended to simplify first-time installation of Linux, and for creation of rescue and other special-purpose boot disks. .PP -In order to create a bootable Linux floppy using \fBSyslinux\fP, prepare a -normal MS-DOS formatted floppy. Copy one or more Linux kernel files to -it, then execute the command: +In order to create a bootable Linux disk using \fBSyslinux\fP, prepare a +normal FAT formatted disk (or file image), and +execute the command: .IP .B syslinux /dev/fd0 .PP -This will alter the boot sector on the disk and copy a file named -LDLINUX.SYS into its root directory. +This will copy a file named LDLINUX.SYS into the root directory of +the disk, install a suitable boot code in the boot sector, and patch the +boot sector and LDLINUX.SYS (see \fBNOTES\fP). .PP -On boot time, by default, the kernel will be loaded from the image named +On boot time, by default, the boot loader will try to load a linux +kernel from the image named LINUX on the boot floppy. This default can be changed, see the section on the \fBsyslinux\fP configuration file. .PP @@ -36,6 +38,21 @@ .PP \fBSyslinux\fP supports the loading of initial ramdisks (initrd) and the bzImage kernel format. +.SH NOTES +The boot sector and LDLINUX.SYS rely heavily on the operation of +the \fBsyslinux\fP program to run correctly. In particular, +\fBsyslinux\fP patches the boot sector with the exact location on +the disk of the first sector of LDLINUX.SYS, and also it patches +the file LDLINUX.SYS with the exact location on the disk of each +additional sector of LDLINUX.SYS itself. +.PP +This means that if you want to prepare a new bootable disk, it is +not enough to duplicate the boot sector and LDLINUX.SYS, but you +really need to run \fBsyslinux\fP to update the sectors addresses. +.PP +The version of \fBsyslinux\fP used on FreeBSD makes use of the +\fBmtools\fP port to modify the FAT filesystem. + .SH OPTIONS .TP .B \-s @@ -380,9 +397,11 @@ .BR lilo (8), .BR keytab-lilo.pl (8), .BR fdisk (8), -.BR mkfs (8), +.BR newfs_msdos (8), +.BR mtools (1), .BR superformat (1). .SH AUTHOR This manual page is a modified version of the original \fBsyslinux\fP documentation by H. Peter Anvin . The conversion to a manpage -was made by Arthur Korn . +was made by Arthur Korn . FreeBSD-specific notes +added by Luigi Rizzo. syslinux/files/patch-boot_option000644 000423 000000 00000003414 11113353167 017672 0ustar00luigiwheel000000 000000 diff -ubwr ../../work.2/syslinux-3.72/mtools/syslinux.c ./mtools/syslinux.c --- ../../work.2/syslinux-3.72/mtools/syslinux.c 2008-11-26 13:32:57.000000000 +0100 +++ ./mtools/syslinux.c 2008-11-26 14:07:05.000000000 +0100 @@ -123,6 +123,52 @@ return xpread(pp, buf, secsize, offset); } +/* + * load a file to be used as boot image + */ +static int load_boot_image(const char *name) +{ + int l, fd; + struct stat sb; + unsigned char *buf; + + memset(&sb, 0, sizeof(sb)); + fd = open(name, O_RDONLY); + if (fd < 0) { + fprintf(stderr, "cannot open boot image %s\n", name); + return 1; + } + if (fstat(fd, &sb)) { + fprintf(stderr, "cannot stat boot image %s\n", name); + return 1; + } + if ( (sb.st_mode & S_IFREG) == 0) { + fprintf(stderr, "boot image %s is not a file 0x%x\n", name, sb.st_mode); + return 1; + } + if (sb.st_size < 1024 || sb.st_size > 0x8000) { + fprintf(stderr, "boot image %s bad size %lld\n", name, sb.st_size); + return 1; + } + buf = calloc(1, sb.st_size); + if (buf == NULL) { + fprintf(stderr, "malloc failed for boot image %s\n", name); + return 1; + } + l = read(fd, buf, sb.st_size); + if (l != sb.st_size) { + fprintf(stderr, "read failed for boot image %s got %d\n", name, l); + return 1; + } + if (buf[0] != 0xeb || buf[0x200] != 0x0d) { + fprintf(stderr, "bad content for boot image %s\n", name); + return 1; + } + syslinux_bootsect = buf; + syslinux_ldlinux = buf + 512; + syslinux_ldlinux_len = sb.st_size - 512; + return 0; +} int main(int argc, char *argv[]) { @@ -163,6 +209,8 @@ stupid = 1; } else if ( *opt == 'v' ) { verbose++; + } else if ( *opt == 'b' && argp[1] ) { + load_boot_image(*++argp); } else if ( *opt == 'r' ) { raid_mode = 1; } else if ( *opt == 'f' ) { syslinux/files/patch-2000644 000423 000000 00000002632 11113353167 015501 0ustar00luigiwheel000000 000000 diff -ubwr ../../work/syslinux-3.72/libinstaller/bin2c.pl ./libinstaller/bin2c.pl --- ../../work/syslinux-3.72/libinstaller/bin2c.pl 2008-09-26 01:46:02.000000000 +0200 +++ ./libinstaller/bin2c.pl 2008-11-26 13:32:45.000000000 +0100 @@ -27,7 +27,7 @@ $pad = 1 if ($pad < 1); -printf "unsigned char %s[] = {\n", $table_name; +printf "static unsigned char _%s[] = {\n", $table_name; $pos = 0; $linelen = 8; @@ -74,5 +74,6 @@ @st = stat STDIN; printf "\nint %s_mtime = %d;\n", $table_name, $st[9]; +printf "\nunsigned char *%s = _%s;\n", $table_name, $table_name; exit 0; diff -ubwr ../../work/syslinux-3.72/libinstaller/syslinux.h ./libinstaller/syslinux.h --- ../../work/syslinux-3.72/libinstaller/syslinux.h 2008-09-26 01:46:02.000000000 +0200 +++ ./libinstaller/syslinux.h 2008-11-26 13:32:23.000000000 +0100 @@ -17,15 +17,15 @@ #include "advconst.h" /* The standard boot sector and ldlinux image */ -extern unsigned char syslinux_bootsect[]; +extern unsigned char *syslinux_bootsect; extern unsigned int syslinux_bootsect_len; extern int syslinux_bootsect_mtime; -extern unsigned char syslinux_ldlinux[]; +extern unsigned char *syslinux_ldlinux; extern unsigned int syslinux_ldlinux_len; extern int syslinux_ldlinux_mtime; -extern unsigned char syslinux_mbr[]; +extern unsigned char *syslinux_mbr; extern unsigned int syslinux_mbr_len; extern int syslinux_mbr_mtime;