Couldn't load default.cfg

Call of DutyCall of Duty: United OffensiveCall of Duty 2Call of Duty 4: Modern WarfareCall of Duty: World at War

Couldn't load default.cfg

The server exits immediately after printing it.

Cause

default.cfg lives inside pak0.pk3 (CoD1/UO) or iw_00.iwd (CoD2+). If the engine cannot read it, it could not find or open the stock paks at all.

Which means one of:

  1. fs_basepath points at a directory that does not contain the gamedir.
  2. The paks are missing, or you copied the binary without them.
  3. The paks are there but the process cannot read them (permissions).
  4. fs_game names a mod directory that does not exist.
  5. For United Offensive: you copied uo/ but not the base main/ paks.

Fix

Check the layout. The engine expects <fs_basepath>/<gamedir>/:

ls -la /opt/cod2/main/ | head

You should see iw_00.iwd onwards. For CoD1, pak0.pk3 through pakb.pk3 plus the localized paks — and note the localized set legitimately skips one (localized_english_pak0, 1, 2, 3, 5, no 4), so that gap is not your problem.

Pass the paths explicitly rather than relying on the working directory:

./cod2_lnxded +set fs_basepath /opt/cod2 +set fs_homepath /opt/cod2 ...

Check permissions, especially after copying files as root and running the server as a service user:

sudo chown -R cod2:cod2 /opt/cod2

In Docker, check the bind mount actually landed:

docker compose run --rm cod2 ls -la /server/main

An empty directory here means the volume path is wrong on the host side.

United Offensive

UO needs both pak sets: the base Call of Duty paks in main/ and the UO paks in uo/, started with +set fs_game uo. Copying only uo/ produces exactly this error. See the UO setup guide.

Related