diff --git a/add-blobs.sh b/add-blobs.sh new file mode 100755 index 00000000..9dc78b05 --- /dev/null +++ b/add-blobs.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +set -eux + +source ./src/meta-info/blobs-versions.env +BLOBS_TMP_DIR=".blobs" + +mkdir -p "$BLOBS_TMP_DIR" + +function down_add_blob { + BLOBS_GROUP=$1 + FILE=$2 + URL=$3 + if [ ! -f "blobs/${BLOBS_GROUP}/${FILE}" ];then + echo "Downloads resource from the Internet ($URL -> $BLOBS_TMP_DIR/$FILE)" + curl -L "$URL" --output "$BLOBS_TMP_DIR/$FILE" + echo "Adds blob ($BLOBS_TMP_DIR/$FILE -> $BLOBS_GROUP/$FILE), starts tracking blob in config/blobs.yml for inclusion in packages" + bosh add-blob "$BLOBS_TMP_DIR/$FILE" "$BLOBS_GROUP/$FILE" + fi +} + +# down_add_blob "haproxy" "haproxy-${HAPROXY_1_8_VERSION}.tar.gz" "$HAPROXY_1_8_URL" +# down_add_blob "haproxy" "haproxy-${HAPROXY_1_9_VERSION}.tar.gz" "$HAPROXY_1_9_URL" + +down_add_blob "haproxy" "haproxy-${HAPROXY_2_8_VERSION}.tar.gz" "$HAPROXY_2_8_URL" +down_add_blob "haproxy" "haproxy-${HAPROXY_2_9_VERSION}.tar.gz" "$HAPROXY_2_9_URL" + +down_add_blob "haproxy" "haproxy-${HAPROXY_3_0_VERSION}.tar.gz" "$HAPROXY_3_0_URL" + +down_add_blob "haproxy" "hatop-${HATOP_VERSION}" "$HATOP_URL" +down_add_blob "haproxy" "lua-${LUA_VERSION}.tar.gz" "$LUA_URL" +down_add_blob "haproxy" "pcre2-${PCRE2_VERSION}.tar.gz" "$PCRE2_URL" +down_add_blob "haproxy" "socat-${SOCAT_VERSION}.tar.gz" "$SOCAT_URL" +down_add_blob "keepalived" "keepalived-${KEEPALIVED_VERSION}.tar.gz" "$KEEPALIVED_URL" + +echo "Download blobs into blobs/ based on config/blobs.yml" +bosh sync-blobs + +echo "Upload previously added blobs that were not yet uploaded to the blobstore. Updates config/blobs.yml with returned blobstore IDs." +bosh upload-blobs diff --git a/jobs/haproxy/spec b/jobs/haproxy/spec index aa42f004..9cda63e8 100644 --- a/jobs/haproxy/spec +++ b/jobs/haproxy/spec @@ -3,8 +3,14 @@ name: haproxy description: "The HAProxy server can be used to terminate SSL in front of the Routers. Each HAProxy instance should point to multiple Routers." +# LTS - Long Term Support +# STS - Short Term Support packages: -- haproxy +# - haproxy-1.8 # LTS +# - haproxy-1.9 # STS +- haproxy-2.8 # LTS +- haproxy-2.9 # STS +- haproxy-3.0 # LTS - ttar templates: @@ -39,6 +45,12 @@ consumes: optional: true properties: + ha_proxy.haproxy_feature_version: + description: | + You can select an HAProxy feature version by specifying the 'major.minor' version number, one of several HAProxy packages included in this release. + This release has been tested only with the default HAProxy feature version. + Use other version lines with raw configurations at your own risk. + default: '2.8' # LTS ha_proxy.pre_start_script: description: | This script will be appended to the pre-start script and run before the job starts. diff --git a/jobs/haproxy/templates/haproxy_wrapper.erb b/jobs/haproxy/templates/haproxy_wrapper.erb index bb928f1d..12ab8d8f 100755 --- a/jobs/haproxy/templates/haproxy_wrapper.erb +++ b/jobs/haproxy/templates/haproxy_wrapper.erb @@ -1,9 +1,7 @@ -#!/bin/bash -# +#!/bin/bash -e -set -e - -export PATH=$PATH:/var/vcap/packages/haproxy/bin:/var/vcap/packages/ttar/bin +export HAPROXY_FEATURE_VERSION='<%= p("ha_proxy.haproxy_feature_version") -%>' +export PATH="$PATH:/var/vcap/packages/haproxy-$HAPROXY_FEATURE_VERSION/bin:/var/vcap/packages/ttar/bin" CONFIG=/var/vcap/jobs/haproxy/config/haproxy.config PID_FILE=/var/vcap/sys/run/haproxy/haproxy.pid DRAIN_LOCK=/var/vcap/sys/run/haproxy/drain.lock diff --git a/jobs/haproxy/templates/pre-start.erb b/jobs/haproxy/templates/pre-start.erb index b511c8c8..c167909a 100644 --- a/jobs/haproxy/templates/pre-start.erb +++ b/jobs/haproxy/templates/pre-start.erb @@ -1,7 +1,29 @@ #!/bin/bash -e +export HAPROXY_FEATURE_VERSION='<%= p("ha_proxy.haproxy_feature_version") -%>' mkdir -p /var/vcap/jobs/haproxy/errorfiles +create_or_update_link() { + local target="$1" + local link="$2" + + if [ -L "$link" ]; then + if [ "$(readlink "$link")" != "$target" ]; then + echo "Updating symbolic link..." + sudo ln -sf "$target" "$link" + fi + else + if [ -e "$link" ]; then + echo "Removing existing file and creating a new symbolic link..." + sudo rm "$link" + else + echo "Creating new symbolic link..." + sudo ln -s "$target" "$link" + fi + fi +} + + <% p('ha_proxy.custom_http_error_files', {}).each do |status_code, http_content| -%> cat > <%= "/var/vcap/jobs/haproxy/errorfiles/custom#{status_code}.http" %> << EOF @@ -9,17 +31,9 @@ cat > <%= "/var/vcap/jobs/haproxy/errorfiles/custom#{status_code}.http" %> << EO EOF <% end -%> -if [ ! -e /usr/bin/python ] && [ -e /usr/bin/python3 ]; then - sudo ln -s /usr/bin/python3 /usr/bin/python -fi - -if [ ! -e /usr/local/bin/hatop ]; then - sudo ln -s /var/vcap/packages/haproxy/hatop-wrapper /usr/local/bin/hatop -fi - -if [ ! -e /usr/local/bin/socat ]; then - sudo ln -s /var/vcap/packages/haproxy/bin/socat /usr/local/bin/socat -fi +create_or_update_link /usr/bin/python3 /usr/bin/python +create_or_update_link "/var/vcap/packages/haproxy-$HAPROXY_FEATURE_VERSION/hatop-wrapper" /usr/local/bin/hatop +create_or_update_link "/var/vcap/packages/haproxy-$HAPROXY_FEATURE_VERSION/bin/socat" /usr/local/bin/socat <%- if_p("ha_proxy.pre_start_script") do |script| -%> # ha_proxy.pre_start_script {{{ diff --git a/packages/haproxy-1.8/packaging b/packages/haproxy-1.8/packaging new file mode 100644 index 00000000..51a7e68f --- /dev/null +++ b/packages/haproxy-1.8/packaging @@ -0,0 +1,15 @@ +#!/bin/bash +# abort script on failures +set -euxo pipefail + +source meta-info/blobs-versions.env +mkdir "${BOSH_INSTALL_TARGET}/bin" + +source packaging-tools/installation.sh + +install_hatop "$BOSH_INSTALL_TARGET" "$HATOP_VERSION" +install_lua "$BOSH_INSTALL_TARGET" "$LUA_VERSION" +install_pcre2 "$BOSH_INSTALL_TARGET" "$PCRE2_VERSION" +install_socat "$BOSH_INSTALL_TARGET" "$SOCAT_VERSION" + +install_haproxy "$BOSH_INSTALL_TARGET" "$HAPROXY_1_8_VERSION" \ No newline at end of file diff --git a/packages/haproxy/spec b/packages/haproxy-1.8/spec similarity index 63% rename from packages/haproxy/spec rename to packages/haproxy-1.8/spec index 65c27799..c6121cc4 100644 --- a/packages/haproxy/spec +++ b/packages/haproxy-1.8/spec @@ -1,6 +1,8 @@ --- -name: haproxy +name: haproxy-1.8 files: +- meta-info/blobs-versions.env +- packaging-tools/installation.sh - haproxy/haproxy-*.tar.gz - haproxy/pcre2-*.tar.gz - haproxy/socat-*.tar.gz diff --git a/packages/haproxy-1.9/packaging b/packages/haproxy-1.9/packaging new file mode 100644 index 00000000..788728f8 --- /dev/null +++ b/packages/haproxy-1.9/packaging @@ -0,0 +1,15 @@ +#!/bin/bash +# abort script on failures +set -euxo pipefail + +source meta-info/blobs-versions.env +mkdir "${BOSH_INSTALL_TARGET}/bin" + +source packaging-tools/installation.sh + +install_hatop "$BOSH_INSTALL_TARGET" "$HATOP_VERSION" +install_lua "$BOSH_INSTALL_TARGET" "$LUA_VERSION" +install_pcre2 "$BOSH_INSTALL_TARGET" "$PCRE2_VERSION" +install_socat "$BOSH_INSTALL_TARGET" "$SOCAT_VERSION" + +install_haproxy "$BOSH_INSTALL_TARGET" "$HAPROXY_1_9_VERSION" \ No newline at end of file diff --git a/packages/haproxy-1.9/spec b/packages/haproxy-1.9/spec new file mode 100644 index 00000000..ffa0e099 --- /dev/null +++ b/packages/haproxy-1.9/spec @@ -0,0 +1,11 @@ +--- +name: haproxy-1.9 +files: +- meta-info/blobs-versions.env +- packaging-tools/installation.sh +- haproxy/haproxy-*.tar.gz +- haproxy/pcre2-*.tar.gz +- haproxy/socat-*.tar.gz +- haproxy/lua-*.tar.gz +- haproxy/hatop-* +- hatop-wrapper diff --git a/packages/haproxy-2.8/packaging b/packages/haproxy-2.8/packaging new file mode 100644 index 00000000..8641ae52 --- /dev/null +++ b/packages/haproxy-2.8/packaging @@ -0,0 +1,15 @@ +#!/bin/bash +# abort script on failures +set -euxo pipefail + +source meta-info/blobs-versions.env +mkdir "${BOSH_INSTALL_TARGET}/bin" + +source packaging-tools/installation.sh + +install_hatop "$BOSH_INSTALL_TARGET" "$HATOP_VERSION" +install_lua "$BOSH_INSTALL_TARGET" "$LUA_VERSION" +install_pcre2 "$BOSH_INSTALL_TARGET" "$PCRE2_VERSION" +install_socat "$BOSH_INSTALL_TARGET" "$SOCAT_VERSION" + +install_haproxy "$BOSH_INSTALL_TARGET" "$HAPROXY_2_8_VERSION" \ No newline at end of file diff --git a/packages/haproxy-2.8/spec b/packages/haproxy-2.8/spec new file mode 100644 index 00000000..cbbd87b7 --- /dev/null +++ b/packages/haproxy-2.8/spec @@ -0,0 +1,11 @@ +--- +name: haproxy-2.8 +files: +- meta-info/blobs-versions.env +- packaging-tools/installation.sh +- haproxy/haproxy-*.tar.gz +- haproxy/pcre2-*.tar.gz +- haproxy/socat-*.tar.gz +- haproxy/lua-*.tar.gz +- haproxy/hatop-* +- hatop-wrapper diff --git a/packages/haproxy-2.9/packaging b/packages/haproxy-2.9/packaging new file mode 100644 index 00000000..4922639f --- /dev/null +++ b/packages/haproxy-2.9/packaging @@ -0,0 +1,15 @@ +#!/bin/bash +# abort script on failures +set -euxo pipefail + +source meta-info/blobs-versions.env +mkdir "${BOSH_INSTALL_TARGET}/bin" + +source packaging-tools/installation.sh + +install_hatop "$BOSH_INSTALL_TARGET" "$HATOP_VERSION" +install_lua "$BOSH_INSTALL_TARGET" "$LUA_VERSION" +install_pcre2 "$BOSH_INSTALL_TARGET" "$PCRE2_VERSION" +install_socat "$BOSH_INSTALL_TARGET" "$SOCAT_VERSION" + +install_haproxy "$BOSH_INSTALL_TARGET" "$HAPROXY_2_9_VERSION" \ No newline at end of file diff --git a/packages/haproxy-2.9/spec b/packages/haproxy-2.9/spec new file mode 100644 index 00000000..9a319d69 --- /dev/null +++ b/packages/haproxy-2.9/spec @@ -0,0 +1,11 @@ +--- +name: haproxy-2.9 +files: +- meta-info/blobs-versions.env +- packaging-tools/installation.sh +- haproxy/haproxy-*.tar.gz +- haproxy/pcre2-*.tar.gz +- haproxy/socat-*.tar.gz +- haproxy/lua-*.tar.gz +- haproxy/hatop-* +- hatop-wrapper diff --git a/packages/haproxy-3.0/packaging b/packages/haproxy-3.0/packaging new file mode 100644 index 00000000..6dcdc106 --- /dev/null +++ b/packages/haproxy-3.0/packaging @@ -0,0 +1,15 @@ +#!/bin/bash +# abort script on failures +set -euxo pipefail + +source meta-info/blobs-versions.env +mkdir "${BOSH_INSTALL_TARGET}/bin" + +source packaging-tools/installation.sh + +install_hatop "$BOSH_INSTALL_TARGET" "$HATOP_VERSION" +install_lua "$BOSH_INSTALL_TARGET" "$LUA_VERSION" +install_pcre2 "$BOSH_INSTALL_TARGET" "$PCRE2_VERSION" +install_socat "$BOSH_INSTALL_TARGET" "$SOCAT_VERSION" + +install_haproxy "$BOSH_INSTALL_TARGET" "$HAPROXY_3_0_VERSION" \ No newline at end of file diff --git a/packages/haproxy-3.0/spec b/packages/haproxy-3.0/spec new file mode 100644 index 00000000..3124c951 --- /dev/null +++ b/packages/haproxy-3.0/spec @@ -0,0 +1,11 @@ +--- +name: haproxy-3.0 +files: +- meta-info/blobs-versions.env +- packaging-tools/installation.sh +- haproxy/haproxy-*.tar.gz +- haproxy/pcre2-*.tar.gz +- haproxy/socat-*.tar.gz +- haproxy/lua-*.tar.gz +- haproxy/hatop-* +- hatop-wrapper diff --git a/packages/haproxy/packaging b/packages/haproxy/packaging deleted file mode 100644 index d12037cd..00000000 --- a/packages/haproxy/packaging +++ /dev/null @@ -1,72 +0,0 @@ -# abort script on failures -set -euxo pipefail - - -LUA_VERSION=5.4.6 # https://www.lua.org/ftp/lua-5.4.6.tar.gz - -PCRE_VERSION=10.43 # https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.gz - -SOCAT_VERSION=1.7.4.4 # http://www.dest-unreach.org/socat/download/socat-1.7.4.4.tar.gz - -HAPROXY_VERSION=2.8.9 # https://www.haproxy.org/download/2.8/src/haproxy-2.8.9.tar.gz - -HATOP_VERSION=0.8.2 # https://github.com/jhunt/hatop/releases/download/v0.8.2/hatop - -mkdir ${BOSH_INSTALL_TARGET}/bin - -echo "Extracting lua..." -tar xzf haproxy/lua-${LUA_VERSION}.tar.gz -pushd lua-${LUA_VERSION} - make linux install INSTALL_TOP=${BOSH_INSTALL_TARGET} -popd - -echo "Extracting pcre..." -tar xzf haproxy/pcre2-${PCRE_VERSION}.tar.gz -pushd pcre2-${PCRE_VERSION} - ./configure \ - --enable-jit \ - --prefix ${BOSH_INSTALL_TARGET} - make - make install -popd - -echo "Installing socat..." -tar xzf haproxy/socat-${SOCAT_VERSION}.tar.gz -pushd socat-${SOCAT_VERSION} - ./configure - make - cp socat ${BOSH_INSTALL_TARGET}/bin - chmod 755 ${BOSH_INSTALL_TARGET}/bin/socat -popd - -echo "Unpacking HAproxy..." -tar xf haproxy/haproxy-${HAPROXY_VERSION}.tar.gz -pushd haproxy-${HAPROXY_VERSION} - if [ -f ../haproxy/patches.tar.gz ]; then - mkdir -p ${BOSH_INSTALL_TARGET}/applied-patches - tar xf ../haproxy/patches.tar.gz - - for patchfile in haproxy-patches/*.patch; do - echo "Applying patch file ${patchfile}" - - # Conservatively limit patch fuzz factor to 0 to reduce chance of faulty patch - patch -F 0 -p0 < ${patchfile} - - # Save patches in install target for inspection later - cp ${patchfile} ${BOSH_INSTALL_TARGET}/applied-patches - done - - rm -r haproxy-patches - fi - - echo "Installing HAproxy..." - make TARGET=linux-glibc USE_PROMEX=1 USE_OPENSSL=1 USE_PCRE2=1 USE_PCRE2_JIT=yes USE_STATIC_PCRE2=1 USE_ZLIB=1 PCRE2DIR=${BOSH_INSTALL_TARGET} USE_LUA=1 LUA_LIB=${BOSH_INSTALL_TARGET}/lib LUA_INC=${BOSH_INSTALL_TARGET}/include - cp haproxy ${BOSH_INSTALL_TARGET}/bin/ - chmod 755 ${BOSH_INSTALL_TARGET}/bin/haproxy -popd - -echo "Installing hatop..." -cp haproxy/hatop-${HATOP_VERSION} ${BOSH_INSTALL_TARGET}/bin/hatop -chmod 755 ${BOSH_INSTALL_TARGET}/bin/hatop -cp hatop-wrapper ${BOSH_INSTALL_TARGET}/ -chmod 755 ${BOSH_INSTALL_TARGET}/hatop-wrapper diff --git a/packages/keepalived/packaging b/packages/keepalived/packaging index 53d71b64..9cedd577 100644 --- a/packages/keepalived/packaging +++ b/packages/keepalived/packaging @@ -1,13 +1,14 @@ # abort script on any command that exits with a non zero value set -e -x +source meta-info/blobs-versions.env + # Copy common utils mkdir -p ${BOSH_INSTALL_TARGET}/common cp -a ${BOSH_COMPILE_TARGET}/common/* ${BOSH_INSTALL_TARGET}/common -KEEPALIVED_VERSION=2.2.8 # https://keepalived.org/software/keepalived-2.2.8.tar.gz -tar xzvf keepalived/keepalived-${KEEPALIVED_VERSION}.tar.gz -cd keepalived-${KEEPALIVED_VERSION}/ +tar xzvf keepalived/keepalived-${KEEPALIVED_VER}.tar.gz +cd keepalived-${KEEPALIVED_VER}/ #compile keepalive ./configure --prefix=${BOSH_INSTALL_TARGET} diff --git a/packages/keepalived/spec b/packages/keepalived/spec index 7552ca44..87b3c4ab 100644 --- a/packages/keepalived/spec +++ b/packages/keepalived/spec @@ -4,5 +4,6 @@ name: keepalived dependencies: [] files: +- meta-info/blobs-versions.env - common/utils.sh - keepalived/keepalived-*.tar.gz diff --git a/src/meta-info/blobs-versions.env b/src/meta-info/blobs-versions.env new file mode 100644 index 00000000..7b4f851a --- /dev/null +++ b/src/meta-info/blobs-versions.env @@ -0,0 +1,42 @@ +# http://www.haproxy.org/download/ + +# haproxy-1.8.31.tar.gz 09-Dec-2022 15:44 +HAPROXY_1_8_VERSION="1.8.31" +HAPROXY_1_8_URL="http://www.haproxy.org/download/1.8/src/haproxy-${HAPROXY_1_8_VERSION}.tar.gz" + +# haproxy-1.9.16.tar.gz 31-Jul-2020 12:07 +HAPROXY_1_9_VERSION="1.9.16" +HAPROXY_1_9_URL="http://www.haproxy.org/download/1.9/src/haproxy-${HAPROXY_1_9_VERSION}.tar.gz" + +# haproxy-2.8.9.tar.gz 05-Apr-2024 18:54 +HAPROXY_2_8_VERSION="2.8.9" +HAPROXY_2_8_URL="http://www.haproxy.org/download/2.8/src/haproxy-${HAPROXY_2_8_VERSION}.tar.gz" + +# haproxy-2.9.7.tar.gz 05-Apr-2024 18:23 +HAPROXY_2_9_VERSION="2.9.7" +HAPROXY_2_9_URL="http://www.haproxy.org/download/2.9/src/haproxy-${HAPROXY_2_9_VERSION}.tar.gz" + +# haproxy-3.0.0.tar.gz 29-May-2024 13:11 +HAPROXY_3_0_VERSION="3.0.0" +HAPROXY_3_0_URL="http://www.haproxy.org/download/3.0/src/haproxy-${HAPROXY_3_0_VERSION}.tar.gz" + + +# https://github.com/jhunt/hatop/releases +HATOP_VERSION="0.8.2" +HATOP_URL="https://github.com/jhunt/hatop/releases/download/v${HATOP_VERSION}/hatop" + +# https://www.lua.org/ftp/ +LUA_VERSION="5.4.6" +LUA_URL="https://www.lua.org/ftp/lua-${LUA_VERSION}.tar.gz" + +# https://github.com/PCRE2Project/pcre2/releases +PCRE2_VERSION="10.43" +PCRE2_URL="https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PCRE2_VERSION}/pcre2-${PCRE2_VERSION}.tar.gz" + +# http://www.dest-unreach.org/socat/download/ +SOCAT_VERSION="1.8.0.0" +SOCAT_URL="http://www.dest-unreach.org/socat/download/socat-${SOCAT_VERSION}.tar.gz" + +# https://keepalived.org/download.html +KEEPALIVED_VERSION="2.3.1" +KEEPALIVED_URL="https://keepalived.org/software/keepalived-${KEEPALIVED_VERSION}.tar.gz" \ No newline at end of file diff --git a/src/packaging-tools/installation.sh b/src/packaging-tools/installation.sh new file mode 100644 index 00000000..1dc934ef --- /dev/null +++ b/src/packaging-tools/installation.sh @@ -0,0 +1,105 @@ +# Usage of the functions +# install_ "${VERSION}" "$BOSH_INSTALL_TARGET" + +function install_hatop { + local INSTALL_TARGET=$1 + local PACKAGE_VERSION=$2 + + echo "Installing hatop ${PACKAGE_VERSION}..." + cp "haproxy/hatop-${PACKAGE_VERSION}" "${INSTALL_TARGET}/bin/hatop" + chmod 755 "${INSTALL_TARGET}/bin/hatop" + cp hatop-wrapper "${INSTALL_TARGET}/" + chmod 755 "${INSTALL_TARGET}/hatop-wrapper" +} + +function install_lua { + local INSTALL_TARGET=$1 + local PACKAGE_VERSION=$2 + + echo "Extracting lua ${PACKAGE_VERSION}..." + tar xzf "haproxy/lua-${PACKAGE_VERSION}.tar.gz" + local PACKAGE_DIR="lua-${PACKAGE_VERSION}" + echo "Building ${PACKAGE_VERSION}..." + pushd "${PACKAGE_DIR}" || { echo "Error: can't pushd to '${PACKAGE_DIR}'."; return 1; } + make linux install INSTALL_TOP="${INSTALL_TARGET}" + popd || { echo "Error: can't popd from '${PACKAGE_DIR}'."; return 1; } +} + +function install_pcre2 { + local INSTALL_TARGET=$1 + local PACKAGE_VERSION=$2 + + echo "Extracting pcre2 ${PACKAGE_VERSION}..." + tar xzf "haproxy/pcre2-${PACKAGE_VERSION}.tar.gz" + local PACKAGE_DIR="pcre2-${PACKAGE_VERSION}" + echo "Building ${PACKAGE_VERSION}..." + pushd "${PACKAGE_DIR}" || { echo "Error: can't pushd to '${PACKAGE_DIR}'."; return 1; } + ./configure \ + --enable-jit \ + --prefix "${INSTALL_TARGET}" + make + make install + popd || { echo "Error: can't popd from '${PACKAGE_DIR}'."; return 1; } +} + +function install_socat { + local INSTALL_TARGET=$1 + local PACKAGE_VERSION=$2 + + echo "Extracting socat ${PACKAGE_VERSION}..." + tar xzf "haproxy/socat-${PACKAGE_VERSION}.tar.gz" + local PACKAGE_DIR="socat-${PACKAGE_VERSION}" + echo "Building ${PACKAGE_VERSION}..." + pushd "${PACKAGE_DIR}" || { echo "Error: can't pushd to '${PACKAGE_DIR}'."; return 1; } + ./configure + make + cp socat "${INSTALL_TARGET}/bin" + chmod 755 "${INSTALL_TARGET}/bin/socat" + popd || { echo "Error: can't popd from '${PACKAGE_DIR}'."; return 1; } +} + +function install_haproxy { + local INSTALL_TARGET=$1 + local PACKAGE_VERSION=$2 + + echo "Extracting HAproxy (version ${PACKAGE_VERSION})..." + tar xf "haproxy/haproxy-${PACKAGE_VERSION}.tar.gz" + local PACKAGE_DIR="haproxy-${PACKAGE_VERSION}" + pushd "${PACKAGE_DIR}" || { echo "Error: can't pushd to '${PACKAGE_DIR}'."; return 1; } + if [ -f ../haproxy/patches.tar.gz ]; then + echo "Patching ${PACKAGE_VERSION}..." + mkdir -p "${INSTALL_TARGET}/applied-patches" + tar xf "../haproxy/patches.tar.gz" + for patchfile in haproxy-patches/*.patch; do + echo "Applying patch file ${patchfile}" + # Conservatively limit patch fuzz factor to 0 to reduce chance of faulty patch + patch -F 0 -p0 < "${patchfile}" + # Save patches in install target for inspection later + cp "${patchfile}" "${INSTALL_TARGET}/applied-patches" + done + rm -r haproxy-patches + fi + echo "Building ${PACKAGE_VERSION}..." + local makeArgs=( + TARGET=linux-glibc + USE_OPENSSL=1 + USE_PCRE2=1 + USE_PCRE2_JIT=yes + USE_STATIC_PCRE2=1 + USE_ZLIB=1 + PCRE2DIR="${INSTALL_TARGET}" + USE_LUA=1 + LUA_LIB="${INSTALL_TARGET}/lib" + LUA_INC="${INSTALL_TARGET}/include" + ) + local COMPILATION_FLAGS="" + if [[ "$PACKAGE_VERSION" == 1.* ]]; then + COMPILATION_FLAGS="-Wno-deprecated-declarations" + else + makeArgs+=( USE_PROMEX=1 ) + fi + CFLAGS="$COMPILATION_FLAGS" make "${makeArgs[@]}" + cp haproxy "${INSTALL_TARGET}/bin/" + chmod 755 "${INSTALL_TARGET}/bin/haproxy" + popd || { echo "Error: can't popd from '${PACKAGE_DIR}'."; return 1; } +}