2019-03-29 17:25:17 -05:00
|
|
|
#!/bin/bash -ex
|
2018-11-21 00:32:40 -06:00
|
|
|
|
|
|
|
# Copyright (C) 2014 Curt Brune <curt@cumulusnetworks.com>
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
|
2021-12-03 09:32:36 -06:00
|
|
|
MEM=4096
|
2018-11-21 00:32:40 -06:00
|
|
|
DISK=$1
|
|
|
|
ONIE_RECOVERY_ISO=$2
|
|
|
|
INSTALLER=$3
|
|
|
|
DISK_SIZE=$4
|
|
|
|
|
|
|
|
INSTALLER_DISK="./sonic-installer.img"
|
|
|
|
|
|
|
|
# VM will listen on telnet port $KVM_PORT
|
|
|
|
KVM_PORT=9000
|
|
|
|
|
|
|
|
on_exit()
|
|
|
|
{
|
|
|
|
rm -f $kvm_log
|
|
|
|
}
|
|
|
|
|
2020-04-07 14:31:20 -05:00
|
|
|
on_error()
|
|
|
|
{
|
2021-01-17 13:05:33 -06:00
|
|
|
netstat -antp
|
2020-04-07 14:31:20 -05:00
|
|
|
echo "============= kvm_log =============="
|
|
|
|
cat $kvm_log
|
|
|
|
}
|
2018-11-21 00:32:40 -06:00
|
|
|
|
|
|
|
create_disk()
|
|
|
|
{
|
|
|
|
echo "Creating SONiC kvm disk : $DISK of size $DISK_SIZE GB"
|
|
|
|
qemu-img create -f qcow2 $DISK ${DISK_SIZE}G
|
|
|
|
}
|
|
|
|
|
|
|
|
prepare_installer_disk()
|
|
|
|
{
|
2019-12-28 15:21:09 -06:00
|
|
|
fallocate -l 2048M $INSTALLER_DISK
|
2018-11-21 00:32:40 -06:00
|
|
|
|
|
|
|
mkfs.vfat $INSTALLER_DISK
|
|
|
|
|
|
|
|
tmpdir=$(mktemp -d)
|
|
|
|
|
|
|
|
mount -o loop $INSTALLER_DISK $tmpdir
|
|
|
|
|
|
|
|
cp $INSTALLER $tmpdir/onie-installer.bin
|
|
|
|
|
|
|
|
umount $tmpdir
|
|
|
|
}
|
|
|
|
|
[Build] Fix the build unstalbe issue caused by the kvm not ready (#12180) (#12354)
Why I did it
Fix the build unstable issue caused by the kvm 9000 port is not ready to use in 2 seconds.
2022-09-02T10:57:30.8122304Z + /usr/bin/kvm -m 8192 -name onie -boot order=cd,once=d -cdrom target/files/bullseye/onie-recovery-x86_64-kvm_x86_64_4_asic-r0.iso -device e1000,netdev=onienet -netdev user,id=onienet,hostfwd=:0.0.0.0:3041-:22 -vnc 0.0.0.0:0 -vga std -drive file=target/sonic-6asic-vs.img,media=disk,if=virtio,index=0 -drive file=./sonic-installer.img,if=virtio,index=1 -serial telnet:127.0.0.1:9000,server
2022-09-02T10:57:30.8123378Z + sleep 2.0
2022-09-02T10:57:30.8123889Z + '[' -d /proc/284923 ']'
2022-09-02T10:57:30.8124528Z + echo 'to kill kvm: sudo kill 284923'
2022-09-02T10:57:30.8124994Z to kill kvm: sudo kill 284923
2022-09-02T10:57:30.8125362Z + ./install_sonic.py
2022-09-02T10:57:30.8125720Z Trying 127.0.0.1...
2022-09-02T10:57:30.8126041Z telnet: Unable to connect to remote host: Connection refused
How I did it
Waiting more time until the tcp port 9000 is ready, waiting for 60 seconds in maximum.
Co-authored-by: xumia <59720581+xumia@users.noreply.github.com>
2022-10-12 02:54:06 -05:00
|
|
|
wait_kvm_ready()
|
|
|
|
{
|
|
|
|
local count=30
|
|
|
|
local waiting_in_seconds=2.0
|
|
|
|
for ((i=1; i<=$count; i++)); do
|
|
|
|
sleep $waiting_in_seconds
|
|
|
|
echo "$(date) [$i/$count] waiting for the port $KVM_PORT ready"
|
|
|
|
if netstat -l | grep -q ":$KVM_PORT"; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2018-11-21 00:32:40 -06:00
|
|
|
create_disk
|
|
|
|
prepare_installer_disk
|
|
|
|
|
2019-03-29 17:25:17 -05:00
|
|
|
echo "Prepare memory for KVM build: $vs_build_prepare_mem"
|
2021-01-17 13:05:33 -06:00
|
|
|
mount proc /proc -t proc || true
|
2019-03-29 17:25:17 -05:00
|
|
|
free -m
|
|
|
|
if [[ "$vs_build_prepare_mem" == "yes" ]]; then
|
|
|
|
# Force o.s. to drop cache and compact memory so that KVM can get 2G memory
|
2021-01-17 13:05:33 -06:00
|
|
|
bash -c 'echo 1 > /proc/sys/vm/drop_caches'
|
|
|
|
bash -c 'echo 1 > /proc/sys/vm/compact_memory'
|
2019-03-29 17:25:17 -05:00
|
|
|
free -m
|
|
|
|
fi
|
|
|
|
|
2020-04-07 14:31:20 -05:00
|
|
|
kvm_log=$(mktemp)
|
|
|
|
trap on_exit EXIT
|
|
|
|
trap on_error ERR
|
|
|
|
|
2018-11-21 00:32:40 -06:00
|
|
|
/usr/bin/kvm -m $MEM \
|
|
|
|
-name "onie" \
|
|
|
|
-boot "order=cd,once=d" -cdrom "$ONIE_RECOVERY_ISO" \
|
|
|
|
-device e1000,netdev=onienet \
|
|
|
|
-netdev user,id=onienet,hostfwd=:0.0.0.0:3041-:22 \
|
|
|
|
-vnc 0.0.0.0:0 \
|
|
|
|
-vga std \
|
|
|
|
-drive file=$DISK,media=disk,if=virtio,index=0 \
|
|
|
|
-drive file=$INSTALLER_DISK,if=virtio,index=1 \
|
2018-11-25 13:33:00 -06:00
|
|
|
-serial telnet:127.0.0.1:$KVM_PORT,server > $kvm_log 2>&1 &
|
2018-11-21 00:32:40 -06:00
|
|
|
|
|
|
|
kvm_pid=$!
|
|
|
|
|
[Build] Fix the build unstalbe issue caused by the kvm not ready (#12180) (#12354)
Why I did it
Fix the build unstable issue caused by the kvm 9000 port is not ready to use in 2 seconds.
2022-09-02T10:57:30.8122304Z + /usr/bin/kvm -m 8192 -name onie -boot order=cd,once=d -cdrom target/files/bullseye/onie-recovery-x86_64-kvm_x86_64_4_asic-r0.iso -device e1000,netdev=onienet -netdev user,id=onienet,hostfwd=:0.0.0.0:3041-:22 -vnc 0.0.0.0:0 -vga std -drive file=target/sonic-6asic-vs.img,media=disk,if=virtio,index=0 -drive file=./sonic-installer.img,if=virtio,index=1 -serial telnet:127.0.0.1:9000,server
2022-09-02T10:57:30.8123378Z + sleep 2.0
2022-09-02T10:57:30.8123889Z + '[' -d /proc/284923 ']'
2022-09-02T10:57:30.8124528Z + echo 'to kill kvm: sudo kill 284923'
2022-09-02T10:57:30.8124994Z to kill kvm: sudo kill 284923
2022-09-02T10:57:30.8125362Z + ./install_sonic.py
2022-09-02T10:57:30.8125720Z Trying 127.0.0.1...
2022-09-02T10:57:30.8126041Z telnet: Unable to connect to remote host: Connection refused
How I did it
Waiting more time until the tcp port 9000 is ready, waiting for 60 seconds in maximum.
Co-authored-by: xumia <59720581+xumia@users.noreply.github.com>
2022-10-12 02:54:06 -05:00
|
|
|
wait_kvm_ready
|
2018-11-21 00:32:40 -06:00
|
|
|
|
|
|
|
[ -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
|
|
|
|
|
|
|
|
exit 0
|