❗❗❗ IMPORTANT NOTICE: The latest code (version v1.1.0 and newer) is available exclusively for download in the Releases section. The
mainbranch is no longer being updated and will permanently remain on version v1.0.0. Please download the latest files directly from the newest Release.
Multi Package Manager (MPM) is a Bash script that enables centralized management of the installation, updating, reinstallation, and removal of selected applications on Debian/Ubuntu-based Linux systems. The script provides a checksum verification mechanism (unfortunately, not all packages officially support this), built-in auto-update (with automatic backups during the process), and full support for two languages (Polish/English).
- Backups — Automatically saves copies of the previous version of the script in the
/olddirectory (currently, backups are supported only for this file:Multi_Package_Manager.shandinstall-yubico-authenticator.sh). - Logging — Logs generated by the script itself are available in the
/var/lib/multi_package_manager_config_and_logs/directory. - 🔤 Dual-language support — Polish / English (Automatic detection of the system language or use of user settings).
- ⚙️ Configurable — Basic configuration via the
mpm.conffile. - 🖥️ Bash completion — User-level command completion installed automatically to
~/.local/share/bash-completion/completions/Multi_Package_Manager.sh. Completes commands, package names, and--langvalues. Refreshed automatically on script updates. - 🔑 Optional GitHub API token — Supports
GITHUB_TOKENinmpm.conforMPM_GITHUB_TOKENenvironment variable. Raises GitHub API rate limits and provides rate-limit diagnostics when API requests fail.
- SHA512 verification for: Proton Authenticator & Proton Pass packages.
- SHA256 verification for:
--update-self, Proton VPN repository configuration package, and release assets used during self-update / Yubico script download. - “Fail-Closed” mode — Installation is blocked if verification fails for Proton packages, Proton VPN repository package, or during the script's self-update.
- Optional GitHub API token support — If configured, MPM adds an
Authorization: Bearerheader to GitHub API requests. This raises the rate limit from 60 requests/h (unauthenticated) to 5000 requests/h per token. Ifmpm.confcontains a token and has insecure permissions, MPM warns and recommendschmod 600 mpm.conf.
- Distribution: A Debian/Ubuntu-based system, e.g., Ubuntu, Debian, Linux Mint, or other systems in this family (The script is currently being tested only on the latest version of Ubuntu LTS. I don't know how it will work in environments other than GNOME.).
- Permissions:
sudo(The script must be run without the "sudo" prefix in the terminal; it will request privileges itself when needed). - Required tools:
curl,dpkg,grep,awk,jq,sha512sum,sha256sum,sudo,find,realpath,tar,gpg(gnupg),libfuse2orlibfuse2t64(for AppImages). The script automatically checks whether they are installed on the system and installs them itself if necessary.
| Package | Description | Verification & Security |
|---|---|---|
| Proton Authenticator | 2FA app by Proton AG | ✅ Official verification SHA512 / ❕ The MPM script verifies the checksum from the version.json file |
| Proton Pass | Password manager by Proton AG | ✅ Official verification SHA512 / ❕ The MPM script verifies the checksum from the version.json file |
| Proton VPN | VPN service | ✅ Official verification SHA256 / ❕ The checksum included in the MPM script. |
| Yubico Authenticator | YubiKey app | ⚙️ Via an external script / ✅ SHA256 of the external script when downloaded by MPM; ❌ application archive checksum is not verified |
| Discord | Voice chat app for gamers | ❕ .deb package from the official website / ❌ The MPM script does not verify checksums |
| Spotify | Music streaming service | ❕ Official repository (GPG key) / ❌ The MPM script does not verify checksums |
| Steam | Gaming platform | ❕ .deb package from the official website + auto i386 / ❌ The MPM script does not verify checksums |
| Dropbox | Cloud storage | ❕ Official .deb package / ❌ The MPM script does not verify checksums |
| Google Chrome | Web browser | ❕ Official .deb package / ❌ The MPM script does not verify checksums |
| Brave Browser | Privacy-focused browser | ❕ Official repository (GPG key) / ❌ The MPM script does not verify checksums |
| Visual Studio Code | Code editor | ❕ Official .deb package / ❌ The MPM script does not verify checksums |
| Darktable | Photo editing application | ❕ AppImage (system-wide in /opt) / ❌ The MPM script does not verify checksums |
| Tiger Studio Manager | TigerTag management | ❕ AppImage (locally in ~/.local) / ❌ The MPM script does not verify checksums |
| Tailscale | VPN / overlay network client | ❕ Official installer script / ❌ The MPM script does not verify checksums |
| GoVerlay | MangoHud / vkBasalt / OptiScaler GUI | ❕ GitHub .deb package / ❌ The MPM script does not verify checksums |
| Bambu Studio | 3D slicer for Bambu Lab printers | ❕ AppImage (system-wide in /opt, smart Ubuntu build detection) / ❌ The MPM script does not verify checksums |
| Speedtest CLI | Internet speed test tool (Ookla) | ❕ Official APT repository (packagecloud) / ❌ The MPM script does not verify checksums |
❗❗❗ REMINDER: Do not download files from the
mainbranch (an outdated edition). Download them from the Releases.
-
Download the latest files from the Latest Release page:
Multi_Package_Manager.sh(main script)mpm.conf(configuration file, optional download)install-yubico-authenticator.sh(Yubico script, dependency for the MPM script; optional manual download, but required for full--update-self)SHA256SUMS(checksum file, required for--update-selfand recommended for verification, optional download)command_for_massive_test.txt(test/troubleshooting commands, optional download)
-
Grant execution permissions:
chmod +x ./Multi_Package_Manager.sh
-
Run the script:
./Multi_Package_Manager.sh
-
Add to the PATH variable (optional):
For better organization and security, move the script to a hidden directory.
Use the migration command:
./Multi_Package_Manager.sh --migrate-to-hidden && source ~/.bashrcAfter migration, you can run the script without the ./ prefix by simply typing Multi_Package_Manager.sh (Any directory can be selected in the terminal.).
The optional mpm.conf file must be placed in the same directory as Multi_Package_Manager.sh. If the file is missing, the script uses default settings.
Option names in mpm.conf are case-sensitive and should be uppercase.
Available options:
| Option | Values | Description |
|---|---|---|
LANGUAGE |
auto, pl, en |
Interface language. auto detects system language. |
AUTO_UPDATE_CHECK |
true, false |
Automatically check for MPM updates when the script starts without arguments. |
BACKUP_KEEP_COUNT |
positive integer | Number of old backup copies kept in the /old directory. |
SHOW_GITHUB_PROMO |
true, false |
Show GitHub issue prompt/link after errors. |
LOG_LEVEL |
full, debug, info, warn, error |
Logging verbosity level. |
GITHUB_TOKEN |
Personal Access Token (string) | Optional GitHub API token. Increases the GitHub API rate limit from 60 to 5000 requests/h. Can also be set via the MPM_GITHUB_TOKEN environment variable (overrides mpm.conf). Keep this value private. |
--help,-h— Show help--install— Install package(s)--update— Update to the latest version--reinstall— Reinstall--remove— Remove package(s)--check— Check the current version--check-self— Check for new stable versions of the script--update-self— Download the latest stable version of the script from GitHub Releases--migrate-to-hidden— Move the script, configuration, optional Yubico script, and/oldbackup directory to~/.mpm/, then add it toPATH--lang <pl|en|auto>,-l <pl|en|auto>— Force interface language
| Variable | Description |
|---|---|
MPM_GITHUB_TOKEN |
Overrides GITHUB_TOKEN from mpm.conf for GitHub API requests. |
MPM_FORCE_UPDATE |
Set to 1 to force --update-self even when no newer release is detected. |
MPM_PROTONVPN_REPO_DEB_URL |
Overrides the default Proton VPN repository configuration package URL. |
MPM_SPEEDTEST_REPO_OS |
Overrides the os variable passed to the Speedtest CLI packagecloud installer. Default: ubuntu. |
MPM_SPEEDTEST_REPO_DIST |
Overrides the dist variable passed to the Speedtest CLI packagecloud installer. Default: jammy. |
❗ The Speedtest CLI repository installer uses ubuntu/jammy by default. If your system is not Ubuntu Jammy, MPM will display a warning before configuring the repository. Override MPM_SPEEDTEST_REPO_OS and MPM_SPEEDTEST_REPO_DIST only if you know that the selected repository revision is supported.
./Multi_Package_Manager.sh --install discord brave vscode
./Multi_Package_Manager.sh --update all
./Multi_Package_Manager.sh --check proton-authenticator
./Multi_Package_Manager.sh --remove yubico
./Multi_Package_Manager.sh --check-self
./Multi_Package_Manager.sh --update-self
./Multi_Package_Manager.sh --migrate-to-hidden
./Multi_Package_Manager.sh --lang pl --check allMulti_Package_Manager/
├── Multi_Package_Manager.sh # Main script
├── mpm.conf # Configuration file
├── install-yubico-authenticator.sh # Yubico script
├── SHA256SUMS # Checksum file for release assets
├── command_for_massive_test.txt # Test/troubleshooting commands
└── old/ # Backups folder (created by the script)
/var/lib/multi_package_manager_config_and_logs/— Logs and status directory (Generated by the script).multi_package_manager_logs.txt— Event log.*_dpkg_name.txt— Files tracking the exact names of installed.debpackages (e.g., for Steam, Dropbox, Chrome).*_installed_version.txt— Recording the installed version for packages that do not track it automatically (e.g., Yubico, Darktable, GoVerlay, Bambu Studio). Tiger Studio Manager stores its version file locally in~/.local/share/mpm/.
~/.mpm/— An optional hidden directory used by the script when the--migrate-to-hiddencommand is used.~/.local/mpm_apps/— Local installation directory (AppImage installed only for the current user).~/.local/share/bash-completion/completions/Multi_Package_Manager.sh— User-level bash completion file (installed/refreshed automatically by the script).~/.local/share/mpm/— Local state directory used for Tiger Studio Manager version tracking.~/.local/share/applications/— Local desktop entry location for Tiger Studio Manager.
- The
command_for_massive_test.txtfile (available in the Release) contains a list of commands for troubleshooting issues with the script. - If you encounter a problem or want to suggest a new feature, please report it in the Issues tab of this repository.
- If you’d like to support me financially, you can buy me a coffee: https://cuplink.to/fabiangamer2215 (the script is completely free; financial support is optional).