From 1bdfcff9b394e9cc40868c13d2aa6a5e8c7f4a98 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs Date: Tue, 7 Aug 2018 08:18:28 -0700 Subject: Refactor vCPE vBRG and vBNG image creation process Separate templates and build scripts have been created for vBRG and vBNG. Build logic and parameters are removed from install scripts and base heat/env files used to deploy the VMs. For backwards compatibility, compile_state parameter was added to both VMs. Small corrections were made to the heat templates for clarity. Issue-ID: INT-615 Change-Id: Ia171994d2f4e17523f319b0a048d77fec29e487b Signed-off-by: Mariah Jacobs --- vnfs/vCPE/scripts/v_bng_build.sh | 70 +++++++++++ vnfs/vCPE/scripts/v_bng_install.sh | 88 +------------- vnfs/vCPE/scripts/v_brgemu_build.sh | 178 ++++++++++++++++++++++++++++ vnfs/vCPE/scripts/v_brgemu_install.sh | 216 ++-------------------------------- 4 files changed, 265 insertions(+), 287 deletions(-) create mode 100644 vnfs/vCPE/scripts/v_bng_build.sh create mode 100644 vnfs/vCPE/scripts/v_brgemu_build.sh (limited to 'vnfs/vCPE/scripts') diff --git a/vnfs/vCPE/scripts/v_bng_build.sh b/vnfs/vCPE/scripts/v_bng_build.sh new file mode 100644 index 00000000..5ad0eb97 --- /dev/null +++ b/vnfs/vCPE/scripts/v_bng_build.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -o xtrace # print commands during script execution +set -o errexit # exit on command errors + +VPP_SOURCE_REPO_URL=$(cat /opt/config/vpp_source_repo_url.txt) +VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/vpp_source_repo_release_tag.txt) +VPP_PATCH_URL=$(cat /opt/config/vpp_patch_url.txt) +CLOUD_ENV=$(cat /opt/config/cloud_env.txt) + + +# Convert Network CIDR to Netmask +cdr2mask () { + # Number of args to shift, 255..255, first non-255 byte, zeroes + set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0 + [ $1 -gt 1 ] && shift $1 || shift + echo ${1-0}.${2-0}.${3-0}.${4-0} +} + + +# Enable IPV4 forwarding through kernel + sed -i 's/^.*\(net.ipv4.ip_forward\).*/\1=1/g' /etc/sysctl.conf + sysctl -p /etc/sysctl.conf + +# Download required dependencies + echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list + echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list + apt-get update + apt-get install --allow-unauthenticated -y wget openjdk-8-jdk apt-transport-https ca-certificates g++ libcurl4-gnutls-dev + sleep 1 + +# Install the tools required for download codes + apt-get install -y expect git patch make autoconf libtool linux-image-extra-`uname -r` + +# Download and build the VPP codes + cd /opt + git clone ${VPP_SOURCE_REPO_URL} -b ${VPP_SOURCE_REPO_RELEASE_TAG} vpp + wget -O Vpp-Integrate-FreeRADIUS-Client-for-vBNG.patch ${VPP_PATCH_URL} + cd vpp + # The patch will place a "dummy" version of dhcp.api.h so the build will succeed + mkdir -p build-root/build-vpp-native/vpp/vnet/dhcp/ + patch -p1 < ../Vpp-Integrate-FreeRADIUS-Client-for-vBNG.patch + UNATTENDED='y' make install-dep + +# Install the FreeRADIUS client since we need the lib + cd /opt + git clone https://github.com/FreeRADIUS/freeradius-client.git + cd freeradius-client + ./configure + make && make install + cd /usr/local/lib && ln -s -f libfreeradius-client.so.2.0.0 libfreeradiusclient.so + ldconfig + + cd /opt/vpp/build-root + ./bootstrap.sh + make V=0 PLATFORM=vpp TAG=vpp install-deb + +# Install additional dependencies for vpp + apt-get install -y python-cffi python-ply python-pycparser + +# Install the VPP package + cd /opt/vpp/build-root + dpkg -i *.deb + systemctl stop vpp + +# Disable automatic upgrades + if [[ $CLOUD_ENV != "rackspace" ]] + then + echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic + sed -i 's/\(APT::Periodic::Unattended-Upgrade\) "1"/\1 "0"/' /etc/apt/apt.conf.d/20auto-upgrades + fi diff --git a/vnfs/vCPE/scripts/v_bng_install.sh b/vnfs/vCPE/scripts/v_bng_install.sh index 86779126..0ed020f2 100644 --- a/vnfs/vCPE/scripts/v_bng_install.sh +++ b/vnfs/vCPE/scripts/v_bng_install.sh @@ -2,12 +2,7 @@ set -o xtrace # print commands during script execution set -o errexit # exit on command errors -REPO_URL_ARTIFACTS=$(cat /opt/config/repo_url_artifacts.txt) -DEMO_ARTIFACTS_VERSION=$(cat /opt/config/demo_artifacts_version.txt) -INSTALL_SCRIPT_VERSION=$(cat /opt/config/install_script_version.txt) -VPP_SOURCE_REPO_URL=$(cat /opt/config/vpp_source_repo_url.txt) -VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/vpp_source_repo_release_tag.txt) -VPP_PATCH_URL=$(cat /opt/config/vpp_patch_url.txt) +SCRIPT_VERSION=$(cat /opt/config/script_version.txt) CLOUD_ENV=$(cat /opt/config/cloud_env.txt) BNG_GMUX_NET_CIDR=$(cat /opt/config/bng_gmux_net_cidr.txt) BNG_GMUX_NET_IPADDR=$(cat /opt/config/bng_gmux_net_ipaddr.txt) @@ -17,15 +12,6 @@ CPE_SIGNAL_NET_CIDR=$(cat /opt/config/cpe_signal_net_cidr.txt) CPE_SIGNAL_NET_IPADDR=$(cat /opt/config/cpe_signal_net_ipaddr.txt) SDNC_IP_ADDR=$(cat /opt/config/sdnc_ip_addr.txt) -# Build states are: -# 'build' - just build the code -# 'done' - code is build, install and setup -# 'auto' - bulid, install and setup -BUILD_STATE="auto" -if [[ -f /opt/config/compile_state.txt ]] -then - BUILD_STATE=$(cat /opt/config/compile_state.txt) -fi # Convert Network CIDR to Netmask cdr2mask () { @@ -36,10 +22,8 @@ cdr2mask () { } # OpenStack network configuration -if [[ $BUILD_STATE != "build" ]] +if [[ $CLOUD_ENV == "openstack" ]] then - if [[ $CLOUD_ENV == "openstack" ]] - then echo 127.0.0.1 $(hostname) >> /etc/hosts # Allow remote login as root @@ -59,68 +43,10 @@ then # eth2 probably doesn't exist yet and we should reboot after this anyway # ifup eth2 - fi -fi # endif BUILD_STATE != "build" - -if [[ $BUILD_STATE != "done" ]] -then - # Enable IPV4 forwarding through kernel - sed -i 's/^.*\(net.ipv4.ip_forward\).*/\1=1/g' /etc/sysctl.conf - sysctl -p /etc/sysctl.conf - - # Download required dependencies - echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list - echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list - apt-get update - apt-get install --allow-unauthenticated -y wget openjdk-8-jdk apt-transport-https ca-certificates g++ libcurl4-gnutls-dev - sleep 1 - - # Install the tools required for download codes - apt-get install -y expect git patch make autoconf libtool linux-image-extra-`uname -r` - - #Download and build the VPP codes - cd /opt - git clone ${VPP_SOURCE_REPO_URL} -b ${VPP_SOURCE_REPO_RELEASE_TAG} vpp - wget -O Vpp-Integrate-FreeRADIUS-Client-for-vBNG.patch ${VPP_PATCH_URL} - cd vpp - # The patch will place a "dummy" version of dhcp.api.h so the build will succeed - mkdir -p build-root/build-vpp-native/vpp/vnet/dhcp/ - patch -p1 < ../Vpp-Integrate-FreeRADIUS-Client-for-vBNG.patch - UNATTENDED='y' make install-dep - - # Install the FreeRADIUS client since we need the lib - cd /opt - git clone https://github.com/FreeRADIUS/freeradius-client.git - cd freeradius-client - ./configure - make && make install - cd /usr/local/lib && ln -s -f libfreeradius-client.so.2.0.0 libfreeradiusclient.so - ldconfig - - cd /opt/vpp/build-root - ./bootstrap.sh - make V=0 PLATFORM=vpp TAG=vpp install-deb - - # install additional dependencies for vpp - apt-get install -y python-cffi python-ply python-pycparser - - # Install the VPP package - cd /opt/vpp/build-root - dpkg -i *.deb - systemctl stop vpp - - # Disable automatic upgrades - if [[ $CLOUD_ENV != "rackspace" ]] - then - echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic - sed -i 's/\(APT::Periodic::Unattended-Upgrade\) "1"/\1 "0"/' /etc/apt/apt.conf.d/20auto-upgrades - fi +fi -fi # endif BUILD_STATE != "done" -if [[ $BUILD_STATE != "build" ]] -then - # Auto-start configuration for the VPP +# Auto-start configuration for the VPP cat > /etc/vpp/startup.conf << EOF unix { @@ -378,8 +304,8 @@ EOF # Download DHCP config files cd /opt - unzip -p -j /opt/vcpe-scripts-$INSTALL_SCRIPT_VERSION.zip v_bng_init.sh > /opt/v_bng_init.sh - unzip -p -j /opt/vcpe-scripts-$INSTALL_SCRIPT_VERSION.zip v_bng.sh > /opt/v_bng.sh + unzip -p -j /opt/vcpe-scripts-$SCRIPT_VERSION.zip v_bng_init.sh > /opt/v_bng_init.sh + unzip -p -j /opt/vcpe-scripts-$SCRIPT_VERSION.zip v_bng.sh > /opt/v_bng.sh chmod +x v_bng_init.sh chmod +x v_bng.sh sed -i 's/^\(# Provides:\).*/\1 v_bng/g' ./v_bng.sh @@ -399,5 +325,3 @@ EOF fi ./v_bng_init.sh -fi # endif BUILD_STATE != "build" - diff --git a/vnfs/vCPE/scripts/v_brgemu_build.sh b/vnfs/vCPE/scripts/v_brgemu_build.sh new file mode 100644 index 00000000..c936fae5 --- /dev/null +++ b/vnfs/vCPE/scripts/v_brgemu_build.sh @@ -0,0 +1,178 @@ +#!/bin/bash + +VPP_SOURCE_REPO_URL=$(cat /opt/config/vpp_source_repo_url.txt) +VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/vpp_source_repo_release_tag.txt) +VPP_PATCH_URL=$(cat /opt/config/vpp_patch_url.txt) +HC2VPP_SOURCE_REPO_URL=$(cat /opt/config/hc2vpp_source_repo_url.txt) +HC2VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/hc2vpp_source_repo_release_tag.txt) +CLOUD_ENV=$(cat /opt/config/cloud_env.txt) + +# Convert Network CIDR to Netmask +cdr2mask () { + # Number of args to shift, 255..255, first non-255 byte, zeroes + set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0 + [ $1 -gt 1 ] && shift $1 || shift + echo ${1-0}.${2-0}.${3-0}.${4-0} +} + +# Download required dependencies + echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list + echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list + apt-get update + apt-get install --allow-unauthenticated -y wget openjdk-8-jdk apt-transport-https ca-certificates g++ libcurl4-gnutls-dev + sleep 1 + +# Install the tools required for download codes + apt-get install -y expect git patch make linux-image-extra-`uname -r` +#Download and build the VPP codes + cd /opt + git clone ${VPP_SOURCE_REPO_URL} -b ${VPP_SOURCE_REPO_RELEASE_TAG} vpp + wget -O VPP-Add-Option82-Nat-Filter-For-vBRG.patch ${VPP_PATCH_URL} + + cd vpp + patch -p1 < ../VPP-Add-Option82-Nat-Filter-For-vBRG.patch + expect -c " + set timeout 60; + spawn make install-dep; + expect { + \"Do you want to continue?*\" {send \"Y\r\"; interact} + } + " + + cd build-root + ./bootstrap.sh + make V=0 PLATFORM=vpp TAG=vpp install-deb + + # Install the VPP package + dpkg -i *.deb + systemctl stop vpp + +# Download and install HC2VPP from source + cd /opt + git clone ${HC2VPP_SOURCE_REPO_URL} -b ${HC2VPP_SOURCE_REPO_RELEASE_TAG} hc2vpp + + apt-get -f -y install + apt-get install -y maven + mkdir -p /root/.m2 + cat > ~/.m2/settings.xml << EOF + + + + + + + fd.io-release + + + fd.io-mirror + fd.io-mirror + https://nexus.fd.io/content/groups/public/ + + true + never + + + false + + + + + + fd.io-mirror + fd.io-mirror + https://nexus.fd.io/content/repositories/public/ + + true + never + + + false + + + + + + + fd.io-snapshots + + + fd.io-snapshot + fd.io-snapshot + https://nexus.fd.io/content/repositories/fd.io.snapshot/ + + false + + + true + + + + + + fd.io-snapshot + fd.io-snapshot + https://nexus.fd.io/content/repositories/fd.io.snapshot/ + + false + + + true + + + + + + opendaylight-snapshots + + + opendaylight-snapshot + opendaylight-snapshot + https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ + + false + + + true + + + + + + opendaylight-shapshot + opendaylight-snapshot + https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ + + false + + + true + + + + + + + + fd.io-release + fd.io-snapshots + opendaylight-snapshots + + +EOF + + cd hc2vpp + mvn clean install + l_version=$(cat pom.xml | grep "" | head -1) + l_version=$(echo "${l_version%<*}") + l_version=$(echo "${l_version#*>}") + mv vpp-integration/minimal-distribution/target/vpp-integration-distribution-${l_version}-hc/vpp-integration-distribution-${l_version} /opt/honeycomb + sed -i 's/127.0.0.1/0.0.0.0/g' /opt/honeycomb/config/honeycomb.json + +# Disable automatic upgrades + if [[ $CLOUD_ENV != "rackspace" ]] + then + echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic + sed -i 's/\(APT::Periodic::Unattended-Upgrade\) "1"/\1 "0"/' /etc/apt/apt.conf.d/20auto-upgrades + fi diff --git a/vnfs/vCPE/scripts/v_brgemu_install.sh b/vnfs/vCPE/scripts/v_brgemu_install.sh index c86e9711..e8be086e 100755 --- a/vnfs/vCPE/scripts/v_brgemu_install.sh +++ b/vnfs/vCPE/scripts/v_brgemu_install.sh @@ -1,25 +1,8 @@ #!/bin/bash -REPO_URL_ARTIFACTS=$(cat /opt/config/repo_url_artifacts.txt) -DEMO_ARTIFACTS_VERSION=$(cat /opt/config/demo_artifacts_version.txt) -INSTALL_SCRIPT_VERSION=$(cat /opt/config/install_script_version.txt) -VPP_SOURCE_REPO_URL=$(cat /opt/config/vpp_source_repo_url.txt) -VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/vpp_source_repo_release_tag.txt) -VPP_PATCH_URL=$(cat /opt/config/vpp_patch_url.txt) -HC2VPP_SOURCE_REPO_URL=$(cat /opt/config/hc2vpp_source_repo_url.txt) -HC2VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/hc2vpp_source_repo_release_tag.txt) +SCRIPT_VERSION=$(cat /opt/config/script_version.txt) CLOUD_ENV=$(cat /opt/config/cloud_env.txt) -# Build states are: -# 'build' - just build the code -# 'done' - code is build, install and setup -# 'auto' - bulid, install and setup -BUILD_STATE="auto" - -if [[ -f /opt/config/compile_state.txt ]] -then - BUILD_STATE=$(cat /opt/config/compile_state.txt) -fi # Convert Network CIDR to Netmask cdr2mask () { @@ -30,57 +13,18 @@ cdr2mask () { } # OpenStack network configuration -if [[ $BUILD_STATE != "build" ]] +if [[ $CLOUD_ENV == "openstack" ]] then - if [[ $CLOUD_ENV == "openstack" ]] - then - echo 127.0.0.1 $(hostname) >> /etc/hosts + echo 127.0.0.1 $(hostname) >> /etc/hosts - # Allow remote login as root - mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk - cp /home/ubuntu/.ssh/authorized_keys /root/.ssh - fi -fi # endif BUILD_STATE != "build" + # Allow remote login as root + mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk + cp /home/ubuntu/.ssh/authorized_keys /root/.ssh +fi -if [[ $BUILD_STATE != "done" ]] -then - # Download required dependencies - echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list - echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list - apt-get update - apt-get install --allow-unauthenticated -y wget openjdk-8-jdk apt-transport-https ca-certificates g++ libcurl4-gnutls-dev - sleep 1 - # Install the tools required for download codes - apt-get install -y expect git patch make linux-image-extra-`uname -r` - #Download and build the VPP codes - cd /opt - git clone ${VPP_SOURCE_REPO_URL} -b ${VPP_SOURCE_REPO_RELEASE_TAG} vpp - wget -O VPP-Add-Option82-Nat-Filter-For-vBRG.patch ${VPP_PATCH_URL} - - cd vpp - patch -p1 < ../VPP-Add-Option82-Nat-Filter-For-vBRG.patch - expect -c " - set timeout 60; - spawn make install-dep; - expect { - \"Do you want to continue?*\" {send \"Y\r\"; interact} - } - " - - cd build-root - ./bootstrap.sh - make V=0 PLATFORM=vpp TAG=vpp install-deb - - # Install the VPP package - dpkg -i *.deb - systemctl stop vpp -fi # endif BUILD_STATE != "done" - -if [[ $BUILD_STATE != "build" ]] -then - # Auto-start configuration for the VPP - cat > /etc/vpp/startup.conf << EOF +# Auto-start configuration for the VPP +cat > /etc/vpp/startup.conf << EOF unix { nodaemon @@ -339,144 +283,7 @@ sleep 15 EOF chmod +x /opt/nat_service.sh -fi # endif BUILD_STATE != "build" -if [[ $BUILD_STATE != "done" ]] -then - - # Download and install HC2VPP from source - cd /opt - git clone ${HC2VPP_SOURCE_REPO_URL} -b ${HC2VPP_SOURCE_REPO_RELEASE_TAG} hc2vpp - - apt-get -f -y install - apt-get install -y maven - mkdir -p /root/.m2 - cat > ~/.m2/settings.xml << EOF - - - - - - - fd.io-release - - - fd.io-mirror - fd.io-mirror - https://nexus.fd.io/content/groups/public/ - - true - never - - - false - - - - - - fd.io-mirror - fd.io-mirror - https://nexus.fd.io/content/repositories/public/ - - true - never - - - false - - - - - - - fd.io-snapshots - - - fd.io-snapshot - fd.io-snapshot - https://nexus.fd.io/content/repositories/fd.io.snapshot/ - - false - - - true - - - - - - fd.io-snapshot - fd.io-snapshot - https://nexus.fd.io/content/repositories/fd.io.snapshot/ - - false - - - true - - - - - - opendaylight-snapshots - - - opendaylight-snapshot - opendaylight-snapshot - https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ - - false - - - true - - - - - - opendaylight-shapshot - opendaylight-snapshot - https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ - - false - - - true - - - - - - - - fd.io-release - fd.io-snapshots - opendaylight-snapshots - - -EOF - - cd hc2vpp - mvn clean install - l_version=$(cat pom.xml | grep "" | head -1) - l_version=$(echo "${l_version%<*}") - l_version=$(echo "${l_version#*>}") - mv vpp-integration/minimal-distribution/target/vpp-integration-distribution-${l_version}-hc/vpp-integration-distribution-${l_version} /opt/honeycomb - sed -i 's/127.0.0.1/0.0.0.0/g' /opt/honeycomb/config/honeycomb.json - - # Disable automatic upgrades - if [[ $CLOUD_ENV != "rackspace" ]] - then - echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic - sed -i 's/\(APT::Periodic::Unattended-Upgrade\) "1"/\1 "0"/' /etc/apt/apt.conf.d/20auto-upgrades - fi -fi # endif BUILD_STATE != "done" - -if [[ $BUILD_STATE != "build" ]] -then # Create systemctl service for Honeycomb cat > /etc/systemd/system/honeycomb.service << EOF [Unit] @@ -515,8 +322,8 @@ EOF # Download DHCP config files cd /opt - unzip -p -j /opt/vcpe-scripts-$INSTALL_SCRIPT_VERSION.zip v_brgemu_init.sh > /opt/v_brgemu_init.sh - unzip -p -j /opt/vcpe-scripts-$INSTALL_SCRIPT_VERSION.zip v_brgemu.sh > /opt/v_brgemu.sh + unzip -p -j /opt/vcpe-scripts-$SCRIPT_VERSION.zip v_brgemu_init.sh > /opt/v_brgemu_init.sh + unzip -p -j /opt/vcpe-scripts-$SCRIPT_VERSION.zip v_brgemu.sh > /opt/v_brgemu.sh sed -i '/# Provides:/c\# Provides: vbrg ' /opt/v_brgemu.sh chmod +x v_brgemu_init.sh chmod +x v_brgemu.sh @@ -535,4 +342,3 @@ EOF fi ./v_brgemu_init.sh -fi # endif BUILD_STATE != "build" -- cgit 1.2.3-korg