From 55e2452198840684e64b7aad549c2cc92261a7be Mon Sep 17 00:00:00 2001 From: Marco d'Itri Date: Thu, 8 Sep 2016 17:34:14 +0200 Subject: Merged /usr support for debootstrap --- debootstrap | 6 ++++++ debootstrap.8 | 3 +++ functions | 37 +++++++++++++++++++++++++++++++++++++ scripts/sid | 6 ++++++ 4 files changed, 52 insertions(+) diff --git a/debootstrap b/debootstrap index 4cea268..ea1d048 100755 --- a/debootstrap +++ b/debootstrap @@ -27,6 +27,7 @@ KEYRING="" DISABLE_KEYRING="" FORCE_KEYRING="" VARIANT="" +MERGED_USR="" ARCH="" HOST_ARCH="" HOST_OS="" @@ -100,6 +101,7 @@ usage() --variant=X use variant X of the bootstrap scripts (currently supported variants: buildd, fakechroot, scratchbox, minbase) + --no-merged-usr do not make /{bin,sbin,lib}/ symlinks to /usr/ --keyring=K check Release files against keyring K --no-check-gpg avoid checking Release file signatures --force-check-gpg force checking Release file signatures @@ -302,6 +304,10 @@ if [ $# != 0 ] ; then error 1 NEEDARG "option requires an argument %s" "$1" fi ;; + --no-merged-usr) + MERGED_USR=no + shift + ;; --keyring|--keyring=?*) if ! gpgv --version >/dev/null 2>&1; then error 1 NEEDGPGV "gpgv not installed, but required for Release verification" diff --git a/debootstrap.8 b/debootstrap.8 index 5864148..5eeaf04 100644 --- a/debootstrap.8 +++ b/debootstrap.8 @@ -84,6 +84,9 @@ The default, with no \fB\-\-variant=X\fP argument, is to create a base Debian installation in .IR TARGET . .IP +.IP "\fB\-\-no-merged-usr\fP" +Do not create /{bin,sbin,lib}/ symlinks pointing to their conterparts in /usr/. +.IP .IP "\fB\-\-keyring=KEYRING\fP" Override the default keyring for the distribution being bootstrapped, and use diff --git a/functions b/functions index 336f220..f633f73 100644 --- a/functions +++ b/functions @@ -1136,6 +1136,43 @@ setup_dselect_method () { esac } +# Find out where the runtime dynamic linker and the shared libraries +# can be installed on each architecture: native, multilib and multiarch. +# This data can be verified by checking the files in the debian/sysdeps/ +# directory of the glibc package. +# +# This function must be updated to support any new architecture which +# either installs the RTLD in a directory different from /lib or builds +# multilib library packages. +setup_merged_usr() { + if [ "$MERGED_USR" = "no" ]; then return 0; fi + + local link_dir + case $ARCH in + hurd-*) return 0 ;; + amd64) link_dir="lib32 lib64 libx32" ;; + i386) link_dir="lib64 libx32" ;; + mips|mipsel) + link_dir="lib32 lib64" ;; + mips64*|mipsn32*) + link_dir="lib32 lib64 libo32" ;; + powerpc) link_dir="lib64" ;; + ppc64) link_dir="lib32 lib64" ;; + ppc64el) link_dir="lib64" ;; + s390x) link_dir="lib32" ;; + sparc) link_dir="lib64" ;; + sparc64) link_dir="lib32 lib64" ;; + x32) link_dir="lib32 lib64 libx32" ;; + esac + link_dir="bin sbin lib $link_dir" + + local dir + for dir in $link_dir; do + ln -s usr/$dir $TARGET/$dir + mkdir -p $TARGET/usr/$dir + done +} + ################################################################ pkgdetails # NOTE diff --git a/scripts/sid b/scripts/sid index 7b32ac2..5866569 100644 --- a/scripts/sid +++ b/scripts/sid @@ -41,6 +41,12 @@ work_out_debs () { } first_stage_install () { + case $SUITE in + etch|etch-m68k|jessie|lenny|squeeze|wheezy) ;; + oldstable|stable) ;; + *) setup_merged_usr ;; + esac + extract $required mkdir -p "$TARGET/var/lib/dpkg" -- cgit v0.12