diff options
Diffstat (limited to 'dracut-catimages.sh')
-rwxr-xr-x | dracut-catimages.sh | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/dracut-catimages.sh b/dracut-catimages.sh new file mode 100755 index 0000000..b87e000 --- /dev/null +++ b/dracut-catimages.sh @@ -0,0 +1,150 @@ +#!/bin/bash --norc +# +# Copyright 2009 Red Hat, Inc. All rights reserved. +# +# This program 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 program. If not, see <http://www.gnu.org/licenses/>. +# + +dwarning() { + echo "Warning: $*" >&2 +} + +dinfo() { + [[ $beverbose ]] && echo "$@" >&2 +} + +derror() { + echo "Error: $*" >&2 +} + +usage() { + # 80x25 linebreak here ^ + cat << EOF +Usage: $0 [OPTION]... <initramfs> <base image> [<image>...] +Creates initial ramdisk image by concatenating several images from the command +line and /boot/dracut/ + + -f, --force Overwrite existing initramfs file. + -i, --imagedir Directory with additional images to add + (default: /boot/dracut/) + -o, --overlaydir Overlay directory, which contains files that + will be used to create an additional image + --nooverlay Do not use the overlay directory + --noimagedir Do not use the additional image directory + -h, --help This message + --debug Output debug information of the build process + -v, --verbose Verbose output during the build process +EOF +} + +imagedir=/boot/dracut/ +overlay=/var/lib/dracut/overlay + +while (($# > 0)); do + case $1 in + -f | --force) force=yes ;; + -i | --imagedir) + imagedir=$2 + shift + ;; + -o | --overlaydir) + overlay=$2 + shift + ;; + --nooverlay) + no_overlay=yes + shift + ;; + --noimagedir) + no_imagedir=yes + shift + ;; + -h | --help) + usage + exit 1 + ;; + --debug) export debug="yes" ;; + -v | --verbose) beverbose="yes" ;; + -*) + printf "\nUnknown option: %s\n\n" "$1" >&2 + usage + exit 1 + ;; + *) break ;; + esac + shift +done + +outfile=$1 +shift + +if [[ -z $outfile ]]; then + derror "No output file specified." + usage + exit 1 +fi + +baseimage=$1 +shift + +if [[ -z $baseimage ]]; then + derror "No base image specified." + usage + exit 1 +fi + +if [[ -f $outfile && ! $force ]]; then + derror "Will not override existing initramfs ($outfile) without --force" + exit 1 +fi + +if [[ ! $no_imagedir && ! -d $imagedir ]]; then + derror "Image directory $overlay is not a directory" + exit 1 +fi + +if [[ ! $no_overlay && ! -d $overlay ]]; then + derror "Overlay $overlay is not a directory" + exit 1 +fi + +if [[ ! $no_overlay ]]; then + ofile="$imagedir/90-overlay.img" + dinfo "Creating image $ofile from directory $overlay" + type pigz &> /dev/null && gzip=pigz || gzip=gzip + ( + cd "$overlay" || return 1 + find . | cpio --quiet -H newc -o | $gzip -9 > "$ofile" + ) +fi + +if [[ ! $no_imagedir ]]; then + for i in "$imagedir/"*.img; do + [[ -f $i ]] && images+=("$i") + done +fi + +images+=("$@") + +dinfo "Using base image $baseimage" +cat -- "$baseimage" > "$outfile" + +for i in "${images[@]}"; do + dinfo "Appending $i" + cat -- "$i" >> "$outfile" +done + +dinfo "Created $outfile" + +exit 0 |