{"id":15697250,"url":"https://github.com/dimkr/packdude","last_synced_at":"2025-05-08T23:47:39.850Z","repository":{"id":145305216,"uuid":"19247155","full_name":"dimkr/packdude","owner":"dimkr","description":"A simple package manager that does the right thing and that's it; orphaned in favor of packlad","archived":false,"fork":false,"pushed_at":"2014-10-07T17:49:26.000Z","size":952,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-08T23:47:32.873Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://dslr.dimakrasner.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimkr.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-04-28T17:18:14.000Z","updated_at":"2021-08-03T14:49:21.000Z","dependencies_parsed_at":"2023-03-22T23:31:19.836Z","dependency_job_id":null,"html_url":"https://github.com/dimkr/packdude","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fpackdude","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fpackdude/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fpackdude/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fpackdude/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimkr","download_url":"https://codeload.github.com/dimkr/packdude/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253166477,"owners_count":21864467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-03T19:14:46.610Z","updated_at":"2025-05-08T23:47:39.832Z","avatar_url":"https://github.com/dimkr.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"                  _       _           _\n _ __   __ _  ___| | ____| |_   _  __| | ___\n| '_ \\ / _` |/ __| |/ / _` | | | |/ _` |/ _ \\\n| |_) | (_| | (__|   \u003c (_| | |_| | (_| |  __/\n| .__/ \\__,_|\\___|_|\\_\\__,_|\\__,_|\\__,_|\\___|\n|_|\n\nOverview\n========\n\npackdude is a lightweight, permissively-licensed package manager for Linux\n(https://www.kernel.org/) distributions.\n\nIt tries to combine:\n  - The speed and robustness of pacman (https://www.archlinux.org/pacman/)\n  - Easy creation of repositories, as with createrepo\n    (http://createrepo.baseurl.org/) and PPM (http://bkhome.org/woof/ppm.htm)\n  - The \"autoremove\" feature of Apt (https://wiki.debian.org/Apt)\n  - The ability to extract PPM's (http://bkhome.org/woof/ppm.htm) PET packages\n    on any distribution (using standard command-line tools), despite of their\n    custom format\n\nFeatures\n========\n\n  - Package download and installation, with recursive dependencies resolution\n  - Package removal, with automatic cleanup of unneeded packages\n  - Support for multiple package repositories\n\nDependencies\n============\n\npackdude depends on:\n  - libarchive (http://libarchive.org/) with XZ support (http://tukaani.org/xz/)\n  - SQLite (https://sqlite.org/)\n  - libcurl (http://curl.haxx.se/)\n  - zlib (http://www.zlib.net/)\n\nUsage\n=====\n\n  - First, compile your favorite libraries and applications as usual. Put each\n    in a tar archive (https://wikipedia.org/wiki/Tar_(file_format)) compressed\n    using LZMA2 (http://tukaani.org/xz/). Make sure the archive uses relative\n    paths.\n  - Then, use dudepack to convert each archive into a packdude package.\n  - Use repodude to generate a package metadata database.\n  - Upload the packages and the database to the root directory of a web server\n    and name the database \"repo.sqlite3\".\n  - Test the repository using packdude.\n\nFAQ\n===\n\n  'packdude'? Are you serious?\n  ----------------------------\n\nYes. It's like pacman (https://www.archlinux.org/pacman/), the best package\nmanager around, but very barebones. packdude may lack many features, but it's a\ntrue friend.\n\n  Why build another package manager?\n  ----------------------------------\n\nSince installation and removal of packages is a complex task, binary package\nmanagers provide a major performance benefit compared to script-based ones. Most\nsmall, community-powered distributions use slow, script-based, home-grown\npackage management solutions.\n\npackdude was born as an attempt to provide small distributions with a fast and\nextremely solid package manager, that is easy to use and doesn't make it hard to\ncontribute packages (something vital for a small distribution). When packdude\nwas conceived, none of the existing, binary packagers matched these criteria.\n\n  What makes packdude simple?\n  ---------------------------\n\n  - packdude doesn't ask any questions; it does the right thing and that's it.\n    Once a package is removed, all leftover dependencies are cleaned up\n    automatically, including those of other packages.\n  - The metadata of all packages stored in a packdude repository is contained\n    in one file, a database.\n  - packdude's package format is simple - a tar archive\n    (https://wikipedia.org/wiki/Tar_(file_format)) compressed using LZMA2\n    (http://tukaani.org/xz/), a four-byte magic number (0x65647564), one byte\n    for the package version and 4 bytes for a CRC32 hash\n    (https://wikipedia.org/wiki/Cyclic_redundancy_check) of the archive. Simple,\n    isn't it?\n  - packdude ships with a tool for easy conversion of archives into packages.\n    This makes it easy to integrate packdude into existing package and\n    distribution building systems.\n  - packdude supports only one repository at a time.\n\n  What makes packdude fast?\n  ---------------------------\n\n  - The use of a database, instead of huge text files that need to be read and\n    parsed\n  - packdude is written entirely in C, rather than using scripts for high-level\n    package management logic\n  - Efficient design - packdude doesn't try to achieve perfect parallelism, to\n    keep its code clean and maintainable. Instead, it does things in a logical\n    order: for example, it verifies the sanity of a package before it tries to\n    download and install its dependencies.\n  - The compression algorithm - although compression consumes lots of time and\n    memory, the decompression doesn't\n  - Caching\n\n  How come packdude is \"lightweight\" when it has these dependencies?\n  ------------------------------------------------------------------\n\npackdude's dependencies were chosen very carefully. They are\npermissively-licensed, small, written in C and support static linking: four\nfeatures required to make packdude a good choice for lightweight or embedded\nsystems. They're not very heavy, but they do introduce minor overhead.\n\nHowever, they can be easily replaced, since packdude's code provides just enough\nabstraction to hide the nasty details of database handling, compression, file\ndownload, etc' from other modules.\n\n  Why use a database? Real geeks use text files.\n  ----------------------------------------------\n\nThat's correct - going the Unix way means text files. However, using text files\nin a package manager is a mess, since each package has both its metadata (i.e\nits list of dependencies) and installation information (i.e who initiated its\ninstallation and when). It's hard to store this information in files, since this\nslows down pretty much every aspect of package management and makes error\nhandling a mess in a programming language without support for exceptions.\n\nUsing a database improves performance with big repositories, simplifies the code\nand makes debugging easier, since databases store useful information (for\nexample, complete history of executed queries).\n\nMoreover, using an embedded database makes it possible to store the metadata of\nall packages of a repository in a single file that doesn't need to be parsed\n(unlike text files).\n\nCredits and Legal Information\n=============================\n\npackdude is licensed under a 2-clause BSD license, see COPYING for the license\ntext. For a list of its authors and contributors, see AUTHORS.\n\nThe ASCII art logo at the top was made using FIGlet (http://www.figlet.org/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fpackdude","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimkr%2Fpackdude","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fpackdude/lists"}