On 8/30/12 11:09 AM, Gary Gatling wrote:
>     -- Probably the best solution to your problem regarding installing the
>     fakers in a non-system directory (I would suggest /usr/lib[64]/VirtualGL
>     and also would suggest putting the libGL.so symlink in that same
>     directory, for simplicity) would be for me to modify the build system
>     such that vglrun is dynamically generated with the appropriate prefix.
>
>
>
> Which is what we did.  A new vglrun would be great if it doesn't break
> other distros or users, etc. We use the %{_libdir} macro which will put
> the faker libraries in either  /usr/lib64/VirtualGL/
> or /usr/lib/VirtualGL/ depanding on which platform the rpm package is
> built for. (Fedora is really big on these macros in the spec file
> because it makes things easier as the distro gets upgraded, changes are
> made, etc.) The vglrun is currently being patched for this by patch0.
> (.redhatpathsfix)

I would definitely suggest that, since you are already using a 
non-system library path (/usr/lib[64]/VirtualGL) to store the faker 
libraries, it makes more sense to also put the libGL.so symlinks there 
instead of in a separate directory.

The question becomes how best to make vglrun find the faker libraries if 
they are in a non-system path.  After pondering the issue for a while, I 
see a major hurdle, which is that the same vglrun script has to be able 
to launch both 32-bit and 64-bit applications.  The 32-bit and 64-bit 
VirtualGL RPMs should be co-installable, so we can't have a different 
version of vglrun in each.  Further, if you are on a 64-bit machine, you 
should be able to install or de-install the 32-bit VirtualGL RPM without 
affecting your ability to run 64-bit apps.  All of that makes it 
minimally difficult, if not impossible, to create a version of vglrun 
that has a hard-coded library path in it.  If it was auto-generated with 
the value of the VGL_LIBDIR CMake variable, then that would imply that 
the script would be different between 32-bit and 64-bit builds, which 
wouldn't work.

I think that, in your case, you could patch the vglrun script so that it 
sets LD_PRELOAD to something like 
/usr/lib64/VirtualGL/libdlfaker.so:/usr/lib64/VirtualGL/librrfaker.so:/usr/lib/VirtualGL/libdlfaker.so:/usr/lib/VirtualGL/librrfaker.so.
 
  However, it would be nice to have a more generic solution.  I note 
that some applications will install libraries under 
/usr/lib/{application}, even though the libraries are 64-bit.  If we 
assumed that VGL_LIBDIR would be the same between the 32-bit and 64-bit 
packages, then we could get away with simply naming the faker libraries 
differently (librrfaker32.so and librrfaker64.so, for instance) and 
having vglrun pre-load 
@VGL_LIBDIR@/lib*faker64.so:@VGL_LIBDIR@/lib*faker32.so.  Still seems 
inelegant, though.

Looking at another package (valgrind) that preloads libraries, it stores 
the 32-bit and 64-bit interposers separately in /usr/lib/valgrind/ and 
/usr/lib64/valgrind/, similarly to what you're doing, but I have no idea 
how it determines which to load, since valgrind is a binary executable 
and not a script.  The same valgrind binary can be used to launch both 
32-bit and 64-bit applications.  On the surface, at least, this is the 
same functionality we want with VirtualGL.


>     -- I would like to somehow maintain the ability to install our official
>     version of VirtualGL on these platforms without causing problems.  I
>     think we should open a dialog regarding that, such as what happens when
>     a user has our version installed and they do a 'yum update'.  Maybe the
>     official binaries need to change names, maybe we need to consider
>     installing all of our stuff under /opt/VirtualGL and using alternatives
>     to maintain the /usr/bin symlinks, or maybe we just adopt the same
>     packaging standards as Fedora and assume that one package replaces the
>     other.  Suggestions welcome.
>
>
> I'm sorry I don't have a good answer here. I had thought about perhaps
> the official rpms having a high epoc number, but I guess that won't work.
>
> My sponsor said: "There really aren't any great ways of dealing with
> this.  Probably the best way would be for the virtualgl project to
> provide its own yum repo then people can use yum-priorities to prefer
> that repo over the fedora repos.
>
> My hope would be that virtualgl would come to see the Fedora version as
> equal to their own and point people to installing the Fedora version."

Not likely to happen.  For starters, all of my paying customers are 
using RHEL, not Fedora, and the second most popular platform among VGL 
users is Ubuntu.  If I start relying upon external projects to provide 
binaries for me, I run into all sorts of problems with differing user 
experiences.  VirtualGL has always been developed more as a product than 
a project.  I freely admit that it doesn't exactly follow the model of 
most other open source projects, but you can find similarities in other 
projects, such as VirtualBox and OpenOffice, that have a heritage as 
commercial products (and also a heritage as Sun products, in both cases.)

The goal of our "official" binaries has always been to provide an equal 
user experience across all platforms.  Further, the purpose of the 
in-tree packaging system is to make it easy for people (including me) to 
generate binaries from a particular source revision, which makes it easy 
to put proposed patches in front of users for testing.  It takes time 
for changes to propagate down through the various distribution 
repositories, and that's just going to slow down the process of fixing 
bugs.  Further, I have no idea whether, at some point in the future, 
Fedora may decide to freeze on a particular revision of VirtualGL (as 
they have done with TigerVNC, for instance) or whether the maintainer of 
the RPM may lose interest in the project, etc.  The official binaries we 
provide are an enterprise-class product, and I have to be able to stand 
behind that product, because my sole source of income relies upon it.

Apart from providing an equal user experience, the other reason why we 
tend to store things in /opt/VirtualGL is so vglconnect (the launcher 
for the VirtualGL Client) knows where to find the binaries and scripts 
on the server.  This is important when using SSH tunneling, because it 
has to know where to find vgllogin.  If different platforms put vgllogin 
in different places and don't provide a symlink under 
/opt/VirtualGL/bin, then that means that the user always has to tell 
vglconnect where to find vgllogin on whatever server it's connecting to. 
  If Fedora chooses not to provide that symlink, then so be it-- there 
is a tacit understanding that they are choosing to support their version 
of VirtualGL, and thus they are responsible for making it work with 
whatever changes they make to it.  For me, however, I can only stand 
behind the packages I create.  It would be nice to remove as many of the 
/opt/VirtualGL hard-coded references as possible, but I don't know if 
it's possible to get rid of all of them.


> I have set up a yum repo before and its not too hard. Basically you have
> a web directory (can also use ftp) and you drop rpms in there and run
> the createrepo command with the path to the repo as an argument. One
> thing that complicates it is that the rpms need to be signed. (rpm
> --addsign /path/to/rpmfile)  I could perhaps help with that offlist if
> you need it?
> Then when you put a new version of VirtualGL in your repo all the people
> with the official version could get updates when yum update runs.

Maybe, but then I also need to maintain an apt-get repository for the 
Ubuntu users, which opens up a whole new can of worms.  There are only 
200 hours in the VirtualGL general fund each year to take care of 
general project maintenance, community support, integrating patches from 
the community, fixing bugs reported by the community, etc.  I generally 
run over that budget by about 100 hours each year, meaning that that 
additional time is all pro bono.  I'm OK with spending 30 or 40 hours on 
something like a build system overhaul that ultimately allows me to 
spend less time maintaining the project, but creating my own repos 
ultimately is going to create more work for me, not less.

When I look to other open source projects as a model, OpenOffice is 
notable.  They have a similar distribution model to ours-- providing a 
set of "cross-distribution" RPMs and DEBs.  However, their "official" 
RPMs and DEBs use a different name than the distribution-supplied 
OpenOffice packages, and the "official" packages install everything 
under /opt.

That seems like the best approach for us as well.  If we can sort how 
best to distribute the faker libraries under some subdirectory of 
/opt/VirtualGL, then I am perfectly fine with putting everything under 
/opt/VirtualGL and using alternatives to create symlinks in /usr/bin. 
Ideally, your RPM would likewise register anything it installs in 
/usr/bin via alternatives, allowing us to install both RPMs on the same 
system.

In terms of naming, I would suggest naming your RPM something besides 
VirtualGL.  If you are splitting it into multiple RPMs, then this is 
easy.  Just ship RPMs named "VirtualGL-common", "VirtualGL-client", 
"VirtualGL-utils", "VirtualGL-server", "VirtualGL-devel", etc., and none 
of them will actually be named "VirtualGL".  Or maybe use 
"VirtualGL-fedora" or some alternative (even lowercase "virtualgl", 
perhaps.)


>     -- common/glx.h and common/glxext.h are not bundled libraries.  They're
>     simply headers, included because not all of the platforms VirtualGL
>     builds on have a recent enough set of OpenGL headers, and it's just
>     easier to build against our own.  I don't see why they would cause
>     problems.
>
>
> Yeah, We need to build against our system headers according to my
> project sponsor. But we are not *at all* trying to tell you that you
> need to stop doing that or anything or that it is wrong.  Its juts a
> rule we have in the fedora project. If other distros need it please
> don't mess them over because of us. :)

It's best to think of glx.h and glxext.h as internal headers to 
VirtualGL.  There is no easy way for me to modify the project to load 
those headers from an external directory, nor would I want to, so if you 
insist on doing so (why?), you're going to need to patch the source. 
The reason why we provide our own versions of those headers is simply so 
we can guarantee that there are valid prototypes for all of the 
functions we interpose.  Again, best to think of these as internal 
headers.  They are only used by the faker library.

This is another example of a knee-jerk reaction that the distribution 
vendor is having to an automated test, without stopping to think about 
what the test is really testing.  What they're trying to prevent is an 
application linking against its own in-tree static version of libGL. 
Fair enough, but that's not what we're doing.  VirtualGL provides an 
implementation of the GLX API, just like Mesa provides an implementation 
of the GLX API.  The difference is that our implementation is loaded 
into the application at run time rather than being linked in at compile 
time.  Mesa builds against its own internal GLX headers, and so do we. 
The difference is that Mesa then installs their GLX headers, and we don't.

I would also add that we don't even really support Mesa as a back end, 
and there are known interaction issues with, for instance, the Gallium 
driver and VirtualGL.  Thus, it may be the case that someone wouldn't 
even be able to use VirtualGL with a "default" Fedora installation, and 
there certainly isn't much point to it unless you have 3D hardware 
acceleration (perhaps it works OK with nouveau, in which case you could 
make that a dependency-- except that it would prevent you from later 
uninstalling nouveau and installing the proprietary nVidia driver.)


>     -- I am willing to add a VGL_SYSTEMFLTK option to the build so that it
>     looks for FLTK elsewhere, rather than building the in-tree version.
>
>
> Fedora project is suggesting  "VGL_USE_SYSTEM_FLTK", more in line with
> similar variables from vtk/paraview cmake projects.

It is our standard to use variable names that are as short and 
easy-to-remember as possible, and VGL_USE* is reserved for enabling 
run-time features, not for build options.


> Please understand I am EXTREMELY new at this. In fact this is my first
> package ever in the fedora project. So I did not mean to cause problems.
> I wanted to see VirtualGL have a wider audience since it will
> be installable from the many many packages in the fedora distro without
> having to fuss with anything first. Plus my own package needs this as a
> rpm dependency so I'm going to have to get this one in if I am to have
> any hope for getting bumblebee into fedora.

I'm willing to help out in any way I can, within reason, but I will also 
re-iterate that VirtualGL was never really designed to be integrated 
into an O/S distribution, so this is all new to me as well.

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
VirtualGL-Devel mailing list
VirtualGL-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtualgl-devel

Reply via email to