deb-pkg: add acrn-hypervisor and acrn-board-inspector into debian package

1. "make clean && make BOARD=nuc11tnbi5  SCENARIO=shared" will generate the acrn debian package.
 2. "make clean && make board_inspector" will generate the acrn board_inspector debian package

Tracked-On: #6688
Signed-off-by: Hu Fenglin <fenglin.hu@intel.com>
This commit is contained in:
Hu Fenglin 2021-09-26 22:42:40 +08:00 committed by wenlingz
parent 856815bb5c
commit f65a87585b
25 changed files with 471 additions and 125 deletions

134
.deb.conf Normal file
View File

@ -0,0 +1,134 @@
{
"acrn.bin":{
"source":"acrn-hypervisor/build/hypervisor/acrn.bin",
"target":"boot/"
},
"acrnctl":{
"source":"acrn-hypervisor/build/misc/services/acrnctl",
"target":"usr/bin/"
},
"acrnd":{
"source":"acrn-hypervisor/build/misc/services/acrnd",
"target":"usr/bin/"
},
"acrn-dm":{
"source":"acrn-hypervisor/build/devicemodel/acrn-dm",
"target":"usr/bin/"
},
"acrnlog":{
"source":"acrn-hypervisor/build/misc/debug_tools/acrnlog",
"target":"usr/bin/"
},
"acrnprobe":{
"source":"acrn-hypervisor/build/misc/debug_tools/acrn-crashlog/acrnprobe/bin/acrnprobe",
"target":"usr/bin/"
},
"acrntrace":{
"source":"acrn-hypervisor/build/misc/debug_tools/acrntrace",
"target":"usr/bin/"
},
"crashlogctl":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/crashlogctl",
"target":"usr/bin/"
},
"debugger":{
"source":"acrn-hypervisor/build/misc/debug_tools/acrn-crashlog/usercrash/bin/debugger",
"target":"usr/bin/"
},
"usercrash-wrapper":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/usercrash-wrapper",
"target":"usr/bin/"
},
"acrn.32.out":{
"source":"acrn-hypervisor/build/hypervisor/acrn.32.out",
"target":"boot/"
},
"ACPI_VM0.bin":{
"source":"acrn-hypervisor/build/hypervisor/acpi/ACPI_VM0.bin",
"target":"boot"
},
"ACPI_VM1.bin":{
"source":"acrn-hypervisor/build/hypervisor/acpi/ACPI_VM1.bin",
"target":"boot"
},
"100-acrn-grub":{
"source":"acrn-hypervisor/misc/packaging/100_ACRN",
"target":"etc/grub.d/"
},
"50-acrn.netdev":{
"source":"acrn-hypervisor/misc/packaging/50-acrn.netdev",
"target":"usr/lib/systemd/network"
},
"50-acrn.network":{
"source":"acrn-hypervisor/misc/packaging/50-acrn.network",
"target":"usr/lib/systemd/network"
},
"50-eth.network":{
"source":"acrn-hypervisor/misc/packaging/50-eth.network",
"target":"usr/lib/systemd/network"
},
"50-tap0.netdev":{
"source":"acrn-hypervisor/misc/packaging/50-tap0.netdev",
"target":"usr/lib/systemd/network"
},
"acrnd.service":{
"source":"acrn-hypervisor/build/misc/services/acrnd.service",
"target":"usr/lib/systemd/system"
},
"acrnlog.service":{
"source":"acrn-hypervisor/build/misc/debug_tools/acrnlog.service",
"target":"usr/lib/systemd/system"
},
"acrnprobe.service":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/acrnprobe.service",
"target":"usr/lib/systemd/system"
},
"usercrash.service":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/usercrash.service",
"target":"usr/lib/systemd/system"
},
"libacrn-mngr.a":{
"source":"acrn-hypervisor/build/misc/services/libacrn-mngr.a",
"target":"usr/lib64"
},
"acrnprobe.xml":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/acrnprobe.xml",
"target":"usr/share/defaults/telemetrics"
},
"OVMF.fd":{
"source":"acrn-hypervisor/devicemodel/bios/OVMF.fd",
"target":"usr/share/acrn/bios"
},
"40-watchdog.conf":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/40-watchdog.conf",
"target":"usr/share/acrn/crashlog"
},
"80-coredump.conf":{
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/80-coredump.conf",
"target":"usr/share/acrn/crashlog"
},
"launch_hard_rt_vm.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_hard_rt_vm.sh",
"target":"usr/share/acrn/samples/nuc"
},
"launch_uos.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_uos.sh",
"target":"usr/share/acrn/samples/nuc"
},
"launch_vxworks.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_vxworks.sh",
"target":"usr/share/acrn/samples/nuc"
},
"launch_win.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_win.sh",
"target":"usr/share/acrn/samples/nuc"
},
"launch_xenomai.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_xenomai.sh",
"target":"usr/share/acrn/samples/nuc"
},
"launch_zephyr.sh":{
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_zephyr.sh",
"target":"usr/share/acrn/samples/nuc"
}
}

View File

@ -83,6 +83,7 @@ ASL_COMPILER ?= $(shell which iasl)
.PHONY: all hypervisor devicemodel tools life_mngr doc .PHONY: all hypervisor devicemodel tools life_mngr doc
all: hypervisor devicemodel tools all: hypervisor devicemodel tools
@cat $(HV_CFG_LOG) @cat $(HV_CFG_LOG)
@python3 misc/packaging/gen_acrn_deb.py acrn_all $(ROOT_OUT) --version=$(FULL_VERSION) --board_name=$(BOARD) --scenario=$(SCENARIO)
#help functions to build acrn and install acrn/acrn symbols #help functions to build acrn and install acrn/acrn symbols
define build_acrn define build_acrn
@ -99,6 +100,8 @@ define install_acrn_debug
endef endef
HV_MAKEOPTS := -C $(T)/hypervisor BOARD=$(BOARD) SCENARIO=$(SCENARIO) HV_OBJDIR=$(HV_OUT) RELEASE=$(RELEASE) HV_MAKEOPTS := -C $(T)/hypervisor BOARD=$(BOARD) SCENARIO=$(SCENARIO) HV_OBJDIR=$(HV_OUT) RELEASE=$(RELEASE)
board_inspector:
@python3 misc/packaging/gen_acrn_deb.py board_inspector $(ROOT_OUT) --version=$(FULL_VERSION)
hypervisor: hvdefconfig hypervisor: hvdefconfig
$(MAKE) $(HV_MAKEOPTS) $(MAKE) $(HV_MAKEOPTS)

View File

@ -12,7 +12,7 @@ sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '
import lxml.etree import lxml.etree
from acpi_const import * from acpi_const import *
import acpiparser.tpm2 import acpiparser.tpm2
import lib.cdata import inspectorlib.cdata
import common import common
def asl_to_aml(dest_vm_acpi_path, dest_vm_acpi_bin_path): def asl_to_aml(dest_vm_acpi_path, dest_vm_acpi_bin_path):
@ -91,9 +91,9 @@ def tpm2_acpi_gen(acpi_bin, board_etree, scenario_etree, allocation_etree):
if common.get_node("//capability[@id = 'log_area']", board_etree) is not None: if common.get_node("//capability[@id = 'log_area']", board_etree) is not None:
ctype_data.log_area_minimum_length = int(common.get_node("//log_area_minimum_length/text()", allocation_etree), 16) ctype_data.log_area_minimum_length = int(common.get_node("//log_area_minimum_length/text()", allocation_etree), 16)
ctype_data.log_area_start_address = int(common.get_node("//log_area_start_address/text()", allocation_etree), 16) ctype_data.log_area_start_address = int(common.get_node("//log_area_start_address/text()", allocation_etree), 16)
ctype_data.header.checksum = (~(sum(lib.cdata.to_bytes(ctype_data))) + 1) & 0xFF ctype_data.header.checksum = (~(sum(inspectorlib.cdata.to_bytes(ctype_data))) + 1) & 0xFF
acpi_bin.seek(ACPI_TPM2_ADDR_OFFSET) acpi_bin.seek(ACPI_TPM2_ADDR_OFFSET)
acpi_bin.write(lib.cdata.to_bytes(ctype_data)) acpi_bin.write(inspectorlib.cdata.to_bytes(ctype_data))
else: else:
logging.warning("Passtrhough tpm2 is enabled in scenario but the device is not presented on board.") logging.warning("Passtrhough tpm2 is enabled in scenario but the device is not presented on board.")
logging.warning("Check there is tpm2 device on board and re-generate the xml using board inspector with --advanced option.") logging.warning("Check there is tpm2 device on board and re-generate the xml using board inspector with --advanced option.")

View File

@ -5,8 +5,8 @@
import ctypes import ctypes
import lib.cdata as cdata import inspectorlib.cdata as cdata
import lib.unpack as unpack import inspectorlib.unpack as unpack
class TableHeader(cdata.Struct): class TableHeader(cdata.Struct):
_pack_ = 1 _pack_ = 1

View File

@ -6,8 +6,8 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
import lib.unpack as unpack import inspectorlib.unpack as unpack
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class APICSubtable(cdata.Struct): class APICSubtable(cdata.Struct):

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class ASFSubtable(cdata.Struct): class ASFSubtable(cdata.Struct):

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class DMARSubtable(cdata.Struct): class DMARSubtable(cdata.Struct):

View File

@ -6,8 +6,8 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
import lib.unpack as unpack import inspectorlib.unpack as unpack
from acpiparser._utils import TableHeader, GAS from acpiparser._utils import TableHeader, GAS
_preferred_pm_profile = { _preferred_pm_profile = {

View File

@ -5,8 +5,8 @@
import ctypes import ctypes
import lib.cdata as cdata import inspectorlib.cdata as cdata
import lib.unpack as unpack import inspectorlib.unpack as unpack
# 6.4.2 Small Resource Data Type # 6.4.2 Small Resource Data Type

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
# Common structures # Common structures

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import logging import logging
import lib.cdata as cdata import inspectorlib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
def tpm2_optional_data(data_len): def tpm2_optional_data(data_len):

View File

@ -5,7 +5,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
class Capability: class Capability:
# Capability names from PCI Local Bus Specification and PCI Express Base Specification # Capability names from PCI Local Bus Specification and PCI Express Base Specification

View File

@ -5,7 +5,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
class ExtendedCapability: class ExtendedCapability:
# Capability names from PCI Express Base Specification, mostly Table 9-23 # Capability names from PCI Express Base Specification, mostly Table 9-23

View File

@ -5,7 +5,7 @@
import ctypes import ctypes
import copy import copy
import lib.cdata as cdata import inspectorlib.cdata as cdata
class Common(cdata.Struct): class Common(cdata.Struct):
_pack_ = 1 _pack_ = 1

View File

@ -9,8 +9,8 @@ import sys
import ctypes import ctypes
import struct import struct
import uuid import uuid
import lib.bitfields as bitfields import inspectorlib.bitfields as bitfields
import lib.unpack as unpack import inspectorlib.unpack as unpack
class SMBIOS(unpack.Struct): class SMBIOS(unpack.Struct):
def __new__(cls): def __new__(cls):

56
misc/packaging/100_ACRN Executable file
View File

@ -0,0 +1,56 @@
#!/bin/bash
#* Copyright (c) 2020 Intel Corporation All rights reserved.
# postinst script for acrn kernel
set -e
if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
. /usr/lib/grub/grub-mkconfig_lib
LX=linux16
elif [ -f /usr/lib/grub/update-grub_lib ]; then
. /usr/lib/grub/update-grub_lib
LX=linux
else
# no grub file, so we notify and exit gracefully
echo "Cannot find grub config file, exiting." >&2
exit 0
fi
filename="/etc/grub.d/40_custom"
menu=$(grep ACRN_deb_multiboot2 ${filename}) || true
type=$(lsblk -l |awk '$NF == "/" {print $1}')
pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"'
while IFS= read -r line; do
if [[ $line =~ $pattern ]]; then
uuid="${BASH_REMATCH[1]}"
partuuid="${BASH_REMATCH[2]}"
fi
done < <(blkid |grep ext4 |grep ${type})
if ls /boot/vmlinuz*acrn-sos* 1> /dev/null 2>&1;then
sos_kernel=$(ls -tr /boot/vmlinuz-*acrn-sos* | tail -1)
else
sos_kernel=$(ls /boot/vmlinuz-* | tail -1)
fi
if [ -z "$menu" ];then
cat>"${filename}"<<EOF
#!/bin/sh
exec tail -n +3 \$0
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
load_video
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set $uuid
multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid
}
EOF
fi
sed -i '/Linux_bzImage/d' ${filename} || true
sed -i '/multiboot2 \/boot/a\module2 '$sos_kernel' Linux_bzImage' ${filename}
sync

View File

@ -0,0 +1,18 @@
#!/bin/bash
#* Copyright (c) 2020 Intel Corporation SPDX-License-Identifier: BSD-3-Clause
# postinst script for acrn-board-inspector
set -e
filename='/etc/default/grub'
sed -i '/GRUB_DEFAULT/d' ${filename}
sed -i '/GRUB_TIMEOUT/d' ${filename}
sed -i '/GRUB_HIDDEN_TIMEOUT/d' ${filename}
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/d' ${filename}
sed -i '$a GRUB_CMDLINE_LINUX_DEFAULT="quiet splash idle=nomwait iomem=relaxed intel_idle.max_cstate=0 intel_pstate=disable"' ${filename}
sed -i '$a GRUB_TIMEOUT=20' ${filename}
sync
update-grub
exit 0

View File

@ -0,0 +1,5 @@
# Remove the folder of the /bin/ directory
rm -rf /bin/pcieparser
rm -rf /bin/memmapparser
rm -rf /bin/legacy
rm -rf /bin/extractors

View File

@ -5,117 +5,31 @@
# please NOTE scenario_info/board_info please add in release.json if needed !!! # please NOTE scenario_info/board_info please add in release.json if needed !!!
set -e set -e
#Build info Start
echo "please choose <scenario> ,<board> ,<disk type>" SCENARIO=(shared)
scenario_info=(industry hybrid logical_partition ) BOARD=(nuc11tnbi5)
board_info=(nuc7i7dnb whl-ipc-i5 )
echo "Scenario is ->"
scenario_num=${#scenario_info[@]}
for ((i=0;i<scenario_num;i++))
{
let s_num=i+1
echo $s_num ${scenario_info[i]};
}
while :
do
read num
if [ $num = 0 ] || [ $num -gt ${scenario_num} ]; then
echo "out of scenario scope,please retry"
else
c=$(($num-1))
echo "scenario is" ${scenario_info[c]};
SCENARIO="${scenario_info[c]}"
break
fi
done
echo "Board is ->"
board_num=${#board_info[@]}
for ((i=0;i<board_num;i++))
{
let b_num=i+1
echo $b_num ${board_info[i]};
}
while :
do
read num2
if [ $num2 = 0 ] || [ $num2 -gt ${board_num} ]; then
echo "out of board scope,please retry"
else
c1=$(($num2-1))
echo "board is" ${board_info[c1]};
BOARD="${board_info[c1]}"
break
fi
done
#Build info End
ACRNBIN="/boot/acrn.${SCENARIO}.${BOARD}.bin" ACRNBIN="/boot/acrn.${SCENARIO}.${BOARD}.bin"
type=$(lsblk -l |awk '$NF == "/" {print $1}')
echo "Your acrn bin is ->" pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"'
echo $ACRNBIN while IFS= read -r line; do
if [[ $line =~ $pattern ]]; then
uuid="${BASH_REMATCH[1]}"
echo "disk type is ->" partuuid="${BASH_REMATCH[2]}"
disk_info=(nvme sda)
disk_num=${#disk_info[@]}
for ((i=0;i<disk_num;i++))
{
let d_num=i+1
echo $d_num ${disk_info[i]};
}
while :
do
read num3
if [ $num3 = 0 ] || [ $num3 -gt ${disk_num} ]; then
echo "out of disk scope,please retry"
else
c3=$(($num3-1))
echo "disk is" ${disk_info[c3]};
type="${disk_info[c3]}"
break
fi fi
done < <(blkid |grep ext4 |grep ${type})
done
str=$(blkid |grep ext4 |grep ${type})
uuid=$(echo $str |cut -d " " -f 2|cut -d "=" -f 2)
str=$(blkid |grep ext4 |grep ${type})
partuuid=$(echo ${str##*PARTUUID=})
filename="/etc/grub.d/40_custom" filename="/etc/grub.d/40_custom"
kernelimg=$(grep module ${filename}|| true) kernelimg=$(grep module ${filename} | tail -1 || true)
cat>"${filename}"<<EOF if [ $SCENARIO == shared ];then
cat>"${filename}"<<EOF
#!/bin/sh #!/bin/sh
exec tail -n +3 \$0 exec tail -n +3 \$0
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 { menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
@ -124,17 +38,61 @@ menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
insmod part_gpt insmod part_gpt
insmod ext2 insmod ext2
search --no-floppy --fs-uuid --set $uuid search --no-floppy --fs-uuid --set $uuid
multiboot2 $ACRNBIN root=PARTUUID=$partuuid i915.modeset=0 video=efifb:off multiboot2 $ACRNBIN root=PARTUUID=$partuuid
$kernelimg $kernelimg
} }
EOF EOF
elif [ $SCENARIO == hybrid ];then
cat>"${filename}"<<EOF
#!/bin/sh
exec tail -n +3 \$0
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
load_video
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set $uuid
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
$kernelimg
module2 /boot/zephyr64.elf Zephyr_ElfImage
module2 /boot/ACPI_VM0.bin ACPI_VM0
}
EOF
elif [ $SCENARIO == partitioned ];then
cat>"${filename}"<<EOF
#!/bin/sh
exec tail -n +3 \$0
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
load_video
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set $uuid
echo 'loading ACRN...'
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
$kernelimg
module2 /boot/ACPI_VM0.bin ACPI_VM0
module2 /boot/ACPI_VM1.bin ACPI_VM1
}
EOF
fi
filename='/etc/default/grub' filename='/etc/default/grub'
sed -i '/GRUB_DEFAULT/d' ${filename} sed -i '/GRUB_DEFAULT=/d' ${filename}
sed -i '/GRUB_TIMEOUT/d' ${filename} sed -i '/GRUB_TIMEOUT=/d' ${filename}
sed -i '/GRUB_HIDDEN_TIMEOUT/d' ${filename} sed -i '/GRUB_HIDDEN_TIMEOUT=/d' ${filename}
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/d' ${filename}
sed -i '/GRUB_CMDLINE_LINUX=/d' ${filename}
sed -i '/GRUB_TERMINAL=/d' ${filename}
sed -i '/GRUB_SERIAL_COMMAND=/d' ${filename}
sed -i '$a GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"' ${filename}
sed -i '$a GRUB_TERMINAL="console serial"' ${filename}
sed -i '$a GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"' ${filename}
sed -i '$a GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"' ${filename}
sed -i '$a GRUB_DEFAULT=ACRN_deb_multiboot2' ${filename} sed -i '$a GRUB_DEFAULT=ACRN_deb_multiboot2' ${filename}
sed -i '$a GRUB_TIMEOUT=20' ${filename} sed -i '$a GRUB_TIMEOUT=20' ${filename}

View File

@ -19,7 +19,7 @@ cat>"${filename}"<<EOF
insmod part_gpt insmod part_gpt
insmod ext2 insmod ext2
search --no-floppy --fs-uuid --set $uuid search --no-floppy --fs-uuid --set $uuid
multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid i915.modeset=0 video=efifb:off multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid
} }

View File

@ -0,0 +1,172 @@
# -*- coding: utf-8 -*-
#* Copyright (c) 2020 Intel Corporation
import os,sys,copy,json
import subprocess
import datetime
import time
import shlex
import glob
import argparse
import multiprocessing
def run_command(cmd, path):
ret_code = 0
#print("cmd = %s, path = %s" % (cmd, path))
cmd_proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd = path, universal_newlines=True)
while True:
output = cmd_proc.stdout.readline()
#print(output.strip())
ret_code = cmd_proc.poll()
if ret_code is not None:
break
return ret_code
def add_cmd_list(cmd_list, cmd_str, dir_str):
cmd = {}
cmd['cmd'] = cmd_str
cmd['dir'] = dir_str
cmd_list.append(cmd)
def run_cmd_list(cmd_list):
for i, cmd in enumerate(cmd_list):
ret = run_command(cmd['cmd'], cmd['dir'])
if ret != 0:
print("cmd(%s) run in dir(%s) failed and exit" % (cmd['cmd'], cmd['dir']))
exit(-1)
return
def create_acrn_deb(board, scenario, version, build_dir):
cur_dir = build_dir + '/../'
deb_dir = build_dir + '/acrn_release_deb/'
cmd_list = []
if os.path.exists(deb_dir):
add_cmd_list(cmd_list, 'rm -rf acrn_release_deb', build_dir)
add_cmd_list(cmd_list, 'mkdir -p acrn_release_deb', build_dir)
add_cmd_list(cmd_list, 'mkdir -p acrn_release_deb/boot', build_dir)
add_cmd_list(cmd_list, 'mkdir DEBIAN', deb_dir)
add_cmd_list(cmd_list, 'touch DEBIAN/control', deb_dir)
deb_bin_name ='acrn.%s.%s.bin' % (scenario,board)
deb_out_name ='acrn.%s.%s.32.out' % (scenario,board)
build_bin_name = build_dir + '/hypervisor/acrn.bin'
build_out_name = build_dir + '/hypervisor/acrn.32.out'
add_cmd_list(cmd_list, 'cp %s acrn_release_deb/boot/%s' %(build_bin_name, deb_bin_name), build_dir)
add_cmd_list(cmd_list, 'cp %s acrn_release_deb/boot/%s' %(build_out_name, deb_out_name), build_dir)
run_cmd_list(cmd_list)
lines=[]
f=open(cur_dir + "/misc/packaging/acrn-hypervisor.postinst",'r')
for line in f:
lines.append(line)
f.close()
start = lines.index('#Build info Start\n')
end = lines.index('#Build info End\n')
del lines[(start+1):(end-1)]
lines.insert(start+1,"\nSCENARIO=(%s)\n"%scenario)
lines.insert(start+2,"\nBOARD=(%s)\n"%board)
with open(cur_dir + "/misc/packaging/acrn-hypervisor.postinst", "w") as f:
for line in lines:
f.write(line)
f.close()
listcontrol=['Package: acrn-hypervisor\n',
'version: %s \n'% version,
'Section: free \n',
'Priority: optional \n',
'Architecture: amd64 \n',
'Maintainer: acrn-dev@lists.projectacrn.org \n',
'Description: ACRN Hypervisor for IoT \n',
'\n']
with open(deb_dir + '/DEBIAN/control','w',encoding='utf-8') as fr:
fr.writelines(listcontrol)
#design in acrn_data
with open(cur_dir + "/.deb.conf","r") as load_deb:
deb_info = json.load(load_deb)
load_deb.close()
deb_info_list = list(deb_info)
run_command('rm -rf acrn_release_img/usr/*', build_dir)
for i in deb_info_list:
source = deb_info[i]['source']
target = deb_info[i]['target']
if target == 'boot/':
continue
source = cur_dir + '/../' + source
target = deb_dir + target
if os.path.exists(target):
run_command('cp %s %s' % (source, target), cur_dir)
else:
run_command('mkdir -p %s' % target, cur_dir)
run_command('cp %s %s' % (source, target), cur_dir)
run_command('cp ./misc/packaging/acrn-hypervisor.postinst ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
run_command('chmod +x ./build/acrn_release_deb/etc/grub.d/100_ACRN', cur_dir)
run_command('chmod +x ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
run_command('sed -i \'s/\r//\' ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
run_command('cp ./misc/packaging/acrn-hypervisor.preinst ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
run_command('chmod +x ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
run_command('sed -i \'s/\r//\' ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
ret = run_command('dpkg -b acrn_release_deb acrn-%s-%s-%s.deb' %(board, scenario, version), build_dir)
if ret != 0:
print("ERROR : generate ACRN debian package acrn-{}-{}-{}.deb failed! \
Please check all the files in {}/acrn_release_deb".format(board, scenario, version, build_dir))
else:
print("ACRN debian package acrn-{}-{}-{}.deb was successfully created in the {}.".format(board, scenario, version, build_dir))
return
def create_acrn_board_inspector_deb(version, build_dir):
cur_dir = build_dir + '/../'
deb_dir = build_dir + '/acrn_board_inspector_deb/'
cmd_list = []
if os.path.exists(deb_dir):
add_cmd_list(cmd_list, 'rm -rf acrn_board_inspector_deb', build_dir)
add_cmd_list(cmd_list, 'mkdir -p acrn_board_inspector_deb', build_dir)
add_cmd_list(cmd_list, 'mkdir DEBIAN', deb_dir)
add_cmd_list(cmd_list, 'touch DEBIAN/control', deb_dir)
run_cmd_list(cmd_list)
#control file description
listcontrol=['Package: acrn-board-inspector\n',
'version: %s \n'% version,
'Section: free \n',
'Priority: optional \n',
'Architecture: amd64 \n',
'Maintainer: acrn-dev@lists.projectacrn.org \n',
'Description: ACRN board inspector tools \n',
'Depends: cpuid, msr-tools, pciutils, dmidecode, python3, python3-pip, python3-lxml \n',
'\n']
with open(deb_dir + '/DEBIAN/control','w',encoding='utf-8') as fr:
fr.writelines(listcontrol)
run_command('cp -r ./misc/config_tools/board_inspector/ ./build/acrn_board_inspector_deb/bin/', cur_dir)
run_command('cp ./misc/packaging/acrn-board-inspector.postinst ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
run_command('chmod +x ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
run_command('sed -i \'s/\r//\' ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
run_command('cp ./misc/packaging/acrn-board-inspector.prerm ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
run_command('chmod +x ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
run_command('sed -i \'s/\r//\' ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
ret = run_command('dpkg -b acrn_board_inspector_deb acrn-board-inspector-%s.deb' %(version), build_dir)
if ret != 0:
print("ERROR : generate board_inspector debian package acrn-board-inspector-{}.deb failed! \
Please check all the files in {}/acrn_board_inspector_deb".format(version, build_dir))
else:
print("board_inspector debian package acrn-board-inspector-{}.deb was successfully created in the {}.".format(version, build_dir))
return
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("deb_mode", help="choose deb mode, e.g. acrn_all or board_inspector")
parser.add_argument("build_dir", help="the absolute address of the acrn-hypervisor build directory")
parser.add_argument("--version", default="1.0", help="the acrn-hypervisor version")
parser.add_argument("--board_name", default="board", help="the name of the board that runs the ACRN hypervisor")
parser.add_argument("--scenario", default="scenario", help="the acrn hypervisor scenario setting")
args = parser.parse_args()
if args.deb_mode == 'board_inspector':
create_acrn_board_inspector_deb(args.version, args.build_dir)
elif args.deb_mode == 'acrn_all':
create_acrn_deb(args.board_name, args.scenario, args.version, args.build_dir)
else:
print("ERROR: Please check the value of deb_mode: the value shall be acrn_all or board_inspector.")