Try unmounting [..]/dev harder
[grml-debootstrap.git] / chroot-script
index ce3f624..1a74aef 100755 (executable)
@@ -44,7 +44,7 @@ stage() {
   if [ -n "$2" ] ; then
      echo "$2" > "$STAGES/$1"
      return 0
-  elif grep -q done "$STAGES/$1" 2>/dev/null ; then
+  elif grep -q 'done' "$STAGES/$1" 2>/dev/null ; then
      echo "   [*] Notice: stage $1 has been executed already, skipping execution therefore.">&2
      return 1
   fi
@@ -77,8 +77,11 @@ chrootmirror() {
   if [ -n "$ISO" ] ; then
     echo "Adjusting sources.list for ISO (${ISO})."
     echo "deb $ISO $RELEASE $COMPONENTS" > /etc/apt/sources.list
-    echo "Adding mirror entry (${MIRROR}) to sources.list."
-    [ -n "$MIRROR" ] && echo "deb $MIRROR $RELEASE $COMPONENTS" >> /etc/apt/sources.list || true
+
+    if [ -n "$MIRROR" ] ; then
+      echo "Adding mirror entry (${MIRROR}) to sources.list."
+      echo "deb $MIRROR $RELEASE $COMPONENTS" >> /etc/apt/sources.list
+    fi
   else
     if [ -n "$MIRROR" ] ; then
       echo "Adjusting sources.list for mirror (${MIRROR})."
@@ -86,9 +89,19 @@ chrootmirror() {
     fi
   fi
 
+  # LTS support
+  case "$RELEASE" in
+    squeeze)
+      if [ -n "$MIRROR" ] ; then
+        echo "Release matching $RELEASE - enabling LTS support in sources.list"
+        echo "deb $MIRROR ${RELEASE}-lts $COMPONENTS" >> /etc/apt/sources.list
+      fi
+      ;;
+  esac
+
   # add security.debian.org:
   case "$RELEASE" in
-    unstable|sid) ;;  # no security pool available
+    unstable|sid|lenny) ;;  # no security pool available
     *)
       echo "Adding security.debian.org to sources.list."
       echo "deb http://security.debian.org ${RELEASE}/updates $COMPONENTS" >> /etc/apt/sources.list
@@ -109,7 +122,7 @@ remove_chrootmirror() {
     TMP_ISO=$(echo "$ISO" |sed 's#/#\\/#g')
     sed -i "/deb $TMP_ISO $RELEASE $COMPONENTS/ D" /etc/apt/sources.list
   else
-    if [ -n "$MIRROR" -a -n "$(echo $MIRROR|grep file:)" ] ; then
+    if [ -n "$MIRROR" ] && echo "$MIRROR" | grep -q 'file:' ; then
       echo "Removing local mirror (${MIRROR}) from sources.list."
       TMP_MIRROR=$(echo "$MIRROR" |sed 's#/#\\/#g')
       sed -i "/deb $TMP_MIRROR $RELEASE $COMPONENTS/ D" /etc/apt/sources.list
@@ -167,14 +180,14 @@ EOF
 
 # check available backports release version {{{
 checkbackports() {
-  wget -q -O/dev/null http://backports.debian.org/debian-backports/dists/${1}-backports/Release
+  wget -q -O/dev/null "http://backports.debian.org/debian-backports/dists/${1}-backports/Release"
 }
 # }}}
 
 # feature to provide Debian backports repos {{{
 backportrepos() {
     if [ -n "$BACKPORTREPOS" ] ; then
-        if ! checkbackports $RELEASE ; then
+        if ! checkbackports "$RELEASE" ; then
             echo "Backports for ${RELEASE} are not available." >&2
             exit 1
         else
@@ -247,7 +260,7 @@ packages() {
   # as seen to prevent debconf from asking the question interactively.
   [ -f /etc/debootstrap/debconf-selections ] && {
     echo "Preseeding the debconf database, some lines might be skipped..."
-    cat /etc/debootstrap/debconf-selections | debconf-set-selections
+    debconf-set-selections < /etc/debootstrap/debconf-selections
   }
 
   if [ "$PACKAGES" = 'yes' ] ; then
@@ -291,9 +304,19 @@ get_kernel_version() {
     return 0
   fi
 
-  case $ARCH in
-    i386)   KARCH=686   ;;
-    amd64)  KARCH=amd64 ;;
+  local KARCH
+
+  case "$ARCH" in
+    i386)
+      case "$RELEASE" in
+        lenny|squeeze|wheezy) KARCH='686' ;;
+        # since jessie the linux-image-686 image doesn't exist any longer
+        *) KARCH='686-pae' ;;
+      esac
+      ;;
+    amd64)
+      KARCH='amd64'
+      ;;
     *)
       echo "Only i386 and amd64 are currently supported" >&2
       return 1
@@ -365,12 +388,12 @@ passwords()
     b='2'
      echo "Setting password for user root:"
      while [ "$a" != "$b" ] ; do
-       echo -n "Enter new UNIX password for user root: "
+       printf "Enter new UNIX password for user root: "
        askpass
        a="$resp"
        unset resp
        echo
-       echo -n "Retype new UNIX password for user root: "
+       printf "Retype new UNIX password for user root: "
        askpass
        b="$resp"
        unset resp
@@ -414,25 +437,6 @@ EOF
 }
 # }}}
 
-# set up /etc/network/interfaces {{{
-interfaces() {
-  if ! [ -r /etc/network/interfaces ] || ! grep -q "auto lo" /etc/network/interfaces ; then
-     echo "Setting up /etc/network/interfaces"
-     cat >> /etc/network/interfaces << EOF
-
-# loopback device:
-iface lo inet loopback
-auto lo
-
-# eth0:
-# iface eth0 inet dhcp
-# auto eth0
-
-EOF
-  fi
-}
-# }}}
-
 # set default locales {{{
 default_locales() {
   if [ -n "$DEFAULT_LOCALES" ] ; then
@@ -442,7 +446,7 @@ default_locales() {
       return 0
     fi
 
-    /usr/sbin/update-locale LANG="$DEFAULT_LOCALES"
+    /usr/sbin/update-locale LANGUAGE="$DEFAULT_LANGUAGE" LANG="$DEFAULT_LOCALES"
   fi
 }
 # }}}
@@ -451,7 +455,7 @@ default_locales() {
 timezone() {
   if [ -n "$TIMEZONE" ] ; then
      echo "Adjusting /etc/localtime"
-     ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
+     ln -sf "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
   fi
 }
 # }}}
@@ -508,6 +512,20 @@ hostname() {
         sed -i "s/^inet_interfaces = .*/inet_interfaces = loopback-only/" /etc/postfix/main.cf
         grep -q inet_interfaces /etc/postfix/main.cf || echo 'inet_interfaces = loopback-only' >> /etc/postfix/main.cf
      fi
+     if [ -r /etc/mailname ] ; then
+        # adjust /etc/mailname
+        local etc_mail_domain=$(/bin/dnsdomainname 2>/dev/null || echo localdomain)
+        case "$HOSTNAME" in
+          *.*)
+            local mailname="$HOSTNAME"
+            ;;
+          *)
+            local mailname="${HOSTNAME}.${etc_mail_domain}"
+            ;;
+        esac
+        echo "Setting mailname to ${mailname}"
+        echo "$mailname" > /etc/mailname
+     fi
   fi
 }
 # }}}
@@ -526,7 +544,7 @@ initrd() {
   # generate initrd
   if [ -n "$INITRD" ] ; then
      echo "Generating initrd."
-     update-initramfs -c -t -k $KERNELVER
+     update-initramfs -c -t -k "$KERNELVER"
   fi
 }
 # }}}
@@ -626,12 +644,12 @@ trap signal_handler HUP INT QUIT TERM
  install_policy_rcd
 
  for i in chrootmirror grmlrepos backportrepos kernelimg_conf \
-     kernel packages extrapackages  reconfigure hosts interfaces \
+     kernel packages extrapackages reconfigure hosts \
      default_locales timezone fstab hostname initrd grub_install passwords \
      custom_scripts upgrade_system remove_apt_cache services \
      remove_chrootmirror; do
      if stage $i ; then
-       $i && stage $i done || exit 1
+       $i && stage $i 'done' || exit 1
      fi
   done
   # always execute the finalize stage: