handle new grub brokenness
[mirror/dsa-wiki.git] / input / howto / install-kvm.creole
index d60f692..d97343d 100644 (file)
@@ -14,8 +14,10 @@ setup_env() {
  read guest &&
  target=/mnt/target &&
  mirror=`cat /etc/apt/sources.list /etc/apt/sources.list.d/debian.list 2>/dev/null | awk '/^deb.*debian/ {print $2; exit}'` &&
- vg=`vgdisplay -c | awk -F: '{print $1;exit}' | sed 's/ *//g'` &&
- echo "Chosen vg is $vg" &&
+ vgdefault=`vgdisplay -c | awk -F: '{print $1;exit}' | sed 's/ *//g'` &&
+ echo -n "Volume group? [$vgdefault]: " &&
+ read vg &&
+ if [ "$vg" = "" ]; then vg="$vgdefault"; fi &&
  echo -n "Use lvm for non-swap partitions? [Y/n] " &&
  read use_lvm &&
  if [ "$use_lvm" = "n" ]; then
@@ -26,18 +28,20 @@ setup_env() {
    echo "Root device will be $dev_root" &&
    echo "Boot device will be $dev_boot" &&
    echo "Make sure they exist already." &&
-   mkfs=mkfs.xfs
+   fs=xfs
  else
    use_lvm="y" &&
    dev_root="/dev/mapper/$vg-$guest--root" &&
    dev_boot="/dev/mapper/$vg-$guest--boot" &&
    echo "Root device will be $dev_root" &&
    echo "Boot device will be $dev_boot" &&
-   mkfs=mkfs.ext3
+   fs=ext3
  fi &&
  dev_swap="/dev/mapper/$vg-$guest--swap" &&
+ echo -n "Use a /boot filesystem? [Y/n] " &&
+ read use_boot &&
  echo "Swap device will be $dev_swap" &&
- echo "mkfs is $mkfs"
+ echo "fs is $fs"
  echo "Chosen mirror is $mirror"
 }
 }}}
@@ -64,26 +68,32 @@ trivial.
 #######
 # install base
 
- apt-get install debootstrap kpartx &&
+ apt-get install debootstrap debian-archive-keyring kpartx &&
  if [ "$use_lvm" = "y" ]; then
-   lvcreate -L 128m -n "$guest"-boot /dev/"$vg" &&
-   lvcreate -L 4g -n "$guest"-root /dev/"$vg" &&
+   if [ "$use_boot" != "n" ] ; then
+     lvcreate -L 128m -n "$guest"-boot /dev/"$vg"
+   fi &&
+   lvcreate -L 4g -n "$guest"-root /dev/"$vg"
  fi &&
- lvcreate -L 4g -n "$guest"-swap /dev/"$vg"
+ lvcreate -L 4g -n "$guest"-swap /dev/"$vg" &&
  : &&
- ( echo ',,L,*' | sfdisk "$dev_boot" ) &&
- kpartx -v -a "$dev_boot" &&
- $mkfs "$dev_boot"1 &&
- $mkfs "$dev_root" &&
+ if [ "$use_boot" != "n" ] ; then
+   ( echo ',,L,*' | sfdisk "$dev_boot" ) &&
+   kpartx -v -a "$dev_boot" &&
+   mkfs."$fs" "$dev_boot"1
+ fi &&
+ mkfs."$fs" "$dev_root" &&
  mkswap "$dev_swap" &&
  : &&
  mkdir -p "$target" &&
  mount "$dev_root" "$target" &&
- mkdir -p "$target/boot" &&
- mount "$dev_boot"1 "$target/boot" &&
+ if [ "$use_boot" != "n" ] ; then
+   mkdir -p "$target/boot" &&
+   mount "$dev_boot"1 "$target/boot"
+ fi &&
 
  cd "$target" &&
- debootstrap --variant=minbase lenny . "$mirror"
+ debootstrap --variant=minbase --keyring=/usr/share/keyrings/debian-archive-keyring.gpg lenny . "$mirror"
 }}}
 
 And finalize the setup:
@@ -110,22 +120,51 @@ EOF
  apt-key exportall | chroot . apt-key add - &&
  chroot . apt-get update &&
  echo "Apt::Install-Recommends 0;" > etc/apt/apt.conf.d/local-recommends &&
- chroot . apt-get install net-tools iproute ifupdown dialog vim netbase &&
- #chroot . apt-get remove --purge cpp dpkg-dev g++ gcc gcc-4.2-base libatm1 libdevmapper1.02.1 libgpm2 libc6-dev linux-libc-dev libstdc++6-4.3-dev binutils cpp-4.3 gcc-4.3 gettext-base libgmp3c2 libgomp1 libmpfr1ldbl libtimedate-perl
- # don't - it may start daemons
- #chroot . apt-get dist-upgrade
- chroot . apt-get install grub &&
- cp -av usr/lib/grub/x86_64-pc boot/grub &&
- grub << EOF &&
+ chroot . apt-get install net-tools iproute ifupdown dialog vim netbase xfsprogs &&
+ cp -av $dev_root dev/ &&
+ if [ "$use_boot" != "n" ] ; then
+   DEBIAN_FRONTEND=noninteractive chroot . apt-get install grub &&
+   cp -av $dev_boot $dev_boot""1 dev/ &&
+   echo "(hd0) /dev/`basename $dev_boot`" > boot/grub/device.map &&
+   if [ -e usr/lib/grub/x86_64-pc ] ; then cp -av usr/lib/grub/x86_64-pc boot/grub ;
+                                      else cp -av usr/lib/grub/i386-pc boot/grub ; fi &&
+   grub << EOF &&
 device (hd0) $dev_boot
 root (hd0,0)
 setup (hd0)
 quit
 EOF
- # install a kernel image
- echo -e "do_symlinks = yes\nlink_in_boot = yes\ndo_initrd = yes" > etc/kernel-img.conf &&
- chroot . apt-get install linux-image-2.6-amd64
-
+   # install a kernel image
+   cat > etc/kernel-img.conf << EOF &&
+do_symlinks = yes
+link_in_boot = yes
+do_initrd = yes
+EOF
+   chroot . apt-get install linux-image-2.6-amd64 &&
+   cat >> etc/kernel-img.conf << EOF
+postinst_hook = /usr/sbin/update-grub
+postrm_hook   = /usr/sbin/update-grub
+EOF
+    rm -v dev/"`basename $dev_boot`" dev/"`basename $dev_boot`1" boot/grub/device.map &&
+  else
+    cat > etc/kernel-img.conf << EOF &&
+do_symlinks = no
+do_initrd = yes
+EOF
+    chroot . apt-get install linux-image-2.6-amd64 &&
+   cat >> etc/kernel-img.conf << EOF
+postinst_hook = update-grub
+postrm_hook   = update-grub
+EOF
+    DEBIAN_FRONTEND=noninteractive chroot . apt-get install grub2 &&
+    echo "(hd0) /dev/`basename $dev_root`" > boot/grub/device.map &&
+    chroot . grub-install /dev/"`basename $dev_root`" &&
+    sed -i -e 's/^#GRUB_TERMINAL=console/GRUB_TERMINAL=console/' etc/default/grub &&
+    chroot . update-grub &&
+    sed -i -e "s#dev/`basename $dev_root`#dev/vda#g" boot/grub/grub.cfg
+    rm -v boot/grub/device.map
+  fi &&
+  rm -v dev/"`basename $dev_root`"
 }}}
 
 And a fstab and a boot loader config
@@ -134,8 +173,9 @@ And a fstab and a boot loader config
  # doesn't work: chroot . update-grub
  rootuuid=`vol_id "$dev_root" "$target" | awk -F= '$1=="ID_FS_UUID" {print $2}'` &&
  swapuuid=`vol_id "$dev_swap" "$target" | awk -F= '$1=="ID_FS_UUID" {print $2}'` &&
- bootuuid=`vol_id "$dev_boot"1  | awk -F= '$1=="ID_FS_UUID" {print $2}'` &&
- cat > boot/grub/menu.lst << EOF &&
+ if [ "$use_boot" != "n" ] ; then
+   bootuuid=`vol_id "$dev_boot"1  | awk -F= '$1=="ID_FS_UUID" {print $2}'` &&
+   cat > boot/grub/menu.lst << EOF
 default 0
 timeout 5
 color cyan/blue white/blue
@@ -151,11 +191,19 @@ initrd /initrd.img
 
 ### END DEBIAN AUTOMAGIC KERNELS LIST
 EOF
+ fi &&
+ if [ "$fs" = "ext3" ]; then
+   rootopts="errors=remount-ro"
+ else
+   rootopts="defaults"
+ fi
  cat > etc/fstab << EOF &&
-UUID=$rootuuid    /               ext3    errors=remount-ro 0       1
-UUID=$bootuuid    /boot           ext3    defaults        0       2
+UUID=$rootuuid    /               $fs    $rootopts 0       1
 UUID=$swapuuid    none            swap    sw              0       0
 EOF
+ if [ "$use_boot" != "n" ] ; then
+    echo "UUID=$bootuuid    /boot           $fs    defaults        0       2" >> etc/fstab
+ fi
  cat > etc/network/interfaces << EOF
 auto lo
 iface lo inet loopback
@@ -177,9 +225,11 @@ And unmount:
 
 {{{
   cd / &&
- umount "$target"/boot &&
+ if [ "$use_boot" != "n" ] ; then
+   umount "$target"/boot &&
+   kpartx -v -d "$dev_boot"
+ fi &&
  umount "$target" &&
- kpartx -v -d "$dev_boot" &&
  rmdir "$target"
 }}}