aboutsummaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/vagrant/build.sh
blob: 73c06dca476f08d896a9ee9b8f938909faa9bb31 (plain)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
#########################################################################
# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#########################################################################
#!/bin/bash -x

set -x

TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
log_file="/tmp/build_log.txt-$TIMESTAMP"
exec 1> >(tee -a "$log_file")  2>&1

# Get Command Line arguements if present
TEMP_DIR=$1
if [ "x$1" != "x" ]; then
    TEMP_DIR=$1
    DMM_BUILD_DIR=${TEMP_DIR}/build
    DPDK_BUILD_SCRIPT_DIR=${DMM_BUILD_DIR}/../scripts
    LWIP_BUILD_DIR=${TEMP_DIR}/stacks/lwip_stack/build/
else
    TEMP_DIR=`dirname $(readlink -f $0)`/..
    DMM_BUILD_DIR=${TEMP_DIR}/../../build
    DPDK_BUILD_SCRIPT_DIR=${DMM_BUILD_DIR}/../scripts
    LWIP_BUILD_DIR=${TEMP_DIR}/build/
fi

echo 0:$0
echo 1:$1
echo 2:$2
echo TEMP_DIR: $TEMP_DIR
echo DMM_BUILD_DIR: $DMM_BUILD_DIR
echo DPDK_BUILD_SCRIPT_DIR: $DPDK_BUILD_SCRIPT_DIR
echo LWIP_BUILD_DIR: $LWIP_BUILD_DIR

OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
OS_VERSION_ID=$(grep '^VERSION_ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
KERNEL_OS=`uname -o`
KERNEL_MACHINE=`uname -m`
KERNEL_RELEASE=`uname -r`
KERNEL_VERSION=`uname -v`

echo KERNEL_OS: $KERNEL_OS
echo KERNEL_MACHINE: $KERNEL_MACHINE
echo KERNEL_RELEASE: $KERNEL_RELEASE
echo KERNEL_VERSION: $KERNEL_VERSION
echo OS_ID: $OS_ID
echo OS_VERSION_ID: $OS_ID

#DPDK download path
DPDK_DOWNLOAD_PATH=/tmp/dpdk

#dpdk installation path
DPDK_INSTALL_PATH=/usr

#set and check the environment for Linux
if [ "$OS_ID" == "ubuntu" ]; then
    export DEBIAN_FRONTEND=noninteractive
    export DEBCONF_NONINTERACTIVE_SEEN=true

    APT_OPTS="--assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\""
    sudo apt-get update ${APT_OPTS}
    sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump libpcre3 libpcre3-dev zlibc zlib1g zlib1g-dev vim ethtool unzip
elif [ "$OS_ID" == "debian" ]; then
    echo "not tested for debian and exit"
    exit 1
    export DEBIAN_FRONTEND=noninteractive
    export DEBCONF_NONINTERACTIVE_SEEN=true

    APT_OPTS="--assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\""
    sudo apt-get update ${APT_OPTS}
    sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump libpcre3 libpcre3-dev zlibc zlib1g zlib1g-dev vim
elif [ "$OS_ID" == "centos" ]; then
    sudo yum install -y git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump vim sudo yum-utils pcre-devel zlib-devel
elif [ "$OS_ID" == "opensuse" ]; then
    echo "not tested for opensuse and exit"
    exit 1
    sudo yum install -y git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump vim sudo yum-utils pcre-devel zlib-devel
fi

#DPDK will be having dependancy on linux headers
if [ "$OS_ID" == "ubuntu" ]; then
    sudo apt-get -y install git build-essential linux-headers-`uname -r`
    sudo apt-get -y install libnuma-dev
elif [ "$OS_ID" == "debian" ]; then
    sudo apt-get -y install git build-essential linux-headers-`uname -r`
elif [ "$OS_ID" == "centos" ]; then
    sudo yum groupinstall -y "Development Tools"
    sudo yum install -y kernel-headers
    sudo yum install -y numactl-devel
elif [ "$OS_ID" == "opensuse" ]; then
    sudo yum groupinstall -y "Development Tools"
    sudo yum install -y kernel-headers
fi
#===========build DPDK================

if [ ! -d  /usr/include/dpdk ] || [ ! -d  /usr/share/dpdk ] || [ ! -d  /usr/lib/modules/4.4.0-31-generic/extra/dpdk ]; then
     mkdir -p $DPDK_DOWNLOAD_PATH

     cd $DPDK_DOWNLOAD_PATH
     wget -N https://fast.dpdk.org/rel/dpdk-18.02.tar.xz --no-check-certificate
     tar xvf dpdk-18.02.tar.xz
     cd dpdk-18.02/


     sed -i 's!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1' config/common_base
     sed -i 's!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1' config/common_base
     sed -i 's!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1' config/common_base
     sed -i 's!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1' config/common_base

     sudo make install  T=x86_64-native-linuxapp-gcc DESTDIR=${DPDK_INSTALL_PATH} -j 4

     mkdir -p /tmp/dpdk/drivers/
     cp -f /usr/lib/librte_mempool_ring.so /tmp/dpdk/drivers/
fi
#===========build DMM=================
echo "DMM build started....."

cd $DMM_BUILD_DIR
ldconfig
rm -rf *
cmake ..
make -j 8
if [ $? -eq 0 ]; then
    echo "DMM build is SUCCESS"
else
    echo "DMM build has FAILED"
    exit 1
fi
echo "DMM build finished....."

#===========build Stackpool===========
echo "Stackpool build started....."
cd $LWIP_BUILD_DIR
cmake ..
make -j 8
if [ $? -eq 0 ]; then
    echo "Stackpool build is SUCCESS"
else
    echo "Stackpool build has FAILED"
    exit 1
fi
echo "Stackpool build finished....."

#===========check running env =================
hugepagesize=$(cat /proc/meminfo | grep Hugepagesize | awk -F " " {'print$2'})
if [ "$hugepagesize" == "2048" ]; then
    pages=1536
elif [ "$hugepagesize" == "1048576" ]; then
    pages=3
fi
sudo sysctl -w vm.nr_hugepages=$pages
HUGEPAGES=`sysctl -n  vm.nr_hugepages`
if [ $HUGEPAGES != $pages ]; then
    echo "ERROR: Unable to get $pages hugepages, only got $HUGEPAGES.  Cannot finish."
    exit
fi


hugepageTotal=$(cat /proc/meminfo | grep -c "HugePages_Total:       0")
if [ $hugepageTotal -ne 0 ]; then
  echo "HugePages_Total is zero"
  exit
fi

hugepageFree=$(cat /proc/meminfo | grep -c "HugePages_Free:        0")
if [ $hugepageFree -ne 0 ]; then
  echo "HugePages_Free is zero"
  exit
fi

hugepageSize=$(cat /proc/meminfo | grep -c "Hugepagesize:          0 kB")
if [ $hugepageSize -ne 0 ]; then
  echo "Hugepagesize is zero"
  exit
fi


sudo mkdir /mnt/nstackhuge -p
if [ "$hugepagesize" == "2048" ]; then
sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/
elif [ "$hugepagesize" == "1048576" ]; then
    sudo mount -t hugetlbfs -o pagesize=1G none /mnt/nstackhuge/
fi
sudo mkdir -p /var/run/ip_module/

export LD_LIBRARY_PATH=$LIB_PATH
export NSTACK_LOG_ON=DBG



#===========set environment===========
if [ "$OS_ID" == "centos" ]; then
    ifaddress1=$(ifconfig enp0s8 | grep 'inet' | cut -d: -f2 | awk '{print $2}')
    echo $ifaddress1
    ifaddresscut=$(ifconfig enp0s8 | grep 'inet' | head -n 1 | awk -F " " '{print $2}' | awk -F "." '{print $1"."$2"."$3}')
    echo $ifaddresscut
    ifmac=$(ifconfig enp0s8 | grep 'ether' | awk -F " " '{print $2}')
    echo $ifmac
elif [ "$OS_ID" == "ubuntu" ]; then
    ifaddress1=$(ifconfig enp0s8 | grep 'inet' | head -n 1 | cut -d: -f2 | awk '{print $1}')
    echo $ifaddress1
    ifaddresscut=$(ifconfig enp0s8 | grep 'inet' | head -n 1 | cut -d: -f2 | awk '{print $1}' | awk -F "." '{print $1"."$2"."$3}')
    echo $ifaddresscut
    ifmac=$(ifconfig enp0s8 | grep 'HWaddr' | awk -F " " '{print $5}')
    echo $ifmac
fi

cd $LWIP_BUILD_DIR/../
bash ./release_tar.sh
cd nStackServer/script
sed -i 's!/root/dpdk/dpdk-18.02!'$DPDK_DOWNLOAD_PATH'/dpdk-18.02!1' nstack_var.sh

cd ../
cp ./configure/*.json bin/
cd bin

if [ "$OS_ID" == "centos" ]; then
    sed -i 's!eth7!enp0s8!1' ip_data.json
elif [ "$OS_ID" == "ubuntu" ]; then
    sed -i 's!eth7!enp0s8!1' ip_data.json
fi

sed -i 's!00:54:32:19:3d:19!'$ifmac'!1' ip_data.json
sed -i 's!192.168.1.207!'$ifaddress1'!1' ip_data.json

sed -i 's!192.168.1.1!'$ifaddresscut'.0!1' network_data_tonStack.json
sed -i 's!192.168.1.254!'$ifaddresscut'.1!1' network_data_tonStack.json
sed -i 's!192.168.1.098!'$ifaddresscut'.5!1' network_data_tonStack.json
sed -i 's!192.168.1.209!'$ifaddresscut'.254!1' network_data_tonStack.json
sed -i 's!192.168.1.0!'$ifaddresscut'.0!1' network_data_tonStack.json
sed -i 's!192.168.1.254!'$ifaddresscut'.1!1' network_data_tonStack.json

if [ "$OS_ID" == "centos" ]; then
    sed -i 's!eth7!enp0s8!1' network_data_tonStack.json
elif [ "$OS_ID" == "ubuntu" ]; then
    sed -i 's!eth7!enp0s8!1' network_data_tonStack.json
fi
sed -i 's!eth7!enp0s8!1' network_data_tonStack.json

cd $DMM_BUILD_DIR/../release/bin
cp -r . ../../stacks/lwip_stack/app_test
cd $DMM_BUILD_DIR/../stacks/lwip_stack/app_test
cp -r ../app_conf/*.json .

sed -i 's!192.168.1.1!'$ifaddresscut'.0!1' rd_config.json

cd $LWIP_BUILD_DIR/../nStackServer
bash -x ./stop_nstack.sh
bash -x ./start_nstack.sh
check_result=$(pgrep nStackMain)
if [ -z "$check_result"  ]; then
    echo "nStackMain execute failed"
    exit 1
else
    echo "nStackMain execute successful"
    exit 0
fi