Updated Installing Tracks 2.2.2 on CentOS 6.5 Minimal x86_64 (markdown)

rharmonson 2014-06-26 10:40:39 -07:00
parent 495a6dde6d
commit cd33426784

@ -705,3 +705,722 @@ $ gem install passenger
$ passenger -v
Phusion Passenger version 4.0.44
```
##Tracks 2.2.2
Important! My attempts to build using the most current build of 2.2.2 from github or 2.3 developement versions failed. Also, at the time I built, both had a github build status of fails. As of June 26, 2014, 2.2.2 github build status now read success. Nonetheless, I would advise using the 2.2.2 tarball using the "Get Tracks" link from http://getontracks.org/.
###Unpack
```
$ tar -xzvf tracks-2.2.2.tar.gz
$ mv tracks-2.2.2 ~/tracks
```
Review `~/tracks/doc/installation.textile` for instructions.
###Gems
Install gems using bundler
```
$ cd ~/tracks/
$ bundle install --without development test
Fetching gem metadata from https://rubygems.org/........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Installing rake 10.0.3
Installing RedCloth 4.2.9
Installing aasm 3.0.16
Installing i18n 0.6.1
Installing multi_json 1.7.0
Installing activesupport 3.2.13
Installing builder 3.0.4
Installing activemodel 3.2.13
Installing erubis 2.7.0
Installing journey 1.0.4
Installing rack 1.4.5
Installing rack-cache 1.2
Installing rack-test 0.6.2
Installing hike 1.2.1
Installing tilt 1.3.6
Installing sprockets 2.2.2
Installing actionpack 3.2.13
Installing mime-types 1.21
Installing polyglot 0.3.3
Installing treetop 1.4.12
Installing mail 2.5.3
Installing actionmailer 3.2.13
Installing arel 3.0.2
Installing tzinfo 0.3.37
Installing activerecord 3.2.13
Installing activeresource 3.2.13
Installing acts_as_list 0.1.9
Installing bcrypt-ruby 3.0.1
Installing bluecloth 2.2.0
Using bundler 1.6.2
Using cache_digests 0.1.0 from source at vendor/gems/cache_digests-0.1.0
Installing coffee-script-source 1.4.0
Installing execjs 1.4.0
Installing coffee-script 2.2.0
Installing rack-ssl 1.3.3
Installing json 1.7.7
Installing rdoc 3.12.2
Installing thor 0.17.0
Installing railties 3.2.13
Installing coffee-rails 3.2.2
Installing formatize 1.1.0
Installing htmlentities 4.3.1
Installing jquery-rails 2.2.1
Installing libv8 3.11.8.17
Installing mysql2 0.3.11
Installing nokogiri 1.5.6
Installing rack-mini-profiler 0.1.23
Installing rails 3.2.13
Installing rails_autolink 1.0.9
Installing ref 1.0.4
Installing sanitize 2.0.3
Installing sass 3.2.5
Installing sass-rails 3.2.6
Installing sqlite3 1.3.7
Installing swf_fu 2.0.3
Installing therubyracer 0.11.4
Installing uglifier 1.3.0
Installing will_paginate 3.0.4
Your bundle is complete!
Gems in the groups development and test were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:
<= 1.8.6 : unsupported
= 1.8.7 : gem install rdoc-data; rdoc-data --install
= 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
```
###Configuration
Copy configuration files.
```
$ cd ~/tracks/config/
$ cp database.yml.tmpl database.yml
$ cp site.yml.tmpl site.yml
```
Update 'production' stanza account from root to dbuser and provide password.
```
$ vi database.yml
```
Update time zone, salt, secret_token, and email address.
```
$ vi site.yml
```
Note: we will be using Apache, but initially, let's use WEBrick for an initial testing.
```
$ vi environments/production.rb
```
Update config.serve_static_assets to true.
###Schema
Create database schema.
```
$ cd ~/tracks
$ rake db:migrate RAILS_ENV=production
== CreateTracksDb: migrating =================================================
-- create_table(:contexts)
-> 0.0257s
-- create_table(:projects)
-> 0.1128s
-- create_table(:todos)
-> 0.0044s
-- create_table(:users)
-> 0.0033s
== CreateTracksDb: migrated (0.1465s) ========================================
== AddUserId: migrating ======================================================
-- add_column(:contexts, :user_id, :integer, {:default=>1})
-> 0.0090s
-- add_column(:projects, :user_id, :integer, {:default=>1})
-> 0.0082s
-- add_column(:todos, :user_id, :integer, {:default=>1})
-> 0.0077s
== AddUserId: migrated (0.0326s) =============================================
== CreatedAt: migrating ======================================================
-- rename_column(:todos, "created", "created_at")
-> 0.1701s
== CreatedAt: migrated (0.1702s) =============================================
== Notes: migrating ==========================================================
-- create_table(:notes)
-> 0.0714s
== Notes: migrated (0.0715s) =================================================
== AddProjectDescription: migrating ==========================================
-- add_column(:projects, :description, :text)
-> 0.0899s
== AddProjectDescription: migrated (0.0900s) =================================
== AddPreferencesToUserTable: migrating ======================================
-- add_column(:users, :preferences, :text)
-> 0.0096s
== AddPreferencesToUserTable: migrated (0.0119s) =============================
== AddSessionsTable: migrating ===============================================
-- create_table(:sessions)
-> 0.0043s
-- add_index(:sessions, :session_id)
-> 0.0097s
== AddSessionsTable: migrated (0.0142s) ======================================
== AddSubclassAttrToTodos: migrating =========================================
-- add_column(:todos, :type, :string, {:null=>false, :default=>"Immediate"})
-> 0.0317s
-- add_column(:todos, :show_from, :date)
-> 0.0556s
== AddSubclassAttrToTodos: migrated (0.0887s) ================================
== AddUserPrefRefresh: migrating =============================================
== AddUserPrefRefresh: migrated (0.0011s) ====================================
== AddFirstAndLastNameToUser: migrating ======================================
-- add_column(:users, :first_name, :string)
-> 0.0089s
-- add_column(:users, :last_name, :string)
-> 0.0078s
== AddFirstAndLastNameToUser: migrated (0.0168s) =============================
== PrefToShowHideSidebarItems: migrating =====================================
== PrefToShowHideSidebarItems: migrated (0.0010s) ============================
== AddPreferencesModel: migrating ============================================
-- create_table(:preferences)
-> 0.0047s
== AddPreferencesModel: migrated (0.0048s) ===================================
== ConvertPreferences: migrating =============================================
-- remove_column(:users, :preferences)
-> 0.0434s
== ConvertPreferences: migrated (0.0446s) ====================================
== ConvertProjectToStateMachine: migrating ===================================
-- add_column(:projects, :state, :string, {:limit=>20, :default=>"active", :null=>false})
-> 0.0089s
-- remove_column(:projects, :done)
-> 0.0085s
== ConvertProjectToStateMachine: migrated (0.0185s) ==========================
== AddVerboseActionDescriptorsPreference: migrating ==========================
-- add_column(:preferences, :verbose_action_descriptors, :boolean, {:default=>false, :null=>false})
-> 0.0928s
== AddVerboseActionDescriptorsPreference: migrated (0.0929s) =================
== AddUserAuthType: migrating ================================================
-- add_column(:users, :auth_type, :string, {:default=>"database", :null=>false})
-> 0.0979s
== AddUserAuthType: migrated (0.0980s) =======================================
== AddOpenIdTables: migrating ================================================
-- create_table("open_id_associations", {:force=>true})
-> 0.0054s
-- create_table("open_id_nonces", {:force=>true})
-> 0.0040s
-- create_table("open_id_settings", {:force=>true})
-> 0.0051s
== AddOpenIdTables: migrated (0.0146s) =======================================
== AddUserOpenIdUrl: migrating ===============================================
-- add_column(:users, :open_id_url, :string)
-> 0.0095s
== AddUserOpenIdUrl: migrated (0.0096s) ======================================
== ConvertTodoToStateMachine: migrating ======================================
-- add_column(:todos, :state, :string, {:limit=>20, :default=>"immediate", :null=>false})
-> 0.0076s
-- rename_column(:todos, "completed", "completed_at")
-> 0.0115s
-- remove_column(:todos, :done)
-> 0.1065s
-- remove_column(:todos, :type)
-> 0.3187s
== ConvertTodoToStateMachine: migrated (0.4457s) =============================
== PrefToShowHiddenProjectsInSidebar: migrating ==============================
-- add_column(:preferences, :show_hidden_projects_in_sidebar, :boolean, {:default=>true, :null=>false})
-> 0.0173s
== PrefToShowHiddenProjectsInSidebar: migrated (0.0173s) =====================
== AddTimeZonePreference: migrating ==========================================
-- add_column(:preferences, :time_zone, :string, {:limit=>255, :default=>"London", :null=>false})
-> 0.0145s
== AddTimeZonePreference: migrated (0.0146s) =================================
== AddIndices: migrating =====================================================
-- add_index(:todos, [:user_id, :state])
-> 0.0571s
-- add_index(:todos, [:user_id, :project_id])
-> 0.0182s
-- add_index(:todos, [:project_id])
-> 0.0431s
-- add_index(:todos, [:context_id])
-> 0.0874s
-- add_index(:todos, [:user_id, :context_id])
-> 0.1034s
-- add_index(:preferences, :user_id)
-> 0.0151s
-- add_index(:projects, :user_id)
-> 0.0137s
-- add_index(:contexts, :user_id)
-> 0.0747s
== AddIndices: migrated (0.4132s) ============================================
== IndexOnUserLogin: migrating ===============================================
-- add_index(:users, :login)
-> 0.0244s
== IndexOnUserLogin: migrated (0.0245s) ======================================
== AddFindByNameIndices: migrating ===========================================
-- add_index(:projects, [:user_id, :name])
-> 0.0277s
-- add_index(:contexts, [:user_id, :name])
-> 0.0859s
== AddFindByNameIndices: migrated (0.1137s) ==================================
== AddTagSupport: migrating ==================================================
-- create_table(:taggings)
-> 0.0053s
-- create_table(:tags)
-> 0.0231s
-- add_index(:tags, :name)
-> 0.0145s
-- add_index(:taggings, [:tag_id, :taggable_id, :taggable_type])
-> 0.0314s
== AddTagSupport: migrated (0.0745s) =========================================
== AddProjectTimestamps: migrating ===========================================
-- add_column(:projects, :created_at, :timestamp)
-> 0.1526s
-- add_column(:projects, :updated_at, :timestamp)
-> 0.0085s
== AddProjectTimestamps: migrated (0.1612s) ==================================
== AddContextTimestamps: migrating ===========================================
-- add_column(:contexts, :created_at, :timestamp)
-> 0.0875s
-- add_column(:contexts, :updated_at, :timestamp)
-> 0.0083s
== AddContextTimestamps: migrated (0.0959s) ==================================
== AddShowProjectOnTodoDonePreference: migrating =============================
-- add_column(:preferences, :show_project_on_todo_done, :boolean, {:default=>false, :null=>false})
-> 0.0090s
== AddShowProjectOnTodoDonePreference: migrated (0.0091s) ====================
== AddTitleDateFormatPreference: migrating ===================================
-- add_column(:preferences, :title_date_format, :string, {:limit=>255, :default=>"%A, %d %B %Y", :null=>false})
-> 0.0081s
== AddTitleDateFormatPreference: migrated (0.0082s) ==========================
== SetNilTimestamps: migrating ===============================================
== SetNilTimestamps: migrated (0.0403s) ======================================
== AddDefaultContextToProject: migrating =====================================
-- add_column(:projects, :default_context_id, :integer)
-> 0.0083s
== AddDefaultContextToProject: migrated (0.0085s) ============================
== AddMobileTodosPerPagePreference: migrating ================================
-- add_column(:preferences, :mobile_todos_per_page, :integer, {:null=>false, :default=>6})
-> 0.1132s
== AddMobileTodosPerPagePreference: migrated (0.1132s) =======================
== AddRememberMeToUser: migrating ============================================
-- rename_column(:users, "password", "crypted_password")
-> 0.0113s
-- add_column(:users, :remember_token, :string)
-> 0.0089s
-- add_column(:users, :remember_token_expires_at, :datetime)
-> 0.0073s
== AddRememberMeToUser: migrated (0.0278s) ===================================
== RenameWordToToken: migrating ==============================================
-- rename_column(:users, "word", "token")
-> 0.0159s
== RenameWordToToken: migrated (0.0160s) =====================================
== UpdateOpenIdUrls: migrating ===============================================
== UpdateOpenIdUrls: migrated (0.0013s) ======================================
== AddProjectCompletedAtColumn: migrating ====================================
-- add_column(:projects, :completed_at, :datetime)
-> 0.1048s
== AddProjectCompletedAtColumn: migrated (0.1063s) ===========================
== AddIndexToNotes: migrating ================================================
-- add_index(:notes, [:project_id])
-> 0.0094s
-- add_index(:notes, [:user_id])
-> 0.0394s
== AddIndexToNotes: migrated (0.0489s) =======================================
== ProjectsContextsRemoveNotNullFromPosition: migrating ======================
-- change_column(:projects, :position, :integer, {:null=>true, :default=>nil})
-> 0.2133s
-- change_column(:contexts, :position, :integer, {:null=>true, :default=>nil})
-> 0.0097s
== ProjectsContextsRemoveNotNullFromPosition: migrated (0.2232s) =============
== CreateRecurringTodos: migrating ===========================================
-- create_table(:recurring_todos)
-> 0.0051s
-- add_column(:todos, :recurring_todo_id, :integer)
-> 0.0245s
== CreateRecurringTodos: migrated (0.0297s) ==================================
== AddSeveralIndexes: migrating ==============================================
-- add_index(:taggings, [:taggable_id, :taggable_type])
-> 0.0086s
-- add_index(:taggings, :tag_id)
-> 0.2208s
-- add_index(:recurring_todos, :user_id)
-> 0.0171s
-- add_index(:recurring_todos, :state)
-> 0.0150s
== AddSeveralIndexes: migrated (0.2617s) =====================================
== AddSmsToPreference: migrating =============================================
-- add_column(:preferences, :sms_email, :string)
-> 0.0452s
-- add_column(:preferences, :sms_context_id, :integer)
-> 0.0100s
== AddSmsToPreference: migrated (0.0554s) ====================================
== ChangeDatesToDatetimes: migrating =========================================
-- change_column(:todos, :show_from, :datetime)
-> 0.0103s
-- change_column(:todos, :due, :datetime)
-> 0.0111s
-- change_column(:recurring_todos, :start_from, :datetime)
-> 0.0329s
-- change_column(:recurring_todos, :end_date, :datetime)
-> 0.0100s
== ChangeDatesToDatetimes: migrated (0.1023s) ================================
== AddUpdatedAtToTodos: migrating ============================================
-- add_column(:todos, :updated_at, :timestamp)
-> 0.1827s
-- execute("update todos set updated_at = created_at where completed_at IS NULL")
-> 0.0005s
-- execute("update todos set updated_at = completed_at where NOT (completed_at IS NULL)")
-> 0.0004s
== AddUpdatedAtToTodos: migrated (0.1837s) ===================================
== UpgradeOpenId: migrating ==================================================
-- create_table(:open_id_authentication_associations, {:force=>true})
-> 0.0054s
-- create_table(:open_id_authentication_nonces, {:force=>true})
-> 0.0044s
-- drop_table(:open_id_associations)
-> 0.0017s
-- drop_table(:open_id_nonces)
-> 0.0024s
-- drop_table(:open_id_settings)
-> 0.0015s
== UpgradeOpenId: migrated (0.0156s) =========================================
== RemoveUserFromTaggings: migrating =========================================
-- remove_index(:taggings, [:tag_id, :taggable_id, :taggable_type])
-> 0.0083s
-- remove_index(:tags, :name)
-> 0.0073s
-- remove_column(:taggings, :user_id)
-> 0.0072s
-- add_index(:tags, :name)
-> 0.1684s
-- add_index(:taggings, [:tag_id, :taggable_id, :taggable_type])
-> 0.0405s
== RemoveUserFromTaggings: migrated (0.2321s) ================================
== FixIncorrectlyHiddenTodos: migrating ======================================
== FixIncorrectlyHiddenTodos: migrated (0.0545s) =============================
== AddDefaultTagsToProject: migrating ========================================
-- add_column(:projects, :default_tags, :string)
-> 0.0093s
== AddDefaultTagsToProject: migrated (0.0093s) ===============================
== AddTodoDependencies: migrating ============================================
-- create_table(:dependencies)
-> 0.0038s
== AddTodoDependencies: migrated (0.0038s) ===================================
== AddShowAlwaysToRecurringTodo: migrating ===================================
-- add_column(:recurring_todos, :show_always, :boolean)
-> 0.0277s
== AddShowAlwaysToRecurringTodo: migrated (0.0422s) ==========================
== AddIndexToTodoState: migrating ============================================
-- add_index(:todos, :state)
-> 0.0104s
== AddIndexToTodoState: migrated (0.0105s) ===================================
== AddLocaleToPreference: migrating ==========================================
-- add_column(:preferences, :locale, :string)
-> 0.1439s
== AddLocaleToPreference: migrated (0.1439s) =================================
== AdaptToNewAasm: migrating =================================================
-- change_column_default(:todos, :state, nil)
-> 0.0044s
-- change_column_default(:projects, :state, nil)
-> 0.0044s
-- change_column_default(:recurring_todos, :state, nil)
-> 0.0048s
== AdaptToNewAasm: migrated (0.0137s) ========================================
== MakeOldRecurringTodosValidate: migrating ==================================
== MakeOldRecurringTodosValidate: migrated (0.0008s) =========================
== ChangeCryptedPasswordLength: migrating ====================================
-- change_column("users", "crypted_password", :string, {:limit=>60})
-> 0.0084s
== ChangeCryptedPasswordLength: migrated (0.0086s) ===========================
== AddLastReviewedToProject: migrating =======================================
-- add_column(:projects, :last_reviewed, :timestamp)
-> 0.0287s
-- execute("UPDATE projects SET last_reviewed = created_at WHERE last_reviewed IS NULL")
-> 0.0002s
== AddLastReviewedToProject: migrated (0.0290s) ==============================
== AddNextReviewPreferences: migrating =======================================
-- add_column(:preferences, :review_period, :integer, {:default=>14, :null=>false})
-> 0.0082s
== AddNextReviewPreferences: migrated (0.0083s) ==============================
== AddIndicesToDependencyTable: migrating ====================================
-- add_index(:dependencies, :successor_id)
-> 0.0079s
-- add_index(:dependencies, :predecessor_id)
-> 0.0676s
-- add_index(:projects, :state)
-> 0.1340s
-- add_index(:projects, [:user_id, :state])
-> 0.0423s
== AddIndicesToDependencyTable: migrated (0.2522s) ===========================
== AddRenderedNotes: migrating ===============================================
-- add_column(:todos, "rendered_notes", :text)
-> 0.0086s
-- Clearing show_from dates from completed todos
-- Generating new column values from notes. This may take a while.
-- Done: 0 / 0
== AddRenderedNotes: migrated (0.0121s) ======================================
== CreateTolkTables: migrating ===============================================
-- create_table(:tolk_locales)
-> 0.0030s
-- add_index(:tolk_locales, :name, {:unique=>true})
-> 0.0077s
-- create_table(:tolk_phrases)
-> 0.0250s
-- create_table(:tolk_translations)
-> 0.0049s
-- add_index(:tolk_translations, [:phrase_id, :locale_id], {:unique=>true})
-> 0.0079s
== CreateTolkTables: migrated (0.0488s) ======================================
== NoDefaultAdminEmail: migrating ============================================
-- remove_column(:preferences, :admin_email)
-> 0.0194s
== NoDefaultAdminEmail: migrated (0.0195s) ===================================
```
###Precompile Assets
$ cd ~/tracks
$ rake assets:precompile
/home/tracks/.rvm/rubies/ruby-1.9.3-p547/bin/ruby /home/tracks/.rvm/gems/ruby-1.9.3-p547/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
###WEBrick
Open firewall for Tracks using WEBrick on port 3000 TCP.
```
$ sudo system-config-firewall-tui
$ sudo service iptables status
```
###Start the Server (test)
```
$ cd ~/tracks
$ rails server -e production
=> Booting WEBrick
=> Rails 3.2.13 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2014-05-31 14:19:21] INFO WEBrick 1.3.1
[2014-05-31 14:19:21] INFO ruby 1.9.3 (2014-05-14) [x86_64-linux]
[2014-05-31 14:19:21] INFO WEBrick::HTTPServer#start: pid=3521 port=3000
```
###Success?
If the server failed to start, review logs and/or the instructions above. If server started successfully, ctrl+c to shutdown Tracks and continue the installation.
##Apache
Update the tracks user directory in preparation for passenger.
```
$ sudo chmod o+x /home/tracks
```
Configure Passenger & Apache2
```
$ passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v4.0.44.
This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.
Here's what you can expect from the installation process:
1. The Apache 2 module will be installed for you.
2. You'll learn how to configure Apache.
3. You'll learn how to deploy a Ruby on Rails application.
Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.
```
If you have met the requirements, everything should be green. Accept the defaults to compile which takes quite some time. The installation should complete with the following.
```
--------------------------------------------
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /home/tracks/.rvm/gems/ruby-1.9.3-p547/gems/passenger-4.0.44/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/tracks/.rvm/gems/ruby-1.9.3-p547/gems/passenger-4.0.44
PassengerDefaultRuby /home/tracks/.rvm/gems/ruby-1.9.3-p547/wrappers/ruby
</IfModule>
After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!
Press ENTER to continue.
--------------------------------------------
Deploying a web application: an example
Suppose you have a web application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:
<VirtualHost *:80>
ServerName www.yourhost.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /somewhere/public
<Directory /somewhere/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
# Uncomment this if you're on Apache >= 2.4:
#Require all granted
</Directory>
</VirtualHost>
And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:
/home/tracks/.rvm/gems/ruby-1.9.3-p547/gems/passenger-4.0.44/doc/Users guide Apache.html
http://www.modrails.com/documentation/Users%20guide%20Apache.html
Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
https://www.phusionpassenger.com
Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
```
Create Passenger module conf file and copy and paste.
```
$ sudo vi /etc/httpd/conf.d/passenger.conf
```
Copy and paste the following:
```
LoadModule passenger_module /home/tracks/.rvm/gems/ruby-1.9.3-p547/gems/passenger-4.0.44/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/tracks/.rvm/gems/ruby-1.9.3-p547/gems/passenger-4.0.44
PassengerDefaultRuby /home/tracks/.rvm/gems/ruby-1.9.3-p547/wrappers/ruby
PassengerDefaultUser apache
</IfModule>
```
Update apache conf file.
```
$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
$ sudo vi /etc/httpd/conf/httpd.conf
```
At the bottom of the file, add the following:
```
<VirtualHost *:80>
ServerName www.somedomain.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /home/tracks/tracks/public
<Directory /home/tracks/tracks/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
# Uncomment this if you're on Apache >= 2.4:
#Require all granted
</Directory>
</VirtualHost>
```
Configure SELinux by configuring 'SELINUX' to 'permissive'
```
$ sudo vi /etc/selinux/conf
```
Then for this session set SELinux to be permissive
```
$ sudo setenforce 0
```
Once Tracks installation is complete, you can create a SELinux module. See the section titled "SELINUX" below for instructions.
Open firewall for Apache by 'customizing' and permitting http or web traffic (80 TCP). You may, also, remove the previous rule for port 3000 TCP.
```
$ sudo system-config-firewall-tui
```
Verify changes using:
```
$ sudo service iptables status
```
Validate Apache operations by starting the httpd service then using a browser, verify, you are prompted to set admin credentials for Tracks.
```
$ sudo service httpd start
```
Configure Apache to start at boot.
```
$ sudo chkconfig httpd on
```
Update config.serve_static_assets variable to false.
```
$ vi environments/production.rb
```
##Done
At this point you are ready to begin using Tracks.
The basic process is as follows:
Create contexts, i.e. work, home, gym, etc.
Create projects and specify context.
Create actons specifying context and project.
Alternatively, You can simply create an action specifying a new context and project. Tracks will auto-create them. For example, create an action to 'replace toilet seal' and specify context 'home' and project 'bathroom remodel.'
;) Enjoy!