I will try to use the functions and helpers from live-helper. I did a
quick test and it seems that this works:
# dd if=/dev/zero of=final.img bs=256M count=1
# dd if=binary.img of=final.img conv=notrunc
# losetup /dev/loop0 final.img
# fdisk /dev/loop0 <-- create the new partition
# losetup -d /dev/loop0
# losetup.sh /dev/loop0 final.img 1
# mkfs.ext3 -L live-rw -F /dev/loop0
# losetup -d /dev/loop0
I will probably look at your script for the "create the new partition"
step. Maybe live-helper has some functions for this too.
It was a bit easier to achieve than expected :) The attached script
(lh_final) creates a ext3 partition into the file persistent.img. It
then copies binary.img (the Debian live image) into final.img and
appends persistent.img to final.img. It finally uses parted to
"register" (create) the second partition.
I only tested with qemu so far but it seems to work good :) The ext3
partition is mounted on /live/cow and I now have a persistent system
that I can easily copy on a CF card using dd.
Regards,
Cyril
#!/bin/bash
FIN_IMG="final.img"
BIN_IMG="binary.img"
PERS_IMG="persistent.img"
PERS_SIZE="128M"
set -e
if [ ! -f ${BIN_IMG} ]; then
echo "Live image '${BIN_IMG}' does not exist."
exit 1
fi
if [ -f ${FIN_IMG} ]; then
echo "Final image '${FIN_IMG}' already exist. Please remove first."
exit 1
fi
if [ ! -f ${PERS_IMG} ]; then
echo -n "Creating persistent partiton (ext3)"
dd if=/dev/zero of=${PERS_IMG} bs=${PERS_SIZE} count=1 > /dev/null 2>&1
|| echo " [failed]"
mkfs.ext3 -L live-rw -F ${PERS_IMG} > /dev/null 2>&1 || echo " [failed]"
echo " [done]"
fi
if [ ! -f ${PERS_IMG} ]; then
echo "Persistent partition '${PERS_IMG}' not found."
exit 1
fi
echo -n "Copying first partition"
LAST=`dd if=${BIN_IMG} of=${FIN_IMG} 2>&1 | head -n 1 | awk '{ print $1 }'`
echo " [done]"
LAST=${LAST%+0}
echo "Second partition offset is ${LAST}"
echo -n "Copying second (persistent) partition"
dd if=${PERS_IMG} of=${FIN_IMG} seek=${LAST} > /dev/null 2>&1 || echo "
[failed]"
echo " [done]"
echo -n "Creating second partition"
parted ${FIN_IMG} mkpart primary ${LAST}s 100% > /dev/null 2>&1 || echo "
[failed]"
echo " [done]"
echo "Final image '${FIN_IMG}' created"