Package: base-installer Version: 1.106 Severity: wishlist Tags: patch I have a custom udeb for a debian derivative that installs supplementary debian base systems and configures them as virtual machines or chroots. However I want to install those in /target/srv/<something> and not in /target directly.
Due to this I can't easily reuse base-installer's library.sh but I have to provide my own copy of most functions. It would be nice if library.sh would respect the $TARGET environment variable. Please find attached a patch that should implement this. -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (150, 'experimental') Architecture: i386 (x86_64) Kernel: Linux 2.6.32-4-amd64 (SMP w/2 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash -- Raphaël Hertzog Like what I do? Sponsor me: http://ouaza.com/wp/2010/01/05/5-years-of-freexian/ My Debian goals: http://ouaza.com/wp/2010/01/09/debian-related-goals-for-2010/
Index: debian/changelog =================================================================== --- debian/changelog (révision 63032) +++ debian/changelog (copie de travail) @@ -1,8 +1,13 @@ base-installer (1.107) UNRELEASED; urgency=low + [ Frans Pop ] * Fix install_extra() to actually display the return code from apt-install in case of an error. + [ Raphaël Hertzog ] + * Change base-installer/library.sh to install the base system in the + directory pointed by $TARGET (and defaults to /target if not defined). + -- Frans Pop <f...@debian.org> Sun, 14 Mar 2010 08:20:20 +0100 base-installer (1.106) unstable; urgency=low Index: library.sh =================================================================== --- library.sh (révision 63032) +++ library.sh (copie de travail) @@ -25,9 +25,10 @@ CPUINFO=/proc/cpuinfo # files and directories -APT_SOURCES=/target/etc/apt/sources.list -APT_CONFDIR=/target/etc/apt/apt.conf.d -IT_CONFDIR=/target/etc/initramfs-tools/conf.d +TARGET=${TARGET:-/target} +APT_SOURCES=$TARGET/etc/apt/sources.list +APT_CONFDIR=$TARGET/etc/apt/apt.conf.d +IT_CONFDIR=$TARGET/etc/initramfs-tools/conf.d IFS_ORIG="$IFS" NL=" @@ -83,13 +84,13 @@ check_target () { # Make sure something is mounted on the target. # Partconf causes the latter format. - if ! grep -q '/target ' /proc/mounts && \ - ! grep -q '/target/ ' /proc/mounts; then + if ! grep -q "$TARGET " /proc/mounts && \ + ! grep -q "$TARGET/ " /proc/mounts; then exit_error base-installer/no_target_mounted fi # Warn about installation over an existing unix. - if [ -e /target/bin/sh -o -L /target/bin/sh ]; then + if [ -e $TARGET/bin/sh -o -L $TARGET/bin/sh ]; then warning "attempting to install to unclean target" db_capb "" db_input high base-installer/use_unclean_target || true @@ -104,13 +105,13 @@ fi # Undo dev bind mounts for idempotency. - if grep -qE '^[^ ]+ /target/dev' /proc/mounts; then - umount /target/dev + if grep -qE "^[^ ]+ $TARGET/dev" /proc/mounts; then + umount $TARGET/dev fi - # Unmount /dev/.static/dev if mounted on same device as /target + # Unmount /dev/.static/dev if mounted on same device as $TARGET mp_stdev=$(grep -E '^[^ ]+ /dev/\.static/dev' /proc/mounts | \ cut -d" " -f1) - if [ "$mp_stdev" ] && grep -q "^$mp_stdev /target " /proc/mounts; then + if [ "$mp_stdev" ] && grep -q "^$mp_stdev $TARGET " /proc/mounts; then umount /dev/.static/dev fi } @@ -120,9 +121,9 @@ # Tests in MAKEDEV require this is done in the D-I environment mkdir -p /dev/.static/dev chmod 700 /dev/.static/ - mount --bind /target/dev /dev/.static/dev + mount --bind $TARGET/dev /dev/.static/dev # Mirror device nodes in D-I environment to target - mount --bind /dev /target/dev/ + mount --bind /dev $TARGET/dev/ } configure_apt_preferences () { @@ -163,7 +164,7 @@ } apt_update () { - log-output -t base-installer chroot /target apt-get update \ + log-output -t base-installer chroot $TARGET apt-get update \ || apt_update_failed=$? if [ "$apt_update_failed" ]; then @@ -173,7 +174,7 @@ install_extra () { local IFS - info "Installing queued packages into /target/." + info "Installing queued packages into $TARGET/." if [ -f /var/lib/apt-install/queue ]; then # We need to install these one by one in case one fails. @@ -188,7 +189,7 @@ db_progress INFO base-installer/section/install_extra_package log-output -t base-installer apt-install $OPTS $PKG || \ - warning "Failed to install $PKG into /target/: $?" + warning "Failed to install $PKG into $TARGET/: $?" # Advance progress bar within space allocated for install_extra CURR_PKG=$(($CURR_PKG + 1)) @@ -307,7 +308,7 @@ kernel_update_list () { # Use 'uniq' to avoid listing the same kernel more then once - chroot /target apt-cache search '^(kernel|linux)-image' | \ + chroot $TARGET apt-cache search '^(kernel|linux)-image' | \ cut -d" " -f1 | uniq > "$KERNEL_LIST.unfiltered" kernels=`sort -r "$KERNEL_LIST.unfiltered" | tr '\n' ' ' | sed -e 's/ $//'` for candidate in $kernels; do @@ -477,14 +478,14 @@ fi # Create configuration file for kernel-package - if [ -f /target/etc/kernel-img.conf ]; then + if [ -f $TARGET/etc/kernel-img.conf ]; then # Backup old kernel-img.conf - mv /target/etc/kernel-img.conf /target/etc/kernel-img.conf.$$ + mv $TARGET/etc/kernel-img.conf $TARGET/etc/kernel-img.conf.$$ fi info "Setting do_initrd='$do_initrd'." info "Setting link_in_boot='$link_in_boot'." - cat > /target/etc/kernel-img.conf <<EOF + cat > $TARGET/etc/kernel-img.conf <<EOF # Kernel image management overrides # See kernel-img.conf(5) for details do_symlinks = yes @@ -624,7 +625,7 @@ if [ "$ARCH" = powerpc ] && [ "$SUBARCH" = prep ] && \ [ "$rd_generator" = initramfs-tools ]; then prepconf=$IT_CONFDIR/prep-root - rootpart_devfs=$(mount | grep "on /target " | cut -d' ' -f1) + rootpart_devfs=$(mount | grep "on $TARGET " | cut -d' ' -f1) rootpart=$(mapdevfs $rootpart_devfs) if [ -f $prepconf ] && grep -q "^#* *ROOT=" $prepconf; then sed -e "s...@^#* *root...@root=$rootpart@" < $prepconf > $prepconf.new && @@ -646,9 +647,9 @@ # Advance progress bar to 90% of allocated space for install_linux update_progress 90 100 - if [ -f /target/etc/kernel-img.conf.$$ ]; then + if [ -f $TARGET/etc/kernel-img.conf.$$ ]; then # Revert old kernel-img.conf - mv /target/etc/kernel-img.conf.$$ /target/etc/kernel-img.conf + mv $TARGET/etc/kernel-img.conf.$$ $TARGET/etc/kernel-img.conf fi if [ "$kernel_install_failed" ]; then @@ -683,7 +684,7 @@ db_get base-installer/kernel/linux/initramfs-generators || return 1 for irf in $RET; do - if LANG=C chroot /target apt-cache policy $irf 2>&1 | \ + if LANG=C chroot $TARGET apt-cache policy $irf 2>&1 | \ grep "Candidate:" | grep -v "(none)" >/dev/null 2>&1; then if [ "$irf_list" ]; then irf_list="$irf_list $irf" @@ -725,12 +726,12 @@ } addmodule_initramfs_tools () { - CFILE='/target/etc/initramfs-tools/modules' + CFILE="$TARGET/etc/initramfs-tools/modules" addmodule_easy "$1" "$2" } addmodule_yaird () { - CFILE='/target/etc/yaird/Default.cfg' + CFILE="$TARGET/etc/yaird/Default.cfg" if [ -f "$CFILE" ]; then if [ "$2" = 1 ]; then sed -i "/END GOALS/s/^/\n\t\t#\n\t\t# Added by Debian Installer\n/" $CFILE @@ -742,7 +743,7 @@ # Assumes the file protocol is only used for CD (image) installs configure_apt () { if [ "$PROTOCOL" = file ]; then - local tdir=/target/media$DIRECTORY + local tdir=$TARGET/media$DIRECTORY rm -f /var/lib/install-cd.id # Let apt inside the chroot see the cdrom @@ -783,7 +784,7 @@ # Prevent apt-cdrom from prompting : > $APT_SOURCES if ! log-output -t base-installer \ - chroot /target apt-cdrom add </dev/null; then + chroot $TARGET apt-cdrom add </dev/null; then error "error while running apt-cdrom" fi else