Platform Team/packagekit-backend-presolve: Difference between revisions

No edit summary
Line 22: Line 22:
== Concept ==
== Concept ==


The general idea is exactly about presolving dependencies tree for limited list of top-level packages and store this information on a server. Clients need to download only small amount of information (in comparing with entire list of available packages) to reuse it as-is (and avoid reading database into memory during solving process).
The general idea is to pre-resolve dependencies for a limited set of top-level packages and store this information on a server. Clients need to download only small amount of information (compared with entire list of available packages) to reuse it as-is (and avoid reading database into memory during solving process).


Another important point is that all presolved dependency trees don't include packages from some standard installation. In other words, particular dependency tree doesn't end with the {{Code|glibc}} packages, instead, it ends with {{Code|sugar}} package. That should drastically restrict the length of trees.
Another important point is that pre-resolved dependency graphs don't include packages from the base system. In other words, a particular dependency tree doesn't end with the {{Code|glibc}} package. Instead, it ends with the {{Code|sugar}} package. This expedient should drastically reduce the size of trees.


Finally, missed packages will be installed directly by using {{Code|rpm -i}} command.
Finally, missing packages will be installed directly by using the {{Code|rpm -i}} command.


=== Upside ===
=== Upsides ===


* Users need to download metadata on package basis on demand and avoid downloading the full packages database;
* Users download metadata on a package by package basis, thus avoiding the need to download the full packages database;
* After downloading, metadata will be reused as-is, i.e., after checking what packages were already installed, system will download only missed RPMs and install them directly by calling {{Code|rpm -i}} command;
* After downloading, metadata will be reused as-is, i.e., after checking what packages were already installed, system will download only missed RPMs and install them directly by calling {{Code|rpm -i}} command;
* Activities launching code will be general, i.e., will work as-is on all platform that have PackageKit (literally, on all mainstream GNU/Linux distributions), not only on XO laptops with packagekit-backend-presolve installed.
* Packaged activities will be distro-agnostic. That is, they will work unmodified on all platforms that provide PackageKit (which means all mainstream GNU/Linux distributions).


=== Downside ===
=== Downsides ===


* The project is intended to install only limited number of top-level packages, i.e., packages that have presolved dependency trees on a server; for example, it is not capable for full system update;
* The project is intended to install only limited number of top-level packages, i.e., packages that have pre-resolved dependency trees on a server; for example, it is not capable for full system update;
* Support dependency trees on server side.
* Need to support server-side generation of dependency trees.


== Implementation ==
== Implementation ==
Line 43: Line 43:
=== Premisses ===
=== Premisses ===


The implementation is following the premisses:
The implementation is following the premises:


* Being targeted only to XO laptops (assuming that other platforms are more powerful where standard PackageKit backend can be used);
* Being targeted only to XO laptops (assuming that other platforms are more powerful where standard PackageKit backend can be used);
Line 51: Line 51:
=== Overview ===
=== Overview ===


* Client side keeps a list of installed, via backend, packages;
* Clients keep a list of packages installed by the back-end;
* After getting install request, backend will check if requested package is already installed;
* After getting install request, the back-end will check if the requested package is already installed;
* If not, download a file from know HTTP location with the requested package's name;
* If not, it downloads a file from know HTTP location with the requested package's name;
* Downloaded file contains RPM url for requested package and a list of package-name/url pairs for all dependencies (starting from some known point);
* Downloaded file contains RPM url for requested package and a list of package-name/url pairs for all dependencies (starting from some known point);
* All missed RPMs will be downloaded and installed by directly calling {{Code|rpm -i}};
* All missing packages will be downloaded and installed by directly calling {{Code|rpm -i}};
* Installed packages list will be updated correspondingly.
* Installed packages list will be updated correspondingly.