From 0c2ea87927d20999464585fddc0c2d2af4385ce0 Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Mon, 25 Apr 2022 10:05:17 -0700 Subject: [PATCH] Setup connection to Xilinx license server. Signed-off-by: Tim 'mithro' Ansell --- .github/workflows/Automerge.yml | 2 + .github/workflows/Pipeline.yml | 30 ++++++- .github/workflows/scripts/xilinx.sh | 117 ++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 2 deletions(-) create mode 100755 .github/workflows/scripts/xilinx.sh diff --git a/.github/workflows/Automerge.yml b/.github/workflows/Automerge.yml index c835ba6d..7acc0e3b 100644 --- a/.github/workflows/Automerge.yml +++ b/.github/workflows/Automerge.yml @@ -17,6 +17,8 @@ jobs: Pipeline: if: ${{ !(github.event_name != 'pull_request' && github.actor == 'dependabot[bot]') }} uses: ./.github/workflows/Pipeline.yml + secrets: + LICENSE_TUNNEL_KEY_DATA: ${{ secrets.LICENSE_TUNNEL_KEY_DATA }} Automerge: diff --git a/.github/workflows/Pipeline.yml b/.github/workflows/Pipeline.yml index d2aff1eb..c4eef26a 100644 --- a/.github/workflows/Pipeline.yml +++ b/.github/workflows/Pipeline.yml @@ -2,6 +2,9 @@ name: Pipeline on: workflow_call: + secrets: + LICENSE_TUNNEL_KEY_DATA: + required: false jobs: @@ -20,6 +23,7 @@ jobs: ALLOW_ROOT: true GHA_EXTERNAL_DISK: "tools" XILINX_LOCAL_USER_DATA: "no" + LICENSE_TUNNEL_KEY_DATA: ${{ secrets.LICENSE_TUNNEL_KEY_DATA }} steps: @@ -31,8 +35,30 @@ jobs: run: | DEBIAN_FRONTEND=noninteractive apt update -qq DEBIAN_FRONTEND=noninteractive apt install -qq -y \ - bash bison build-essential ca-certificates clang-format cmake psmisc \ - colordiff coreutils git flex python3 python3-dev python3-venv xsltproc libtinfo5 + bash \ + bison \ + build-essential \ + ca-certificates \ + clang-format \ + cmake \ + colordiff \ + coreutils \ + flex \ + git \ + iproute2 \ + iputils-ping \ + libtinfo5 \ + netcat-openbsd \ + psmisc \ + python3 \ + python3-dev \ + python3-venv \ + xsltproc + + - name: Xilinx Setup + env: + LICENSE_TUNNEL_KEY_DATA: ${{ secrets.LICENSE_TUNNEL_KEY_DATA }} + run: .github/workflows/scripts/xilinx.sh - name: Build run: make build --output-sync=target --warn-undefined-variables -j$(nproc) diff --git a/.github/workflows/scripts/xilinx.sh b/.github/workflows/scripts/xilinx.sh new file mode 100755 index 00000000..4cbe5d9b --- /dev/null +++ b/.github/workflows/scripts/xilinx.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# Copyright (C) 2017-2020 The Project X-Ray Authors. +# +# Use of this source code is governed by a ISC-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/ISC +# +# SPDX-License-Identifier: ISC + +echo +echo "========================================" +echo "Xilinx proprietary toolchain setup." +echo "----------------------------------------" + +echo +echo "Fix up the Xilinx configuration directory" +echo "----------------------------------------" +mkdir -p ~/.Xilinx +ls -l ~/.Xilinx +#sudo chown -R $USER ~/.Xilinx + +export XILINX_LOCAL_USER_DATA=no +echo "----------------------------------------" + +echo +echo "Select Xilinx Vivado version" +echo "----------------------------------------" +( + set -e + cd /opt + if [ x"$XRAY_SETTINGS" = x"kintex7" ]; then + echo "Using Xilinx Vivado Design Edition for $XRAY_SETTINGS build." + echo + echo "Making /opt mount rw" + sudo mount -o remount,rw /opt + echo + echo "Replacing /opt/Xilinx link." + sudo rm -f Xilinx + sudo ln -s Xilinx-design Xilinx + ls -l Xilinx + echo + echo "Making /opt mount ro" + sudo mount -o remount,ro /opt + echo + else + echo "Using Xilinx Vivado WebPack Edition for $XRAY_SETTINGS build." + ls -l Xilinx + fi +) +echo "----------------------------------------" + + +echo +echo "List /opt directory" +echo "----------------------------------------" +ls -l /opt +echo "----------------------------------------" + +# Create a tunnel to the server which has the Xilinx licenses and port forward +# them. +echo +echo "Setting up license server tunnel" +echo "----------------------------------------" +if [ ! -z "$LICENSE_TUNNEL_KEY_DATA" ]; then + LICENSE_TUNNEL_KEY=~/.Xilinx/xilinx-tunnel-key + LICENSE_TUNNEL_HOST=10.138.0.2 + echo $LICENSE_TUNNEL_KEY_DATA | base64 --decode > $LICENSE_TUNNEL_KEY + + echo "SSH Key for license server tunnel should be found @ $LICENSE_TUNNEL_KEY" + ls -l $LICENSE_TUNNEL_KEY || true + + echo + echo "Xilinx license server ssh key found, setting up tunnel" + echo + + echo + echo "Checking $LICENSE_TUNNEL_HOST is up" + ip addr show + echo "ping: ---------" + ping -c 5 $LICENSE_TUNNEL_HOST + echo "port: ---------" + nc -zv $LICENSE_TUNNEL_HOST 22 + echo "---------" + echo + + chmod 600 $LICENSE_TUNNEL_KEY + cat < ssh_config +Host xilinx-license + HostName $LICENSE_TUNNEL_HOST + User kokoro + IdentityFile $LICENSE_TUNNEL_KEY + StrictHostKeyChecking no + ExitOnForwardFailure yes + # SessionType none + LocalForward localhost:2100 172.18.0.3:2100 + LocalForward localhost:2101 172.18.0.3:2101 +EOF + echo "127.0.0.1 xlic.int" | sudo tee -a /etc/hosts + + export GIT_SSH_COMMAND="ssh -F $(pwd)/ssh_config -f -N" + ${GIT_SSH_COMMAND} xilinx-license + + ( + source /opt/Xilinx/Vivado/2017.2/settings64.sh + export PATH=/opt/Xilinx/Vivado/2017.2/bin/unwrapped/lnx64.o:$PATH + echo "-----" + lmutil lmstat -a -c 2100@localhost -i || true + echo "-----" + ) + + export XILINXD_LICENSE_FILE=2100@localhost + +else + echo + echo "**No** Xilinx license server ssh key found." +fi +echo "----------------------------------------"