{"id":40539439,"url":"https://github.com/pavinjosdev/zypperoni","last_synced_at":"2026-01-20T22:53:43.584Z","repository":{"id":221141864,"uuid":"753562810","full_name":"pavinjosdev/zypperoni","owner":"pavinjosdev","description":"Speed up openSUSE's package manager zypper","archived":false,"fork":false,"pushed_at":"2025-03-27T03:20:06.000Z","size":51,"stargazers_count":88,"open_issues_count":1,"forks_count":6,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-27T04:24:34.419Z","etag":null,"topics":["asyncio","opensuse","opensuse-slowroll","opensuse-tumbleweed","package-management","zypper"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pavinjosdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-06T11:20:06.000Z","updated_at":"2025-03-27T03:19:22.000Z","dependencies_parsed_at":"2024-03-22T17:59:50.679Z","dependency_job_id":"57651834-a78f-44f1-a917-ecc53ed280af","html_url":"https://github.com/pavinjosdev/zypperoni","commit_stats":null,"previous_names":["pavinjosdev/zypperoni"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pavinjosdev/zypperoni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavinjosdev%2Fzypperoni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavinjosdev%2Fzypperoni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavinjosdev%2Fzypperoni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavinjosdev%2Fzypperoni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavinjosdev","download_url":"https://codeload.github.com/pavinjosdev/zypperoni/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavinjosdev%2Fzypperoni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28617867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T22:24:05.405Z","status":"ssl_error","status_checked_at":"2026-01-20T22:20:31.342Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","opensuse","opensuse-slowroll","opensuse-tumbleweed","package-management","zypper"],"created_at":"2026-01-20T22:53:42.773Z","updated_at":"2026-01-20T22:53:43.578Z","avatar_url":"https://github.com/pavinjosdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zypperoni 🍕\nSpeed up [openSUSE's](https://en.wikipedia.org/wiki/OpenSUSE) package manager [zypper](https://en.wikipedia.org/wiki/ZYpp). 🐌 ➡️ 🐱\n\n## Synopsis\nZypperoni (a portmanteau of zypper and pepperoni 🍕) is a simple single file program without any external dependencies that can be used to massively speed up zypper's most used and time consuming commands. 🚀\n\nZypperoni uses various techniques to safely group together zypper operations where possible in an async manner and does not by itself make any changes to your configs or system, making it suitable for production use. 💫\n\n## Requirements\nThere are no external dependencies other than common shell tools and the Python interpreter which should already be installed on your system.\nMinimum python version required: `3.9`. If you're on Leap and have an older Python version, use [pyenv](https://github.com/pyenv/pyenv) to get a newer version.\n\n## Installation\n\n```\ncurl -s https://raw.githubusercontent.com/pavinjosdev/zypperoni/main/zypperoni | sudo tee /usr/bin/zypperoni \u003e /dev/null\nsudo chmod 755 /usr/bin/zypperoni\n```\n\n\u003e [!CAUTION]\n\u003e Breaking changes when moving from version 0.x.x to 1.x.x\n\n## Usage\nType in `zypperoni --help` for usage help.\n\n```\nusage: zypperoni [-h] [-v] [-y] [-j {5,10,15,20}] [--debug] [--no-color] {refresh,ref,dist-upgrade,dup,install,in,install-new-recommends,inr} ...\n\nzypperoni provides parallel operations for zypper's oft-used time consuming commands.\n\noptions:\n  -h, --help            show this help message and exit\n  -v, -V, --version     print version number and exit (default: False)\n  -y, --no-confirm      automatic yes to prompts, run non-interactively (default: False)\n  -j {5,10,15,20}, --jobs {5,10,15,20}\n                        number of parallel operations (default: 10)\n  --debug               enable debug output (default: False)\n  --no-color            disable color output (default: False)\n\ncommands:\n  type 'zypperoni \u003ccommand\u003e --help' to get command-specific help\n\n  {refresh,ref,dist-upgrade,dup,install,in,install-new-recommends,inr}\n    refresh (ref)       refresh all enabled repos\n    dist-upgrade (dup)  perform distribution upgrade\n    install (in)        install one or more packages\n    install-new-recommends (inr)\n                        install new packages recommended by already installed ones\n```\n\n## Examples\n1. Refresh all repos\n```\nsudo zypperoni ref\n# or verbosely\nsudo zypperoni refresh\n```\n\n2. Force refresh all repos\n```\nsudo zypperoni ref -f\n```\n\n3. Perform distribution upgrade\n```\nsudo zypperoni dup\n```\n\n4. Download packages to perform distribution upgrade\n```\nsudo zypperoni dup -d\n```\n\n5. Install packages\n```\nsudo zypperoni in htop btop\n```\n\n6. Get help for specific command\n```\nzypperoni inr -h\n```\n\n## Performance tests\n\nTested on VM running fresh installation of Tumbleweed `20240116` on 2024-02-07 using default settings.\n- VM specs: 4 CPU, 4GB RAM, 200 Mbps bandwidth, 200ms latency to default mirror.\n- Repos enabled: repo-oss, repo-non-oss, repo-update, repo-openh264, google-chrome (external).\n\n| Test                          | zypper    | zypperoni (10 jobs) | zypperoni (20 jobs) |\n|-------------------------------|-----------|---------------------|---------------------|\n| force refresh repos           | 40.55s    | 9.16s               | 9.36s               |\n| refresh repos                 | 2.58s     | 2.55s               | 2.35s               |\n| download dup packages (2048)  | 34m26s    | 9m54s               | 8m17s               |\n\n## Uninstallation\n```\nsudo rm /usr/bin/zypperoni\n```\n\n## Troubleshooting\nSpecify the `--debug` option for troubleshooting.\nZypperoni is intended to catch SIGINT (Ctrl+C) and properly cleanup.\nIf for some reason it does not cleanup such as when receiving SIGTERM or SIGKILL, future operations should not be affected.\nZypperoni keeps its working directory in `/tmp/zypperoni_*`, so a reboot would always cleanup.\nShould zypperoni somehow mess up, it's very simple to clear whatever it has done wrong by doing:\n```\nsudo rm -rI /var/cache/zypp\nsudo zypper refresh --force\n```\n\n## Optional changes\n\n1. For faster connections to the official openSUSE repos without hardcoding it to a local mirror, change the repo URLs from `download.opensuse.org` to `cdn.opensuse.org`. The `.repo` config files are located in the directory `/etc/zypp/repos.d`. Run `zypperoni ref` after the update.\n\n2. Use bash aliases to run zypperoni commands less verbosely. For example, add the following aliases to your `~/.bashrc` file and run `source ~/.bashrc` to apply it:\n```\n# Zypperoni alias\nalias z='sudo zypperoni'\n```\n\nNow you can use `z ref` and `z dup` to refresh repos and perform distribution upgrade respectively.\n\n## Known issues\n\nGenerally, zypperoni should work out of the box with the default zypp and zypper configs.\nCustom or experimental configs may result in bugs.\n\n- Using the experimental option `techpreview.ZYPP_SINGLE_RPMTRANS=1` in `zypp.conf` would result in `zypperoni dup` appearing to hang indefinitely, but in reality zypper is doing its sequential download in the background due to RPM single transaction requirements. This config is not necessary when using zypperoni as it passes `ZYPP_SINGLE_RPMTRANS=1` as an environment variable when calling zypper.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavinjosdev%2Fzypperoni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavinjosdev%2Fzypperoni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavinjosdev%2Fzypperoni/lists"}