X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Fdisk-image-builder%2Fnested%2Fbuild.sh;fp=resources%2Ftools%2Fdisk-image-builder%2Fnested%2Fbuild.sh;h=0000000000000000000000000000000000000000;hp=34b96bbf62e1c8f98db8e55cc2903fec9a3144d1;hb=2c1809bfabcef9d74e9a7da58a694a320733a64f;hpb=d653bff621c44d0af1f4dcb786e9830362cdac38 diff --git a/resources/tools/disk-image-builder/nested/build.sh b/resources/tools/disk-image-builder/nested/build.sh deleted file mode 100755 index 34b96bbf62..0000000000 --- a/resources/tools/disk-image-builder/nested/build.sh +++ /dev/null @@ -1,183 +0,0 @@ -#!/bin/sh -e - -# Copyright (c) 2016 Cisco and/or its affiliates. -# 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. - -# Note: In order to limit the damage this script can do, it is recommended -# to NOT run as root. - -# -# 1. Download buildroot -# 2. Build buildroot kernel and root file system as per -# config files included in this package -# 3. Create empty disk image and extract buildroot root -# file system onto it, make it bootable -# 4. Apply any patches/additions included in this package -# -BUILD_DIR="$(dirname $0)/build" - -BUILDROOT_NAME='buildroot-2017.05.2' -BUILDROOT_DIR="${BUILD_DIR}/${BUILDROOT_NAME}" -BUILDROOT_TARBALL="${BUILDROOT_NAME}.tar.gz" -BUILDROOT_URL="https://buildroot.org/downloads/${BUILDROOT_TARBALL}" -BUILDROOT_OUTPUT="${BUILDROOT_DIR}/output/images/rootfs.tar" - -DISK_FREE_SIZE=8388608 # Min. free space on disk (8 MB) -DISK_ROUND_TO_NEAREST=16777216 # Round disk size up to nearest (16 MB) - -VERSION=$(cat $(dirname $0)/CHANGELOG | grep '^## ' | head -1 | sed -e 's/.*\[\(.*\)\].*/\1/') -if [ "${VERSION}" = "" ] -then - echo "Unable to determine build version from CHANGELOG file. Make sure" - echo "that there is an entry for the most recent version in CHANGELOG," - echo "and that the entry is formated like" - echo - echo "## [1.0] - 2016-05-16" - exit 1 -fi - -mkdir -p ${BUILD_DIR} - -echo Building version: ${VERSION} -echo $VERSION > ${BUILD_DIR}/VERSION -echo "NESTED_VERSION=${VERSION}" > ${BUILD_DIR}/VERSION_HIDDEN -img_name="${BUILD_DIR}/csit-nested-${VERSION}.img" - -# Normally no need to touch the variables below -DISK_SECT_SIZE=512 -DISK_HEADS=16 -DISK_SECT_PER_TRACK=63 -DISK_RESERVED_SECTORS=2048 - -MOUNT_TMPDIR="${BUILD_DIR}/tmp-mount" - -set -e - -# Download buildroot if not already there -wget -P ${BUILD_DIR} -N $BUILDROOT_URL -tar -C ${BUILD_DIR} -xzf ${BUILD_DIR}/$BUILDROOT_TARBALL - -# Apply DPDK patch to buildroot. Do not fail if this patch has already been applied. -patch -N -d ${BUILDROOT_DIR} -p1 < buildroot-patches/dpdk.patch || /bin/true - -cp -p buildroot-config $BUILDROOT_DIR/.config -cp -p kernel-defconfig $BUILDROOT_DIR/kernel-defconfig -make -C $BUILDROOT_DIR - -if [ ! -f ${BUILDROOT_OUTPUT} ] -then - echo "Buildroot compiled OK, but root file system ${BUILDROOT_OUTPUT}" - echo "does not exist. Somethig is wrong. Exiting." - exit 1 -fi - -# If we got here, it means we downloaded (if applicable) and built (if -# applicable) buildroot OK. -# -# Now let's calculate the required disk size, and build an empty disk. - -buildroot_size=$(stat -c%s ${BUILDROOT_OUTPUT}) -desired_size=$(( ${buildroot_size} + ${DISK_FREE_SIZE} )) -rounded_size=$(( ((${desired_size}/${DISK_ROUND_TO_NEAREST})+1) * \ - ${DISK_ROUND_TO_NEAREST} )) - -echo "Actual root FS size: ${buildroot_size}" -echo "Root FS size + desired free space (${DISK_FREE_SIZE}): ${desired_size}" -echo "Root FS size rounded to nearest ${DISK_ROUND_TO_NEAREST}:" \ - "${rounded_size} ($(( ${rounded_size} / 1024 / 1024 )) MB)" - -# In a normal world, we'd be creating a full-size empty image with "dd", an -# then use fdisk to partition it, and a tool like "kpartx" to map this into -# individual partitions. We'd then map the partition we're interested in. -# However, in order to avoid messing with /dev/mapper, we can also create -# our actual partition first, and then merge it with the MBR+partition table -# "prefix" to obtain our full disk. - -sectors=$(( ${rounded_size} / ${DISK_SECT_SIZE} )) - -disk_prefix=${img_name}.prefix -disk_main=${img_name}.main - -dd if=/dev/zero of=${disk_prefix} bs=${DISK_SECT_SIZE} \ - count=${DISK_RESERVED_SECTORS} -dd if=/dev/zero of=${disk_main} bs=${DISK_SECT_SIZE} \ - count=$(( $sectors - ${DISK_RESERVED_SECTORS} )) - -# Format and mount the root file system -mkfs.ext2 -F -L root ${disk_main} -mkdir -p ${MOUNT_TMPDIR} -sudo mount -o loop ${disk_main} ${MOUNT_TMPDIR} -trap "sudo umount ${MOUNT_TMPDIR}" EXIT - -# Extract the root filesystem -echo "Extracting root filesystem..." -sudo tar -C ${MOUNT_TMPDIR} -xf ${BUILDROOT_OUTPUT} - -# Apply any patches -echo "Applying patches/modifications" -mydir=$(pwd) -cd ${MOUNT_TMPDIR} -sudo run-parts -v ${mydir}/image-patches -cd ${mydir} - -# Copy version and changelog -sudo cp ${BUILD_DIR}/VERSION ${MOUNT_TMPDIR}/ -sudo cp ${mydir}/CHANGELOG ${MOUNT_TMPDIR}/ -# Also embed this into a hidden file that we can easily retrieve with -# "cat | strings | grep NESTED_VERSION" -sudo cp ${BUILD_DIR}/VERSION_HIDDEN ${MOUNT_TMPDIR}/.VERSION.HIDDEN - -# Unmount root filesystem -sudo umount ${MOUNT_TMPDIR} -trap EXIT -rmdir ${MOUNT_TMPDIR} - -# Now create our larger disk -cat ${disk_prefix} ${disk_main} > ${img_name} -rm -f ${disk_prefix} ${disk_main} - -# Create partition table on the disk -sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << _EOF | fdisk -H ${DISK_HEADS} -S ${DISK_SECT_PER_TRACK} ${img_name} - o # clear the in memory partition table - n # new partition - p # primary partition - 1 # partition number 1 - ${DISK_RESERVED_SECTORS} # Start a few KB into the disk, leave room for GRUB - # Default - all the way through the end of the disk - a # make a partition bootable - 1 # bootable partition is partition 1 - p # print the in-memory partition table - w # write the partition table - q # and we're done -_EOF - -disk_cylinders=$(fdisk -l -H ${DISK_HEADS} -S ${DISK_SECT_PER_TRACK} ${img_name} | \ - grep cylinders | \ - sed -e 's/.* \([0-9][0-9]*\) cylinders.*/\1/') - -echo "Disk has ${disk_cylinders} cylinders" - -# Install GRUB bootloader on the disk image -${BUILDROOT_DIR}/output/host/sbin/grub --device-map=/dev/null <<_EOF -device (hd0) ${img_name} -geometry (hd0) -root (hd0,0) -setup (hd0) -quit -_EOF - -echo -echo -echo -echo "Your image should be ready in:" -ls -l ${img_name}