| <<O>> Difference Topic PackageManagement (r1.6 - 14 Mar 2006 - PatrickHartling) |
| ||||||||
| Line: 191 to 191 | ||||||||
|---|---|---|---|---|---|---|---|---|
Debian | ||||||||
| Changed: | ||||||||
| < < |
Tasks | |||||||
| > > |
Proposal | |||||||
| Changed: | ||||||||
| < < |
Making all of this happen requires work. Below, we list the tasks that must be performed to achieve our goals. | |||||||
| > > |
Given all of the above, the following is a proposal for how to achieve our goals. There are many steps involved, and changes to the Juggler project would have to be made on all platforms. | |||||||
| Changed: | ||||||||
| < < |
Binary Compatibility | |||||||
| > > |
.jdef compatibility in a stable release series, then the versioned directories and shared libraries only need to include the major and minor version numbers. For an unstable series (those with an odd-numbered minor version), the need to maintain compatibility is greatly reduced. In that case, the version naming convention would have to contain the major, minor, and patch version numbers. To see the results of this, imagine that we have the runtime packages of Gadgeteer 1.0, 1.2, 1.3.4, and 1.3.9 installed. The shared libraries and data directories would appear as follows:
/usr/lib
libgadget-1_0.so
libgadget-1_2.so
libgadget-1_3_4.so
libgadget-1_3_9.so
/usr/share --+-- gadgeteer-1.0
+-- gadgeteer-1.2
+-- gadgeteer-1.3.4
+-- gadgeteer-1.3.9
TasksMaking this proposal a reality requires work. Below, we list the tasks that must be performed to achieve our goals. Initially, the work would be done in VR Juggler 2.1, and a decision would have to be made regarding whether to backport the changes to VR Juggler 2.0. Considering that VR Juggler 2.0 will probably be in use for quite some time, it would be beneficial if the next VR Juggler release (2.0.2) could take advantage of the capabilities that would exist for packaging VR Juggler 2.1 and beyond. However, doing so would essentially mean that users could have to go through some trouble to migrate to VR Juggler 2.0.2. By and large, details such as shard library naming changes would be captured by usingvrjuggler-config and friends, but it is impossible to say how many users take advantage of the *-config scripts.
The VR Juggler 2.2 release could be accelerated to address some of these issues sooner. This would mean that most of the goals for VR Juggler 2.2 would have to be delayed for VR Juggler 2.4. However, the sooner users are migrated to VR Juggler 2.2 and any and all new installation conventions, the better.
Binary Compatibility | |||||||
| Without binary compatibility, capabilities such as being able to upgrade an installed package become useless. If an installed VR Juggler application only works with VR Juggler 2.0.1, then VR Juggler 2.0.1 cannot be replaced by VR Juggler 2.0.2. Rather, both must be installed in parallel, and for said application to benefit from bug fixes in VR Juggler 2.0.2, it must be recompiled. In that case, the application might as well be linked statically against the Juggler libraries. How can we achieve binary compatibility for VR Juggler? Short of redesinging the libraries to have a mutable internal interface and a consistent public interface, guaranteeing binary compatibility means being careful about making changes. If a change to the VR Juggler 2.0 release branch would break binary compatibility with previous 2.0.x releases, then that change cannot be made. Essentially, this means that the release branch would have to be strictly for bug fixes and stability enhancements that do not break binary compatibility. Informally, this is the intent, but the policy has not been enforced. | ||||||||
| Changed: | ||||||||
| < < |
Shared Library Versioning | |||||||
| > > |
Shared Library Versioning | |||||||
Currently, shared libraries are versioned on UNIX-based platforms but not on Windows. The versioning on Mac OS X is the same as on Linux, FreeBSD, etc., but this is not a strictly correct approach. If only for the sake of consistency, we should be versioning shared libraries consistently on all platforms.
The Boost model provides a good approach by putting the version number into the shared library name in a way that does not interfere with platform-specific needs to identify files with three-letter extensions. For example, the optimized, multi-threaded Boost.Python library is named libboost_python-gcc-mt-1_33_1.so on GCC-based platforms. On Windows, it is named boost_python-vc7-mt-1_33_1.dll (for the vc7 toolset). If we focus on just the version number, this would mean changing the Juggler libraries to be named as libvpr-1_0_2.so and vpr-1_0_2.dll instead of libvpr.so.1.0.2 and vpr.dll. If we have binary compatibility for a given release series, we can simplify this to libvpr-1_0.so and vpr-1_0.dll.
| ||||||||
| Changed: | ||||||||
| < < |
Data Directory Versioning | |||||||
| > > |
Data Directory VersioningVersioning the data directories means that run-time searches for data files have to take the version number into account. Additionally, the build system must be extended to factor the module version number into the data directory name when installing. This should not be too difficult, but it has not been tried before. The configure scripts do know the data directory version, and the makefiles all reference$(datadir).
Versioning in the
Versioning scripts in the | |||||||
| Changed: | ||||||||
| < < |
Versioning in
| |||||||
| > > |
Fix CppDOM RPM Spec File | |||||||
| Changed: | ||||||||
| < < |
Fix CppDOM RPM Spec File | |||||||
| > > |
The RPM spec file for CppDOM is using some deprecated aspects. It needs to be updated to fix these problems so that the CppDOM RPMs can be built again. It would also have to be extended to be aware of versioning information. | |||||||
| Changed: | ||||||||
| < < |
-- PatrickHartling - 10 Mar 2006 | |||||||
| > > |
-- PatrickHartling - 14 Mar 2006 | |||||||
| <<O>> Difference Topic PackageManagement (r1.5 - 10 Mar 2006 - PatrickHartling) |
General Issues | ||||||||
| Changed: | ||||||||
| < < |
Here, we discuss and lay out a process for packaging VR Juggler in a standard (or at least, reasonably standard) way. An important part of this is to identify the needs of various VR Juggler installations so that the packaging mechanism and recommendations meet these needs. | |||||||
| > > |
Here, we discuss and lay out a process for packaging VR Juggler in a standard (or at least, reasonably standard) way. An important part of this is to identify the needs of various VR Juggler installations so that the packaging mechanism and recommendations meet these needs. Managing VR Juggler configurations is a separate topic, though these two are related. Indeed, solving the configuration file management issue goes a long way towards solving package management issues. | |||||||
| Much of this discussion concentrates on Linux distributions, but such operating systems are not the only platforms with software packaging. As the discussion evolves, it would be desireable for it to branch out and try to cover as many approaches as possible. Doing so would most likely result in a very robust recommendation for how to package and install VR Juggler. | ||||||||
| Line: 37 to 37 | ||||||||
|---|---|---|---|---|---|---|---|---|
|
The rendered VR Juggler documentation currently gets bundled up into a form that mirrors the structure of the VR Juggler website. This is done primarily to keep the installation process simple for the cases of installing documentation to the VR Juggler website and to the redistributable archive. For a VR Juggler documentation package, this would probably need to be rethought. The Linux File System Hierarchy Standard would be a good place to start. A likely structure would be the following:
| ||||||||
| Changed: | ||||||||
| < < |
/usr/share/doc --+-- gadgeteer | |||||||
| > > |
/usr/share/doc --+-- gadgeteer-1.0 | |||||||
| | | ||||||||
| Changed: | ||||||||
| < < |
+-- jccl | |||||||
| > > |
+-- jccl-1.0 | |||||||
| | | ||||||||
| Changed: | ||||||||
| < < |
+-- sonix | |||||||
| > > |
+-- sonix-1.0 | |||||||
| | | ||||||||
| Changed: | ||||||||
| < < |
+-- tweek | |||||||
| > > |
+-- tweek-1.0 | |||||||
| | | ||||||||
| Changed: | ||||||||
| < < |
+-- vapor | |||||||
| > > |
+-- vapor-1.0 | |||||||
| | | ||||||||
| Changed: | ||||||||
| < < |
+-- vrjuggler | |||||||
| > > |
+-- vrjuggler-2.0 | |||||||
Parallel Installations | ||||||||
| Line: 56 to 56 | ||||||||
| Another case of using parallel installations would be for having VR Juggler 2.x and VR Juggler 2.y installed. That may mean having a stable release and an unstable release installed at the same time. The motivation for this is basically the same as what is described above. | ||||||||
| Added: | ||||||||
| > > |
Ultimately, parallel installations are needed to handle VR Juggler versions that lack binary compatibility. If VR Juggler 2.0.x and VR Juggler 2.0.y are binary compatible, then the 2.0.x installation can be replaced by the 2.0.y installation without impacting existing installed applications. Having binary compatibility reduces the need for parallel installations, and it allows existing applications to get bug fixes without having to be recompiled.
Problems with Parallel InstallationsAllowing parallel installations raises many complications, and as such, most projects do not allow for multiple versions to be installed in parallel. With VR Juggler, however, it would be beneficial to allow for multiple version to be installed side by side. Before we can accomplish this, we have to be aware of the problems posed by parallel installations. They are as follows:
Implementing Parallel Installations | |||||||
So, we have to ask how to achieve parallel installations that do not conflict with each other. There are a variety of ways of doing this.
| ||||||||
| Changed: | ||||||||
| < < |
| |||||||
| > > |
| |||||||
| ||||||||
| Changed: | ||||||||
| < < |
| |||||||
| > > |
| |||||||
| ||||||||
| Added: | ||||||||
| > > |
Aside from the shared libraries loaded by applications, the appropriate data files must be discoverable at run time. This means that data directories need to be versioned, too. Right now, we have the following structure:
$VJ_BASE_DIR/share -+-- gadgeteer
|
+-- jccl
|
+-- sonix
|
+-- tweek
|
+-- vpr
|
+-- vrjuggler
This would need to change to include the module's version number, as shown below:
$VJ_BASE_DIR/share -+-- gadgeteer-1.0
|
+-- jccl-1.0
|
+-- sonix-1.0
|
+-- tweek-1.0
|
+-- vpr-1.0
|
+-- vrjuggler-2.0
This assumes, however, that the data files are compatible between patch releases. Without this guarantee, we would have to do the following:
$VJ_BASE_DIR/share -+-- gadgeteer-1.0.1
|
+-- jccl-1.0.1
|
+-- sonix-1.0.1
|
+-- tweek-1.0.1
|
+-- vpr-1.0.1
|
+-- vrjuggler-2.0.1
Continuing with this trend of versioning everything, the contents of $VJ_BASE_DIR/bin would need version information, too. In order for VRJConfig to find the correct .jdef files, it would need to know where to look. Installing the vrjconfig shell script with a version number (such as vrjconfig-2.0.2) would provide the basis for this. Similarly, the *-config scripts would need version information in order to provide the correct compiler and linker options (depending on how headers and shared librares are installed for the purposes of compiling applications). A naming convention could be vrjuggler20-config. A more robust approach would be to use pkg-config since it has built-in support for package versioning, but that should be a separate discussion.
Underlying all of this would have to be an extension to Juggler's run-time behavior to do version-specific searches. The library version number is known at compile time, but it would be nice if users could provide a specific version number through an environment variable (an approach that is actually required for the Java code to function at this time). This new environment variable could be namd VJ_VERSION, and its purpose would be to help Juggler find what it needs at run time.
There is a problem with a single version number environment variable, however. The Juggler modules do not all have the same version number, and it is unlikely that they ever will. Given that the various modules undergo development at different rates, version numbers would have to be altered artificially to keep them the same, and this could lead to a lot of annoyances for developers. Since there are already multiple "base directory" environment variables (viz., VJ_BASE_DIR, JCCL_BASE_DIR, and so on), it would not be unreasonable to have multiple version number environment variables. If we agree that using the version number environment variable would only be for the purposes of overriding default behaviors, then it follows that the people doing this are almost certainly capable of understanding how multiple version number environment variables would have to be handled.
Self-Contained InstallationsInstead of pursuing parallel installations, we could use an approach where everything is installed under a version-specific root directory. Basically, this is what has been done to date with VR Juggler installations. In this case, the user is required to setVJ_BASE_DIR, PATH, LD_LIBRARY_PATH, etc. accordingly based on the needed version of VR Juggler. This has led to the proliferation of launch scripts to get all of this done correctly. While it does ensure that a given application will continue to work as long as its VR Juggler version remains installed, it gives up the benefits of using shared libraries and results in a management nightmare. Nevertheless, it is an option that many, many people have used, and formalizing it with package management must be considered.
The idea here is to provide some form of packaging for VR Juggler that would install everything under a directory such as /usr/local/vrjuggler-2.0.2. Multiple VR Juggler versions could be installed this way without conflicting and without having to worry about dependency conflicts other complication posed by using parallel installations. As noted above, this approach requires more effort on the part of the user because environment variables would have to be set correctly in order to use the appropriate version.
Dependency ManagementAny decision made about how to manage VR Juggler installation requires that we consider how VR Juggler dependencies are managed. Excluding dependencies such as the X Window System and OpenGL, a VR Juggler runtime depends on shared libraries from CppDOM and Boost.Filesystem. (PyJuggler needs Boost.Python as well as the dependencies of VR Juggler.) The current version of CppDOM (0.6.1 as of this writing) has a specification file for RPMs providing runtime and development installations, but its shared libraries are not versioned. Fedora Core and other Linux distributions provide packaged versions of Boost, but for some reason, the RPM ignores the versioning of the shared libraries that Boost normally has. | |||||||
Platform-Specific ApproachesLinux | ||||||||
| Line: 110 to 191 | ||||||||
Debian | ||||||||
| Changed: | ||||||||
| < < |
-- PatrickHartling - 27 Feb 2006 | |||||||
| > > |
TasksMaking all of this happen requires work. Below, we list the tasks that must be performed to achieve our goals.Binary CompatibilityWithout binary compatibility, capabilities such as being able to upgrade an installed package become useless. If an installed VR Juggler application only works with VR Juggler 2.0.1, then VR Juggler 2.0.1 cannot be replaced by VR Juggler 2.0.2. Rather, both must be installed in parallel, and for said application to benefit from bug fixes in VR Juggler 2.0.2, it must be recompiled. In that case, the application might as well be linked statically against the Juggler libraries. How can we achieve binary compatibility for VR Juggler? Short of redesinging the libraries to have a mutable internal interface and a consistent public interface, guaranteeing binary compatibility means being careful about making changes. If a change to the VR Juggler 2.0 release branch would break binary compatibility with previous 2.0.x releases, then that change cannot be made. Essentially, this means that the release branch would have to be strictly for bug fixes and stability enhancements that do not break binary compatibility. Informally, this is the intent, but the policy has not been enforced.Shared Library VersioningCurrently, shared libraries are versioned on UNIX-based platforms but not on Windows. The versioning on Mac OS X is the same as on Linux, FreeBSD, etc., but this is not a strictly correct approach. If only for the sake of consistency, we should be versioning shared libraries consistently on all platforms. The Boost model provides a good approach by putting the version number into the shared library name in a way that does not interfere with platform-specific needs to identify files with three-letter extensions. For example, the optimized, multi-threaded Boost.Python library is namedlibboost_python-gcc-mt-1_33_1.so on GCC-based platforms. On Windows, it is named boost_python-vc7-mt-1_33_1.dll (for the vc7 toolset). If we focus on just the version number, this would mean changing the Juggler libraries to be named as libvpr-1_0_2.so and vpr-1_0_2.dll instead of libvpr.so.1.0.2 and vpr.dll. If we have binary compatibility for a given release series, we can simplify this to libvpr-1_0.so and vpr-1_0.dll.
Data Directory Versioning Versioning in
| |||||||
| <<O>> Difference Topic PackageManagement (r1.4 - 03 Mar 2006 - PatrickHartling) |
| ||||||||
| Line: 83 to 83 | ||||||||
|---|---|---|---|---|---|---|---|---|
Monolithic RPM | ||||||||
| Changed: | ||||||||
| < < |
Using a monolithic RPM collects everything that can be built into two installable units called vrjuggler and vrjuggler-devel. Currently, Infiscape has a spec file for creating this RPM.
| |||||||
| > > |
Using a monolithic RPM collects everything that can be built into two installable units called vrjuggler and vrjuggler-devel. The RPM spec file checked in to the Juggler repository provides this. A third package called vrjuggler-docs would probably need to be added.
| |||||||
| Pros | ||||||||
| Line: 101 to 101 | ||||||||
| ||||||||
| Changed: | ||||||||
| < < |
| |||||||
| > > |
| |||||||
Cons
| ||||||||
| Changed: | ||||||||
| < < |
| |||||||
| > > |
| |||||||
Debian | ||||||||
| <<O>> Difference Topic PackageManagement (r1.3 - 03 Mar 2006 - PatrickHartling) |
| ||||||||
| Line: 14 to 14 | ||||||||
|---|---|---|---|---|---|---|---|---|
Runtime Installation | ||||||||
| Changed: | ||||||||
| < < |
What goes into the runtime installation? The usual approach with Red Hat-based Linux distributions is to install the following for a library package: | |||||||
| > > |
What goes into the runtime installation? The files are those needed to execute pre-compiled VR Juggler applications. The usual approach with Red Hat-based Linux distributions is to install the following for a library package: | |||||||
| ||||||||
| Line: 25 to 25 | ||||||||
Development Installation | ||||||||
| Added: | ||||||||
| > > |
The development installation complements the runtime installation by providing the files needed to compile VR Juggler applications. Looking at the VR Juggler installation tree, the developer installation would contain the files not included in the runtime installation. They would be the following:
| |||||||
Documentation Installation | ||||||||
| Changed: | ||||||||
| < < |
The rendered VR Juggler documentation currently gets bundled up into a form that mirrors the structure of the VR Juggler website. This is done primarily to keep the installation process simple for the cases of installing documentation to the VR Juggler website and to the redistributable archive. For a VR Juggler documentation package, this would probably need to be rethought. The Linux File System Hierarchy Standard would be a good place to start. | |||||||
| > > |
The rendered VR Juggler documentation currently gets bundled up into a form that mirrors the structure of the VR Juggler website. This is done primarily to keep the installation process simple for the cases of installing documentation to the VR Juggler website and to the redistributable archive. For a VR Juggler documentation package, this would probably need to be rethought. The Linux File System Hierarchy Standard would be a good place to start. A likely structure would be the following:
/usr/share/doc --+-- gadgeteer
|
+-- jccl
|
+-- sonix
|
+-- tweek
|
+-- vapor
|
+-- vrjuggler
| |||||||
Parallel Installations | ||||||||
| Line: 35 to 56 | ||||||||
| Another case of using parallel installations would be for having VR Juggler 2.x and VR Juggler 2.y installed. That may mean having a stable release and an unstable release installed at the same time. The motivation for this is basically the same as what is described above. | ||||||||
| Changed: | ||||||||
| < < |
So, we have to ask how to achieve parallel installations that do not conflict with each other. | |||||||
| > > |
So, we have to ask how to achieve parallel installations that do not conflict with each other. There are a variety of ways of doing this.
| |||||||
Platform-Specific Approaches | ||||||||
| <<O>> Difference Topic PackageManagement (r1.2 - 02 Mar 2006 - PatrickHartling) |
General Issues | ||||||||
| Added: | ||||||||
| > > |
Here, we discuss and lay out a process for packaging VR Juggler in a standard (or at least, reasonably standard) way. An important part of this is to identify the needs of various VR Juggler installations so that the packaging mechanism and recommendations meet these needs. Much of this discussion concentrates on Linux distributions, but such operating systems are not the only platforms with software packaging. As the discussion evolves, it would be desireable for it to branch out and try to cover as many approaches as possible. Doing so would most likely result in a very robust recommendation for how to package and install VR Juggler. | |||||||
Installation Types | ||||||||
| Changed: | ||||||||
| < < |
Development and runtime. | |||||||
| > > |
A common technique on Linux distributions is to separate packages into the runtime package (shared libraries, executables, data files), the development package (headers, static libraries, build bits), and the doucmentation. Following this approach for VR Juggler packaging is reasonable, and it has a benefit that will be seen later: it could facilitate side-by-side installations of multiple versions of VR Juggler. For this benefit to be realized, however, certain decisions have to be made, and those will be addressed below.
Runtime InstallationWhat goes into the runtime installation? The usual approach with Red Hat-based Linux distributions is to install the following for a library package:
Development InstallationDocumentation InstallationThe rendered VR Juggler documentation currently gets bundled up into a form that mirrors the structure of the VR Juggler website. This is done primarily to keep the installation process simple for the cases of installing documentation to the VR Juggler website and to the redistributable archive. For a VR Juggler documentation package, this would probably need to be rethought. The Linux File System Hierarchy Standard would be a good place to start. | |||||||
Parallel Installations | ||||||||
| <<O>> Difference Topic PackageManagement (r1.1 - 27 Feb 2006 - PatrickHartling) |
| Line: 1 to 1 | ||||||||
|---|---|---|---|---|---|---|---|---|
| Added: | ||||||||
| > > |
General IssuesInstallation TypesDevelopment and runtime.Parallel InstallationsIn some cases, it may be necessary to have multiple versions of VR Juggler installed in parallel. There are several reasons why this would happen, but one big reason is that binary compatibility is not guaranteed between any two releases of VR Juggler. For example, an application compiled against VR Juggler 2.0.1 would have to be recompiled to be used with VR Juggler 2.0.2. If a user has applications compiled against 2.0.x and wants to update to 2.0.y, it may not be possible to rebuild all the existing applications against the 2.0.y release. Hence, it would be necessary to keep the 2.0.x installation to be able to continue running all the installed applications. Another case of using parallel installations would be for having VR Juggler 2.x and VR Juggler 2.y installed. That may mean having a stable release and an unstable release installed at the same time. The motivation for this is basically the same as what is described above. So, we have to ask how to achieve parallel installations that do not conflict with each other.Platform-Specific ApproachesLinuxThis section is for information on using Linux-specific package management systems for deploying VR Juggler on Linux distributions.RPMAs I see it, there are two options for how Juggler RPMs could be defined:
Monolithic RPMUsing a monolithic RPM collects everything that can be built into two installable units calledvrjuggler and vrjuggler-devel. Currently, Infiscape has a spec file for creating this RPM.
Pros
Multiple RPMsPros
Debian-- PatrickHartling - 27 Feb 2006 | |||||||
| Topic PackageManagement . { View | Diffs | r1.6 | > | r1.5 | > | r1.4 | More } |
|
Revision r1.1 - 27 Feb 2006 - 01:12 - PatrickHartling Revision r1.6 - 14 Mar 2006 - 03:42 - PatrickHartling |
Copyright © 1999-2008 by the contributing authors.
All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding VRJ Wiki? Send feedback |