115 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
# Copyright (c) 2017 Jonas 'Sortie' Termansen.
 | 
						|
#
 | 
						|
# Permission to use, copy, modify, and distribute this software for any
 | 
						|
# purpose with or without fee is hereby granted, provided that the above
 | 
						|
# copyright notice and this permission notice appear in all copies.
 | 
						|
#
 | 
						|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
						|
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
						|
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
						|
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
						|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
						|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
						|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
						|
#
 | 
						|
# tix-iso-add
 | 
						|
# Add directory to iso filesystem.
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
directory=
 | 
						|
input=
 | 
						|
operand=1
 | 
						|
output=
 | 
						|
 | 
						|
dashdash=
 | 
						|
previous_option=
 | 
						|
for argument do
 | 
						|
  if test -n "$previous_option"; then
 | 
						|
    eval $previous_option=\$argument
 | 
						|
    previous_option=
 | 
						|
    continue
 | 
						|
  fi
 | 
						|
 | 
						|
  case $argument in
 | 
						|
  *=?*) parameter=$(expr "X$argument" : '[^=]*=\(.*\)' || true) ;;
 | 
						|
  *=)   parameter= ;;
 | 
						|
  *)    parameter=yes ;;
 | 
						|
  esac
 | 
						|
 | 
						|
  case $dashdash$argument in
 | 
						|
  --) dashdash=yes ;;
 | 
						|
  -o) previous_option=output ;;
 | 
						|
  --output=*) output=$parameter ;;
 | 
						|
  --output) previous_option=output ;;
 | 
						|
  -*) echo "$0: unrecognized option $argument" >&2
 | 
						|
      exit 1 ;;
 | 
						|
  *)
 | 
						|
    if [ $operand = 1 ]; then
 | 
						|
      input="$argument"
 | 
						|
      operand=2
 | 
						|
    elif [ $operand = 2 ]; then
 | 
						|
      directory="$argument"
 | 
						|
      operand=3
 | 
						|
    else
 | 
						|
      echo "$0: unexpected extra operand $argument" >&2
 | 
						|
      exit 1
 | 
						|
    fi
 | 
						|
    ;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
if test -n "$previous_option"; then
 | 
						|
  echo "$0: option '$argument' requires an argument" >&2
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if test -z "$input"; then
 | 
						|
  echo "$0: No input file was specified" >&2
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if test -z "$output"; then
 | 
						|
  output="$input"
 | 
						|
fi
 | 
						|
 | 
						|
tmpdir=
 | 
						|
tmpdest=
 | 
						|
cleanup() {
 | 
						|
  if [ -n "$tmpdir" ]; then rm -rf "$tmpdir"; fi
 | 
						|
  if [ -n "$tmpdest" ]; then rm -rf "$tmpdest"; fi
 | 
						|
}
 | 
						|
trap cleanup EXIT HUP INT QUIT TERM
 | 
						|
 | 
						|
if [ -z "$directory" ]; then
 | 
						|
  tmpdir=$(mktemp -d)
 | 
						|
  directory=$tmpdir
 | 
						|
fi
 | 
						|
 | 
						|
# Use different -indev and -outdev as just xorriso -dev doesn't rewrite the .iso
 | 
						|
# in the same manner.
 | 
						|
if [ "$input" = "$output" ]; then
 | 
						|
  tmpdest=$(mktemp -d)
 | 
						|
  dest=$tmpdest/iso
 | 
						|
else
 | 
						|
  dest=$output
 | 
						|
  rm -f -- "$dest"
 | 
						|
fi
 | 
						|
 | 
						|
xorriso \
 | 
						|
  -indev "$input" \
 | 
						|
  -outdev "$dest" \
 | 
						|
  -boot_image grub keep \
 | 
						|
  -pathspecs on \
 | 
						|
  -add \
 | 
						|
  ="$directory"
 | 
						|
 | 
						|
# xorriso doesn't write out the destination file if the directory is empty.
 | 
						|
if [ ! -e "$dest" ]; then
 | 
						|
  cp -- "$input" "$dest"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$dest" != "$output" ]; then
 | 
						|
  cp -- "$dest" "$output"
 | 
						|
fi
 |