Web App Packaging Notes
From Amahi Wiki
Revision as of 09:19, 23 March 2013 by Cpg (talk | contribs) (Changed protection level for "Web App Packaging Notes" ([edit=sysop] (indefinite) [move=sysop] (indefinite)))
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:
<Directory "<your path"> Options Indexes FollowSymLinks +ExecCGI AddHandler fcgid-script .fcg AllowOveride FileInfo Limit Options Indexes AllowOverride All Order allow,deny Allow from all </Directory>
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
- Netboot App Template
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).