#!/bin/sh
# -*- coding: utf-8 -*-
#
# «live-new-uuid» - Creates and injects new UUIDs for live disks
#
# Create new UUIDs for disks to prevent conflicts and booting the wrong live
# directory.  Particularly useful in creating recovery disks that need to be
# able to also work with recovery partitioning schemes.
#
# Copyright (C) 2008, Dell Inc.
#
# Author:
#  - Mario Limonciello <Mario_Limonciello@Dell.com>
#
# This script is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this application; if not, write to the Free Software Foundation, Inc., 51
# Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
##################################################################################

set -e

help() {
 echo
 echo "USAGE: $0 initrd.gz <path-to-new-initrd.gz> <path-to-new-live-uuid> "
 echo
 echo "initrd.gz is the absolute path to the original gzipped initramfs"
 echo "<path-to-new-initrd.gz> is the destination directory for the new gzipped initramfs"
 echo "<path-to-new-live-uuid> is the destination directory for the new live-uuid-TYPE "
 echo
 echo "if either path is absent, they will end up in the current directory "
 echo "TYPE is determined by an already existing live-uuid-* or by 'uname -s'"
}

if [ "$#" = "0" ] || [ "x$1" = x-h ] || [ "x$1" = x--help ]; then
	help
	exit 3
fi

CWD=`pwd`
TEMPDIR=`mktemp -d /tmp/uuid-XXXXXX`
TYPE=`uname -r | cut -d '-' -f 3`

if [ -z "$2" ] || [ ! -d "$2" ] || [ "$2" = "." ]; then
	GZIPDIR="$CWD"
else
	GZIPDIR="$2"
fi

if [ -z "$3" ] || [ ! -d "$3" ] || [ "$3" = "." ]; then
	LIVEDIR="$CWD"
else
	LIVEDIR="$3"
fi

cd "$TEMPDIR"
zcat "$1" | cpio -id
uuidgen -r > conf/uuid.conf
find . | cpio --quiet --dereference -o -H newc | gzip > "$GZIPDIR/initrd.gz"
if [ "$(ls "$LIVEDIR/live-uuid"-* >/dev/null 2>&1 | wc -l)" = 1 ]; then
    cp conf/uuid.conf "$LIVEDIR/live-uuid"-*
else
    cp conf/uuid.conf "$LIVEDIR/live-uuid-$TYPE"
fi
cd "$CWD"
rm -rf "$TEMPDIR"
