# HG changeset patch # User Rob Landley # Date 1171392926 18000 # Node ID b5d7fd0f9315639b77b4f185c4ae8de0c6ae40f3 # Parent 9b7fcdfbe11c54a355ac1eb06871edda57b2ffe4 First drop of a portage build script, by Mark Miller. For bootstrapping gentoo within the mini-native filesystem under qemu. diff -r 9b7fcdfbe11c -r b5d7fd0f9315 build-portage.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build-portage.sh 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 +## http://dev.gentoo.org/~vapier/bootstrap-portage, 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 +PV=2.1.2 + +# CFLAGS, CHOST, ACCEPT_KEYWORDS, ARCH +# 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 +ACCEPT_KEYWORDS="x86" +ARCH="x86" +CFLAGS="-march=i686 -O2 -pipe" +CHOST="i386-pc-linux-gnu" + +# 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 (bootstrap-prefix.sh 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. + +A=portage-${PV}.tar.bz2 +S=/var/tmp/portage-${PV} + +wget -P /var/tmp http://gentoo.osuosl.org/distfiles/${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; +do + ln -s ../lib/portage/bin/${x} /usr/bin/${x} +done + +for x in archive-conf dispatch-conf emaint emerge-webrsync \ + env-update etc-update fixpackages quickpkg regenworld +do + ln -s ../lib/portage/bin/${x} /usr/sbin/${x} +done + +# 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 http://sources.gentoo.org/viewcvs.py/*checkout*/baselayout/trunk/etc/group?rev=2072 +wget -O /etc/passwd http://sources.gentoo.org/viewcvs.py/*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 http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2 +fi +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: +# http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap-macos.xml +# 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