|
|
@ -32,41 +32,58 @@ Expert commands: |
|
|
|
install-bootloader-to-mender-disk-image - installs bootloader (U-Boot/GRUB) |
|
|
|
related files |
|
|
|
|
|
|
|
Options: [-e|--embedded | -i|--image | -s|--size-data | -d|--device-type | |
|
|
|
-r|--rootfs_type | -p| --demo-ip | -c| --certificate | |
|
|
|
-u| --production-url | -o| --hosted-token] |
|
|
|
|
|
|
|
embedded - raw disk embedded linux image path, e.g. Debian 9.3, Raspbian, etc. |
|
|
|
image - raw disk .sdimg file name where the script writes to |
|
|
|
size-data - size of data partition in MiB; default value 128MiB |
|
|
|
device-type - target device identification used to build .sdimg name |
|
|
|
rootfs_type - selects rootfs_a|rootfs_b as the source filesystem for an artifact |
|
|
|
demo_ip - server demo ip used for testing purposes |
|
|
|
certificate - server certificate file |
|
|
|
production-url - production server url |
|
|
|
hosted-token - mender hosted token |
|
|
|
|
|
|
|
Note: root filesystem size used in .sdimg creation can be found as an |
|
|
|
output from 'raw-disk-image-shrink-rootfs' command or, in case of |
|
|
|
using unmodified embedded raw disk image, can be checked with any |
|
|
|
partition manipulation program (e.g. parted, fdisk, etc.). |
|
|
|
Options: [-r|--raw-disk-image | -m|--mender-disk-image | -s|--data-part-size-mb | |
|
|
|
-d|--device-type | -p|--rootfs-partition-id | -i|--demo-host-ip | |
|
|
|
-c| --server-cert | -u| --server-url | -t|--tenant-token | |
|
|
|
-g|--mender-client -b|--bootloader-toolchain | -a|--artifact-name | |
|
|
|
-k|--keep] |
|
|
|
|
|
|
|
raw-disk-image - raw disk embedded Linux (Debian, Raspbian, |
|
|
|
Ubuntu, etc.) image path |
|
|
|
mender-disk-image - Mender disk image name where the script writes to |
|
|
|
should have "sdimg" suffix |
|
|
|
data-part-size-mb - data partition size in MB; default value 128MB |
|
|
|
device-type - target device identification used to build |
|
|
|
Mender image |
|
|
|
rootfs-partition-id - selects root filesystem (rootfs_a|rootfs_b) as the |
|
|
|
source filesystem for an artifact |
|
|
|
demo-host-ip - server demo ip used for testing purposes |
|
|
|
server-cert - server certificate file |
|
|
|
server-url - production server url |
|
|
|
tenant-token - Mender tenant token |
|
|
|
mender-client - Mender client binary |
|
|
|
bootloader-toolchain - GNU Arm Embedded Toolchain |
|
|
|
artifact-name - Mender artifact name |
|
|
|
keep - keep intermediate files in output directory |
|
|
|
|
|
|
|
Note: root filesystem size used in Mender image creation can be found as |
|
|
|
an output from 'raw-disk-image-shrink-rootfs' command or, in case |
|
|
|
of using unmodified embedded raw disk image, can be checked with |
|
|
|
any partition manipulation program (e.g. parted, fdisk, etc.). |
|
|
|
|
|
|
|
Examples: |
|
|
|
|
|
|
|
To create fully functional Mender image from raw disk image in a single step: |
|
|
|
|
|
|
|
./mender-convert.sh from-raw-disk-image --embedded <embedded_image_file_path> |
|
|
|
--image <sdimg_file_name> --device-type raspberrypi3 |
|
|
|
--mender <mender_binary_path> --artifact release-1_1.5.0 |
|
|
|
--demo-ip 192.168.10.2 --toolchain arm-linux-gnueabihf --keep |
|
|
|
./mender-convert.sh from-raw-disk-image |
|
|
|
--raw-disk-image <raw_disk_image_path> |
|
|
|
--mender-disk-image <mender_image_name> |
|
|
|
--device-type <beaglebone | raspberrypi3> |
|
|
|
--mender-client <mender_binary_path> |
|
|
|
--artifact-name release-1_1.5.0 |
|
|
|
--bootloader-toolchain arm-linux-gnueabihf |
|
|
|
--demo-host-ip 192.168.10.2 |
|
|
|
--keep |
|
|
|
|
|
|
|
Output: ready to use Mender image with Mender client and bootloader installed |
|
|
|
|
|
|
|
To create Mender artifact file from Mender image: |
|
|
|
|
|
|
|
./mender-convert.sh mender-disk-image-to-artifact --image <sdimg_file_path> |
|
|
|
--device-type beaglebone --artifact release-1_1.5.0 |
|
|
|
--rootfs-type rootfs_a |
|
|
|
./mender-convert.sh mender-disk-image-to-artifact |
|
|
|
--mender-disk-image <mender_image_path> |
|
|
|
--device-type <beaglebone | raspberrypi3> |
|
|
|
--artifact-name release-1_1.5.0 |
|
|
|
--rootfs-partition-id rootfs_a |
|
|
|
|
|
|
|
Note: artifact name format is: release-<release_no>_<mender_version> |
|
|
|
|
|
|
@ -74,30 +91,38 @@ Examples for expert actions: |
|
|
|
|
|
|
|
To shrink the existing embedded raw disk image: |
|
|
|
|
|
|
|
./mender-convert.sh raw-disk-image-shrink-rootfs --embedded <embedded_image_file_path> |
|
|
|
./mender-convert.sh raw-disk-image-shrink-rootfs |
|
|
|
--raw-disk-image <raw_disk_image_path> |
|
|
|
|
|
|
|
Output: Root filesystem size (sectors): 4521984 |
|
|
|
|
|
|
|
To convert raw disk image's partition table to Mender layout: |
|
|
|
|
|
|
|
./mender-convert.sh raw-disk-image-create-partitions --image <sdimg_file_name> |
|
|
|
--embedded <embedded_image_file_path> |
|
|
|
--size-data 128 --device-type beaglebone |
|
|
|
./mender-convert.sh raw-disk-image-create-partitions |
|
|
|
--raw-disk-image <raw_disk_image_path> |
|
|
|
--mender-disk-image <mender_image_name> |
|
|
|
--device-type <beaglebone | raspberrypi3> |
|
|
|
--data-part-size-mb 128 |
|
|
|
|
|
|
|
Output: repartitioned (respectively to Mender layout) raw disk image |
|
|
|
|
|
|
|
To install Mender client related files: |
|
|
|
|
|
|
|
./mender-convert.sh install-mender-to-mender-disk-image --image <sdimg_file_path> |
|
|
|
--device-type beaglebone --artifact release-1_1.5.0 |
|
|
|
--demo-ip 192.168.10.2 --mender <mender_binary_path> |
|
|
|
./mender-convert.sh install-mender-to-mender-disk-image |
|
|
|
--mender-disk-image <mender_image_path> |
|
|
|
--device-type <beaglebone | raspberrypi3> |
|
|
|
--artifact-name release-1_1.5.0 |
|
|
|
--demo-host-ip 192.168.10.2 |
|
|
|
--mender-client <mender_binary_path> |
|
|
|
|
|
|
|
Output: Mender image with Mender client related files installed |
|
|
|
|
|
|
|
To install bootloader (U-Boot/GRUB) related files: |
|
|
|
|
|
|
|
./mender-convert.sh install-bootloader-to-mender-disk-image --image <sdimg_file_path> |
|
|
|
--device-type beaglebone --toolchain arm-linux-gnueabihf |
|
|
|
./mender-convert.sh install-bootloader-to-mender-disk-image |
|
|
|
--mender-disk-image <mender_image_path> |
|
|
|
--device-type <beaglebone | raspberrypi3> |
|
|
|
--bootloader-toolchain arm-linux-gnueabihf |
|
|
|
|
|
|
|
Output: Mender image with appropriate bootloader (U-Boot/GRUB) installed |
|
|
|
|
|
|
@ -119,36 +144,36 @@ pboot_start= |
|
|
|
# (i.e 16777216 bytes, equals to 'partition_alignment' * 2) |
|
|
|
pboot_size= |
|
|
|
# Default 'data' partition size in MiB. |
|
|
|
data_size=128 |
|
|
|
data_part_size_mb=128 |
|
|
|
# Data partition size in sectors. |
|
|
|
pdata_size= |
|
|
|
# Exemplary values for Beaglebone: 9.3: 4521984 9.4: 4423680 |
|
|
|
prootfs_size= |
|
|
|
|
|
|
|
menderimage= |
|
|
|
embeddedimage= |
|
|
|
mender_disk_image= |
|
|
|
raw_disk_image= |
|
|
|
device_type= |
|
|
|
partitions_number= |
|
|
|
artifact= |
|
|
|
rootfs_type= |
|
|
|
artifact_name= |
|
|
|
rootfs_partition_id= |
|
|
|
image_type= |
|
|
|
mender= |
|
|
|
mender_client= |
|
|
|
# Mender production certificate. |
|
|
|
certificate= |
|
|
|
server_cert= |
|
|
|
# Mender production server url. |
|
|
|
production_url= |
|
|
|
server_url= |
|
|
|
# Mender demo server IP address. |
|
|
|
demo_ip= |
|
|
|
demo_host_ip= |
|
|
|
# Mender hosted token. |
|
|
|
hosted_token= |
|
|
|
tenant_token= |
|
|
|
|
|
|
|
declare -a rootfs_types=("rootfs_a" "rootfs_b") |
|
|
|
declare -a sdimgmappings |
|
|
|
declare -a embedmappings |
|
|
|
declare -a rootfs_partition_ids=("rootfs_a" "rootfs_b") |
|
|
|
declare -a mender_disk_mappings |
|
|
|
declare -a raw_disk_mappings |
|
|
|
|
|
|
|
do_raw_disk_image_shrink_rootfs() { |
|
|
|
if [ -z "${embeddedimage}" ]; then |
|
|
|
echo "Embedded image not set. Aborting." |
|
|
|
if [ -z "${raw_disk_image}" ]; then |
|
|
|
echo "Raw disk image not set. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
@ -159,8 +184,8 @@ do_raw_disk_image_shrink_rootfs() { |
|
|
|
local rootfssize= |
|
|
|
local bootflag= |
|
|
|
|
|
|
|
# Gather information about embedded image. |
|
|
|
get_image_info $embeddedimage count sector_size bootstart bootsize \ |
|
|
|
# Gather information about raw disk image. |
|
|
|
get_image_info $raw_disk_image count sector_size bootstart bootsize \ |
|
|
|
rootfsstart rootfssize bootflag |
|
|
|
|
|
|
|
# Find first available loopback device. |
|
|
@ -168,11 +193,11 @@ do_raw_disk_image_shrink_rootfs() { |
|
|
|
|
|
|
|
# Mount appropriate partition. |
|
|
|
if [[ $count -eq 1 ]]; then |
|
|
|
sudo losetup $loopdevice $embeddedimage -o $(($bootstart * $sector_size)) |
|
|
|
sudo losetup $loopdevice $raw_disk_image -o $(($bootstart * $sector_size)) |
|
|
|
elif [[ $count -eq 2 ]]; then |
|
|
|
sudo losetup $loopdevice $embeddedimage -o $(($rootfsstart * $sector_size)) |
|
|
|
sudo losetup $loopdevice $raw_disk_image -o $(($rootfsstart * $sector_size)) |
|
|
|
else |
|
|
|
echo "Error: invalid/unsupported embedded image. Aborting." |
|
|
|
echo "Error: invalid/unsupported embedded raw disk image. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
@ -194,7 +219,7 @@ do_raw_disk_image_shrink_rootfs() { |
|
|
|
sudo e2fsck -y -f $loopdevice |
|
|
|
|
|
|
|
sudo losetup -d $loopdevice |
|
|
|
sudo losetup $loopdevice $embeddedimage |
|
|
|
sudo losetup $loopdevice $raw_disk_image |
|
|
|
|
|
|
|
if [[ $count -eq 1 ]]; then |
|
|
|
create_single_disk_partition_table $loopdevice $bootstart $new_size_sectors |
|
|
@ -208,13 +233,13 @@ do_raw_disk_image_shrink_rootfs() { |
|
|
|
|
|
|
|
sudo losetup -d $loopdevice |
|
|
|
echo "Image new endsector: $endsector" |
|
|
|
truncate -s $((($endsector+1) * $sector_size)) $embeddedimage |
|
|
|
truncate -s $((($endsector+1) * $sector_size)) $raw_disk_image |
|
|
|
echo "Root filesystem size (sectors): $new_size_sectors" |
|
|
|
} |
|
|
|
|
|
|
|
do_raw_disk_image_create_partitions() { |
|
|
|
if [ -z "${embeddedimage}" ]; then |
|
|
|
echo "Source embedded image not set. Aborting." |
|
|
|
if [ -z "${raw_disk_image}" ]; then |
|
|
|
echo "Raw disk image not set. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
@ -223,44 +248,44 @@ do_raw_disk_image_create_partitions() { |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ ! -f ${embeddedimage} ]]; then |
|
|
|
echo "Source embedded image not found. Aborting." |
|
|
|
if [[ ! -f ${raw_disk_image} ]]; then |
|
|
|
echo "Raw disk image not found. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
mkdir -p $output_dir && cd $output_dir |
|
|
|
|
|
|
|
# In case of missing .sdimg name use the default format. |
|
|
|
[ -z $menderimage ] && menderimage=$output_dir/mender_${device_type}.sdimg \ |
|
|
|
|| menderimage=$output_dir/$menderimage |
|
|
|
[ -z $mender_disk_image ] && mender_disk_image=$output_dir/mender_${device_type}.sdimg \ |
|
|
|
|| mender_disk_image=$output_dir/$mender_disk_image |
|
|
|
|
|
|
|
analyse_embedded_image ${embeddedimage} pboot_start pboot_size prootfs_size \ |
|
|
|
analyse_raw_disk_image ${raw_disk_image} pboot_start pboot_size prootfs_size \ |
|
|
|
sector_size image_type |
|
|
|
|
|
|
|
[ -z "${prootfs_size}" ] && \ |
|
|
|
{ echo "root filesystem size not set. Aborting."; exit 1; } |
|
|
|
|
|
|
|
local menderimage_size= |
|
|
|
calculate_sdimg_size $pboot_start $pboot_size \ |
|
|
|
$prootfs_size $data_size \ |
|
|
|
$sector_size pdata_size menderimage_size |
|
|
|
local mender_disk_image_size= |
|
|
|
calculate_mender_disk_size $pboot_start $pboot_size \ |
|
|
|
$prootfs_size $data_part_size_mb \ |
|
|
|
$sector_size pdata_size mender_disk_image_size |
|
|
|
|
|
|
|
echo -e "Creating Mender *.sdimg file:\ |
|
|
|
\nimage size: ${menderimage_size} bytes\ |
|
|
|
echo -e "Creating Mender disk image:\ |
|
|
|
\nimage size: ${mender_disk_image_size} bytes\ |
|
|
|
\nroot filesystem size: ${prootfs_size} sectors\ |
|
|
|
\ndata partition size: $pdata_size sectors\n" |
|
|
|
|
|
|
|
create_test_config_file $device_type $partition_alignment $vfat_storage_offset \ |
|
|
|
$pboot_size $prootfs_size $pdata_size $menderimage_size \ |
|
|
|
$pboot_size $prootfs_size $pdata_size $mender_disk_image_size \ |
|
|
|
$sector_size |
|
|
|
|
|
|
|
create_sdimg $menderimage $menderimage_size |
|
|
|
format_sdimg $menderimage $menderimage_size $pboot_start $pboot_size \ |
|
|
|
$prootfs_size $pdata_size $sector_size |
|
|
|
verify_sdimg $menderimage partitions_number |
|
|
|
create_mender_disk $mender_disk_image $mender_disk_image_size |
|
|
|
format_mender_disk $mender_disk_image $mender_disk_image_size $pboot_start \ |
|
|
|
$pboot_size $prootfs_size $pdata_size $sector_size |
|
|
|
verify_mender_disk $mender_disk_image partitions_number |
|
|
|
|
|
|
|
create_device_maps $menderimage sdimgmappings |
|
|
|
make_sdimg_filesystem ${sdimgmappings[@]} |
|
|
|
create_device_maps $mender_disk_image mender_disk_mappings |
|
|
|
make_mender_disk_filesystem ${mender_disk_mappings[@]} |
|
|
|
|
|
|
|
case "$device_type" in |
|
|
|
"beaglebone") |
|
|
@ -275,23 +300,23 @@ do_raw_disk_image_create_partitions() { |
|
|
|
|
|
|
|
echo -e "\nCleaning..." |
|
|
|
# Clean and detach. |
|
|
|
detach_device_maps ${sdimgmappings[@]} |
|
|
|
detach_device_maps ${embedmappings[@]} |
|
|
|
detach_device_maps ${mender_disk_mappings[@]} |
|
|
|
detach_device_maps ${raw_disk_mappings[@]} |
|
|
|
sync |
|
|
|
rm -rf $embedded_base_dir |
|
|
|
rm -rf $sdimg_base_dir |
|
|
|
|
|
|
|
[ $rc -eq 0 ] && { echo -e "\n$menderimage image created."; } \ |
|
|
|
|| { echo -e "\n$menderimage image composing failure."; } |
|
|
|
[ $rc -eq 0 ] && { echo -e "\n$mender_disk_image image created."; } \ |
|
|
|
|| { echo -e "\n$mender_disk_image image composing failure."; } |
|
|
|
} |
|
|
|
|
|
|
|
do_make_sdimg_beaglebone() { |
|
|
|
local ret=0 |
|
|
|
|
|
|
|
create_device_maps $embeddedimage embedmappings |
|
|
|
create_device_maps $raw_disk_image raw_disk_mappings |
|
|
|
|
|
|
|
mount_sdimg ${sdimgmappings[@]} |
|
|
|
mount_embedded ${embedmappings[@]} |
|
|
|
mount_mender_disk ${mender_disk_mappings[@]} |
|
|
|
mount_raw_disk ${raw_disk_mappings[@]} |
|
|
|
|
|
|
|
echo -e "\nSetting boot partition..." |
|
|
|
stage_2_args="$sdimg_boot_dir $embedded_rootfs_dir" |
|
|
@ -309,35 +334,35 @@ do_make_sdimg_beaglebone() { |
|
|
|
} |
|
|
|
|
|
|
|
do_make_sdimg_raspberrypi3() { |
|
|
|
image_boot_part=$(fdisk -l ${embeddedimage} | grep FAT32) |
|
|
|
image_boot_part=$(fdisk -l ${raw_disk_image} | grep FAT32) |
|
|
|
|
|
|
|
boot_part_start=$(echo ${image_boot_part} | awk '{print $2}') |
|
|
|
boot_part_end=$(echo ${image_boot_part} | awk '{print $3}') |
|
|
|
boot_part_size=$(echo ${image_boot_part} | awk '{print $4}') |
|
|
|
|
|
|
|
extract_file_from_image ${embeddedimage} ${boot_part_start} \ |
|
|
|
extract_file_from_image ${raw_disk_image} ${boot_part_start} \ |
|
|
|
${boot_part_size} "boot.vfat" |
|
|
|
|
|
|
|
image_rootfs_part=$(fdisk -l ${embeddedimage} | grep Linux) |
|
|
|
image_rootfs_part=$(fdisk -l ${raw_disk_image} | grep Linux) |
|
|
|
|
|
|
|
rootfs_part_start=$(echo ${image_rootfs_part} | awk '{print $2}') |
|
|
|
rootfs_part_end=$(echo ${image_rootfs_part} | awk '{print $3}') |
|
|
|
rootfs_part_size=$(echo ${image_rootfs_part} | awk '{print $4}') |
|
|
|
|
|
|
|
extract_file_from_image ${embeddedimage} ${rootfs_part_start} \ |
|
|
|
extract_file_from_image ${raw_disk_image} ${rootfs_part_start} \ |
|
|
|
${rootfs_part_size} "rootfs.img" |
|
|
|
|
|
|
|
echo -e "\nSetting boot partition..." |
|
|
|
stage_2_args="$output_dir ${sdimgmappings[0]}" |
|
|
|
stage_2_args="$output_dir ${mender_disk_mappings[0]}" |
|
|
|
${tool_dir}/rpi3-convert-stage-2.sh ${stage_2_args} || ret=$? |
|
|
|
[[ $ret -ne 0 ]] && { echo "Aborting."; return $ret; } |
|
|
|
|
|
|
|
echo -e "\nSetting root filesystem..." |
|
|
|
stage_3_args="$output_dir ${sdimgmappings[1]}" |
|
|
|
stage_3_args="$output_dir ${mender_disk_mappings[1]}" |
|
|
|
${tool_dir}/rpi3-convert-stage-3.sh ${stage_3_args} || ret=$? |
|
|
|
[[ $ret -ne 0 ]] && { echo "Aborting."; return $ret; } |
|
|
|
|
|
|
|
mount_sdimg ${sdimgmappings[@]} |
|
|
|
mount_mender_disk ${mender_disk_mappings[@]} |
|
|
|
|
|
|
|
# Add mountpoints. |
|
|
|
sudo install -d -m 755 ${sdimg_primary_dir}/uboot |
|
|
@ -348,28 +373,28 @@ do_make_sdimg_raspberrypi3() { |
|
|
|
|
|
|
|
do_install_mender_to_mender_disk_image() { |
|
|
|
# Mender executables, service and configuration files installer. |
|
|
|
if [ -z "$menderimage" ] || [ -z "$device_type" ] || [ -z "$mender" ] || \ |
|
|
|
[ -z "$artifact" ]; then |
|
|
|
if [ -z "$mender_disk_image" ] || [ -z "$device_type" ] || [ -z "$mender_client" ] || \ |
|
|
|
[ -z "$artifact_name" ]; then |
|
|
|
show_help |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
# mender-image-1.5.0 |
|
|
|
stage_4_args="-i $menderimage -d $device_type -m ${mender} -a ${artifact}" |
|
|
|
stage_4_args="-m $mender_disk_image -d $device_type -g ${mender_client} -a ${artifact_name}" |
|
|
|
|
|
|
|
if [ -n "$demo_ip" ]; then |
|
|
|
stage_4_args="${stage_4_args} -p ${demo_ip}" |
|
|
|
if [ -n "$demo_host_ip" ]; then |
|
|
|
stage_4_args="${stage_4_args} -i ${demo_host_ip}" |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -n "$certificate" ]; then |
|
|
|
stage_4_args="${stage_4_args} -c ${certificate}" |
|
|
|
if [ -n "$server_cert" ]; then |
|
|
|
stage_4_args="${stage_4_args} -c ${server_cert}" |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -n "$production_url" ]; then |
|
|
|
stage_4_args="${stage_4_args} -u ${production_url}" |
|
|
|
if [ -n "$server_url" ]; then |
|
|
|
stage_4_args="${stage_4_args} -u ${server_url}" |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -n "${hosted_token}" ]; then |
|
|
|
stage_4_args="${stage_4_args} -o ${hosted_token}" |
|
|
|
if [ -n "${tenant_token}" ]; then |
|
|
|
stage_4_args="${stage_4_args} -t ${tenant_token}" |
|
|
|
fi |
|
|
|
|
|
|
|
eval set -- " ${stage_4_args}" |
|
|
@ -380,19 +405,19 @@ do_install_mender_to_mender_disk_image() { |
|
|
|
${tool_dir}/convert-stage-4.sh ${stage_4_args} |
|
|
|
|
|
|
|
# Update test configuration file |
|
|
|
update_test_config_file $device_type artifact-name $artifact |
|
|
|
update_test_config_file $device_type artifact-name $artifact_name |
|
|
|
} |
|
|
|
|
|
|
|
do_install_bootloader_to_mender_disk_image() { |
|
|
|
if [ -z "$menderimage" ] || [ -z "$device_type" ] || \ |
|
|
|
[ -z "$toolchain" ]; then |
|
|
|
if [ -z "$mender_disk_image" ] || [ -z "$device_type" ] || \ |
|
|
|
[ -z "$bootloader_toolchain" ]; then |
|
|
|
show_help |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
case "$device_type" in |
|
|
|
"beaglebone") |
|
|
|
stage_5_args="-i $menderimage -d $device_type -t ${toolchain} $keep" |
|
|
|
stage_5_args="-m $mender_disk_image -d $device_type -b ${bootloader_toolchain} $keep" |
|
|
|
eval set -- " ${stage_5_args}" |
|
|
|
export -f create_device_maps |
|
|
|
export -f detach_device_maps |
|
|
@ -403,11 +428,11 @@ do_install_bootloader_to_mender_disk_image() { |
|
|
|
mount-location "\/boot\/efi" |
|
|
|
;; |
|
|
|
"raspberrypi3") |
|
|
|
stage_5_args="-i $menderimage -d $device_type -t ${toolchain} $keep" |
|
|
|
stage_5_args="-m $mender_disk_image -d $device_type -b ${bootloader_toolchain} $keep" |
|
|
|
eval set -- " ${stage_5_args}" |
|
|
|
export -f create_device_maps |
|
|
|
export -f detach_device_maps |
|
|
|
export -f mount_sdimg |
|
|
|
export -f mount_mender_disk |
|
|
|
${tool_dir}/rpi3-convert-stage-5.sh ${stage_5_args} |
|
|
|
|
|
|
|
# Update test configuration file |
|
|
@ -417,8 +442,8 @@ do_install_bootloader_to_mender_disk_image() { |
|
|
|
} |
|
|
|
|
|
|
|
do_mender_disk_image_to_artifact() { |
|
|
|
if [ -z "${menderimage}" ]; then |
|
|
|
echo "Raw disk .sdimg image not set. Aborting." |
|
|
|
if [ -z "${mender_disk_image}" ]; then |
|
|
|
echo "Mender disk image not set. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
@ -427,17 +452,17 @@ do_mender_disk_image_to_artifact() { |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -z "${artifact}" ]; then |
|
|
|
if [ -z "${artifact_name}" ]; then |
|
|
|
echo "Artifact name not set. Aborting." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -z "${rootfs_type}" ]; then |
|
|
|
echo "Artifact name not set. rootfs_a will be used by default." |
|
|
|
rootfs_type="rootfs_a" |
|
|
|
if [ -z "${rootfs_partition_id}" ]; then |
|
|
|
echo "Rootfs partition id not set - rootfs_a will be used by default." |
|
|
|
rootfs_partition_id="rootfs_a" |
|
|
|
fi |
|
|
|
|
|
|
|
inarray=$(echo ${rootfs_types[@]} | grep -o $rootfs_type | wc -w) |
|
|
|
inarray=$(echo ${rootfs_partition_ids[@]} | grep -o $rootfs_partition_id | wc -w) |
|
|
|
|
|
|
|
[[ $inarray -eq 0 ]] && \ |
|
|
|
{ echo "Error: invalid rootfs type provided. Aborting."; exit 1; } |
|
|
@ -452,19 +477,19 @@ do_mender_disk_image_to_artifact() { |
|
|
|
local sdimg_device_type= |
|
|
|
local abort=0 |
|
|
|
|
|
|
|
get_sdimg_info $menderimage count sector_size rootfs_a_start rootfs_a_size \ |
|
|
|
rootfs_b_start rootfs_b_size |
|
|
|
get_mender_disk_info $mender_disk_image count sector_size rootfs_a_start \ |
|
|
|
rootfs_a_size rootfs_b_start rootfs_b_size |
|
|
|
ret=$? |
|
|
|
[[ $ret -ne 0 ]] && \ |
|
|
|
{ echo "Error: cannot validate input .sdimg image. Aborting."; exit 1; } |
|
|
|
{ echo "Error: cannot validate Mender disk image. Aborting."; exit 1; } |
|
|
|
|
|
|
|
create_device_maps $menderimage sdimgmappings |
|
|
|
mount_sdimg ${sdimgmappings[@]} |
|
|
|
create_device_maps $mender_disk_image mender_disk_mappings |
|
|
|
mount_mender_disk ${mender_disk_mappings[@]} |
|
|
|
|
|
|
|
if [[ $rootfs_type == "rootfs_a" ]]; then |
|
|
|
if [[ $rootfs_partition_id == "rootfs_a" ]]; then |
|
|
|
prootfs_size=$rootfs_a_size |
|
|
|
rootfs_path=$sdimg_primary_dir |
|
|
|
elif [[ $rootfs_type == "rootfs_b" ]]; then |
|
|
|
elif [[ $rootfs_partition_id == "rootfs_b" ]]; then |
|
|
|
prootfs_size=$rootfs_b_size |
|
|
|
rootfs_path=$sdimg_secondary_dir |
|
|
|
fi |
|
|
@ -473,7 +498,7 @@ do_mender_disk_image_to_artifact() { |
|
|
|
sdimg_device_type=$( cat $sdimg_data_dir/mender/device_type | sed 's/[^=].*=//' ) |
|
|
|
|
|
|
|
# Set 'artifact name' as passed in the command line. |
|
|
|
sudo sed -i '/^artifact/s/=.*$/='${artifact}'/' "$rootfs_path/etc/mender/artifact_info" |
|
|
|
sudo sed -i '/^artifact/s/=.*$/='${artifact_name}'/' "$rootfs_path/etc/mender/artifact_info" |
|
|
|
|
|
|
|
if [ "$sdimg_device_type" != "$device_type" ]; then |
|
|
|
echo "Error: .mender and .sdimg device type not matching. Aborting." |
|
|
@ -495,14 +520,14 @@ do_mender_disk_image_to_artifact() { |
|
|
|
|
|
|
|
fsck.ext4 -fp $rootfs_file |
|
|
|
|
|
|
|
mender_artifact=${output_dir}/${device_type}_${artifact}.mender |
|
|
|
mender_artifact=${output_dir}/${device_type}_${artifact_name}.mender |
|
|
|
echo "Writing Mender artifact to: ${mender_artifact}" |
|
|
|
|
|
|
|
#Create Mender artifact |
|
|
|
mender-artifact write rootfs-image \ |
|
|
|
--update ${rootfs_file} \ |
|
|
|
--output-path ${mender_artifact} \ |
|
|
|
--artifact-name ${artifact} \ |
|
|
|
--artifact-name ${artifact_name} \ |
|
|
|
--device-type ${device_type} |
|
|
|
|
|
|
|
ret=$? |
|
|
@ -514,7 +539,7 @@ do_mender_disk_image_to_artifact() { |
|
|
|
fi |
|
|
|
|
|
|
|
# Clean and detach. |
|
|
|
detach_device_maps ${sdimgmappings[@]} |
|
|
|
detach_device_maps ${mender_disk_mappings[@]} |
|
|
|
|
|
|
|
rm -rf $sdimg_base_dir |
|
|
|
} |
|
|
@ -535,52 +560,52 @@ source ${tool_dir}/mender-convert-functions.sh |
|
|
|
|
|
|
|
while (( "$#" )); do |
|
|
|
case "$1" in |
|
|
|
-r | --rootfs-type) |
|
|
|
rootfs_type=$2 |
|
|
|
-p | --rootfs-partition-id) |
|
|
|
rootfs_partition_id=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-i | --image) |
|
|
|
menderimage=$2 |
|
|
|
-m | --mender-disk-image) |
|
|
|
mender_disk_image=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-e | --embedded) |
|
|
|
embeddedimage=$(get_path $2) |
|
|
|
-r | --raw-disk-image) |
|
|
|
raw_disk_image=$(get_path $2) |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-s | --size-data) |
|
|
|
data_size=$2 |
|
|
|
-s | --data-part-size-mb) |
|
|
|
data_part_size_mb=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-d | --device-type) |
|
|
|
device_type=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-a | --artifact) |
|
|
|
artifact=$2 |
|
|
|
-a | --artifact-name) |
|
|
|
artifact_name=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-m | --mender) |
|
|
|
mender=$(get_path $2) |
|
|
|
-g | --mender-client) |
|
|
|
mender_client=$(get_path $2) |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-t | --toolchain) |
|
|
|
toolchain=$2 |
|
|
|
-b | --bootloader-toolchain) |
|
|
|
bootloader_toolchain=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-p | --demo-ip) |
|
|
|
demo_ip=$2 |
|
|
|
-i | --demo-host-ip) |
|
|
|
demo_host_ip=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-c | --certificate) |
|
|
|
certificate=$2 |
|
|
|
-c | --server-cert) |
|
|
|
server_cert=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-u | --production-url) |
|
|
|
production_url=$2 |
|
|
|
-u | --server-url) |
|
|
|
server_url=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-o | --hosted-token) |
|
|
|
hosted_token=$2 |
|
|
|
-t | --tenant-token) |
|
|
|
tenant_token=$2 |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
-k | --keep) |
|
|
@ -606,8 +631,8 @@ while (( "$#" )); do |
|
|
|
esac |
|
|
|
done |
|
|
|
|
|
|
|
[ -z "${data_size}" ] && \ |
|
|
|
{ echo "Default 'data' partition size set to 128MiB"; data_size=128; } |
|
|
|
[ -z "${data_part_size_mb}" ] && \ |
|
|
|
{ echo "Default 'data' partition size set to 128MB"; data_part_size_mb=128; } |
|
|
|
|
|
|
|
eval set -- "$PARAMS" |
|
|
|
|
|
|
|