mirror of
https://github.com/Dasharo/meta-dts.git
synced 2026-06-13 10:16:12 -07:00
@@ -9,6 +9,18 @@ on:
|
||||
kas-path:
|
||||
type: string
|
||||
required: true
|
||||
ref:
|
||||
type: string
|
||||
required: false
|
||||
default: ${{ github.sha }}
|
||||
nightly:
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
outputs:
|
||||
dts_scripts_hash_output:
|
||||
description: "Hash of dts-scripts main branch used for SRCREV"
|
||||
value: ${{ jobs.build.outputs.dts_scripts_hash_nightly }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -16,11 +28,31 @@ jobs:
|
||||
labels: dts-builder
|
||||
env:
|
||||
FAILED_ATTEMPTS: 0
|
||||
outputs:
|
||||
dts_scripts_hash_nightly: ${{ steps.set_dts_scripts_hash_output.outputs.hash }}
|
||||
steps:
|
||||
- name: Checkout meta-dts repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: "meta-dts"
|
||||
ref: ${{ inputs.ref }}
|
||||
- name: Prepare nightly SRCREV
|
||||
if: ${{ inputs.nightly == true }}
|
||||
id: set_dts_scripts_hash_output
|
||||
shell: bash
|
||||
run: |
|
||||
git clone --depth 1 https://github.com/Dasharo/dts-scripts dts-scripts-tmp
|
||||
DTS_SCRIPTS_HASH=$(cd dts-scripts-tmp && git rev-parse HEAD)
|
||||
echo "hash=${DTS_SCRIPTS_HASH}" >> $GITHUB_OUTPUT
|
||||
rm -rf dts-scripts-tmp
|
||||
FILE_PATH="meta-dts/meta-dts-distro/recipes-dts/dts-scripts/dts-scripts_git.bb"
|
||||
if [ -f "$FILE_PATH" ]; then
|
||||
sed -i "s/^SRCREV = \".*\"/SRCREV = \"${DTS_SCRIPTS_HASH}\"/" "$FILE_PATH"
|
||||
echo "Updated SRCREV in $FILE_PATH to ${DTS_SCRIPTS_HASH}"
|
||||
else
|
||||
echo "Error: File $FILE_PATH not found. Cannot update SRCREV."
|
||||
exit 1
|
||||
fi
|
||||
- name: Prepare cache-less build configuration
|
||||
if: ${{ inputs.cacheless }}
|
||||
shell: bash
|
||||
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
run: |
|
||||
cd open-source-firmware-validation
|
||||
if [ ! -d "venv" ]; then
|
||||
python3 -m venv venv
|
||||
python3.13 -m venv venv
|
||||
fi
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
@@ -72,7 +72,14 @@ jobs:
|
||||
cd open-source-firmware-validation/scripts/ci
|
||||
mkdir -p qemu-data
|
||||
touch qemu-data/hdd.qcow2
|
||||
./qemu-run.sh nographic os &
|
||||
./qemu-run.sh nographic os --no-audio-emulation &
|
||||
for _ in {1..60}; do
|
||||
sleep 1
|
||||
if [ -f /tmp/qemu-pid ]; then
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
exit 1
|
||||
|
||||
- name: Create directory for logs
|
||||
shell: bash
|
||||
@@ -94,7 +101,10 @@ jobs:
|
||||
# DPP_PASSWORD="..."
|
||||
source ~/.secrets/dpp-keys-minio
|
||||
ip_addr=$(ip -o -4 addr list eno2 | awk '{print $4}' | cut -d/ -f1)
|
||||
DTS_CONFIG_REF="refs/heads/develop"
|
||||
DTS_CONFIG_HASH=$(git ls-remote https://github.com/Dasharo/dts-configs.git "${DTS_CONFIG_REF}" | awk '{print $1}')
|
||||
|
||||
echo "Using DTS config hash: ${DTS_CONFIG_HASH}"
|
||||
echo "::add-mask::$DPP_EMAIL"
|
||||
echo "::add-mask::$DPP_PASSWORD"
|
||||
|
||||
@@ -104,6 +114,7 @@ jobs:
|
||||
-v dpp_email:$DPP_EMAIL \
|
||||
-v dpp_password:$DPP_PASSWORD \
|
||||
-v boot_dts_from_ipxe_shell:True \
|
||||
-v dts_config_ref:"${DTS_CONFIG_REF}" \
|
||||
-v dts_ipxe_link:http://${ip_addr}:4321/dts.ipxe 2>&1 \
|
||||
| tee ${{ env.LOG_DIR }}/dts-tests.log | grep --line-buffered "| PASS |\|| FAIL |"
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
with:
|
||||
cacheless: true
|
||||
kas-path: meta-dts/kas-uefi-sb.yml
|
||||
ref: develop
|
||||
nightly: true
|
||||
|
||||
move-build-artifacts:
|
||||
needs: build-uefi-sb
|
||||
runs-on:
|
||||
@@ -22,12 +25,16 @@ jobs:
|
||||
- name: Move UEFI SB build artifacts
|
||||
run: |
|
||||
mv build build-sb
|
||||
|
||||
build:
|
||||
needs: move-build-artifacts
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
cacheless: true
|
||||
kas-path: meta-dts/kas.yml
|
||||
ref: develop
|
||||
nightly: true
|
||||
|
||||
deploy-cache:
|
||||
name: Deploy cache on cache.dasharo.com
|
||||
needs: build
|
||||
@@ -53,10 +60,46 @@ jobs:
|
||||
run: |
|
||||
rsync -P -e "ssh -i ~/.ssh/dts-ci-key" -rlptD --delete build/downloads builder@10.1.40.2:cache/yocto/dts
|
||||
rsync -P -e "ssh -i ~/.ssh/dts-ci-key" -rlptD --delete build-sb/downloads builder@10.1.40.2:cache/yocto/dts/dts-uefi-sb
|
||||
|
||||
deploy-nightly-images:
|
||||
name: Deploy nightly DTS artifacts on boot.dasharo.com
|
||||
needs: build
|
||||
runs-on:
|
||||
labels: dts-builder
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: develop
|
||||
fetch-depth: 1
|
||||
path: "meta-dts"
|
||||
- name: Prepare SSH key
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{secrets.SSH_KEY}}
|
||||
run: |
|
||||
echo -e ${SSH_KEY} > ~/.ssh/dts-ci-key
|
||||
chmod 600 ~/.ssh/dts-ci-key
|
||||
- name: Deploy DTS on boot.dasharo.com
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/tmp/deploy/images/genericx86-64/
|
||||
scp -i ~/.ssh/dts-ci-key bzImage builder@10.1.40.2:boot/dts/nightly/
|
||||
scp -i ~/.ssh/dts-ci-key dts-base-image-genericx86-64.cpio.gz builder@10.1.40.2:boot/dts/nightly/dts-base-image.cpio.gz
|
||||
- name: Update nightly.ipxe variables
|
||||
shell: bash
|
||||
env:
|
||||
DTS_SCRIPTS_HASH_FROM_BUILD: ${{ needs.build.outputs.dts_scripts_hash_output }}
|
||||
run: |
|
||||
META_DTS_REVISION_VALUE=$(cd meta-dts && git rev-parse HEAD)
|
||||
DTS_SCRIPTS_VERSION_VALUE="${DTS_SCRIPTS_HASH_FROM_BUILD}"
|
||||
ssh -i ~/.ssh/dts-ci-key builder@10.1.40.2 "sed -i 's/^set meta_dts_version.*/set meta_dts_version ${META_DTS_REVISION_VALUE}/' boot/dts/nightly.ipxe"
|
||||
ssh -i ~/.ssh/dts-ci-key builder@10.1.40.2 "sed -i 's/^set dts_scripts_version.*/set dts_scripts_version ${DTS_SCRIPTS_VERSION_VALUE}/' boot/dts/nightly.ipxe"
|
||||
|
||||
cleanup:
|
||||
name: Cleanup
|
||||
if: always()
|
||||
needs: deploy-cache
|
||||
needs: [deploy-cache, deploy-nightly-images]
|
||||
runs-on:
|
||||
labels: dts-builder
|
||||
steps:
|
||||
|
||||
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## 2.6.0 - 2025-08-06
|
||||
|
||||
### Added
|
||||
- docs: testing.md: add DTS end to end testing methodology
|
||||
- dts-scripts: add DTS end to end tests profile generation, fix HCL report and
|
||||
password indent
|
||||
- Add Dasharo (Slim Bootloader+UEFI) for Hardkernel Odroid H4: initial
|
||||
deployment and transition
|
||||
|
||||
|
||||
### Changed
|
||||
- HCL report: Fix empty lspci and lsusb in HCL report
|
||||
- scripts: add remote-update and run-qemu scripts
|
||||
- Add ability to use another ref for dts-configs
|
||||
- Add DTS nightly builds
|
||||
|
||||
|
||||
### Fixed
|
||||
- test workflow: fix by waiting for QEMU to start before continuing, fix SeaBIOS
|
||||
payload detection mocking
|
||||
|
||||
|
||||
## 2.5.0 - 2025-06-11
|
||||
|
||||
### Added
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
# Testing
|
||||
|
||||
Current E2E tests are defined in [OSFV
|
||||
repo](https://github.com/Dasharo/open-source-firmware-validation/blob/develop/dts/dts-e2e.robot)
|
||||
|
||||
They work by running through different workflows from the moment user sees UI to
|
||||
the last step (e.g. reboot when updating). Currently, we only check whether we
|
||||
can get from point A (e.g. start updating) to point B (e.g. printed reboot after
|
||||
successful update).
|
||||
|
||||
## Planned changes
|
||||
|
||||
To improve end-to-end (E2E) testing, we plan to create a dedicated profile for
|
||||
each workflow and platform. This profile will store an ordered list of all
|
||||
Hardware Abstraction Layer (HAL) calls made during the actual execution of the
|
||||
workflow. When running tests on QEMU, we will compare the HAL call sequence
|
||||
generated during the test with the reference profile. The test will pass only if
|
||||
both sequences are identical.
|
||||
|
||||
This change should be fairly trivial, we only have to modify
|
||||
[tool_wrapper](https://github.com/Dasharo/dts-scripts/blob/bcf7871d4e334a47e7f8722793db5537db67a569/include/hal/dts-hal.sh#L65)
|
||||
to make sure it appends command we are currently trying to run to a specific
|
||||
file.
|
||||
|
||||
**Specifics**
|
||||
|
||||
1. Make `tool_wrapper` function append `<command> <command_args> <return_code>`
|
||||
to `/tmp/logs/profile`.
|
||||
- To make debugging easier create `/tmp/logs/debug_profile` which contains
|
||||
lines in format:
|
||||
`<script_file>:<script_line> <command> <command_args> <return_code>`
|
||||
2. Generate profile for single platform and workflow
|
||||
3. Modify E2E tests
|
||||
- Add generated profile to `open-source-firmware-validation/dts/profiles/`
|
||||
- Modify test for this platform and workflow and make it compare real
|
||||
profile with one generated after workflow finishes
|
||||
|
||||
Profile generated on real hardware can be accepted if workflow used to generate
|
||||
it was successful e.g. there were no DTS errors, platform works after rebooting,
|
||||
workflow assumptions are fulfilled e.g. firmware version changed to expected
|
||||
one.
|
||||
|
||||
**Pros:**
|
||||
|
||||
* Little changes needed to implement
|
||||
|
||||
**Cons:**
|
||||
|
||||
* Generating profiles for all workflows and platforms might take a while
|
||||
* Changes in DTS might force us to regenerate all profiles
|
||||
@@ -4,7 +4,7 @@ DISTRO = "dts-distro"
|
||||
|
||||
# distro name
|
||||
DISTRO_NAME = "Dasharo Tools Suite"
|
||||
DISTRO_VERSION = "2.5.0"
|
||||
DISTRO_VERSION = "2.6.0"
|
||||
SDK_VENDOR = "-dtssdk"
|
||||
|
||||
MAINTAINER = "3mdeb Sp. z o. o. <contact@3mdeb.com>"
|
||||
|
||||
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSES/Apache-2.0.txt;md5=c846ebb396f8b174b10ded477
|
||||
PV = "0.1+git${SRCPV}"
|
||||
|
||||
SRC_URI = "git://github.com/Dasharo/dts-scripts;protocol=https;branch=main"
|
||||
SRCREV = "f2e93814b6a58caddd61d503adf8e134b0c19223"
|
||||
SRCREV = "12e417bbc781ba5e180eba26ef574298ce2b7156"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
|
||||
Executable
+131
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
set -e
|
||||
|
||||
cleanup() {
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
print_error "$BASH_COMMAND failed"
|
||||
fi
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
print_help() {
|
||||
cat <<EOF
|
||||
$(basename "$0") [OPTION]... [remote]
|
||||
Copy dts-scripts to remote DTS. Copies to root@localhost on port 5222 by default
|
||||
|
||||
Options:
|
||||
-s|--script-dir <dir> Path to dts-scripts directory
|
||||
-v|--verbose Enable trace output
|
||||
-h|--help Print this help
|
||||
EOF
|
||||
}
|
||||
|
||||
print_usage_error() {
|
||||
print_help
|
||||
error_exit "$1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
local red="\033[31m"
|
||||
local reset="\033[0m"
|
||||
echo -e "${red}ERROR: $1${reset}"
|
||||
}
|
||||
|
||||
error_exit() {
|
||||
print_error "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-s|--script-dir)
|
||||
DTS_SCRIPTS="$(realpath "$2")"
|
||||
shift 2
|
||||
;;
|
||||
-v|--verbose)
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
print_help
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
print_usage_error "Unknown option $1"
|
||||
;;
|
||||
*)
|
||||
POSITIONAL_ARGS+=( "$1" )
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
POSITIONAL_ARGS=()
|
||||
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
|
||||
DTS_SCRIPTS="$(realpath "$SCRIPT_DIR/../../dts-scripts")"
|
||||
parse_args "$@"
|
||||
set -- "${POSITIONAL_ARGS[@]}"
|
||||
|
||||
if [ $# -gt 1 ]; then
|
||||
print_usage_error "Script accepts 0 or 1 arguments, got $#"
|
||||
fi
|
||||
|
||||
############################################
|
||||
|
||||
if [ ! -d "$DTS_SCRIPTS" ]; then
|
||||
print_usage_error "$DTS_SCRIPTS doesn't exist, use --script-dir to set correct path"
|
||||
fi
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
REMOTE="$1"
|
||||
SCP="scp"
|
||||
SSH="ssh"
|
||||
else
|
||||
REMOTE="root@localhost"
|
||||
SCP="scp -P 5222"
|
||||
SSH="ssh -p 5222"
|
||||
fi
|
||||
|
||||
$SSH -q "$REMOTE" mkdir -p /dts-scripts
|
||||
$SCP -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -r "$DTS_SCRIPTS"/{Makefile,dts-profile.sh,include,scripts,reports} "$REMOTE":/dts-scripts/
|
||||
|
||||
$SSH -q "$REMOTE" 'cat >/dts-scripts/update.sh' <<"EOF"
|
||||
#!/bin/sh
|
||||
|
||||
SBINDIR=/usr/sbin
|
||||
SYSCONFDIR=/etc
|
||||
|
||||
echo "Updating dts-scripts"
|
||||
|
||||
install -d ${DESTDIR}${SBINDIR}
|
||||
|
||||
install -m 0755 include/dts-environment.sh ${DESTDIR}${SBINDIR}
|
||||
install -m 0755 include/dts-functions.sh ${DESTDIR}${SBINDIR}
|
||||
install -m 0755 include/dts-subscription.sh ${DESTDIR}${SBINDIR}
|
||||
install -m 0755 include/hal/dts-hal.sh ${DESTDIR}${SBINDIR}
|
||||
install -m 0755 include/hal/common-mock-func.sh ${DESTDIR}${SBINDIR}
|
||||
|
||||
install -m 0755 scripts/cloud_list.sh ${DESTDIR}${SBINDIR}/cloud_list
|
||||
install -m 0755 scripts/dasharo-deploy.sh ${DESTDIR}${SBINDIR}/dasharo-deploy
|
||||
install -m 0755 scripts/dts.sh ${DESTDIR}${SBINDIR}/dts
|
||||
install -m 0755 scripts/dts-boot.sh ${DESTDIR}${SBINDIR}/dts-boot
|
||||
install -m 0755 scripts/ec_transition.sh ${DESTDIR}${SBINDIR}/ec_transition
|
||||
install -m 0755 scripts/logging.sh ${DESTDIR}${SBINDIR}/logging
|
||||
|
||||
install -m 0755 reports/dasharo-hcl-report.sh ${DESTDIR}${SBINDIR}/dasharo-hcl-report
|
||||
install -m 0755 reports/touchpad-info.sh ${DESTDIR}${SBINDIR}/touchpad-info
|
||||
|
||||
install -d ${DESTDIR}${SYSCONFDIR}/profile.d
|
||||
install -m 0755 dts-profile.sh ${DESTDIR}${SYSCONFDIR}/profile.d
|
||||
|
||||
echo "Finished updating dts-scripts"
|
||||
EOF
|
||||
|
||||
$SSH -q "$REMOTE" chmod +x /dts-scripts/update.sh
|
||||
$SSH -q "$REMOTE" 'cd /dts-scripts && ./update.sh'
|
||||
Executable
+157
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
set -e
|
||||
|
||||
cleanup() {
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
print_error "$BASH_COMMAND failed"
|
||||
fi
|
||||
|
||||
if [ -f "${OVMF_VARS}" ]; then
|
||||
rm "${OVMF_VARS}"
|
||||
fi
|
||||
|
||||
if [ -f "${TPM_DIR}/pid" ]; then
|
||||
kill "$(cat "${TPM_DIR}/pid")"
|
||||
fi
|
||||
if [ -d "${TPM_DIR}" ]; then
|
||||
rm -rf "${TPM_DIR}"
|
||||
fi
|
||||
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
print_help() {
|
||||
cat <<EOF
|
||||
$(basename "$0") [OPTION]... <image> [image]...
|
||||
Run <image> in QEMU. Each image is mounted as separate drive.
|
||||
|
||||
Options:
|
||||
-k|--disable-kvm Disable KVM in QEMU. DTS most likely won't boot.
|
||||
-e|--efi Use EFI BIOS
|
||||
-s|--secure-boot Enable Secure Boot with EFI BIOS.
|
||||
-t|--tpm Add TPM2 device
|
||||
-n|--no-graphics No graphic mode, only serial
|
||||
-m|--memory <mem> How much RAM should QEMU have (default: 2G)
|
||||
-c|--cpu <cpu> How many vCPUs should QEMU create (default: 4)
|
||||
-v|--verbose Enable trace output
|
||||
-h|--help Print this help
|
||||
EOF
|
||||
}
|
||||
|
||||
print_usage_error() {
|
||||
print_help
|
||||
error_exit "$1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
local red="\033[31m"
|
||||
local reset="\033[0m"
|
||||
echo -e "${red}ERROR: $1${reset}"
|
||||
}
|
||||
|
||||
error_exit() {
|
||||
print_error "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-k|--disable-kvm)
|
||||
KVM=
|
||||
shift
|
||||
;;
|
||||
-e|--efi)
|
||||
EFI="y"
|
||||
shift
|
||||
;;
|
||||
-s|--secure-boot)
|
||||
EFI="y"
|
||||
SECBOOT="secboot."
|
||||
shift
|
||||
;;
|
||||
-t|--tpm)
|
||||
TPM="y"
|
||||
shift
|
||||
;;
|
||||
-n|--no-graphics)
|
||||
NO_GRAPHIC="-nographic"
|
||||
shift
|
||||
;;
|
||||
-m|--memory)
|
||||
MEM="$2"
|
||||
shift 2
|
||||
;;
|
||||
-c|--cpu)
|
||||
CPU="$2"
|
||||
shift 2
|
||||
;;
|
||||
-v|--verbose)
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
print_help
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
print_usage_error "Unknown option $1"
|
||||
;;
|
||||
*)
|
||||
POSITIONAL_ARGS+=( -drive "file=$1,if=ide,format=raw" )
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
POSITIONAL_ARGS=()
|
||||
KVM="-enable-kvm"
|
||||
MEM="2G"
|
||||
CPU="4"
|
||||
EFI=
|
||||
SECBOOT=
|
||||
TPM=
|
||||
parse_args "$@"
|
||||
set -- "${POSITIONAL_ARGS[@]}"
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
print_usage_error "Script requires at least 1 positional argument, got 0"
|
||||
fi
|
||||
|
||||
############################################
|
||||
|
||||
OVMF=()
|
||||
|
||||
if [ -n "$EFI" ]; then
|
||||
OVMF_VARS=$(mktemp --suffix=_OVMF_VARS)
|
||||
cp "/usr/share/OVMF/OVMF_VARS.${SECBOOT}fd" "${OVMF_VARS}"
|
||||
OVMF=(
|
||||
"-drive" "if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.${SECBOOT}fd"
|
||||
"-drive" "if=pflash,format=raw,file=${OVMF_VARS}"
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$TPM" = "y" ]; then
|
||||
TPM_DIR=$(mktemp -d)
|
||||
TPM_ARGS=(
|
||||
-chardev "socket,id=chrtpm,path=${TPM_DIR}/sock"
|
||||
-tpmdev "emulator,id=tpm0,chardev=chrtpm"
|
||||
-device "tpm-tis,tpmdev=tpm0"
|
||||
)
|
||||
swtpm socket --tpm2 \
|
||||
--tpmstate dir="${TPM_DIR}" \
|
||||
--ctrl type=unixio,path="${TPM_DIR}/sock" \
|
||||
--pid file="${TPM_DIR}/pid" \
|
||||
--log level=5 &> "${TPM_DIR}/log" &
|
||||
fi
|
||||
|
||||
qemu-system-x86_64 -serial mon:stdio -global ICH9-LPC.disable_s3=1 \
|
||||
"${OVMF[@]}" \
|
||||
-device virtio-net,netdev=vmnic \
|
||||
-netdev user,id=vmnic,hostfwd=tcp::5222-:22 \
|
||||
-m "$MEM" -smp "$CPU" -M q35 $KVM "${TPM_ARGS[@]}" $NO_GRAPHIC "${POSITIONAL_ARGS[@]}"
|
||||
Reference in New Issue
Block a user