#!/bin/sh
set -e

install_local_dir() {
  if [ ! -d $1 ]; then
    mkdir -p $1
  fi
  if [ -f /etc/staff-group-for-usr-local ]; then
    chown root:staff $1 2> /dev/null || true
    chmod 2775 $1 2> /dev/null || true
  fi
}

install_from_default() {
  if [ ! -f $2 ]; then
    cp -p /usr/share/base-files/$1 $2
  fi
}

install_directory() {
  if [ ! -d /$1 ]; then
    mkdir /$1
    chown root:$3 /$1
    chmod $2 /$1
  fi
}

migrate_directory() {
  if [ ! -L $1 ]; then
    rmdir $1
    ln -s $2 $1
  fi
}

update_to_current_default() {
  if [ -f $2 ]; then
    md5=`md5sum $2 | cut -f 1 -d " "`
    if grep -q "$md5" /usr/share/base-files/$1.md5sums; then
      if ! cmp -s /usr/share/base-files/$1 $2; then
        cp -p /usr/share/base-files/$1 $2
        echo Updating $2 to current default.
      fi
    fi
  fi
}

if [ ! -e /etc/dpkg/origins/default ]; then
  if [ -e /etc/dpkg/origins/#VENDORFILE# ]; then
    ln -sf #VENDORFILE# /etc/dpkg/origins/default
  fi
fi

if [ "$1" = "configure" ] && [ "$2" = "" ]; then
  install_from_default staff-group-for-usr-local \
                                     /etc/staff-group-for-usr-local
  install_from_default dot.profile   /root/.profile
  install_from_default dot.bashrc    /root/.bashrc
  install_from_default profile       /etc/profile
  install_from_default motd          /etc/motd
  install_directory mnt       755 root
  install_directory srv       755 root
  install_directory opt       755 root
  install_directory etc/opt   755 root
  install_directory var/opt   755 root
  install_directory media     755 root
  install_directory var/mail 2775 mail
  if [ ! -L /var/spool/mail ]; then
    ln -s ../mail /var/spool/mail
  fi
  install_directory run/lock 1777 root
  migrate_directory /var/run /run
  migrate_directory /var/lock /run/lock

  install_local_dir /usr/local
  install_local_dir /usr/local/share
  install_local_dir /usr/local/share/man
  install_local_dir /usr/local/bin
  install_local_dir /usr/local/games
  install_local_dir /usr/local/lib
  install_local_dir /usr/local/include
  install_local_dir /usr/local/sbin
  install_local_dir /usr/local/src
  install_local_dir /usr/local/etc
  ln -sf share/man /usr/local/man

  if [ ! -f /var/log/wtmp ]; then
    echo -n>/var/log/wtmp
  fi
  if [ ! -f /var/log/btmp ]; then
    echo -n>/var/log/btmp
  fi
  if [ ! -f /var/log/lastlog ]; then
    echo -n>/var/log/lastlog
  fi
  chown root:utmp /var/log/wtmp /var/log/btmp /var/log/lastlog
  chmod 664 /var/log/wtmp /var/log/lastlog
  chmod 660 /var/log/btmp
  if [ ! -f /var/run/utmp ]; then
    echo -n>/var/run/utmp
  fi
  chown root:utmp /var/run/utmp
  chmod 664 /var/run/utmp
fi

if [ ! -d /var/lib/dpkg ]; then
  mkdir -m 755 -p /var/lib/dpkg
fi
if [ ! -f /var/lib/dpkg/status ]; then
  echo > /var/lib/dpkg/status
  chmod 644 /var/lib/dpkg/status
fi

if [ ! -f /usr/info/dir ] && [ ! -f /usr/share/info/dir ]; then
  install_from_default info.dir /usr/share/info/dir
  chmod 644 /usr/share/info/dir
fi

if [ "$1" = "configure" ] && [ "$2" != "" ]; then
  update_to_current_default profile       /etc/profile
  update_to_current_default dot.profile   /root/.profile
  if dpkg --compare-versions "$2" lt-nl "7.7"; then
    install_directory mnt 755 root
  fi
fi

if dpkg --compare-versions "$2" lt-nl "6.10"; then
  install_from_default staff-group-for-usr-local \
    /etc/staff-group-for-usr-local
fi
