From 58c755cf4c3219393266c0f4e8494cd447c844c9 Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Mon, 20 Jan 2014 23:00:21 +1100 Subject: [PATCH] Create a new baremetal element Rather than using a script to mount the image using nbd to extract the kernel and ramdisk, make a new element called baremetal, which contains a cleanup.d script that will copy them out to .{vmlinuz,initrd}. Closes-Bug: 1224669 Change-Id: I8f3569aa12148d18b1c8242b6fbbd8857894b26f --- .gitignore | 2 + README.md | 5 +- bin/disk-image-get-kernel | 3 + elements/baremetal/README.md | 4 ++ .../cleanup.d/99-extract-kernel-and-ramdisk | 58 +++++++++++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 elements/baremetal/README.md create mode 100755 elements/baremetal/cleanup.d/99-extract-kernel-and-ramdisk diff --git a/.gitignore b/.gitignore index 8f923687..6cb3b252 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ dist *.qcow2 *.raw +*.initrd +*.vmlinuz build AUTHORS ChangeLog diff --git a/README.md b/README.md index 3628da56..c9ab7a71 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,9 @@ What tools are there? ramdisk-image-create -o deploy.ramdisk deploy -* disk-image-get-kernel filename : Extract the appropriate kernel and ramdisk - to use when doing PXE boot using filename as the image for a machine. +* disk-image-get-kernel filename : **DEPRECATED** Extract the appropriate + kernel and ramdisk to use when doing PXE boot using filename as the image + for a machine. Consider using the `baremetal` element, rather than this tool. * elements can be found in the top level elements directory. diff --git a/bin/disk-image-get-kernel b/bin/disk-image-get-kernel index 7d7eac0f..6522d8dc 100755 --- a/bin/disk-image-get-kernel +++ b/bin/disk-image-get-kernel @@ -41,6 +41,9 @@ function show_options () { exit 0 } +echo 'DEPRECATED: Please consider using the `baremetal` element.' +echo + TEMP=`getopt -o hd:i:o:x -n $SCRIPTNAME -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi diff --git a/elements/baremetal/README.md b/elements/baremetal/README.md new file mode 100644 index 00000000..c94fd375 --- /dev/null +++ b/elements/baremetal/README.md @@ -0,0 +1,4 @@ +This is the baremetal (IE: real hardware) element. + +Currently, this element will extract out the kernel and initial ramdisk of +the built image. diff --git a/elements/baremetal/cleanup.d/99-extract-kernel-and-ramdisk b/elements/baremetal/cleanup.d/99-extract-kernel-and-ramdisk new file mode 100755 index 00000000..8d2a2b15 --- /dev/null +++ b/elements/baremetal/cleanup.d/99-extract-kernel-and-ramdisk @@ -0,0 +1,58 @@ +#!/bin/bash +# +# Copyright 2014 Hewlett-Packard Development Company, L.P. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +set -e + +[ -n "$TARGET_ROOT" ] + +# Dig up the initrd and kernel to use. +BOOTDIR="$TARGET_ROOT/boot" +KERNEL= +RAMDISK= +if [ -f $TARGET_ROOT/etc/redhat-release ]; then + + # Prioritize PAE if present + KERNEL=$(ls -1rv $BOOTDIR/vmlinuz* | grep PAE | grep -v debug | head -1) + if [ ! $KERNEL ]; then + KERNEL=$(ls -1rv $BOOTDIR/vmlinuz* | grep -v debug | head -1) + if [ ! $KERNEL ]; then + echo "No suitable kernel found." + exit 1 + fi + fi + + KERNEL=$(basename $KERNEL) + KERNEL_VERSION=`echo $KERNEL | sed 's/vmlinuz-//g'` + + RAMDISK=$(basename `ls $BOOTDIR/initramfs-$KERNEL_VERSION.img`) + if [ ! $RAMDISK ]; then + echo "Can't find an initramfs for the $KERNEL_VERSION version of the kernel." + exit 1 + fi + +elif [ -f $TARGET_ROOT/etc/debian_version ]; then + KERNEL=$(basename `ls -1rv $BOOTDIR/vmlinuz*generic | head -1`) + RAMDISK=$(basename `ls -1rv $BOOTDIR/initrd*generic | head -1`) +else + echo "ERROR: Unable to detect operating system" + exit 1 +fi + +sudo cp $BOOTDIR/$KERNEL ${IMAGE_NAME}.vmlinuz +sudo cp $BOOTDIR/$RAMDISK ${IMAGE_NAME}.initrd +sudo chmod a+r ${IMAGE_NAME}.vmlinuz +sudo chmod a+r ${IMAGE_NAME}.initrd