#!/bin/sh -e # usage: kvm-make-release commit (e.g. kvm-44) # kvm-make-release snapshot # kvm-make-release name kernel-commit user-commit KVMDIR="/mnt/common/code/kvm/kvm" KVMUSERSPACEDIR="/mnt/common/code/kvm/kvm-userspace" RELEASEDIR="/mnt/common/tmp/kvm-releases/" set -e name="$1" kcommit="$2" ucommit="$3" formal="" archs=(x86 ia64 powerpc s390) [[ "$name" = kvm-* && -z "$kcommit" ]] && formal="1" [[ -z "$name" ]] && { echo no release name; exit 1; } if [[ "$name" == "snapshot" ]]; then name="kvm-snapshot-$(TZ=UTC date +%Y%m%d)" kcommit="HEAD" ucommit="HEAD" fi [[ -z "$kcommit" ]] && kcommit="$name" [[ -z "$ucommit" ]] && ucommit="$name" tarball="$name.tar.gz" ktarball="$name-kernel.tar" cd "$RELEASEDIR" (cd "$KVMUSERSPACEDIR"; git archive --format=tar --prefix="$name"/ "$ucommit") | tar x cd "$name" cat <<EOF > SOURCES kernel: $(git --git-dir="$KVMDIR/.git" rev-parse "$kcommit") userspace: $(git --git-dir="$KVMUSERSPACEDIR/.git" rev-parse "$ucommit") EOF mkdir linux cd linux paths=(drivers/kvm virt/kvm) files=(kvm.h kvm_host.h kvm_para.h kvm_types.h kvm_x86_emulate.h virtext.h svm.h vmx.h) for file in "${files[@]}"; do for arch in "${archs[@]}"; do for variant in include/asm-"$arch" arch/"$arch"/include/asm; do paths+=("$variant"/"$file") done done paths+=(include/linux/"$file") done for arch in "${archs[@]}"; do paths+=(arch/"$arch"/kvm) done GIT_DIR="$KVMDIR/.git" \ git archive --prefix="${name}-kernel/" --format=tar \ "$kcommit" "${paths[@]}" \ | tee "$RELEASEDIR/$ktarball" | tar --strip-components 1 -x gzip "$RELEASEDIR/$ktarball" cd .. touch kernel/config.kbuild echo ARCH=ia64 > config.mak make -C kernel sync LINUX=../linux version="$name" echo ARCH=x86_64 > config.mak make -C kernel sync LINUX=../linux version="$name" rm -rf config.mak linux kernel/config.kbuild sed -i "s/kvm-devel/$name/" qemu/configure cd .. tar czf "$tarball" "$name" #if [[ "$name" = kvm-snapshot-* ]]; then # mv "$tarball" ~/public_html/snapshots #elif [[ -n "$formal" ]]; then # rsync --progress -h "$tarball" avik@frs.sourceforge.net:uploads/ #fi rm -rf "$name"