diff --git a/check_install.py b/check_install.py index ed0d8018afe7..ecd3a8ee9a3b 100755 --- a/check_install.py +++ b/check_install.py @@ -15,11 +15,6 @@ def main(): args = parser.parse_args() - KEY_UP = '\x1b[A' - KEY_DOWN = '\x1b[B' - KEY_RIGHT = '\x1b[C' - KEY_LEFT = '\x1b[D' - login_prompt = 'sonic login:' passwd_prompt = 'Password:' cmd_prompt = "{}@sonic:~\$ $".format(args.u) @@ -37,22 +32,19 @@ def main(): raise time.sleep(1) - # select ONIE embed + # select default SONiC Image p.expect(grub_selection) - p.sendline(KEY_DOWN) + p.sendline() - # install sonic image + # bootup sonic image while True: - i = p.expect([login_prompt, passwd_prompt, grub_selection, cmd_prompt]) + i = p.expect([login_prompt, passwd_prompt, cmd_prompt]) if i == 0: # send user name p.sendline(args.u) elif i == 1: # send password p.sendline(args.P) - elif i == 2: - # select onie install - p.sendline() else: break diff --git a/install_sonic.py b/install_sonic.py new file mode 100755 index 000000000000..01785393f4eb --- /dev/null +++ b/install_sonic.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +import argparse +import pexpect +import sys +import time + + +def main(): + + parser = argparse.ArgumentParser(description='test_login cmdline parser') + parser.add_argument('-p', type=int, default=9000, help='local port') + + args = parser.parse_args() + + #KEY_UP = '\x1b[A' + KEY_DOWN = '\x1b[B' + #KEY_RIGHT = '\x1b[C' + #KEY_LEFT = '\x1b[D' + + grub_selection = "The highlighted entry will be executed" + + i = 0 + while True: + try: + p = pexpect.spawn("telnet 127.0.0.1 {}".format(args.p), timeout=600, logfile=sys.stdout, encoding='utf-8') + break + except Exception as e: + print(str(e)) + i += 1 + if i == 10: + raise + time.sleep(1) + + # select ONIE embed + p.expect(grub_selection) + p.sendline(KEY_DOWN) + + # select ONIE install + p.expect(['ONIE: Install OS']) + p.expect([grub_selection]) + p.sendline() + + # wait for grub, and exit + p.expect([grub_selection]) + + +if __name__ == '__main__': + main() diff --git a/scripts/build_kvm_image.sh b/scripts/build_kvm_image.sh index 6be223ebb9da..cfaba6521ed6 100755 --- a/scripts/build_kvm_image.sh +++ b/scripts/build_kvm_image.sh @@ -71,6 +71,8 @@ kvm_log=$(mktemp) trap on_exit EXIT trap on_error ERR +echo "Installing SONiC" + /usr/bin/kvm -m $MEM \ -name "onie" \ -boot "order=cd,once=d" -cdrom "$ONIE_RECOVERY_ISO" \ @@ -94,6 +96,34 @@ sleep 2.0 echo "to kill kvm: sudo kill $kvm_pid" +./install_sonic.py + +kill $kvm_pid + +echo "Booting up SONiC" + +/usr/bin/kvm -m $MEM \ + -name "onie" \ + -device e1000,netdev=onienet \ + -netdev user,id=onienet,hostfwd=:0.0.0.0:3041-:22 \ + -vnc 0.0.0.0:0 \ + -vga std \ + -snapshot \ + -drive file=$DISK,media=disk,if=virtio,index=0 \ + -serial telnet:127.0.0.1:$KVM_PORT,server > $kvm_log 2>&1 & + +kvm_pid=$! + +sleep 2.0 + +[ -d "/proc/$kvm_pid" ] || { + echo "ERROR: kvm died." + cat $kvm_log + exit 1 +} + +echo "to kill kvm: sudo kill $kvm_pid" + ./check_install.py -u $SONIC_USERNAME -P $PASSWD -p $KVM_PORT kill $kvm_pid