#!/bin/sh
# Copyright © 2001-2005 Mario Jou/3en <joussen@debian.org>
# Copyright © 2005-2008 Martin F. Krafft <madduck@debian.org>
# Distributable under the terms of the GNU GPL version 2.
#

. /usr/share/debconf/confmodule
# See #369953 for ordering
set -eu

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

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

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

        echo -n 'Generating array device nodes... ' >&2
        cd /dev
        if $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/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.
#

# 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

    # Remove old init script
    update-rc.d mdadm-raid remove

    command -v update-initramfs >/dev/null 2>&1 && update-initramfs -u

    if type update-grub2 1>/dev/null 2>/dev/null; then
        update-grub || true
    fi
    ;;
esac

# See #369953
set +u
#DEBHELPER#
