If apt update hangs on “Waiting for headers” or a 300 MB upgrade crawls along at dial-up speed, the Parrot Linux mirror your system is talking to is usually the reason. Parrot ships every install pointed at a central repository address that redirects you to a mirror, and most of the time that works well. When it does not, you can measure the problem, pick a faster Parrot Linux mirror yourself, and fix the handful of other things, from IPv6 quirks to a forgotten proxy, that make apt feel slow even when the mirror is fine. This guide walks through all of it on a Parrot 7 system.
How Parrot Linux Mirrors Work
Parrot does not use the Debian mirror network for its own packages. It has its own repository, served from the project’s main address, and a set of volunteer and sponsor mirrors around the world. The address you see in your sources file is a redirector: when apt asks it for a file, it answers with a redirect to a mirror that is expected to be close to you. You never download the package from the redirector itself.
That design is convenient, but it has two weak points. First, “close” is decided from your public IP address, which can be wrong if you sit behind a VPN, a corporate NAT, or a mobile carrier that exits in another country. Second, the mirror you are sent to may be overloaded, out of date, or simply slow on the route between it and you. In both cases the fix is the same: bypass the redirector and talk to a specific mirror directly.
The project maintains a public list of mirrors. The copy on this site, the mirrors network, is a good starting point, and if you run a lab with several Parrot machines you may even want to set up your own local mirror so only one of them pulls from the internet.
Step 1: Confirm the Mirror Is Actually the Problem
Before you change anything, find out where your packages are coming from and how fast that server really is. Start by looking at your current sources:
cat /etc/apt/sources.list.d/parrot.list
cat /etc/apt/sources.list 2>/dev/nullOn a normal Parrot install the Debian-style sources.list is empty or contains only comments, and the real entries live in parrot.list. Note the suite name after the URL (on Parrot 7 the lines reference the echo codename, plus its -security and -backports companions). You will keep those names exactly as they are; only the host part of the URL changes when you switch mirrors.
Next, see which mirror the redirector sends you to and how long the first response takes:
curl -sI -o /dev/null -w "%{redirect_url}n%{time_total}sn" https://deb.parrot.sh/parrot/dists/echo/ReleaseReplace echo with whatever suite name your file shows. The first line of output is the mirror you are being redirected to. Then test the raw download speed from that mirror by fetching a real package index and letting curl report the speed:
curl -L -o /dev/null -w "%{speed_download} bytes/sn" https://MIRROR_HOST/parrot/dists/echo/main/binary-amd64/Packages.gzRun the same command against two or three other hosts from the mirror list and compare. If one of them is several times faster, you have found your answer. If they are all slow, the bottleneck is on your side, and the sections on IPv6, DNS, proxies and anonymity tools below are where to look.
Step 2: Change the Parrot Linux Mirror in parrot.list
Switching mirrors is a one-line edit, but do it carefully, because a typo here breaks every future update. Back the file up first:
sudo cp /etc/apt/sources.list.d/parrot.list /etc/apt/sources.list.d/parrot.list.bakOpen the file with any editor you like:
sudo nano /etc/apt/sources.list.d/parrot.listEach active line follows the same pattern: the word deb, a URL, a suite name, and a list of components. Change only the URL. For example, if a line currently reads:
deb https://deb.parrot.sh/parrot echo main contrib non-free non-free-firmwareand the mirror you chose is served at https://MIRROR_HOST/parrot, the line becomes:
deb https://MIRROR_HOST/parrot echo main contrib non-free non-free-firmwareApply the same host change to every uncommented line in the file, including the -security and -backports lines, so that all three suites come from the same place. Mixing suites across mirrors that sync at different times can produce confusing “file has unexpected size” errors.
A few rules keep you out of trouble:
- Keep the suite names and the component list exactly as they were. A mirror only changes where the files come from, not which files you get.
- Prefer
httpsmirrors. Package signatures protect you from tampered files either way, but HTTPS also hides which packages you install from anyone watching the network. - Do not add Debian’s own repositories to a Parrot system to “get more mirrors”. Parrot is built on Debian 13, but its packages are pinned and patched for Parrot; pulling from plain Debian repos is a reliable way to end up with a broken system.
- Do not use a sed one-liner from a forum post without reading it. Many of them were written for older codenames and will silently point you at a suite that no longer exists.
Some Parrot releases ship a small helper that writes this file for you. Check whether yours has it before editing by hand:
which parrot-mirror-selectorIf the command prints a path, run it with sudo and follow the prompts; if it prints nothing, the manual edit above is the way to go.
Refresh the Package Lists and Test
Save the file, then refresh:
sudo apt updateWatch the output. Every Get: or Hit: line should now show your new host. If you see Err: lines, re-check the URL for typos, and confirm the mirror actually carries the suite you asked for by opening https://MIRROR_HOST/parrot/dists/ in a browser. A mirror that is still syncing a fresh release may not have every suite yet.
Once apt update is clean, run a real upgrade to see the difference. On Parrot the recommended command is parrot-upgrade rather than a bare apt upgrade; the differences are covered in how to update and upgrade Parrot Linux safely.
Other Reasons apt Is Slow on Parrot Linux
If a mirror change made no difference, one of the following is almost always the culprit.
IPv6 Timeouts
Many home routers and some ISPs advertise IPv6 but do not actually route it. apt then tries the mirror’s IPv6 address first, waits for a timeout, and only then falls back to IPv4. The symptom is a long pause before each download starts, followed by a normal speed. You can test the theory with a single run:
sudo apt -o Acquire::ForceIPv4=true updateIf that is noticeably faster, make it permanent:
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4AnonSurf, Tor or a VPN Is Still Running
Parrot ships AnonSurf, which routes the whole system through Tor. It is easy to start it for a session and forget it is on. Every package download then goes through the Tor network, which is slow by design, and the mirror redirector sees a Tor exit node as your location. Check before you blame the mirror:
anonsurf status
curl -s https://ifconfig.meIf the IP address curl prints is not your real one, stop AnonSurf (sudo anonsurf stop), disconnect any VPN, and try apt again. If you need Tor for other reasons, you can keep it for your browser only rather than for the whole system; troubleshooting Tor on Parrot explains the pieces involved.
A Leftover Proxy Setting
Proxy settings for apt hide in two places: environment variables and apt’s own configuration. A proxy you configured at a conference or a workplace can quietly stay behind and route all downloads through a host that is no longer reachable, which produces the classic “Connecting to…” hang.
env | grep -i proxy
apt-config dump | grep -i proxy
ls /etc/apt/apt.conf.d/If any of these show a proxy you no longer use, remove the matching line or file and run apt update again.
Slow or Broken DNS
Each download starts with a DNS lookup, and a resolver that answers slowly makes everything feel sluggish. Time a lookup directly:
time getent hosts deb.parrot.shAnything over a fraction of a second is suspicious. Try a different resolver in your network settings (or in /etc/resolv.conf if nothing manages it on your system) and repeat the test.
A Full or Corrupted apt Cache
Partially downloaded files in /var/cache/apt/archives/partial/ are retried on every run, and a corrupted index forces apt to re-fetch everything. Clearing both is harmless:
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt updateThis re-downloads the package lists from scratch, so expect the first apt update afterwards to take a little longer than usual.
The Disk, Not the Network
On older laptops with spinning disks, or on virtual machines backed by a slow host drive, unpacking packages takes longer than downloading them. If the progress bar flies to 100% and then the install phase crawls, the mirror was never the issue. The fixes there are the usual ones for a sluggish machine, which are collected in how to speed up Parrot Linux.
Going Back to the Default Mirror
Mirrors come and go. If the one you picked disappears or stops syncing, restore the backup you made earlier and you are back on the project redirector:
sudo cp /etc/apt/sources.list.d/parrot.list.bak /etc/apt/sources.list.d/parrot.list
sudo apt updateIf you lost the backup, the default host is https://deb.parrot.sh/parrot; just put that back in place of the mirror host on each line. The Parrot project website is the authoritative place to confirm the current repository address if you suspect it has changed.
For more on how Parrot’s repositories, pinning and the parrot-upgrade wrapper fit together, the Parrot software management page is worth reading once; it will save you from most of the “my sources file looks weird” moments later on.
FAQ
Can I use a Kali or Debian mirror for Parrot Linux?
No. Parrot has its own repository with its own package versions and signing key. Debian and Kali mirrors do not carry Parrot’s suites, and adding their repositories to a Parrot system leads to dependency conflicts. Only use hosts from Parrot’s mirror list.
Why does apt update say the mirror is “not yet valid” or “no longer signed”?
Usually one of two things: your system clock is wrong, which makes signature timestamps look invalid, or the mirror is in the middle of a sync. Check the date with timedatectl, then try another mirror. If every mirror fails the same way, the signing key on your system may need a refresh via a normal parrot-upgrade.
Does changing the mirror affect parrot-upgrade?
No. parrot-upgrade is a wrapper around apt and reads the same parrot.list file, so it automatically uses whatever mirror you configured.
[…] Because Parrot’s repository takes priority for the packages it ships, a Parrot install is not identical to a Debian install even before you add anything. If you ever need to switch to a faster mirror, the process is covered in how to change the Parrot Linux mirror. […]