From FusionForge Wiki
Jump to: navigation, search

Grand Unified Makefile or GUM

This is the temporary and jovial nickname for the installation process unification.

The goal is to unify:

  • Debian packaging
  • RPM packaging
  • install-ng
  • manual installs


Cf. Installing/FromSource.

More advanced usage: distro install:

make install-common  prefix=/usr DESTDIR=/tmp/pkg/common/
make install-db      prefix=/usr DESTDIR=/tmp/pkg/db/
make install-web     prefix=/usr DESTDIR=/tmp/pkg/web/
make install-shell   prefix=/usr DESTDIR=/tmp/pkg/shell/
make install-plugin-message  prefix=/usr DESTDIR=/tmp/pkg/build-plugin-message/
# ...
# Call $(source_path)/post-install.d/x/x.sh from the packaging hooks

Design principles

  • Everything in GNUmakefiles and post-install.d/, deb/rpm packaging as thin as possible
  • Consistency among installed (make install or packaged) and in-place (tar dir == install dir) setups
  • Plugins installation based on common directory layout
  • Use predictable directories (so we don't list files but only a set of directories)
  • Post-install assumes all the .ini are properly configured.
  • Multi-servers support
  • Split packaging support


  • $(data_path)/utils/default_page.php -> $(data_path)/templates/default_page.php
  • src/locales/ -> src/locale/ (and src/translations/ -> src/locale/)
  • src/utils/ -> src/bin/ (for utils used after installation - it's only a change for manual installs)
  • httpd.conf.d:
    • expanded at install time
    • overridable (allow the user to customize them, hence do not overwrite them)
    • currently httpd.conf (Include *) can be emptied by the user so he can pick which individual config files to enable - could be converted to component-based install
  • $(data_path)/etc/httpd.vhosts -> $(config_path)/etc/httpd.conf.d/httpd.vhosts (overdue, cf. create_vhosts.php)
  • $(source_path)/etc/templates/httpd.vhosts -> $(source_path)/templates/httpd.vhosts.tmpl
  • ${distro}-install-secrets.ini -> post-install-secrets.ini
  • ${distro}-install.ini -> post-install.ini
  • $(chroot)/scmrepos -> $(datadir)/scmrepos
  • $(data_path)/etc/ -> $(data_path)/templates/
  • $(source_path)/cronjobs/ -> $(source_path)/cronjobs/*/
  • rpm: database user is now using a password (supports remote db setup; Debian already does); separate nss user


  • svnscm::repos_path : argument to svnserve -r
  • core::apache_user : user for files accessible by httpd
  • core::apache_group : user for files accessible by httpd
  • core::apache_service : for "service XXX restart" or "service XXX reload"


  • generate the plugins packaging (currently it's a boilerplate)
  • the list of packaged plugins should be configurable to ease excluding one from e.g. Debian or Fedora
  • add a configuration option for the system user (previously hardcoded to 'gforge'; could be detected fusionforge|gforge|create 'fusionforge'); or drop the user, not sure it's really used