Hello! I just finished compiling the linuxboot ISO on a brand new CentOS 5 install. There were a few difficult areas, so I wanted to document it for others, and maybe get one or two of them fixed. Here is what I did:
I installed a minimal CentOS 5 system. I then installed the needed tools using yum: yum install samba subversion gcc gcc44 flex bison gcc-c++ mkisofs I then did a full update (as of 2010/06/21): yum update shutdown -r now I then created a directory for my Unattended install and downloaded the trunk via Subversion (as of 2010/06/21): mkdir /data mkdir /data/unattended cd /data/unattended svn checkout https://unattended.svn.sourceforge.net/svnroot/unattended/trunk/ I then started the process of building the ISO: cd trunk/linuxboot make download (Wait a while...) make iso This is where I ran into my first difficulty. The Linux kernel will compile successfully, but glibc will not. It fails with a configure error: missing cpuid.h. CentOS 5 is using GCC 4.1. I needed to install GCC 4.4 (which I added above) and change the make command: make CC=gcc44 iso (NOTE: For those following along at home, I also do a "rm -rf <failed package directory> & make download" so as to start with a clean compile each time.) Now, I ran into a second error: The glibc compile fails with an undefined reference to `__sync_bool_compare_and_swap_4' because the target is i386, but the system it's running on is i686. I would *prefer* that the glibc be compiled for i386, but I couldn't figure out how to make that work. So, instead, I had to compile glibc for i686: CFLAGS="-march=i686" make CC=gcc44 iso My next error: DOSEMU will not compile with GCC >= 4.3! So, after the DOSEMU compile failed, I had to again modify the command back to: make iso My next error: pciutils won't compile. It won't use the glibc 2.7 compiled above to resolve symbols, so it gives me an unresolved symbol error, which I seem to have neglected to record. In any case, I could not correct this with a change to the command line. Rather, to fix it, I had to modify the pciutils Makefile: Find the following line: lspci: lspci.o ls-vpd.o ls-caps.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/$(PCILIB) Add the following after lspci: /data/unattended/trunk/linuxboot/stage1/lib/libc.so The complete line will be: lspci: /data/unattended/trunk/linuxboot/stage1/lib/libc.so lspci.o ls-vpd.o ls-caps.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/$(PCILIB) Restart the compile. pciutils compiles successfully, but now I get an error in zlib! It tells me that my system does not support shared libraries, and therefore there is nothing to do to build the target of a shared library! This time, I had to change the linuxboot Makefile: Find "zlibc " (with a space) to take you to the zlib section of the Makefile Scroll down and find the line: && CC="$(CC)" CFLAGS="-O $(fakelib_cflags)" \ Remove the "$(fakelib_cflags)" part. The line would then be be: && CC="$(CC)" CFLAGS="-O " \ Restart the compile, and it finally finishes the compiles and generates a linuxboot.iso. (In the interest of completeness, here is a brief summary of the changes I made to minimally configure the rest of the system to test the CD:) Add a share to Samba Add the guest user account Start the Samba server Run prepare (and wait a long while! :) ) Copy a Window XP i386 directory to the server I then booted the newly-created CD and ran through the wizard (using the nt5x installer, not DOSEMU) successfully--at least, I got to the Window XP GUI install portion... There are a few areas where I would appreciate some help: 1) How do you handle the conflict where glibc won't compile with GCC older than 4.3, and DOSEMU won't compile with GCC 4.3 or newer? Is there a cleaner way than simply waiting for things to fail and change compilers? 2) Can the linuxboot Makefile be modified to properly handle cross-compiling glibc for i386 on a system configured for i686? Or is there a package I need on my CentOS 5 system to add the i386 atomics? 3) Is there a cleaner way of adding the newly-compiled glibc library to the pciutils Makefile? Could that be added to the linuxboot compile process? 4) Is there a better way of getting zlib to realize that the system *will* handle shared libraries than just tearing out the fakelib? I'm afraid that I'm ending up with a zlib that won't work within the boot CD environment. 5) I *very* much miss the way that previous CD's automatically booted into the kernel! Seeing as I'm compiling my own, I can change it, but I do not understand why it was made to simply pause there forever, at a menu with a *single* choice. When you're installing 20 systems at a time, having to either wait or go back to the systems just to press <ENTER> is more than a little annoying... In any case, I believe I have a working boot CD. Hopefully, this walkthrough will save someone else some time and aggravation. Timothy J. Massey Out of the Box Solutions, Inc. ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ unattended-devel mailing list unattended-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/unattended-devel