aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/bash/function/nginx.sh
blob: a2cf8e6514d1b741ab5dd65ce38d6fe1295c0db7 (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
#!/usr/bin/env bash

# Copyright (c) 2023 Intel and/or its affiliates.
# 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.

set -exuo pipefail


function gather_nginx () {

    # Ensure stable NGINX archive is downloaded.
    #
    # Variables read:
    # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
    # - NGINX_VER - Version number of Nginx.
    set -exuo pipefail
    pushd "${DOWNLOAD_DIR}" || die "Pushd failed."
    nginx_repo="http://nginx.org/download/"
    # Use downloaded packages with specific version
    echo "Downloading NGINX package of specific version from repo ..."
    # Downloading NGINX version based on what VPP is using. Currently
    # it is not easy way to detect from VPP version automatically.
    nginx_stable_ver="${NGINX_VER}".tar.gz

    if [[ ! -f "${nginx_stable_ver}" ]]; then
        wget -nv --no-check-certificate \
        "${nginx_repo}/${nginx_stable_ver}"  || {
            die "Failed to get NGINX package from: ${nginx_repo}."
        }
    fi
    popd || die "Popd failed."
}


function common_dirs () {

    # Set global variables, create some directories (without touching content).
    # This function assumes running in remote testbed. It might override other
    # functions if included from common.sh.

    # Arguments:
    # - ${1} - Version number of Nginx.
    # Variables set:
    # - BASH_FUNCTION_DIR - Path to existing directory this file is located in.
    # - CSIT_DIR - Path to CSIT framework.
    # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
    # - NGINX_DIR - Path to NGINX framework.
    # - NGINX_VER - Version number of Nginx.
    # Functions called:
    # - die - Print to stderr and exit.

    set -exuo pipefail
    NGINX_VER="${1}"
    this_file=$(readlink -e "${BASH_SOURCE[0]}") || {
        die "Some error during locating of this source file."
    }
    BASH_FUNCTION_DIR=$(dirname "${this_file}") || {
        die "Some error during dirname call."
    }
    CSIT_DIR=$(readlink -e "/tmp/openvpp-testing") || {
        die "Readlink failed."
    }
    DOWNLOAD_DIR=$(readlink -f "${CSIT_DIR}/download_dir") || {
        die "Readlink failed."
    }
    mkdir -p "${CSIT_DIR}/${NGINX_VER}" || die "Mkdir failed."
    NGINX_DIR=$(readlink -e "${CSIT_DIR}/${NGINX_VER}") || {
        die "Readlink failed."
    }
}



function nginx_compile () {

    # Compile NGINX archive.
    #
    # Variables read:
    # - NGINX_DIR - Path to NGINX framework.
    # - CSIT_DIR - Path to CSIT framework.
    # - NGINX_INS_PATH - Path to NGINX install path.
    # Functions called:
    # - die - Print to stderr and exit.

    set -exuo pipefail
    NGINX_INS_PATH="${DOWNLOAD_DIR}/${NGINX_VER}"
    pushd "${NGINX_DIR}" || die "Pushd failed."

    # Set installation prefix.
    param="--prefix=${NGINX_INS_PATH} "
    # Set nginx binary pathname.
    param+="--sbin-path=${NGINX_INS_PATH}/sbin/nginx "
    # Set nginx.conf pathname.
    param+="--conf-path=${NGINX_INS_PATH}/conf/nginx.conf "
    # Enable ngx_http_stub_status_module.
    param+="--with-http_stub_status_module "
    # Force PCRE library usage.
    param+="--with-pcre "
    # Enable ngx_http_realip_module.
    param+="--with-http_realip_module "
    params=(${param})
    ./configure "${params[@]}" || die "Failed to configure NGINX!"
    make -j 16;make install || die "Failed to compile NGINX!"
}


function nginx_extract () {

    # Extract NGINX framework.
    #
    # Variables read:
    # - NGINX_DIR - Path to NGINX framework.
    # - CSIT_DIR - Path to CSIT framework.
    # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
    # - NGINX_VER - Version number of Nginx.
    # Functions called:
    # - die - Print to stderr and exit.

    set -exuo pipefail

    pushd "${CSIT_DIR}" || die "Pushd failed."
    tar -xvf ${DOWNLOAD_DIR}/${NGINX_VER}.tar.gz --strip=1 \
          --directory "${NGINX_DIR}" || {
          die "Failed to extract NGINX!"
    }
}