GetGeek Open Source Mirror

Package and image mirror hosted in Stockholm, Sweden. Served over HTTPS with IPv4 + IPv6.

All paths below are browseable directory listings. Every snippet adds this mirror as an extra source and tells your package manager to prefer it — none of them edit the repo files your distribution ships. That means an apt upgrade or dnf update will never revert your mirror configuration.

Available mirrors

/ubuntu/ — Ubuntu archive

Upstream: archive.ubuntu.comSync: every 3 h
# Drop a NEW source file — your stock ubuntu.sources stays untouched:
# /etc/apt/sources.list.d/getgeek-ubuntu.sources (deb822)
Types: deb
URIs: https://mirror.getgeek.se/ubuntu
Suites: noble noble-updates noble-backports noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Then prefer it over archive.ubuntu.com with the apt pin in Prefer this mirror below.

/debian/ — Debian archive

Upstream: ftp.se.debian.org::debianSync: every 3 hSecurity: separate path (see below)
# Drop a NEW source file — your stock debian.sources stays untouched:
# /etc/apt/sources.list.d/getgeek-debian.sources (deb822)
Types: deb
URIs: https://mirror.getgeek.se/debian
Suites: bookworm bookworm-updates bookworm-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# Security updates — separate archive, also mirrored here:
Types: deb
URIs: https://mirror.getgeek.se/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Then prefer it over upstream with the apt pin in Prefer this mirror below.

/almalinux/ — AlmaLinux

Upstream: mirror.netsite.dkSync: every 3 hVersions: 8, 9, 10
# Drop a NEW repo file — your stock almalinux*.repo files stay untouched.
# priority=10 (lower wins; stock repos default to 99) makes dnf prefer this mirror.
sudo tee /etc/yum.repos.d/getgeek-almalinux.repo >/dev/null <<'EOF'
[getgeek-baseos]
name=GetGeek mirror - AlmaLinux $releasever - BaseOS
baseurl=https://mirror.getgeek.se/almalinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
priority=10
enabled=1

[getgeek-appstream]
name=GetGeek mirror - AlmaLinux $releasever - AppStream
baseurl=https://mirror.getgeek.se/almalinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
priority=10
enabled=1

[getgeek-extras]
name=GetGeek mirror - AlmaLinux $releasever - extras
baseurl=https://mirror.getgeek.se/almalinux/$releasever/extras/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
priority=10
enabled=1
EOF
sudo dnf clean all && sudo dnf makecache

Verify the mirror is preferred with dnf repoinfo getgeek-baseos. The GPG key ships with AlmaLinux, so no key import is needed.

/rocky-linux/ (alias /rocky/) — Rocky Linux

Upstream: msync.rockylinux.orgSync: every 3 hVersions: 8, 9, 10
# Drop a NEW repo file — your stock rocky*.repo files stay untouched.
# priority=10 (lower wins; stock repos default to 99) makes dnf prefer this mirror.
sudo tee /etc/yum.repos.d/getgeek-rocky.repo >/dev/null <<'EOF'
[getgeek-baseos]
name=GetGeek mirror - Rocky $releasever - BaseOS
baseurl=https://mirror.getgeek.se/rocky-linux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
priority=10
enabled=1

[getgeek-appstream]
name=GetGeek mirror - Rocky $releasever - AppStream
baseurl=https://mirror.getgeek.se/rocky-linux/$releasever/AppStream/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
priority=10
enabled=1

[getgeek-extras]
name=GetGeek mirror - Rocky $releasever - extras
baseurl=https://mirror.getgeek.se/rocky-linux/$releasever/extras/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
priority=10
enabled=1
EOF
sudo dnf clean all && sudo dnf makecache

Verify the mirror is preferred with dnf repoinfo getgeek-baseos. The GPG key ships with Rocky, so no key import is needed.

/epel/ — EPEL (Extra Packages for Enterprise Linux)

Upstream: ftp.lysator.liu.seSync: every 3 hVersions: 8, 9
# Drop a NEW repo file — independent of the epel-release package.
# The GPG key is served by this mirror, so no epel-release install is required.
sudo tee /etc/yum.repos.d/getgeek-epel.repo >/dev/null <<'EOF'
[getgeek-epel]
name=GetGeek mirror - EPEL $releasever
baseurl=https://mirror.getgeek.se/epel/$releasever/Everything/$basearch/
gpgcheck=1
gpgkey=https://mirror.getgeek.se/epel/RPM-GPG-KEY-EPEL-$releasever
priority=10
enabled=1
EOF
sudo dnf clean all && sudo dnf makecache

EPEL 10 is not mirrored yet — only EL8 and EL9 are synced. On EL10 keep the upstream EPEL repo for now; this drop-in's $releasever baseurl will start working automatically once EPEL 10 is added.

/docker-ce/ — Docker CE packages

Upstream: download.docker.comSync: every 3 hScope: linux/*, stable + edge only
# Debian / Ubuntu — install the key, then drop a NEW source file:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirror.getgeek.se/docker-ce/linux/debian/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Replace "debian" with "ubuntu" in the URIs below on Ubuntu systems.
sudo tee /etc/apt/sources.list.d/getgeek-docker.sources >/dev/null <<EOF
Types: deb
URIs: https://mirror.getgeek.se/docker-ce/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

# RHEL / Rocky / AlmaLinux / Fedora — drop a NEW repo file (priority-preferred):
sudo tee /etc/yum.repos.d/getgeek-docker.repo >/dev/null <<'EOF'
[getgeek-docker-ce-stable]
name=GetGeek mirror - Docker CE Stable
baseurl=https://mirror.getgeek.se/docker-ce/linux/centos/$releasever/$basearch/stable
gpgcheck=1
gpgkey=https://mirror.getgeek.se/docker-ce/linux/centos/gpg
priority=10
enabled=1
EOF
sudo dnf clean all && sudo dnf makecache

The apt heredoc is unquoted on purpose so $(...) and $VERSION_CODENAME expand into the file; the dnf one is quoted so $releasever is written literally for dnf to resolve.

/proxmox/ — Proxmox VE / PBS / PMG

Upstream: download.proxmox.comSync: every 6 h
# Proxmox VE 8 (Debian bookworm) — install key with signed-by (not trusted.gpg.d):
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL http://mirror.getgeek.se/proxmox/debian/proxmox-release-bookworm.gpg \
  -o /etc/apt/keyrings/proxmox-release-bookworm.gpg

# Drop a NEW source file — no-subscription repo (omit pve-enterprise unless subscribed):
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] \
  http://mirror.getgeek.se/proxmox/debian/pve bookworm pve-no-subscription" | \
  sudo tee /etc/apt/sources.list.d/getgeek-pve.list

# Optional Ceph (PVE 8 uses ceph-squid or ceph-reef):
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] \
  http://mirror.getgeek.se/proxmox/debian/ceph-squid bookworm no-subscription" | \
  sudo tee /etc/apt/sources.list.d/getgeek-ceph.list

HTTP only — see the note below on the upstream certificate. Release files are GPG-signed, so integrity is unaffected.

/cloud-images/ — Ubuntu cloud images

Upstream: cloud-images.ubuntu.comSync: every 6 hReleases: noble, jammy, focal
# Pull the latest Noble (24.04) cloud image for Proxmox / libvirt:
wget https://mirror.getgeek.se/cloud-images/noble/current/noble-server-cloudimg-amd64.img

# Released build artefacts (SHA256SUMS etc.) are under /releases/:
# https://mirror.getgeek.se/cloud-images/releases/noble/

/fedora/ — Fedora Linux (releases + updates)

Upstream: ftp.lysator.liu.seSync: every 6 hScope: latest 2 releases (auto-detected)
# Drop a NEW repo file — your stock fedora*.repo files stay untouched.
sudo tee /etc/yum.repos.d/getgeek-fedora.repo >/dev/null <<'EOF'
[getgeek-fedora]
name=GetGeek mirror - Fedora $releasever
baseurl=https://mirror.getgeek.se/fedora/linux/releases/$releasever/Everything/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
priority=10
enabled=1

[getgeek-fedora-updates]
name=GetGeek mirror - Fedora $releasever - updates
baseurl=https://mirror.getgeek.se/fedora/linux/updates/$releasever/Everything/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
priority=10
enabled=1
EOF
sudo dnf clean all && sudo dnf makecache

# Anaconda / kickstart install (e.g. a Packer build):
# url --url="https://mirror.getgeek.se/fedora/linux/releases/44/Server/x86_64/os/"

Prefer this mirror over upstream

The snippets above only add the mirror. These last steps make the package manager actually prefer it — without touching any file your distribution ships.

apt (Debian / Ubuntu)

cat <<'EOF' | sudo tee /etc/apt/preferences.d/99-getgeek-mirror
Package: *
Pin: origin mirror.getgeek.se
Pin-Priority: 990
EOF

Default origin priority is 500; 990 means our mirror wins for any package it provides. This is a separate drop-in file — nothing in your stock sources is modified. Verify with apt-cache policy.

dnf (RHEL / Rocky / Alma / Fedora)

Nothing to do — the drop-in .repo files above already set priority=10. dnf honours priority natively (lower number wins; stock repos stay at the default 99), so the mirror is preferred automatically with no edits to distro-owned files. Verify with dnf repoinfo getgeek-* or dnf -v repolist.

Notes