+++ /dev/null
-#!/bin/bash -
-# Copyright (C) 2009-2010 Red Hat Inc.
-#
-# 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, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# Helper script which constructs the supermin appliance at runtime.
-
-unset CDPATH
-
-set -e
-
-if [ $# -ne 5 ]; then
- p=`basename $0`
- echo
- echo "$p: Create supermin appliance."
- echo
- echo "Usage:"
- echo "$p sourcedir host_cpu repo kernel initrd"
- echo
- echo "This script is used by libguestfs to build the supermin appliance"
- echo "(kernel and initrd output files). You should NOT need to run this"
- echo "program directly except if you are debugging tricky supermin"
- echo "appliance problems."
- echo
- echo "NB: The kernel and initrd parameters are OUTPUT parameters. If"
- echo "those files exist, they are overwritten by the output."
- echo
- echo "Typical usage when debugging supermin appliance problems:"
- echo " $p /usr/lib64/guestfs x86_64 fedora-12 /tmp/kernel /tmp/initrd"
- echo "Note: This will OVERWRITE any existing files called /tmp/kernel"
- echo "and /tmp/initrd."
- echo
- exit 1
-fi
-
-# Source directory containing the supermin input files.
-sourcedir=$(cd "$1" > /dev/null; pwd)
-
-# Host CPU and repo constants passed from the library (see:
-# https://bugzilla.redhat.com/show_bug.cgi?id=558593).
-host_cpu=$2
-repo=$3
-
-# Output files.
-kernel="$4"
-initrd="$5"
-
-# Kernel:
-# Look for the most recent kernel named vmlinuz-*.<arch>* which has a
-# corresponding directory in /lib/modules/. If the architecture is x86, look
-# for any x86 kernel.
-#
-# RHEL 5 didn't append the arch to the kernel name, so look for kernels
-# without arch second.
-
-arch=$(echo $host_cpu | sed 's/^i.86$/i?86/')
-kernels=$(
- ls -1dvr /boot/vmlinuz-*.$arch* 2>/dev/null | grep -v xen ||: ;
- ls -1dvr /boot/vmlinuz-* 2>/dev/null | grep -v xen
-)
-
-if [ -z "$kernels" ]; then
- echo "$0: failed to find a suitable kernel in /boot directory" >&2
- exit 1
-fi
-
-for f in $kernels; do
- b=$(basename "$f")
- b=$(echo "$b" | sed 's,vmlinuz-,,')
- modpath="/lib/modules/$b"
- if [ -d "$modpath" ]; then
- ln -sf "$f" "$kernel"
- break
- fi
- modpath=
-done
-
-if [ -z "$modpath" ]; then
- echo "$0: failed to find a suitable kernel" >&2
- exit 1
-fi
-
-# The initrd consists of these components:
-# (1) The base skeleton appliance that we constructed at build time.
-# name = initramfs.$repo.$host_cpu.supermin.img
-# format = compressed cpio
-# (2) The modules from modpath which are on the module whitelist.
-# format = plain cpio
-# (3) The host files which match wildcards in *.supermin.hostfiles.
-# format = plain cpio
-
-cp "$sourcedir"/initramfs.$repo.$host_cpu.supermin.img "$initrd"
-
-# Kernel modules (2).
-exec 5<"$sourcedir"/kmod.whitelist
-whitelist=
-while read kmod 0<&5; do
- whitelist="$whitelist -o -name $kmod"
-done
-exec 5<&-
-
-find "$modpath" \( -not -name '*.ko' $whitelist \) -a -print0 |
- cpio --quiet -o -0 -H newc >> "$initrd"
-
-# Host files (3).
-
-(cd / && \
- ls -1df $(
- cat "$sourcedir"/initramfs.$repo.$host_cpu.supermin.hostfiles
- ) 2>/dev/null |
- cpio -C 65536 --quiet -o -H newc ) >> "$initrd"