a26532d6982589c0ebeb29362ddcc634b6bf298e
[kvmfornfv.git] / fuel-plugin / build_kvm.sh
1 #!/bin/bash
2
3 KVM_COMMIT="0e68cb048bb8aadb14675f5d4286d8ab2fc35449"
4 OVS_COMMIT="4ff6642f3c1dd8949c2f42b3310ee2523ee970a6"
5 KEEP=no
6
7 quirks() {
8         # Workaround build bug on Ubuntu 14.04
9         cat <<EOF > arch/x86/boot/install.sh
10 #!/bin/sh
11 cp -a -- "\$2" "\$4/vmlinuz-\$1"
12 EOF
13
14         # Add deprecated XFS delaylog option back in
15         cat <<EOF | patch -p2
16 diff --git a/kernel/fs/xfs/xfs_super.c b/kernel/fs/xfs/xfs_super.c
17 index 65a4537..b73ca67 100644
18 --- a/kernel/fs/xfs/xfs_super.c
19 +++ b/kernel/fs/xfs/xfs_super.c
20 @@ -109,6 +109,7 @@ static struct xfs_kobj xfs_dbg_kobj;        /* global debug sysfs attrs */
21  #define MNTOPT_GQUOTANOENF "gqnoenforce"/* group quota limit enforcement */
22  #define MNTOPT_PQUOTANOENF "pqnoenforce"/* project quota limit enforcement */
23  #define MNTOPT_QUOTANOENF  "qnoenforce"        /* same as uqnoenforce */
24 +#define MNTOPT_DELAYLOG    "delaylog"  /* Delayed logging enabled */
25  #define MNTOPT_DISCARD    "discard"    /* Discard unused blocks */
26  #define MNTOPT_NODISCARD   "nodiscard" /* Do not discard unused blocks */
27  
28 @@ -359,6 +360,9 @@ xfs_parseargs(
29                 } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) {
30                         mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
31                         mp->m_qflags &= ~XFS_GQUOTA_ENFD;
32 +               } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) {
33 +                       xfs_warn(mp,
34 +               "delaylog is the default now, option is deprecated.");
35                 } else if (!strcmp(this_char, MNTOPT_DISCARD)) {
36                         mp->m_flags |= XFS_MOUNT_DISCARD;
37                 } else if (!strcmp(this_char, MNTOPT_NODISCARD)) {
38 -- 
39 1.9.1
40
41 EOF
42 }
43
44 for i
45 do
46         case $i in
47
48         -k)     KEEP=yes
49                 shift
50                 ;;
51
52         -c)     KVM_COMMIT=$2
53                 shift;shift
54                 ;;
55
56         -o)     OVS_COMMIT=$2
57                 shift;shift
58                 ;;
59
60         esac
61 done
62
63 SRC=${1:-/root}
64 CONFIG=${2:-arch/x86/configs/opnfv.config}
65 VERSION=${3:-1.0.OPNFV}
66
67 # Check for necessary build tools
68 if ! type git >/dev/null 2>/dev/null
69 then
70         echo "Build tools missing, run the command
71
72 apt-get install git fakeroot build-essential ncurses-dev xz-utils kernel-package automake
73
74 as root and try again"
75         exit 1
76 fi
77
78 # Make sure the source dir exists
79 if [ ! -d $SRC ]
80 then
81         echo "$SRC: no such directory"
82         exit 1
83 fi
84
85 (
86         cd $SRC
87
88         # Get the Open VSwitch sources
89         if [ ! -d ovs ]
90         then
91                 git clone https://github.com/openvswitch/ovs.git
92         fi
93
94         # Get the KVM for NFV kernel sources
95         if [ ! -d kvmfornfv ]
96         then
97                 git clone https://gerrit.opnfv.org/gerrit/kvmfornfv
98         fi
99         cd kvmfornfv
100         git pull
101         if [ x$KVM_COMMIT != x ]
102         then
103                 git checkout $KVM_COMMIT
104         else
105                 git reset --hard
106         fi
107         cd kernel
108
109         quirks
110
111         # Configure the kernel
112         cp $CONFIG .config
113
114         make oldconfig </dev/null
115
116         # Build the kernel debs
117         if [ $KEEP = no ]
118         then
119                 make-kpkg clean
120         fi
121         fakeroot make-kpkg --initrd --revision=$VERSION kernel_image kernel_headers
122         git checkout arch/x86/boot/install.sh
123         git checkout fs/xfs/xfs_super.c
124
125         # Build OVS kernel modules
126         cd ../../ovs
127         if [ x$OVS_COMMIT != x ]
128         then
129                 git checkout $OVS_COMMIT
130         else
131                 git reset --hard
132         fi
133
134         #
135         # Apply out of tree patches
136         #
137         for i in $SRC/kvmfornfv/patches/ovs/*.patch
138         do
139                 if [ -f "$i" ]
140                 then
141                         echo "Applying: $i"
142                         patch -p1 <$i
143                 fi
144         done
145
146         ./boot.sh
147         ./configure --with-linux=$SRC/kvmfornfv/kernel
148         make
149
150         # Add OVS kernel modules to kernel deb
151         dpkg-deb -x $SRC/kvmfornfv/linux-image*.deb ovs.$$
152         dpkg-deb --control $SRC/kvmfornfv/linux-image*.deb ovs.$$/DEBIAN
153         cp datapath/linux/*.ko ovs.$$/lib/modules/*/kernel/net/openvswitch
154         depmod -b ovs.$$ -a `ls ovs.$$/lib/modules`
155         dpkg-deb -b ovs.$$ $SRC/kvmfornfv/linux-image*.deb
156         rm -rf ovs.$$
157 )
158
159 mv $SRC/kvmfornfv/*.deb .