|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# This script runs on the host machine BEFORE the container is created. |
| 4 | +# It ensures the Intel LMS service is running. |
| 5 | + |
| 6 | +echo "Checking LMS service status..." |
| 7 | + |
| 8 | +# Skip LMS checks on non-Linux hosts. |
| 9 | +if [[ "$(uname -s)" != "Linux" ]]; then |
| 10 | + echo "Non-Linux host detected; skipping LMS service check." |
| 11 | + exit 0 |
| 12 | +fi |
| 13 | + |
| 14 | +check_lms_active() { |
| 15 | + if sudo systemctl is-active --quiet lms; then |
| 16 | + echo "LMS service is active." |
| 17 | + return 0 |
| 18 | + else |
| 19 | + return 1 |
| 20 | + fi |
| 21 | +} |
| 22 | + |
| 23 | +prompt_timeout() { |
| 24 | + local msg="$1" |
| 25 | + local sec=10 |
| 26 | + USER_INPUT="" |
| 27 | + while [ $sec -gt 0 ]; do |
| 28 | + echo -ne "\r$msg (timeout: ${sec}s) " |
| 29 | + if read -t 1 USER_INPUT; then |
| 30 | + echo "" |
| 31 | + return 0 |
| 32 | + fi |
| 33 | + ((sec--)) |
| 34 | + done |
| 35 | + echo "" |
| 36 | + USER_INPUT="n" |
| 37 | +} |
| 38 | + |
| 39 | +if check_lms_active; then |
| 40 | + exit 0 |
| 41 | +fi |
| 42 | + |
| 43 | +echo "LMS service is not active." |
| 44 | + |
| 45 | +# Check if the service unit exists |
| 46 | +if sudo systemctl list-unit-files | grep -q "^lms.service"; then |
| 47 | + echo "LMS service exists but is inactive." |
| 48 | + |
| 49 | + prompt_timeout "Do you want to start it? (y/n) [n]" |
| 50 | + answer="$USER_INPUT" |
| 51 | + |
| 52 | + if [[ "$answer" =~ ^[Yy]$ ]]; then |
| 53 | + echo "Attempting to start LMS..." |
| 54 | + sudo systemctl start lms |
| 55 | + |
| 56 | + # Wait for up to 10 seconds for service to start |
| 57 | + for i in {1..10}; do |
| 58 | + sleep 1 |
| 59 | + if check_lms_active; then |
| 60 | + echo "LMS started successfully." |
| 61 | + exit 0 |
| 62 | + fi |
| 63 | + done |
| 64 | + |
| 65 | + echo "ERROR: Failed to start LMS service." |
| 66 | + sudo systemctl status lms |
| 67 | + exit 1 |
| 68 | + else |
| 69 | + echo "Skipping LMS start. Proceeding with devcontainer creation..." |
| 70 | + exit 0 |
| 71 | + fi |
| 72 | +fi |
| 73 | + |
| 74 | +echo "LMS service not found." |
| 75 | + |
| 76 | +prompt_timeout "Do you want to install and start it? (y/n) [n]" |
| 77 | +answer="$USER_INPUT" |
| 78 | + |
| 79 | +if [[ "$answer" =~ ^[Yy]$ ]]; then |
| 80 | + # Proceed with installation |
| 81 | + echo "Proceeding with installation..." |
| 82 | +else |
| 83 | + echo "Skipping LMS installation. Proceeding with devcontainer creation..." |
| 84 | + exit 0 |
| 85 | +fi |
| 86 | + |
| 87 | +# Install dependencies |
| 88 | +echo "Installing dependencies..." |
| 89 | +# Update apt cache first (optional but recommended before installing) |
| 90 | +# sudo apt-get update |
| 91 | +sudo apt-get install -y cmake libglib2.0-dev libcurl4-openssl-dev libxerces-c-dev \ |
| 92 | + libnl-3-dev libnl-route-3-dev libxml2-dev libidn2-0-dev libace-dev build-essential git |
| 93 | + |
| 94 | +# Prepare working directory |
| 95 | +WORK_DIR="$HOME/lms_setup" |
| 96 | +mkdir -p "$WORK_DIR" |
| 97 | +echo "Working directory: $WORK_DIR" |
| 98 | + |
| 99 | +if [ -d "$WORK_DIR/lms" ]; then |
| 100 | + echo "Cleaning up previous LMS source..." |
| 101 | + sudo rm -rf "$WORK_DIR/lms" |
| 102 | +fi |
| 103 | + |
| 104 | +# Clone LMS |
| 105 | +echo "Cloning LMS repository..." |
| 106 | +git clone https://github.com/intel/lms.git "$WORK_DIR/lms" |
| 107 | + |
| 108 | +# Build LMS |
| 109 | +echo "Building LMS..." |
| 110 | +cd "$WORK_DIR/lms" |
| 111 | +mkdir -p build |
| 112 | +cd build |
| 113 | + |
| 114 | +# Using dynamic paths based on where we verified the clone |
| 115 | +sudo cmake -S .. -B . |
| 116 | +sudo cmake --build . |
| 117 | + |
| 118 | +echo "Installing LMS..." |
| 119 | +sudo make install |
| 120 | + |
| 121 | +echo "Starting LMS service..." |
| 122 | +sudo systemctl daemon-reload |
| 123 | +sudo systemctl enable lms |
| 124 | +sudo systemctl start lms |
| 125 | + |
| 126 | +# Verify installation |
| 127 | +for i in {1..10}; do |
| 128 | + sleep 1 |
| 129 | + if check_lms_active; then |
| 130 | + echo "LMS installed and started successfully." |
| 131 | + exit 0 |
| 132 | + fi |
| 133 | +done |
| 134 | + |
| 135 | +echo "ERROR: Failed to start LMS after installation." |
| 136 | +sudo systemctl status lms |
| 137 | +exit 1 |
0 commit comments