I have written a patch to debootstrap which implements support for acquiring .debs via a tarball instead of the network. the way this works is you give debootstrap a mirror of tar://some/where/basedebs.tgz instead of a normal file:// or http:// URL. debootstrap will extract the tarball in $TARGET/var and then proceed as if it just downloaded all the packages via the network. the tarball must contain cache/apt/archives/ and lib/apt/lists (or state/apt/lists). i wrote a basic script to build a basedebs.tgz its included in this patch. for this script to work i needed a --download-only option to debootstrap, so i added that as well. Note that this does not attempt to solve the root filesystem base tarball that some people want for setting up NFS roots. i don't think that needs to be supported in either debootstrap or the boot-floppies. rather i think someone should make a debian package say nfsroot-pmac which in its build process runs debootstrap and then tars up the result. (or something similar). this tarball acquisition method for debootstrap would simply be to solve the ppp problem we have now, without saying `ffs! buy a CD! foad!' all b-f would have to do is add a single extra option: `tarball on mounted filesystem' where the user would pick a basedebs.tgz on a mounted filesystem (hard disk partition most likely) and dbootstrap would just run debootstrap using tar://instmnt/basedebs.tgz as its mirror. easy. i post this here just to get comments on the implementation. if we decide that supporting a basedebs.tgz in b-f is useful i think this is the least problematic way to go about it. i see no reason for b-f to support a root filesystem tarball since the only reason anyone seems to want one is setting up NFS roots for different archetecures, that task does not use b-f, so these can be built/kept somewhere else. -- Ethan Benson http://www.alaska.net/~erbenson/
diff -urN debootstrap.orig/debootstrap-0.1.12/debootstrap debootstrap/debootstrap-0.1.12/debootstrap --- debootstrap.orig/debootstrap-0.1.12/debootstrap Mon Jun 11 02:50:55 2001 +++ debootstrap/debootstrap-0.1.12/debootstrap Wed Jun 20 05:55:16 2001 @@ -14,6 +14,11 @@ shift fi +if [ "$1" = "--download-only" ]; then + DOWNLOAD_ONLY=yes + shift +fi + if [ "$1" = "--arch" ]; then ARCH="$2" shift; shift; @@ -54,7 +59,7 @@ error 1 "Couldn't work out current architecture" fi -export MIRRORS ARCH SUITE TARGET +export MIRRORS ARCH SUITE TARGET DOWNLOAD_ONLY if [ "$JUST_PRINT_DEBS" = "" -a -x /usr/bin/id ] && [ `id -u` -ne 0 ]; then error 1 "debootstrap can only run as root" diff -urN debootstrap.orig/debootstrap-0.1.12/functions debootstrap/debootstrap-0.1.12/functions --- debootstrap.orig/debootstrap-0.1.12/functions Sun May 27 20:43:02 2001 +++ debootstrap/debootstrap-0.1.12/functions Wed Jun 20 05:55:16 2001 @@ -61,6 +61,9 @@ "main") export DOWNLOAD=download_main ;; + "tar") + export DOWNLOAD=unpack_basetar + ;; *) error 1 "unknown mirror style" ;; @@ -300,6 +303,29 @@ error 1 "Couldn't download $p" fi done +} + +unpack_basetar () +{ + local t1="${MIRRORS%% *}" + + if [ "${t1#tar:}" != "$t1" ]; then + local basetar="${t1#tar:}" + if [ "${basetar#//}" != "$basetar" ]; then + basetar="/${basetar#//}" + fi + if [ -e "$basetar" ]; then + mkdir -p $TARGET/var + cd $TARGET/var + info "Extracting base archive tarball $basetar..." + zcat "$basetar" | tar -xf - || error 1 "Extraction failed" + return 0 + else + error 1 "$basetar: No such file or directory" + fi + else + error 1 "unknown location $t1" + fi } ################################################################ extraction diff -urN debootstrap.orig/debootstrap-0.1.12/mkbasetar debootstrap/debootstrap-0.1.12/mkbasetar --- debootstrap.orig/debootstrap-0.1.12/mkbasetar Wed Dec 31 14:00:00 1969 +++ debootstrap/debootstrap-0.1.12/mkbasetar Wed Jun 20 05:55:16 2001 @@ -0,0 +1,67 @@ +#! /bin/sh -e + +TMP="${TMPDIR:-/var/tmp}" +FILE="$(pwd)/basedebs.tgz" +umask 022 + +info() +{ + echo "I: $1" +} + +error() +{ + echo 1>&2 "E: $2" + exit $1 +} + +if [ "$1" = "--arch" ]; then + ARCH="$2" + shift; shift; +fi + +if [ "$1" = "--file" ]; then + FILE="$2" + case "$FILE" in + /*) + ;; + *) + FILE="$(pwd)/$FILE" + ;; + esac + shift; shift; +fi + +if [ "$1" = "" ]; then + info "args are: [--arch arch] [--file filename] <suite> [<mirror> [<script>]]" + error 1 "You must specify a suite." +fi + +SUITE="$1" +mkdir -m 755 "$TMP/debootstrap.$$" || error 1 "Could not create temporary directory" +TARGET="$TMP/debootstrap.$$" + +if [ "$3" != "" ]; then + MIRRORS="$3" + if [ "$4" != "" ]; then + SCRIPT="$4" + fi +fi + +if [ -n "$ARCH" ] ; then + ARGS="--download-only --arch $ARCH $SUITE $TARGET $MIRRORS $SCRIPT" +else + ARGS="--download-only $SUITE $TARGET $MIRRORS $SCRIPT" +fi + +debootstrap $ARGS +rm -f "$FILE" +tempfile -n "$FILE" +cd "$TMP/debootstrap.$$/var" +info "Building basedebs tarball: $FILE..." +tar -cf - cache/apt/archives lib/apt/lists | gzip -c > "$FILE" || \ + error 1 "Creation of basedebs tarball failed" + +info "base archive $FILE created successfully" + +exit 0 diff -urN debootstrap.orig/debootstrap-0.1.12/potato debootstrap/debootstrap-0.1.12/potato --- debootstrap.orig/debootstrap-0.1.12/potato Wed May 9 02:32:52 2001 +++ debootstrap/debootstrap-0.1.12/potato Wed Jun 20 05:55:16 2001 @@ -1,5 +1,13 @@ -mirror_style release +case "${MIRRORS%% *}" in + tar://*) + mirror_style tar + ;; + *) + mirror_style release + ;; +esac + download_style apt var-state required="base-files base-passwd bash bsdutils debconf-tiny debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname ldso libdb2 libgdbmg1 libncurses5 libnewt0 libpam-modules libpam-runtime libpam0g libpopt0 libreadline4 libstdc++2.10 login makedev mawk modutils mount ncurses-base ncurses-bin passwd perl-5.005-base perl-base procps sed shellutils slang1 sysklogd sysvinit tar textutils update util-linux whiptail" @@ -14,6 +22,10 @@ esac download $required $base + +if [ "$DOWNLOAD_ONLY" = yes ] ; then + exit 0 +fi extract $required diff -urN debootstrap.orig/debootstrap-0.1.12/sid.is-broken debootstrap/debootstrap-0.1.12/sid.is-broken --- debootstrap.orig/debootstrap-0.1.12/sid.is-broken Sat Apr 21 05:06:08 2001 +++ debootstrap/debootstrap-0.1.12/sid.is-broken Wed Jun 20 05:55:16 2001 @@ -1,5 +1,13 @@ -mirror_style release +case "${MIRRORS%% *}" in + tar://*) + mirror_style tar + ;; + *) + mirror_style release + ;; +esac + download_style apt required="apt base-files base-passwd bash bsdutils debconf debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname ldso libc6 libdb2 libgdbmg1 libncurses5 libnewt0 libpam-modules libpam-runtime libpam0g libpopt0 libreadline4 libstdc++2.10 libstdc++2.10-glibc2.2 login makedev mawk mbr modutils mount ncurses-base ncurses-bin passwd perl-5.6-base perl-base procps sed shellutils slang1 sysklogd sysvinit tar textutils update util-linux whiptail" @@ -7,6 +15,10 @@ base="at bsdmainutils console-apt console-data console-tools console-tools-libs cpio cron ed exim gettext-base groff grub ifupdown info ipchains libident libncurses4 libopenldap-runtime libopenldap1 libpcre2 libpcre3 libwrap0 logrotate mailx man-db manpages modconf nano net-tools netbase netkit-inetd netkit-ping nvi ppp setserial syslinux tasksel tcpd telnet" download $required $base + +if [ "$DOWNLOAD_ONLY" = yes ] ; then + exit 0 +fi extract $required diff -urN debootstrap.orig/debootstrap-0.1.12/slink debootstrap/debootstrap-0.1.12/slink --- debootstrap.orig/debootstrap-0.1.12/slink Sat Apr 21 05:06:17 2001 +++ debootstrap/debootstrap-0.1.12/slink Wed Jun 20 05:55:16 2001 @@ -1,5 +1,13 @@ -mirror_style main +case "${MIRRORS%% *}" in + tar://*) + mirror_style tar + ;; + *) + mirror_style main + ;; +esac + download_style apt var-state required="base-files base-passwd bash bsdutils debianutils diff dpkg e2fsprogs fileutils findutils grep gzip hostname ldso libdb2 libgdbmg1 libncurses4 ncurses3.4 libpam0g libpam0g-util libpwdb0g libreadlineg2 libstdc++2.9 login makedev mawk modutils mount ncurses-base ncurses-bin newt0.25 passwd perl-base procps sed shellutils slang1 sysklogd sysvinit tar textutils update util-linux whiptail" @@ -14,6 +22,10 @@ esac download $required $base + +if [ "$DOWNLOAD_ONLY" = yes ] ; then + exit 0 +fi extract $required diff -urN debootstrap.orig/debootstrap-0.1.12/woody debootstrap/debootstrap-0.1.12/woody --- debootstrap.orig/debootstrap-0.1.12/woody Fri Jun 15 17:18:57 2001 +++ debootstrap/debootstrap-0.1.12/woody Wed Jun 20 05:55:16 2001 @@ -1,8 +1,20 @@ -mirror_style release +case "${MIRRORS%% *}" in + tar://*) + mirror_style tar + ;; + *) + mirror_style release + ;; +esac + download_style apt download $required $base + +if [ "$DOWNLOAD_ONLY" = yes ] ; then + exit 0 +fi extract $required
Attachment:
pgpvbzL91Jtkt.pgp
Description: PGP signature