Building Guide
How We Built It
We’ve been asked to provide details on how we built and Put together the SheevaPlug PlugPBX disk image.
While I have not had time to ‘write out’ this entire script, I’ve noted what steps and bugs I’ve found along the way below and how we got around them. Its not pretty in spots, and we hope to get some insight into some of the compiling dirty tricks we’ve used below.
The Majority of this is executable shell scripting in Linux, but don’t copy/paste this into a terminal and expect it to run.
Its really dirty. To be honest, we have two dreams. A pre-built disk image someone can flash and boot from, or a Shell Script that power users can run from a base Debian system in their Sheeva that will download, build, compile, install and configure their system.
We can’t do it alone, so please help out if you can fix/patch/improve what we’ve started below! Reach out to us, anyone who has kung fu we’ll happily give out access to alter content on the website!
Update: Read somewhere to Edit makeopts, find PROC=armv5tejl and change to PROC=arm, save and exit to have error free compilation of Asterisk…Have yet to try
#!/bin/bash # Asterisk/FreePBX Install Script for SheevaPlug / Debian # Re-Written By PlugPBX.org (admin@plugpbx.org) # # Most portions used from Stephen Brown's Debian Lenny Script - http://www.k1lnx.net/wiki/ # Other portinons from Dr. Peter N. Steinmetz - https://wiki.ubuntu.com/AsteriskScriptOnHardy?action=AttachFile&do=view&target=installZaptelAsteriskFreePBX_1.2.sh # Preston Moore - www.prestonmoore.com # # Must be run with superuser privileges. # # There is no error checking here, but it is known to work on a base sheeva plug install (debian squeeze) # # Install the Latest 'safe' version of Asterisk 1.6 (.1 seems safer .2 is too rich for my blood) # asterisk-1.6.1-current.tar.gz # asterisk-addons-1.6.1 # freepbx-2.5.2 (via wget) # libpri-1.4.10.1 (via wget) # dahdi/dahdi-tools (package dahdi-linux-complete) 2.2.0.2 # # If it Breaks, be sure to share fixes / updates # # "I'm gonna go build my own theme park! With blackjack and hookers! In fact, forget the park!" - Bender # script functions # random password generator function # this may not be the most secure method as it makes use of /dev/urandom but can generate random passwords nonethelessfunction passwd () { MYSQL_ROOT_PW=password ASTERISK_DB_PW=password ASTERISK_MGR_PW=password ARI_PW=password echo "# Make sure to keep these in a safe place!!!" > /root/passwords echo "MySQL root password is: $MYSQL_ROOT_PW" >> /root/passwords echo "Asterisk database password is: $ASTERISK_DB_PW" >> /root/passwords echo "Asterisk manager portal password is: $ASTERISK_MGR_PW" >> /root/passwords echo "ARI password is: $ARI_PW" >> /root/passwords echo "Random passwords generated..." } # yes/no function for script interaction function promptyn () { echo -n "$1 [y/N]? " read ANSWER if [ ! -z $ANSWER ] then if [ $ANSWER = Y ] || [ $ANSWER = y ] then ANSWER=Y else ANSWER=N fi else ANSWER=N fi } # password generation echo "Passwords for all applications will now be generated and placed in /root/passwords Please move or copy this file to a safe place!" echo "Press enter to continue: " ;read input passwd # ensure package directory up to date and system upgraded promptyn "Preparing to run package updates. Would you like to install the OpenSSH server and client?" if [ "$ANSWER" = "N" ] ; then echo "OpenSSH server will NOT be installed, press enter to continue" ;read input fi apt-get -y update apt-get -y dist-upgrade # variables IP_ADRESS=`ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` FREEPBX_VERSION=2.5.2 # retrieve utilities and set debconf to noninteractive front-end apt-get -y install debconf-utils debconf-set-selections < < /etc/init.d/asterisk < <-END_STARTUP #!/bin/bash set -e set -a PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="Asterisk" NAME=amportal DAEMON=/usr/sbin/\$NAME test -x \$DAEMON || exit 0 d_start() { amportal start } d_stop() { amportal stop } d_reload() { amportal restart } case "\$1" in start) echo -n "Starting \$DESC: \$NAME" d_start echo "." ;; stop) echo -n "Stopping \$DESC: \$NAME" d_stop echo "." ;; restart|force-reload) echo -n "Restarting \$DESC: \$NAME" d_stop sleep 10 d_start echo "." ;; *) echo "Usage: \$SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac exit 0 END_STARTUP chmod 755 /etc/init.d/asterisk update-rc.d asterisk defaults 90 10 # configure freepbx cd freepbx-${FREEPBX_VERSION} # setup databases for freepbx use mysqladmin -u root -p${MYSQL_ROOT_PW} create asterisk mysqladmin -u root -p${MYSQL_ROOT_PW} create asteriskcdrdb mysql -u root -p${MYSQL_ROOT_PW} asterisk < SQL/newinstall.sql mysql -u root -p${MYSQL_ROOT_PW} asteriskcdrdb < SQL/cdr_mysql_table.sql mysql -u root -p${MYSQL_ROOT_PW} <<-END_PRIVS GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY "${ASTERISK_DB_PW}"; GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY "${ASTERISK_DB_PW}"; flush privileges; END_PRIVS # reconfigure php for freepbx cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini-orig sed -i "s/\(upload_max_filesize *= *\)\(.*\)/\120M/" /etc/php5/apache2/php.ini sed -i "s/\(memory_limit *= *\)\(.*\)/\1100M/" /etc/php5/apache2/php.ini sed -i "s/\(magic_quotes_gpc *= *\)\(.*\)/\1Off/" /etc/php5/apache2/php.ini # fix up directory use and permissions for asterisk mkdir /var/run/asterisk chown asterisk:asterisk /var/run/asterisk chown asterisk:asterisk -R /etc/asterisk chown asterisk:asterisk -R /var/lib/asterisk # chmod a+x /var/lib/asterisk/bin/* chown asterisk:asterisk -R /var/log/asterisk chown asterisk:asterisk -R /var/spool/asterisk chown asterisk:asterisk -R /var/www sed -i "s/\[directories\](!) .*/[directories]/" /etc/asterisk/asterisk.conf sed -i "s|astrundir *=> */var/run|astrundir => /var/run/asterisk|" /etc/asterisk/asterisk.conf #fix mohmp3 mkdir /var/lib/asterisk/mohmp3 chmod 775 /var/lib/asterisk/mohmp3 chown asterisk:asterisk /var/lib/asterisk/mohmp3 # start asterisk ./start_asterisk start # configure amportal cp amportal.conf /etc/amportal.conf # Username should come before password in cdr_mysql.cof - seems to cause issues, you might have to manually edit after fact and invert entry order sed -i "s/# \(AMPDBUSER=asteriskuser\) */\1/" /etc/amportal.conf sed -i "s/# \(AMPDBPASS=\).*/\1${ASTERISK_DB_PW}/" /etc/amportal.conf sed -i "s|\(AMPWEBROOT=\)/var/www/html|\1/var/www|" /etc/amportal.conf sed -i "s|\(FOPWEBROOT=\)/var/www/html/panel|\1/var/www/panel|" /etc/amportal.conf #sed -i "/#AMPWEBADDRESS=/d" /etc/amportal.conf sed -i "s/AMPWEBADDRESS=/AMPWEBADDRESS=${IP_ADDRESS}/" /etc/amportal.conf #Fix corrupted Pear PHP Channels and Fault Symlink present in PHP 5.9+? #I found corrupted .channels and the bad symlink created by pear fucked over install DB module # Freshen Up PHP install apt-get remove php-pear apt-get install php-pear # Blow away bad channels and repair rm -f /usr/share/php/.channels pear update-channels #Fix the bad symlink rm -f /usr/share/php/doc ln -s /usr/share/doc/php-pear/ doc #Install the needed pear DB module for FreePBX Installer pear install DB cd /usr/src/freepbx-${FREEPBX_VERSION} # install amp ./install_amp # Fix Hold music screwup ??? cp /var/lib/asterisk/moh/*.wav /var/lib/asterisk/mohmp3/ # need to make SED statement to re-populate the hold music abs. path? # start apache web server /etc/init.d/apache2 restart # start amportal amportal start # set ARI admin password sed -i "s/ari_password/${ARI_PW}/" /var/www/recordings/includes/main.conf.php clear echo "Complete. You can access FreePBX at $IP_ADDRESS"
