tag:blogger.com,1999:blog-15425323283561097962024-02-22T05:03:18.741-08:00WHOI Argo Database Development BlogDocumenting the ongoing development of the WHOI Argo Database, a tool to facilitate tracking, monitoring, and quality control of WHOI instruments deployed as part of the Argo programAlexander K. Ekholmhttp://www.blogger.com/profile/17433665123299170706noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-1542532328356109796.post-58947056236139076992012-06-18T09:02:00.002-07:002012-06-18T09:04:02.998-07:00Solo - ARGOS & Iridium ListingsSolo ARGOS and Iridium listings are being added to the Argo Database. The Solo Listing pages are available <a href="http://argoweb.whoi.edu/argo_database_web/solo/">here</a>. Read more below for details on the ARGOS and Iridium listing pages...<br />
<br />
<a name='more'></a><br />
<h3>
ARGOS Listings</h3>
<div>
Here is an example of the ARGOS listings summary table.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRVm_hmThgwZ6VVjf41ebPbNVlSNSkWGAAmTQ806x6E1Ns5NTOi-VPROjUdV-UIkZzw8hGwTxYT6r2qmRzcInxWHBbO0xVGzpV5mB-BxP1cbLzEYMF1Ho0Qq-LjuYx1MEKeSocV3VxkWJi/s1600/argos_summary.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRVm_hmThgwZ6VVjf41ebPbNVlSNSkWGAAmTQ806x6E1Ns5NTOi-VPROjUdV-UIkZzw8hGwTxYT6r2qmRzcInxWHBbO0xVGzpV5mB-BxP1cbLzEYMF1Ho0Qq-LjuYx1MEKeSocV3VxkWJi/s320/argos_summary.png" title="ARGOS Listings Summary Table" width="320" /></a></div>
<div>
Individual listings are viewable. Several fields are parsed from the listing files including:</div>
<div>
<ul>
<li><span style="background-color: white;"> # messages</span></li>
<li><span style="background-color: white;">first & last surface positions</span></li>
<li><span style="background-color: white;">hex dump of the messsage</span></li>
<li><span style="background-color: white;">engineering data</span></li>
<li><span style="background-color: white;">drift data</span></li>
<li><span style="background-color: white;">profile data (if any)</span></li>
</ul>
<div>
Additionally, original/source listing files are available for download from this page.</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgskjlVbukpgdUEXmrG0fejuGU_GKyMNzSWTx2zrRlR02To9NZCIuRmX36-VSjE63IOPX0FB1G4YCsD94yMSaSg2UrrFbMi5Rn2R7opWB5UpcnWXett-FG0Fk05Obt0xfuL6oqtylnGpkGZ/s1600/argos_listing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgskjlVbukpgdUEXmrG0fejuGU_GKyMNzSWTx2zrRlR02To9NZCIuRmX36-VSjE63IOPX0FB1G4YCsD94yMSaSg2UrrFbMi5Rn2R7opWB5UpcnWXett-FG0Fk05Obt0xfuL6oqtylnGpkGZ/s320/argos_listing.png" width="316" /></a></div>
<div>
<br /></div>
<div>
<h3>
Iridium Listings</h3>
</div>
<div>
Iridium listing pages are currently under development.</div>
<div>
<br /></div>Alexander K. Ekholmhttp://www.blogger.com/profile/17433665123299170706noreply@blogger.com0tag:blogger.com,1999:blog-1542532328356109796.post-14446090706266639552012-06-07T05:13:00.000-07:002012-06-14T09:23:44.766-07:00Solo-II PagesThe Solo-II pages are intended to facilitate management of and communication with the new Solo-II Argo Floats. The following provides some description of the Solo-II pages and planned development.<br />
<br />
<h3>
Features &Functionality</h3>
<div>
The following features are currently implemented in the Solo-II pages:</div>
<div>
<ul>
<li>Summary and overview pages for all known Solo-II floats</li>
<li>Solo-II Listings</li>
<ul>
<li>browsable section for each float</li>
<li>automated calculation of next anticipated surfacing based on previous surfacing time and previous cycle length</li>
<li>original/source listings files available for download</li>
</ul>
<li>Reported Mission Parameters</li>
<ul>
<li>browsable section for each set of reported parameters</li>
<li>simple web form for modifying and uploading reported mission parameters
</li>
<li>automated parsing of parameter files (.param) to get reported mission parameters</li>
<li>original/source parameter files available for download
</li>
</ul>
<li>Upload/Queue Mission Parameters</li>
<ul>
<li>browsable history of all uploaded & queued mission parameters</li>
<li>simple web form for generating and uploading mission parameters</li>
<li>automated SBD file creation, as a result of web form submission</li>
<li>automated uploading of SBD file via email to Iridium</li>
<li>automated user confirmation email generation</li>
</ul>
</ul>
<div>
The following features are currently under development, or are scheduled for development in the near future:</div>
</div>
<div>
<ul>
<li>Upload/Queue Mission Parameters</li>
<ul>
<li>user scheduling (specific date/time) of mission parameters upload</li>
<li>automated scheduling of mission parameters upload, such that the upload occurs in a 5-day window before the floats next anticipated surfacing</li>
<li>saving of sets of mission parameters to facilitate repeat uploads of the parameters to multiple floats</li>
<li>batch uploading of mission parameters</li>
</ul>
<li>Browsable section for other relevant files/information</li>
<ul>
<li>mail messages</li>
<li>.phy files</li>
</ul>
</ul>
</div>
<h3>
Page Descriptions </h3>
<ul>
<li><a href="http://argoweb.whoi.edu/argo_database_web/solo2/solo2.html">Home</a></li>
<ul>
<li>summary table of all known Solo-II floats</li>
</ul>
<li><a href="http://argoweb.whoi.edu/argo_database_web/solo2/solo2.html?listing">Listings</a></li>
<ul>
<li>all processed Solo-II Iridium listings</li>
<li>listing files (.lis) are available for download here</li>
</ul>
<li><a href="http://argoweb.whoi.edu/argo_database_web/solo2/solo2.html?queue">Queued Mission Parameters</a></li>
<ul>
<li>mission parameters that have been queued for upload or have been uploaded</li>
</ul>
<li><a href="http://argoweb.whoi.edu/argo_database_web/solo2/solo2.html?reported">Reported Mission Parameters</a></li>
<ul>
<li>all reported Solo-II mission parameters</li>
<li>parameter files (.param) corresponding to reported mission parameters are available for download here</li>
<li>web form modification & re-submission of reported mission parameters</li>
</ul>
<li>Saved Mission Parameters (under construction)</li>
<ul>
<li>saved Solo-II mission parameters </li>
<li>can be used to upload the same commands to multiple floats</li>
</ul>
<li><a href="http://argoweb.whoi.edu/argo_database_web/solo2/solo2.html?upload">Upload Mission Parameters</a> </li>
<ul>
<li>web form for mission parameter generation & uploading</li>
</ul>
</ul>Alexander K. Ekholmhttp://www.blogger.com/profile/17433665123299170706noreply@blogger.com1tag:blogger.com,1999:blog-1542532328356109796.post-18727434335689545842012-04-27T14:05:00.000-07:002012-05-17T10:25:34.771-07:00A New HomeThe Argo Database web application is getting a new home at <a href="http://argoweb.whoi.edu/">argoweb.whoi.edu</a>! This post documents the changes made to Argoweb.<br />
<h3>
Changes to Argoweb</h3>
Installation of MySQL Database and Apache Tomcat was accomplished using a custom bash shell script to download, unzip, compile the applications from source. The following changes were made to argoweb:<br />
<ul>
<li>added groups 'argoweb', 'mysql', and 'tomcat'</li>
<li>added users 'argoweb', 'mysql', and 'tomcat'</li>
<li>removed:</li>
<ul>
<li>apache2 (replaced by Tomcat)</li>
</ul>
<li>installed:</li>
<ul>
<li>vim </li>
<li>openjdk 6</li>
<li>g++ 4.4</li>
<li>MySQL 5.1</li>
<li><strike>Apache Tomcat 6</strike> Apache Tomcat 7 </li>
<ul>
<li>Note: Tomcat 6 does not support the latest version of Java. Tomcat 7, however, is not natively supported by Debian so it must be installed from source.</li>
</ul>
</ul>
<li>used iptables to route incoming traffic on port 80 to the Tomcat server:</li>
</ul>
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"></span><br />
<span style="color: #666666; font-family: 'Courier New', Courier, monospace;">root@argoweb:/etc/tomcat6# iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080<br />root@argoweb:/etc/tomcat6# iptables-save<br /># Generated by iptables-save v1.4.8 on Thu May 3 05:31:30 2012<br />*nat<br />:PREROUTING ACCEPT [53:7910]<br />:POSTROUTING ACCEPT [2:191]<br />:OUTPUT ACCEPT [2:191]<br />-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080<br />COMMIT<br /># Completed on Thu May 3 05:31:30 2012</span><br />
<ul>
<li>performed dump of previous database :</li>
</ul>
<span style="color: #666666; font-family: 'Courier New', Courier, monospace;">mysqldump -u root -p --databases floats > argoweb_dump.sql</span><br />
<ul>
<li>used sql file to populate Argoweb database</li>
<li>deployed the Argo Database application on the Tomcat server</li>
<li>created a script to mirror some directories from Ursa to ArgoWeb (/usr/local/bin/ursa-volume-sync):</li>
<ul>
<li>ursa:/Volumes/U1/argo -> argoweb:/data/Volumes/U1/argo</li>
<li>ursa:/Volumes/U2 -> argoweb:/data/Volumes/U2</li>
<li>cron'd to run twice daily. After the initial transfer, this script has completed in under 10 minutes, without any major changes to files on Ursa. After an update to the GDAC, it may take significantly longer.</li>
</ul>
</ul>
<div>
<a name='more'></a>The following script was used to install MySQL database and Apache Tomcat from source:<br />
<br />
<br /></div>
<style type="text/css">
<!--
/**
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
*/
.bash .de1, .bash .de2 {font: normal normal 12px monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;}
.bash {font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;}
.bash a:link {color: #000060;}
.bash a:hover {background-color: #f0f000;}
.bash .imp {font-weight: bold; color: red;}
.bash li, .bash .li1 {font-weight: normal; vertical-align:top; font: normal normal 9px; 'Courier New', Courier, monospace; color: #003030;}
.bash .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.bash .li2 {font-weight: bold; vertical-align:top;font-weight: bold; color: #006060;}
.bash .kw1 {color: #000000; font-weight: bold;}
.bash .kw2 {color: #c20cb9; font-weight: bold;}
.bash .kw3 {color: #7a0874; font-weight: bold;}
.bash .co0 {color: #666666; font-style: italic;}
.bash .co1 {color: #800000;}
.bash .co2 {color: #cc0000; font-style: italic;}
.bash .co3 {color: #000000; font-weight: bold;}
.bash .es1 {color: #000099; font-weight: bold;}
.bash .es2 {color: #007800;}
.bash .es3 {color: #007800;}
.bash .es4 {color: #007800;}
.bash .es5 {color: #780078;}
.bash .es_h {color: #000099; font-weight: bold;}
.bash .br0 {color: #7a0874; font-weight: bold;}
.bash .sy0 {color: #000000; font-weight: bold;}
.bash .st0 {color: #ff0000;}
.bash .st_h {color: #ff0000;}
.bash .nu0 {color: #000000;}
.bash .re0 {color: #007800;}
.bash .re1 {color: #007800;}
.bash .re2 {color: #007800;}
.bash .re4 {color: #007800;}
.bash .re5 {color: #660033;}
.bash span.xtra { display:block; }
--!>
</style>
<br />
<div class="bash">
<ol>
<li class="li1"><div class="de1">
<span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># MYSQL AND APACHE TOMCAT INSTALL SCRIPT #</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># AUTHOR</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Alex Ekholm, aekholm@whoi.edu, Woods Hole Oceanographic Institution</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># CREATED</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Fri Apr 27, 2012</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># NOTES</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># - This script can be used to automate installation of the following applications from source: </span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># 1) MySQL 5.1.62</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># 2) Apache Tomcat 7.0.27</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># - Will attempt to download source code automatically if not present.</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># REQUIREMENTS</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># - Must be run as root user</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># - wget, getopts, gcc, g++, make, ant</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># CONFIGURATION #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Relevent files, directories, and other misc. install options are specified here.</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># MySQL configuration</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">mysql_home</span>=<span class="st0">"/home/mysql"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">mysql_prefix</span>=<span class="st0">"/usr/share/mysql"</span></div>
</li>
<li class="li2"><div class="de2">
<span class="re2">mysql_dir</span>=<span class="st0">"<span class="es2">$mysql_prefix</span>/mysql-5.1.62"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">mysql_tar</span>=<span class="st0">"<span class="es2">$mysql_dir</span>.tar.gz"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">mysql_config_opts</span>=<span class="st0">"--prefix=<span class="es2">$mysql_prefix</span>"</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Apache Tomcat configuration</span></div>
</li>
<li class="li2"><div class="de2">
<span class="re2">tomcat_home</span>=<span class="st0">"/home/tomcat"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">tomcat_dir</span>=<span class="st0">"./tomcat/apache-tomcat-7.0.27-src"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">tomcat_tar</span>=<span class="st0">"<span class="es2">$tomcat_dir</span>.tar.gz"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">tomcat_prefix</span>=<span class="st0">"/usr/share/tomcat7"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">tomcat_config_opts</span>=<span class="st0">"base.path=<span class="es2">$tomcat_prefix</span>"</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># tar options</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">TAROPTS</span>=<span class="st0">"-xzf"</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># debug - set DEBUG=1 to display debug info </span></div>
</li>
<li class="li2"><div class="de2">
<span class="re2">_DEBUG</span>=<span class="nu0">0</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># verbose operation </span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">VERBOSE</span>=<span class="re1">$_DEBUG</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># working dir - default is current dir</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">src_dir</span>=<span class="st0">"/usr/local/src"</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># mirrors</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">mysql_mirrors</span>=<span class="br0">(</span></div>
</li>
<li class="li2"><div class="de2">
<span class="st0">"http://mysql.he.net/Downloads/MySQL-5.1/mysql-5.1.62.tar.gz"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="st0">"http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.62.tar.gz"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="st0">"http://mirror.services.wisc.edu/mysql/Downloads/MySQL-5.1/mysql-5.1.62.tar.gz"</span><span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">tomcat_mirrors</span>=<span class="br0">(</span></div>
</li>
<li class="li1"><div class="de1">
<span class="st0">"http://www.fightrice.com/mirrors/apache/tomcat/tomcat-7/v7.0.27/src/apache-tomcat-7.0.27-src.tar.gz"</span></div>
</li>
<li class="li2"><div class="de2">
<span class="st0">"http://mirrors.ibiblio.org/apache/tomcat/tomcat-7/v7.0.27/src/apache-tomcat-7.0.27-src.tar.gz"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="st0">"http://mirror.candidhosting.com/pub/apache/tomcat/tomcat-7/v7.0.27/src/apache-tomcat-7.0.27-src.tar.gz"</span><span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># INSTALL MYSQL DATABASE #</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> install_mysql <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># check directory</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="st0">"mysql"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">mkdir</span> mysql</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># download source if necessary</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Download MySQL source?"</span> Y <span class="sy0">&&</span> <span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$mysql_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># try each mirror until success</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">for</span> mirror <span class="kw1">in</span> <span class="st0">"<span class="es3">${mysql_mirrors[@]}</span>"</span>; <span class="kw1">do</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># download source</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">WGETOPTS</span>=<span class="st0">"-P mysql <span class="es2">$mirror</span>"</span></div>
</li>
<li class="li1"><div class="de1">
dbg <span class="st0">"executing wget: 'wget <span class="es2">$WGETOPTS</span>'"</span> </div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">wget</span> <span class="re1">$VOPT</span> <span class="re1">$WGETOPTS</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$mysql_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span> <span class="kw3">break</span>; <span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">done</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># check</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$mysql_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span> </div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">echo</span> <span class="st0">"Failed to download MySQL source: <span class="es2">$mysql_tar</span>"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">exit</span> <span class="nu0">1</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># create group</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Create group 'mysql'?"</span> Y <span class="sy0">&&</span> groupadd mysql</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># create user</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Create user 'mysql'?"</span> Y <span class="sy0">&&</span> useradd <span class="re5">-b</span> <span class="re1">$mysql_home</span> \</div>
</li>
<li class="li1"><div class="de1">
<span class="re5">-d</span> <span class="re1">$mysql_home</span> \</div>
</li>
<li class="li1"><div class="de1">
<span class="re5">-g</span> mysql \</div>
</li>
<li class="li1"><div class="de1">
mysql</div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># unzip</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Unzip MySQL database?"</span> Y <span class="sy0">&&</span> <span class="kw2">tar</span> <span class="re1">$TAROPTS</span> <span class="re1">$mysql_tar</span> <span class="re5">-C</span> mysql</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># change to mysql dir</span></div>
</li>
<li class="li2"><div class="de2">
chdir <span class="re1">$mysql_dir</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># configure</span></div>
</li>
<li class="li1"><div class="de1">
verbose <span class="st0">"MySQL Configuration options: '<span class="es2">$mysql_config_opts</span>'"</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Configure MySQL?"</span> Y <span class="sy0">&&</span> .<span class="sy0">/</span>configure <span class="re1">$mysql_config_opts</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># compile</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Make clean?"</span> Y <span class="sy0">&&</span> <span class="kw2">make</span> clean</div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Compile MySQL?"</span> Y <span class="sy0">&&</span> <span class="kw2">make</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Compile MySQL installation modules?"</span> Y <span class="sy0">&&</span> <span class="kw2">make</span> <span class="kw2">install</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># postinstallation setup</span></div>
</li>
<li class="li1"><div class="de1">
chdir <span class="re1">$mysql_prefix</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> <span class="re5">-R</span> mysql .</div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chgrp</span> <span class="re5">-R</span> mysql .</div>
</li>
<li class="li2"><div class="de2">
ask <span class="st0">"Install MySQL?"</span> Y <span class="sy0">&&</span> .<span class="sy0">/</span>bin<span class="sy0">/</span>mysql_install_db <span class="re5">--user</span>=mysql <span class="re5">--basedir</span>=<span class="re1">$mysql_prefix</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> <span class="re5">-R</span> root .</div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> <span class="re5">-R</span> mysql var</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># optional </span></div>
</li>
<li class="li2"><div class="de2">
ask <span class="st0">"Copy support files?"</span> N <span class="sy0">&&</span> <span class="kw2">cp</span> support-files<span class="sy0">/</span>my-medium.cnf <span class="sy0">/</span>etc<span class="sy0">/</span>my.cnf</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># start mysql daemon</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> ask <span class="st0">"Start MySQL daemon?"</span> Y ; <span class="kw1">then</span> </div>
</li>
<li class="li1"><div class="de1">
.<span class="sy0">/</span>bin<span class="sy0">/</span>mysqld_safe <span class="re5">--user</span>=mysql <span class="re5">--basedir</span>=<span class="re1">$mysql_prefix</span> <span class="sy0">&</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># return to root dir</span></div>
</li>
<li class="li1"><div class="de1">
chdir <span class="re1">$src_dir</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="br0">}</span> <span class="co0"># install_mysql</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># INSTALL APACHE TOMCAT #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">function</span> install_tomcat <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># check directory</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="st0">"tomcat"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">mkdir</span> tomcat</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># download source if necessary</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Download Apache Tomcat source?"</span> Y <span class="sy0">&&</span> <span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$tomcat_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># try each mirror until success</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">for</span> mirror <span class="kw1">in</span> <span class="st0">"<span class="es3">${tomcat_mirrors[@]}</span>"</span>; <span class="kw1">do</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># download source</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">WGETOPTS</span>=<span class="st0">"<span class="es2">$VOPT</span> -P tomcat <span class="es2">$mirror</span>"</span></div>
</li>
<li class="li1"><div class="de1">
dbg <span class="st0">"wget <span class="es2">$WGETOPTS</span>"</span> </div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">wget</span> <span class="re1">$WGETOPTS</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">if</span> <span class="br0">[</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$tomcat_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span> <span class="kw3">break</span>; <span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">done</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># check</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-f</span> <span class="st0">"<span class="es2">$tomcat_tar</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span> </div>
</li>
<li class="li2"><div class="de2">
<span class="kw3">echo</span> <span class="st0">"Failed to download Apache Tomcat source: <span class="es2">$tomcat_tar</span>"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">exit</span> <span class="nu0">1</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># create group</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Create group 'tomcat'?"</span> Y <span class="sy0">&&</span> groupadd tomcat</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># create user</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Create user 'tomcat'?"</span> Y <span class="sy0">&&</span> useradd <span class="re5">-b</span> <span class="re1">$tomcat_home</span> \</div>
</li>
<li class="li2"><div class="de2">
<span class="re5">-d</span> <span class="re1">$tomcat_home</span> \</div>
</li>
<li class="li1"><div class="de1">
<span class="re5">-g</span> tomcat \</div>
</li>
<li class="li1"><div class="de1">
tomcat</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># unzip</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Unzip Apache Tomcat Server?"</span> Y <span class="sy0">&&</span> <span class="kw2">tar</span> <span class="re1">$TAROPTS</span> <span class="re1">$tomcat_tar</span> <span class="re5">-C</span> tomcat</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># change to tomcat dir</span></div>
</li>
<li class="li1"><div class="de1">
chdir <span class="re1">$tomcat_dir</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># configure tomcat</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># cd echo "$tomcat_config_opts" > build.properties</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># compile tomcat</span></div>
</li>
<li class="li2"><div class="de2">
ask <span class="st0">"Compile Apache Tomcat Server from source?"</span> Y <span class="sy0">&&</span> ant</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># create directories</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> ask <span class="st0">"Create directory structure?"</span> Y ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /var/lib</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7 <span class="br0">]</span> ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">mkdir</span> <span class="re5">-p</span> <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>common<span class="sy0">/</span>classes \</div>
</li>
<li class="li1"><div class="de1">
<span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>server<span class="sy0">/</span>classes \</div>
</li>
<li class="li1"><div class="de1">
<span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>shared<span class="sy0">/</span>classes</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /var/log</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>tomcat7 <span class="br0">]</span> ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">mkdir</span> <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>tomcat7</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /var/cache</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="sy0">/</span>var<span class="sy0">/</span>cache<span class="sy0">/</span>tomcat7 <span class="br0">]</span> ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">mkdir</span> <span class="sy0">/</span>var<span class="sy0">/</span>cache<span class="sy0">/</span>tomcat7</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /etc - conf</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7 <span class="br0">]</span> ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">mkdir</span> <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># copy compiled files</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> ask <span class="st0">"Copy compiled files to install directory?"</span> Y ; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /usr/share/</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">cp</span> <span class="re5">-r</span> output<span class="sy0">/</span>build<span class="sy0">/</span>bin <span class="re1">$tomcat_prefix</span><span class="sy0">/</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">cp</span> <span class="re5">-r</span> output<span class="sy0">/</span>build<span class="sy0">/</span>lib <span class="re1">$tomcat_prefix</span><span class="sy0">/</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /etc</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">cp</span> <span class="re5">-r</span> output<span class="sy0">/</span>build<span class="sy0">/</span>conf<span class="sy0">/*</span> <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7</div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># /var/lib</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">cp</span> <span class="re5">-r</span> output<span class="sy0">/</span>build<span class="sy0">/</span>webapps <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>webapps</div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">ln</span> <span class="re5">-s</span> <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7 <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>conf</div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">ln</span> <span class="re5">-s</span> <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>tomcat7 <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>logs</div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">ln</span> <span class="re5">-s</span> <span class="sy0">/</span>var<span class="sy0">/</span>cache<span class="sy0">/</span>tomcat7 <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7<span class="sy0">/</span>work</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># permissions</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chgrp</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">chown</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chgrp</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>cache<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chgrp</span> tomcat <span class="sy0">/</span>var<span class="sy0">/</span>cache<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> tomcat <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw2">chgrp</span> tomcat <span class="sy0">/</span>etc<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chown</span> tomcat <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">chgrp</span> tomcat <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>tomcat7 <span class="re5">-R</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># return </span></div>
</li>
<li class="li1"><div class="de1">
chdir <span class="re1">$src_dir</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="br0">}</span> <span class="co0"># install_tomcat</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># PROMPT FUNCTION #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># USAGE</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># (long version)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># if [ ask "<prompt>" <optional-default> ]; then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># # Control will enter here if yes</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># fi</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># (short version)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># ask "<prompt>" && <command-to-exec-if-yes></span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># ask "<prompt>" <default> && <command-to-exec-if-yes></span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># ask "<prompt>" <default> || <command-to-exec-if-no></span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># </span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># EXAMPLE</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># ask "Install MySQL database?" Y && install_mysql</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># RETURN VALUE</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># 0 if user responds YES </span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># 1 if user responds NO </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">#</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> ask <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">while</span> <span class="kw2">true</span>; <span class="kw1">do</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># Assign prompt and default</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"<span class="es3">${2:-}</span>"</span> = <span class="st0">"Y"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">prompt</span>=<span class="st0">"Y/n"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">default</span>=Y</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">elif</span> <span class="br0">[</span> <span class="st0">"<span class="es3">${2:-}</span>"</span> = <span class="st0">"N"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li2"><div class="de2">
<span class="re2">prompt</span>=<span class="st0">"y/N"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">default</span>=N</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">else</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">prompt</span>=<span class="st0">"y/n"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">default</span>=</div>
</li>
<li class="li2"><div class="de2">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Ask the question</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">read</span> <span class="re5">-p</span> <span class="st0">"$1 [<span class="es2">$prompt</span>] "</span> REPLY</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># Default</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="re5">-z</span> <span class="st0">"<span class="es2">$REPLY</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">REPLY</span>=<span class="re1">$default</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># Return only if the reply is valid</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">case</span> <span class="st0">"<span class="es2">$REPLY</span>"</span> <span class="kw1">in</span></div>
</li>
<li class="li1"><div class="de1">
Y<span class="sy0">*|</span>y<span class="sy0">*</span><span class="br0">)</span> <span class="kw3">return</span> <span class="nu0">0</span> <span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
N<span class="sy0">*|</span>n<span class="sy0">*</span><span class="br0">)</span> <span class="kw3">return</span> <span class="nu0">1</span> <span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">esac</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">done</span></div>
</li>
<li class="li1"><div class="de1">
<span class="br0">}</span> <span class="co0"># ask</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># CHANGE DIRECTORY #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> chdir <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
verbose <span class="st0">"Changing to directory: $@"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">cd</span> $<span class="sy0">@</span> </div>
</li>
<li class="li2"><div class="de2">
<span class="br0">}</span> <span class="co0"># err</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># DEBUG FUNCTION #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Like 'echo', but prints only if debug operation is specified.</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> dbg <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="br0">[</span> <span class="st0">"<span class="es2">$_DEBUG</span>"</span> == <span class="nu0">1</span> <span class="br0">]</span> <span class="sy0">&&</span> <span class="kw3">echo</span> <span class="st0">"[DEBUG] $@"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="br0">}</span> <span class="co0"># dbg</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># ERROR FUNCTION #</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Like 'echo', but prints to error stream</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> err <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">echo</span> <span class="st0">"[ERROR] $@"</span> <span class="nu0">1</span><span class="sy0">>&</span><span class="nu0">2</span></div>
</li>
<li class="li2"><div class="de2">
<span class="br0">}</span> <span class="co0"># err</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># VERBOSE FUNCTION #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># </span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Like 'echo', but prints only if verbose operation is specified.</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">function</span> verbose <span class="br0">{</span></div>
</li>
<li class="li1"><div class="de1">
<span class="br0">[</span> <span class="st0">"<span class="es2">$VERBOSE</span>"</span> == <span class="nu0">1</span> <span class="br0">]</span> <span class="sy0">&&</span> <span class="kw3">echo</span> <span class="st0">"$@"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="br0">}</span> <span class="co0"># verbose</span></div>
</li>
<li class="li2"><div class="de2">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># INSTALL ARGOWEB APPS #</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0">##########################################</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
dbg <span class="st0">"Running in debug mode..."</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Make sure user is root</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"<span class="es4">$(id -u)</span>"</span> <span class="sy0">!</span>= <span class="st0">"0"</span> <span class="br0">]</span>; <span class="kw1">then</span></div>
</li>
<li class="li1"><div class="de1">
err <span class="st0">"This script must be run as root"</span></div>
</li>
<li class="li2"><div class="de2">
<span class="kw3">exit</span> <span class="nu0">1</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">fi</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Get command line arguments</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">while</span> <span class="kw3">getopts</span> <span class="st0">":cd:v"</span> opt; <span class="kw1">do</span></div>
</li>
<li class="li2"><div class="de2">
dbg <span class="st0">"processing command-line argument: -<span class="es2">$opt</span>"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">case</span> <span class="re1">$opt</span> <span class="kw1">in</span></div>
</li>
<li class="li1"><div class="de1">
c<span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># clean working directory. </span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw2">rm</span> <span class="re5">-rf</span> mysql tomcat</div>
</li>
<li class="li2"><div class="de2">
<span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
d<span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Specify working directory. This is the directory to which all files will be downloaded and unzipped. </span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">src_dir</span>=<span class="re1">$OPTARG</span></div>
</li>
<li class="li2"><div class="de2">
chdir <span class="re1">$src_dir</span></div>
</li>
<li class="li1"><div class="de1">
<span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
v<span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Verbose operation</span></div>
</li>
<li class="li2"><div class="de2">
<span class="re2">VERBOSE</span>=<span class="nu0">1</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">VOPT</span>=<span class="st0">"-v"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="re2">TAROPTS</span>=<span class="st0">"-xzvf"</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
verbose <span class="st0">"Operating in verbose mode."</span></div>
</li>
<li class="li2"><div class="de2">
<span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
\?<span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
err <span class="st0">"Invalid option: -<span class="es2">$opt</span>"</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">exit</span> <span class="nu0">1</span></div>
</li>
<li class="li2"><div class="de2">
<span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
:<span class="br0">)</span></div>
</li>
<li class="li1"><div class="de1">
err <span class="st0">"Option -<span class="es2">$OPTARG</span> requires an argument."</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw3">exit</span> <span class="nu0">1</span></div>
</li>
<li class="li2"><div class="de2">
<span class="sy0">;;</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">esac</span></div>
</li>
<li class="li1"><div class="de1">
<span class="kw1">done</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
dbg <span class="st0">"VERBOSE=<span class="es2">$VERBOSE</span>"</span></div>
</li>
<li class="li2"><div class="de2">
dbg <span class="st0">"src_dir=<span class="es2">$src_dir</span>"</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
verbose <span class="st0">"Working directory: <span class="es2">$src_dir</span>"</span></div>
</li>
<li class="li1"><div class="de1">
chdir <span class="re1">$src_dir</span></div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li2"><div class="de2">
<span class="co0"># Prompt and install MySQL database</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Install MySQL database?"</span> Y <span class="sy0">&&</span> install_mysql</div>
</li>
<li class="li1"><div class="de1">
</div>
</li>
<li class="li1"><div class="de1">
<span class="co0"># Prompt and install Apache Tomcat Server</span></div>
</li>
<li class="li1"><div class="de1">
ask <span class="st0">"Install Apache Tomcat Server?"</span> Y <span class="sy0">&&</span> install_tomcat</div>
</li>
</ol>
</div>Alexander K. Ekholmhttp://www.blogger.com/profile/17433665123299170706noreply@blogger.com0tag:blogger.com,1999:blog-1542532328356109796.post-89026260645346165852012-03-08T09:13:00.000-08:002012-04-27T09:39:18.915-07:00Solo II - Mission Parameters<div class="separator" style="clear: both; text-align: left;">
In an effort to facilitate uploading of mission parameters to Solo II floats via Iridium satellite communication, an interactive web module will be integrated into the existing WHOI Argo Database. The primary goal of this module is to offer secure, remote web access to a graphical user interface (GUI) layer for the existing command-line oriented Iridium message uploading process. In addition, reported mission parameters will be browsable from from the web application.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><i><span style="color: #6fa8dc;">Mission Parameter Data Flow</span></i></b></div>
<div class="separator" style="clear: both; text-align: left;">
Iridium messages are processed upon receipt to produce readable flat text files. Theses files are parsed by a Java application to generate several Java objects corresponding to Solo II mission parameters. The Java object are mapped and saved to relational database tables.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieU0d4QCh5asg3r3CJZp6BKD9u42zPbuaZq-qvl0KvwDt7HQ65tvNq5twx5_GQC7PcXqN65WTWsAIsEJSr2g3qFYBiaDhTyz9RixZelIOjkXikO9JpwhZEGzcsql4u6gSGx17iyz9G785h/s1600/Solo2UploadMissionParameters.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieU0d4QCh5asg3r3CJZp6BKD9u42zPbuaZq-qvl0KvwDt7HQ65tvNq5twx5_GQC7PcXqN65WTWsAIsEJSr2g3qFYBiaDhTyz9RixZelIOjkXikO9JpwhZEGzcsql4u6gSGx17iyz9G785h/s640/Solo2UploadMissionParameters.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Figure 1: Solo II - Mission Parameter Data Flow</i></td></tr>
</tbody></table>
An Apache Tomcat server is used as a Java Servlet container. Each Java Servlet is mapped to a particular URL path and is responsible for handling all HTTP POST and GET requests to that path. Upon receipt of a HTTP request, a Java Servlet will perform some work (e.g. processing request parameters, perform database queries), and generate an HTML document in response.<br />
<br />
<a name='more'></a><br /><br />
<div style="text-align: left;">
<span style="color: #6fa8dc;"><b><i>Features</i></b></span><b style="text-align: left;"><i><span style="color: #6fa8dc;"> & Functionality</span></i></b></div>
The Solo II Mission parameters pages are intended to have the following features/functionality:<br />
<div>
<ol>
<li>Uploading Solo II mission parameters via Iridium satellite communication system</li>
<li>Automated mission parameter validation and error checking</li>
<li>Maintaining a record of all changes to Solo II mission parameters</li>
<li>Determining next surfacing of floats from the time of the last report & reported mission parameters (drift parameters & ascent/descent timing parameters)</li>
<li>Automated Iridium message queuing based on next anticipated surfacing (to avoid 5-day timeout)</li>
<li>User privilege levels: allow some users to browse data only, allow others to modify/upload</li>
<li>Ability to save mission parameters so that they may be easily sent to multiple floats</li>
</ol>
<b style="text-align: left;"><i><span style="color: #6fa8dc;"><br /></span></i></b><br />
<b style="text-align: left;"><i><span style="color: #6fa8dc;">Mission Parameter Pages</span></i></b><br />
Below are some screenshots of the Solo2 pages.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiotKaLbNp_HjcaJmNYoZE69r2c2grxzfhaEvsq6VJii_E2T3G66VohwsZsvhHLVA6Qpr6X_bGthMPkYrxm5cq_julPyeuI_jSZzlY9tUwLoxVvoWshYS8JFrwAI-CQHHIKcC9emf64Z-Wx/s1600/solo2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiotKaLbNp_HjcaJmNYoZE69r2c2grxzfhaEvsq6VJii_E2T3G66VohwsZsvhHLVA6Qpr6X_bGthMPkYrxm5cq_julPyeuI_jSZzlY9tUwLoxVvoWshYS8JFrwAI-CQHHIKcC9emf64Z-Wx/s640/solo2.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Figure 2: Home Page</i></td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDWvnhMF-2De3vGUmavYCjnkKOLe-1fwVGYJzpr-_34t_SCCvm2wlfyDWUxtfd0hsDR5ZAXIWdA4ACQdWNTnmGJlFIRb0yjslDpRyOJnn0omNgGsFmpgEdEHATFCHuI54a95TpPeo_hLSM/s1600/solo2_reported.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDWvnhMF-2De3vGUmavYCjnkKOLe-1fwVGYJzpr-_34t_SCCvm2wlfyDWUxtfd0hsDR5ZAXIWdA4ACQdWNTnmGJlFIRb0yjslDpRyOJnn0omNgGsFmpgEdEHATFCHuI54a95TpPeo_hLSM/s640/solo2_reported.png" width="589" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Figure 3: Reported Mission Parameters Page</i><br />
<i><br /></i></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZPGl3hbcxyQ_7XEOrFI0ytcqWVAhTZYZw4h1dS4rhsehTLIavOGbwbMZAAUUSxcRzDIQSSSXbxFZK6JHTotpGPuIAk65uJbh0zc1mXQxoc4rkgOGuu2QZXEgD2c-fZunHyoxP8UGhDS9k/s1600/solo2_upload-confirmation.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZPGl3hbcxyQ_7XEOrFI0ytcqWVAhTZYZw4h1dS4rhsehTLIavOGbwbMZAAUUSxcRzDIQSSSXbxFZK6JHTotpGPuIAk65uJbh0zc1mXQxoc4rkgOGuu2QZXEgD2c-fZunHyoxP8UGhDS9k/s640/solo2_upload-confirmation.png" width="610" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Figure 4: Mission Parameters Upload Confirmation</i></td></tr>
</tbody></table>
<br /></div>Alexander K. Ekholmhttp://www.blogger.com/profile/17433665123299170706noreply@blogger.com1