Changes

Jump to navigation Jump to search
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.
+
=== Repositories ===
   −
The url path is:
+
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 [[Sugar_Network/Recipe_Specification#requires|activity.info]] file. Client side startup code will process this dependency list and ask PackageKit to install packages via packagekit-presolve-backend.
   −
'''GET''' /packages
+
While working, packagekit-presolve-backend will use public [[Platform_Team/Sugar_Network/API|Sugar Network API]] (look for development API server for recently implemented functionality). The regular operations called from the API server are the following:
   −
List all supported OLPC platforms.
+
<div id="GET_packages"></div>
   −
  '''GET''' /packages/''REPOSITORY''
+
  '''GET''' /packages/OLPC/''OLPC-RELEASE''/''METADATA-ENTRY-NAME''
   −
List all supported architectures for the specified OLPC platform.
+
This request returns a dependency tree for particular entry from the [http://network.sugarlabs.org/hub/?projects&packages metadata list]. The result will be served in JSON notation in form of:
   −
  '''GET''' /packages/''REPOSITORY''/''ARCH''
+
  "''ARCH''": [{"name": "''PACKAGE''", "version": "''VERSION''", "release": "''RELEASE''", "path": "''PATH''"}]
   −
List supported top-level packages.
+
Where {{Code|PATH}} is either relative or absolute path to the targeting rpm on the same server.
   −
'''GET''' /packages/''REPOSITORY''/''ARCH''/''PACKAGE''
+
<div id="GET_packages_updates"></div>
   −
Download dependencies graph for the specified package.
+
'''GET''' /packages/OLPC/''OLPC-RELEASE''/updates
   −
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.
+
Returns JSON list of package names to fetch updates for. Sugar Network server will dynamically generate response according to HTTP {{Code|If-Modified-Since}} header value.
   −
== 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;
Line 98: Line 94:  
Download and untar PackageKit [http://www.packagekit.org/releases/ sources] (current presolve backend was testing against PackageKit-0.6.12).
 
Download and untar PackageKit [http://www.packagekit.org/releases/ sources] (current presolve backend was testing against PackageKit-0.6.12).
   −
Prepare PackageKit sources for building presolve backend. Copy [http://git.sugarlabs.org/desktop/packagekit-backend-presolve/trees/master/backends/presolve presolve/] sub-directory to the corresponding directory in PackageKit sources. Patch PackageKit build scenarios to enable presolve building, e.g., [git.sugarlabs.org/desktop/packagekit-backend-presolve/blobs/master/build/mixin.patch].
+
Prepare PackageKit sources for building presolve backend. Copy [http://git.sugarlabs.org/desktop/packagekit-backend-presolve/trees/master/backends/presolve backends/presolve] sub-directory to the corresponding directory in PackageKit sources. Patch PackageKit build scenarios to enable presolve building, e.g., [http://git.sugarlabs.org/desktop/packagekit-backend-presolve/blobs/master/build/mixin.patch].
    
Go to PackageKit source root directory and build presolve backend.
 
Go to PackageKit source root directory and build presolve backend.
Line 118: Line 114:  
     --disable-strict \
 
     --disable-strict \
 
     --disable-tests
 
     --disable-tests
  make
+
  make -C backends/presolve
    
Staying in PackageKit root directory, install binaries.
 
Staying in PackageKit root directory, install binaries.

Navigation menu