Skip to content

About

A Bash script for managing packages (installation, update, reinstallation, removal): .deb, .tar.gz, and similar formats that do not add their own repository and do not have a built-in tool for self-updating, or in cases where such a tool is not very user-friendly. The script works exclusively on systems based on the Debian/Ubuntu family.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🐚 Multi Package Manager (MPM)

❗❗❗ IMPORTANT NOTICE: The latest code (version v1.1.0 and newer) is available exclusively for download in the Releases section. The main branch 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).


➕ Additional script features:

  • Backups — Automatically saves copies of the previous version of the script in the /old directory (currently, backups are supported only for this file: Multi_Package_Manager.sh and install-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.conf file.
  • 🖥️ Bash completion — User-level command completion installed automatically to ~/.local/share/bash-completion/completions/Multi_Package_Manager.sh. Completes commands, package names, and --lang values. Refreshed automatically on script updates.
  • 🔑 Optional GitHub API token — Supports GITHUB_TOKEN in mpm.conf or MPM_GITHUB_TOKEN environment variable. Raises GitHub API rate limits and provides rate-limit diagnostics when API requests fail.

🔒 Security:

  • 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: Bearer header to GitHub API requests. This raises the rate limit from 60 requests/h (unauthenticated) to 5000 requests/h per token. If mpm.conf contains a token and has insecure permissions, MPM warns and recommends chmod 600 mpm.conf.

🛠 System Requirements:

  • 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), libfuse2 or libfuse2t64 (for AppImages). The script automatically checks whether they are installed on the system and installs them itself if necessary.

📦 Currently Supported Packages (script version: v1.3.0)

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

✨ User Manual

📥 Installation:

❗❗❗ REMINDER: Do not download files from the main branch (an outdated edition). Download them from the Releases.

  1. 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-self and recommended for verification, optional download)
    • command_for_massive_test.txt (test/troubleshooting commands, optional download)
  2. Grant execution permissions:

    chmod +x ./Multi_Package_Manager.sh
  3. Run the script:

    ./Multi_Package_Manager.sh
  4. 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 ~/.bashrc

After migration, you can run the script without the ./ prefix by simply typing Multi_Package_Manager.sh (Any directory can be selected in the terminal.).

⚙️ Configuration (mpm.conf):

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.

📋 Commands Supported in the MPM Script:

  • --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 /old backup directory to ~/.mpm/, then add it to PATH
  • --lang <pl|en|auto>, -l <pl|en|auto> — Force interface language

➕ Optional environment variables

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.

💻 How to Use

Examples:

./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 all

📁 Project Structure:

Multi_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)

📁 Additional directories and script files:

  • /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 .deb packages (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/.

📁 User directories:

  • ~/.mpm/ — An optional hidden directory used by the script when the --migrate-to-hidden command 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.

🤝 Collaboration and Support:

  • The command_for_massive_test.txt file (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).

About

A Bash script for managing packages (installation, update, reinstallation, removal): .deb, .tar.gz, and similar formats that do not add their own repository and do not have a built-in tool for self-updating, or in cases where such a tool is not very user-friendly. The script works exclusively on systems based on the Debian/Ubuntu family.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages