Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Linux distribution packaging

What a Linux distribution packager should know before packaging Exponential as deb or rpm - the project publishes no distribution package of the CMS (Velocity has deb and rpm packages), the installation writes into its…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/bundlers/linux-distribution-packaging.md

On this page

Linux distribution packaging

This page is for packagers who want Exponential installable with apt or dnf. It states what exists and what packagers must decide themselves. The project publishes no deb or rpm package of the Exponential CMS; it does publish deb and rpm packages of Velocity, its web server.

Warning

.htaccess slows down every request. When .htaccess files are enabled (AllowOverride anything but None), let alone used, Apache looks for them and reads and evaluates them on every request, in every directory of the path, and page loading times go up drastically (measured). The only real fix is to switch the feature off for the virtual host: AllowOverride None in the HTTPS virtual host, and the rules in the virtual host's own configuration as mod_rewrite rules. That is far faster in production speed tests and well worth the time it takes to optimize a production configuration. Switch over right away: copy the rules of the example HTTPS virtual host into your virtual host (with the static cache, also staticcache_offload.conf), set AllowOverride None, run apachectl configtest, reload Apache and test the site. The same rules for other servers: nginx, LiteSpeed, Caddy, IIS, Velocity (built in); where virtual host rules go in a control panel: Plesk, cPanel, DirectAdmin, ISPConfig. On LiteSpeed or OpenLiteSpeed, the server's own page cache can also answer anonymous visitors and crawlers without PHP: Page caching with LiteSpeed and OpenLiteSpeed.

Contents

  1. What the project publishes
  2. How the installation is laid out
  3. Composer and distribution policy
  4. The post-install step
  5. Updates through the package manager
  6. Before you publish

What the project publishes

ItemFormSource
Exponential 6Git tags and the Composer package se7enxweb/exponential3.1
ExtensionsComposer packages, one per extensioncomposer.json
VelocityComposer package, deb for Debian 12/13 and Ubuntu 22.04/24.04, rpm for Enterprise Linux 9/10, Docker images, binariesVelocity packages

The Velocity packages are a working model of how the project packages: architecture-independent, "Nothing starts on install", a qbix system user, settings in /etc/default/exponential-velocity.

How the installation is laid out

Exponential is "a directory of PHP files" whose document root is the installation root (Web server examples). It writes into its own tree:

DirectoryWrittenNote
var/alwayscaches, logs, uploads, autoload arrays, the SQLite database
settings/, settings/override, settings/siteaccessby the installers and the administrationManagedByDeployment=enabled stops the administration from writing settings
design/, extension/while packages are installed from the administration
autoload/, var/autoload/by ezpgenerateautoloads.phpkernel and extension arrays

Source: Writable directories and permissions.

What this means for a package:

  • Install the tree in one place (for example under /usr/share/<name>/) and symlink or bind the writable parts to /var/lib/<name>/ and /etc/<name>/ only after testing that every writer follows the links. The documentation does not describe a split layout; you own that test.
  • site.ini [FileSettings] VarDir is set per siteaccess by the installer (var/<package> or var/site), and extra extension roots can be added with [ExtensionSettings] AdditionalExtensionDirectories[] (Additional extension directories). Those are the settings a layout can lean on.
  • The web server configuration you ship must keep the routing of .htaccess_root.
  • .htaccess and config.php are installation files, not package files: ship the templates (.htaccess_root, .htaccess_root_static, config.php-RECOMMENDED) and let the administrator, or your post-install step, copy them with exp:setup:htaccess and exp:setup:config. An update then never overwrites a changed copy: the commands show the diff and refuse unless given --force (Setting up .htaccess and config.php from the console).

Composer and distribution policy

Exponential depends on many Composer packages (vendor/) and on extensions installed by a Composer plugin into extension/. Distributions differ in whether they accept vendored dependencies. Decide with your distribution's policy, and note:

The post-install step

A distribution package should not install a site by itself:

  • Do: create the system user, set ownership of the writable directories, install a disabled web server and cron configuration, regenerate autoloads, print where the documentation and the install command are. Putting .htaccess and config.php into place is safe here, because both commands leave an existing file alone and change nothing on a second run; run as root they need --allow-root-user and --owner=<user>:<group> for the site's user:

    php bin/php/console exp:setup:htaccess --apply --allow-root-user --owner=www-data:www-data
    php bin/php/console exp:setup:config --apply --allow-root-user --owner=www-data:www-data
  • Do not: create a database, run exp:install with defaults, or start a web server. The administrator runs the install once, with their own URL, database and e-mail (Unattended install with exp:install).

Updates through the package manager

A package update replaces code; Exponential updates have a second half, the database update files and the checklist of each period (Chapter 11.6). The package can:

  • clear caches and regenerate autoloads after the update (Caches and autoloads);
  • tell the administrator when .htaccess no longer matches the new .htaccess_root: exp:setup:htaccess without --apply exits 1 and prints the diff, and exp:config:list shows settings new in config.php-RECOMMENDED as (not set);
  • tell the administrator that a database update may be due, with the link;
  • never run database updates unattended on a site it does not know.

Before you publish

  • To do: Copyright file lists Exponential (GPL-2.0-or-later), every extension and every vendored package.
  • To do: Source package available, as distributions require anyway.
  • To do: The package name and description follow Naming and branding a bundle.
  • To do: Installation, upgrade and removal tested on a clean system.
  • To do: Security fixes have a path: you track releases and rebuild (Updates and upgrade paths).

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x