Meego Wiki
Views
From MeeGo wiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "=obstag - obs2obscopy - obsextractgroups= ==Requirement== When creating project, its important to be able to build on a known status of each constituents. It is also important to...")
 
(10 intermediate revisions not shown)
Line 1: Line 1:
-
=obstag - obs2obscopy - obsextractgroups=
+
[[User:Fvennetier/OBS_source_services]]
-
==Requirement==
+
-
When creating project, its important to be able to build on a known status of each constituents.
+
-
It is also important to be able to copy only what has changed when synching up with a newer version.
+
-
obstag and obs2obscopy commands add support for this requirement to any OBS.
+
-
obscreategroups complement these two utilities for the image creation.
+
-
==Download==
+
-
The latest version can be downloaded from our GIT tree
+
-
[https://meego.gitorious.org/meego-developer-tools/obs-light/trees/master/src/script here]
+
-
 
+
-
==obstag==
+
-
===Specifications===
+
-
OBS does not provide a Tagging concept but offers a concept of version control with a revision which is associated to each package of a project. The revision of a package is expressed by a sequence number (representing the number of commits done on that package) and a MD5 checksum which provides a direct access to a specific version of a package.
+
-
 
+
-
'''Note''' that the revision number is local to each OBS instance while the MD5 is transportable from one OBS instance to an other.
+
-
 
+
-
obstag utilities create a tag file for a given project. That Tag file can be used later to copy that specific version of the project into another target project.
+
-
 
+
-
'''Warning''' When obstag is used on a remote OBS via a link on a local OBS, obstag will create a package list but without any version tag information. With such a reduced information, obs2obscopy will always copy the latest version of the packages.
+
-
===Usage===
+
-
Launching obstag without any parameter or --help will display the on line help. There is no man page.
+
-
<code>
+
-
  $ obstag --help
+
-
  HELP
+
-
  Function : Tag a project in an OBS (remote obs are managed via a linked project)
+
-
            It will create a tag file which constains the MD5 to represent the package revision
+
-
            The Tag file can be used as direct input for obs2obsCopy
+
-
 
+
-
  Usage:    /usr/local/bin/obstag obs-alias project-name md5_file-name
+
-
  Example:  /usr/local/bin/obstag http://myObs.mynetwork:81 meego.com:MeeGo:1.2:oss my_revision_tag.md5
+
-
 
+
-
            meego.com can be a local projet which is a link to a remote OBS public API
+
-
            Public API do NOT provide log info and in that case revision info will be empty
+
-
            obs2obscopy will then copy the current release
+
-
  Version 3.0  Licence GLPv2
+
-
</code>
+
-
 
+
-
==obs2obscopy==
+
-
===Specifications===
+
-
OBS does not provide by default a method to copy a full project. obs2obscopy provides that facility using an obstag file as input.
+
-
 
+
-
All the packages which are listed in the Tag file will be copied. Any line starting with a # will be ignored (comment-out facility).
+
-
Only the MD5 is used to identify a package version, other information present in the tag file are for information only.
+
-
 
+
-
As a package will only be copied if it does not already exist on the target OBS, the command obs2obscopy can be rerun as many times as required to get the copy done without error (network errors are not uncommon) or to upgrade a project.
+
-
 
+
-
A report is printed at the end of the copy which will tell you if errors have occurred. The name of the log file is printed as well.
+
-
 
+
-
===Usage===
+
-
<code>
+
-
  $ obs2obscopy --help
+
-
  HELP
+
-
  Function : Copy a project from an OBS to an OBS, using as input a package list
+
-
            with the desired MD5 to represent the package revision.
+
-
            If target package is already at the correct revision, its copy
+
-
            is ignored. Running the script several times is possible until zero
+
-
            errors is achieved.
+
-
            A log file named <MD5_FILE>.log is created for every run.
+
-
 
+
-
  Usage:    obs2obscopy obs-alias source_prj target_prj md5_file
+
-
          or obs2obscopy obs-alias source_prj other-obs-alias target_prj md5_file
+
-
            md5_file is created by the script obstag
+
-
 
+
-
  Example1: Local copy
+
-
          obs2obscopy http://myObs.mynetwork:81 MyMeeGo:1.2:oss myTest:MeeGo:1.2:oss my_revision_tag.md5
+
-
  Example2: Remote copy (by link)
+
-
          obs2obscopy http://myObs.mynetwork:81 meego.com:MeeGo:1.2:oss myobs:MeeGo:1.2:oss my_revision_tag.md5
+
-
          where meego.com is a local project which is a link to a remote OBS public API
+
-
  Example3: Remote copy
+
-
          obs2obscopy http://api.pub.meego.com/public Project:MINT:Testing http://myObs.mynetwork:81 myTest:MINT:Testing my_revision_tag.md5
+
-
 
+
-
  Return code:
+
-
          0 success
+
-
          1 some packages not copied
+
-
          2 wrong number of arguments
+
-
          3 problem reading MD5 file or writing log file
+
-
          4 network error
+
-
          5 interrupted by user
+
-
 
+
-
  Version 3.1  Licence GLPv2
+
-
</code>
+
-
===Report===
+
-
A final report is printed at the end of each copy. Packages in error can be created by a lock on that package at the time of copy or a network error (in that case rerunning the command will wipe the problem out) or the deletion of a package in the source project (then the error will never go and commenting out the line in the the Tag file is your best option).
+
-
 
+
-
  Final reports
+
-
    Total packages requested    = 1385
+
-
    Packages existing on target  = 1375
+
-
    Packages needed copying      = 10
+
-
    Packages copied              = 8
+
-
    Packages in error            = 2
+
-
 
+
-
==Examples==
+
-
===Copying a local project===
+
-
* obstag MyObsAlias MyProjectToCopy MyProjectToCopyAsToday.md5
+
-
* obs2obscopy MyObsAlias MyProjectToCopy MyProjectTarget MyProjectToCopyAsToday.md5
+
-
===Delivering an initial copy of a project to a customer===
+
-
* On the provider side
+
-
** obstag SourceObsAlias MyProjectToDeliver ProjectToDeliverV-x.x.md5
+
-
** mail to customer
+
-
*** ProjectToDeliverV-x.x.md5
+
-
*** pointer to the public or private API of the source OBS (if private then Login and Password must be provided)
+
-
 
+
-
* On the Customer side
+
-
** create a link project to the provider OBS API
+
-
** if not existent create the receiving project (e.g. TheProject)
+
-
** obs2obscopy CustomerObsAlias ProviderProjectLink:MyProjectToDeliver TheProject ProjectToDeliverV-x.x.md5
+
-
===Upgrading a copy of a project to a customer===
+
-
Simply use the same process as for the initial delivery.
+
-
obs2obscopy will only copy the packages which are not already presented on the target
+
-
===Removing some packages from the copy===
+
-
If for any motive some packages should not be copied, a simple # at the beginning of any line will comment out that line.
+
-
===Creating a link project to an other OBS instance===
+
-
Creating a remote target project is very simple.
+
-
* Create an empty project on your OBS (e.g. LinkToMeego.com)
+
-
* Edit the meta data of the project
+
-
* osc meta -e prj LinkToMeego.com
+
-
<code>
+
-
<project name="LinkToMeego.com">
+
-
  <title>build.MeeGo.com</title>
+
-
  <description>This project allows access to all resources on build.meego.com instance.</description>
+
-
  <remoteurl>https://api.meego.com/public</remoteurl>
+
-
  <person role="maintainer" userid="Admin"/>
+
-
  <person role="bugowner" userid="Admin"/>
+
-
</project>
+
-
</code>
+
-
 
+
-
* if the target OBS is not a public API, the you need to change the login and passwd. MeeGo.com API is public and does not require a password but some other publishers (e.g. Genevi Alliance) require a login and password to use their API.
+
-
 
+
-
==obsextractgroups==
+
-
===Specifications===
+
-
obsextractgroups as it name tells, simply extract packages groups from a published repo and provides them as files ready for used by mic2 as an include file in a .ks via the macro %include.
+
-
It can read packages groups from local or remote repositories. A full URL allows to specify the source of the group information.
+
-
The groups are extracted in files in a format which is compatible with the macro %include of a kick start file (.ks) as used by Mic2.
+
-
===Usage===
+
-
<code>
+
-
  /obsextractgroups.py  --help
+
-
  HELP obsextractgroups
+
-
  Function :      Parse the group.xml file (even it's a .gz file), in a Meego's repos,
+
-
                and save the lists of rpm for each group into files,
+
-
                with the name of the group for name.
+
-
               
+
-
  Usage:          obsextractgroups [option] URL-to-published-repo [target-dir-includes-files]
+
-
    [option]:
+
-
        -s silent mode
+
-
        -d debug mode, copy the group.xml in the target-dir-includes-files.
+
-
        -v verbose mode.
+
-
        URL-to-published-repo: must be a valid repository
+
-
        target-dir-includes-files: is optional, by default the value is the current directory
+
-
   
+
-
  Example1: Remote
+
-
      ./obsextractgroups.py -v -d http://repo.meego.com/MeeGo/releases/1.2.0/repos/oss/ia32/ ./result/
+
-
 
+
-
  Example2: Remote (note: here the port is 82)
+
-
      ./obsextractgroups.py http://128.124.118.140:82/home%3a/ronan%3a/MeeGo%3a/1.2/ 
+
-
 
+
-
  Example3: Local
+
-
      ./obsextractgroups.py -s ./repos/
+
-
 
+
-
  version:0.1  License:+GLPv2
+
-
</code>
+
-
===Report===
+
-
A final report is printed at the end of the copy.
+
-
<code>
+
-
  Number of Groups:      47
+
-
  Group name      Numbers of packages
+
-
  Basic Hardware Support  1
+
-
  MeeGo SDK Base  17
+
-
  MeeGo Tablet Applications      17
+
-
  MeeGo Handset Desktop  35
+
-
  MeeGo Compliance        78
+
-
  Virtual Machine Support 4
+
-
  Minimal MeeGo X Window System  7
+
-
  MeeGo Handset Applications      19
+
-
  MeeGo TV        16
+
-
  MeeGo Core      121
+
-
  ...
+
-
  ...
+
-
  </code>
+

Latest revision as of 14:54, 16 January 2012

User:Fvennetier/OBS_source_services

Personal tools