File: 80-install-kernel

package info (click to toggle)
xen-tools 4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 1,568 kB
  • ctags: 172
  • sloc: perl: 5,082; sh: 2,092; makefile: 239
file content (137 lines) | stat: -rwxr-xr-x 3,444 bytes parent folder | download | duplicates (2)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/sh
#
#  If the pygrub flag is set, this script will install the necessary
# packages to boot the VM from the dom0 via pygrub. This script installs
# the kernel and modules and generates a grub menu.lst in the newly
# created maschine.
#
# Dmitry Nedospasov
# --
# http://nedos.net

prefix=$1

#
#  Source our common functions
#

if [ -e /usr/lib/xen-tools/common.sh ]; then
    . /usr/lib/xen-tools/common.sh
else
    . ./hooks/common.sh
fi

if [ "${pygrub}" ]; then
#
# Log our start
#

logMessage Script $0 starting

#
# Resolve the correct architecutre
#

if [ "${arch}" = "i386" ]; then
    XEN_ARCH="686"
elif [ "${arch}" = "amd64" ]; then
    XEN_ARCH="amd64"
elif [ -z "${arch}" ]; then
    UNAME_ARCH=`uname -m`
    if [ "${UNAME_ARCH}" = "i686" ]; then
        XEN_ARCH="686"
    elif [ "${UNAME_ARCH}" = "x86_64" ]; then
        XEN_ARCH="amd64"
    else
        logMessage Unknown kernel architecture ${UNAME_ARCH}.
        logMessage Please report this as bug to xen-tools-dev@xen-tools.org.
        logMessage Script $0 failed
        exit 1
    fi
else
    logMessage Unknown kernel architecture ${arch}
    logMessage Script $0 failed
    exit 1
fi

#
# Attempt to install a xen kernel, if that fails, then install a normal one
#

KERNEL_XEN_PKG="linux-image-xen-$XEN_ARCH"
KERNEL_PKG="linux-image-$XEN_ARCH"

logMessage Attempting to install the $KERNEL_XEN_PKG kernel image
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_XEN_PKG > /dev/null 2>&1; then
    logMessage Package $KERNEL_XEN_PKG is available - installing
    installDebianPackage ${prefix} initramfs-tools
    installDebianPackage ${prefix} $KERNEL_XEN_PKG

else
    logMessage Package $KERNEL_XEN_PKG is not available
    logMessage Attempting to install the $KERNEL_PKG kernel image
    logMessage WARNING: This kernel may not have pvops
    if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
        logMessage Package $KERNEL_PKG is available - installing
        installDebianPackage ${prefix} initramfs-tools
        installDebianPackage ${prefix} $KERNEL_PKG
    else
        logMessage Package $KERNEL_PKG is not available
        logMessage pygrub set, but kernel could not be installed
        logMessage Script $0 failed
        exit 1
    fi
fi

DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
KERNEL_REV=$(echo $DOMU_KERNEL | sed "s/vmlinuz-//g")
DOMU_RAMDISK="initrd.img-$KERNEL_REV"
DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)

#
# Generate initrd if it does not exist
#

if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
    logMessage initrd exists, skipping generation
else
    logMessage initrd missing, generating
    chroot ${prefix} update-initramfs -c -k $KERNEL_REV
fi

#
# Generate a menu.lst for pygrub
#

mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default         0
timeout         2

title           $DOMU_ISSUE
root            (hd0,0)
kernel          /boot/$DOMU_KERNEL root=/dev/xvda2 ro 
initrd          /boot/$DOMU_RAMDISK

title           $DOMU_ISSUE (Single-User)
root            (hd0,0)
kernel          /boot/$DOMU_KERNEL root=/dev/xvda2 ro single
initrd          /boot/$DOMU_RAMDISK

E_O_MENU

#
#  Install the module-init-tools package.
#

installDebianPackage ${prefix} module-init-tools

else
    logMessage pygrub not set, skipping kernel install
fi # if pygrub

#
#  Log our finish
#

logMessage Script $0 finished