1 | #!/bin/sh
|
---|
2 | # Wrapper allowing to write image to card writer
|
---|
3 |
|
---|
4 | . $(dirname $0)/common.inc.sh
|
---|
5 |
|
---|
6 | BASEDIR=`dirname $0`
|
---|
7 | if [ -n "$1" ]; then
|
---|
8 | IMG=$1
|
---|
9 | else
|
---|
10 | CFG="${BASEDIR}/../cfg/nanobsd.wleiden"
|
---|
11 |
|
---|
12 | # Find object directory
|
---|
13 | eval `grep '^NANO_NAME=' ${CFG}`
|
---|
14 | OBJDIR="/usr/obj/nanobsd.${NANO_NAME}"
|
---|
15 | IMG=${OBJDIR}/_.disk.full
|
---|
16 | fi
|
---|
17 |
|
---|
18 | if [ ! -r "${IMG}" ]; then
|
---|
19 | p_err Source ${IMG} does not exists
|
---|
20 | fi
|
---|
21 | IMGSIZE=`ls -l ${IMG} | awk '{print $5 / 1024 / 1024}'`
|
---|
22 |
|
---|
23 | # Make sure we are root from this point on
|
---|
24 | f_check_root
|
---|
25 |
|
---|
26 | # Find which daX device holds a active flash drive
|
---|
27 | CARD_FOUND=0
|
---|
28 | DA_LIST=`cd /dev/; echo da[0-9]`
|
---|
29 | for DA in ${DA_LIST}; do
|
---|
30 | diskinfo ${DA} 1>/dev/null 2>/dev/null
|
---|
31 | if [ $? -eq 0 ]; then
|
---|
32 | CARD_FOUND=1
|
---|
33 | break
|
---|
34 | fi
|
---|
35 | done
|
---|
36 |
|
---|
37 | if [ ${CARD_FOUND} -eq 0 ]; then
|
---|
38 | p_err Sorry no flash card found at active devices, list searched:
|
---|
39 | p_err $(p_list ${DA_LIST})
|
---|
40 | exit 1
|
---|
41 | fi
|
---|
42 |
|
---|
43 | # Detect cardreader type/version
|
---|
44 | CARDREADER=`dmesg | grep ${DA}: | awk -F'[<>]' '/Removable Direct Access/ {print $2}' | tail -1`
|
---|
45 |
|
---|
46 | #XXX: Issue last chance warning, prompting the user to bail out
|
---|
47 | p_warn Going to write ${IMG} "(${IMGSIZE}MB)" to ${DA} "(${CARDREADER})"
|
---|
48 | p_warn 5 seconds to quit using CTRL+C
|
---|
49 | p_sleep 5
|
---|
50 |
|
---|
51 | TMPFILE=`mktemp -t dd`
|
---|
52 | p_info Writing image... "(`date`)"
|
---|
53 | # Sending INFO to dd seems to confuse it sometimes so
|
---|
54 | # make it EXPERIMENTAL for now
|
---|
55 |
|
---|
56 | if [ -n "$ENHANCED_DD" ]; then
|
---|
57 | dd if=${IMG} of=/dev/${DA} bs=64k 2>${TMPFILE} &
|
---|
58 | DD_PID=$!
|
---|
59 | sleep 0.5
|
---|
60 | while `ps ${DD_PID} >/dev/null`; do
|
---|
61 | kill -INFO ${DD_PID}
|
---|
62 | sleep 0.1 #Micro delay allow TMPFILE to populate
|
---|
63 | SIZE_DONE=`awk '/transferred/ {print $1}' ${TMPFILE}`
|
---|
64 | SIZE_DONE=`echo "${SIZE_DONE} / 1024 / 1024" | bc -l`
|
---|
65 | PERCENT_DONE=`echo "${SIZE_DONE} / ${IMGSIZE} * 100" | bc -l`
|
---|
66 | p_info `date "+%H:%m:%S"` `printf "%.02f MB (%.01f%%)" ${SIZE_DONE} ${PERCENT_DONE}`
|
---|
67 | p_sleep 10
|
---|
68 | : > ${TMPFILE}
|
---|
69 | done
|
---|
70 | else
|
---|
71 | dd if=${IMG} of=/dev/${DA} bs=64k
|
---|
72 | fi
|
---|
73 | rm ${TMPFILE}
|
---|
74 | p_info Image writing succesfull at /dev/$DA "(`date`)"
|
---|