Skip to content

Commit 36fa82a

Browse files
fanzu8hao022
authored andcommitted
ci: qemu: add check for command deps
Signed-off-by: fanzu8 <tuzengbing@gmail.com>
1 parent 2856acf commit 36fa82a

2 files changed

Lines changed: 61 additions & 22 deletions

File tree

.github/workflows/scripts/qemu-1-start-vm.sh

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ SSH_OPTS=(
2323
-o ConnectTimeout=3
2424
)
2525

26-
# for local validate
27-
# 1: local validate, 0: workflow
28-
LOCAL_VALIDATE=${LOCAL_VALIDATE:-0}
26+
# for local validate, workflow ignore it
27+
# "$value": local image path, "": workflow default
28+
# your qcow2 image should be in ${LOCAL_IMG_PATH}/${OS_IMAGE}
29+
LOCAL_IMG_PATH=${LOCAL_IMG_PATH:-""}
2930

3031
function cloud_user_data() {
3132
# generate ssh keys for passwordless login
@@ -57,12 +58,17 @@ growpart:
5758
mode: auto
5859
devices: ['/']
5960
ignore_growroot_disabled: false
61+
EOF
6062

61-
# runcmd:
62-
# - mkdir -p /mnt/host
63-
# - echo "hostshare /mnt/host 9p trans=virtio,version=9p2000.L,access=any,_netdev 0 0" >> /etc/fstab
64-
# - mount -a
63+
if [ -n "$LOCAL_IMG_PATH" ]; then
64+
tee -a ${CLOUD_USER_DATA} >/dev/null <<EOF
65+
runcmd:
66+
- mkdir -p ${VM_ROOT}
67+
- echo "hostshare ${VM_ROOT} 9p trans=virtio,version=9p2000.L,access=any,_netdev 0 0" >> /etc/fstab
68+
- mount -a
6569
EOF
70+
fi
71+
6672
touch "$CLOUD_META_DATA"
6773

6874
# validate cloud-init user-data
@@ -72,17 +78,16 @@ EOF
7278
function prepare_qcow2_image() {
7379
sudo mkdir -p ${LIBVIRT_IMAGE_DIR}
7480

75-
if [ $LOCAL_VALIDATE -eq 1 ]; then
76-
echo -e "LOCAL_VALIDATE=${LOCAL_VALIDATE}, cp ./assets/${ARCH}/${OS_IMAGE} ${LIBVIRT_IMAGE_DIR}/"
77-
sudo cp ./assets/${ARCH}/${OS_IMAGE} ${LIBVIRT_IMAGE_DIR}/
81+
if [ -n "$LOCAL_IMG_PATH" ]; then
82+
echo -e "LOCAL_IMG_PATH=${LOCAL_IMG_PATH}, cp ${LOCAL_IMG_PATH}/${OS_IMAGE} ${LIBVIRT_IMAGE_DIR}/"
83+
sudo cp ${LOCAL_IMG_PATH}/${OS_IMAGE} ${LIBVIRT_IMAGE_DIR}/
7884
else
7985
docker pull huatuo/os-distro-test:${OS_DISTRO}.${ARCH}
8086
cid=$(docker create huatuo/os-distro-test:${OS_DISTRO}.${ARCH})
8187
docker cp ${cid}:/data/${OS_IMAGE}.zst .
8288
zstd --decompress -f --rm --threads=0 ${OS_IMAGE}.zst
8389

8490
sudo mv ${OS_IMAGE} ${LIBVIRT_IMAGE_DIR}/
85-
8691
fi
8792

8893
sudo chown libvirt-qemu:kvm ${LIBVIRT_IMAGE_DIR}/${OS_IMAGE}
@@ -105,21 +110,28 @@ function install_vm() {
105110
echo -e "install vm ${VM_NAME} from qcow2 [${LIBVIRT_IMAGE_DIR}/${OS_IMAGE}], resize to ${VM_DISK_SIZE}"
106111

107112
# install vm
113+
VIRT_LOCAL_ARG=()
114+
if [ -n "$LOCAL_IMG_PATH" ]; then
115+
VIRT_LOCAL_ARG=(
116+
--filesystem source="$(pwd)",target=hostshare,type=mount,accessmode=passthrough
117+
)
118+
fi
119+
108120
VIRT_COMMON_ARG=(
109121
--name "${VM_NAME}"
110122
--os-variant "${OS_DISTRO}"
111123
--vcpus "${VM_VCPUS}"
112124
--memory "${VM_MEMORY_MB}"
113125
--disk path="${LIBVIRT_IMAGE_DIR}/${OS_IMAGE}",bus=virtio,cache=none,format=qcow2
114126
--network network=default,model=virtio,mac=${VM_MAC}
115-
# --filesystem source="$(pwd)",target=hostshare,type=mount,accessmode=passthrough
116127
--import
117128
--graphics none
118129
--noautoconsole
119130
)
120131
VIRT_X86_64_ARG=(
121132
"${VIRT_COMMON_ARG[@]}"
122133
--cloud-init user-data=${CLOUD_USER_DATA}
134+
"${VIRT_LOCAL_ARG[@]}"
123135
)
124136
VIRT_ARM64_ARG=(
125137
"${VIRT_COMMON_ARG[@]}"
@@ -128,6 +140,7 @@ function install_vm() {
128140
# --cpu cortex-a57
129141
--disk path="${CLOUD_INIT_ISO}",device=cdrom
130142
--boot loader=/usr/share/AAVMF/AAVMF_CODE.fd,loader.readonly=yes,loader.type=pflash,nvram.template=/usr/share/AAVMF/AAVMF_VARS.fd
143+
"${VIRT_LOCAL_ARG[@]}"
131144
)
132145

133146
case "$ARCH" in
@@ -184,24 +197,24 @@ function wait_for_k8s_ready() {
184197
}
185198

186199
function rsync_workspace_to_vm() {
187-
echo -e "rsync workspace → vm ${VM_NAME}:/mnt/host..."
200+
echo -e "rsync workspace → vm ${VM_NAME}:${VM_ROOT}..."
188201

189-
if [ $LOCAL_VALIDATE -eq 1 ]; then
190-
echo -e "LOCAL_VALIDATE=${LOCAL_VALIDATE}, skip rsync."
202+
if [ -n "$LOCAL_IMG_PATH" ]; then
203+
echo -e "LOCAL_IMG_PATH=${LOCAL_IMG_PATH}, skip rsync."
191204
return 0
192205
fi
193206

194-
ssh "${SSH_OPTS[@]}" "root@${VM_IP}" "mkdir -p /mnt/host"
207+
ssh "${SSH_OPTS[@]}" "root@${VM_IP}" "mkdir -p ${VM_ROOT}"
195208

196209
rsync -az --delete \
197210
--numeric-ids \
198211
-e "ssh ${SSH_OPTS[*]}" \
199-
./ root@${VM_IP}:/mnt/host/
212+
./ root@${VM_IP}:${VM_ROOT}/
200213

201-
ssh "${SSH_OPTS[@]}" "root@${VM_IP}" "ls -lah /mnt/host"
214+
ssh "${SSH_OPTS[@]}" "root@${VM_IP}" "ls -lah ${VM_ROOT}"
202215
}
203216

204-
echo -e "\n\n------- ARCH: $ARCH OS_DISTRO: $OS_DISTRO"
217+
echo -e "\n\nARCH: $ARCH OS_DISTRO: $OS_DISTRO"
205218
case "$OS_DISTRO" in
206219
ubuntu*)
207220
u_version=${OS_DISTRO#ubuntu}
@@ -227,4 +240,4 @@ wait_for_k8s_ready
227240
echo -e "✅ k8s is ready."
228241

229242
rsync_workspace_to_vm
230-
echo -e "✅ rsync to VM path ${VM_NAME}:/mnt/host done."
243+
echo -e "✅ rsync to VM path ${VM_NAME}:${VM_ROOT} done."

.github/workflows/scripts/qemu-2-run-in-vm.sh

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,30 @@ ARCH=${1:-amd64}
55
OS_DISTRO=${2:-ubuntu24.04}
66
GOLANG_VERSION="1.24.0"
77

8+
COMMAMND_DEPS=(
9+
"go"
10+
"make"
11+
"clang"
12+
"gcc"
13+
"git"
14+
"jq"
15+
"kubectl"
16+
"curl"
17+
"wget"
18+
)
19+
20+
function check_command_deps() {
21+
local ok=1
22+
for cmd in "${COMMAMND_DEPS[@]}"; do
23+
if ! command -v "$cmd" &>/dev/null; then
24+
echo "⚠️ $cmd not found"
25+
ok=0
26+
fi
27+
done
28+
29+
[ $ok -eq 1 ] || exit 1
30+
}
31+
832
function print_sys_info() {
933
# sys info
1034
uname -a
@@ -33,6 +57,7 @@ function print_sys_info() {
3357
crictl version || true
3458

3559
kubectl get pods -A || true
60+
crictl images || true
3661
systemctl status kubelet || true
3762
ps -ef | grep kubelet | grep -v grep || true
3863

@@ -56,8 +81,8 @@ function install_golang() {
5681
function prapre_test_env() {
5782
case $OS_DISTRO in
5883
ubuntu*)
59-
apt update
60-
apt install make libbpf-dev clang git gcc -y
84+
apt update >/dev/null
85+
apt install make libbpf-dev clang git gcc jq -y >/dev/null
6186
;;
6287
esac
6388

@@ -68,6 +93,7 @@ function prapre_test_env() {
6893
print_sys_info
6994
install_golang
7095
prapre_test_env
96+
check_command_deps
7197

7298
cd /mnt/host && pwd
7399
ls -alh /mnt/host

0 commit comments

Comments
 (0)