If you want to update Parrot Linux without breaking your desktop, your tools or your boot loader, the main thing to understand is that Parrot ships two ways to do the same job: the parrot-upgrade helper and plain apt. Both pull from the same repositories and both end up calling the same package manager underneath, but they behave differently when something goes wrong halfway through. This guide walks you through a safe update routine, explains what each command actually does, and shows you how to recover when an upgrade stalls or leaves you with a half-configured package.
Why updating Parrot Linux is a little different from updating plain Debian
Parrot OS is built on Debian stable (Parrot 7.x tracks Debian 13), but it layers its own repositories on top. Those repositories carry the Parrot kernel, the desktop tweaks, the parrot-tools-* metapackages and a steady stream of security-tool updates that move faster than Debian’s own release cycle. The result is a distribution that feels semi-rolling: core packages are stable, but you will see new versions of tools, the kernel and the desktop arrive between point releases.
That has two practical consequences. First, you should expect larger upgrade batches than a stock Debian user would, so give the upgrade time and never interrupt it. Second, because Parrot’s metapackages pull in whole groups of tools, an upgrade that needs to remove or replace one package can occasionally want to pull a metapackage with it. Reading what apt proposes before you confirm is the single most useful habit you can build.
Step 0: check where you are before you update Parrot Linux
Before touching anything, take thirty seconds to record your current state. If something goes wrong later, you will know exactly what changed.
cat /etc/os-release
uname -r
apt list --upgradable 2>/dev/null | wc -l
df -h / /bootThe first command shows your Parrot release, the second shows the running kernel, the third counts how many packages are waiting, and the last one confirms you have free space on the root and boot partitions. Kernel upgrades in particular need room in /boot; a full boot partition is one of the most common reasons an otherwise routine upgrade fails. If you are on a laptop, plug it in now. If you run Parrot in a virtual machine, take a snapshot; it costs nothing and turns a bad upgrade into a two-minute rollback.
Step 1: refresh the package index
sudo apt updateThis downloads the latest package lists from the mirrors configured in /etc/apt/sources.list.d/parrot.list. It does not install anything. Watch the output for two things: a line saying how many packages can be upgraded, and any warnings about mirrors that could not be reached or signatures that could not be verified. A single unreachable mirror is usually a temporary hiccup; a GPG error is not, and you should stop and fix it before upgrading. The mirrors network page explains how Parrot’s mirror director works and how to point your system at a specific mirror if the default one is slow for you.
Step 2: choose your upgrade command
This is where parrot-upgrade and apt diverge, so it is worth being precise about what each one does.
Option A: parrot-upgrade
sudo parrot-upgradeparrot-upgrade is a small wrapper script shipped by the Parrot maintainers. In practice it refreshes the package index and then runs a full upgrade for you, using the options the maintainers consider safe for a Parrot system, so you do not have to remember the right apt flags. It is the command the Parrot team points new users to, and for day-to-day updates it is the right default. Because it is just a script, you can read exactly what it does on your own system:
cat "$(command -v parrot-upgrade)"Reading it once is a good idea. You will see that there is nothing magic in it; it is apt with sensible defaults, which also means every troubleshooting step later in this guide applies to it.
Option B: apt full-upgrade
sudo apt update
sudo apt full-upgradeThis is the manual path. full-upgrade (the modern name for the old dist-upgrade) is allowed to install new dependencies and remove packages that block the upgrade, which is exactly what a semi-rolling distribution needs. Plain apt upgrade refuses to remove anything, so on Parrot it tends to leave kernel and metapackage updates held back. If you only remember one rule, make it this one: on Parrot, use full-upgrade, not upgrade.
The advantage of the manual path is control. You see the full list of packages to be installed, upgraded and removed before you type y, and you can abort if the removal list contains something you care about.
Which one should you use?
| Situation | Recommended | Why |
|---|---|---|
| Routine weekly update on a desktop | parrot-upgrade | One command, maintainer-chosen defaults, hard to get wrong |
| You see a long “to be REMOVED” list | apt full-upgrade, read carefully | You want to inspect and possibly stop before confirming |
| Headless server or cloud instance | apt full-upgrade in a script with review | Easier to log and to run unattended with explicit options |
| Recovering from a broken upgrade | apt and dpkg directly | You need the low-level tools, not a wrapper |
Step 3: read the removal list before you say yes
Whichever command you choose, apt will print a summary before it starts. The section to focus on is “The following packages will be REMOVED”. A few removed packages are normal: old kernel images, transitional packages, libraries that were renamed. What should make you pause is seeing something like parrot-tools-full, parrot-desktop-kde or parrot-core in that list. Removing a metapackage does not immediately delete the tools it depends on, but it does mean future upgrades will no longer pull in new tools automatically. If you see that, answer n, then ask apt why:
apt-get -s full-upgrade | grep -A20 "REMOVED"
apt-cache policy parrot-tools-fullUsually the cause is a temporary dependency mismatch between a newly uploaded package and the rest of the repository. Waiting a day and running apt update again resolves most of these without any intervention on your side.
Step 4: tidy up and reboot
After a successful upgrade, remove packages that are no longer needed and clear the download cache:
sudo apt autoremove --purge
sudo apt cleanautoremove will offer to delete older kernels. Keeping one previous kernel is a sensible safety net, so if the list only shows the kernel you are currently running plus one older one, you may prefer to skip this step until the next upgrade. Then check whether a reboot is actually required:
ls /var/run/reboot-required* 2>/dev/null
uname -r
ls /boot/vmlinuz-*If /boot contains a newer kernel than the one uname -r reports, reboot. Running an old kernel with new kernel modules on disk is a common source of odd behaviour, from Wi-Fi drivers failing to load to VirtualBox or VMware guest tools refusing to start.
Upgrading between Parrot releases
Parrot does not require a separate release-upgrade tool the way Ubuntu does. Moving from one 7.x point release to the next is simply a larger batch of the same full-upgrade, because the repositories are updated in place. After the upgrade finishes, /etc/os-release will show the new version. The Parrot 7.4 release notes describe what changed in the latest release, including the move to the Linux 7.1 kernel series and KDE Plasma 6 as the default desktop.
Major jumps, such as from a 6.x system to 7.x, are different because the underlying Debian base changes. For those, the safest approach is a fresh installation of the new release with your home directory restored from backup. In-place upgrades across a Debian base change can work, but they involve third-party repositories, pinned packages and leftover configuration that make the result hard to predict. If you do attempt one, do it in a VM snapshot first and read Debian’s own release notes on debian.org for the base-system caveats.
Troubleshooting common upgrade problems
“Could not get lock /var/lib/dpkg/lock-frontend”
Another package manager is running. Often it is the graphical updater or an unattended-upgrades job. Wait a minute and try again. Find the process with sudo fuser -v /var/lib/dpkg/lock-frontend rather than deleting the lock file by hand.
Upgrade interrupted or a package failed to configure
This leaves dpkg in a half-finished state. The standard repair sequence is:
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt full-upgradeRun them in that order. The first finishes any packages that were unpacked but not configured, the second resolves missing dependencies, and the third resumes the upgrade.
GPG or signature errors from the Parrot repository
Do not work around these by adding --allow-unauthenticated. A signature failure usually means the keyring package on your system is out of date or a mirror served a stale index. Try a different mirror first, then reinstall the keyring package that ships the repository key. The Parrot software management page covers the repository layout and keyring details.
System will not boot after a kernel upgrade
At the GRUB menu, open “Advanced options” and pick the previous kernel. Once you are back in, check /boot for free space and rerun sudo update-grub. If GRUB itself is missing or broken, the GRUB troubleshooting page walks through repairing it from a live USB.
No network after an upgrade
Check whether NetworkManager restarted cleanly with systemctl status NetworkManager, and whether the new kernel loaded your Wi-Fi module with lsmod | grep -i wifi or by looking at dmesg. A reboot into the new kernel fixes the majority of these cases.
A safe update routine you can repeat
- Snapshot or back up, and check free space in
/boot. sudo apt updateand read the output for errors.sudo parrot-upgrade, orsudo apt full-upgradeif you want to inspect every change.- Read the REMOVED list; stop if a
parrot-*metapackage is in it. sudo apt autoremove --purgeandsudo apt clean.- Reboot if a new kernel was installed.
Do this once a week and upgrades stay small and boring, which is exactly how you want them. If you are still deciding how to install Parrot in the first place, the download guide compares the editions and the installation guide covers the installer step by step.
FAQ
Is parrot-upgrade the same as apt full-upgrade?
Functionally they do the same job: refresh the index and perform a full upgrade. parrot-upgrade is a wrapper that picks the options for you; apt full-upgrade is the underlying command run by hand. You can read the wrapper with cat "$(command -v parrot-upgrade)" to see exactly what it runs on your version.
Why does apt upgrade say packages were “kept back”?
Because plain upgrade is not allowed to install new dependencies or remove anything. On Parrot that blocks kernel and metapackage updates. Use sudo apt full-upgrade instead and the held-back packages will be processed.
How often should I update Parrot Linux?
Weekly is a good rhythm for a desktop. Security tools and the kernel move frequently, and smaller, more regular batches are easier to review and easier to recover from than a huge upgrade after months of neglect.
[…] Read the removal list carefully before confirming; if you installed any tools by hand that also appear as dependencies, mark them as manually installed first with sudo apt-mark manual <package>. In practice, if you want a Home-style system it is cleaner to install Home Edition and add what you need. After any of these changes, keep the system current with the routine described in the update and upgrade guide. […]
[…] does nothing against a vulnerable running system. Follow the safe update guide and let parrot-upgrade handle kernel and cryptsetup updates. After a kernel update the initramfs is […]
[…] the firewall in place when you update the system. Following the safe upgrade process will not remove your rules, but a major upgrade can change package versions of nftables or ufw, so […]
[…] Update the system first so the package lists are fresh. Parrot has its own wrapper for this, and it is worth using it instead of a raw apt upgrade (see how to update and upgrade Parrot Linux safely): […]
[…] you prefer plain apt, sudo apt update && sudo apt full-upgrade does the same job. The guide to updating Parrot Linux safely explains the difference between the two in detail. You will also need wget or curl and gpg, which […]
[…] can request firmware versions that an older firmware package does not yet contain. Run a full system upgrade with parrot-upgrade first; firmware packages update along with everything […]
[…] 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. […]
[…] since. If you are not sure why Parrot recommends parrot-upgrade over plain apt upgrade, read how to update and upgrade Parrot Linux safely once and it will make […]
[…] and occasionally include a kernel or desktop jump that an LTS would have held back. Our guide to updating and upgrading Parrot Linux safely explains why parrot-upgrade is preferred over a plain apt full-upgrade and what to do when a large […]