Files
ubuntu-based-kiosk/addon_asterisk_easy.sh

315 lines
8.9 KiB
Bash

#!/bin/bash
################################################################################
# Asterisk-Easy Addon Installation Functions
# Description: Addon module for installing and configuring Asterisk-Easy
# Version: 1.0
################################################################################
# Color definitions for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
################################################################################
# Function: install_asterisk_easy
# Description: Main function to install Asterisk-Easy
# Parameters: None
# Returns: 0 on success, 1 on failure
################################################################################
install_asterisk_easy() {
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Asterisk-Easy Installation${NC}"
echo -e "${BLUE}================================${NC}"
# Update system packages
echo -e "${YELLOW}Updating system packages...${NC}"
apt-get update -qq
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to update system packages${NC}"
return 1
fi
# Install Asterisk dependencies
echo -e "${YELLOW}Installing Asterisk dependencies...${NC}"
apt-get install -y \
asterisk \
asterisk-config \
asterisk-dev \
asterisk-doc \
asterisk-modules \
asterisk-voicemail \
dahdi \
libpri \
asterisk-dahdi &>/dev/null
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to install Asterisk packages${NC}"
return 1
fi
# Install additional dependencies
echo -e "${YELLOW}Installing additional dependencies...${NC}"
apt-get install -y \
build-essential \
libssl-dev \
libxml2-dev \
libsqlite3-dev \
uuid-dev &>/dev/null
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to install additional dependencies${NC}"
return 1
fi
# Configure Asterisk
echo -e "${YELLOW}Configuring Asterisk...${NC}"
configure_asterisk_easy
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to configure Asterisk-Easy${NC}"
return 1
fi
# Start Asterisk service
echo -e "${YELLOW}Starting Asterisk service...${NC}"
systemctl enable asterisk
systemctl start asterisk
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to start Asterisk service${NC}"
return 1
fi
echo -e "${GREEN}✓ Asterisk-Easy installation completed successfully${NC}"
return 0
}
################################################################################
# Function: configure_asterisk_easy
# Description: Configure Asterisk-Easy with basic settings
# Parameters: None
# Returns: 0 on success, 1 on failure
################################################################################
configure_asterisk_easy() {
local asterisk_dir="/etc/asterisk"
# Check if Asterisk directory exists
if [ ! -d "$asterisk_dir" ]; then
echo -e "${RED}Asterisk configuration directory not found: $asterisk_dir${NC}"
return 1
fi
# Backup original configuration files
echo -e "${YELLOW}Backing up original Asterisk configuration...${NC}"
if [ -f "$asterisk_dir/extensions.conf" ]; then
cp "$asterisk_dir/extensions.conf" "$asterisk_dir/extensions.conf.bak.$(date +%s)"
fi
if [ -f "$asterisk_dir/sip.conf" ]; then
cp "$asterisk_dir/sip.conf" "$asterisk_dir/sip.conf.bak.$(date +%s)"
fi
# Create basic extensions configuration
echo -e "${YELLOW}Creating basic extensions configuration...${NC}"
create_extensions_conf "$asterisk_dir"
# Create basic SIP configuration
echo -e "${YELLOW}Creating basic SIP configuration...${NC}"
create_sip_conf "$asterisk_dir"
return 0
}
################################################################################
# Function: create_extensions_conf
# Description: Create basic extensions configuration file
# Parameters: $1 - Asterisk configuration directory
# Returns: 0 on success, 1 on failure
################################################################################
create_extensions_conf() {
local asterisk_dir="$1"
local extensions_file="$asterisk_dir/extensions.conf"
cat > "$extensions_file" << 'EOF'
[general]
static=yes
writeprotect=no
[default]
exten => 100,1,Dial(SIP/100)
exten => 100,n,Voicemail(100@default)
exten => 100,n,Hangup()
exten => 101,1,Dial(SIP/101)
exten => 101,n,Voicemail(101@default)
exten => 101,n,Hangup()
exten => 102,1,Dial(SIP/102)
exten => 102,n,Voicemail(102@default)
exten => 102,n,Hangup()
exten => 200,1,VoicemailMain(${CALLERID(num)}@default)
exten => 200,n,Hangup()
EOF
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to create extensions configuration${NC}"
return 1
fi
return 0
}
################################################################################
# Function: create_sip_conf
# Description: Create basic SIP configuration file
# Parameters: $1 - Asterisk configuration directory
# Returns: 0 on success, 1 on failure
################################################################################
create_sip_conf() {
local asterisk_dir="$1"
local sip_file="$asterisk_dir/sip.conf"
cat > "$sip_file" << 'EOF'
[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
pedantic=no
maxexpiry=3600
minexpiry=60
defaultexpiry=120
defaultexpirey=120
rtptimeout=30
rtpholdtimeout=300
videosupport=yes
allowtransfer=yes
nat=force_rport,comedia
[100]
type=friend
secret=123456
host=dynamic
context=default
[101]
type=friend
secret=123456
host=dynamic
context=default
[102]
type=friend
secret=123456
host=dynamic
context=default
EOF
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to create SIP configuration${NC}"
return 1
fi
return 0
}
################################################################################
# Function: verify_asterisk_easy
# Description: Verify Asterisk-Easy installation
# Parameters: None
# Returns: 0 if installed and running, 1 otherwise
################################################################################
verify_asterisk_easy() {
# Check if Asterisk is installed
if ! command -v asterisk &> /dev/null; then
echo -e "${RED}Asterisk is not installed${NC}"
return 1
fi
# Check if Asterisk service is running
if ! systemctl is-active --quiet asterisk; then
echo -e "${YELLOW}Asterisk service is not running${NC}"
return 1
fi
echo -e "${GREEN}✓ Asterisk-Easy is properly installed and running${NC}"
return 0
}
################################################################################
# Function: show_asterisk_easy_status
# Description: Display Asterisk-Easy status information
# Parameters: None
# Returns: 0 on success
################################################################################
show_asterisk_easy_status() {
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Asterisk-Easy Status${NC}"
echo -e "${BLUE}================================${NC}"
# Check service status
if systemctl is-active --quiet asterisk; then
echo -e "${GREEN}Service Status: Running${NC}"
else
echo -e "${RED}Service Status: Not Running${NC}"
fi
# Check Asterisk version
if command -v asterisk &> /dev/null; then
local version=$(asterisk -v | grep -oP 'Asterisk \K[0-9.]+')
echo -e "${BLUE}Asterisk Version: $version${NC}"
fi
# Check configuration files
if [ -f "/etc/asterisk/extensions.conf" ]; then
echo -e "${GREEN}✓ Extensions Configuration: Present${NC}"
else
echo -e "${RED}✗ Extensions Configuration: Missing${NC}"
fi
if [ -f "/etc/asterisk/sip.conf" ]; then
echo -e "${GREEN}✓ SIP Configuration: Present${NC}"
else
echo -e "${RED}✗ SIP Configuration: Missing${NC}"
fi
return 0
}
################################################################################
# Function: remove_asterisk_easy
# Description: Remove Asterisk-Easy installation
# Parameters: None
# Returns: 0 on success, 1 on failure
################################################################################
remove_asterisk_easy() {
echo -e "${YELLOW}Removing Asterisk-Easy...${NC}"
# Stop Asterisk service
systemctl stop asterisk
systemctl disable asterisk
# Remove Asterisk packages
apt-get remove -y asterisk asterisk-* &>/dev/null
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to remove Asterisk packages${NC}"
return 1
fi
echo -e "${GREEN}✓ Asterisk-Easy has been removed${NC}"
return 0
}
# Export functions for use in main script
export -f install_asterisk_easy
export -f configure_asterisk_easy
export -f verify_asterisk_easy
export -f show_asterisk_easy_status
export -f remove_asterisk_easy