changeset 102:b5d7fd0f9315

First drop of a portage build script, by Mark Miller. For bootstrapping gentoo within the mini-native filesystem under qemu.
author Rob Landley <>
date Tue, 13 Feb 2007 13:55:26 -0500
parents 9b7fcdfbe11c
children 4b49c0baec56
diffstat 1 files changed, 177 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/	Tue Feb 13 13:55:26 2007 -0500
@@ -0,0 +1,177 @@
+#!/tools/bin/bash -x
+## This is based on the first part of the LFS manual, in regards to
+## the files that would reside in /tools. The three exceptions are 
+## wget, Python, and Perl is compiled fully.
+## Also, currently the script does not deal with
+## determing if there exist /etc/resolv.conf, so I leave that
+## up to you.
+## The initial meat for this was found at 
+##, but
+## has been heavily modified due to doing "UNINTENDED THINGS"
+## That and the developer making that script intended it
+## to be installed on an already functioning system not
+## shifted to /tools, and well, yah.
+## NOTE ON PATHS: It's assumed /bin:/usr/bin:/sbin ... /tools/bin are
+## already set for the PATH variable.
+# Version of Portage
+# NOTE: These are where you can change the processor
+# architecture you want to build for. There's also the 
+# make.profile that needs to be set later on, based on 
+# ACCEPT_KEYWORDS. (ACCEPT_KEYWORDS functions based on 
+# architecture. For example, an x86 install would just be x86, 
+# PowerPC would be ppc, et cetera.
+# They're hardcoded right now, but you get the idea
+CFLAGS="-march=i686 -O2 -pipe"
+# We need an initial directory structure to make things easier on us
+# Feel free to clean this up. This has been hand-added as portage borks
+# on me wanting a directory NOTE: This is assuming /etc exists, as 
+# noted above
+# NOTE: There exist the sys-apps/baselayout ebuild. Perhaps this would
+# be a nice thing to parse initially. Until then, ugly hack!
+mkdir /bin
+mkdir -p /usr/bin
+mkdir /usr/sbin
+mkdir -p /var/log
+mkdir /var/tmp
+mkdir /tmp
+# We also need an ugly hack right now, in order to utilize hard-coded
+# paths by the Gentoo scripts. Luckily, by using symlinks with /tools
+# prefix, it makes it easy to go in later and remove everything
+# portage didn't install, and it's only the /bin directory
+ln -s /tools/bin/* /bin/
+ln -s /tools/bin/* /usr/bin/
+# Why both? It wants python in /usr/bin. Let's just be safe in case
+# it wants others
+### ****WARNING******
+### The following is because I used a different script to bootstrap Python,
+### not the LFS way ( from the Prefix-Portage files)
+### So take this out if you built it with LFS
+ln -s /bootstrap/usr/bin/python /usr/bin/
+# Now on to bootstrapping portage. Much hardcoded stuff, 
+# but I was on intent on just getting it "to work"
+# It would also be nice to implement a way to grab the portage ebuild
+# file and just parse that, to ensure we're not missing any new additions
+# But this is what I have now.
+wget -P /var/tmp${A}
+cd /var/tmp
+tar -jxf ${A}
+python -O -c "import compileall; compileall.compile_dir('${S}/pym')"
+cd ${S}/src; gcc ${CFLAGS} tbz2tool.c -o tbz2tool 
+# There also exists a make.conf in this directory, but it's insanely
+# long, and we already know what we want to put in it initially
+cd ${S}/cnf; cp etc-update.conf dispatch-conf.conf make.globals /etc/
+# Inserts the Python modules for portage
+mkdir -p /usr/lib/portage/pym
+cd ${S}/pym
+cp -r * /usr/lib/portage/pym/
+mkdir -p /usr/lib/portage/bin
+cd ${S}/bin
+cp * ${S}/src/tbz2tool /usr/lib/portage/bin
+# Get some standard symlinks for portage apps
+for x in ebuild emerge portageq repoman tbz2tool xpak; 
+	ln -s ../lib/portage/bin/${x} /usr/bin/${x}
+for x in archive-conf dispatch-conf emaint emerge-webrsync \
+	env-update etc-update fixpackages quickpkg regenworld
+	ln -s ../lib/portage/bin/${x} /usr/sbin/${x}
+# Go ahead and create this for later
+mkdir -p /etc/portage
+# Get rid of pesky error messages for the first run
+touch /var/log/emerge.log
+# Ugly, Ugly, Ugly. But this works until I can put this into a Mercurial 
+# repository. A really nice thing to do, as noted before, is process
+# the baselayout ebuild which would take care of all this for us.
+wget -O /etc/group*checkout*/baselayout/trunk/etc/group?rev=2072
+wget -O /etc/passwd*checkout*/baselayout/trunk/etc/passwd?rev=2072
+# make.conf and make.profile should probably be set now
+echo ACCEPT_KEYWORDS='"'$ACCEPT_KEYWORDS'"' >> /etc/make.conf
+echo CHOST='"'$CHOST'"' >> /etc/make.conf
+echo CFLAGS='"'$CFLAGS'"' >> /etc/make.conf
+# Don't want mouse support now. It makes nasty cyclical dependencies in the
+# beginning. Also don't want ssl with wget. These will be removed once we
+# have enough to recompile the system
+echo 'USE="-gpm -ssl"' >> /etc/make.conf
+# Now we need a Portage Snapshot
+# It became annoying to constantly redownload this in rerunning the script.
+# This script is a mess now, though. But that's to be expected
+if [ ! -e "/var/tmp/portage-latest.tar.bz2" ] ; then
+	wget -P /var/tmp
+cd /usr
+tar -jxf /var/tmp/portage-latest.tar.bz2
+# Now we can set a make.profile
+ln -s /usr/portage/profiles/default-linux/${ARCH}/2006.1/desktop /etc/make.profile
+# And now we have portage. Let's do things with it
+# This was taken from:
+# and was the basis for the Prefix-Portage script I wrote. It's being
+# altered as I try to emerge something, fail, look at errors, rinse/repeat.
+# Setting up some environment variables
+export LD_LIBRARY_PATH="/usr/lib:/lib"
+# It wants scanelf. I don't know why. pax-utils has it, make it happy.
+emerge --oneshot pax-utils
+emerge --oneshot sed
+# bash wants yacc. The FSF should be sued.
+emerge --oneshot yacc
+emerge --oneshot bash
+# Automake
+emerge --oneshot --nodeps "=autoconf-2.1*" "=autoconf-2.6*" "autoconf-wrapper"
+emerge --oneshot --nodeps "=autoconf-2.1*" "=autoconf-2.6*" "autoconf-wrapper"
+emerge --oneshot --nodeps "=automake-1.4*" "=automake-1.5*" \
+	"=automake-1.6*" "=automake-1.7*" "=automake-1.8*" \ 
+	"automake-wrapper"
+emerge --oneshot --nodeps wget
+emerge --oneshot --nodeps sys-apps/texinfo
+emerge --oneshot --nodeps "=automake-1.9*" "=automake-1.10*"
+emerge --oneshot --nodeps libtool
+emerge --oneshot --nodeps sys-apps/coreutils
+emerge --oneshot gawk
+# emerge --oneshot --nodeps python
+env FEATURES="-collision-protect" emerge --oneshot --nodeps portage
+emerge --oneshot --nodeps baselayout
+emerge -e system