| Index: src/scripts/install_packages.sh
 | 
| diff --git a/src/scripts/install_packages.sh b/src/scripts/install_packages.sh
 | 
| index d98f7be09910fb7eeaf55926c3fd10b92f798369..341a1f2a9c6754868b1248ffcb44587a9fc5e6d4 100755
 | 
| --- a/src/scripts/install_packages.sh
 | 
| +++ b/src/scripts/install_packages.sh
 | 
| @@ -30,7 +30,7 @@ DEFINE_string build_root "$DEFAULT_BUILD_ROOT"                \
 | 
|    "Root of build output"
 | 
|  DEFINE_string package_list "$DEFAULT_PKGLIST" \
 | 
|    "The package list file to use."
 | 
| -DEFINE_string server "$DEFAULT_IMG_MIRROR" \
 | 
| +DEFINE_string server "$DEFAULT_EXT_MIRROR" \
 | 
|    "The package server to use."
 | 
|  DEFINE_string suite "$DEFAULT_IMG_SUITE" \
 | 
|    "The package suite to use."
 | 
| @@ -146,113 +146,97 @@ EOF
 | 
|  # TODO: Full audit of the apt conf dump to make sure things are ok.
 | 
|  apt-config dump > "${OUTPUT_DIR}/apt.conf.dump"
 | 
|  
 | 
| -# Add debootstrap link for the suite, if it doesn't exist.
 | 
| -if [ ! -e "/usr/share/debootstrap/scripts/$FLAGS_suite" ]
 | 
| -then
 | 
| -  sudo ln -s /usr/share/debootstrap/scripts/jaunty \
 | 
| -    "/usr/share/debootstrap/scripts/$FLAGS_suite"
 | 
| -fi
 | 
| +# We do a rough equivalent to debootstrap that installs the minimal
 | 
| +# packages needed to be able to run apt to install the rest. We don't
 | 
| +# use debootstrap since it is geared toward having a second stage that
 | 
| +# needs to run package maintainer scripts. This is also simpler.
 | 
|  
 | 
| -if [ -z "$EXPERIMENTAL_NO_DEBOOTSTRAP" -a \
 | 
| -     -z "$EXPERIMENTAL_NO_MAINTAINER_SCRIPTS" ]; then
 | 
| -  # Use debootstrap, which runs maintainer scripts.
 | 
| -  sudo debootstrap --arch=i386 $FLAGS_suite "$ROOT_FS_DIR" "${FLAGS_server}"
 | 
| -  sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive apt-get update
 | 
| -else
 | 
| -  # We do a rough equivalent to debootstrap that installs the minimal
 | 
| -  # packages needed to be able to run apt to install the rest. We don't
 | 
| -  # use debootstrap since it is geared toward having a second stage that
 | 
| -  # needs to run package maintainer scripts. This is also simpler.
 | 
| -
 | 
| -  # The set of required packages before apt can take over.
 | 
| -  PACKAGES="debconf libacl1 libattr1 libc6 libgcc1 libselinux1"
 | 
| -
 | 
| -  # Set of packages that we need to install early so that other packages
 | 
| -  # maintainer scripts can still basically run.
 | 
| -  #
 | 
| -  # login  - So that groupadd will work
 | 
| -  # base-passwd/passwd - So that chmod and useradd/groupadd will work
 | 
| -  # bash - So that scripts can run
 | 
| -  # libpam-runtim/libuuid1 - Not exactly sure why
 | 
| -  # sysv-rc - So that we can overwrite invoke-rc.d, update-rc.d
 | 
| -  EXTRA_PACKAGES="base-files base-passwd bash libpam-runtime libuuid1 login passwd sysv-rc"
 | 
| -
 | 
| -  # Prep the rootfs to work with dpgk and apt
 | 
| -  sudo mkdir -p "${ROOT_FS_DIR}/var/lib/dpkg/info"
 | 
| -  sudo touch "${ROOT_FS_DIR}/var/lib/dpkg/available"   \
 | 
| -    "${ROOT_FS_DIR}/var/lib/dpkg/diversions"           \
 | 
| -    "${ROOT_FS_DIR}/var/lib/dpkg/status"
 | 
| -  sudo mkdir -p "${ROOT_FS_DIR}/var/lib/apt/lists/partial"  \
 | 
| -    "${ROOT_FS_DIR}/var/lib/dpkg/updates"
 | 
| -
 | 
| -  # Download the initial packages into the apt cache if necessary.
 | 
| -  REPO="${APT_CACHE_DIR}/archives"
 | 
| -  sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive apt-get update
 | 
| -  sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \
 | 
| -    apt-get --download-only install $PACKAGES $EXTRA_PACKAGES
 | 
| -
 | 
| -  i=0
 | 
| -  for p in $PACKAGES $EXTRA_PACKAGES; do
 | 
| -    set +e
 | 
| -    PKG=$(ls "${REPO}"/${p}_*_i386.deb)
 | 
| -    set -e
 | 
| -    if [ -z "$PKG" ]; then
 | 
| -      PKG=$(ls "${REPO}"/${p}_*_all.deb)
 | 
| -    fi
 | 
| -    echo "Installing package: $PKG [$i]"
 | 
| -    sudo "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \
 | 
| -      --root="$ROOT_FS_DIR" --unpack "$PKG"
 | 
| -    i=$((i + 1))
 | 
| -  done
 | 
| +# The set of required packages before apt can take over.
 | 
| +PACKAGES="debconf libacl1 libattr1 libc6 libgcc1 libselinux1"
 | 
|  
 | 
| -  # Make sure that apt is ready to work. We use --fix-broken to trigger apt
 | 
| -  # to install additional critical packages. If there are any of these, we
 | 
| -  # disable the maintainer scripts so they install ok.
 | 
| -  TMP_FORCE_NO_SCRIPTS="-o=Dir::Bin::dpkg=${SCRIPTS_DIR}/dpkg_no_scripts.sh"
 | 
| -  sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \
 | 
| -    apt-get $TMP_FORCE_NO_SCRIPTS --force-yes --fix-broken install
 | 
| -
 | 
| -  # ----- MAINTAINER SCRIPT FIXUPS -----
 | 
| -
 | 
| -  # TODO: Remove when we stop having maintainer scripts altogether.
 | 
| -  sudo cp -a /dev/* "${ROOT_FS_DIR}/dev"
 | 
| -  sudo cp -a /etc/resolv.conf "${ROOT_FS_DIR}/etc/resolv.conf"
 | 
| -  sudo ln -sf /bin/true "${ROOT_FS_DIR}/usr/sbin/invoke-rc.d"
 | 
| -  sudo ln -sf /bin/true "${ROOT_FS_DIR}/usr/sbin/update-rc.d"
 | 
| -
 | 
| -  # base-files
 | 
| -  # TODO: Careful audit of the postinst; this isn't all that is there.
 | 
| -  sudo cp -a "${ROOT_FS_DIR}/usr/share/base-files/networks"  \
 | 
| -    "${ROOT_FS_DIR}/usr/share/base-files/nsswitch.conf"      \
 | 
| -    "${ROOT_FS_DIR}/usr/share/base-files/profile"            \
 | 
| -    "${ROOT_FS_DIR}/etc/"
 | 
| -
 | 
| -  # base-passwd
 | 
| -  sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/passwd.master" \
 | 
| -    "${ROOT_FS_DIR}/etc/passwd"
 | 
| -  sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/group.master" \
 | 
| -    "${ROOT_FS_DIR}/etc/group"
 | 
| -
 | 
| -  # libpam-runtime
 | 
| -  # The postinst script calls pam-auth-update, which is a perl script that
 | 
| -  # expects to run within the targetfs. Until we fix this, we just copy
 | 
| -  # from the build chroot.
 | 
| -  sudo cp -a /etc/pam.d/common-* \
 | 
| -    /etc/pam.d/login             \
 | 
| -    /etc/pam.d/newusers          \
 | 
| -    /etc/pam.d/su                \
 | 
| -    /etc/pam.d/sudo              \
 | 
| -    "${ROOT_FS_DIR}/etc/pam.d/"
 | 
| -
 | 
| -  # mawk
 | 
| -  sudo ln -s mawk "${ROOT_FS_DIR}/usr/bin/awk"
 | 
| -
 | 
| -  # base-files?
 | 
| -  sudo touch "${ROOT_FS_DIR}/etc/fstab"
 | 
| -
 | 
| -  # sysv-rc needs this
 | 
| -  sudo mkdir -p "${ROOT_FS_DIR}/etc/init.d"
 | 
| -fi  # EXPERIMENTAL_NO_DEBOOTSTRAP
 | 
| +# Set of packages that we need to install early so that other packages
 | 
| +# maintainer scripts can still basically run.
 | 
| +#
 | 
| +# login  - So that groupadd will work
 | 
| +# base-passwd/passwd - So that chmod and useradd/groupadd will work
 | 
| +# bash - So that scripts can run
 | 
| +# libpam-runtime/libuuid1 - Not exactly sure why
 | 
| +# sysv-rc - So that we can overwrite invoke-rc.d, update-rc.d
 | 
| +EXTRA_PACKAGES="base-files base-passwd bash libpam-runtime libuuid1 login passwd sysv-rc"
 | 
| +
 | 
| +# Prep the rootfs to work with dpgk and apt
 | 
| +sudo mkdir -p "${ROOT_FS_DIR}/var/lib/dpkg/info"
 | 
| +sudo touch "${ROOT_FS_DIR}/var/lib/dpkg/available"   \
 | 
| +  "${ROOT_FS_DIR}/var/lib/dpkg/diversions"           \
 | 
| +  "${ROOT_FS_DIR}/var/lib/dpkg/status"
 | 
| +sudo mkdir -p "${ROOT_FS_DIR}/var/lib/apt/lists/partial"  \
 | 
| +  "${ROOT_FS_DIR}/var/lib/dpkg/updates"
 | 
| +
 | 
| +# Download the initial packages into the apt cache if necessary.
 | 
| +REPO="${APT_CACHE_DIR}/archives"
 | 
| +sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive apt-get update
 | 
| +sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \
 | 
| +  apt-get --download-only install $PACKAGES $EXTRA_PACKAGES
 | 
| +
 | 
| +# Install initial packages directly with dpkg_no_scripts.sh
 | 
| +for p in $PACKAGES $EXTRA_PACKAGES; do
 | 
| +  PKG=$(ls "${REPO}"/${p}_*_i386.deb || /bin/true)
 | 
| +  if [ -z "$PKG" ]; then
 | 
| +    PKG=$(ls "${REPO}"/${p}_*_all.deb)
 | 
| +  fi
 | 
| +  sudo "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \
 | 
| +    --root="$ROOT_FS_DIR" --unpack "$PKG"
 | 
| +done
 | 
| +
 | 
| +# Make sure that apt is ready to work. We use --fix-broken to trigger apt
 | 
| +# to install additional critical packages. If there are any of these, we
 | 
| +# disable the maintainer scripts so they install ok.
 | 
| +TMP_FORCE_NO_SCRIPTS="-o=Dir::Bin::dpkg=${SCRIPTS_DIR}/dpkg_no_scripts.sh"
 | 
| +sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \
 | 
| +  apt-get $TMP_FORCE_NO_SCRIPTS --force-yes --fix-broken install
 | 
| +
 | 
| +# ----- MAINTAINER SCRIPT FIXUPS -----
 | 
| +
 | 
| +# TODO: Remove when we stop having maintainer scripts altogether.
 | 
| +sudo cp -a /dev/* "${ROOT_FS_DIR}/dev"
 | 
| +sudo cp -a /etc/resolv.conf "${ROOT_FS_DIR}/etc/resolv.conf"
 | 
| +sudo ln -sf /bin/true "${ROOT_FS_DIR}/usr/sbin/invoke-rc.d"
 | 
| +sudo ln -sf /bin/true "${ROOT_FS_DIR}/usr/sbin/update-rc.d"
 | 
| +
 | 
| +# base-files
 | 
| +# TODO: Careful audit of the postinst; this isn't all that is there.
 | 
| +sudo cp -a "${ROOT_FS_DIR}/usr/share/base-files/networks"  \
 | 
| +  "${ROOT_FS_DIR}/usr/share/base-files/nsswitch.conf"      \
 | 
| +  "${ROOT_FS_DIR}/usr/share/base-files/profile"            \
 | 
| +  "${ROOT_FS_DIR}/etc/"
 | 
| +
 | 
| +# base-passwd
 | 
| +sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/passwd.master" \
 | 
| +  "${ROOT_FS_DIR}/etc/passwd"
 | 
| +sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/group.master" \
 | 
| +  "${ROOT_FS_DIR}/etc/group"
 | 
| +
 | 
| +# libpam-runtime
 | 
| +# The postinst script calls pam-auth-update, which is a perl script that
 | 
| +# expects to run within the targetfs. Until we fix this, we just copy
 | 
| +# from the build chroot.
 | 
| +sudo cp -a /etc/pam.d/common-* \
 | 
| +  /etc/pam.d/login             \
 | 
| +  /etc/pam.d/newusers          \
 | 
| +  /etc/pam.d/su                \
 | 
| +  /etc/pam.d/sudo              \
 | 
| +  "${ROOT_FS_DIR}/etc/pam.d/"
 | 
| +
 | 
| +# mawk
 | 
| +sudo ln -s mawk "${ROOT_FS_DIR}/usr/bin/awk"
 | 
| +
 | 
| +# base-files?
 | 
| +sudo touch "${ROOT_FS_DIR}/etc/fstab"
 | 
| +
 | 
| +# sysv-rc needs this
 | 
| +sudo mkdir -p "${ROOT_FS_DIR}/etc/init.d"
 | 
| +
 | 
| +# ----- END MAINTAINER SCRIPT FIXUPS -----
 | 
|  
 | 
|  # Set up mounts for working within the rootfs. We copy some basic
 | 
|  # network information from the host so that maintainer scripts can
 | 
| 
 |