Marha idegesítő, hogy a Radeon 7500-zal nem működik a 3D, a Compiz és semmilyen effekt, valamint az Ubuntu (már nem is annyia) új értesítési rendszere sem. Nekigyűrkőztem hát, hogy megnézzem, tudok-e tenni ez ellen valamit.
Kérlek, olvasd végig a postot, és ne kezdj bele semmilyen módosításba a leírtak alapján. Ki fog derülni, miért...
Első körben az Ubuntu.hu-n lévő leírást böngésztem végig. Azt írta valaki, hogy ez a leírás ugyan Jaunty-hoz van, de elméletben működik majd Karmic alatt is. Akkor itt és most hivatalosan cáfolom ezt a dolgot; sőt, kifejezetten veszélyes követni azt a leírást!
Ugyanis annak lényege, hogy távolítsuk el a teljes Xorg-ot és pár szintén szükséges dolgot; majd álljunk vissza az Intrepid tárolóira, szedjük le onnan a régebbi Xorg-ot, amivel már tökéletesen működik az Ati oldaláról letölthető Catalyst driver. Majd pedig akadályozzuk meg, hogy az Ubuntu visszafrissítse az Xorg-ot a legújabbra.
A megközelítést alapvetően nem tartom túl jónak, de tény, hogy Jaunty-val működött ez a csúnya hack. Azonban a Koala-ban változtak kicsit a csomagok függőségei, az eltávolítandó fast-user-switch applet (ami mellesleg a Karmicban már valami teljesen más nevű, asszem indicator-applet a neve éppen) húzza a gdm-et, ami az x11-commont, utóbbi pedig lényegében az egész rendszert. Tehát NE is próbálkozzunk ezzel.
Gondoltam, nekilátok más módon. Az Xorg-ra nem számíthattam, azzal a meghajtóval csak a 2D-s támogatás működik, a 3D bekapcsolása esetén azonnal teleszemeteli a képernyőt, és használhatatlan lesz az egész. A bináris (Catalyst) meghajtó viszont úgy működik, hogy a zárt forráskódú függvénykönyvtárakat egy nyílt forráskódú kernelmodul kapcsolja össze a kernellel, és ha van rá lehetőség, akkor ezt a "kapcsot", más néven wrappert le lehet fordítani a futó kernelhez is. Elméletben.
Letöltöttem a 9.2-es verziót innen. Természetesen a telepítőt nincs értelme simán futtatni, hiszen rövid úton kiírja, hogy nem támogatott az új platform. A .run fájlba belenézve viszont rögtön látszik, hogy ez egy makeself-fel készített telepítő, azaz a --keep kapcsoló segítségével nem törli az ideiglenesen létrehozott könyvtárat. Röviden beletekintve a kicsomagolt könyvtárba kiderült, hogy a telepítő futtatható a --buildpkg <linux terjesztés> paraméterrel is. Az is látszik, hogy Ubuntu 9.04-re még készítettek kontroll fájlokat, tehát tudunk magunknak .deb csomagokat készíteni!
A csomag generálás előtt nyomtam egy sudo apt-get clean és sudo apt-get update parancsot. Ennek értelme az, hogy a telepítő a scomagok készítéséhez le fog szedni egy rakás csomagot, amiknek a nevét nem tudjuk előre felírni, cserébe a telepítő nem törli ezeket. Viszont ha így eljárunk, akkor a /var/cache/apt/archive könyvtárban ott lesznek, hogy mit töltött le, és az alapján eltávolítgathatjuk majd ezeket, ha már nem kellenek.
/bin/sh ./ati-installer.sh 8.582 --buildpkg Ubuntu/9.04
Rövid idő elteltével - amit csupa hasznos dologgal töltöttem :) - ilyesmi lett a végeredmény:
Generating package: Ubuntu/9.04
Valamint az aktuális könyvtárban keletkezett egy nagy csomó .deb (a nevük felsorolva fentebb). Mielőtt nekik estem, feltettem fel a dkms csomagot, mert az fglrx-kernel-source csomag felrakásához szükség van rá.
Resolving build dependencies...
Continuing package build
Package /home/bagoj/Letöltések/xorg-driver-fglrx_8.582-0ubuntu1_i386.deb has been successfully generated
Package /home/bagoj/Letöltések/xorg-driver-fglrx-dev_8.582-0ubuntu1_i386.deb has been successfully generated
Package /home/bagoj/Letöltések/fglrx-kernel-source_8.582-0ubuntu1_i386.deb has been successfully generated
Package /home/bagoj/Letöltések/fglrx-amdcccle_8.582-0ubuntu1_i386.deb has been successfully generated
Package /home/bagoj/Letöltések/fglrx-modaliases_8.582-0ubuntu1_i386.deb has been successfully generated
Package /home/bagoj/Letöltések/libamdxvba1_8.582-0ubuntu1_i386.deb has been successfully generated
Removing temporary directory: fglrx-install.XWHYFv
apt-get install dkms
A valamelyik másiknak, talán a xorg-driver-fglrx-nek pedig szüksége van a libstdc++5 csomagra, amit - hála Istennek - a Karmic csomagtárolójából valami oknál fogva eltávolítottak. Na nem baj, letöltöttem a Jauntyhoz való csomagot, ami működik is:
wget "http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_i386.deb"
dpkg -i libstdc++5_3.3.6-17ubuntu1_i386.deb
Ezek után fel akartam tenni a legenerált .deb csomagokat:
dpkg -i fglrx-amdcccle_8.582-0ubuntu1_i386.deb fglrx-modaliases_8.582-0ubuntu1_i386.deb libamdxvba1_8.582-0ubuntu1_i386.deb xorg-driver-fglrx_8.582-0ubuntu1_i386.deb fglrx-kernel-source_8.582-0ubuntu1_i386.deb
Amint látható, az fglrx.ko modult nem sikerült lefordítani. Lássuk a fenti hibaüzenetben lévő fájlt! Egy elég hülye hibaüzenet van benne:
* Running DKMS auto installation service for kernel 2.6.31-17-generic
Beállítás: fglrx-kernel-source (2:8.582-0ubuntu1) ...
Adding Module to DKMS build system
Doing initial module build
Error! Bad return status for module build on kernel: 2.6.31-17-generic (i686)
Consult the make.log in the build directory
/var/lib/dkms/fglrx/8.582/build/ for more information.
Installing initial module
Error! Could not locate fglrx.ko for module fglrx in the DKMS tree.
You must run a dkms build for kernel 2.6.31-17-generic (i686) first.
Done.
sh: pushd: not found
Namost mi van? A popd és pushd a bash része, nem egy különálló futtatható parancs, ennek nincs csomagja sem... nagy nehezen rájöttem, hogy az Ubuntuban a /bin/sh nem a /bin/bash-ra, hanem a /bin/dash-ra mutat, és a dash-ban tényleg nincs popd és pushd... első mérgemben letöröltem a /bin/sh-t és átlinkeltem a /bin/bash-ra. Ekkor már jobb volt a helyzet, de ismét hibát kaptam:
sh: popd: not found
You must be logged in as root to run this script.
Mi a fene? Hiszen root-ként futtattam... belekukkantottam az fglrx-kernel-source .deb csomagba a Midnight Commanderrel, és a control részben a post-install szkriptben megnéztem, mit futtat... Hm, futtassuk kézzel, hátha valami kiderül:
root@tarantula:~/Letöltések# /bin/bash /usr/sbin/dkms build -m fglrx -v 8.582
su nobody -c "pushd /var/lib/dkms/fglrx/8.582/build; sh make.sh --nohints --uname_r=2.6.31-17-generic; popd"....
Aha! A "su nobody" miatt nem működik. Látszik, hogy ezt a Catalyst install szkriptet nem igazán az Ubuntu gondolkodásmódjára szabták... futtassuk akkor a megadott könyvtárban a make.sh-t!
bagoj@tarantula:/var/lib/dkms/fglrx/8.582/build$ sudo ./make.sh
[sudo] password for bagoj:
AMD kernel module generator version 2.1
doing Makefile based build for kernel 2.6.x and higher
rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers
make -C /lib/modules/2.6.31-17-generic/build SUBDIRS=/var/lib/dkms/fglrx/8.582/build/2.6.x modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.31-17-generic'
CC [M] /var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.o
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:41:2: error: #error unknown or undefined architecture configured
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c: In function ‘KCL_GetEffectiveUid’:
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:1405: error: ‘struct task_struct’ has no member named ‘euid’
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c: In function ‘KCL_PosixSecurityCapSetIPCLock’:
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:1779: error: ‘struct task_struct’ has no member named ‘cap_effective’
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:1783: error: ‘struct task_struct’ has no member named ‘cap_effective’
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c: In function ‘KCL_PUB_InterruptHandlerWrap’:
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:2634: warning: ‘return’ with no value, in function returning non-void
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c: In function ‘KCL_MEM_VM_GetRegionPhysAddrStr’:
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:3223: warning: return makes pointer from integer without a cast
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:3224: warning: return makes pointer from integer without a cast
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:3225: warning: return makes pointer from integer without a cast
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:3227: warning: return makes pointer from integer without a cast
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c: In function ‘KAS_Ih_Execute’:
/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.c:4202: warning: ‘return’ with no value, in function returning non-void
make[2]: *** [/var/lib/dkms/fglrx/8.582/build/2.6.x/firegl_public.o] Error 1
make[1]: *** [_module_/var/lib/dkms/fglrx/8.582/build/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-17-generic'
make: *** [kmod_build] Error 2
build failed with return value 2
Nos, ahogyan látható, a modul nem fordul le, részben mert valami miatt a generic architektúra nem tetszik neki, részben pedig megváltozott egy-két struktúra a kernelben. Azt hiszem, a Catalyst kipróbálásának így a - szomorú - végéhez értünk. :-(
Akinek van ötlete a folytatáshoz, ne kíméljen.