#!/bin/sh # Wrapper allowing to write image to card writer . $(dirname $0)/common.inc.sh BASEDIR=`dirname $0` if [ -n "$1" ]; then IMG=$1 else CFG="${BASEDIR}/../cfg/nanobsd.wleiden" # Find object directory eval `grep '^NANO_NAME=' ${CFG}` OBJDIR="/usr/obj/nanobsd.${NANO_NAME}" IMG=${OBJDIR}/_.disk.full fi if [ ! -r "${IMG}" ]; then p_err Source ${IMG} does not exists fi IMGSIZE=`ls -l ${IMG} | awk '{print $5 / 1024 / 1024}'` # Make sure we are root from this point on f_check_root # Find which daX device holds a active flash drive CARD_FOUND=0 DA_LIST=`cd /dev/; echo da[0-9]` for DA in ${DA_LIST}; do diskinfo ${DA} 1>/dev/null 2>/dev/null if [ $? -eq 0 ]; then CARD_FOUND=1 break fi done if [ ${CARD_FOUND} -eq 0 ]; then p_err Sorry no flash card found at active devices, list searched: p_err $(p_list ${DA_LIST}) exit 1 fi # Detect cardreader type/version CARDREADER=`dmesg | grep ${DA}: | awk -F'[<>]' '/Removable Direct Access/ {print $2}' | tail -1` #XXX: Issue last chance warning, prompting the user to bail out p_warn Going to write ${IMG} "(${IMGSIZE}MB)" to ${DA} "(${CARDREADER})" p_warn 5 seconds to quit using CTRL+C p_sleep 5 TMPFILE=`mktemp -t dd` p_info Writing image... "(`date`)" # Sending INFO to dd seems to confuse it sometimes so # make it EXPERIMENTAL for now if [ -n "$ENHANCED_DD" ]; then dd if=${IMG} of=/dev/${DA} bs=64k 2>${TMPFILE} & DD_PID=$! sleep 0.5 while `ps ${DD_PID} >/dev/null`; do kill -INFO ${DD_PID} sleep 0.1 #Micro delay allow TMPFILE to populate SIZE_DONE=`awk '/transferred/ {print $1}' ${TMPFILE}` SIZE_DONE=`echo "${SIZE_DONE} / 1024 / 1024" | bc -l` PERCENT_DONE=`echo "${SIZE_DONE} / ${IMGSIZE} * 100" | bc -l` p_info `date "+%H:%m:%S"` `printf "%.02f MB (%.01f%%)" ${SIZE_DONE} ${PERCENT_DONE}` p_sleep 10 : > ${TMPFILE} done else dd if=${IMG} of=/dev/${DA} bs=64k fi rm ${TMPFILE} p_info Image writing succesfull at /dev/$DA "(`date`)"