https://gist.github.com/1370102 (this patch) There is no <<< in ash for doing "read a b c <<< $var" like in bash :( --- /lib/initcpio/hooks/encrypt 2011-11-03 15:40:08.000000000 -0300 +++ hooks/encrypt 2011-11-16 10:41:44.724256727 -0300 @@ -6,17 +6,19 @@ /sbin/modprobe -a -q dm-crypt >/dev/null 2>&1 if [ -e "/sys/class/misc/device-mapper" ]; then if [ ! -e "/dev/mapper/control" ]; then + local major minor + IFS=: read major minor < /sys/class/misc/device-mapper/dev mkdir /dev/mapper - mknod "/dev/mapper/control" c $(cat /sys/class/misc/device-mapper/dev | sed 's|:| |') + mknod /dev/mapper/control c ${major} ${minor} fi [ "${quiet}" = "y" ] && CSQUIET=">/dev/null" # Get keyfile if specified ckeyfile="/crypto_keyfile.bin" - if [ "x${cryptkey}" != "x" ]; then - ckdev="$(echo "${cryptkey}" | cut -d: -f1)" - ckarg1="$(echo "${cryptkey}" | cut -d: -f2)" - ckarg2="$(echo "${cryptkey}" | cut -d: -f3)" + if [ -n "${cryptkey}" ]; then + IFS=: read ckdev ckarg1 ckarg2 << EOF +${cryptkey} +EOF if poll_device "${ckdev}" ${rootdelay}; then case ${ckarg1} in *[!0-9]*) @@ -39,9 +41,9 @@ if [ -n "${cryptdevice}" ]; then DEPRECATED_CRYPT=0 - cryptdev="$(echo "${cryptdevice}" | cut -d: -f1)" - cryptname="$(echo "${cryptdevice}" | cut -d: -f2)" - cryptoptions="$(echo "${cryptdevice}" | cut -d: -f3)" + IFS=: read cryptdev cryptname cryptoptions << EOF +${cryptdevice} +EOF else DEPRECATED_CRYPT=1 cryptdev="${root}" @@ -107,16 +109,14 @@ return 1 fi exe="/sbin/cryptsetup create ${cryptname} ${cryptdev} ${cryptargs}" - tmp=$(echo "${crypto}" | cut -d: -f1) - [ -n "${tmp}" ] && exe="${exe} --hash \"${tmp}\"" - tmp=$(echo "${crypto}" | cut -d: -f2) - [ -n "${tmp}" ] && exe="${exe} --cipher \"${tmp}\"" - tmp=$(echo "${crypto}" | cut -d: -f3) - [ -n "${tmp}" ] && exe="${exe} --key-size \"${tmp}\"" - tmp=$(echo "${crypto}" | cut -d: -f4) - [ -n "${tmp}" ] && exe="${exe} --offset \"${tmp}\"" - tmp=$(echo "${crypto}" | cut -d: -f5) - [ -n "${tmp}" ] && exe="${exe} --skip \"${tmp}\"" + IFS=: read c_hash c_cipher c_keysize c_offset c_skip << EOF +${crypto} +EOF + [ -n "${c_hash}" ] && exe="${exe} --hash '${c_hash}'" + [ -n "${c_cipher}" ] && exe="${exe} --cipher '${c_cipher}'" + [ -n "${c_keysize}" ] && exe="${exe} --key-size '${c_keysize}'" + [ -n "${c_offset}" ] && exe="${exe} --offset '${c_offset}'" + [ -n "${c_skip}" ] && exe="${exe} --skip '${c_skip}'" if [ -f ${ckeyfile} ]; then exe="${exe} --key-file ${ckeyfile}" else -- Gerardo Exequiel Pozzi \cos^2\alpha + \sin^2\alpha = 1