[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[patch] debootstrap basedebs tarball support



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


Reply to: