diff --git a/scripts/integrate-distro.sh b/scripts/integrate-distro.sh index 9d9339e3..4e847bab 100644 --- a/scripts/integrate-distro.sh +++ b/scripts/integrate-distro.sh @@ -7,44 +7,9 @@ suse_version=12.3 o_name=suse-$suse_version cmd=install cwd=`pwd` - -initrd_modules=" - via-rhine - r8169 - e1000 - e1000e - b44 - myri10ge - forcedeth - 8139too - sata_nv - nfs - nfs_acl - auth_rpcgss - nfsv3 - nfsv4 - fscache - lockd - sunrpc - - sis - edd - sisfb - evdev - shpchp - sis_agp - hwmon - aufs - ahci - libahci - usbhid - hid - uhci_hcd - ohci_hcd - ehci_hcd - usbcore - hid-generic -" +ssh_auth_sock=/tmp/agent-host.sock +env_ssh_auth_sock=$SSH_AUTH_SOCK +initrd_modules=" via-rhine r8169 e1000 e1000e b44 myri10ge forcedeth 8139too sata_nv nfs nfs_acl auth_rpcgss nfsv3 nfsv4 fscache lockd sunrpc sis edd sisfb evdev shpchp sis_agp hwmon aufs ahci libahci usbhid hid uhci_hcd ohci_hcd ehci_hcd usbcore hid-generic" kernel_flavour=-desktop @@ -116,6 +81,9 @@ case $suse_version in kernel_version=3.9.9-jng20-1.1$kernel_flavour rpm_kernel_version=3.9.9~jng20-1.1 + + kernel_version=3.7.10-jng12$kernel_flavour + rpm_kernel_version=3.7.10~jng12-1 ;; esac @@ -265,7 +233,7 @@ usage() get_opts() { - set -- `getopt 'hd:n:a:p:k:u:w:' $*` + set -- `getopt 'hd:n:a:p:k:u:w:s:' $*` while [ "$1" != -- ] ; do case "$1" in -h) @@ -299,6 +267,10 @@ get_opts() cwd=$2 shift ;; + -s) + env_ssh_auth_sock=$2 + shift + ;; *) usage 1 ;; @@ -377,8 +349,11 @@ _run_chroot() run_chroot() { - echo == running LANG=POSIX chroot $root "$@" - LANG=POSIX chroot $root "$@" || { + local cmd="LANG=POSIX SSH_AUTH_SOCK=$ssh_auth_sock chroot $root" + echo == running $cmd "$@" + #eval $cmd "$@" || { + #LANG=POSIX SSH_AUTH_SOCK=$ssh_auth_sock chroot $root "$@" || { + LANG=POSIX SSH_AUTH_SOCK=$ssh_auth_sock chroot $root "$@" || { die "failed to run >$@<, exiting" } } @@ -387,7 +362,7 @@ run_hook() { hook="$1" local cmd="${hooks[$hook]}" - [ "$cmd" ] || return + [ "$cmd" ] || return 0 ( cd $cwd echo "== running hook $hook ($cmd)" @@ -406,6 +381,7 @@ create_partition_table() { assert_not_mounted + # FIXME mkpart primary 40G 100% doesn't work on nbd _cat << EOT | run_parted |mklabel gpt |mkpart primary 1M 2M @@ -415,7 +391,7 @@ create_partition_table() |name 2 boot |mkpart primary 10G 40G |name 3 swap - |mkpart primary 40G 100% + |mkpart primary 40G 100G |name 4 root EOT @@ -437,10 +413,13 @@ canonicalize() check_mount() { - local canonicalized=`canonicalize $root/$1` + local canonicalized=`realpath $root/$1 2>/dev/null` [ ! "$canonicalized" ] && return 1 - grep -q " $canonicalized " /proc/mounts || return 1 - return 0 + grep -q " $canonicalized " /proc/mounts && return 0 + canonicalized=`canonicalize $root/$1` + [ ! "$canonicalized" ] && return 1 + grep -q " $canonicalized " /proc/mounts && return 0 + return 1 } assert_not_mounted() @@ -460,6 +439,14 @@ setup_bind_mounts() run -e mount -o bind $fs $root$fs } done + if [ "$env_ssh_auth_sock" ]; then + check_mount $ssh_auth_sock || { + echo "creating >$ssh_auth_sock<" + run -e mkdir -p `dirname $root/$ssh_auth_sock` + run -e touch $root/$ssh_auth_sock + run -e mount --bind $env_ssh_auth_sock $root/$ssh_auth_sock + } + fi } mount_devices() @@ -477,12 +464,13 @@ mount_devices() unmount_devices() { - local devices="/proc /sys /dev /boot /" + local devices="$ssh_auth_sock /proc /sys /dev /boot /" [ "$1" ] && devices="$@" local d for d in $devices; do check_mount $d && run umount $root$d done + rm -f $ssh_auth_sock } zypper_repos_base() @@ -536,7 +524,7 @@ host_zypper() local repos="$1" shift local distros=`zypper_repos $repos | awk '{print "--plus-repo " $2 }'` - zypper $zypper_global_opts --root $root $distros $@ + run -e zypper $zypper_global_opts --root $root $distros $@ } init_root_password_file() @@ -806,7 +794,6 @@ setup_boot_loader_net() undo_rpmnew() { - set +x local n o # reset config files to rpm versions find $root -name '*.rpmnew' | while read n; do @@ -814,7 +801,6 @@ undo_rpmnew() log renaming $n to $o mv $n $o done - set -x } setup_root_directory() @@ -909,7 +895,7 @@ set_sysconf_value() cmd_install() { - if true; then + if false; then local c set -e @@ -954,7 +940,6 @@ cmd_install() chroot $root zypper $zypper_global_opts install --auto-agree-with-licenses $payload_pkgs echo "=== installing payload packages <" - fi # test run setup_zypper_repos special run chroot $root zypper $zypper_global_opts install --auto-agree-with-licenses $special_pkgs @@ -970,12 +955,8 @@ cmd_install() run_hook pkg-installed export CVSROOT=:ext:$scm_user@cvs.jannet.de:/home/jannet/arc/cvs - if [ "$SSH_AUTH_SOCK" ]; then - mkdir -m 700 -p `dirname $root/$SSH_AUTH_SOCK` - ln $SSH_AUTH_SOCK $root/$SSH_AUTH_SOCK - fi echo "=== running jcs fetch" - chroot $root jcs fetch + run_chroot jcs fetch reset_host_files echo "=== running jcs setup" chroot $root jcs setup @@ -984,6 +965,7 @@ cmd_install() # FIXME: this does not work off a netboot distro slapcat | chroot $root /usr/sbin/slapadd -qw + fi # test [ "$install_dev" ] && setup_boot_loader_local setup_boot_loader_net (cd $root/boot; ln -sf vmlinuz-$kernel_version vmlinuz) @@ -1006,8 +988,6 @@ cmd_install() install -m 777 -d $root/srv/nfs/var/cores install -m 777 -d $root/var/cores - rm -f $root/$SSH_AUTH_SOCK - unmount_devices [ -w "$install_dev" ] || { install -d -m 755 $root/../rw @@ -1052,7 +1032,8 @@ if [ `whoami` != root -o "$l32" ]; then # preferring "ssh -l root localhost" over "sudo" to keep ssh-agent environment #sudo -i $exe $@ -p $root_password_file - ssh -l root localhost $l32 $exe $@ -p $root_password_file -u $scm_user -w $cwd + [ "$env_ssh_auth_sock" ] && opt_ssh_auth_sock="-s $env_ssh_auth_sock" + ssh -l root localhost $l32 $exe $@ -p $root_password_file -u $scm_user -w $cwd $opt_ssh_auth_sock exit $? fi @@ -1066,9 +1047,14 @@ root=/srv/nfs/boot/distros/$name/ro if [ "$install_dev" ]; then - install_dev_boot=$install_dev""2 - install_dev_swap=$install_dev""3 - install_dev_root=$install_dev""4 + case $install_dev in + /dev/sd*) part_sep="";; + /dev/nbd*) part_sep="p";; + esac + + install_dev_boot=$install_dev$part_sep""2 + install_dev_swap=$install_dev$part_sep""3 + install_dev_root=$install_dev$part_sep""4 case $install_dev in /dev/sda) install_grub_dev_num=0;; @@ -1076,8 +1062,10 @@ if [ "$install_dev" ]; then /dev/sdc) install_grub_dev_num=2;; /dev/sdd) install_grub_dev_num=3;; /dev/sde) install_grub_dev_num=4;; + /dev/nbd*) + install_grub_dev_num=${d/\/dev\/nbd/};; *) - log "device \"$install_dev\" doesn't map into a known grub device number, edit $myname to add support" + log "device \"$install_dev\" can't be mapped onto a grub device number, edit $myname to add support" exit 1;; esac