#!/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/#VENDORFILE# ]; then
  ln -sf /etc/dpkg/origins/#VENDORFILE# /etc/dpkg/origins/default
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
