Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Migrate the ConfigureAperi code to AntInstaller
Contents
Proposal
Migrate the ConfigureAperi code to AntInstaller.
Ant Installer Project
Licensing
- AntInstall - Apache 2.0
- SysOut - Apache 2.0
- Ant - Apache 2.0
- DOM - license
- SAX - license
- Xerces - Apache 1.1
- JGoodies - BSD
Motivation
- Using AntInstaller reduces the need for custom Java code because the installer inherits configuration functions from ant
- The installer will be easier to maintain
- Less code to maintain
- Most maintenance changes will only require XML changes
- Graphical interface is user friendly
- Command line and silent installs also supported.
- Easy for Aperi users/adopters to change the branding, look and behavior of the installer.
- Menus and icons can be updated in XML
- The install behavior can be changed by updating the XML
- Adopters can ship just the build.xml, properties file and the ant binaries.
Other Options Considered
Sample Install Project
This install project was created to evaluate the AntInstaller features. It is not a full implementation of the Aperi install.
Screenshots
Input: Antinstall-config.xml
<?xml version="1.0"?> <!DOCTYPE installer PUBLIC "-//tp23 //DTD Ant Installer Config//EN" "http://antinstaller.sf.net/dtd/antinstall-config-0.8.dtd"> <installer ui="swing,text" verbose="true" debug="true" lookAndFeel="native" name="Aperi Storage Manager Installer" windowIcon="/resources/splash.png" defaultImageResource="/resources/uppersplash.png" minJavaVersion="1.5" antialiased="true" finishButtonText="Install" version="5.3" wide="600:275"> <page type="splash" name="splash" displayText="Aperi Storage Manager Installer" splashResource="/resources/splash.png" altText="--(o--Aperi Storage Manager Installer--o)--" /> <page type="input" name="intro" displayText="Welcome"> <comment displayText="" explanatoryText="This is a demo of the Aperi installer using antinstaller." /> <comment displayText=""/> <comment displayText="Installer made with"/> <comment displayText="http://antinstaller.sourceforge.net" bold="true"/> <hidden property="env.HOSTNAME" value="${env.COMPUTERNAME}" /> </page> <page type="license" name="license" displayText="License conditions" resource="/resources/EPL.txt" target="default" usePaging="true" /> <page type="input" name="componentSelection" displayText="Component Selection"> <comment displayText="The Aperi Storage Manager consists of three major components: The server, the host-based agent, and the GUI." title="false" /> <comment displayText="You can configure any or all of these to run on this computer." title="false" /> <target-select defaultValue="configureDerby" property="db.target" displayText="Database"> <option value="configureDerby" text="Derby"/> <option value="configureDB2" text="DB2"/> </target-select> <target target="configureServer" displayText="Server" defaultValue="true" osSpecific="true" strict="false" /> <target target="configureAgent" displayText="Agent" defaultValue="true" osSpecific="true" strict="false" /> <target target="configureGUI" displayText="GUI" defaultValue="true" osSpecific="true" strict="false" /> </page> <page type="input" name="installLocation" displayText="Installation location" > <directory displayText="Installation location" checkExists="true" create="true" defaultValue="/opt/Aperi" defaultValueWin="C:\Program files\Aperi" property="install.dir" /> </page> <page type="input" name="agentConfig" displayText="Agent configuration" ifProperty="${configureAgent}==true"> <comment displayText="Enter values to configure the agent." title="true" /> <ext-validated property="agent.port" displayText="Agent port" defaultValue="9570" validationClass="org.eclipse.aperi.install.ValidatePort" /> </page> <page name="serverConfig" displayText="Server configuration" type="input" ifProperty="(${configureAgent}==true)OR(${configureServer}==true)"> <comment displayText="Enter values to configure the server." title="true" /> <validated property="server.hostname" displayText="Server hostname" defaultValue="${env.HOSTNAME}" regex="[a-zA-Z0-9.]*" /> <ext-validated property="server.data.port" displayText="Data server port" defaultValue="9549" validationClass="org.eclipse.aperi.install.ValidatePort" /> <ext-validated property="server.device.port" displayText="Device server port" defaultValue="9000" validationClass="org.eclipse.aperi.install.ValidatePort" /> <hidden property="server.reporting.port" value="8080" /> <directory property="server.reporting.dir" defaultValue="${user.dir}/reporting/reportRepo" checkExists="true" create="true" displayText="Report server repository path" defaultValueWin="${install.dir}/reporting/reportRepo" /> <hidden property="server.data.heap" value="1024m" /> <hidden property="server.device.heap" value="1024m" /> </page> <page name="derbyConfiguration" displayText="Derby Configuration" type="input" ifProperty="db==Derby"> <ext-validated property="db.port" displayText="Database port" defaultValue="1527" validationClass="org.eclipse.aperi.install.ValidatePort" /> <validated property="db.driver" displayText="Driver" defaultValue="org.apache.derby.jdbc.ClientDriver" regex="[a-zA-Z0-9.]*" /> <hidden property="db.type" value="derby" /> <hidden property="db.schema" value="Aperi" /> <hidden property="db.username" value="Aperi" /> <hidden property="db.password" value="aperi" /> </page> <page name="db2Configuration" displayText="DB2 Configuration" type="input" ifProperty="db==DB2"> <validated property="db.username" displayText="Username" defaultValue="db2admin" regex="[a-zA-Z0-9.]*" /> <password property="db.password" defaultValue="" displayText="Password" regex="*" textMask="true" /> <ext-validated property="db.port" displayText="port" defaultValue="50000" validationClass="org.eclipse.aperi.install.ValidatePort" /> <validated property="db.driver" displayText="Driver" defaultValue="com.ibm.db2.jcc.DB2Driver" regex="[a-zA-Z0-9.]*" /> <directory property="db.cmdPath" defaultValue="" checkExists="true" create="false" displayText="DB2 Command Line Processor Path" defaultValueWin="" /> <hidden property="db.type" value="db2" /> <hidden property="db.schema" value="Aperi" /> </page> <page type="progress" name="progress" showTargets="true" displayText="Installation progress" > </page> </installer>
Input: build.xml
<?xml version="1.0"?> <project name="Aperi installer build" default="" basedir="${basedir}"> <!-- this is required to pick up the properties generated during the install pages --> <property file="${basedir}/ant.install.properties"/> <target name="default" depends=""> <echo>"Default"</echo> </target> <target name="configureDerby" depends=""> <echo>"Derby"</echo> </target> <target name="configureDB2" depends=""> <echo>"DB2"</echo> </target> <target name="configureServer-win" depends=""> <echo>"Configuring the Data server"</echo> <echo>"Updating the properties file: ${install.dir}/datasvr/configuration/server.config</echo> <replaceregexp byline="false"> <regexp pattern="(name=)("?)(.*)("?)"/> <substitution expression="\1"${env.HOSTNAME}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(port=)("?)(.*)("?)"/> <substitution expression="\1"${server.data.port}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(driver=)("?)(.*)("?)"/> <substitution expression="\1"${db.driver}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(url=)("?)(.*)("?)"/> <substitution expression="\1"jdbc:${db.type}://${env.HOSTNAME}:${db.port}/${db.schema}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(user=)("?)(.*)("?)"/> <substitution expression="\1"${db.user}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(schema=)("?)(.*)("?)"/> <substitution expression="\1"${db.schema}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <replaceregexp byline="false"> <regexp pattern="(reportServerPort=)("?)(.*)("?)"/> <substitution expression="\1"${server.reporting.port}""/> <fileset dir="${install.dir}/datasvr/configuration" includes="server.config" /> </replaceregexp> <echo>"Updating the file: ${install.dir}/datasvr/server.bat</echo> <echo>" Updating path"</echo> <replaceregexp byline="false"> <regexp pattern="(set PATH=)(.*)"/> <substitution expression="\1${install.dir}/lib/w32-ix86;%PATH%"/> <fileset dir="${install.dir}/datasvr" includes="datasvr.bat" /> </replaceregexp> <echo>" Updating cd"</echo> <replaceregexp byline="false"> <regexp pattern="(cd )(.*)"/> <substitution expression="cd ${install.dir}/db"/> <fileset dir="${install.dir}/datasvr" includes="datasvr.bat" /> </replaceregexp> <echo>" Updating Java path"</echo> <replaceregexp byline="false"> <regexp pattern="("?)(.*)(java)("?)"/> <substitution expression="${java.home}/bin/java"/> <fileset dir="${install.dir}/datasvr" includes="datasvr.bat" /> </replaceregexp> <echo>" Updating heap size"</echo> <replaceregexp byline="false"> <regexp pattern="(-Xmx)([0-9m]*)"/> <substitution expression="-Xmx${server.data.heap}"/> <fileset dir="${install.dir}/datasvr" includes="datasvr.bat" /> </replaceregexp> <echo>" Updating permissions"</echo> <chmod perm="ugo+x" file="${install.dir}/datasvr/datasvr.bat" /> </target> <target name="configureServer-linux" depends=""> <echo>server-linux</echo> </target> <target name="configureAgent-win" depends=""> <echo>agent-win</echo> </target> <target name="configureAgent-linux" depends=""> <echo>agent-linux</echo> </target> <target name="configureGUI-win" depends=""> <echo>gui-win</echo> </target> <target name="configureGUI-linux" depends=""> <echo>gui-linux</echo> </target> </project>
Questions/Answers
- The sample Antinstall-config.xml file specifies the user interface as "swing, text", what other user interfaces are supported?
- [ui] Indicates the supported installation modes from the following four values text, swing, swing-auto and text-auto. swing indicates the GUI can be shown, text means the commandline interface can be shown. -auto installs are silent installs that read the properties from a file, if available, instead of running the full UI. Ensure you understand the consequences before enabling -auto builds.--AntInstaller manual