config() {
  NEW="$1"
  OLD="$(dirname $NEW)/$(basename $NEW .new)"
  # If there's no config file by that name, mv it over:
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
    # toss the redundant copy
    rm $NEW
  fi
  # Otherwise, we leave the .new copy for the admin to consider...
}

preserve_perms() {
  NEW="$1"
  OLD="$(dirname $NEW)/$(basename $NEW .new)"
  if [ -e $OLD ]; then
    cp -a $OLD ${NEW}.incoming
    cat $NEW > ${NEW}.incoming
    mv ${NEW}.incoming $NEW
  fi
  config $NEW
}

find etc/rc.d -type f -name 'rc.xen*.new' \
  | while read new ; do preserve_perms $new ; done

find etc/default -type f -name 'xen*.new' \
  | while read new ; do config $new ; done

find etc/xen -type f -name '*.new' \
  | while read new ; do config $new ; done

( cd boot ; rm -rf xen.gz )
( cd boot ; ln -sf xen-4.9.0.gz xen.gz )
( cd usr/lib64 ; rm -rf libxlutil.so )
( cd usr/lib64 ; ln -sf libxlutil.so.4.9 libxlutil.so )
( cd usr/lib64 ; rm -rf libxencall.so )
( cd usr/lib64 ; ln -sf libxencall.so.1 libxencall.so )
( cd usr/lib64 ; rm -rf libxentoollog.so.1 )
( cd usr/lib64 ; ln -sf libxentoollog.so.1.0 libxentoollog.so.1 )
( cd usr/lib64 ; rm -rf libvhd.so.1.0 )
( cd usr/lib64 ; ln -sf libvhd.so.1.0.0 libvhd.so.1.0 )
( cd usr/lib64 ; rm -rf libxenctrl.so.4.9 )
( cd usr/lib64 ; ln -sf libxenctrl.so.4.9.0 libxenctrl.so.4.9 )
( cd usr/lib64 ; rm -rf libxenvchan.so.4.9 )
( cd usr/lib64 ; ln -sf libxenvchan.so.4.9.0 libxenvchan.so.4.9 )
( cd usr/lib64 ; rm -rf libxenevtchn.so.1 )
( cd usr/lib64 ; ln -sf libxenevtchn.so.1.0 libxenevtchn.so.1 )
( cd usr/lib64 ; rm -rf libblktapctl.so )
( cd usr/lib64 ; ln -sf libblktapctl.so.1.0 libblktapctl.so )
( cd usr/lib64 ; rm -rf libxenevtchn.so )
( cd usr/lib64 ; ln -sf libxenevtchn.so.1 libxenevtchn.so )
( cd usr/lib64 ; rm -rf libfsimage.so )
( cd usr/lib64 ; ln -sf libfsimage.so.1.0 libfsimage.so )
( cd usr/lib64 ; rm -rf libxenstat.so.0 )
( cd usr/lib64 ; ln -sf libxenstat.so.0.0 libxenstat.so.0 )
( cd usr/lib64 ; rm -rf libxencall.so.1 )
( cd usr/lib64 ; ln -sf libxencall.so.1.0 libxencall.so.1 )
( cd usr/lib64 ; rm -rf libxenguest.so.4.9 )
( cd usr/lib64 ; ln -sf libxenguest.so.4.9.0 libxenguest.so.4.9 )
( cd usr/lib64 ; rm -rf libxenstat.so )
( cd usr/lib64 ; ln -sf libxenstat.so.0 libxenstat.so )
( cd usr/lib64 ; rm -rf libxentoollog.so )
( cd usr/lib64 ; ln -sf libxentoollog.so.1 libxentoollog.so )
( cd usr/lib64 ; rm -rf libxengnttab.so.1 )
( cd usr/lib64 ; ln -sf libxengnttab.so.1.1 libxengnttab.so.1 )
( cd usr/lib64 ; rm -rf libxenlight.so.4.9 )
( cd usr/lib64 ; ln -sf libxenlight.so.4.9.0 libxenlight.so.4.9 )
( cd usr/lib64 ; rm -rf libxenvchan.so )
( cd usr/lib64 ; ln -sf libxenvchan.so.4.9 libxenvchan.so )
( cd usr/lib64 ; rm -rf libxengnttab.so )
( cd usr/lib64 ; ln -sf libxengnttab.so.1 libxengnttab.so )
( cd usr/lib64 ; rm -rf libxendevicemodel.so.1 )
( cd usr/lib64 ; ln -sf libxendevicemodel.so.1.0 libxendevicemodel.so.1 )
( cd usr/lib64 ; rm -rf libxenforeignmemory.so.1 )
( cd usr/lib64 ; ln -sf libxenforeignmemory.so.1.1 libxenforeignmemory.so.1 )
( cd usr/lib64 ; rm -rf libxenforeignmemory.so )
( cd usr/lib64 ; ln -sf libxenforeignmemory.so.1 libxenforeignmemory.so )
( cd usr/lib64 ; rm -rf libblktapctl.so.1.0 )
( cd usr/lib64 ; ln -sf libblktapctl.so.1.0.0 libblktapctl.so.1.0 )
( cd usr/lib64 ; rm -rf libxlutil.so.4.9 )
( cd usr/lib64 ; ln -sf libxlutil.so.4.9.0 libxlutil.so.4.9 )
( cd usr/lib64 ; rm -rf libxenguest.so )
( cd usr/lib64 ; ln -sf libxenguest.so.4.9 libxenguest.so )
( cd usr/lib64 ; rm -rf libxenlight.so )
( cd usr/lib64 ; ln -sf libxenlight.so.4.9 libxenlight.so )
( cd usr/lib64 ; rm -rf libvhd.so )
( cd usr/lib64 ; ln -sf libvhd.so.1.0 libvhd.so )
( cd usr/lib64 ; rm -rf libxenstore.so.3.0 )
( cd usr/lib64 ; ln -sf libxenstore.so.3.0.3 libxenstore.so.3.0 )
( cd usr/lib64 ; rm -rf libfsimage.so.1.0 )
( cd usr/lib64 ; ln -sf libfsimage.so.1.0.0 libfsimage.so.1.0 )
( cd usr/lib64 ; rm -rf libxendevicemodel.so )
( cd usr/lib64 ; ln -sf libxendevicemodel.so.1 libxendevicemodel.so )
( cd usr/lib64 ; rm -rf libxenctrl.so )
( cd usr/lib64 ; ln -sf libxenctrl.so.4.9 libxenctrl.so )
( cd usr/lib64 ; rm -rf libxenstore.so )
( cd usr/lib64 ; ln -sf libxenstore.so.3.0 libxenstore.so )
( cd usr/include ; rm -rf xs.h )
( cd usr/include ; ln -sf xenstore-compat/xs.h xs.h )
( cd usr/include ; rm -rf xs_lib.h )
( cd usr/include ; ln -sf xenstore-compat/xs_lib.h xs_lib.h )
( cd usr/bin ; rm -rf xenstore-write )
( cd usr/bin ; ln -sf xenstore xenstore-write )
( cd usr/bin ; rm -rf xenstore-rm )
( cd usr/bin ; ln -sf xenstore xenstore-rm )
( cd usr/bin ; rm -rf xenstore-watch )
( cd usr/bin ; ln -sf xenstore xenstore-watch )
( cd usr/bin ; rm -rf xenstore-chmod )
( cd usr/bin ; ln -sf xenstore xenstore-chmod )
( cd usr/bin ; rm -rf xenstore-read )
( cd usr/bin ; ln -sf xenstore xenstore-read )
( cd usr/bin ; rm -rf xenstore-exists )
( cd usr/bin ; ln -sf xenstore xenstore-exists )
( cd usr/bin ; rm -rf xenstore-ls )
( cd usr/bin ; ln -sf xenstore xenstore-ls )
( cd usr/bin ; rm -rf xenstore-list )
( cd usr/bin ; ln -sf xenstore xenstore-list )
( cd usr/bin ; rm -rf pygrub )
( cd usr/bin ; ln -sf /usr/libexec/xen/bin/pygrub pygrub )
