[Pkg-fglrx-devel] Bug#537958: Workaround

Don Pellegrino don at drexel.edu
Wed Jul 22 02:31:27 UTC 2009


I found a number of issues while attempting to get fglrx packages for
Catalyst 9.6 going on Debian/unstable amd64.  As a work-around I made
some modifications to the installer distributed by AMD
(http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx?type=2.4.1&product=2.4.1.3.36&lang=English).

Installation of the AMD packages requires pinning their versions
in /etc/apt/preferences or module-assistant will try to upgrade them to
the ones from Debian during installation.

        Package: fglrx-amdcccle
        Pin: version 8.62-1
        Pin-Priority: 1001
        
        Package: fglrx-driver
        Pin: version 8.62-1
        Pin-Priority: 1001
        
        Package: fglrx-driver-dev
        Pin: version 8.62-1
        Pin-Priority: 1001
        
        Package: fglrx-kernel-src
        Pin: version 8.62-1
        Pin-Priority: 1001

I also have libdrm2 pinned as per Bug 521323 but that bug has since been
closed.  I have not tried to release this pin yet so I am including it
just for completeness:

        # Debian Bug 521323.  Note that this bug has been marked closed
        # as libdrm2 should work with ATI Catalyst 9.4.
        Package: libdrm2
        Pin: release a=testing
        Pin-Priority: 1001

ATI's drivers are incompatible with 2.6.29 and above as far as I know so
I pin the kernel back to 2.6.26.  This is documented over in ATI
Bugzilla (http://ati.cchtml.com/show_bug.cgi?id=1440).

        # ATI Bug 1440.
        Package: linux-image-2.6-amd64
        Pin: version 2.6.26
        Pin-Priority: 1001

The drivers also don't handle the latest X.Org X Server so I pin the
core back to 1.4.  This is documented over in ATI Bugzilla
(http://ati.cchtml.com/show_bug.cgi?id=1423).

        # ATI Bug 1423.
        Package: xserver-xorg-core
        Pin: version 2:1.4.2
        Pin-Priority: 1001

As you found there is a dependency on ia32-libs.  This is tricky since
this package is modified between stable and unstable to reflect a shift
in how 32-bit libraries are handled in a 64-bit installation.  Therefore
installing ia32-libs from unstable won't work.  Additionally the control
center GUI wants the ia32-libs-gtk so I just pin that and I believe it
has a dependency to include the older ia32-libs as well.  Sadly this
holds back gcc which is very annoying.

        # I need this package for the Catalyst Control Center
        Package: ia32-libs-gtk
        Pin: version 2.7
        Pin-Priority: 1001

So with the four fglrx pins in place the ATI Catalyst 9.6 can be
installed.  With the libdrm2, linux-image-2.6-amd64, xserver-xorg-core
and ia32-libs-gtk pins packages will downgrade to meet the dependencies
of the driver.  I have not tested all the intermediate releases between
these pins and unstable so you may be able to move some of them further
upstream.  These work for me though.

With the pinning and downgrades complete there are a few patches to be
done to the installer itself.  I bumped into the libfglrx_gamma.so.1
issue documented at
http://wiki.cchtml.com/index.php/Ubuntu_Hardy_Installation_Guide#Fix_for_an_error:  Adding the symlink as described got that fixed up.  I also applied the patch as per ATI Bug 1518 from Jayen Ashar.  I actually applied the patch to all of the dists under Debian, not just etch:

# diff -r driver driver-patched/
Only in driver-patched/arch/x86_64/usr/X11R6/lib64: libfglrx_gamma.so.1
diff -r driver/packages/Debian/dists/etch/fglrx-driver.postrm
driver-patched/packages/Debian/dists/etch/fglrx-driver.postrm
47a48,60
> # usage: undivert_libglx DIR
> undivert_libglx ()
> {
> 	dpkg-divert --remove --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> 
>     if [ -d "$1/fglrx/diversions" ]; then
>         rmdir "$1/fglrx/diversions" || true
>         rmdir "$1/fglrx"            || true
>     fi
> }
> 
106a120
> 	undivert_libglx /usr/lib
diff -r driver/packages/Debian/dists/etch/fglrx-driver.preinst
driver-patched/packages/Debian/dists/etch/fglrx-driver.preinst
57a58,69
> # usage: divert_libglx DIR
> divert_libglx ()
> {
>     if [ ! -d "$1/fglrx/diversions" ]; then
>         mkdir -p "$1/fglrx/diversions"
>     fi
> 
> 	dpkg-divert --add --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> }
> 
86a99
> 	divert_libglx /usr/lib
diff -r driver/packages/Debian/dists/experimental/fglrx-driver.postrm
driver-patched/packages/Debian/dists/experimental/fglrx-driver.postrm
47a48,60
> # usage: undivert_libglx DIR
> undivert_libglx ()
> {
> 	dpkg-divert --remove --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> 
>     if [ -d "$1/fglrx/diversions" ]; then
>         rmdir "$1/fglrx/diversions" || true
>         rmdir "$1/fglrx"            || true
>     fi
> }
> 
106a120
> 	undivert_libglx /usr/lib
diff -r driver/packages/Debian/dists/experimental/fglrx-driver.preinst
driver-patched/packages/Debian/dists/experimental/fglrx-driver.preinst
57a58,69
> # usage: divert_libglx DIR
> divert_libglx ()
> {
>     if [ ! -d "$1/fglrx/diversions" ]; then
>         mkdir -p "$1/fglrx/diversions"
>     fi
> 
> 	dpkg-divert --add --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> }
> 
86a99
> 	divert_libglx /usr/lib
diff -r driver/packages/Debian/dists/lenny/fglrx-driver.postrm
driver-patched/packages/Debian/dists/lenny/fglrx-driver.postrm
47a48,60
> # usage: undivert_libglx DIR
> undivert_libglx ()
> {
> 	dpkg-divert --remove --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> 
>     if [ -d "$1/fglrx/diversions" ]; then
>         rmdir "$1/fglrx/diversions" || true
>         rmdir "$1/fglrx"            || true
>     fi
> }
> 
106a120
> 	undivert_libglx /usr/lib
diff -r driver/packages/Debian/dists/lenny/fglrx-driver.preinst
driver-patched/packages/Debian/dists/lenny/fglrx-driver.preinst
57a58,69
> # usage: divert_libglx DIR
> divert_libglx ()
> {
>     if [ ! -d "$1/fglrx/diversions" ]; then
>         mkdir -p "$1/fglrx/diversions"
>     fi
> 
> 	dpkg-divert --add --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> }
> 
86a99
> 	divert_libglx /usr/lib
diff -r driver/packages/Debian/dists/sid/fglrx-driver.postrm
driver-patched/packages/Debian/dists/sid/fglrx-driver.postrm
47a48,60
> # usage: undivert_libglx DIR
> undivert_libglx ()
> {
> 	dpkg-divert --remove --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> 
>     if [ -d "$1/fglrx/diversions" ]; then
>         rmdir "$1/fglrx/diversions" || true
>         rmdir "$1/fglrx"            || true
>     fi
> }
> 
106a120
> 	undivert_libglx /usr/lib
diff -r driver/packages/Debian/dists/sid/fglrx-driver.preinst
driver-patched/packages/Debian/dists/sid/fglrx-driver.preinst
57a58,69
> # usage: divert_libglx DIR
> divert_libglx ()
> {
>     if [ ! -d "$1/fglrx/diversions" ]; then
>         mkdir -p "$1/fglrx/diversions"
>     fi
> 
> 	dpkg-divert --add --package fglrx-driver \
>         --divert "$1/fglrx/diversions/libglx.so" \
>         --rename "$1/xorg/modules/extensions/libglx.so"
> }
> 
86a99
> 	divert_libglx /usr/lib

So while the Debian fglrx packages are preferable maybe something can be
learned from this work-around.  Perhaps adding these dependencies to the
Debian fglrx packages would help as would the patches to the code.
Maybe the patches should be rolled into the git repository at
http://www.phorogit.com/ but I don't know who to contact to get that
done.

Let me know if you have any problems with these step as I did them all
at once and may have left something out of the description.  I hope it
helps.






More information about the Pkg-fglrx-devel mailing list