{"id":4529,"date":"2019-11-01T21:07:58","date_gmt":"2019-11-01T18:07:58","guid":{"rendered":"https:\/\/kifarunix.com\/?p=4529"},"modified":"2024-03-12T23:23:48","modified_gmt":"2024-03-12T20:23:48","slug":"install-redmine-on-fedora-linux","status":"publish","type":"post","link":"https:\/\/kifarunix.com\/install-redmine-on-fedora-linux\/","title":{"rendered":"Install Redmine on Fedora Linux"},"content":{"rendered":"\n<p>This guide will take you through how to install&nbsp;<a href=\"https:\/\/www.redmine.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine<\/a>&nbsp;on Fedora Linux. Redmine is a cross-platform as well as cross-database flexible project management web application and we are using Fedora 39 specifically on this blog post.<\/p>\n\n\n\n<p>Redmine has quite a number of features that are described on&nbsp;<a href=\"https:\/\/www.redmine.org\/projects\/redmine\/wiki\/Features\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine features page<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ul><li><a href=\"#installing-redmine-on-fedora-linux\">Installing Redmine on Fedora Linux<\/a><ul><li><a href=\"#create-redmine-system-user\">Create Redmine System User<\/a><\/li><li><a href=\"#install-apache-http-server\">Install Apache HTTP Server<\/a><\/li><li><a href=\"#install-maria-db-database-backend\">Install MariaDB Database Backend<\/a><\/li><li><a href=\"#create-redmine-database-and-database-user\">Create Redmine Database and Database User<\/a><\/li><li><a href=\"#download-and-install-redmine\">Download and Install Redmine<\/a><ul><li><a href=\"#install-required-dependencies\">Install Required Dependencies<\/a><\/li><li><a href=\"#install-ruby-on-fedora-linux\">Install Ruby on Fedora Linux<\/a><\/li><li><a href=\"#download-and-install-redmine-1\">Download and Install Redmine<\/a><\/li><li><a href=\"#configure-redmine-database-connection-settings\">Configure Redmine Database Connection Settings<\/a><\/li><li><a href=\"#install-ruby-dependencies\">Install Ruby Dependencies<\/a><\/li><li><a href=\"#generate-secret-session-token\">Generate Secret Session Token<\/a><\/li><li><a href=\"#create-database-schema-objects\">Create Database Schema Objects<\/a><\/li><li><a href=\"#configure-file-system-permissions\">Configure FileSystem Permissions<\/a><\/li><\/ul><\/li><li><a href=\"#testing-redmine-installation\">Testing Redmine Installation<\/a><\/li><li><a href=\"#configure-apache-for-redmine\">Configure Apache for Redmine<\/a><ul><li><a href=\"#install-apache-passenger-module\">Install Apache Passenger Module<\/a><\/li><li><a href=\"#create-redmine-apache-configuration-file\">Create Redmine Apache Configuration file<\/a><\/li><\/ul><\/li><li><a href=\"#access-redmine-from-browser\">Access Redmine from Browser<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"installing-redmine-on-fedora-linux\">Installing Redmine on Fedora Linux<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-redmine-system-user\">Create Redmine System User<\/h3>\n\n\n\n<p>In this guide, we will install Redmine on&nbsp;<code>\/opt\/redmine<\/code>&nbsp;directory and run it as non-privileged redmine system user.<\/p>\n\n\n\n<p>As such, create a redmine system user&nbsp;<strong>(or any other non-privileged system user that Redmine will run as for that case)<\/strong>&nbsp;and assign the&nbsp;<code>\/opt\/redmine<\/code>&nbsp;as its home directory.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">useradd -r -m -d \/opt\/redmine redmine<\/pre>\n\n\n\n<p>Consult&nbsp;<code><strong>man useradd<\/strong><\/code>&nbsp;to learn what the options used above means.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"install-apache-http-server\">Install Apache HTTP Server<\/h3>\n\n\n\n<p>To install Apache HTTP server on Fedora Linux, simply execute;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dnf install httpd<\/pre>\n\n\n\n<p>Start and enable Apache HTTP server to run on system boot;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl enable httpd --now<\/pre>\n\n\n\n<p>Next, since we will be using Apache as our HTTP server, add Apache to Redmine group.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usermod -aG redmine apache<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"install-maria-db-database-backend\">Install MariaDB Database Backend<\/h3>\n\n\n\n<p>Redmine supports a number of database back-ends such as PostgreSQL, MySQL\/MariaDB, MSSQL. In this demo, we are using MariaDB 10.x.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dnf install mariadb-server<\/code><\/pre>\n\n\n\n<p>run the command below to start and enable MariaDB server on system boot;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl enable --now mariadb<\/code><\/pre>\n\n\n\n<p>Run initial MariaDB database secure script to remove default databases, test tables, disable remote root login;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql_secure_installation<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-redmine-database-and-database-user\">Create Redmine Database and Database User<\/h3>\n\n\n\n<p>Once the database backend is installed, login and create the database and database user for Redmine. Replace the database name accordingly.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mysql -u root -p<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">create database <strong>redminedb<\/strong>;<\/pre>\n\n\n\n<p>Create and grant the user all privileges on the database created.&nbsp;<strong>Replace the database user and password accordingly<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">grant all on <strong>redminedb.*<\/strong> to <strong>redmineadmin@localhost<\/strong> identified by 'P@ssWorD';<\/pre>\n\n\n\n<p>Reload privileges tables and quit.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">flush privileges;\nquit<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"download-and-install-redmine\">Download and Install Redmine<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"install-required-dependencies\">Install Required Dependencies<\/h4>\n\n\n\n<p>Begin by installing the dependencies required to build Redmine.<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>dnf install ruby-devel \\\n\trpm-build \\\n\twget \\\n\tlibxml2-devel \\\n\tvim \\\n\tmake \\\n\topenssl-devel \\\n\tautomake \\\n\tlibtool \\\n\tImageMagick \\\n\tImageMagick-devel \\\n\tmariadb-devel \\\n\tgcc \\\n\thttpd-devel \\\n\tlibcurl-devel \\\n\tgcc-c++ -y\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"install-ruby-on-fedora-linux\">Install Ruby on Fedora Linux<\/h4>\n\n\n\n<p>Redmine also requires Ruby interpreter which is installed automatically with the dependencies above.<\/p>\n\n\n\n<p>Verify installed version.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ruby -v<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ruby 3.2.2 (2023-03-30 revision e51014f9c0) &#91;x86_64-linux]<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/www.redmine.org\/projects\/redmine\/wiki\/RedmineInstall#Ruby-interpreter\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine version 5.1 supports&nbsp;upto Ruby 3.1<\/a>&nbsp;as of this post update! We used Ruby 3.2.2 and it seems to work!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"download-and-install-redmine-1\">Download and Install Redmine<\/h4>\n\n\n\n<p>In order to install the latest version of Redmine, navigate to the&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.redmine.org\/projects\/redmine\/wiki\/Download\" target=\"_blank\">Download\u2019s page<\/a>&nbsp;and grab the latest stable release version.<\/p>\n\n\n\n<p>You can simply download and extract the Redmine tarball to the Redmine install directory,&nbsp;<code>\/opt\/redmine<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>VER=5.1.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s https:\/\/www.redmine.org\/releases\/redmine-$VER.tar.gz | \\\nsudo -u redmine tar xz -C \/opt\/redmine\/ --strip-components=1<\/code><\/pre>\n\n\n\n<p>You should now have redmine files under&nbsp;<strong>\/opt\/redmine<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ls -alh \/opt\/redmine<\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>total 188K\ndrwx------. 17 redmine redmine 4.0K Nov 13 06:30 .\ndrwxr-xr-x.  3 root    root      21 Nov 13 05:32 ..\ndrwxr-xr-x.  8 redmine redmine   97 Oct 31 00:50 app\n-rw-r--r--.  1 redmine redmine  863 Oct 31 00:50 appveyor.yml\n-rw-r--r--.  1 redmine redmine   18 Jul 19 00:00 .bash_logout\n-rw-r--r--.  1 redmine redmine  144 Jul 19 00:00 .bash_profile\n-rw-r--r--.  1 redmine redmine  522 Jul 19 00:00 .bashrc\ndrwxr-xr-x.  2 redmine redmine   78 Oct 31 00:50 bin\ndrwxr-xr-x.  5 redmine redmine 4.0K Oct 31 00:50 config\n-rw-r--r--.  1 redmine redmine  129 Oct 31 00:50 config.ru\n-rw-r--r--.  1 redmine redmine  538 Oct 31 00:50 CONTRIBUTING.md\ndrwxr-xr-x.  3 redmine redmine   21 Oct 31 00:50 db\ndrwxr-xr-x.  2 redmine redmine  113 Oct 31 00:50 doc\ndrwxr-xr-x.  5 redmine redmine   58 Oct 31 00:50 extra\ndrwxr-xr-x.  2 redmine redmine   23 Oct 31 00:50 files\n-rw-r--r--.  1 redmine redmine 3.5K Oct 31 00:50 Gemfile\ndrwxr-xr-x.  2 redmine redmine   38 Oct 31 00:50 .github\n-rw-r--r--.  1 redmine redmine  823 Oct 31 00:50 .gitignore\n-rw-r--r--.  1 redmine redmine  694 Oct 31 00:50 .hgignore\ndrwxr-xr-x.  6 redmine redmine   85 Oct 31 00:50 lib\ndrwxr-xr-x.  2 redmine redmine   23 Oct 31 00:50 log\n-rw-r--r--.  1 redmine redmine   81 Oct 31 00:50 package.json\ndrwxr-xr-x.  2 redmine redmine   20 Oct 31 00:50 plugins\ndrwxr-xr-x.  8 redmine redmine 4.0K Oct 31 00:50 public\n-rwxr-xr-x.  1 redmine redmine  275 Oct 31 00:50 Rakefile\n-rw-r--r--.  1 redmine redmine  205 Oct 31 00:50 README.rdoc\n-rw-r--r--.  1 redmine redmine  56K Oct 31 00:50 .rubocop_todo.yml\n-rw-r--r--.  1 redmine redmine 5.3K Oct 31 00:50 .rubocop.yml\n-rw-r--r--.  1 redmine redmine   42 Oct 31 00:50 .stylelintignore\n-rw-r--r--.  1 redmine redmine 1009 Oct 31 00:50 .stylelintrc\ndrwxr-xr-x. 15 redmine redmine 4.0K Oct 31 00:50 test\ndrwxr-xr-x.  8 redmine redmine   95 Oct 31 00:50 tmp\ndrwxr-xr-x.  2 redmine redmine    6 Oct 31 00:50 vendor\n-rw-r--r--.  1 redmine redmine  51K Oct 31 00:50 yarn.lock\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"configure-redmine-database-connection-settings\">Configure Redmine Database Connection Settings<\/h4>\n\n\n\n<p>First switch to Redmine\u2019s user account.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">su - redmine<\/pre>\n\n\n\n<p>Rename the sample Redmine configuration.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cp config\/configuration.yml{.example,}<\/pre>\n\n\n\n<p>Rename the sample dispatch CGI configuration file under the public folder as shown below;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cp public\/dispatch.fcgi{.example,}<\/pre>\n\n\n\n<p>Rename the sample the database configuration file.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cp config\/database.yml{.example,}<\/pre>\n\n\n\n<p>Next, open the database configure file for editing and and configure it to set the Redmine database connection details.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">vim config\/database.yml<\/pre>\n\n\n\n<p><strong>Replace the database name, database user and the password accordingly.<\/strong><\/p>\n\n\n\n<pre class=\"scroll-box\"><code>...\nproduction:\n  adapter: mysql2\n  database: redminedb\n  host: localhost\n  username: redmineadmin\n  password: \"P@ssWorD\"\n  # Use \"utf8\" instead of \"utfmb4\" for MySQL prior to 5.7.7\n  encoding: utf8mb4\n...\n<\/code><\/pre>\n\n\n\n<p>Save and exit the file.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"install-ruby-dependencies\">Install Ruby Dependencies<\/h4>\n\n\n\n<p>Next, install required Ruby dependencies. Note that this step should be executed as Redmine user created above. If you are still logged in as Redmine user, proceed. Otherwise, switch to redmine user.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">su - redmine<\/pre>\n\n\n\n<p>Install Bundler for managing gem dependencies.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gem install bundler<\/code><\/pre>\n\n\n\n<p>Once the bundler installation is done, you can now install required gems dependencies.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bundle config set --local path 'vendor\/bundle'<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">bundle config set --local without 'development test'<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">bundle install<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"generate-secret-session-token\">Generate Secret Session Token<\/h4>\n\n\n\n<p>To prevent tempering of the cookies that stores session data, you need to generate a random secret key that Rails uses to encode them.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bundle exec rake generate_secret_token<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-database-schema-objects\">Create Database Schema Objects<\/h4>\n\n\n\n<p>Create Rails database structure by running the command below;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">RAILS_ENV=production bundle exec rake db:migrate<\/pre>\n\n\n\n<p>Once the database migration is done, insert default configuration data into the database by executing;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"configure-file-system-permissions\">Configure FileSystem Permissions<\/h4>\n\n\n\n<p>Ensure that the following directories are available on Redmine directory,&nbsp;<strong>\/opt\/redmine.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tmp and tmp\/pdf<\/li>\n\n\n\n<li>public and public\/plugin_assets<\/li>\n\n\n\n<li>log<\/li>\n\n\n\n<li>files<\/li>\n<\/ul>\n\n\n\n<p>If they do not exist, simply create them and ensure that they are owned by the user used to run Redmine.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in tmp tmp\/pdf public\/plugin_assets; do [ -d $i ] || mkdir -p $i; done<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">chown -R redmine:redmine files log tmp public\/plugin_assets<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">chmod -R 755 \/opt\/redmine\/<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"testing-redmine-installation\">Testing Redmine Installation<\/h3>\n\n\n\n<p>The setup of Redmine on Fedora Linux is now done. You can test Redmine using WEBrick by executing the command below;<\/p>\n\n\n\n<p>You can now test Redmine using WEBrick by executing the command below;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>su - redmine<\/code><\/pre>\n\n\n\n<p>Add webrick to Gemfile;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo 'gem \"webrick\"' &gt;&gt; Gemfile<\/code><\/pre>\n\n\n\n<p>Install webrick gem and test the installation;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bundle install<\/code><\/pre>\n\n\n\n<pre id=\"block-cb556ad3-ebd1-450d-9c96-b5d3925e5d51\" class=\"wp-block-code\"><code>bundle exec rails server -u webrick -e production<\/code><\/pre>\n\n\n\n<p>Sample output;<\/p>\n\n\n\n<pre class=\"scroll-sz\"><code>=> Booting WEBrick\n=> Rails 6.1.7.6 application starting in production http:\/\/0.0.0.0:3000\n=> Run `bin\/rails server --help` for more startup options\n[2023-11-13 08:03:05] INFO  WEBrick 1.8.1\n[2023-11-13 08:03:05] INFO  ruby 3.2.2 (2023-03-30) [x86_64-linux]\n[2023-11-13 08:03:05] INFO  WEBrick::HTTPServer#start: pid=4022 port=3000\n<\/code><\/pre>\n\n\n\n<p>You can now access Redmine via the browser using the address,&nbsp;<code><strong>http:\/\/Server-IP:3000\/<\/strong><\/code>.<\/p>\n\n\n\n<p>Before that, open port 3000\/tcp on firewalld. Run the commands below as privileged user.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">firewall-cmd --add-port=3000\/tcp --permanent\nfirewall-cmd --reload<\/pre>\n\n\n\n<p>Once the port is opened, navigate to the browser and access Redmine. You should see a welcome page.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1901\" height=\"280\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-webrick.png\" alt=\"\" class=\"wp-image-10012\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-webrick.png?v=1628626525 1901w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-webrick-768x113.png?v=1628626525 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-webrick-1536x226.png?v=1628626525 1536w\" sizes=\"(max-width: 1901px) 100vw, 1901px\" \/><\/figure>\n\n\n\n<p>Click&nbsp;<strong>sign in<\/strong>&nbsp;at the top right corner and use the credentials:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>User<\/strong>:&nbsp;<code>admin<\/code><\/li>\n\n\n\n<li><strong>Password:<\/strong>&nbsp;<code>admin<\/code><\/li>\n<\/ul>\n\n\n\n<p>To stop Redmine foreground run, just press CTRL+C.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"configure-apache-for-redmine\">Configure Apache for Redmine<\/h3>\n\n\n\n<p>Once you have confirmed that Redmine is working fine after the testing, you need to configure Apache HTTP server for Redmine.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"install-apache-passenger-module\">Install Apache Passenger Module<\/h4>\n\n\n\n<p>Phusion Passenger is a web application server that can be used to server Redmine on production environments.<\/p>\n\n\n\n<p>Therefore, switch to Redmine user created above to install the Phusion Passenger Apache module;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>su - redmine<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>gem install passenger --no-document<\/code><\/pre>\n\n\n\n<p>Next, install Passenger Apache module. Replace the version of the Passenger accordingly.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>passenger-install-apache2-module<\/code><\/pre>\n\n\n\n<p>Follow through the installation guide to install Phusion Passenger. When prompted to choose a language, select Ruby and press Enter.<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>Welcome to the Phusion Passenger Apache 2 module installer, v6.0.18.\n\nThis installer will guide you through the entire installation process. It\nshouldn't take more than 3 minutes in total.\n\nHere's what you can expect from the installation process:\n\n 1. The Apache 2 module will be installed for you.\n 2. You'll learn how to configure Apache.\n 3. You'll learn how to deploy a Ruby on Rails application.\n\nDon't worry if anything goes wrong. This installer will advise you on how to\nsolve any problems.\n\nPress Enter to continue, or Ctrl-C to abort.\n\n\n--------------------------------------------\n\nWhich languages are you interested in?\n\nUse <space> to select.\nIf the menu doesn't display correctly, press '!'\n\n \u2023 \u2b22  Ruby\n   \u2b22  Python\n   \u2b21  Node.js\n   \u2b21  Meteor\n\n--------------------------------------------\n\nChecking for required software...\n\n * Checking for C compiler...\n      Found: yes\n      Location: \/usr\/bin\/cc\n * Checking for C++ compiler...\n      Found: yes\n      Location: \/usr\/bin\/c++\n * Checking for Curl development headers with SSL support...\n      Found: yes\n      curl-config location: \/usr\/bin\/curl-config\n      Header location: \/usr\/include\/curl\/curl.h\n      Version: libcurl 8.2.1\n      Usable: yes\n      Supports SSL: yes\n * Checking for Zlib development headers...\n      Found: yes\n      Location: \/usr\/include\/zlib.h\n * Checking for Apache 2...\n      Found: yes\n      Location of httpd: \/usr\/sbin\/httpd\n      Apache version: 2.4.58\n * Checking for Rake (associated with \/usr\/bin\/ruby)...\n      Found: yes\n      Location: \/usr\/bin\/ruby \/opt\/redmine\/bin\/rake\n * Checking for OpenSSL support for Ruby...\n      Found: yes\n * Checking for RubyGems...\n      Found: yes\n * Checking for Ruby development headers...\n      Found: yes\n      Location: \/usr\/include\/ruby.h\n * Checking for rack...\n      Found: yes\n * Checking for OpenSSL development headers...\n      Found: yes\n      Location: \/usr\/include\/openssl\/ssl.h\n * Checking for Apache 2 development headers...\n      Found: yes\n      Location of apxs2: \/usr\/bin\/apxs\n * Checking for Apache Portable Runtime (APR) development headers...\n      Found: yes\n      Location: \/usr\/bin\/apr-1-config\n      Version: 1.7.3\n * Checking for Apache Portable Runtime Utility (APU) development headers...\n      Found: yes\n      Location: \/usr\/bin\/apu-1-config\n      Version: 1.6.3\n\n--------------------------------------------\n\nChecking whether there are multiple Apache installations...\nOnly a single installation detected. This is good.\n\n--------------------------------------------\nCompiling and installing Apache 2 module...\n\n<\/code><\/pre>\n\n\n\n<p>You could as well install Phusion Passenger from the RPM repos but as of this writing, couldn&#8217;t find any repos providing it on Fedora 39.<\/p>\n\n\n\n<p>Once the module compilation is done, you are provided with how configure the module on Apache,<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>...\nAlmost there!\n\nPlease edit your Apache configuration file, and add these lines:\n\n   LoadModule passenger_module \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\/buildout\/apache2\/mod_passenger.so\n   <IfModule mod_passenger.c>\n     PassengerRoot \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\n     PassengerDefaultRuby \/usr\/bin\/ruby\n   <\/IfModule>\n\nAfter you restart Apache, you are ready to deploy any number of web\napplications on Apache, with a minimum amount of configuration!\n\nPress ENTER when you are done editing.\n\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-redmine-apache-configuration-file\">Create Redmine Apache Configuration file<\/h4>\n\n\n\n<p>Before you can press Enter to complete the Module installation and setup, open a new login session as privileged user and create\/update the Redmine Apache configuration file.<\/p>\n\n\n\n<p>Create Apache virtual host configuration for Redmine with the following content and configure it to load the passenger modules. Replace the Server Name accordingly and ensure it is resolvable if using domain name. You can as well change the default port if you want.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vim \/etc\/httpd\/conf.d\/redmine.conf<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>Listen 3000\n<strong>LoadModule passenger_module \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\/buildout\/apache2\/mod_passenger.so\n&lt;IfModule mod_passenger.c>\n  PassengerRoot \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\n  PassengerDefaultRuby \/usr\/bin\/ruby\n&lt;\/IfModule><\/strong>\n&lt;VirtualHost *:3000>\n    ServerName redmine.kifarunix-demo.com\n    DocumentRoot \"\/opt\/redmine\/public\" \n\n    CustomLog logs\/redmine_access.log combined\n    ErrorLog logs\/redmine_error_log\n    LogLevel warn\n\n    &lt;Directory \"\/opt\/redmine\/public\">\n        Options Indexes ExecCGI FollowSymLinks\n        Require all granted\n        AllowOverride all\n    &lt;\/Directory>\n&lt;\/VirtualHost>\n<\/code><\/pre>\n\n\n\n<p>Verify Apache configuration syntax.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">httpd -t<\/pre>\n\n\n\n<pre id=\"block-c82f069c-4bd4-4419-8840-134b3dac1631\" class=\"wp-block-preformatted\">Syntax OK<\/pre>\n\n\n\n<p>Once the installation and setup of Apache Passenger module is complete, restart Apache<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl restart httpd<\/pre>\n\n\n\n<p>Press ENTER on the Passenger module installation shell to validate the configurations.<\/p>\n\n\n\n<pre class=\"scroll-box\"><code>Press ENTER when you are done editing.\n\n\n--------------------------------------------\n\nValidating installation...\n\n * Checking whether this Passenger install is in PATH... (!)\n\n   Please add \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\/bin to PATH.\n   Otherwise you will get \"command not found\" errors upon running\n   any Passenger commands.\n   \n   Learn more at about PATH at:\n   \n     https:\/\/www.phusionpassenger.com\/library\/indepth\/environment_variables.html#the-path-environment-variable\n\n * Checking whether there are no other Passenger installations... (!)\n\n   You are currently validating against Phusion Passenger(R) 6.0.18, located in:\n   \n     \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18\/bin\/passenger\n   \n   Besides this Passenger installation, the following other\n   Passenger installations have also been detected:\n   \n     \/opt\/redmine\/bin\/passenger\n   \n   Please uninstall these other Passenger installations to avoid\n   confusion or conflicts.\n\n * Checking whether Apache is installed... \u2713\n * Checking whether the Passenger module is correctly configured in Apache... \u2713\n\nDetected 0 error(s), 2 warning(s).\nPress ENTER to continue.\n\n\n--------------------------------------------\n\nDeploying a web application\n\nTo learn how to deploy a web app on Passenger, please follow the deployment\nguide:\n\n  https:\/\/www.phusionpassenger.com\/library\/deploy\/apache\/deploy\/\n\nEnjoy Phusion Passenger, a product of Phusion\u00ae (www.phusion.nl) :-)\nhttps:\/\/www.phusionpassenger.com\n\nPassenger\u00ae is a registered trademark of Phusion Holding B.V.\n<\/code><\/pre>\n\n\n\n<p>Check if anything is listening on Port 3000.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ss -altnp<\/pre>\n\n\n\n<p>That is awesome.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"access-redmine-from-browser\">Access Redmine from Browser<\/h3>\n\n\n\n<p>Since we have already opened port 3000\/tcp on firewallD, you should be able to access Redmine web interface now.<\/p>\n\n\n\n<p>Replace the&nbsp;<strong>server-IP-or-Hostname<\/strong>&nbsp;accordingly.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">http:\/\/server-IP-or-Hostname:3000<\/pre>\n\n\n\n<p>Ensure the port is opened on the firewall.<\/p>\n\n\n\n<p>Default login credentials given above.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1393\" height=\"480\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/redmine-login-page.png?v=1699822853\" alt=\"Install Redmine on Linux\" class=\"wp-image-19226\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/redmine-login-page.png?v=1699822853 1393w, https:\/\/kifarunix.com\/wp-content\/uploads\/2023\/11\/redmine-login-page-768x265.png?v=1699822853 768w\" sizes=\"(max-width: 1393px) 100vw, 1393px\" \/><\/figure>\n\n\n\n<p>If you get the error below;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>We're sorry, but something went wrong.\nThe issue has been logged for investigation. Please try again later.<\/strong><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"922\" height=\"588\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/phusion-selinux-3.png\" alt=\"\" class=\"wp-image-10019\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/phusion-selinux-3.png?v=1628627357 922w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/phusion-selinux-3-768x490.png?v=1628627357 768w\" sizes=\"(max-width: 922px) 100vw, 922px\" \/><\/figure>\n\n\n\n<p>You may also come across such errors in Apache logs;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tail -f \/var\/log\/httpd\/error_log<\/code><\/pre>\n\n\n\n<pre class=\"scroll-box\"><code>[ pid=20914 ] **************** LOOK ABOVE FOR CRASH DETAILS ****************\n[ W 2023-11-13 08:45:56.7052 20325\/T4 age\/Wat\/AgentWatcher.cpp:94 ]: Passenger core (pid=20914) crashed with signal SIGABRT, restarting it...\n[ N 2023-11-13 08:45:56.7285 21003\/T1 age\/Cor\/CoreMain.cpp:1340 ]: Starting Passenger core...\n[ N 2023-11-13 08:45:56.7287 21003\/T1 age\/Cor\/CoreMain.cpp:256 ]: Passenger core running in multi-application mode.\n[ W 2023-11-13 08:45:56.7352 21003\/T1 age\/Cor\/CoreMain.cpp:1007 ]: WARNING: potential privilege escalation vulnerability detected. Phusion Passenger(R) is running as root, and part(s) of the Passenger root path (\/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18) can be changed by non-root user(s):\n\n - \/opt\/redmine\/.local\/share\/gem\/ruby\/gems\/passenger-6.0.18 is not secure: it can be modified by user redmine\n - \/opt\/redmine\/.local\/share\/gem\/ruby\/gems is not secure: it can be modified by user redmine\n - \/opt\/redmine\/.local\/share\/gem\/ruby is not secure: it can be modified by user redmine\n - \/opt\/redmine\/.local\/share\/gem is not secure: it can be modified by user redmine\n - \/opt\/redmine\/.local\/share is not secure: it can be modified by user redmine\n - \/opt\/redmine\/.local is not secure: it can be modified by user redmine\n - \/opt\/redmine is not secure: it can be modified by user redmine\n\nPlease either fix up the permissions for the insecure paths, or install Passenger in a different location that can only be modified by root.\n[ N 2023-11-13 08:45:56.7352 21003\/T1 age\/Cor\/CoreMain.cpp:1015 ]: Passenger core online, PID 21003\n[ N 2023-11-13 08:45:58.7776 21003\/T4 age\/Cor\/SecurityUpdateChecker.h:519 ]: Security update check: no update found (next check in 24 hours)\n\n<\/code><\/pre>\n\n\n\n<p>You need to sort your SELinux permissions.<\/p>\n\n\n\n<p>Phusion Passenger when not installed from the repositories does not come with SELinux&nbsp;policy modules and thus may not work well with SELinux enabled.<\/p>\n\n\n\n<p>To make this simple, just disable SELinux and reboot your system and then access Redmine again on browser.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>setenforce 0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>sed -i 's\/=enforcing\/=disabled\/' \/etc\/selinux\/config<\/code><\/pre>\n\n\n\n<p>Otherwise if you want to keep SELinux running, generate a custom SELinux module for Phusion Passenger for any denied entry in&nbsp;<code>\/var\/log\/audit\/audit.log<\/code>&nbsp;and install it. For example;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dnf install policycoreutils-python-utils<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">grep -i denied \/var\/log\/audit\/audit.log | grep -i Passenger | audit2allow -a -M passenger<\/pre>\n\n\n\n<p>This command generated a policy package that can be installed by running;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">semodule -i passenger.pp<\/pre>\n\n\n\n<p>With SELinux issues fixed, login to Redmine using admin for both user and password.<\/p>\n\n\n\n<p>You are prompted to reset the password. Do reset and proceed to login to Redmine web interface.<\/p>\n\n\n\n<p>After login, reset the password and proceed to setup your Redmine profile on Fedora Linux.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1882\" height=\"816\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-dashboard-2.png\" alt=\"\" class=\"wp-image-10022\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-dashboard-2.png?v=1628627521 1882w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-dashboard-2-768x333.png?v=1628627521 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/redmine-dashboard-2-1536x666.png?v=1628627521 1536w\" sizes=\"(max-width: 1882px) 100vw, 1882px\" \/><\/figure>\n\n\n\n<p>Once your profile is setup, you can jump to new project.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1902\" height=\"695\" src=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/project.png\" alt=\"\" class=\"wp-image-10020\" title=\"\" srcset=\"https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/project.png?v=1628627416 1902w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/project-768x281.png?v=1628627416 768w, https:\/\/kifarunix.com\/wp-content\/uploads\/2021\/08\/project-1536x561.png?v=1628627416 1536w\" sizes=\"(max-width: 1902px) 100vw, 1902px\" \/><\/figure>\n\n\n\n<p>Read more on how to use <a href=\"https:\/\/www.redmine.org\/projects\/redmine\/wiki\/Guide\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine User Guide<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide will take you through how to install&nbsp;Redmine&nbsp;on Fedora Linux. Redmine is a cross-platform as well as cross-database flexible project management web application and<\/p>\n","protected":false},"author":1,"featured_media":10031,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_lock_modified_date":false,"footnotes":""},"categories":[121,1170,1171],"tags":[202,289,924,7300,999,1172,1176,1175],"class_list":["post-4529","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-howtos","category-project-management","category-redmine","tag-apache","tag-fedora-29","tag-fedora-30","tag-install-redmine-on-fedora","tag-mysql-8","tag-redmine","tag-redmine-on-fedora","tag-redmine-selinux","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","resize-featured-image"],"_links":{"self":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/4529"}],"collection":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/comments?post=4529"}],"version-history":[{"count":6,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/4529\/revisions"}],"predecessor-version":[{"id":21276,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/posts\/4529\/revisions\/21276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media\/10031"}],"wp:attachment":[{"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/media?parent=4529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/categories?post=4529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kifarunix.com\/wp-json\/wp\/v2\/tags?post=4529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}