summaryrefslogtreecommitdiffstats
path: root/build/install-chroot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build/install-chroot.sh')
-rwxr-xr-xbuild/install-chroot.sh325
1 files changed, 0 insertions, 325 deletions
diff --git a/build/install-chroot.sh b/build/install-chroot.sh
deleted file mode 100755
index b80aea0..0000000
--- a/build/install-chroot.sh
+++ /dev/null
@@ -1,325 +0,0 @@
-#!/bin/bash -e
-
-# Copyright (c) 2010 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This script installs Debian-derived distributions in a chroot environment.
-# It can for example be used to have an accurate 32bit build and test
-# environment when otherwise working on a 64bit machine.
-# N. B. it is unlikely that this script will ever work on anything other than a
-# Debian-derived system.
-
-usage() {
- echo "usage: ${0##*/} [-m mirror] [-g group,...] [-s] [-c]"
- echo "-g group,... groups that can use the chroot unauthenticated"
- echo " Default: 'admin' and current user's group ('$(id -gn)')"
- echo "-m mirror an alternate repository mirror for package downloads"
- echo "-s configure default deb-srcs"
- echo "-c always copy 64bit helper binaries to 32bit chroot"
- echo "-h this help message"
-}
-
-process_opts() {
- local OPTNAME OPTIND OPTERR OPTARG
- while getopts ":g:m:sch" OPTNAME; do
- case "$OPTNAME" in
- g)
- [ -n "${OPTARG}" ] &&
- chroot_groups="${chroot_groups}${chroot_groups:+,}${OPTARG}"
- ;;
- m)
- if [ -n "${mirror}" ]; then
- echo "You can only specify exactly one mirror location"
- usage
- exit 1
- fi
- mirror="$OPTARG"
- ;;
- s)
- add_srcs="y"
- ;;
- c)
- copy_64="y"
- ;;
- h)
- usage
- exit 0
- ;;
- \:)
- echo "'-$OPTARG' needs an argument."
- usage
- exit 1
- ;;
- *)
- echo "invalid command-line option: $OPTARG"
- usage
- exit 1
- ;;
- esac
- done
-
- if [ $# -ge ${OPTIND} ]; then
- eval echo "Unexpected command line argument: \${${OPTIND}}"
- usage
- exit 1
- fi
-}
-
-
-# Check that we are running as a regular user
-[ "$(id -nu)" = root ] && {
- echo "Run this script as a regular user and provide your \"sudo\"" \
- "password if requested" >&2
- exit 1
-}
-mkdir -p "$HOME/chroot/"
-
-process_opts "$@"
-
-# Error handler
-trap 'exit 1' INT TERM QUIT
-trap 'sudo apt-get clean; tput bel; echo; echo Failed' EXIT
-
-# Install any missing applications that this script relies on. If these packages
-# are already installed, don't force another "apt-get install". That would
-# prevent them from being auto-removed, if they ever become eligible for that.
-# And as this script only needs the packages once, there is no good reason to
-# introduce a hard dependency on things such as dchroot and debootstrap.
-dep=
-for i in dchroot debootstrap; do
- [ -d /usr/share/doc/"$i" ] || dep="$dep $i"
-done
-[ -n "$dep" ] && sudo apt-get -y install $dep
-sudo apt-get -y install schroot
-
-# Create directory for chroot
-sudo mkdir -p /var/lib/chroot
-
-# Find chroot environments that can be installed with debootstrap
-targets="$(cd /usr/share/debootstrap/scripts
- ls | grep '^[a-z]*$')"
-
-# Ask user to pick one of the available targets
-echo "The following targets are available to be installed in a chroot:"
-j=1; for i in $targets; do
- printf '%4d: %s\n' "$j" "$i"
- j=$(($j+1))
-done
-while :; do
- printf "Which target would you like to install: "
- read n
- [ "$n" -gt 0 -a "$n" -lt "$j" ] >&/dev/null && break
-done
-j=1; for i in $targets; do
- [ "$j" -eq "$n" ] && { distname="$i"; break; }
- j=$(($j+1))
-done
-
-# On x86-64, ask whether the user wants to install x86-32 or x86-64
-archflag=
-arch=
-if [ "$(uname -m)" = x86_64 ]; then
- while :; do
- echo "You are running a 64bit kernel. This allows you to install either a"
- printf "32bit or a 64bit chroot environment. %s" \
- "Which one do you want (32, 64) "
- read arch
- [ "${arch}" == 32 -o "${arch}" == 64 ] && break
- done
- [ "${arch}" == 32 ] && archflag="--arch i386" || archflag="--arch amd64"
- arch="${arch}bit"
-fi
-target="${distname}${arch}"
-
-# Don't overwrite an existing installation
-[ -d /var/lib/chroot/"${target}" ] && {
- echo "This chroot already exists on your machine." >&2
- echo "Delete /var/lib/chroot/${target} if you want to start over." >&2
- exit 1
-}
-sudo mkdir -p /var/lib/chroot/"${target}"
-
-# Offer to include additional standard repositories for Ubuntu-based chroots.
-alt_repos=
-grep ubuntu.com /usr/share/debootstrap/scripts/"${distname}" >&/dev/null && {
- while :; do
- echo "Would you like to add ${distname}-updates and ${distname}-security "
- echo -n "to the chroot's sources.list (y/n)? "
- read alt_repos
- case "${alt_repos}" in
- y|Y)
- alt_repos="y"
- break
- ;;
- n|N)
- break
- ;;
- esac
- done
-}
-
-# Remove stale entry from /etc/schroot/schroot.conf. Entries start
-# with the target name in square brackets, followed by an arbitrary
-# number of lines. The entry stops when either the end of file has
-# been reached, or when the beginning of a new target is encountered.
-# This means, we cannot easily match for a range of lines in
-# "sed". Instead, we actually have to iterate over each line and check
-# whether it is the beginning of a new entry.
-sudo sed -ni '/^[[]'"${target%bit}"']$/,${:1;n;/^[[]/b2;b1;:2;p;n;b2};p' \
- /etc/schroot/schroot.conf
-
-# Download base system. This takes some time
-if [ -z "${mirror}" ]; then
- grep ubuntu.com /usr/share/debootstrap/scripts/"${distname}" >&/dev/null &&
- mirror="http://archive.ubuntu.com/ubuntu" ||
- mirror="http://ftp.us.debian.org/debian"
-fi
- sudo debootstrap ${archflag} "${distname}" /var/lib/chroot/"${target}" \
- "$mirror"
-
-# Add new entry to /etc/schroot/schroot.conf
-grep ubuntu.com /usr/share/debootstrap/scripts/"${distname}" >&/dev/null &&
- brand="Ubuntu" || brand="Debian"
-if [ -z "${chroot_groups}" ]; then
- chroot_groups="admin,$(id -gn)"
-fi
-sudo sh -c 'cat >>/etc/schroot/schroot.conf' <<EOF
-[${target%bit}]
-description=${brand} ${distname} ${arch}
-type=directory
-directory=/var/lib/chroot/${target}
-priority=3
-users=root
-groups=${chroot_groups}
-root-groups=${chroot_groups}
-personality=linux$([ "${arch}" != 64bit ] && echo 32)
-script-config=script-${target}
-
-EOF
-
-# Set up a special directory that changes contents depending on the target
-# that is executing.
-sed '/^FSTAB=/s,/mount-defaults",/mount-'"${target}"'",' \
- /etc/schroot/script-defaults |
- sudo sh -c 'cat >/etc/schroot/script-'"${target}"
-sudo cp /etc/schroot/mount-defaults /etc/schroot/mount-"${target}"
-echo "$HOME/chroot/.${target} $HOME/chroot none rw,bind 0 0" |
- sudo sh -c 'cat >>/etc/schroot/mount-'"${target}"
-mkdir -p "$HOME/chroot/.${target}"
-
-# Install a helper script to launch commands in the chroot
-sudo sh -c 'cat >/usr/local/bin/'"${target%bit}" <<EOF
-#!/bin/bash
-if [ \$# -eq 0 ]; then
- exec schroot -c ${target%bit} -p
-else
- p="\$1"; shift
- exec schroot -c ${target%bit} -p "\$p" -- "\$@"
-fi
-exit 1
-EOF
-sudo chown root:root /usr/local/bin/"${target%bit}"
-sudo chmod 755 /usr/local/bin/"${target%bit}"
-
-# Add the standard Ubuntu update repositories if requested.
-[ "${alt_repos}" = "y" -a \
- -r "/var/lib/chroot/${target}/etc/apt/sources.list" ] &&
-sudo sed -i '/^deb .* [^ -]\+ main$/p
- s/^\(deb .* [^ -]\+\) main/\1-security main/
- p
- t1
- d
- :1;s/-security main/-updates main/
- t
- d' "/var/lib/chroot/${target}/etc/apt/sources.list"
-
-# Add a few more repositories to the chroot
-[ "${add_srcs}" = "y" -a \
- -r "/var/lib/chroot/${target}/etc/apt/sources.list" ] &&
-sudo sed -i 's/ main$/ main restricted universe multiverse/
- p
- t1
- d
- :1;s/^deb/deb-src/
- t
- d' "/var/lib/chroot/${target}/etc/apt/sources.list"
-
-# Update packages
-sudo schroot -c "${target%bit}" -p -- /bin/sh -c '
- apt-get update; apt-get -y dist-upgrade' || :
-
-# Install a couple of missing packages
-for i in debian-keyring ubuntu-keyring locales sudo; do
- [ -d "/var/lib/chroot/${target}/usr/share/doc/$i" ] ||
- sudo schroot -c "${target%bit}" -p -- apt-get -y install "$i" || :
-done
-
-# Configure locales
-sudo schroot -c "${target%bit}" -p -- /bin/sh -c '
- l='"${LANG:-en_US}"'; l="${l%%.*}"
- [ -r /etc/locale.gen ] &&
- sed -i "s/^# \($l\)/\1/" /etc/locale.gen
- locale-gen $LANG en_US en_US.UTF-8' || :
-
-# Configure "sudo" package
-sudo schroot -c "${target%bit}" -p -- /bin/sh -c '
- egrep '"'^$(id -nu) '"' /etc/sudoers >/dev/null 2>&1 ||
- echo '"'$(id -nu) ALL=(ALL) ALL'"' >>/etc/sudoers'
-
-# Install a few more commonly used packages
-sudo schroot -c "${target%bit}" -p -- apt-get -y install \
- autoconf automake1.9 dpkg-dev g++-multilib gcc-multilib gdb less libtool \
- strace
-
-# If running a 32bit environment on a 64bit machine, install a few binaries
-# as 64bit. This is only done automatically if the chroot distro is the same as
-# the host, otherwise there might be incompatibilities in build settings or
-# runtime dependencies. The user can force it with the '-c' flag.
-host_distro=$(grep DISTRIB_CODENAME /etc/lsb-release 2>/dev/null | \
- cut -d "=" -f 2)
-if [ "${copy_64}" = "y" -o \
- "${host_distro}" = "${distname}" -a "${arch}" = 32bit ] && \
- file /bin/bash 2>/dev/null | grep -q x86-64; then
- readlinepkg=$(sudo schroot -c "${target%bit}" -p -- sh -c \
- 'apt-cache search "lib64readline.\$" | sort | tail -n 1 | cut -d " " -f 1')
- sudo schroot -c "${target%bit}" -p -- apt-get -y install \
- lib64expat1 lib64ncurses5 ${readlinepkg} lib64z1
- dep=
- for i in binutils gdb strace; do
- [ -d /usr/share/doc/"$i" ] || dep="$dep $i"
- done
- [ -n "$dep" ] && sudo apt-get -y install $dep
- sudo cp /usr/bin/gdb "/var/lib/chroot/${target}/usr/local/bin/"
- sudo cp /usr/bin/ld "/var/lib/chroot/${target}/usr/local/bin/"
- for i in libbfd libpython; do
- lib="$({ ldd /usr/bin/ld; ldd /usr/bin/gdb; } |
- grep "$i" | awk '{ print $3 }')"
- if [ -n "$lib" -a -r "$lib" ]; then
- sudo cp "$lib" "/var/lib/chroot/${target}/usr/lib64/"
- fi
- done
- for lib in libssl libcrypt; do
- sudo cp /usr/lib/$lib* "/var/lib/chroot/${target}/usr/lib64/" || :
- done
-fi
-
-# Clean up package files
-sudo schroot -c "${target%bit}" -p -- apt-get clean
-sudo apt-get clean
-
-# Let the user know what we did
-trap '' INT TERM QUIT
-trap '' EXIT
-cat <<EOF
-
-
-Successfully installed ${distname} ${arch}
-
-You can run programs inside of the chroot by invoking the "${target%bit}"
-command.
-
-Your home directory is shared between the host and the chroot. But I configured
-$HOME/chroot to be private to the chroot environment. You can use it
-for files that need to differ between environments.
-EOF