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

Unified Diff: build/install-chroot.sh

Issue 3791007: Allow custom repository mirrors and configure chroot for distro updates. (Closed)
Patch Set: review fix Created 10 years, 2 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/install-chroot.sh
diff --git a/build/install-chroot.sh b/build/install-chroot.sh
index ad0dafadcab612e5ea021956bd590e767968a083..65bda044122cb9c2e30c2708369980dabf5790f7 100755
--- a/build/install-chroot.sh
+++ b/build/install-chroot.sh
@@ -10,6 +10,49 @@
# 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]"
+ echo "-m mirror an alternate repository mirror for package downloads"
+ echo "-h this help message"
+}
+
+process_opts() {
+ local OPTNAME OPTIND OPTERR OPTARG
+ while getopts ":m:h" OPTNAME; do
+ case "$OPTNAME" in
+ m)
+ if [ -n "${mirror}" ]; then
+ echo "You can only specify exactly one mirror location"
+ usage
+ exit 1
+ fi
+ mirror="$OPTARG"
+ ;;
+ 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\"" \
@@ -18,6 +61,8 @@
}
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
@@ -81,6 +126,25 @@ target="${distname}${arch}"
}
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
@@ -92,9 +156,11 @@ 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
-grep ubuntu.com /usr/share/debootstrap/scripts/"${distname}" >&/dev/null &&
- mirror="http://archive.ubuntu.com/ubuntu" ||
- mirror="http://ftp.us.debian.org/debian"
+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"
@@ -139,15 +205,26 @@ 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
-[ -r /var/lib/chroot/${target}/etc/apt/sources.list ] &&
+[ -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
+ d' "/var/lib/chroot/${target}/etc/apt/sources.list"
# Update packages
sudo schroot -c "${target%bit}" -p -- /bin/sh -c '
@@ -186,17 +263,17 @@ if [ "${arch}" = 32bit ] && file /bin/bash 2>/dev/null | grep -q x86-64; then
[ -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/
+ 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/
+ 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/ || :
+ sudo cp /usr/lib/$lib* "/var/lib/chroot/${target}/usr/lib64/" || :
done
fi
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698