Bug#516802: Does not use debconf-preseeded value for mdadm/initrdstart

Daniel Richard G. skunk at iSKUNK.ORG
Tue Feb 24 22:31:50 UTC 2009


On Tue, 2009 Feb 24 20:30:30 +0100, martin f krafft wrote:
> 
> I forget debconf details, but does this work for other settings for
> you? I.e. are you sure that "seen false" doesn't cause it to ignore
> the preseeded value and use the default anyway?

Positive. For most packages, if the question comes up, and there's an 
existing value in debconf, then that gets shown instead of the default 
value. I'm aware of about only fix or six packages that don't do this, and 
have been filing bugs against them (e.g. #515848).

> This means that INITRDSTART only gets initialised to 'all' if $RET
> was not set. Either $RET is 'all', in which case debconf is at
> fault, or there are gnomes in your PC.

This is on a test system for disk-image deployment. I'm starting with a 
minimal Debian install, and going up from there. In other words, it's a 
fairly antiseptic/clean environment that is producing this behavior.

> Do you think you could try to reproduce this on a new machine in the 
> following order:
> 
>   1. use debconf-set-selections as you would
>   2. use dpkg --unpack mdadm_*.deb to merely unpack the package
>   3. change set -eu at the top of /var/lib/dpkg/info/mdadm.postinst to 
>      set -euvx
>   4. insert echo $RET between the two lines of code shown above
>   5. run dpkg --configure mdadm
>   6 paste the output to me?

The output is attached. One thing that it doesn't show, however---the 
debconf question comes up *before* the postinst terminal output. (I 
double-checked this by redoing the above with the readline frontend; sure 
enough, it asks immediately after "Setting up mdadm (2.6.7.2-1) ...".)

(Also, in case it matters: The attached run was with the dialog frontend, 
and accepting the default value of "all".)
-------------- next part --------------
# dpkg --configure mdadm
Setting up mdadm (2.6.7.2-1) ...

case "${1:-}" in
  configure|reconfigure)

    if [ ! -f /proc/mdstat ] && [ -x $(command -v modprobe 2>/dev/null) ]; then
      modprobe -k md >/dev/null 2>&1 || :
    fi
    if [ ! -f /proc/mdstat ]; then
      echo 'W: mdadm: failed to load MD subsystem.' >&2
    fi

    if [ ! -e /dev/md15 ] \
      && [ ! -e /dev/.static/dev/md15 ] \
      && [ ! -e /dev/.devfsd ]; then

        echo -n 'Generating array device nodes... ' >&2
        cd /dev
        if /dev/MAKEDEV md >&2 >/dev/null; then
          echo 'done.' >&2
        else
          echo 'failed.' >&2
        fi
    fi

    DEBIANCONFIG=/etc/default/mdadm
    CONFIG=/etc/mdadm/mdadm.conf
    ALTCONFIG=/etc/mdadm.conf
    MDADM=/sbin/mdadm

    if [ -z "${2:-}" ] && [ -s /etc/mdctl/mdctl.conf ] \
        && [ ! -f /etc/mdadm/mdadm.conf ]; then
      cp -a /etc/mdctl/mdctl.conf /etc/mdadm/mdadm.conf
    fi

    # load current settings, most of which will be overwritten.
    [ -f $DEBIANCONFIG ] && . $DEBIANCONFIG

    db_get mdadm/mail_to
    MAILADDR="${RET:-root}"

    [ ! -f $CONFIG ] && [ -f $ALTCONFIG ] && CONFIG=$ALTCONFIG
    if [ ! -f $CONFIG ]; then
      echo -n 'Generating mdadm.conf... ' >&2
      # pass the MAILADDR variable into the script
      MDADM_MAILADDR__="$MAILADDR"; export MDADM_MAILADDR__
      if /usr/share/mdadm/mkconf generate $CONFIG 2>/dev/null; then
        echo done. >&2
      else
        echo "done (failed to scan arrays; /proc probably not mounted)." >&2
      fi
    elif dpkg --compare-versions "${2:-2.5.3-1}" le 2.5.3-1; then
      # we're upgrading from before 2.5.3-1 and there's apparently already
      # a configuration file which we cannot verify. We'll use the sentinel
      # during initramfs creation.
      md5sum $CONFIG > /var/lib/mdadm/CONF-UNCHECKED
    fi

    if [ -w $CONFIG ] && [ -z "${MDADM_MAILADDR__:-}" ]; then
      # if the configuration is writeable but has not been written just
      # before, then edit it to reflect the MAILADDR preference
      if grep -q '^MAILADDR' $CONFIG; then
        sed -i -e "s/^MAILADDR.*/MAILADDR $MAILADDR/" $CONFIG
      else
        echo "MAILADDR $MAILADDR" >> $CONFIG
      fi
    fi
    unset MDADM_MAILADDR__

    db_get mdadm/initrdstart
echo "RET = '$RET'"
    INITRDSTART="${RET:-all}"
    db_get mdadm/autostart
    AUTOSTART="${RET:-true}"
    db_get mdadm/autocheck
    AUTOCHECK="${RET:-true}"
    db_get mdadm/start_daemon
    START_DAEMON="${RET:-true}"
    #db_get mdadm/daemon_options
    [ -n "${DAEMON_OPTIONS:-}" ] || DAEMON_OPTIONS='--syslog'

    cat <<_eof > $DEBIANCONFIG
# mdadm Debian configuration
#
# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if
# you want. You can also change the values here and changes will be preserved.
# Do note that only the values are preserved; the rest of the file is
# rewritten.
#

# INITRDSTART:
#   list of arrays (or 'all') to start automatically when the initial ramdisk
#   loads. This list *must* include the array holding your root filesystem. Use
#   'none' to prevent any array from being started from the initial ramdisk.
INITRDSTART='$INITRDSTART'

# AUTOSTART:
#   should mdadm start arrays listed in /etc/mdadm/mdadm.conf automatically
#   during boot?
AUTOSTART=$AUTOSTART

# AUTOCHECK:
#   should mdadm run periodic redundancy checks over your arrays? See
#   /etc/cron.d/mdadm.
AUTOCHECK=$AUTOCHECK

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=$START_DAEMON

# DAEMON_OPTIONS:
#   additional options to pass to the daemon.
DAEMON_OPTIONS="$DAEMON_OPTIONS"

# VERBOSE:
#   if this variable is set to true, mdadm will be a little more verbose e.g.
#   when creating the initramfs.
VERBOSE=${VERBOSE:-false}

# MAIL_TO:
#   this variable is now managed in /etc/mdadm/mdadm.conf (MAILADDR).
#   Please see mdadm.conf(5).
_eof

    db_stop

    # try to undo udev rules (installed by 2.5.2-10, see 2.5.3.git200608202239-1
    # changelog). Do this before update-initramfs, which copies udev into
    # initrd.
    V=2.5.3.git200608202239-1~
    if [ "${1:-}" = "configure" ] && [ -n "${2:-}" ] \
        && dpkg --compare-versions $2 ge 2.5.2-10 \
        && dpkg --compare-versions $2 lt $V; then

      # first, disable the rules
      rm -f /etc/udev/rules.d/z60_mdadm.rules

      if echo "0843432c9c01ed95c42481eee0cf6fbf  /etc/udev/mdadm.rules" \
          | md5sum -c >/dev/null; then
        # no changes by user, so remove
        rm -f /etc/udev/mdadm.rules
      else
        echo "W: mdadm: I tried to remove /etc/udev/mdadm.rules (see changelog)," >&2
        echo "W: mdadm: but you have modified it, so I won't touch it. Please" >&2
        echo "W: mdadm: remove the file at your leisure." >&2
      fi
    fi

    command -v update-initramfs >/dev/null 2>&1 && update-initramfs -u
    ;;
esac
+ case "${1:-}" in
+ '[' '!' -f /proc/mdstat ']'
command -v modprobe 2>/dev/null
++ command -v modprobe
+ '[' -x /sbin/modprobe ']'
+ modprobe -k md
+ '[' '!' -f /proc/mdstat ']'
+ '[' '!' -e /dev/md15 ']'
+ '[' '!' -e /dev/.static/dev/md15 ']'
+ '[' '!' -e /dev/.devfsd ']'
+ echo -n 'Generating array device nodes... '
Generating array device nodes... + cd /dev
+ /dev/MAKEDEV md
+ echo done.
done.
+ DEBIANCONFIG=/etc/default/mdadm
+ CONFIG=/etc/mdadm/mdadm.conf
+ ALTCONFIG=/etc/mdadm.conf
+ MDADM=/sbin/mdadm
+ '[' -z '' ']'
+ '[' -s /etc/mdctl/mdctl.conf ']'
+ '[' -f /etc/default/mdadm ']'
+ db_get mdadm/mail_to
+ _db_cmd 'GET mdadm/mail_to'
+ IFS=' '
+ printf '%s\n' 'GET mdadm/mail_to'
+ IFS='
'
+ read -r _db_internal_line
+ RET=root
+ case ${_db_internal_line%%[ 	]*} in
+ return 0
+ MAILADDR=root
+ '[' '!' -f /etc/mdadm/mdadm.conf ']'
+ '[' -f /etc/mdadm.conf ']'
+ '[' '!' -f /etc/mdadm/mdadm.conf ']'
+ echo -n 'Generating mdadm.conf... '
Generating mdadm.conf... + MDADM_MAILADDR__=root
+ export MDADM_MAILADDR__
+ /usr/share/mdadm/mkconf generate /etc/mdadm/mdadm.conf
+ echo done.
done.
+ '[' -w /etc/mdadm/mdadm.conf ']'
+ '[' -z root ']'
+ unset MDADM_MAILADDR__
+ db_get mdadm/initrdstart
+ _db_cmd 'GET mdadm/initrdstart'
+ IFS=' '
+ printf '%s\n' 'GET mdadm/initrdstart'
+ IFS='
'
+ read -r _db_internal_line
+ RET=all
+ case ${_db_internal_line%%[ 	]*} in
+ return 0
+ echo 'RET = '\''all'\'''
RET = 'all'
+ INITRDSTART=all
+ db_get mdadm/autostart
+ _db_cmd 'GET mdadm/autostart'
+ IFS=' '
+ printf '%s\n' 'GET mdadm/autostart'
+ IFS='
'
+ read -r _db_internal_line
+ RET=false
+ case ${_db_internal_line%%[ 	]*} in
+ return 0
+ AUTOSTART=false
+ db_get mdadm/autocheck
+ _db_cmd 'GET mdadm/autocheck'
+ IFS=' '
+ printf '%s\n' 'GET mdadm/autocheck'
+ IFS='
'
+ read -r _db_internal_line
+ RET=false
+ case ${_db_internal_line%%[ 	]*} in
+ return 0
+ AUTOCHECK=false
+ db_get mdadm/start_daemon
+ _db_cmd 'GET mdadm/start_daemon'
+ IFS=' '
+ printf '%s\n' 'GET mdadm/start_daemon'
+ IFS='
'
+ read -r _db_internal_line
+ RET=false
+ case ${_db_internal_line%%[ 	]*} in
+ return 0
+ START_DAEMON=false
+ '[' -n '' ']'
+ DAEMON_OPTIONS=--syslog
+ cat
+ db_stop
+ echo STOP
+ V=2.5.3.git200608202239-1~
+ '[' configure = configure ']'
+ '[' -n '' ']'
+ command -v update-initramfs
+ update-initramfs -u
update-initramfs: deferring update (trigger activated)

# remove S04 installed as a fix to #294404 as it does not work
# we only remove the startup links if the previous version was 1.9.0-2.1 (the
# one with the erroneous fix) and the S04 link exists to make sure that
# chances are minimised to overwrite admin changes (even though this would
# not affect woody upgraders)
if [ "${1:-}" = "configure" ] && [ "${2:-}" = "1.9.0-2.1" ] \
   && test -L /etc/rcS.d/S04mdadm-raid;
then 
  update-rc.d -f mdadm-raid remove
fi
+ '[' configure = configure ']'
+ '[' '' = 1.9.0-2.1 ']'

if [ "${1:-}" = "configure" ] && dpkg --compare-versions ${2:-2.6.7-1} lt 2.6.7-1; then
  # stop RAIDs a bit later, see #486012
  for i in 0 6; do
    test -L /etc/rc${i}.d/S50mdadm-raid && test ! -L /etc/rc${i}.d/S60mdadm-raid \
      && mv /etc/rc${i}.d/S50mdadm-raid /etc/rc${i}.d/S60mdadm-raid
  done
fi
+ '[' configure = configure ']'
+ dpkg --compare-versions 2.6.7-1 lt 2.6.7-1

# See #369953
set +u
+ set +u
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-jd-rebuild-raid
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-raid5-vs-10
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-superblock-formats
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-md-txt
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-readme-recipes
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-root-on-raid
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installdocs
if [ "$1" = configure ] && which install-docs >/dev/null 2>&1; then
	install-docs -i /usr/share/doc-base/mdadm-faq
fi
+ '[' configure = configure ']'
+ which install-docs
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/mdadm-raid" ]; then
	update-rc.d mdadm-raid start 25 S . start 60 0 6 . >/dev/null || exit $?
fi
+ '[' -x /etc/init.d/mdadm-raid ']'
+ update-rc.d mdadm-raid start 25 S . start 60 0 6 .
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/mdadm" ]; then
	update-rc.d mdadm defaults 25 >/dev/null
	if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
		invoke-rc.d mdadm start || exit $?
	else
		/etc/init.d/mdadm start || exit $?
	fi
fi
+ '[' -x /etc/init.d/mdadm ']'
+ update-rc.d mdadm defaults 25
which invoke-rc.d 2>/dev/null
++ which invoke-rc.d
+ '[' -x /usr/sbin/invoke-rc.d ']'
+ invoke-rc.d mdadm start
# End automatically added section
# Automatically added by dh_installudev
if [ "$1" = configure ]; then
	if [ -e "/etc/udev/mdadm.vol_id.rules" ]; then
		echo "Preserving user changes to /etc/udev/rules.d/65_mdadm.vol_id.rules ..."
		if [ -e "/etc/udev/rules.d/65_mdadm.vol_id.rules" ]; then
			mv -f "/etc/udev/rules.d/65_mdadm.vol_id.rules" "/etc/udev/rules.d/65_mdadm.vol_id.rules.dpkg-new"
		fi
		mv -f "/etc/udev/mdadm.vol_id.rules" "/etc/udev/rules.d/65_mdadm.vol_id.rules"
	fi
fi
+ '[' configure = configure ']'
+ '[' -e /etc/udev/mdadm.vol_id.rules ']'
# End automatically added section

set -u
+ set -u

# do start mdadm-raid, but don't use dh_installinit to do so, to prevent
# stopping raids on remove/upgrade.
if [ -x /etc/init.d/mdadm-raid ]; then
  if [ -x "$(command -v invoke-rc.d)" ]; then
    invoke-rc.d mdadm-raid start || exit $?
  else
    /etc/init.d/mdadm-raid start || exit $?
  fi
fi
+ '[' -x /etc/init.d/mdadm-raid ']'
command -v invoke-rc.d
++ command -v invoke-rc.d
+ '[' -x /usr/sbin/invoke-rc.d ']'
+ invoke-rc.d mdadm-raid start
Assembling MD arrays...done (disabled in /etc/default/mdadm).
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.26-1-686
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
W: mdadm: no arrays defined in configuration file.
# 


More information about the pkg-mdadm-devel mailing list