Web App Packaging Notes

From Amahi Wiki
Jump to: navigation, search

Database Restore

  • Install Script:
# Check for backup of old version database
if [ -f /var/hda/dbs/latest-appname.bz2 ]; then
   # Import old version database
   bzcat latest-app.bz2 |mysql -uapp -papp app
else
   # Insert new version database
   mysql -uappname -pappname appname < appname.sql;
fi

NOTE: if statement switches are:

-d: directory
-f: file

App Start on Boot

  • Install Script:
/usr/bin/crontab -l > apache-crontab;
cat >> apache-crontab << 'EOF'
@reboot /var/hda/web-apps/appname/html/startup.sh
EOF
/usr/bin/crontab apache-crontab;
rm -rf apache-crontab;
  • Uninstall Script:
/usr/bin/crontab -l > apache-crontab;
sed -i '/appname/d' apache-crontab;
/usr/bin/crontab apache-crontab;
rm -rf apache-crontab;

Find and Rename .htaccess Files:

find . -name .htaccess -exec mv {} {}.tmp \;

Add Server (Service) Feature

  • Install Script (Fedora):
cat > installscript.sh << 'EOF'
install -m 755 appname /etc/init.d/;
/sbin/chkconfig appname on;
/sbin/service appname start;
EOF
chmod 755 installscript.sh;
sudo ./installscript.sh;
cd ..;
rm -rf elevated;
  • Install Script (Ubuntu):
cat > installscript.sh << 'EOF'
install -m 755 appname /etc/init.d/;
update-rc.d appname defaults;
service appname start;
EOF
chmod 755 installscript.sh;
sudo ./installscript.sh;
cd ..;
rm -rf elevated;
  • Uninstall Script (Fedora):
mkdir elevated;
cd elevated;
cat > uninstallscript.sh << 'EOF'
/sbin/service appname stop;
/sbin/chkconfig appname off;
rm -f /etc/init.d/appname;
EOF
chmod 755 uninstallscript.sh;
sudo ./uninstallscript.sh;
cd ..;
rm -rf elevated;
  • Uninstall Script (Ubuntu):
mkdir elevated;
cd elevated;
cat > uninstallscript.sh << 'EOF'
service appname stop;
update-rc.d -f appname remove;
rm -f /etc/init.d/appname;
EOF
chmod 755 uninstallscript.sh;
sudo ./uninstallscript.sh;
cd ..;
rm -rf elevated;
  • Change service run level, start, and stop priority:

Edit the service, i.e. /etc/init.d/adito and change the parameters (Run level: 0-6, start priority: 1-99, and stop priority: 1-99).

# chkconfig: 2345 56 26

Execute the following command as root user:

/sbin/chkconfig adito resetpriorities

Custom Webapp Options

Edit /etc/httpd/conf.d/####-appname.conf file (where #### is a 4 digit number). The web server will require restart to affect the changes.

  • Change PHP Settings (add below ServerAlias):
<Files *.php>
php_flag short_open_tag on
php_flag magic_quotes_gpc Off
php_flag magic_quotes_sybase Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
php_flag session.auto_start Off
php_flag suhosin.session.encrypt Off
php_value upload_max_filesize 20M
php_value post_max_size 100M
php_value max_execution_time 300
php_value zend.enable_gc off
</Files>
  • Apache mod_rewrite to allow use of .htaccess (replace similar lines above </Directory>):
Options Indexes FollowSymLinks +ExecCGI
AddHandler fcgid-script .fcg
AllowOverride FileInfo Limit Options Indexes
Order allow,deny
Allow from all
  • Redirect Webapp (add below ServerAlias):
ProxyPass / http://hda:10000/
ProxyPassReverse / http://hda:10000/
RedirectPermanent / http://hda:10000

Custom .htaccess File

  • Use of .htaccess for Webmin (requires Apache mod-rewrite step above):
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}:10000 [R,L]
  • Some Web-Applications/Frameworks come with a pre configured .htaccess file that is trying to set the AllowOverride Rule. This will result in the following error: .htaccess: AllowOverride not allowed here. Remove AllowOverride from the .htaccess file and add it to the Directory area in your web-app conf.d file that it looks somewhat like this:
Options Indexes FollowSymLinks +ExecCGI
AddHandler fcgid-script .fcg
AllowOveride FileInfo Limit Options Indexes
AllowOverride All
Order allow,deny
Allow from all

Special Instructions

  • Web Link Syntax:
<a href="http://www.google.com" target="_">Google</a>
  • User Log in:
The administrator login is:<br />
<blockquote>
<code>
Name:  admin<br />
Password:  admin<br />
<br />
</code>
</blockquote>

Scripted Functions

  • Fully Qualified Domain Name:
HSTNM=`hostname -f`
HST=`echo $HSTNM | awk -F'.' '{print $1}'`
GRP=`echo $HSTNM | awk -F'.' '{print $2}'`
DOM=`echo $HSTNM | awk -F'.' '{print $3}' | sed 's/\..*//'`
if [$DOM == '']; then
 DOMNM='home.com'
else
 DOMNM=$GRP'.'$DOM
fi
  • Arch (32- or 64-bit):
export ARCH=`getconf LONG_BIT`
if [  "$ARCH" = "64" ]; then
  # 64-bit
else
  # 32-bit
fi
  • HDA Domain Name:
export HDADOM=`cat /etc/resolv.conf | grep 'search' | awk '{ print $2 }'`;
  • HDA IP Address:
export HDAIP=`ifconfig eth0 | grep "inet addr" | awk '{ print $2 }' | awk 'BEGIN { FS=":" } { print $2 }'`;
  • First Admin User:
export FUSER=`/var/hda/platform/html/script/first-admin` 

or

export FUSER=$(echo "SELECT login FROM users WHERE admin=1 ORDER BY id ASC LIMIT 1" | mysql hda_production -uamahihda -pAmahiHDARulez -s)
  • Check OS Version:
export FVER=`cat /etc/fedora-release | awk -F'release ' '{print $2}' | sed 's/(Laughlin)//'`;
if [ $FVER == '14' ]; then
...
fi

or

export FVER=`cat /etc/fedora-release | awk -F'release ' '{print $2}' | sed 's/(Verne)//'`;
if [ $FVER == '16' ]; then
...
fi
  • Install Ubuntu (DEB) or Fedora (RPM) package
if [ -f /etc/fedora-release ]; then
yum localinstall -y package.rpm --nogpgcheck
fi
if [ -f /etc/lsb-release ]; then
dpkg -i package.deb
fi

Elevated Privileges (root)

  • Scripts can be run from /var/hda/web-apps/*/elevated, /var/hda/apps/*/elevated or /var/hda/elevated directories.
mkdir -p elevated;
cd elevated;
cat > my-elevated-script << 'EOF'
...commands which need elevated privileges...
EOF
chmod +x my-elevated-script;
sudo ./my-elevated-script;
cd ..;
rm -rf elevated;

Miscellaneous

  • Suppress Console Output
command &> /dev/null
  • Remove Blank Lines From File
sed -i '/^$/d' filename
  • Insert line based on text1 (Previous Line)
sed -i '/text1/ i\text2' /filename;
  • Patch Comment:
# FIXME - this needs to be hosted in dl.amahi.org prior to going live!
  • AmahiSync Web Link:
http://username.amahi.me/Public/filename
  • Patch Diff:
diff -r -N -b -u html.orig html > app-patch.diff
patch -s -p0 -E << 'EOF'
.... contents of app-patch.diff here ....
'EOF'
patch -p0 -E < app-patch.diff
  • Cat EOF:

with variables

cat > test << EOF
... text goes here ... 
EOF

and without variables

cat > test << 'EOF'
... text goes here ...
'EOF'
  • Run as First Admin User:
su $FUSER -c command
  • Redirect to specific URL (change url= to desired path (i.e. http://appname/appdirectory):
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Your Page Title</title>
<meta http-equiv="REFRESH" content="0;url=http://www.the-domain-you-want-to-redirect-to.com"></HEAD>
<BODY>
Optional page text here.
</BODY>
</HTML>' > html/index.html
chown apache:users html/index.html

Platform Services Feature

The server list is a list of service descriptions one per platform

  • Only one service is allowed per platform. Example: f14(sshd) u1204(ssh:sshd.pid)
  • No platform parenthesis means it applies to all platforms
  • Once exactly one service is picked based on the platform, it's the name of the service in that platform
  • Name is required, and it may be optionally followed by a pid file path
  • If:
    • file path does not start with / it's taken to be relative to /var/run/ (i.e. named/named.pid -> /var/run/named/named.pid)
    • pid file path starts with /, then it's used as is
    • no pid file path specified, then the pid file is assume to be /var/run/<name>.pid
    • does not exist, otherwise the platform will do a pgrep <name>
    • returns something, it's assumed it will be valid PIDs for that service
  • not that this is not recommended as pgrep may pick up other processes running by a name containing <name>, e.g., ssh-agent


NOTE: ONLY service name is supported Fedora 14, i.e. f14(sshd).