~smoser/maas-images/trunk.lp1582410

« back to all changes in this revision

Viewing changes to bin/maas-qcow2targz

  • Committer: Lee Trager
  • Date: 2015-08-31 20:46:57 UTC
  • mto: This revision was merged to the branch mainline in revision 231.
  • Revision ID: lee.trager@canonical.com-20150831204657-w80pe2wxsjsq9zba
Add import subcommnad for CentOS

The import command polls a specified URL containing a SHA256SUM file
containing qcow2 files ready for cloud deployments. meph2-util then downloads
the images, ensures all MAAS dependencies are installed, converts them into
root-tgz files and creates the simplestream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash -e
 
2
 
 
3
if [ $# -ne 3 ] && [ $# -ne 4 ]; then
 
4
    echo "Usage: $0 <URL> <SHA256> <out file> [curtin file path]"
 
5
    exit 1
 
6
fi
 
7
 
 
8
URL=$1
 
9
IMG_NAME=$(basename $URL)
 
10
SHA256=$2
 
11
if [ $(dirname $3) == "." ]; then
 
12
    OUT="${PWD}/${3}"
 
13
else
 
14
    OUT=$3
 
15
fi
 
16
CURTIN_PATH=$4
 
17
 
 
18
if [ ! -f $URL ]; then
 
19
    IMG_PATH=/tmp/$IMG_NAME
 
20
    wget --continue $URL -O $IMG_PATH
 
21
else
 
22
    IMG_PATH=$URL
 
23
fi
 
24
 
 
25
echo "Checking given sha256sum..."
 
26
if [ $(sha256sum $IMG_PATH | awk ' { print $1 } ') != $SHA256 ]; then
 
27
    echo "Error: SHA256 of $IMG_PATH != $SHA256"
 
28
    exit 1
 
29
fi
 
30
 
 
31
if [ $(file $IMG_PATH | grep -c 'XZ compressed data') -gt 0 ]; then
 
32
    echo "Decompressing image..."
 
33
    NEW_IMG_PATH=${IMG_PATH%%'.xz'}
 
34
    [ -f "$NEW_IMG_PATH" ] && rm $NEW_IMG_PATH
 
35
    unxz $IMG_PATH
 
36
    IMG_PATH=${NEW_IMG_PATH}
 
37
fi
 
38
 
 
39
echo "Mounting image..."
 
40
sudo modprobe nbd max_path=8
 
41
sudo qemu-nbd -c /dev/nbd0 $IMG_PATH
 
42
 
 
43
mnt_point=$(mktemp -d '/tmp/maas-qcow2targz-XXX')
 
44
sudo mount /dev/nbd0p1 $mnt_point
 
45
if [ -d "$CURTIN_PATH" ]; then
 
46
    sudo mkdir -p $mnt_point/curtin
 
47
    sudo cp $CURTIN_PATH/* $mnt_point/curtin/
 
48
    sudo chmod +x $mnt_point/curtin/*
 
49
fi
 
50
 
 
51
# CentOS 7 removed python-oauth which is required for cloud-init to
 
52
# authenticate with the MAAS metadata service. Until cloud-init from CentOS
 
53
# supports python-oauth2 we need to pull python-oauth from EPEL7-testing
 
54
if [ -f "${mnt_point}/etc/os-release" ] && \
 
55
    [ $(grep -c "centos:7" "${mnt_point}/etc/os-release") -ge 1 ]; then
 
56
    echo "CentOS 7 detected! Adding python-oauth for MAAS cloud-init..."
 
57
 
 
58
    wget \
 
59
        https://kojipkgs.fedoraproject.org//packages/python-oauth/1.0.1/10.el7/noarch/python-oauth-1.0.1-10.el7.noarch.rpm \
 
60
        -O ${mnt_point}/tmp/python-oauth-1.0.1-10.el7.noarch.rpm
 
61
    sudo chroot ${mnt_point} \
 
62
        /bin/bash -c "rpm -ivh /tmp/python-oauth-1.0.1-10.el7.noarch.rpm"
 
63
    rm ${mnt_point}/tmp/python-oauth-1.0.1-10.el7.noarch.rpm
 
64
fi
 
65
 
 
66
mkdir -p $(dirname $OUT)
 
67
 
 
68
echo "Taring up image contents..."
 
69
pushd $mnt_point
 
70
sudo tar -czf $OUT .
 
71
popd
 
72
 
 
73
echo "Cleaning up..."
 
74
sudo umount $mnt_point
 
75
rmdir $mnt_point
 
76
sudo qemu-nbd -d /dev/nbd0
 
77
rm $IMG_PATH
 
78
 
 
79
echo "Done!"