This document describes the system requirements necessary for developing applications for Project Fénix. It also provides guidelines on how to setup an efficient development environment. This document should not be used as a reference for preparing a production environment. For that purpose you should refer to the FenixSetup page.
Contents
Operating System
The applications developed in Project Fénix are all Java Based, so they can run on any platform for which a Java Virtual Machine (JVM) is available. Our development team uses multiple OS's including Linux, Mac OS X and Windows. Usually operating systems and/or distributions are oriented towards a specific type of user. Note that the requirements for a normal desktop or media workstation differ from those requiring intensive video processing or data manipulation. The suggestions we make in this document are for development environments only. Be aware they may not be adequate for other purposes, in particular for production environments.
While the application may run in a 32 bit OS, it is not supported, and we strongly advise using a 64 bit OS.
Tweaking the File System
Different File Systems (FS's) have vary different behaviors, especially in regard to performance. In a development environment we prefer performance over data consistency/integrity. Note that even in the case of a total system loss, setting up a new environment should not be an issue. This is safe to assume as long as each developer regularly backs up his/her code that has not yet been committed or pushed to a central repository.
If it is an option, XFS is a good choice for your FS. For this FS we recommend the following options be used in your /etc/fstab.
noatime,nodiratime,nobarrier,logbufs=4,osyncisdsync
EXT4 is another popular option among developers, and it seems to provide better performance results than any other FS.
Turn Off Unused/Unnecessary Services
If you're running a Linux distribution on a machine that won't be used by different users, then we also suggest disabling SELinux. To do this on Fedora edit your /etc/selinux/config file accordingly. Also remember to deactivate any unnecessary services.
Secure Sensitive Data
In case your development machine is a laptop, or a PC that is accessible to people outside your development team, then should make sure any directory containing sensitive data is encrypted, for example the directories where MySQL stores the database. Check out this tutorial with an example of how to create such a directory.
SSH Agent
Enough said!
Firewall
Always use a firewall! At most only open up your SSH port. Any other remote access you need to make to your machine you can achieve tunneling through your SSH port. Here's an example of how to login to a remote machine and locally access a running tomcat while still being able to launch any graphical app running on the remote server:
ssh -A -X -L 8080:localhost:8080 <remoteUserName>@<remote.server.name>
To securely access a remote MySQL server, without needing to logon to the remote server, you might use a command such as:
ssh -A -fN -L <localport>:localhost:3306 <remoteUserName>@<remote.server.name>
Software
The following table list the necessary software for developing applications and libraries for Project Fénix.
Software
Version
Download Page
Java SE JDK
1.8 or higher
http://www.oracle.com/technetwork/java/javase/downloads/index.html (OpenJDK works as well)
Maven
3.0 or higher
MySQL/MariaDB
5.5.25 or higher
http://dev.mysql.com/downloads/mysql/ OR https://downloads.mariadb.org
Tomcat
7.0 or higher
GIT
1.X or higher
Eclipse
4.3 or higher
Some OS distributions are shipped with a few of the software listed above. Alternative JVM's and web containers will also work, but we find that Sun's version of the JVM Apaches version of the web container is best suited for this project. Feel free to experiment with other platforms. We appreciate any feedback regarding different experiences.
Obviously you can use any alternative to eclipse, however other than it being our preference, some of the documentation we provide may refer to it explicitly.
MySQL Optimization
When running a MySQL server on a development machine, some small tweaks can result in significant performance benefits. Always check the options in your /etc/my.cnf file. Remember that the values have to be tuned to your specific hardware and needs. Remember to stop a running MySQL server before editing this file. The following example works well for us:
[mysqld] default-storage-engine=INNODB table_open_cache = 256 sort_buffer_size = 16M net_buffer_length = 4M log_bin_trust_function_creators=1 innodb_additional_mem_pool_size=4194304 innodb_buffer_pool_size=96468992 innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=4194304 innodb_log_file_size=96468992 sort_buffer_size=4194288 max_allowed_packet=67107840
Adaptations might be needed depending on the operating system, for example under ubuntu settings for ports, socket locations and data directories had to be kept. The advice is to merge these settings with the ones your operating system came with, keeping the OS specific values and replacing the optimisations.
Afterwards, go to the /var/lib/mysql folder and remove any existing innodb files before starting the MySQL server. These files usually have the following names:
ibdata1 ib_logfile0 ib_logfile1
Environment Variables
The following variables need to be defined on your system. The values we provide here are only examples. Adjust the values accordingly. In most Linux based systems you'll do this in the .bashrc file found in your user home directory.
export SOFTWARE=$HOME/software export JAVA_HOME=$SOFTWARE/java export CATALINA_HOME=$SOFTWARE/tomcat export PATH=${JAVA_HOME}/bin:${PATH} export PATH=${PATH}:${CATALINA_HOME}/bin export PATH=${SOFTWARE}/eclipse:${PATH} export JAVA_OPTS="-Xms256m -Xmx2048m" export MAVEN_OPTS="$JAVA_OPTS -Dmaven.compiler.useIncrementalCompilation=false" export CATALINA_OPTS="$JAVA_OPTS -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.awt.headless=true"
You may want to adjust the Xmx option to increase the heap size.
For faster startup times for short running JVMs (such as Maven compilation of small projects), you may want to use the option -noverify.
Eclipse Configuration
Usually eclipse overrides the environment variables with its own configuration file eclipse.ini. Edit this file and adjust the following properties under the -vmargs option:
-vmargs -Xms128m -Xmx1g
Also don't forget to install any Eclipse plugins that may be helpful for developing your applications and libraries (Keep in mind that the fewer you install, the more fluid it will be). We highly recommend the following plugins:
Resource Bundle Editor: the I18NConventions page describes how to install and configure it appropriately.
Git Plugin: JGit and optionally http://www.eclipse.org/egit/ (Not recommended: use the command line instead)
Finally, remember to install the code style format used in Project Fénix. Do this in eclipse under Window > Preferences > Java > Code Style > Formatter > Import using the Fénix Code Style configuration file.