Differences between revisions 26 and 27
Revision 26 as of 2006-01-09 17:12:25
Size: 10718
Editor: KevinMcCarty
Comment: comment on debian/changelog preservation, etc.
Revision 27 as of 2006-02-15 16:29:05
Size: 13179
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
   * See [http://mirror.phy.bnl.gov/debian-root/ here] for some build instructions and a repository for unstable (i386 and amd64).
   * Also see [http://www.physi.uni-heidelberg.de/~gbrandt/root/non-free/ here] some unofficial prebuild of version 4.04.
   * See [http://mirror.phy.bnl.gov/debian-root/ here] for some build instructions and a repository for unstable (i386, amd64, powerpc) and stable (i386 only).
   * [http://lists.debian.org/debian-science/2005/08/msg00101.html buildd] point is __very__ attractive to ROOT
   * [http://lists.debian.org/debian-science/2005/08/msg00101.html previously] ported ROOT to Debian GNU/Hurd
   * Looks for testers on [http://lists.debian.org/debian-science/2005/08/msg00101.html non-i386] Debian architectures.
 
=== Technical problems for packaging ===
 
The approach is that the ROOT source tree contains [http://root.cern.ch/viewcvs/build/package/lib/ scripts] and [http://root.cern.ch/viewcvs/build/package/common templates] to deal with packaging in general (that is for Debian and RPM), as well as some [http://root.cern.ch/viewcvs/build/package/debian Debian] and [http://root.cern.ch/viewcvs/build/package/redhat RPM] specific templates.
     
The debian packaging directory is then build by running the script '''[http://root.cern.ch/viewcvs/build/package/lib/makedebdir.sh makedebdir.sh]''', followed by '''fakeroot debian/rules debian/control'''. The packaging scripts will try to build as many packages as possible on the build host. Note, that that sometimes means that you can get packages that wouldn't be possible on a pristine build system.

Note, that this scheme does not change the way the packages are built. It merely changes how the debian directory is prepared. After the debian directory is made, the developer can still tweak it to fit the system. Of course, such tweaks should eventually be propegated back to the packaging scripts in ROOT itself, to assure consistency.

* N.B. In the eventual "official" Debian packages to come, the package maintainer would presumably run these two commands himself before '''dpkg-buildpackage''', and the results of the commands (for instance the debian/ directory) would therefore enter into the diff.gz of the source package. Thus the source package uploaded to Debian would always be buildable with the normal steps of '''dpkg-buildpackage -rfakeroot'''.

Question: what happens if an end-user does '''apt-get source root''' and then re-runs the makedebdir script? Does it overwrite the existing debian directory with information about the dependencies installed on the end-user's system? (Seems to me that would be the desired outcome.)

Answer: Yes.

It is important that the maintainer ensure that he has all the needed "official" build-depends installed on his system when running the makedebdir.sh script, and none of the "unofficial" non-DFSG-free libraries (e.g. Pythia) installed, perhaps by building on a pristine machine or in a pristine chroot. That is, use '''pbuilder''' :-). Remember that packages are not allowed to munge debian/control in such a way that their Build-Depends change during the dpkg-buildpackage step!

=== (Semi-)Out-dated: ===
 [http://lists.debian.org/debian-science/2005/08/msg00094.html ROOT depends on certain TTF fonts], and these are either in the msttcorefonts package, or there's no package for them in Debian.

ROOT can be patched to use other fonts if needed, at least for most fonts. However, there are no real substitute for the symbol.ttf font used for Greek letters and the like. One could imagine using something like opens.ttf from OpenOffice.org, but it's not quite the same, and it requires major code changes in ROOT. Another way to deal with all this, would be to use the Computer Modern fonts (TeX fonts), which contains all the needed symbols, though scattered over many font files.

== Licensing ==
 * [http://root.cern.ch/root/License.html ROOT License] is now LGPL.
 * The production version of ROOT (5.08 as of Jan 8, 2005) is LGPL'ed. The LGPL only applies to version 5.03 and higher of ROOT; prior versions still have the [http://root.cern.ch/viewcvs/LICENSE?rev=1.2&content-type=text/vnd.viewcvs-markup original] non-free license.
 * [http://lists.debian.org/debian-legal/2003/01/msg00278.html Debian legal thread] and [http://lists.debian.org/debian-science/2005/08/msg00085.html why] it is never too much to be careful about licenses. Long-awaited [http://lists.debian.org/debian-science/2005/08/msg00087.html fix] to the problem has now been implemented.
 * [http://lists.debian.org/debian-science/2005/08/msg00090.html Ricardo Yanez] is working on .debs that will be Policy-compliant and suitable to upload into Debian as soon as the licensing situation is fixed.
 * [http://people.debian.org/~kmccarty/physics-software-rant.html educational article on licensing and more]


== Obsolete ==

=== Repos, etc. ===

 * Also see [http://www.physi.uni-heidelberg.de/~gbrandt/root/non-free/ here] some unofficial prebuild of version 4.04.
Line 14: Line 51:
   * [http://lists.debian.org/debian-science/2005/08/msg00101.html buildd] point is __very__ attractive to ROOT
   * [http://lists.debian.org/debian-science/2005/08/msg00101.html previously] ported ROOT to Debian GNU/Hurd
   * Looks for testers on [http://lists.debian.org/debian-science/2005/08/msg00101.html non-i386] Debian architectures.
   * [http://mirror.phy.bnl.gov/debian-root/ His repository]. See also [http://lists.debian.org/debian-science/2005/08/msg00132.html this]
 * [http://mirror.phy.bnl.gov/debian-root/ His repository]. See also [http://lists.debian.org/debian-science/2005/08/msg00132.html this]
Line 19: Line 53:
=== Technical problems for packaging ===
 *
Differences between Ricardo Yanez and ChristianHolm work.

=== Differences between Ricardo Yanez and ChristianHolm work. ===
Line 64: Line 98:
 * '''(Semi-)Out-dated:''' [http://lists.debian.org/debian-science/2005/08/msg00094.html ROOT depends on certain TTF fonts], and these are either in the msttcorefonts package, or there's no package for them in Debian.
   * ROOT can be patched to use other fonts if needed, at least for most fonts. However, there are no real substitute for the symbol.ttf font used for Greek letters and the like. One could imagine using something like opens.ttf from OpenOffice.org, but it's not quite the same, and it requires major code changes in ROOT. Another way to deal with all this, would be to use the Computer Modern fonts (TeX fonts), which contains all the needed symbols, though scattered over many font files.
   * Would be [http://lists.debian.org/debian-science/2005/08/msg00100.html OK for contrib] better to look for main.
    * Would be [http://lists.debian.org/debian-science/2005/08/msg00100.html OK for contrib] better to look for main.
Line 68: Line 100:

== Licensing ==
 * [http://root.cern.ch/root/License.html ROOT License] is now LGPL.
 * The production version of ROOT (5.08 as of Jan 8, 2005) is LGPL'ed. The LGPL only applies to version 5.03 and higher of ROOT; prior versions still have the [http://root.cern.ch/viewcvs/LICENSE?rev=1.2&content-type=text/vnd.viewcvs-markup original] non-free license.
 * [http://lists.debian.org/debian-legal/2003/01/msg00278.html Debian legal thread] and [http://lists.debian.org/debian-science/2005/08/msg00085.html why] it is never too much to be careful about licenses. Long-awaited [http://lists.debian.org/debian-science/2005/08/msg00087.html fix] to the problem has now been implemented.
 * [http://lists.debian.org/debian-science/2005/08/msg00090.html Ricardo Yanez] is working on .debs that will be Policy-compliant and suitable to upload into Debian as soon as the licensing situation is fixed.
 * [http://people.debian.org/~kmccarty/physics-software-rant.html educational article on licensing and more]

ROOT for DebianScience

Thanks to [http://lists.debian.org/debian-science/2005/08/msg00066.html Brad Sawatzky] among others.

1. Debian (unofficial) packages

1.1. Technical problems for packaging

The approach is that the ROOT source tree contains [http://root.cern.ch/viewcvs/build/package/lib/ scripts] and [http://root.cern.ch/viewcvs/build/package/common templates] to deal with packaging in general (that is for Debian and RPM), as well as some [http://root.cern.ch/viewcvs/build/package/debian Debian] and [http://root.cern.ch/viewcvs/build/package/redhat RPM] specific templates.

The debian packaging directory is then build by running the script [http://root.cern.ch/viewcvs/build/package/lib/makedebdir.sh makedebdir.sh], followed by fakeroot debian/rules debian/control. The packaging scripts will try to build as many packages as possible on the build host. Note, that that sometimes means that you can get packages that wouldn't be possible on a pristine build system.

Note, that this scheme does not change the way the packages are built. It merely changes how the debian directory is prepared. After the debian directory is made, the developer can still tweak it to fit the system. Of course, such tweaks should eventually be propegated back to the packaging scripts in ROOT itself, to assure consistency.

* N.B. In the eventual "official" Debian packages to come, the package maintainer would presumably run these two commands himself before dpkg-buildpackage, and the results of the commands (for instance the debian/ directory) would therefore enter into the diff.gz of the source package. Thus the source package uploaded to Debian would always be buildable with the normal steps of dpkg-buildpackage -rfakeroot.

Question: what happens if an end-user does apt-get source root and then re-runs the makedebdir script? Does it overwrite the existing debian directory with information about the dependencies installed on the end-user's system? (Seems to me that would be the desired outcome.)

Answer: Yes.

It is important that the maintainer ensure that he has all the needed "official" build-depends installed on his system when running the makedebdir.sh script, and none of the "unofficial" non-DFSG-free libraries (e.g. Pythia) installed, perhaps by building on a pristine machine or in a pristine chroot. That is, use pbuilder :-). Remember that packages are not allowed to munge debian/control in such a way that their Build-Depends change during the dpkg-buildpackage step!

1.2. (Semi-)Out-dated:

ROOT can be patched to use other fonts if needed, at least for most fonts. However, there are no real substitute for the symbol.ttf font used for Greek letters and the like. One could imagine using something like opens.ttf from OpenOffice.org, but it's not quite the same, and it requires major code changes in ROOT. Another way to deal with all this, would be to use the Computer Modern fonts (TeX fonts), which contains all the needed symbols, though scattered over many font files.

2. Licensing

3. Obsolete

3.1. Repos, etc.

3.2. Differences between Ricardo Yanez and ChristianHolm work.

  • Package build infrastructure
    • Ricardo does a traditional packing.
      • That is, he maintains a patch to the ROOT source tree, with static packaging files, including the file lists, control file, and so on. This is attractive in it is completely standard. However, it has the down-side, that changes in the ROOT source tree has to be dealt with explicitly.
    • Christian does a somewhat non-traditional thing.
      • He managed to convince the upstream maintainers of ROOT, that they should include packaging stuff directly in the ROOT source tree. This was done to avoid the hurdle of updating the packaging scripts when ever the ROOT source tree changed.

        Therefore, in Christians approach, the ROOT source tree contains [http://root.cern.ch/viewcvs/build/package/lib/ scripts] and [http://root.cern.ch/viewcvs/build/package/common templates] to deal with packaging in general (that is for Debian and RPM), as well as some [http://root.cern.ch/viewcvs/build/package/debian Debian] and [http://root.cern.ch/viewcvs/build/package/redhat RPM] specific templates.

        The debian packaging directory is then build by running the script [http://root.cern.ch/viewcvs/build/package/lib/makedebdir.sh makedebdir.sh], followed by fakeroot debian/rules debian/control. The packaging scripts will try to build as many packages as possible on the build host. Note, that that sometimes means that you can get packages that wouldn't be possible on a pristine build system. Note, that this scheme does not change the way the packages are built. It merely changes how the debian directory is prepared. After the debian directory is made, the developer can still tweak it to fit the system. Of course, such tweaks should eventually be propegated back to the packaging scripts in ROOT itself, to assure consistency.

        • N.B. In the eventual "official" Debian packages to come, the package maintainer would presumably run these two commands himself before dpkg-buildpackage, and the results of the commands (for instance the debian/ directory) would therefore enter into the diff.gz of the source package. Thus the source package uploaded to Debian would always be buildable with the normal steps of dpkg-buildpackage -rfakeroot. Question: what happens if an end-user does apt-get source root and then re-runs the makedebdir script? Does it overwrite the existing debian directory with information about the dependencies installed on the end-user's system? (Seems to me that would be the desired outcome.) It is important that the maintainer ensure that he has all the needed "official" build-depends installed on his system when running the makedebdir.sh script, and none of the "unofficial" non-DFSG-free libraries (e.g. Pythia) installed, perhaps by building on a pristine machine or in a pristine chroot. Remember that packages are not allowed to munge debian/control in such a way that their Build-Depends change during the dpkg-buildpackage step!

          As a side note, it is also important to ensure that the debian/changelog file is preserved when moving to new upstream versions; without sufficient caution, it looks like it might accidentally be overwritten in such a case. --KevinMcCarty

  • Plug-ins and extensions
    • Ricardo makes separate run-time and development packages for all plug-ins and extensions. That is, the plugin mysql has packages libroot-mysql<version> and libroot-mysql-dev, and the extesion roofit has the packages libroot-roofit<version> and libroot-roofit-dev.

      • For extension packages, this is the right thing to do, because users might actually link explicitly against libRooFit.

        For plug-ins this approach is questionable. ROOT normally loads these plugins in response to implicit requests by the user. For example, if a user requests a connection to a MySQL database, she does TSQLServer* serv = TSQLServer::Connect("mysql://...."), and ROOT loads the plugin module libMySQL by it self in the background. Hence, the user needn't know about the library libMySQL or any of the header files that goes with it. Hence, the packaging stuff should not include the link library libMySQL or any of its headers.

    • For plug-ins and extensions, Christian makes only one package, e.g. root-plugin-mysql and root-plugin-roofit. For plug-ins, this is exactly the right thing to do (except that the headers are still distributed) as discussed above. For extensions this is wrong, as discussed above.

    • For extensions (things that the end-user should be able to link against explicitly in her code, as with g++ myprogram.cc -L/usr/lib/root -lRooFit), the Debian library packaging guidelines must be respected: packages of the extension with different sonames must have different package names and be installable in parallel; the -dev package of the extension contains header files and the development symlink (e.g.) /usr/lib/root/libRooFit.so. For plug-ins, it should be sufficient that they can't be dlopened by the wrong version of ROOT. I think the latter is already OK since ROOT 5.08 will read /etc/root/system.rootrc, find out that its plugins are in /usr/lib/root/5.08/ and therefore not see version 5.06 of libMinuit.so which is in /usr/lib/root/5.06/. --KevinMcCarty

  • Merging the two approaches.
    • In my (Christian) mind, we'd do best with a single approach. The current situation with two packaging schemes is not satisfactory, and is confusing at best. I think we need to find a way to unify the two approaches. In my mind that, that amounts to making the right kind of extension and plug-in packages. That is, a a run-time and a development package for each extension, and only a run-time package for the plug-ins. I think the best way to go about it, is to make changes to my approach (not because it's mine, but because it's simpler, and ROOT is willing to support it to some extent), by adding new development packages for the plug-in packages.