Asterisk Allstar Node Status and Control - hamvoip Allstar...Description I have created a simple...
Transcript of Asterisk Allstar Node Status and Control - hamvoip Allstar...Description I have created a simple...
Description
I have created a simple HTML form and Perl script to
display an Allstar nodes status in a html page. It also
optionally allows any valid Allstar command to be entered
for the given node. I call it 'lsnodes' and there is a version
that works in both command mode and as a web page
either locally or anywhere on the web. This is not
intended to be in competition with any other display
program out there but rather to be a simple script that
anyone with Perl and html/css knowledge can modify to
their own requirements.
The html form queries the node number and optionally a
command and sends them to a Perl script on the server.
This script takes the optional Allstar command and
executes it on the server and then displays status
information for the given node. This information is
refreshed at a one minute rate. The refresh rate as well
as what is displayed and how it is display on the returned
page can be changed by editing the Perl script.
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
1 of 20 1/30/2014 1:12 AM
If you follow the instructions on how to install this it
should work but I make no guarantees. This was a
learning experience for me and writing it in Perl makes
text manipulation straightforward and the resultant html
code clear. Certainly using jquery/ajax/php as was done
in Allmon makes for a much more powerful and capable
product but it is also hard for the average person to
understand and modify. My intent was something that
worked for me and was easy to modify. I present it here
for others to use, modify, etc. If anyone has ideas about
improvements feel free to make them or let me know
your desires and maybe I will implement them and make
updated code available. I have tested this code but the
only good test is when others use it in many different
environments. It plays well in Firefox and Chrome.
Windows Explorer is problematic. I don't use it and I
suspect most others don't either so I made no attempt to
make it work better. Consider this beta code and if you
have problems please let me know. I find it to be very
useful and I hope you do also.
Installation involves several steps and you must make
several changes to the system that are minor but involve
some knowledge of Linux, like how to edit and save files
and get about the directory structure. If you are not sure
of something I would be glad to answer any questions.
These instruction are for the Acid release in Centos.
Installation Steps
Install httpd
If you have already installed httpd to use the web
server on your Allstar server you can skip this step.
If you are not sure if you have httpd installed type
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
2 of 20 1/30/2014 1:12 AM
-
ls /var/www/html
If it returns files or nothing then you have httpd
installed and you can skip the httpd installation
steps below. If you get a no such file or directory
error then you do not have it installed and you
must complete the http installation steps.
httpd Installation Steps
First we download and install the httpd from the
repository.
yum install httpd
Answer yes to the question to install and if all goes
well it should tell you Complete!
We have to edit one line in the httpd.conf file to
specify a server name.
nano /etc/httpd/conf/httpd.conf
Find the line that defines the server name near the
end of the file and make it look like the example
below. If you don't have a dns name for your
server add the 127.0.0.1 IP address otherwise put
your domain name there.
# If your host doesn't have a registered DNS
name, enter its IP address here.
# You will have to access it by its address anyway,
and this will make
# redirections work in a sensible way.
#
ServerName 127.0.0.1:80
Now start the server, you should get no errors.
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
3 of 20 1/30/2014 1:12 AM
/usr/sbin/apachectl start
Now lets make it start at boot -
/sbin/chkconfig httpd on
and check runlevels it will start in. Runlevels
2,3,4,5 should be ON.
/sbin/chkconfig --list httpd
Which should look like this -
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
PHP Installation
If you have not installed the Allmon requirements
or you do not have PHP installed on your Allstar
server then you will need to install it. To test if it is
installed type -
php -v
If this returns the version like below then you can
skip the PHP installation steps. If it returns an error
then complete the PHP installation steps. The build
date and version does not need to be the same.
PHP 5.1.6 (cli) (built: Dec 10 2013 22:14:51)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend
Technologies
PHP Installation Steps
Install PHP
yum install php
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
4 of 20 1/30/2014 1:12 AM
Once installed it should show the version as above.
php -v
Download lsnodes files
Download the tarball and copy to to /var/www/html
and extract. This will create a /var/www
/html/lsnodes directory with the extracted files.
Download the tarball
or use wget on your Allstar computer.
cd /var/www/html
wget http://www.crompton.com/hamradio/allstar
/lsnodes-1.03.tgz
tar -xvzf lsnodes-1.03.tgz
This should create a directory under html called
lsnodes and untar the files there.
Database Setup
This Perl script lsnodes_web relies on the Allstar
database to display information about nodes. If you
are already using Allmon then the directory
/var/www/html/allmon probably exists and you
have a cron entry to update the local text file daily
The file which creates/accesses the database is
astdb.php This file creates a file called astdb.txt in
the same directory. It is updated by a crontab
entry once daily.
If you have Allmon installed the cron entry would
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
5 of 20 1/30/2014 1:12 AM
look like this -
03 03 * * * cd /var/www/html/allmon; ./astdb.php
This would update the astdb.txt file in /var/www
/html/allmon at 3:03 AM daily. The 03 03 can be
any hour and minute you desire.
In case you don't have Allmon installed (no
/var/www/html/allmon directory) I am including
the astdb.php file which gets the database. To
implement this method create the following cron
entry by editing using crontab -
crontab -e
04 37 * * * cd /var/www/html/lsnodes;
./astdb.php
Here we select the directory where the astdb.php
file was extracted. The time is completely random
and once a day.
The database needs to be initially created if you
have not installed Allmon To execute this file
manually just type the full path and name -
/var/www/html/lsnodes/astdb.php
This will create the astdb.txt file in the same
directory.
DO NOT access this file more than once daily in a
crontab. If you need to access it manually to see a
change you made that is fine but don't hammer the
server for no reason.
If you are not using the default Allmon astdb.php
directory you also need to change the entry for it in
the lsnodes_web Perl script. There is a note above
the line there.
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
6 of 20 1/30/2014 1:12 AM
The stock line in lsnodes_web looks like this and
would be used if you have Allmon installed.
# Specify the location of the Allstar database
#
my $allstardb = "/var/www/html/allmon
/astdb.txt";
if you don't have Allmon installed change it to this -
# Specify the location of the Allstar database
#
my $allstardb = "/var/www/html/lsnodes
/astdb.txt";
sudoers Setup
Now we need to change the sudoers execution
rights for Asterisk so we need to change the
permission on this file so we can edit it.
cd /etc
chmod 750 sudoers
Edit sudoers and add the three lines below starting
with Cmnd_Alias ASTERISK. Spelling and case is
important! Use your editor of choice.
nano sudoers
## Processes
#Cmnd_Alias PROCESSES = /bin/nice, /bin/kill,
/usr/bin/kill, /usr/bin/killall
Cmnd_Alias ASTERISK = /usr/sbin/asterisk,
/usr/bin/curl
User_Alias ADMINS = apache
ADMINS ALL = NOPASSWD: ASTERISK
Further down in the file the following line should be
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
7 of 20 1/30/2014 1:12 AM
commented out. Add a '#' before it as shown
below.
#Defaults requiretty
Now save the file
IMPORTANT! - the sudoers file must be returned to
440 permission to work!
chmod 440 sudoers
httpd Setup
Edit the httpd config file using vi, nano, or your
favorite editor.
nano /etc/httpd/conf/httpd.conf
If you want to change your http port for Allstar edit
the listen line to the port you would like to use or
leave it at the default 80. Shown below with default
value.
# Listen: Allows you to bind Apache to specific IP
addresses and/or
# ports, in addition to the default. See also the
# directive.
#
# Change this to Listen on specific IP addresses as
shown below to
# prevent Apache from glomming onto all bound IP
addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen 80
Further down in the file Make sure the cgi-bin
definition looks like this -
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
8 of 20 1/30/2014 1:12 AM
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews
+SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
If not change and save the file.
restart httpd
/etc/init.d/httpd restart
Final Setup
cd to the directory where the extracted lsnodes
files are located and mv the files.
cd /var/www/html/lsnodes
mv lsnodes_web /var/www/cgi-bin
Now lets test the command prompt lsnodes. Type
lsnodes followed by one of your local node
numbers.
./lsnodes yournode
You should see a listing of your currently connected
nodes and the info on each node.
Nodes connected to -
27225 WA3DSP 446.1 Simplex Richboro, PA
----------------------------------------------------------------
Node Call Description Location
----------------------------------------------------------------
28164 AE6TV IRLP 7227 Bridge Grand Terrace, Ca
28190 AE6TV Micro-Node SOCAL Hub Grand Terrace, CA
28194 AE6TV TEST Grand Terrace, CA
29971 WA3EZT 446.2 Jenkintown, PA
You can test the web Perl script at the command
prompt by executing it manually.
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
9 of 20 1/30/2014 1:12 AM
/var/www/cgi-bin/lsnodes_web
If there are no errors it will print out text that looks
like html code. If there are errors they have to be
resolved. This code may require that a couple of
Perl modules be loaded depending on your Perl
configuration. If that is the case the error message
will list the module. You then must go to the CPAN
search site - http://search.cpan.org/ and enter the
name of the module. You will then need to
download, untar, compile, and install it. The
README file explains how to do all that. You will
need to do this for each module that is required.
Once the required modules are loaded you should
see no errors and just html code print on the
screen. what you see won't make any sense but it
is important to not have any errors at this point.
Running lsnodes on the web
To execute the web form open your browser and
type -
http://<server-ip>:<server-port>/lsnodes
/lsnodes_form.html
Example -
if the IP address was 192.168.1.20 port 80 you do
not need to specify the port (80 is the default)
http://192.168.1.20/lsnodes/lsnodes_form.html
If the IP address was 192.168.0.50 port 15600
http://192.168.0.50:15600/lsnodes
/lsnodes_form.html
If accessing from outside your local lan substitute
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
10 of 20 1/30/2014 1:12 AM
your domain name for the IP address
http://mydomain.com:15600/lsnodes
/lsnodes_form.html
If you want external http access to the Allstar
server you must port forward in your router the
listen port you configured in httpd.conf. For just
local access this is not required.
Entering Data on the Form
Enter the local port you want to view in the node
block and submit
The status window for that node should display. To
select another node or to send a command select
the Search/Command link at the top.
You can open as many windows as you wish. I have
three nodes and keep three windows opened in
tabs in Firefox.
Be sure to bookmark the URL's so you don't have
retype at each session.
Security
If you are using this only locally in a secure
environment then you can disregard the following.
If the form page is available to the world unsecured
anyone who guesses the port and file name could
execute commands on your node. To make this
more secure put a password on the lsnodes
directory.
First edit /etc/httpd/conf/httdp.conf and find the
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
11 of 20 1/30/2014 1:12 AM
following lines. Comment out 'allowoverides none'
and add 'allowoverides authconfig' as shown below.
nano /etc/httpd/conf/httpd.conf
#
# AllowOverride controls what directives may be
placed in .htaccess files.
# It can be "All", "None", or any combination of the
keywords:
# Options FileInfo AuthConfig Limit
#
# AllowOverride None
AllowOverride AuthConfig
Save the file and restart httpd -
/etc/init.d/httpd restart
cd to the lsnodes directory - /var/www
/html/lsnodes
cd /var/www/html/lsnodes
create the file .htaccess -
nano .htaccess
Enter the following (add the user name you want to
use) -
AuthUserFile /the/full/path/.htpasswd
AuthGroupFile /www.null
AuthName "Authorization Required"
AuthType Basic
Require user YOURUSERNAME
Replace the full path with the path to where you
are putting the .htpasswd file This could be
anywhere you desire. I created a directory below
/etc/asterisk with my call letters where I put
personal stuff, scripts, etc. so I put it there.
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
12 of 20 1/30/2014 1:12 AM
In my case the first line looks like this -
AuthUserFile /etc/asterisk/wa3dsp/.htpasswd
Save the file in the directory you are in /var/www
/html/lsnodes
Now create the password file. Replace USERNAME
with your choice for username and change the
directory to the location you specified above in the
.htacess file.
htpasswd -c /etc/asterisk/wa3dsp/.htpasswd
USERNAME
It will then ask for a new password twice to confirm
and then write the encrypted file to the specified
directory.
You will now have to provide a username and
password to access the lsnodes form page. This is
only done once per session and if you desire you
can allow your browser to remember the password.
Error Checks
After running the code you should have no errors in
the httpd error log or the system messages log file.
To look type the following -
tail /var/log/messages
and...
tail /var/log/httpd/error_log
Each access will make an entry in the httpd access
log '/var/log/httpd/access_log' which is normal.
Over time this log will expand in size and you can
delete it if it becomes too large. This should not be
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
13 of 20 1/30/2014 1:12 AM
a problem with today's large hard drives but I
wanted you to be aware of that. The httpd access
entries from lsnodes will look similar to this -
71.58.53.255 - - [04/Jan/2014:00:29:49 -0500]
"GET /cgi-bin/lsnodes_web?node=27225 HTTP/1.1"
200 6190 "-" "Mozilla/5.0 (Windows NT 6.1;
WOW64; rv:26.0) Gecko/20100101 Firefox/26.0"
Each access will also show up in the Asterisk client
as a UNIX connection/disconnection in the CLI
which is normal. If this bothers you setting the
verbosity to 1 will stop the display of these
messages. Also when entering the CLI only use one
'v' - asterisk -rv
WA3DSP_Allstar*CLI> core set verbose 1
Verbosity is at least 1
Screenshots
Screenshot in Firefox of node 27225. At the top the update time
and public IP address are shown as well as link to a graphical
display of connections and a link to change the displayed node or
send a command.On the left are status details about the node. To
the right is the connected node list with a list of nodes directly
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
14 of 20 1/30/2014 1:12 AM
connected to this node below. The bottom list is local nodes and
their registration status.
An example of what happens if the node list is longer than the
screen height. The bar on the right appears and allows you to
move the column up and view data previously off the screen
Another screenshot in Firefox of node 29014
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
15 of 20 1/30/2014 1:12 AM
This screenshoot shows the addition of EchoLink node call
identification. This requires the addition of EchoLink to your
server.
Another shot showing EchoLink and IRLP
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
16 of 20 1/30/2014 1:12 AM
The data entry form. This shows sending a command to connect
to node 29332 from local node 27225. If the command was blank
it would just show status for the local node.
Displaying EchoLink Nodes
The code will display EchoLink nodes but will show
no info unless you have EchoLink installed on your
server and you are using the EchoLink version of
lsnodes_web. Version 1.01 or later. Installing
EchoLink is easy. Copy the echolink.conf file to the
/etc/asterisk directory and change the settings to
match your nodes, names, passwords, station
parameters, etc. The best way is to use a spare
Allstar node not connected to any radio and set it
up as 'rxchannel=Zap/pseudo' in the stanza for the
dedicated EchoLink node in rpt.cont. Restart and
you should have the echolink command in the CLI.
If all is working well you should be able to see your
own node. Attach other Allstar nodes to the
EchoLink Allstar node as desired.
EchoLink allows three callsign variations in my case
I have each of WA3DSP, WA3DSP-L, and
WA3DSP-R registered BUT like IRLP you can only
use one call and its assigned node per public IP
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
17 of 20 1/30/2014 1:12 AM
address. So the one Windows computer where you
might use EchoLink would have the two UDP ports
forwarded to it from your router. In that case you
could not use Allstar to connect to or accept
connections from another EchoLink site. You could
however setup Allstar EchoLink as above and use it
just to download the EchoLink node list for call
lookups in lsnodes. Making it fully EchoLink
functional would require forwarding the two
EchoLink UDP ports to the Allstar server which
would then disable EchoLink communications on
the Windows computer. So you need to make some
choices unless you have multiple public IP's. In my
case I don't use EchoLink in Windows so I have it
permanently connected to my Allstar server. More
information on EchoLink can be found at
www.echolink.org and at the Asterisk app_rpt
Knowledge-base.
cp /usr/src/astsrc/configs/examples/echolink
/echolink.conf /etc/asterisk
cd /etc/asterisk
nano echolink.conf
Check your node lookup in CLI by node number.
WA3DSP_Allstar*CLI> echolink dbget n 147090
147090|WA3DSP-L|50.191.8.33
or to look up a call (call must be uppercase and
exact)
WA3DSP_Allstar*CLI> echolink dbget c WA3DSP-L
147090|WA3DSP-L|50.191.8.33
A good place to check the EchoLink database is
www.repeaterbook.com/repeaters/echolink
/index.php
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
18 of 20 1/30/2014 1:12 AM
Private Nodes
Data for private nodes (<2000) can be stored in
the file "privatenodes.txt" located in the same
directory as the astdb.php file. The format for this
file is the following:
27225|WA3DSP|446.1 Simplex|Richboro, PA
The format is node, call, description, location
separated by a vertical bar. This is strictly local and
it is tacked onto the end of the master database on
your system. Other than the node all other info
does not have to conform to call, description,
location but should be limited to the number of
characters for that field. Note that changing the
"privatenodes.txt" file will not update the local
database until the "astdb.php" file is run.
Revision History
Version 1.0 - First edition
Version 1.01 - Added Echolink display of calls
Version 1.02 - Corrected display of private nodes
and added 80K range node labelling
Version 1.03 - Fixed bug in Echolink display -
should display all node numbers if data exists.
Customizing the code
All of the code for the local command prompt
display resides in the file 'lsnodes' and for the web
display in 'lsnodes_web'. If you understand Perl
and HTML/CSS coding then feel free to make
changes. In particular you might have color,
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
19 of 20 1/30/2014 1:12 AM
refresh time, or layout preferences. This code is
just an example of one method of sending
commands to Asterisk from a web page and
displaying the results. I hope it is useful to you in
some way.
My email is good at QRZ. 73, Doug, WA3DSP
View this page as a PDF
This page last updated 1/29/2014
© 2014 - WA3DSP
Asterisk Allstar Node Status and Control http://crompton.com/hamradio/allstar/lsnodes.html
20 of 20 1/30/2014 1:12 AM