mkobb.sh revision 30c1102fecda5e9ef071c58c0e54b721961ae4e3
130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root#!/bin/bash 230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Copyright (C) 2010 The Android Open Source Project 430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Licensed under the Apache License, Version 2.0 (the "License"); 630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# you may not use this file except in compliance with the License. 730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# You may obtain a copy of the License at 830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# http://www.apache.org/licenses/LICENSE-2.0 1030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 1130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Unless required by applicable law or agreed to in writing, software 1230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# distributed under the License is distributed on an "AS IS" BASIS, 1330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# See the License for the specific language governing permissions and 1530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# limitations under the License. 1630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 1730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 1830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# mkobb.sh - Creates OBB files on Linux machines 1930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 2030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Directory where we should temporarily mount the OBB loopback to copy files 2130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootMOUNTDIR=/tmp 2230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 2330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Presets. Changing these will probably break your OBB on the device 2430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootCRYPTO=blowfish 2530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootFS=vfat 2630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootMKFS=mkfs.vfat 2730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootLOSETUP=losetup 2830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootBLOCK_SIZE=512 2930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny RootSLOP=512 # Amount of filesystem slop in ${BLOCK_SIZE} blocks 3030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 3130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfind_binaries() { 3230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root MKFSBIN=`which ${MKFS}` 3330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root LOSETUPBIN=`which ${LOSETUP}` 3430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root MOUNTBIN=`which mount` 3530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root UMOUNTBIN=`which umount` 3630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root DDBIN=`which dd` 3730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root RSYNCBIN=`which rsync` 3830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 3930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 4030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootcheck_prereqs() { 4130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "`uname -s`x" != "Linuxx" ]; then \ 4230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: This script only works on Linux!" 4330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 4430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 4530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 4630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if ! egrep -q "^cryptoloop " /proc/modules; then \ 4730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Could not find cryptoloop in the kernel." 4830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "Perhaps you need to: modprobe cryptoloop" 4930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 5030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 5130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 5230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if ! egrep -q "name\s*:\s*${CRYPTO}$" /proc/crypto; then \ 5330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Could not find crypto \`${CRYPTO}' in the kernel." 5430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "Perhaps you need to: modprobe ${CRYPTO}" 5530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 5630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 5730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 5830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if ! egrep -q "^\s*${FS}$" /proc/filesystems; then \ 5930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Could not find filesystem \`${FS}' in the kernel." 6030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "Perhaps you need to: modprobe ${FS}" 6130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 6230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 6330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 6430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "${MKFSBIN}x" = "x" ]; then \ 6530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Could not find ${MKFS} in your path!" 6630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 6730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root elif [ ! -x "${MKFSBIN}" ]; then \ 6830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: ${MKFSBIN} is not executable!" 6930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 7030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 7130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 7230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "${LOSETUPBIN}x" = "x" ]; then \ 7330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Could not find ${LOSETUP} in your path!" 7430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 7530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root elif [ ! -x "${LOSETUPBIN}" ]; then \ 7630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: ${LOSETUPBIN} is not executable!" 7730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 7830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 7930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 8030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 8130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootcleanup() { 8230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "${loopdev}x" != "x" ]; then \ 8330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root ${LOSETUPBIN} -d ${loopdev} 8430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 8530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 8630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 8730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Roothidden_prompt() { 8830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root unset output 8930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root prompt="$1" 9030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root outvar="$2" 9130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root while read -s -n 1 -p "$prompt" c; do \ 9230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "x$c" = "x" ]; then \ 9330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root break 9430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 9530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root prompt='*' 9630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root output="${output}${c}" 9730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root done 9830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo 9930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root eval $outvar="$output" 10030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root unset output 10130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 10230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 10330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootread_key() { 10430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root hidden_prompt " Encryption key: " key 10530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 10630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "${key}x" = "x" ]; then \ 10730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: An empty key is not allowed!" 10830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 10930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 11030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 11130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root hidden_prompt "Encryption key (again): " key2 11230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 11330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "${key}x" != "${key2}x" ]; then \ 11430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Encryption keys do not match!" 11530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 11630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 11730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 11830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 11930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootonexit() { 12030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "x${temp_mount}" != "x" ]; then \ 12130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root ${UMOUNTBIN} ${temp_mount} 12230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root rmdir ${temp_mount} 12330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 12430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "x${loop_dev}" != "x" ]; then \ 12530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root ${LOSETUPBIN} -d ${loop_dev} 12630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 12730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "x${tempfile}" != "x" -a -f "${tempfile}" ]; then \ 12830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root rm -f ${tempfile} 12930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 13030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root if [ "x${keyfile}" != "x" -a -f "${keyfile}" ]; then \ 13130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root rm -f ${keyfile} 13230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root fi 13330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "Fatal error." 13430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 13530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 13630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 13730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootusage() { 13830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "mkobb.sh -- Create OBB files for use on Android" 13930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "" 14030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -c Use an encrypted OBB; must specify key" 14130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -d <directory> Use <directory> as input for OBB files" 14230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -k <key> Use <key> to encrypt OBB file" 14330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -K Prompt for key to encrypt OBB file" 14430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -o <filename> Write OBB file out to <filename>" 14530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -v Verbose mode" 14630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo " -h Help; this usage screen" 14730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root} 14830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 14930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfind_binaries 15030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootcheck_prereqs 15130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 15230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootuse_crypto=0 15330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 15430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootargs=`getopt -o cd:hk:Ko:v -- "$@"` 15530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rooteval set -- "$args" 15630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 15730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootwhile true; do \ 15830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root case "$1" in 15930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -c) use_crypto=1; shift;; 16030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -d) directory=$2; shift 2;; 16130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -h) usage; exit 1;; 16230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -k) key=$2; shift 2;; 16330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -K) prompt_key=1; shift;; 16430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -v) verbose=1; shift;; 16530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root -o) filename=$2; shift 2;; 16630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root --) shift; break;; 16730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root *) echo "ERROR: Invalid argument in option parsing! Cannot recover. Ever."; exit 1;; 16830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root esac 16930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootdone 17030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 17130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ "${directory}x" = "x" -o ! -d "${directory}" ]; then \ 17230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Must specify valid input directory" 17330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "" 17430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root usage 17530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1; 17630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 17730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 17830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ "${filename}x" = "x" ]; then \ 17930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Must specify filename" 18030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "" 18130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root usage 18230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1; 18330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 18430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 18530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ ${use_crypto} -eq 1 -a "${key}x" = "x" -a 0${prompt_key} -eq 0 ]; then \ 18630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Crypto desired, but no key supplied or requested to prompt for." 18730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 18830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 18930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 19030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ 0${prompt_key} -eq 1 ]; then \ 19130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root read_key 19230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 19330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 19430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootoutdir=`dirname ${filename}` 19530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ ! -d "${outdir}" ]; then \ 19630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Output directory does not exist: ${outdir}" 19730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 19830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 19930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 20030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Make sure we clean up any stuff we create from here on during error conditions 20130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Roottrap onexit ERR 20230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 20330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Roottempfile=$(tempfile -d ${outdir}) || ( echo "ERROR: couldn't create temporary file in ${outdir}"; exit 1 ) 20430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 20530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootblock_count=`du --apparent-size --block-size=512 ${directory} | awk '{ print $1; }'` 20630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ $? -ne 0 ]; then \ 20730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: Couldn't read size of input directory ${directory}" 20830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root exit 1 20930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 21030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 21130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "Creating temporary file..." 21230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root${DDBIN} if=/dev/zero of=${tempfile} bs=${BLOCK_SIZE} count=$((${block_count} + ${SLOP})) > /dev/null 2>&1 21330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ $? -ne 0 ]; then \ 21430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root echo "ERROR: creating temporary file: $?" 21530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 21630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 21730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootloop_dev=$(${LOSETUPBIN} -f) || ( echo "ERROR: losetup wouldn't tell us the next unused device"; exit 1 ) 21830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 21930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootif [ ${use_crypto} -eq 1 ]; then \ 22030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root keyfile=$(tempfile -d ${outdir}) || ( echo "ERROR: could not create temporary key file"; exit 1 ) 22130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root ${LOSETUPBIN} -p 5 -e ${CRYPTO} ${loop_dev} ${tempfile} 5< ${keyfile} || ( echo "ERROR: couldn't create loopback device"; exit 1 ) 22230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root rm -f ${keyfile} 22330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootelse \ 22430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root ${LOSETUPBIN} ${loop_dev} ${tempfile} || ( echo "ERROR: couldn't create loopback device"; exit 1 ) 22530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootfi 22630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 22730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 22830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Create the filesystem 22930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 23030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "" 23130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root${MKFSBIN} -I ${loop_dev} 23230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "" 23330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 23430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 23530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Make the temporary mount point and mount it 23630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 23730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Roottemp_mount="${MOUNTDIR}/${RANDOM}" 23830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootmkdir ${temp_mount} 23930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root${MOUNTBIN} -t ${FS} -o loop ${loop_dev} ${temp_mount} 24030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 24130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 24230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# rsync the files! 24330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 24430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "Copying files:" 24530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root${RSYNCBIN} -av --no-owner --no-group ${directory}/ ${temp_mount}/ 24630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "" 24730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 24830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootecho "Successfully created \`${filename}'" 24930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 25030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 25130c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# Undo all the temporaries 25230c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root# 25330c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootumount ${temp_mount} 25430c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootrmdir ${temp_mount} 25530c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root${LOSETUPBIN} -d ${loop_dev} 25630c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootmv ${tempfile} ${filename} 25730c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 25830c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Roottrap - ERR 25930c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Root 26030c1102fecda5e9ef071c58c0e54b721961ae4e3Kenny Rootexit 0 261