Browse Source

Merge pull request #18 from apodogrocki/MEN-2191

Convert from raw disk image and generate Artifact
1.0.x
Adam Podogrocki 6 years ago
committed by GitHub
parent
commit
f0d5b8011c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 113
      mender-convert.sh

113
mender-convert.sh

@ -34,7 +34,7 @@ Expert commands:
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 |
-c|--server-cert | -u|--server-url | -t|--tenant-token |
-g|--mender-client -b|--bootloader-toolchain | -a|--artifact-name |
-k|--keep]
@ -45,8 +45,8 @@ Options: [-r|--raw-disk-image | -m|--mender-disk-image | -s|--data-part-size-mb
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
rootfs-partition-id - selects root filesystem (primary|secondary)
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
@ -75,7 +75,10 @@ Examples:
--demo-host-ip 192.168.10.2
--keep
Output: ready to use Mender image with Mender client and bootloader installed
Output:
- Mender image: ready to use image with client and bootloader installed
- Mender artifact: update file based on the already built Mender image
- Mender root filesystem: EXT4 image used to produce the Mender artifact
To create Mender artifact file from Mender image:
@ -83,7 +86,7 @@ Examples:
--mender-disk-image <mender_image_path>
--device-type <beaglebone | raspberrypi3>
--artifact-name release-1_1.5.0
--rootfs-partition-id rootfs_a
--rootfs-partition-id <primary | secondary>
Note: artifact name format is: release-<release_no>_<mender_version>
@ -167,7 +170,7 @@ demo_host_ip=
# Mender hosted token.
tenant_token=
declare -a rootfs_partition_ids=("rootfs_a" "rootfs_b")
declare -a rootfs_partition_ids=("primary" "secondary")
declare -a mender_disk_mappings
declare -a raw_disk_mappings
#Supported devices
@ -493,8 +496,8 @@ do_mender_disk_image_to_artifact() {
fi
if [ -z "${rootfs_partition_id}" ]; then
echo "Rootfs partition id not set - rootfs_a will be used by default."
rootfs_partition_id="rootfs_a"
echo "Rootfs partition id not set - 'primary' will be used by default."
rootfs_partition_id="primary"
fi
local supported=$(echo ${supported_devices[@]} | grep -o $device_type | wc -w)
@ -526,20 +529,9 @@ do_mender_disk_image_to_artifact() {
create_device_maps $mender_disk_image mender_disk_mappings
mount_mender_disk ${mender_disk_mappings[@]}
if [[ $rootfs_partition_id == "rootfs_a" ]]; then
prootfs_size=$rootfs_a_size
rootfs_path=$sdimg_primary_dir
elif [[ $rootfs_partition_id == "rootfs_b" ]]; then
prootfs_size=$rootfs_b_size
rootfs_path=$sdimg_secondary_dir
fi
# Find .sdimg file's dedicated device type.
mender_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_name}'/' "$rootfs_path/etc/mender/artifact_info"
if [ "$mender_device_type" != "$device_type" ]; then
echo "Error: device types of Mender artifact & Mender not matching. Aborting."
ret=1
@ -551,31 +543,61 @@ do_mender_disk_image_to_artifact() {
fi
if [ $ret -eq 0 ]; then
local rootfs_file=${output_dir}/rootfs.ext4
echo "Creating a ext4 file-system image from modified root file-system"
dd if=/dev/zero of=$rootfs_file seek=${prootfs_size} count=0 bs=512 status=none
sudo mkfs.ext4 -FF $rootfs_file -d $rootfs_path
fsck.ext4 -fp $rootfs_file
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_name} \
--device-type ${device_type}
ret=$?
[[ $ret -eq 0 ]] && \
{ echo "Writing Mender artifact to ${mender_artifact} succeeded."; } || \
{ echo "Writing Mender artifact to ${mender_artifact} failed."; }
rm $rootfs_file
if [[ $rootfs_partition_id == "primary" ]]; then
prootfs_start=$rootfs_a_start
prootfs_size=$rootfs_a_size
rootfs_path=$sdimg_primary_dir
elif [[ $rootfs_partition_id == "secondary" ]]; then
prootfs_start=$rootfs_b_start
prootfs_size=$rootfs_b_size
rootfs_path=$sdimg_secondary_dir
fi
mender_disk_basename=$(basename -- "$mender_disk_image")
mender_disk_filename="${mender_disk_basename%.*}"
mender_rootfs_basename=${mender_disk_filename}.ext4
mender_rootfs_image=${output_dir}/$mender_rootfs_basename
# Extract root filesystem ext4 image to use it to generate Mender artifact.
# Ext4 disk image will be also verified in acceptance tests.
extract_file_from_image $mender_disk_image $prootfs_start \
$prootfs_size $mender_rootfs_basename
fsck.ext4 -fp $mender_rootfs_image
# Find first available loopback device.
loopdevice=($(sudo losetup -f || ret=$?))
if [ $ret -ne 0 ]; then
echo "Error: cannot find an unused loop device. Aborting."
else
sudo losetup $loopdevice ${mender_rootfs_image}
rootfs_mountpoint=${output_dir}/mnt/${rootfs_partition_id}
mkdir -p ${rootfs_mountpoint}
sudo mount $loopdevice ${rootfs_mountpoint}
# Set 'artifact name' as passed in the command line.
sudo sed -i '/^artifact/s/=.*$/='${artifact_name}'/' "${rootfs_mountpoint}/etc/mender/artifact_info"
mender_artifact=${output_dir}/${mender_disk_filename}_${artifact_name}.mender
echo "Writing Mender artifact to: ${mender_artifact}"
#Create Mender artifact
mender-artifact write rootfs-image \
--update ${mender_rootfs_image} \
--output-path ${mender_artifact} \
--artifact-name ${artifact_name} \
--device-type ${device_type}
ret=$?
[[ $ret -eq 0 ]] && \
{ echo "Writing Mender artifact to ${mender_artifact} succeeded."; } || \
{ echo "Writing Mender artifact to ${mender_artifact} failed."; }
sudo umount -l ${rootfs_mountpoint}
sudo losetup -d $loopdevice
rm -rf ${output_dir}/mnt
fi
fi
# Clean and detach.
@ -602,6 +624,9 @@ do_from_raw_disk_image() {
do_install_bootloader_to_mender_disk_image || rc=$?
[[ $rc -ne 0 ]] && { return 1; }
do_mender_disk_image_to_artifact || rc=$?
[[ $rc -ne 0 ]] && { return 1; }
return 0
}

Loading…
Cancel
Save