Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Unified Diff: src/scripts/install_packages.sh

Issue 651083: Get rid of some scripts that are no longer used (Closed)
Patch Set: Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/scripts/dpkg_no_scripts.sh ('k') | src/scripts/recursive_dep.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/scripts/install_packages.sh
diff --git a/src/scripts/install_packages.sh b/src/scripts/install_packages.sh
deleted file mode 100755
index 2ed454ab67905bc7da67bcc1444281199a3094bd..0000000000000000000000000000000000000000
--- a/src/scripts/install_packages.sh
+++ /dev/null
@@ -1,313 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Script to install packages into the target root file system.
-#
-# NOTE: This script should be called by build_image.sh. Do not run this
-# on your own unless you know what you are doing.
-
-# Load common constants. This should be the first executable line.
-# The path to common.sh should be relative to your script's location.
-. "$(dirname "$0")/common.sh"
-
-# Script must be run inside the chroot
-assert_inside_chroot
-assert_not_root_user
-
-DEFAULT_PKGLIST="${SRC_ROOT}/package_repo/package-list-prod.txt"
-
-# Flags
-DEFINE_string output_dir "" \
- "The location of the output directory to use [REQUIRED]."
-DEFINE_string root "" \
- "The root file system to install packages in."
-DEFINE_string arch "x86" \
- "The target architecture to build for. One of { x86, armel }."
-DEFINE_string build_root "$DEFAULT_BUILD_ROOT" \
- "Root of build output"
-DEFINE_string package_list "$DEFAULT_PKGLIST" \
- "Comma separated set of package-list files to use."
-DEFINE_string mirror "$DEFAULT_IMG_MIRROR" \
- "The upstream package mirror to use."
-DEFINE_string suite "$DEFAULT_IMG_SUITE" \
- "The upstream package suite to use."
-DEFINE_string mirror2 "" "Additional package mirror to use (URL only)."
-DEFINE_string suite2 "" "Package suite for additional mirror."
-
-# Parse command line
-FLAGS "$@" || exit 1
-eval set -- "${FLAGS_ARGV}"
-
-# Die on any errors.
-set -e
-
-KERNEL_DEB_PATH=$(find "${FLAGS_build_root}/${FLAGS_arch}/local_packages" \
- -name "linux-image-*.deb")
-KERNEL_DEB=$(basename "${KERNEL_DEB_PATH}" .deb | sed -e 's/linux-image-//' \
- -e 's/_.*//')
-KERNEL_VERSION=${KERNEL_VERSION:-${KERNEL_DEB}}
-
-if [[ -z "$FLAGS_output_dir" ]]; then
- echo "Error: --output_dir is required."
- exit 1
-fi
-OUTPUT_DIR=$(readlink -f "$FLAGS_output_dir")
-SETUP_DIR="${OUTPUT_DIR}/local_repo"
-ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
-if [[ -n "$FLAGS_root" ]]; then
- ROOT_FS_DIR=$(readlink -f "$FLAGS_root")
-fi
-mkdir -p "$OUTPUT_DIR" "$SETUP_DIR" "$ROOT_FS_DIR"
-
-# Make sure anything mounted in the rootfs is cleaned up ok on exit.
-cleanup_rootfs_mounts() {
- # Occasionally there are some daemons left hanging around that have our
- # root image file system open. We do a best effort attempt to kill them.
- PIDS=`sudo lsof -t "$ROOT_FS_DIR" | sort | uniq`
- for pid in $PIDS
- do
- local cmdline=`cat /proc/$pid/cmdline`
- echo "Killing process that has open file on our rootfs: $cmdline"
- ! sudo kill $pid # Preceded by ! to disable ERR trap.
- done
-
- # Sometimes the volatile directory is left mounted and sometimes it is not,
- # so we precede by '!' to disable the ERR trap.
- ! sudo umount "$ROOT_FS_DIR"/lib/modules/2.6.*/volatile/ > /dev/null 2>&1
-
- sudo umount "${ROOT_FS_DIR}/proc"
-}
-
-# Set up repository for locally built packages; these take highest precedence.
-mkdir -p "${SETUP_DIR}/local_packages"
-cp "${FLAGS_build_root}/${FLAGS_arch}/local_packages"/*.deb \
- "${SETUP_DIR}/local_packages"
-cd "$SETUP_DIR"
-dpkg-scanpackages local_packages/ /dev/null | \
- gzip > local_packages/Packages.gz
-cd -
-
-# Create the temporary apt source.list used to install packages.
-APT_SOURCE="${OUTPUT_DIR}/sources.list"
-cat <<EOF > "$APT_SOURCE"
-deb copy:"$SETUP_DIR" local_packages/
-deb $FLAGS_mirror $FLAGS_suite main restricted multiverse universe
-EOF
-if [ -n "$FLAGS_mirror2" ] && [ -n "$FLAGS_suite2" ]; then
- cat <<EOF >> "$APT_SOURCE"
-deb $FLAGS_mirror2 $FLAGS_suite2 main restricted multiverse universe
-EOF
-fi
-# Look for official file and use it if it exists
-if [ -f ${SRC_ROOT}/package_repo/sources-official.list ]; then
- cat ${SRC_ROOT}/package_repo/sources-official.list >> "$APT_SOURCE"
-fi
-
-# Cache directory for APT to use. This cache is re-used across builds. We
-# rely on the cache to reduce traffic to the hosted repositories.
-APT_CACHE_DIR="${FLAGS_build_root}/apt_cache-${FLAGS_arch}/"
-mkdir -p "${APT_CACHE_DIR}/archives/partial"
-
-if [ "${FLAGS_arch}" = x86 ]; then
- APT_ARCH=i386
-else
- APT_ARCH="${FLAGS_arch}"
-fi
-
-# Create the apt configuration file. See "man apt.conf"
-APT_PARTS="${OUTPUT_DIR}/apt.conf.d"
-mkdir -p "$APT_PARTS" # An empty apt.conf.d to avoid other configs.
-export APT_CONFIG="${OUTPUT_DIR}/apt.conf"
-cat <<EOF > "$APT_CONFIG"
-APT
-{
- Install-Recommends "0";
- Install-Suggests "0";
- Get
- {
- Assume-Yes "1";
- AllowUnauthenticated "1";
- };
- Architecture "${APT_ARCH}";
-};
-Dir
-{
- Bin {
- dpkg "${SCRIPTS_DIR}/dpkg_no_scripts.sh";
- };
- Cache "$APT_CACHE_DIR";
- Cache {
- archives "${APT_CACHE_DIR}/archives";
- };
- Etc
- {
- sourcelist "$APT_SOURCE";
- parts "$APT_PARTS";
- };
- State "${ROOT_FS_DIR}/var/lib/apt/";
- State
- {
- status "${ROOT_FS_DIR}/var/lib/dpkg/status";
- };
-};
-DPkg
-{
- options {"--root=${ROOT_FS_DIR}";};
-};
-EOF
-
-# TODO: Full audit of the apt conf dump to make sure things are ok.
-apt-config dump > "${OUTPUT_DIR}/apt.conf.dump"
-
-# 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-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 mawk"
-
-# 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
-ARCH="$FLAGS_arch"
-if [ "$ARCH" = "x86" ]; then
- ARCH="i?86" # Match i386 | i686
-fi
-for p in $PACKAGES $EXTRA_PACKAGES; do
- PKG=$(ls "${REPO}"/${p}_*_$ARCH.deb || /bin/true)
- if [ -z "$PKG" ]; then
- PKG=$(ls "${REPO}"/${p}_*_all.deb)
- fi
- sudo ARCH="$FLAGS_arch" "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \
- --root="$ROOT_FS_DIR" --nodpkg_fallback --unpack "$PKG"
- sudo ARCH="$FLAGS_arch" "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \
- --root="$ROOT_FS_DIR" --nodpkg_fallback --configure "$p"
-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=DPkg::options::=--nodpkg_fallback"
-sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive ARCH="$FLAGS_arch"\
- apt-get $TMP_FORCE_NO_SCRIPTS --force-yes --fix-broken install
-
-# TODO: Remove these hacks 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"
-
-# Set up mounts for working within the rootfs. We copy some basic
-# network information from the host so that maintainer scripts can
-# access the network as needed.
-# TODO: All of this rootfs mount stuff can be removed as soon as we stop
-# running the maintainer scripts on install.
-sudo mount -t proc proc "${ROOT_FS_DIR}/proc"
-trap cleanup_rootfs_mounts EXIT
-
-filter_pkgs() {
- pkglist="$1"
- arch="$2"
-
- # to read list of package + version skipping empty lines and comments, and
- # convert "foo 1.2-3" to "foo=1.2-3", use:
- #pkgs="$(grep '^[^#]' "$pkglist" | cut -d ' ' -f 1-2 | sed 's/ /=/')"
-
- # read list of "package [optional arch list]" skipping empty lines and
- # comments
- grep '^[^#]' "$pkglist" | while read pkg archspec; do
- case "$archspec" in
- ""|"[$arch "*|"[$arch]"|*" $arch]")
- echo "$pkg"
- ;;
- *"!$arch "*|*"!$arch]")
- :
- ;;
- "["*"!"*"]")
- echo "$pkg"
- ;;
- esac
- done
-}
-
-# Install packages from the given package-lists
-PACKAGE_LISTS=$(echo "$FLAGS_package_list" | sed -e 's/,/ /g')
-PKG_LIST_ARCH="$FLAGS_arch"
-if [ "$PKG_LIST_ARCH" = "x86" ]; then
- PKG_LIST_ARCH="i386"
- FORCE_NO_SCRIPTS=""
-else
- # For armel we forcefully disable all maintainer scripts.
- # TODO: Remove this when everything is whitelisted for all build variants.
- FORCE_NO_SCRIPTS="-o=DPkg::options::=--nodpkg_fallback"
-fi
-for p in $PACKAGE_LISTS; do
- COMPONENTS=$(filter_pkgs "$p" "$PKG_LIST_ARCH")
- sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \
- ARCH="$FLAGS_arch" \
- apt-get $FORCE_NO_SCRIPTS --force-yes install $COMPONENTS
-done
-
-# Create kernel installation configuration to suppress warnings,
-# install the kernel in /boot, and manage symlinks.
-cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/kernel-img.conf"
-link_in_boot = yes
-do_symlinks = yes
-minimal_swap = yes
-clobber_modules = yes
-warn_reboot = no
-do_bootloader = no
-do_initrd = yes
-warn_initrd = no
-EOF
-
-# Install the kernel.
-# TODO: Support for armel kernels.
-if [ "$FLAGS_arch" = "x86" ]; then
- sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive ARCH="$FLAGS_arch"\
- apt-get --force-yes install "linux-image-${KERNEL_VERSION}"
-fi
-
-# Install optionally present rootfs static data. This can be used to blast
-# custom firmware, kernel modules, etc. onto the image.
-# TODO: Remove this hack at some point.
-LOCAL_ASSETS="${FLAGS_build_root}/${FLAGS_arch}/local_assets"
-OPTIONAL_ROOTFS_DATA="${LOCAL_ASSETS}/rootfs_data.tgz"
-if [ -f "${OPTIONAL_ROOTFS_DATA}" ]; then
- sudo tar -zxvf "${OPTIONAL_ROOTFS_DATA}" -C "${ROOT_FS_DIR}"
-fi
-
-# List all packages installed so far, since these are what the local
-# repository needs to contain.
-# TODO: Replace with list_installed_packages.sh when it is fixed up.
-dpkg --root="${ROOT_FS_DIR}" -l > \
- "${OUTPUT_DIR}/package_list_installed.txt"
-
-cleanup_rootfs_mounts
-trap - EXIT
« no previous file with comments | « src/scripts/dpkg_no_scripts.sh ('k') | src/scripts/recursive_dep.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698