These are the TODO items for the Haiku '''Package Management'''. === packagefs === * If necessary, add a caching mechanism to speed up mounting it. * Use a global string hash table to avoid allocating duplicate strings. Will reduce the memory footprint and speed up some code paths. === Package Daemon === * Add user notification/interaction support for initial verification (on start-up) and manual package de-/installation. * Support packages being copied to the `packages` directory. Currently only moving works. === Build system === * Before creating packages (e.g. the user guide), all files must be identified, since packagefs is read-only. * Add hybrid support. === Package building === * Define packaging guidelines and create a tool to check packages against those. * Adjust build "recipes" for HaikuPorts packages as needed and build the packages. * Status: There's a package management [https://bitbucket.org/haikuports/haikuports/commits/all/tip/package-management branch of haikuports] with recipes for several packages already updated for building HPKGs. === Package kit/manager === * Implement the package solver based on libsolv. * Status: There's a [https://github.com/weinhold/libsolv WIP port] of libsolv. It's more or less complete and working OK as far as tested. The Haiku solver API is partially done. * Extend the package kit and the (CLI) package manager to support adding, removing, and updating packages. That probably also involves work on a server-side (i.e. repository) part. * Implement a GUI package manager. === Boot loader === * Currently the stage 1 boot loader requires the stage 2 boot loader to be in the file `system/haiku_loader` on the BFS boot volume. Since the stage 2 boot loader itself should also be subject to package management, that means currently the package manager has to extract it from the system package. It would be nicer, if the stage 1 boot loader could load the stage 2 boot loader directly from the system package. Since the space for the stage 1 boot loader is too limited to deal with the HPKG format (< 1 KB in total), the format would probably have to be extended to provide an easily accessible bootstrap code. Alternatively additional space for the stage 1 boot loader would have to be found/made in the BFS on-disk format. * Safe mode/recovery options: - Disable home and common. - Boot into old system state. === Package/package repository format === * Add a package attribute (string) that specifies a base package of a package. For most ported software, the files resulting from a built are usually separated into different packages (base, develop, debug-info, doc, etc.). All of these packages should be installed in the same installation location, since they have been built with the same installation prefix. In order to enforce such a constraint, one of the packages should be declared in the "requires" list of the others and they should additionally use the new attribute to identify it as the base package. * Remove B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES_TYPE ("package:provides.type"). The type is encoded in the name anyway. * Add support for repository keys (public/private) and package signing/check sums, so that it is possible to verify that data retrieved from a repository have not been tempered with. * Support compression for the whole heap instead of just for individual file data. This should improve compression rates especially for packages containing many small files with only a small drawback regarding removing/replacing files in packages (potentially the whole heap would have to be recompressed). === Miscellaneous === * Modify Expander to use a directory instead of the `expander.rules` file. This way a package (like xz-utils or p7zip) can contribute a single file with the rules for its tools. * Ticket: #8494 * The MIME database is currently installed in "/boot/home/config/setting". The defaults MIME types built by the Haiku build system should be put in a package (probably the system package) and "/boot/home/config/setting" should just contain what the user has explicitly set. The registrar needs to be adjusted to support that. * Update Installer.