# Ethernet workflow If you have a display with ethernet connection to a production/license manager computer you can update the licensefile via a simple script. In the example below the software is already installed (yellow box) but the inspector and the license file will be copied to the target via the script. ![Workflow](images/workflow_ethernet.png) Proposed workflow 1. Customer builds licensed application and provides inspector and project with secret key 2. Install inspector on target 3. Execute inspector and transfer hardware ID back to standalone linux environment 4. Run license generator on standalone linux which has access to project tree 5. Transfer the generated license back to target 6. Application on target detects license on the next startup ## Solution Running the automated_license.sh, in the same folder you should have: - lccgen - the license generator software - lccinspector - inspector built for target - projects folder - with the underlying license-manager generated projects. For example projects/LicenseDemoApp/ where the private key is located The automated_license.sh has the following parameters 1. [ -p PROJECT_NAME ], the same name as you built license-manager with 2. [ -f FEATURES ], a comma separated list of features e.g. feature1,feature2,feature3 3. [ -d DUE_DATE], date on the form YYYYMMDD 4. [ -l LICENSE_FILE_NAME ], name of the created license file 5. [ -o OUTPUT_FOLDER_TARGET ], default /opt/cclicenses 6. [ -i IP_NUMBER_TARGET ] Optional args are: - FEATURES (default none) - DUE_DATE (default none) - OUTPUT_FOLDER_TARGET (default /opt/cclicenses) ## Example Example output ```text ./automated_license.sh -i 10.131.32.56 -p LicenseDemoApp -l new_license.lic Found default hardware id License written Making output directory on target Copying licenses to target /opt/cclicenses Copy license to target ok ``` ```text /automated_license.sh -f feature3,feature4 -d 2023-12-24 -o /opt/cclicenses/LicenseDemoApp -l testdate.lic -i 10.131.32.56 -p LicenseDemoApp Found default hardware id AKH8-hw7Y-lpc= License written Making output directory on target Copying licenses to target /opt/cclicenses/LicenseDemoApp Copy license testdate.lic to target ok ``` ## The automated_license.sh script ```bash #!/bin/bash # Using flags # -p projectname # -f features # -d due_date # -l license-file # -o output_folder_target usage() { # Function: Print a help message. echo "Usage: $0 [ -p PROJECT_NAME ] [ -f FEATURES ] [ -d DUE_DATE] [ -l LICENSE_FILE_NAME ] [ -o OUTPUT_FOLDER_TARGET ] [ -i IP_NUMBER_TARGET ]" 1>&2 } exit_abnorm() { usage echo "Aborted" exit 1 } # Default value? OUTPUT_FOLDER_TARGET="/opt/cclicenses" while getopts p:f:d:l:o:h:i: flag do case "${flag}" in p) PROJECT_NAME=${OPTARG};; f) FEATURES=${OPTARG};; d) DUE_DATE=${OPTARG};; l) LICENSE_NAME=${OPTARG};; o) OUTPUT_FOLDER_TARGET=${OPTARG};; i) IP_TARGET=${OPTARG};; h) exit_abnorm;; :) echo "Missing argument for flag -${OPTARG}" exit_abnorm;; esac done #PROJECT_NAME="VitaLukan" #FEATURES="feature1,feature2" #IP_TARGET="10.131.32.56" #DUE_DATE=20230501 #LICENSE_NAME="MyNewLicense.lic" #OUTPUT_FOLDER_TARGET="/opt/cclicenses" # Needed opts? if [ -z ${IP_TARGET} ]; then echo "Missing IP_NUMBER_TARGET" exit_abnorm fi if [ -z ${PROJECT_NAME} ]; then echo "Missing PROJECT_NAME" exit_abnorm fi if [ -z ${LICENSE_NAME} ]; then echo "Missing LICENSE_FILE_NAME" exit_abnorm fi # How to remove this safely? if [ -f "$LICENSE_NAME" ]; then rm $LICENSE_NAME fi # Copy and run inspector sshpass -p default scp -o StrictHostKeyChecking=no -r lccinspector $IP_TARGET:/opt status=$? if [ $status -ne 0 ]; then echo "Failed to scp copy lccinspector to target" echo $status exit $status fi x=$(sshpass -p default ssh $IP_TARGET /opt/lccinspector | grep DEFAULT) # Did we get a hardware id? if grep -q "DEFAULT" <<< "$x"; then echo "Found default hardware id" #Put hardware id in variable prefix=${x%%:*} hw_id=${x:${#prefix}+1} echo $hw_id # Missing project folder? if [ ! -d "projects/$PROJECT_NAME" ]; then echo "Cannot find project folder projects/$PROJECT_NAME" exit 2 fi # Generate license run_lcc="./lccgen license issue -p projects/$PROJECT_NAME -s $hw_id -o $LICENSE_NAME" if [[ -v FEATURES ]]; then run_lcc="$run_lcc -f $FEATURES" fi if [[ -v DUE_DATE ]]; then run_lcc="$run_lcc -e $DUE_DATE" fi # Run license generator ${run_lcc} # Handle if we couldn't generate licens # Check if we have the license file? if [ -f "$LICENSE_NAME" ]; then # Make directory on remote target echo "Making output directory on target" sshpass -p default ssh $IP_TARGET mkdir -p $OUTPUT_FOLDER_TARGET status=$? if [ $status -ne 0 ]; then echo "Failed to make output directory" echo "$status" exit $status fi echo "Copying licenses to target $OUTPUT_FOLDER_TARGET" sshpass -p default scp -r $LICENSE_NAME $IP_TARGET:$OUTPUT_FOLDER_TARGET status=$? if [ $status -eq 0 ]; then echo "Copy license $LICENSE_NAME to target ok" else echo "Copy license to target went wrong" echo "$status" exit $status fi else echo "Could not generate license file!!" exit 2 fi else echo "Failed to read hardware id. Cannot generate license" exit 2 fi ```