Fedora+Nvidia=CUDA
Итак. Мы хотим получить рабочую инсталляцию на Fedora (в моем случае - RFRemix и с этим связано несколько багов).
Для этого нам надо:
- видеокарту nvidia :)
- установленный репозитарий cuda (отсюда)
- заметку о том, как восстановить plymouth после установки драйвером nvidia
1 - Ставим
# yum install cuda
Этот метапакет поставит все, что должно идти в комплекте (включая свежие дрова)
2 - Удаляем kmod-nvidia
Если у вас уже были проинсталены дрова невидии, то нужно удалить имеющийся kmod. Так как он может содержать несовместимую с текущими библиотеками версию модуля
# yum remove kmod-nvidia
3 - Пересобираем akmod
# akmod -kernel $(uname -r)
Тут может потребоваться доставить kernel-headers
4 - Пересобираем initrd
Для этого воспользуемся dracut
# dracut --force
5 - Ребут :)
6 - Можно собрать семплы
Замечу, что делать это надо под рутом или проставив соотвествующие права на папки. Так как мейкфайлы сильно завязаны на относительные пути.
# cd /usr/local/cuda-6.5/samples/5_Simulations/fluidsGL
# make
7 - А вот тут нас поджидает облом (RFRemix)
>>> WARNING - libGL.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libGLU.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libX11.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libXi.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libXmu.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
Ага!
Смотрим в findgllib.mk
ifeq ("$(OSLOWER)","linux")
# first search lsb_release
DISTRO = $(shell lsb_release -i -s 2>/dev/null | tr "[:upper:]" "[:lower:]")
DISTVER = $(shell lsb_release -r -s 2>/dev/null)
ifeq ("$(DISTRO)","")
# second search and parse /etc/issue
DISTRO = $(shell more /etc/issue | awk '{print $$1}' | sed '1!d' | sed -e "/^$$/d" 2>/dev/null | tr "[:upper:]" "[:lower:]")
DISTVER= $(shell more /etc/issue | awk '{print $$2}' | sed '1!d' 2>/dev/null
endif
ifeq ("$(DISTRO)","")
# third, we can search in /etc/os-release or /etc/{distro}-release
DISTRO = $(shell awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB")
DISTVER= $(shell awk '/DISTRIB_RELEASE/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | grep -v "DISTRIB_RELEASE")
endif
endif
ifeq ("$(OSUPPER)","LINUX")
# $(info) >> findgllib.mk -> LINUX path <<<)
# Each set of Linux Distros have different paths for where to find their OpenGL libraries reside
UBUNTU_PKG_NAME = "nvidia-340"
UBUNTU = $(shell echo $(DISTRO) | grep -i ubuntu >/dev/null 2>&1; echo $$?)
FEDORA = $(shell echo $(DISTRO) | grep -i rfremix >/dev/null 2>&1; echo $$?)
RHEL = $(shell echo $(DISTRO) | grep -i red >/dev/null 2>&1; echo $$?)
CENTOS = $(shell echo $(DISTRO) | grep -i centos >/dev/null 2>&1; echo $$?)
SUSE = $(shell echo $(DISTRO) | grep -i suse >/dev/null 2>&1; echo $$?)
Еще раз ага!
Смотрим как определяется тип дистрибутива.
Это команда
awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB"
А у меня она выдает rfremix. А значит такого таргета ни разу нет в списке. :)
Ну что делать-то? меняем fedora на rfremix в findgllib.mk и радуемся.
Собралось! Но…
8 - А что у нас с библиотеками?
$ ./fluidsGL
./fluidsGL: error while loading shared libraries: libcufft.so.6.5: cannot open shared object file: No such file or directory
Еще раз. У нас для ldconfig не заданы пути, где лежит libcufft.so.6.5
$ find /usr/ -name libcufft.so.6.5
/usr/local/cuda-6.5/targets/x86_64-linux/lib/libcufft.so.6.5
$ grep -R /usr/local/cuda-6.5/targets/x86_64-linux/lib /etc/ld.so.conf.d/
Пусто.
# echo "/usr/local/cuda-6.5/targets/x86_64-linux/lib" > /etc/ld.so.conf.d/cuda-lib64.conf
# ldconfig
9 - Наслаждаемся
Категории: HowTo