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