Downloading and installing the AS3 package

The AS3 package is an RPM file you download, and then upload to the BIG-IP system using the iControl/iApp LX framework. Alternatively, you can see our Quick Start.

Downloading the RPM file

The first task is to download the latest RPM file. Go to the F5 AS3 site on GitHub, and download the latest (highest numbered) RPM file, or the appropriate LTS version.

Uploading and installing the AS3 file on the BIG-IP

After you download the RPM, you must upload and then install it on your BIG-IP system. You can use the BIG-IP Configuration utility, cURL (you can alternatively use SCP to upload the file to /var/config/rest/downloads, but you would still have to use cURL command to install the package), or a shell script to install AS3. Use only one of the following procedures.

Installing AS3 using the BIG-IP Configuration utility

From the Configuration utility:

  1. Before you can use the Configuration utility, you must enable the framework using the BIG-IP command line. From the CLI, type the following command: touch /var/config/rest/iapps/enable. You only need to run this command once (per BIG-IP system).

  2. Click iApps > Package Management LX. Your AS3 version number may be different than the one shown in the following example.

    ../_images/install1.png
  3. Click the Import button.

    ../_images/install2.png
  4. Click Choose File and then browse to the location you saved the RPM file, and then click Ok.

  5. Click the Upload button.

    ../_images/install3.png

Continue with Checking for a successful installation.


Installing AS3 using cURL from the Linux shell

If you want to use cURL to install AS3, use the following command syntax. First, set the file name and the BIG-IP IP address and credentials, making sure you use the appropriate RPM file name, including build number (36 in the following example), and BIG-IP credentials.

FN=f5-appsvcs-3.0.0-36.noarch.rpm

CREDS=admin:password

IP=IP address of BIG-IP

Copy the following commands to upload the package. If you uploaded the RPM by another method, you can skip these commands.

LEN=$(wc -c $FN | awk 'NR==1{print $1}')

curl -kvu $CREDS https://$IP/mgmt/shared/file-transfer/uploads/$FN -H 'Content-Type: application/octet-stream' -H "Content-Range: 0-$((LEN - 1))/$LEN" -H "Content-Length: $LEN" -H 'Connection: keep-alive' --data-binary @$FN

Copy the following commands to install the package.

DATA="{\"operation\":\"INSTALL\",\"packageFilePath\":\"/var/config/rest/downloads/$FN\"}"


curl -kvu $CREDS "https://$IP/mgmt/shared/iapp/package-management-tasks" -H "Origin: https://$IP" -H 'Content-Type: application/json;charset=UTF-8' --data $DATA

Continue with Checking for a successful installation.


Installing AS3 using a shell script

You can also use the following shell script to upload and install the target RPM to the BIG-IP system (the script first uninstalls any existing AS3 RPM packages on the BIG-IP).

To use this script, you must have both cURL and jq installed.

  1. Copy the following script to a new file on any system with a UNIX shell installed. We name the file install-rpm.sh.
#!/bin/bash

set -e

if [ -z "$1" ]; then
    echo "Target machine is required for installation."
    exit 0
fi

if [ -z "$2" ]; then
    echo "Credentials [username:password] for target machine are required for installation."
    exit 0
fi

if [ -z "$3" ]; then
    echo "File path to RPM is required for installation."
    exit 0
fi

TARGET="$1"
CREDS="$2"
TARGET_RPM="$3"
RPM_NAME=$(basename $TARGET_RPM)
CURL_FLAGS="--silent --write-out \n --insecure -u $CREDS"

poll_task () {
    STATUS="STARTED"
    while [ $STATUS != "FINISHED" ]; do
        sleep 1
        RESULT=$(curl ${CURL_FLAGS} "https://$TARGET/mgmt/shared/iapp/package-management-tasks/$1")
        STATUS=$(echo $RESULT | jq -r .status)
        if [ $STATUS = "FAILED" ]; then
            echo "Failed to" $(echo $RESULT | jq -r .operation) "package:" \
                $(echo $RESULT | jq -r .errorMessage)
            exit 1
        fi
    done
}

#Get list of existing f5-appsvcs packages on target
TASK=$(curl $CURL_FLAGS -H "Content-Type: application/json" \
    -X POST https://$TARGET/mgmt/shared/iapp/package-management-tasks -d "{operation: 'QUERY'}")
poll_task $(echo $TASK | jq -r .id)
AS3RPMS=$(echo $RESULT | jq -r '.queryResponse[].packageName | select(. | startswith("f5-appsvcs"))')

#Uninstall existing f5-appsvcs packages on target
for PKG in $AS3RPMS; do
    echo "Uninstalling $PKG on $TARGET"
    DATA="{\"operation\":\"UNINSTALL\",\"packageName\":\"$PKG\"}"
    TASK=$(curl ${CURL_FLAGS} "https://$TARGET/mgmt/shared/iapp/package-management-tasks" \
        --data $DATA -H "Origin: https://$TARGET" -H "Content-Type: application/json;charset=UTF-8")
    poll_task $(echo $TASK | jq -r .id)
done

#Upload new f5-appsvcs RPM to target
echo "Uploading RPM to https://$TARGET/mgmt/shared/file-transfer/uploads/$RPM_NAME"
LEN=$(wc -c $TARGET_RPM | awk 'NR==1{print $1}')
RANGE_SIZE=5000000
CHUNKS=$(( $LEN / $RANGE_SIZE))
for i in $(seq 0 $CHUNKS); do
    START=$(( $i * $RANGE_SIZE))
    END=$(( $START + $RANGE_SIZE))
    END=$(( $LEN < $END ? $LEN : $END))
    OFFSET=$(( $START + 1))
    curl ${CURL_FLAGS} -o /dev/null --write-out "" \
        https://$TARGET/mgmt/shared/file-transfer/uploads/$RPM_NAME \
        --data-binary @<(tail -c +$OFFSET $TARGET_RPM) \
        -H "Content-Type: application/octet-stream" \
        -H "Content-Range: $START-$(( $END - 1))/$LEN" \
        -H "Content-Length: $(( $END - $START ))" \
        -H "Connection: keep-alive"
done

#Install f5-appsvcs on target
echo "Installing $RPM_NAME on $TARGET"
DATA="{\"operation\":\"INSTALL\",\"packageFilePath\":\"/var/config/rest/downloads/$RPM_NAME\"}"
TASK=$(curl ${CURL_FLAGS} "https://$TARGET/mgmt/shared/iapp/package-management-tasks" \
    --data $DATA -H "Origin: https://$TARGET" -H "Content-Type: application/json;charset=UTF-8")
poll_task $(echo $TASK | jq -r .id)

echo "Waiting for /info endpoint to be available"
until curl ${CURL_FLAGS} -o /dev/null --write-out "" --fail --silent \
    "https://$TARGET/mgmt/shared/appsvcs/info"; do
    sleep 1
done

echo "Installed $RPM_NAME on $TARGET"

exit 0

  1. Make the new file an executable script with the following command (use the name you gave the script if different):
    chmod +x install-rpm.sh
  2. Use the following command syntax to execute the script and pass it the IP of the target BIG-IP, BIG-IP credentials, and path to the RPM (use the name you gave the script if different):
    ./install-rpm.sh <IP address of BIG-IP> <username>:<password> <path to RPM>

Checking for a successful installation

After you have installed AS3, you can test for a successful installation by sending a GET request to the /info endpoint. For example, from your RESTful client, after entering your credentials, use GET to send https://(IP address of BIG-IP)/mgmt/shared/appsvcs/info.

You should see a response like the following:

{
    "version": "3.8.0",
    "release": "2",
    "schemaCurrent": "3.8.0",
    "schemaMinimum": "3.0.0"
}

Updating AS3

When F5 releases a new version of AS3, use the same procedure you used to initially install the RPM. For example, if you used the Configuration utility, when you click Import and then select the new RPM, the system recognizes you are upgrading AS3:

../_images/upgrade.png

Note

Installing or uninstalling AS3 does not affect the BIG-IP configuration created by AS3.

Reverting to a previous version of AS3

If for any reason you want to revert to a previous version of AS3, you must first remove the version of AS3 on your BIG-IP system (iApps > Package Management LX > f5-appsvcs > Uninstall). After you uninstall, you can import the RPM for the version of AS3 you want to use.


Verifying the integrity of the AS3 RPM package

F5 Networks provides a checksum for each of our AS3 releases so you can confirm the integrity of the RPM package.

You can get a checksum for a particular template by running one of the following commands, depending on your operating system:

Linux: sha256sum <path_to_template>

Windows using CertUtil: CertUtil –hashfile <path_to_template> SHA256

You can compare the checksum produced by that command against the .sha256 file in the dist directory (https://github.com/F5Networks/f5-appsvcs-extension/tree/master/dist).