Installing on Podman by Hand¶
If your organisation's policy requires every step by hand, these steps do what the installer does on Podman. Running on Podman explains the files they put in place, and the choice between rootful and rootless.
Before you begin¶
- A server that meets the Requirements for Podman.
- The files from the release you are installing: those attached to the release, or the
podman/folder of the release bundle, which keeps the three units inpodman/quadlet/. - JIM's certificate and its unencrypted private key (see The Certificate), and your identity provider's settings for JIM.
Install JIM¶
Run these steps as root, from the folder holding the files.
-
Put the files in place. Leave out
jim-database.kubeif you use your own PostgreSQL server.mkdir -p /opt/jim/tls /etc/containers/systemd && chmod 700 /opt/jim/tls cp jim.yaml jim-database.yaml jim-config.yaml /opt/jim/ cp jim.network jim.kube jim-database.kube /etc/containers/systemd/The units expect the pod files in
/opt/jim; if you put them elsewhere, changeYaml=andConfigMap=in each.kubefile. To use a port other than 443, changePublishPort=injim.kube. -
Fill in
/opt/jim/jim-config.yaml: the identity provider settings, and for your own PostgreSQL server its name inJIM_DB_HOSTNAME. For the bundled PostgreSQL on a host with more than 4 GB of memory, size it as the installer would (see Bundled PostgreSQL Memory). -
Load the images, from the release bundle's
docker-imagesfolder, or download them: -
Store the secrets. Fill in a copy of
jim-secrets.yaml(for the bundled PostgreSQL, choose a strong password: the database is created with it on first start), store it, and delete the copy. Then put JIM's certificate and key in/opt/jim/tlsastls.crtandtls.key(see The Certificate) and store them too: -
Prepare the host's network. On RHEL and its derivatives, open the port in firewalld, keep JIM's network through a firewalld reload, and keep NetworkManager off Podman's interfaces; on Ubuntu 24.04, add the AppArmor rules JIM's containers need instead (see Firewall, SELinux, AppArmor and NetworkManager):
-
Start JIM:
Rootless, by hand¶
For a rootless installation, first create the account, enable lingering for it, and let it use port 443. Check /etc/subuid and /etc/subgid each give the account a range; current distributions add one when the account is created.
useradd --create-home --comment "JIM (Junctional Identity Manager)" --shell /sbin/nologin jim
grep '^jim:' /etc/subuid /etc/subgid
loginctl enable-linger jim
echo net.ipv4.ip_unprivileged_port_start=443 > /etc/sysctl.d/90-jim.conf && sysctl --system
Define the jim-systemctl and jim-podman functions from Rootless commands in the same shell, then follow the steps above, with three differences:
-
In step 1, put the units in the account's folder instead of
/etc/containers/systemd/: -
Run each
podmancommand asjim-podman. - Run each
systemctlcommand asjim-systemctl.
Check it worked¶
- Wait for JIM, which prepares its database on first start. It is ready when
podman healthcheck run jim-websucceeds (rootless,jim-podman healthcheck run jim-web). - Open JIM in a browser and sign in with your identity provider.
Without systemd¶
On a host without systemd, or with a Podman older than 4.4, run the pods directly. JIM runs, but does not start by itself after a reboot, so this is best effort rather than supported:
podman network create --ignore jim
podman kube play --replace --network jim --configmap /opt/jim/jim-config.yaml /opt/jim/jim-database.yaml
podman kube play --replace --network jim --configmap /opt/jim/jim-config.yaml --publish 443:8443 /opt/jim/jim.yaml
The installer does this for you on such a host.
Related¶
- Running on Podman: how JIM runs on Podman, and operating it day to day.
- Deployment Guide: the installer, certificates and reverse proxies.
- Deploying with Ansible: the same files, deployed by Red Hat's podman system role.