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
all: hypervisor devicemodel tools
@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
define build_acrn
@ -99,6 +100,8 @@ define install_acrn_debug
endef
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
$(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
from acpi_const import *
import acpiparser.tpm2
import lib.cdata
import inspectorlib.cdata
import common
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:
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.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.write(lib.cdata.to_bytes(ctype_data))
acpi_bin.write(inspectorlib.cdata.to_bytes(ctype_data))
else:
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.")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,8 +9,8 @@ import sys
import ctypes
import struct
import uuid
import lib.bitfields as bitfields
import lib.unpack as unpack
import inspectorlib.bitfields as bitfields
import inspectorlib.unpack as unpack
class SMBIOS(unpack.Struct):
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 !!!
set -e
#Build info Start
echo "please choose <scenario> ,<board> ,<disk type>"
SCENARIO=(shared)
scenario_info=(industry hybrid logical_partition )
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
BOARD=(nuc11tnbi5)
#Build info End
ACRNBIN="/boot/acrn.${SCENARIO}.${BOARD}.bin"
type=$(lsblk -l |awk '$NF == "/" {print $1}')
echo "Your acrn bin is ->"
echo $ACRNBIN
echo "disk type is ->"
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
pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"'
while IFS= read -r line; do
if [[ $line =~ $pattern ]]; then
uuid="${BASH_REMATCH[1]}"
partuuid="${BASH_REMATCH[2]}"
fi
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=})
done < <(blkid |grep ext4 |grep ${type})
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
exec tail -n +3 \$0
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
@ -124,17 +38,61 @@ menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set $uuid
multiboot2 $ACRNBIN root=PARTUUID=$partuuid i915.modeset=0 video=efifb:off
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
$kernelimg
}
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'
sed -i '/GRUB_DEFAULT/d' ${filename}
sed -i '/GRUB_TIMEOUT/d' ${filename}
sed -i '/GRUB_HIDDEN_TIMEOUT/d' ${filename}
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 '/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_TIMEOUT=20' ${filename}

View File

@ -19,7 +19,7 @@ cat>"${filename}"<<EOF
insmod part_gpt
insmod ext2
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.")