Installation & setup
Koha packages or a source install: which one you want
Almost every library wants the packages. Here is exactly what a source install gives up — the koha-* commands, the upgrade path, and most published answers — and the two cases where it is still right.
Updated 2026-08-12 · Tested against Koha 26.05
Install from the community packages — koha-common on Debian or Ubuntu. A source install is for developing Koha, not for running a library on it: it gives up the whole koha-* command set, the packaged upgrade path, and most of the answers you will find when something breaks. The two exceptions are at the end of this page.
What the two actually are
| Package install | Source install |
|---|---|
| <code>sudo apt install koha-common</code> | Clone or download the source, run its installer, wire up Apache, Zebra, cron and services by hand |
| Instances created with <code>koha-create</code>, each with its own database, ports, users and virtual hosts | One installation, configured by you; multiple instances are your problem |
| Upgrades are <code>apt upgrade</code> then <code>koha-upgrade-schema</code> | Upgrades are re-running the installer over the tree, then the schema, and re-checking every hand edit |
| Security updates to Perl libraries arrive with the OS | You track them yourself |
| Every <code>koha-*</code> command exists | None of them exist |
The koha-* commands are the real difference
This is the part people underestimate. The commands in the manual, on the mailing list, in every guide and in this knowledge base are packaging, not part of Koha's Perl. On a source install none of them are there:
koha-create/koha-remove— build and tear down an instance, including its database, user, ports and Apache sitekoha-dump/koha-restore— the backup that includes the configuration, not just the databasekoha-plack,koha-zebra,koha-es-indexer,koha-worker,koha-sip— start, stop and enable each service per instancekoha-rebuild-zebra,koha-elasticsearch— reindexkoha-passwd,koha-reset-passwd,koha-mysql,koha-shell,koha-list,koha-foreach— everything you do by hand on a normal day
Each one is replaceable by a longer manual procedure. The cost is not any single command — it is that every future instruction you are given has to be translated first, by somebody who understands both sides, usually while something is broken.
And upgrades are where it compounds
A packaged upgrade is two commands and a restart, and it knows what it replaced. A source upgrade re-runs the installer over the tree and leaves you to work out which of your hand edits survived — Apache config, cron entries, service units, file permissions, the search configuration. The first upgrade is manageable. The third one, done by somebody who did not do the first two, is where source installs are usually abandoned.
Scheduled jobs make the same point in miniature. The package ships Koha's cron entries and runs them per instance through koha-foreach; a source install has an empty crontab and no error when it stays empty — see which Koha cron jobs matter for what silently stops working.
The two cases where source is right
- 1You are developing Koha — writing patches, testing a bug fix, running the test suite. Upstream's own
INSTALLfile points developers at koha-testing-docker and KohaDevBox for exactly this, and points everyone else at the packages. - 2Your platform has no packages at all — RHEL, Rocky, AlmaLinux, openSUSE. Then a source install is not a preference, it is the only option, and the honest advice is usually to reconsider the platform instead: see which Ubuntu or Debian version to install Koha on.
"I want the newest version" is not one of the cases
stable suite of the community repository follows the current supported Koha release. Building from git to get a newer version generally means running something that is not released yet, on a library catalog, which is a much larger decision than the install method.Why the packages exist, and why upstream prefers them
The packaging is not a convenience wrapper somebody added later. It encodes the operational shape of a Koha server: where an instance's configuration lives, how a second library is added without a second copy of the code, which services exist per instance, how backups capture configuration as well as data, and how an upgrade is applied to twenty instances at once.
Choosing a source install does not skip those decisions — it moves them onto you, unwritten and undocumented, on one server. Most of the very hard Koha problems we are asked to look at start there: an install nobody can upgrade, whose backups turn out to contain the database and nothing else.
A source install is also not more "flexible" in the way it sounds. Customization — the OPAC's appearance, notices, MARC frameworks, circulation rules — is done through Koha itself and survives upgrades. Anything you do by editing the source is undone by the next upgrade regardless of how it was installed, which is a separate lesson entirely.
If you are on Windows, the question is different again — that one is answered here.
Would rather not do this yourself? We do it as a service — and if you would rather it were already done, it is on Koha Cloud before you log in.
Related
More on installation & setup
Answers to the questions that usually arrive with this one.
Which Ubuntu or Debian version to install Koha on
The newest Ubuntu LTS or current Debian stable, and nothing else — here is the one command that confirms it before you build the server, and what each other choice actually costs.
apt cannot install koha-common
Unmet dependencies, NO_PUBKEY, or apt claiming the package does not exist. Four causes, in the order they actually occur, with the one command that tells you which of them you have.
Apache will not start: Invalid command 'RewriteEngine'
Apache refuses to start after enabling a Koha site because mod_rewrite is not enabled. One command fixes it — and the same class of error covers the other three modules Koha needs.
The Koha web installer returns a 500 error or times out
The installer dies partway through and the browser shows a 500 or a gateway timeout. Read the instance log to find out which step failed, then restart the install cleanly rather than retrying on a half-built database.

