#!/bin/bash ################################################################################ # UBK Kiosk Installation Script v0.9.9 # # Purpose: Install and configure UBK kiosk with addon support # Features: Easy Asterisk integration, Intercom support, Addon menu system # Last Updated: 2025-12-09 # Author: outis1one # # Changes in v0.9.9: # - Added Easy Asterisk addon integration # - Implemented intercom option in addons menu # - Enhanced addon management system # - Improved configuration handling ################################################################################ set -e # Color codes for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration SCRIPT_VERSION="0.9.9" KIOSK_HOME="${KIOSK_HOME:-.}" ADDON_DIR="${KIOSK_HOME}/addons" CONFIG_DIR="${KIOSK_HOME}/config" LOG_FILE="${KIOSK_HOME}/install_kiosk_v${SCRIPT_VERSION}.log" # Ensure directories exist mkdir -p "$ADDON_DIR" mkdir -p "$CONFIG_DIR" ################################################################################ # Logging Functions ################################################################################ log_info() { echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE" } log_error() { echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE" } ################################################################################ # System Check Functions ################################################################################ check_dependencies() { log_info "Checking system dependencies..." local missing_deps=() local required_packages=("curl" "wget" "git" "tar" "gzip") for pkg in "${required_packages[@]}"; do if ! command -v "$pkg" &> /dev/null; then missing_deps+=("$pkg") fi done if [ ${#missing_deps[@]} -gt 0 ]; then log_warning "Missing dependencies: ${missing_deps[*]}" log_info "Installing missing packages..." if command -v apt-get &> /dev/null; then sudo apt-get update sudo apt-get install -y "${missing_deps[@]}" elif command -v yum &> /dev/null; then sudo yum install -y "${missing_deps[@]}" else log_error "Unable to install packages. Please install manually: ${missing_deps[*]}" return 1 fi fi log_success "All dependencies satisfied" return 0 } check_system_requirements() { log_info "Checking system requirements..." # Check OS if [[ ! "$OSTYPE" =~ ^linux ]]; then log_error "This script requires Linux" return 1 fi # Check disk space (minimum 500MB) local available_space=$(df "$KIOSK_HOME" | tail -1 | awk '{print $4}') if [ "$available_space" -lt 512000 ]; then log_error "Insufficient disk space. Minimum 500MB required." return 1 fi log_success "System requirements met" return 0 } ################################################################################ # Addon Management Functions ################################################################################ install_addon() { local addon_name="$1" local addon_url="$2" log_info "Installing addon: $addon_name" local addon_path="${ADDON_DIR}/${addon_name}" mkdir -p "$addon_path" if [ -n "$addon_url" ]; then log_info "Downloading addon from: $addon_url" curl -sSL "$addon_url" | tar -xz -C "$addon_path" --strip-components=1 fi # Initialize addon configuration if [ -f "${addon_path}/init.sh" ]; then bash "${addon_path}/init.sh" fi log_success "Addon $addon_name installed successfully" } ################################################################################ # Easy Asterisk Integration ################################################################################ install_easy_asterisk() { log_info "Installing Easy Asterisk addon..." local asterisk_addon_path="${ADDON_DIR}/easy_asterisk" mkdir -p "$asterisk_addon_path" # Create Easy Asterisk configuration cat > "${asterisk_addon_path}/config.conf" <<'EOF' [easy_asterisk] enabled = true version = 1.0 description = Easy Asterisk Integration for UBK Kiosk [asterisk_server] host = localhost port = 5060 protocol = SIP [features] call_forwarding = true voicemail_integration = true conference_support = true caller_id_customization = true [security] enable_auth = true enable_encryption = false allowed_ips = localhost,127.0.0.1 [logging] level = INFO output_file = /var/log/ubk_asterisk.log EOF # Create initialization script cat > "${asterisk_addon_path}/init.sh" <<'EOF' #!/bin/bash ADDON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CONFIG_FILE="${ADDON_DIR}/config.conf" echo "[Easy Asterisk] Initializing addon..." # Check if Asterisk is installed if ! command -v asterisk &> /dev/null; then echo "[Easy Asterisk] Warning: Asterisk not found. Installing..." sudo apt-get update sudo apt-get install -y asterisk asterisk-dev fi # Load configuration if [ -f "$CONFIG_FILE" ]; then source <(grep -E '^\[|^[a-zA-Z_]' "$CONFIG_FILE") echo "[Easy Asterisk] Configuration loaded" fi # Initialize Asterisk integration echo "[Easy Asterisk] Starting Asterisk daemon..." sudo systemctl restart asterisk || true echo "[Easy Asterisk] Addon initialized successfully" EOF chmod +x "${asterisk_addon_path}/init.sh" # Run initialization bash "${asterisk_addon_path}/init.sh" log_success "Easy Asterisk addon installed" } ################################################################################ # Intercom Integration ################################################################################ install_intercom() { log_info "Installing Intercom addon..." local intercom_addon_path="${ADDON_DIR}/intercom" mkdir -p "$intercom_addon_path" # Create Intercom configuration cat > "${intercom_addon_path}/config.conf" <<'EOF' [intercom] enabled = true version = 1.0 description = Intercom System Integration for UBK Kiosk [intercom_server] host = localhost port = 8888 protocol = HTTP [features] two_way_audio = true video_support = false call_recording = true presence_detection = true emergency_alert = true [devices] auto_discovery = true max_devices = 20 timeout = 30 [security] require_authentication = true enable_encryption = true allowed_ips = 0.0.0.0/0 [audio] codec = opus sample_rate = 16000 bit_depth = 16 EOF # Create initialization script cat > "${intercom_addon_path}/init.sh" <<'EOF' #!/bin/bash ADDON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CONFIG_FILE="${ADDON_DIR}/config.conf" echo "[Intercom] Initializing addon..." # Check required packages for pkg in pulseaudio alsa-utils; do if ! dpkg -l | grep -q "^ii $pkg"; then echo "[Intercom] Installing $pkg..." sudo apt-get update sudo apt-get install -y "$pkg" fi done # Load configuration if [ -f "$CONFIG_FILE" ]; then echo "[Intercom] Configuration loaded" fi # Start audio services sudo systemctl restart pulseaudio || true sudo systemctl restart alsasound || true echo "[Intercom] Addon initialized successfully" EOF chmod +x "${intercom_addon_path}/init.sh" # Run initialization bash "${intercom_addon_path}/init.sh" log_success "Intercom addon installed" } ################################################################################ # Addon Menu ################################################################################ display_addon_menu() { while true; do echo "" echo -e "${BLUE}================================${NC}" echo -e "${BLUE} UBK Kiosk v${SCRIPT_VERSION} Addon Menu${NC}" echo -e "${BLUE}================================${NC}" echo "1) Install Easy Asterisk" echo "2) Install Intercom" echo "3) Install Custom Addon" echo "4) List Installed Addons" echo "5) Configure Easy Asterisk" echo "6) Configure Intercom" echo "7) View Addon Logs" echo "8) Return to Main Menu" echo "9) Exit" echo -e "${BLUE}================================${NC}" read -p "Select option: " addon_choice case $addon_choice in 1) install_easy_asterisk ;; 2) install_intercom ;; 3) read -p "Enter addon name: " addon_name read -p "Enter addon URL (leave blank for local): " addon_url install_addon "$addon_name" "$addon_url" ;; 4) list_addons ;; 5) configure_easy_asterisk ;; 6) configure_intercom ;; 7) view_addon_logs ;; 8) return ;; 9) log_info "Exiting..." exit 0 ;; *) log_warning "Invalid option" ;; esac done } list_addons() { log_info "Installed addons:" echo "" if [ -d "$ADDON_DIR" ] && [ "$(ls -A $ADDON_DIR)" ]; then ls -1 "$ADDON_DIR" | while read addon; do if [ -f "${ADDON_DIR}/${addon}/config.conf" ]; then local enabled=$(grep "^enabled" "${ADDON_DIR}/${addon}/config.conf" | cut -d'=' -f2 | tr -d ' ') if [ "$enabled" = "true" ]; then echo -e " ${GREEN}✓${NC} $addon (enabled)" else echo -e " ${RED}✗${NC} $addon (disabled)" fi fi done else log_warning "No addons installed" fi echo "" } configure_easy_asterisk() { local config_file="${ADDON_DIR}/easy_asterisk/config.conf" if [ ! -f "$config_file" ]; then log_error "Easy Asterisk not installed" return fi log_info "Configuring Easy Asterisk..." read -p "Enter Asterisk server host [localhost]: " asterisk_host asterisk_host="${asterisk_host:-localhost}" read -p "Enter Asterisk server port [5060]: " asterisk_port asterisk_port="${asterisk_port:-5060}" sed -i "s/^host = .*/host = $asterisk_host/" "$config_file" sed -i "s/^port = .*/port = $asterisk_port/" "$config_file" log_success "Easy Asterisk configuration updated" } configure_intercom() { local config_file="${ADDON_DIR}/intercom/config.conf" if [ ! -f "$config_file" ]; then log_error "Intercom not installed" return fi log_info "Configuring Intercom..." read -p "Enter Intercom server host [localhost]: " intercom_host intercom_host="${intercom_host:-localhost}" read -p "Enter Intercom server port [8888]: " intercom_port intercom_port="${intercom_port:-8888}" sed -i "s/^host = .*/host = $intercom_host/" "$config_file" sed -i "s/^port = .*/port = $intercom_port/" "$config_file" log_success "Intercom configuration updated" } view_addon_logs() { if [ ! -f "$LOG_FILE" ]; then log_warning "No logs available yet" return fi log_info "Recent addon activity:" echo "" tail -n 20 "$LOG_FILE" echo "" } ################################################################################ # Main Installation Functions ################################################################################ install_kiosk_base() { log_info "Installing UBK Kiosk base system..." # Create directory structure mkdir -p "${KIOSK_HOME}/bin" mkdir -p "${KIOSK_HOME}/lib" mkdir -p "${KIOSK_HOME}/data" mkdir -p "${KIOSK_HOME}/logs" # Create main configuration file cat > "${CONFIG_DIR}/kiosk.conf" <> "$LOG_FILE" log_info "Starting UBK Kiosk installation v${SCRIPT_VERSION}" # Run system checks if ! check_system_requirements; then log_error "System requirements not met" exit 1 fi if ! check_dependencies; then log_error "Failed to install dependencies" exit 1 fi log_success "Pre-installation checks completed" # Display main menu show_main_menu } # Run main function main "$@"