mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-04-23 14:57:17 +00:00
181 lines
4.3 KiB
Bash
Executable File
181 lines
4.3 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
if [ -z "${IMG_DIR}" ] || [ -z "${BOARD}" ]; then
|
|
echo "this script must be invoked from board specific mkimage.sh"
|
|
exit 1
|
|
fi
|
|
|
|
test "root" != "${USER}" && exec sudo -E $0 "$@"
|
|
|
|
function msg() {
|
|
echo " * $1"
|
|
}
|
|
|
|
BOOT_START=${BOOT_START:-1} # MB
|
|
|
|
BOOT_SRC=${IMG_DIR}/boot
|
|
BOOT=${IMG_DIR}/.boot
|
|
BOOT_IMG=${IMG_DIR}/boot.img
|
|
BOOT_SIZE="30" # MB - reserved up to 100 MB
|
|
|
|
ROOT_START="100" # MB
|
|
ROOT_SRC=${IMG_DIR}/rootfs.tar
|
|
ROOT=${IMG_DIR}/.root
|
|
ROOT_IMG=${IMG_DIR}/root.img
|
|
ROOT_SIZE="200" # MB
|
|
|
|
GUARD_SIZE="10" # MB
|
|
DISK_SIZE=$((ROOT_START + ROOT_SIZE + GUARD_SIZE))
|
|
|
|
COMMON_DIR=$(cd ${IMG_DIR}/../../../board/common; pwd)
|
|
OS_NAME=$(source ${COMMON_DIR}/overlay/etc/version && echo ${OS_SHORT_NAME})
|
|
|
|
# boot filesystem
|
|
msg "creating boot loop device"
|
|
dd if=/dev/zero of=${BOOT_IMG} bs=1M count=${BOOT_SIZE}
|
|
loop_dev=$(losetup -f --show ${BOOT_IMG})
|
|
|
|
msg "creating boot filesystem"
|
|
mkfs.vfat -F16 ${loop_dev}
|
|
|
|
msg "mounting boot loop device"
|
|
mkdir -p ${BOOT}
|
|
mount -o loop ${loop_dev} ${BOOT}
|
|
|
|
msg "copying boot filesystem contents"
|
|
cp -r ${BOOT_SRC}/* ${BOOT}
|
|
sync
|
|
|
|
msg "unmounting boot filesystem"
|
|
umount ${BOOT}
|
|
|
|
msg "destroying boot loop device (${loop_dev})"
|
|
losetup -d ${loop_dev}
|
|
sync
|
|
|
|
# root filesystem
|
|
msg "creating root loop device"
|
|
dd if=/dev/zero of=${ROOT_IMG} bs=1M count=${ROOT_SIZE}
|
|
loop_dev=$(losetup -f --show ${ROOT_IMG})
|
|
|
|
msg "creating root filesystem"
|
|
mkfs.ext4 ${loop_dev}
|
|
tune2fs -O^has_journal ${loop_dev}
|
|
|
|
msg "mounting root loop device"
|
|
mkdir -p ${ROOT}
|
|
mount -o loop ${loop_dev} ${ROOT}
|
|
|
|
msg "copying root filesystem contents"
|
|
tar -xpsf ${ROOT_SRC} -C ${ROOT}
|
|
|
|
# set internal OS name, prefix and version according to env variables
|
|
if [ -f ${ROOT}/etc/version ]; then
|
|
if [ -n "${THINGOS_NAME}" ]; then
|
|
msg "setting OS name to ${THINGOS_NAME}"
|
|
sed -ri "s/OS_NAME=\".*\"/OS_NAME=\"${THINGOS_NAME}\"/" ${ROOT}/etc/version
|
|
fi
|
|
if [ -n "${THINGOS_SHORT_NAME}" ]; then
|
|
msg "setting OS short name to ${THINGOS_SHORT_NAME}"
|
|
sed -ri "s/OS_SHORT_NAME=\".*\"/OS_SHORT_NAME=\"${THINGOS_SHORT_NAME}\"/" ${ROOT}/etc/version
|
|
fi
|
|
if [ -n "${THINGOS_PREFIX}" ]; then
|
|
msg "setting OS prefix to ${THINGOS_PREFIX}"
|
|
sed -ri "s/OS_PREFIX=\".*\"/OS_PREFIX=\"${THINGOS_PREFIX}\"/" ${ROOT}/etc/version
|
|
fi
|
|
if [ -n "${THINGOS_VERSION}" ]; then
|
|
msg "setting OS version to ${THINGOS_VERSION}"
|
|
sed -ri "s/OS_VERSION=\".*\"/OS_VERSION=\"${THINGOS_VERSION}\"/" ${ROOT}/etc/version
|
|
fi
|
|
fi
|
|
|
|
msg "unmounting root filesystem"
|
|
umount ${ROOT}
|
|
|
|
msg "destroying root loop device (${loop_dev})"
|
|
losetup -d ${loop_dev}
|
|
sync
|
|
|
|
DISK_IMG=${IMG_DIR}/disk.img
|
|
BOOT_IMG=${IMG_DIR}/boot.img
|
|
ROOT_IMG=${IMG_DIR}/root.img
|
|
|
|
if ! [ -r ${BOOT_IMG} ]; then
|
|
echo "boot image missing"
|
|
exit -1
|
|
fi
|
|
|
|
if ! [ -r ${ROOT_IMG} ]; then
|
|
echo "root image missing"
|
|
exit -1
|
|
fi
|
|
|
|
# disk image
|
|
msg "creating disk loop device"
|
|
dd if=/dev/zero of=${DISK_IMG} bs=1M count=${DISK_SIZE}
|
|
if [ -n "${UBOOT_BIN}" ] && [ -n "${UBOOT_SEEK}" ]; then
|
|
msg "copying u-boot image"
|
|
dd conv=notrunc if=${UBOOT_BIN} of=${DISK_IMG} bs=512 seek=${UBOOT_SEEK}
|
|
fi
|
|
loop_dev=$(losetup -f --show ${DISK_IMG})
|
|
|
|
msg "partitioning disk"
|
|
set +e
|
|
fdisk -u=sectors ${loop_dev} <<END
|
|
o
|
|
n
|
|
p
|
|
1
|
|
$((BOOT_START * 2048))
|
|
+${BOOT_SIZE}M
|
|
n
|
|
p
|
|
2
|
|
$((ROOT_START * 2048))
|
|
+${ROOT_SIZE}M
|
|
|
|
t
|
|
1
|
|
e
|
|
a
|
|
1
|
|
w
|
|
END
|
|
set -e
|
|
sync
|
|
|
|
msg "reading partition offsets"
|
|
boot_offs=$(fdisk -u=sectors -l ${loop_dev} | grep -E 'loop([[:digit:]])+p1' | tr -d '*' | tr -s ' ' | cut -d ' ' -f 2)
|
|
root_offs=$(fdisk -u=sectors -l ${loop_dev} | grep -E 'loop([[:digit:]])+p2' | tr -d '*' | tr -s ' ' | cut -d ' ' -f 2)
|
|
|
|
msg "destroying disk loop device (${loop_dev})"
|
|
losetup -d ${loop_dev}
|
|
|
|
msg "creating boot loop device"
|
|
loop_dev=$(losetup -f --show -o $((${boot_offs} * 512)) ${DISK_IMG})
|
|
|
|
msg "copying boot image"
|
|
dd if=${BOOT_IMG} of=${loop_dev}
|
|
sync
|
|
|
|
msg "destroying boot loop device (${loop_dev})"
|
|
losetup -d ${loop_dev}
|
|
|
|
msg "creating root loop device"
|
|
loop_dev=$(losetup -f --show -o $((${root_offs} * 512)) ${DISK_IMG})
|
|
sync
|
|
|
|
msg "copying root image"
|
|
dd if=${ROOT_IMG} of=${loop_dev}
|
|
sync
|
|
|
|
msg "destroying root loop device (${loop_dev})"
|
|
losetup -d ${loop_dev}
|
|
sync
|
|
|
|
mv ${DISK_IMG} $(dirname ${DISK_IMG})/${OS_NAME}-${BOARD}.img
|
|
DISK_IMG=$(dirname ${DISK_IMG})/${OS_NAME}-${BOARD}.img
|
|
|
|
msg "$(realpath "${DISK_IMG}") is ready"
|
|
|