~philroche/ubuntu-on-ec2/ec2-publishing-scripts-cloud-images-rsync-module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/sh

PUBLISH_BASE_DEF=/srv/ec2-images
TEMP_D=""

set -e
cleanup() {
   [ -n "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
}

Usage() {
   cat <<EOF
Usage: ${0##*/} output
 create a tarball containing a fake publish root in output
 publish-root is from \${PUBLISH_BASE} (default=${PUBLISH_BASE_DEF})
EOF
}

[ "$1" = "-h" -o "$1" = "--help" ] && { Usage; exit 0; }
[ $# -eq 1 ] || { Usage 1>&2; exit 1; }

base=${PUBLISH_BASE:-${PUBLISH_BASE_DEF}}

TEMP_D=$(mktemp -d)
trap cleanup EXIT

date=$(date -R)

listd=${TEMP_D}/list
mkdir -p "${listd}"
listfile=${listd}/list.all
real_files=${listd}/list.real
fake_files=${listd}/list.fake
img_tar=${TEMP_D}/img.tar.gz
build_tar=${TEMP_D}/build.tar.gz

dd if=/dev/zero of=${TEMP_D}/image.img obs=1024 seek=1024 count=0
mke2fs -jF "${TEMP_D}/image.img"
echo "${date}" > "${TEMP_D}/vmlinux-image"
tar -C "${TEMP_D}" -Sczf - "image.img" "vmlinux-image" > "${build_tar}"
tar -C "${TEMP_D}" -Sczf - "image.img" > "${img_tar}"
rm "${TEMP_D}/image.img" "${TEMP_D}/vmlinux-image"

regex="([.]tar|vmlinuz|initrd|floppy|loader|[.]img[.]gz|.img|[.]vmdk|log.stdout.stderr)"

startd=${PWD}

cd "${base}"
find * -type f -o -type l > "${listfile}" 
egrep -v "${regex}" "${listfile}" > "${real_files}"
egrep "${regex}" "${listfile}" > "${fake_files}"

tar -cpf - --files-from "${real_files}" | tar -C "${TEMP_D}" -xf -
cd "${TEMP_D}"
while read file; do
   [ -d "${file%/*}" ] || mkdir -p "${file%/*}"
   case "${file}" in
      *.img.tar.gz) ln "${img_tar}" "${file}";;
      *.tar.gz) ln "${build_tar}" "${file}";;
      *) echo "${date}: ${file}" > "${file}";;
   esac
done < "${fake_files}"

#rm "${listfile}" "${real_files}" "${fake_files}"
rm "${img_tar}" "${build_tar}"
cd "${startd}"
tar -C "${TEMP_D}" -cvzf "${1:-out.tar.gz}" "."