Line 41: |
Line 41: |
| == Implementation == | | == Implementation == |
| | | |
− | === Premises === | + | === Overview === |
| | | |
| The implementation is following these premises: | | The implementation is following these premises: |
Line 47: |
Line 47: |
| * Being targeted only to XO laptops (assuming that other platforms are more powerful, thus the standard PackageKit backend can be used); | | * Being targeted only to XO laptops (assuming that other platforms are more powerful, thus the standard PackageKit backend can be used); |
| * Keep less work on the XO side and more work on the server side to make the installation process on a client's side as fast and reliable as possible; | | * Keep less work on the XO side and more work on the server side to make the installation process on a client's side as fast and reliable as possible; |
− | * Implement only priority functionality, and provide more complex features as required, e.g., the current implementation doesn't support updating already installed packages. Leave that to hard (and rare, e.g., yearly) full system updates (re-flashes or calling olpc-update) and incremental regular updates (sugar-client). | + | * Implement only priority functionality, such as, install new packages and update installed packages that are presolved; |
| + | * Implementation is intended to cover only one-cycle post-deployment system upgrade, i.e., relatively lightweight ones; heavy update, e.g., from one OS release to another one should happen using different methods. |
| | | |
− | === Overview ===
| + | The key implementation points are the following: |
| | | |
| * Clients keep a list of packages installed by the back-end; | | * Clients keep a list of packages installed by the back-end; |
Line 55: |
Line 56: |
| * If not, it downloads a file from a known HTTP location with the requested package's name; | | * If not, it downloads a file from a known HTTP location with the requested package's name; |
| * Downloaded file contains the RPM url for the requested package and a list of package-name/url pairs for all dependencies (starting from some known point); | | * Downloaded file contains the RPM url for the requested package and a list of package-name/url pairs for all dependencies (starting from some known point); |
− | * All missing packages 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.
| |
− | | |
− | == Repositories ==
| |
− | | |
− | === Sugar Network ===
| |
− | | |
− | Sugar Network [[Platform_Team/Sugar_Network/API|API]] server provides presolved data for packages registered in the Sugar Network [[Sugar_Network/Submit_activities#Dependencies|Packages]] project.
| |
− | | |
− | The url path is:
| |
− | | |
− | '''GET''' /packages
| |
− | | |
− | List all supported OLPC platforms.
| |
| | | |
− | '''GET''' /packages/''REPOSITORY''
| + | === Repositories === |
| | | |
− | List all supported architectures for the specified OLPC platform.
| + | Current implementation is designed to work in close cooperation with the [[Sugar Network]] installing dependencies required by Sugar Activities. To make it possible, Sugar Network supports a [http://network.sugarlabs.org/hub/?projects&packages list of metadata entries] for all required packages on major GNU/Linux distributions (to support not only XO laptops). Each activity, which requires dependencies, should mention proper metadata entry names in the {{Code|requires}} tag in the {{activity.info}} file. Client side startup code will process this dependency list and ask PackageKit to install packages via packagekit-presolve-backend. |
| | | |
− | '''GET''' /packages/''REPOSITORY''/''ARCH''
| + | While working, packagekit-presolve-backend will use public [[Platform_Team/Sugar_Network/API|Sugar Network API]]. The regular operations called from the API server are the following: |
| | | |
− | List supported top-level packages.
| + | '''GET''' /packages/OLPC/''OLPC-RELEASE''/''METADATA-ENTRY-NAME'' |
| | | |
− | '''GET''' /packages/''REPOSITORY''/''ARCH''/''PACKAGE''
| + | Return a dependency tree for particular entry from the [http://network.sugarlabs.org/hub/?projects&packages metadata list]. The result will server in JSON notation in form of: |
| | | |
− | Download dependencies graph for the specified package.
| + | "arhc": {"name": "''RPM-NAME''", "version": "''RPM-VERSION''", "release": "''RPM-RELEASE''", "path": "''RPM-PATH''"} |
| | | |
− | The {{Code|REPOSITORY}} and {{Code|ARCH}} values come from [[Platform_Team/Open_Build_System|OBS]] {{OBS/repositories|resolve|resolve}} project. Package data served in JSON notation.
| + | Where {{Code|RPM-PATH}} is either relative or absolute path to the targeting rpm on the same server. |
| | | |
− | == Usage == | + | === Usage === |
| | | |
| * Install {{Code|PackageKit-presolve}} binary package from the [[Sweets Distribution]] Factory repository; | | * Install {{Code|PackageKit-presolve}} binary package from the [[Sweets Distribution]] Factory repository; |