55 lines
1.0 KiB
Bash
Executable File
55 lines
1.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Create a new filesystem and populate it with the specified files.
|
|
# Automatically extracts tarballs.
|
|
set -e
|
|
|
|
if [[ $# -lt 5 ]] ; then
|
|
echo "Syntax: $0 IMAGE PART# FSTYPE LABEL SOURCE [...]"
|
|
exit 0
|
|
fi
|
|
|
|
image="$1" ; shift
|
|
partition="$1" ; shift
|
|
fstype="$1" ; shift
|
|
label="$1" ; shift
|
|
|
|
device="/dev/sda"
|
|
[[ $partition -ne 0 ]] && device="$device$partition"
|
|
|
|
script=(
|
|
"run"
|
|
"mkfs $fstype $device label:$label"
|
|
"mount $device /"
|
|
)
|
|
|
|
while [ $# -gt 0 ] ; do
|
|
src="$1"
|
|
if [[ "$src" =~ .+:.+ ]] ; then
|
|
dest="${src##*:}"
|
|
src="${src%%:*}"
|
|
script+=("mkdir-p \"$dest\"")
|
|
else
|
|
dest="/"
|
|
fi
|
|
if [ -d "$src" ] ; then
|
|
for item in "$src"/* ; do
|
|
cmd="copy-in \"$item\" \"$dest\""
|
|
script+=("$cmd")
|
|
done
|
|
else
|
|
case "$src" in
|
|
*.tar) cmd="tar-in \"$src\" \"$dest\"" ;;
|
|
*.tar.gz) cmd="tar-in \"$src\" \"$dest\" compress:gzip" ;;
|
|
*) cmd="copy-in \"$src\" \"$dest\"" ;;
|
|
esac
|
|
script+=("$cmd")
|
|
fi
|
|
shift
|
|
done
|
|
|
|
script+=("fstrim /")
|
|
|
|
for cmd in "${script[@]}"; do
|
|
echo "$cmd"
|
|
done | guestfish --format=raw -a "$image"
|