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 |