Permalink
Switch branches/tags
Version_1 Release_3.2.6 Release_3.2.5 Release_3.2.4 Release_3.2.3 Release_3.2.2 Release_3.2.1 Release_3.2.0 Release_3.1.8 Release_3.1.7 Release_3.1.6 Release_3.1.5 Release_3.1.4 Release_3.1.3 Release_3.1.2 Release_3.1.1 Release_3.1.0 Release_3.1.0-rc1 Release_3.0.11 Release_3.0.10 Release_3.0.9 Release_3.0.8 Release_3.0.7 Release_3.0.6 Release_3.0.5 Release_3.0.4 Release_3.0.3 Release_3.0.2 Release_3.0.1 Release_3.0.0 Release_3.0.0-rc3 Release_3.0.0-rc1 Release_2.6.10 Release_2.6.9 Release_2.6.8 Release_2.6.7 Release_2.6.6 Release_2.6.5 Release_2.6.4 Release_2.6.3 Release_2.6.2 Release_2.6.1 Release_2.6.0 Release_2.6.0-rc1 Release_2.5.5 Release_2.5.4 Release_2.5.3 Release_2.5.2 Release_2.5.1 Release_2.5.0 Release_2.5.0-rc1 Release_2.4.2 Release_2.4.1 Release_2.4.0 Release_2.4.0-rc1 Release_2.3.4 Release_2.3.3 Release_2.3.2 Release_2.3.1 Release_2.3.0 Release_2.3.0-rc3 Release_2.3.0-rc1 Release_2.2.3 Release_2.2.2 Release_2.2.1 Release_2.2.1-rc2 Release_2.2.1-rc1 Release_2.2.0 Release_2.2.0-rc1 Release_2.1.11 Release_2.1.10 Release_2.1.9 Release_2.1.9-rc3 Release_2.1.9-rc1 Release_2.1.8 Release_2.1.7 Release_2.1.7-rc17 Release_2.1.7-rc13 Release_2.1.7-rc12 Release_2.1.7-rc11 Release_2.1.7-rc5 Release_2.1.7-rc1 Release_2.1.6 Release_2.1.6-rc1 Release_2.1.5 Release_2.1.5-rc2 Release_2.1.5-rc1 Release_2.1.4 Release_2.1.3 Release_2.1.2 Release_2.1.2-rc1 Release_2.1.1 Release_2.1.0 Release_2.0.3-rc1 Release_2.0.2 Release_2.0.2-rc1 Release_2.0.1 Release_2.0.1-rc1 Release_2.0.0 Release_2.0.0-rc1
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 77 lines (63 sloc) 1.88 KB
#!/bin/sh
# Copyright (C) 2016 Endless Mobile, Inc.
# Licensed under the GPLv2
#
# Support booting from an image file hosted on a filesystem.
# We identify which disk blocks correspond to the image file, and create
# a dm-linear block device mapping them.
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
host_device=$(cat /var/tmp/endless-image-host)
image_path=$(getarg endless.image.path)
blockdev --setro ${host_device}
if getargbool 0 endless.live_boot; then
dm_roflag=--readonly
kpartx_roflag=-r
fi
fstype=$(lsblk --noheadings -o FSTYPE "${host_device}")
if [ $? != 0 ]; then
echo "image-boot: failed to detect filesystem type"
exit 1
fi
# Identify the EOS image extents on the host device, and create a dm-linear
# block device that maps exactly to that.
case "${fstype}" in
exfat)
extents=$(dumpexfat -f "${image_path}" "${host_device}")
;;
ntfs)
extents=$(ntfsextents "${host_device}" "${image_path}")
;;
*)
echo "image-boot: unsupported filesystem ${fstype}"
exit 1
esac
if [ $? != 0 ]; then
echo "image-boot: failed to lookup image on device"
exit 1
fi
offset=0
echo "$extents" | while read extent_offset extent_size; do
[ -z "${extent_offset}" -o -z "${extent_size}" ] && continue
# Convert bytes to sectors, rounding up
if [ $(( extent_size % 512 )) != 0 ]; then
echo "image-boot: extent size $extent_size not sector-aligned" >&2
exit 1
fi
extent_size=$(( extent_size / 512 ))
extent_offset=$(( extent_offset / 512 ))
echo "${offset} ${extent_size} linear ${host_device} $extent_offset"
offset=$((offset + extent_size))
done > /tmp/dmtable
if [ $? != 0 ]; then
exit 1
fi
dmsetup create endless-image $dm_roflag < /tmp/dmtable
if [ $? != 0 ]; then
echo "image-boot: failed to set up linear mapping"
exit 1
fi
if ! kpartx $kpartx_roflag -a -v /dev/mapper/endless-image; then
echo "image-boot: failed to probe partitions"
exit 1
fi
exit 0