{"action":"created","issue":{"url":"https://api.github.com/repos/GeoNode/geonode/issues/2375","labels_url":"https://api.github.com/repos/GeoNode/geonode/issues/2375/labels{/name}","comments_url":"https://api.github.com/repos/GeoNode/geonode/issues/2375/comments","events_url":"https://api.github.com/repos/GeoNode/geonode/issues/2375/events","html_url":"https://github.com/GeoNode/geonode/issues/2375","id":119949329,"number":2375,"title":"GNIP: GeoNode Windows Installer","user":{"login":"afabiani","id":1278021,"avatar_url":"https://avatars.githubusercontent.com/u/1278021?v=3","gravatar_id":"","url":"https://api.github.com/users/afabiani","html_url":"https://github.com/afabiani","followers_url":"https://api.github.com/users/afabiani/followers","following_url":"https://api.github.com/users/afabiani/following{/other_user}","gists_url":"https://api.github.com/users/afabiani/gists{/gist_id}","starred_url":"https://api.github.com/users/afabiani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afabiani/subscriptions","organizations_url":"https://api.github.com/users/afabiani/orgs","repos_url":"https://api.github.com/users/afabiani/repos","events_url":"https://api.github.com/users/afabiani/events{/privacy}","received_events_url":"https://api.github.com/users/afabiani/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/GeoNode/geonode/labels/gnip","name":"gnip","color":"d7e102"},{"url":"https://api.github.com/repos/GeoNode/geonode/labels/packaging","name":"packaging","color":"ededed"},{"url":"https://api.github.com/repos/GeoNode/geonode/labels/windows","name":"windows","color":"ededed"}],"state":"open","locked":false,"assignee":{"login":"afabiani","id":1278021,"avatar_url":"https://avatars.githubusercontent.com/u/1278021?v=3","gravatar_id":"","url":"https://api.github.com/users/afabiani","html_url":"https://github.com/afabiani","followers_url":"https://api.github.com/users/afabiani/followers","following_url":"https://api.github.com/users/afabiani/following{/other_user}","gists_url":"https://api.github.com/users/afabiani/gists{/gist_id}","starred_url":"https://api.github.com/users/afabiani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afabiani/subscriptions","organizations_url":"https://api.github.com/users/afabiani/orgs","repos_url":"https://api.github.com/users/afabiani/repos","events_url":"https://api.github.com/users/afabiani/events{/privacy}","received_events_url":"https://api.github.com/users/afabiani/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/GeoNode/geonode/milestones/7","html_url":"https://github.com/GeoNode/geonode/milestones/2.5","labels_url":"https://api.github.com/repos/GeoNode/geonode/milestones/7/labels","id":802450,"number":7,"title":"2.5","description":"","creator":{"login":"simod","id":779380,"avatar_url":"https://avatars.githubusercontent.com/u/779380?v=3","gravatar_id":"","url":"https://api.github.com/users/simod","html_url":"https://github.com/simod","followers_url":"https://api.github.com/users/simod/followers","following_url":"https://api.github.com/users/simod/following{/other_user}","gists_url":"https://api.github.com/users/simod/gists{/gist_id}","starred_url":"https://api.github.com/users/simod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simod/subscriptions","organizations_url":"https://api.github.com/users/simod/orgs","repos_url":"https://api.github.com/users/simod/repos","events_url":"https://api.github.com/users/simod/events{/privacy}","received_events_url":"https://api.github.com/users/simod/received_events","type":"User","site_admin":false},"open_issues":272,"closed_issues":11,"state":"open","created_at":"2014-09-25T11:58:37Z","updated_at":"2015-12-17T23:31:25Z","due_on":"2016-05-07T05:00:00Z","closed_at":null},"comments":1,"created_at":"2015-12-02T14:12:23Z","updated_at":"2016-01-15T10:01:41Z","closed_at":null,"body":"# Overview\r\nThe idea is to allow potential GeoNode users to easily and quickly evaluate the product in order to determine if it is a good solution for them and their requirements. A good solution would be the possibility to ship a self contained installer package for Windows servers, which can be easily used by the administrators or end users in order to test the GeoNode functionalities and cleanup the system afterwards.\r\n\r\n## Proposed by\r\nAlessio Fabiani ([GeoSolutions](http://www.geo-solutions.it))\r\n\r\nAlessandro Parma ([GeoSolutions](http://www.geo-solutions.it))\r\n\r\n## Assigned to release\r\nNone yet.\r\n\r\n## Motivation\r\nThe purpose of this core development component is two-folds:\r\n* Refactor and improve the existing Windows GeoNode installer work already done in the community to make it a point and click experience.\r\n* Integrate the generation of the Windows installer in the automatic GeoNode build system that is powered by Jenkins.\r\n\r\nGeoNode is a complex framework based on DJango, Python and GeoServer (hence Java). This means that an end user in order to install GeoNode itself shall install and configure several frameworks which in some cases have neither immediate nor intuitive deployment procedures which hinder the possibility of a widespread adoption for users with limited system administration skills but still highly interested in trying out its functionalities.\r\n\r\n\r\nAn hypotetical installer package should be easiest as possible to use and should allow users to avoid struggling with other packages installation and configuration. The installation package should provide a nice and user friendly interface which would guide users through questions and choices in order to help them to obtain a fair install without requiring advanced system administration skills. It should be robust and perform consistency checks on the packaged deployed in order to ensure that the system will work as espected after the installation, no matter what. Eventually, the installer package should be able to completely cleanup the target system, removing any environment variable created during the process and leave the system clean whenever the user would like to uninstall the packages; in our experience this is regularly forgotten requirement but still extremely important especially on training labs machines.\r\n\r\n\r\nAs mentioned above, while a fully enterprise installation cannot usually be performed with a simple point and click procedure (although IT Automation solutions like Puppet, Chef or Ansible are aiming to solve this problem) it is crucial to have available an Windows point-and-click installation package that can allow users without system administration skills to install and test complex solutions.\r\n\r\n\r\n# Proposal\r\nHere below we are going to provide technical details about the GeoNode installer we propose as outcome of this core development package.\r\n\r\n## Technology and best practices\r\nAs mentioned above, our goal is to build a maintanable, extensible installer for the Windows platform that would make testing on prototyping on such platform a much simpler task. In order to achieve this goal, we are going to create an installer based on a scripting language technology, used and well maintained by a wide user community and rich of plugins and extensions which allow the developers to implement advanced functionalities and controls if needed.\r\n\r\n\r\nAt the time of writing the Open Source NSIS product matches all the requirements described above. Iti s very flexible, easy to learn and has a wide set of extensions allowing to build a professional installer capable of performing complex checks and operation against the Windows environment. In addition, the current prototype of a GeoNode installer is based on NSIS framework, therefore this choice wouldn’t impact the current development work already done by the community.\r\nThe most important functionalities missing on the existing GeoNode installer prototype that we are going to implement are as follows:\r\n\r\n1. The installer is not able to detect if Python or Java are already installed on the system nor provides options to automatically install them. Therefore the user must prepare the system separately before running the GeoNode installer.\r\n\r\n2. The quality of the wizard is not satisfactory both in terms of look and feel aswell as in terms of usability. Moreover, there is no good documentation throubleshooting providing help to end users in case of problems.\r\n\r\n3. The installer lacks of consistency checks preventing the end user to complete a wrong and non-functional installation process, like for instance checks on the target folder existence and naming, checks on the environment variables already defined in the system, storage capability and so on. This will need to be greatly improve and requires a deep knowledge of both the Python back-end of GeoNode as well as GeoServer.\r\n\r\n4. The installer needs improvements as far as the setup and configuration of the Python Virtualenv is concerned, like for instance verifying that the eggs are loading correctly.\r\n\r\n\r\nThe proposal is to refactor and improve all the items above and extend the installation wizard in order to follow the end user step by step during the process and preventing possible errors as much as possible other than improve the quality of the package and its usability.\r\n\r\n\r\n## Components and configurations provided with the GeoNode installer\r\nThe proposed installer will install to the end user system roughly the following packages and configurations:\r\n\r\n1. Java Sun JDK 7+ if not already present on the target environment. Eventually it will be asked to the user if he wants to install the package and update the “JAVA_HOME” enviroment variable.\r\n\r\n2. Python 2.7.6+ with Virtualenv if not present on the target system.\r\n\r\n3. Python egg packages and GeoNode dependencies into the newly configured Virtualenv.\r\n\r\n4. GeoNode 2.4 with the default settings and embedded DB. The proposal is also to provide with the installation script a pre-configured dataset with few example maps. The same layers will be also pre-configured on the GeoServer Data Dir shipped with the installation package. In the future it is also possible to provide a set of pre-configured datasets and allow the developer to choose which one to include in the installation package through the scripting language.\r\n\r\n5. GeoServer 2.7+ with a pre-configired small dataset in order to allow the end user to start testing the system quickly without the need of loading anything at a first glance. \r\n\r\nIt is worth to point out that in this proposal we are not considering the support for a spatial database like PostgreSQL with PostGIS extension. However the procedure does not prevent to improve both the NSIS script and the pre-configured datasets (both GeoNode and GeoServer ones) in order to envisage also the database support and automatic setup.\r\n\r\nMoreover the proposed installer will perform several checks and controls similar to the ones shown on the examples above. In particular the most important one will be:\r\n\r\n1. License terms agreement; this will be a mandatory step in order to proceed with the installation procedure.\r\n\r\n2. Choose of the installation path and disk space checks; part of this step will be also a consistency check both on the existence of the parent folder and name of the GeoNode one, which must contain printable characters without spaces.\r\n\r\n3. Installation of the Java JVM; this step will also allow an advanced option for smarter users in order to provide their own JVM installation. Otherwise the installation procedure will install the JVM in the system before proceeding.\r\n\r\n4. Installation of the Python environment; similar to the previous step, it will check for the existence of an already comliant Python installation and if not present it will proceed with the installation of the packaged version before proceeding.\r\n\r\n5. Setup of the environment variables for the GeoNode and GeoServer data directories; here also an advanced option will allow a smart user to provide its own external datadir. It is worth to point out that this package does not envisage the setup and configuration of a database, therefore the target environment must contain all the necessary configuration files and packages in case there is the need for the database support. This may be considered a future installer improvement though.\r\n\r\n6. Configuration of the Python Virtualenv, check and setup of the Python eggs.\r\n\r\n7. Configuration and setup of a shell; may be useful to smart users in order to use Python and Django commands in a Linux fashion way.\r\n\r\n8. Deployment of the GeoNode packages and configuration of the startup/stop scripts and links on the Windows Start Menu.\r\n\r\n9. Configuration of the Windows registry in order to perform a subsequent correct cleanup of the system.\r\n\r\n10. A local copy of the GeoNode and GeoServer user documentation with links to the Windows Start Menu.\r\n\r\n## Conclusions\r\nAmong this proposal ([we](http://www.geo-solutions.it)) envisage also the following activities and technical solutions:\r\n\r\n1. Discuss with the GeoNode community the already in place solution at https://github.com/GeoNode/geonode/tree/master/scripts/ms-install, identify issues and limitations following up the developer discussions at https://github.com/GeoNode/geonode/issues/1039, and provide evaluation upon the feasibility of the package matching all the purposes described before in this section.\r\n\r\n2. Polish and finalize the GeoNode installer work, develop the new functionalities and provide a full user and administrator documentation along with the installer package\r\n\r\n3. Test the installer on different environments and configurations, stay in touch and involve the community in order to wide test the installer\r\n\r\n4. Ensure that the GeoNode build system correctly runs the installer script and is able to deploy the GeoNode executable on the distribution system\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/GeoNode/geonode/issues/comments/171919315","html_url":"https://github.com/GeoNode/geonode/issues/2375#issuecomment-171919315","issue_url":"https://api.github.com/repos/GeoNode/geonode/issues/2375","id":171919315,"user":{"login":"afabiani","id":1278021,"avatar_url":"https://avatars.githubusercontent.com/u/1278021?v=3","gravatar_id":"","url":"https://api.github.com/users/afabiani","html_url":"https://github.com/afabiani","followers_url":"https://api.github.com/users/afabiani/followers","following_url":"https://api.github.com/users/afabiani/following{/other_user}","gists_url":"https://api.github.com/users/afabiani/gists{/gist_id}","starred_url":"https://api.github.com/users/afabiani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afabiani/subscriptions","organizations_url":"https://api.github.com/users/afabiani/orgs","repos_url":"https://api.github.com/users/afabiani/repos","events_url":"https://api.github.com/users/afabiani/events{/privacy}","received_events_url":"https://api.github.com/users/afabiani/received_events","type":"User","site_admin":false},"created_at":"2016-01-15T10:01:41Z","updated_at":"2016-01-15T10:01:41Z","body":"Hello, currently I cannot download the installer ... in any case we need the scripts available and integrated with the project not a precompiled binary."}}