Статьи

О компиляции ccminer в последних версиях ubuntu

ccminer, программа с открытым исходным кодом для майнинга на видеокартах Nvidia, уже давно широко известна в узких кругах среди майнеров.

Программа поддерживает большое количество PoW-алгоритмов и, при наличии определенных знаний и опыта, может быть модифицирована и под современные монеты.

Предшественник ccminer — программа cudaminer версии 0.1 появилась на Github благодаря трудам программистов Christian Buchner’s & Christian H. еще 18 марта 2014 года, после чего многократно модифицировалась/клонировалась.

Старые исходные коды программы ccminer были написаны для компиляции средствами, распространенными на момент их написания.

Из-за этого сейчас у майнеров средней руки порой возникают проблемы со сборкой исполняемого кода ccminer в современных операционных системах.

При сборке программы (запускается скриптом build.sh из каталога с исходниками ccminer) возникают различные ошибки, обычно связанные с несовместимостью с современными компиляторами/установленной версией CUDA Toolkit.

Чтобы собрать старый ccminer в (x)ubuntu 22.04 предварительно нужно установить подходящий пакет CUDA и старую версию gcc (обычно требуется компилятор версий 5.0-8.0). Иногда, для использования старых видеокарт на архитектурах Fermi/Kepler требуется установить не только древнюю версию CUDA Toolkit (8.0.61 — для архитектуры Fermi или 10.2.89 для Kepler), но и старые драйвера.

Как установить старую версию CUDA Toolkit в Linux?

Для установки старых версий CUDA нужно использовать локальную версию инсталлятора (runfile local), наиболее подходящего для своей системы, например, для xubuntu 22.04 — выбирать платформу ubuntu версии 18.04:

Дальнейшая установка производится согласно инструкциям, размещенным на сайте Nvidia для developer-ов:

Обычно установка Toolkit производится с помощью запуска основного скрипта установки и обновлений/исправлений.

Например, для инсталляции пакета CUDA версии10.2.89 выполняются команды:

wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run

sudo sh ./cuda_10.2.89_440.33.01_linux.run'

wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/patches/1/cuda_10.2.1_linux.run

sudo sh ./cuda_10.2.1_linux.run

wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/patches/2/cuda_10.2.2_linux.run

sudo sh ./cuda_10.2.2_linux.run

При попытке установить старую версию CUDA с помощью deb-файла, либо по сети (deb-network) волшебным образом инсталлируется последний CUDA Toolkit, который некорректно работает со старыми программами.

Как установить старую версию драйверов Nvidia в (x)ubuntu?

Чтобы установить старые, оффициально неподдерживаемые драйвера в ubuntu, нужно использовать run-файл (скачивается с раздела драйверов для Linux сайта Nvidia), загрузившись без графического окружения/X-org.

Скорее всего, для установки драйвера потребуется полная очистка системы от остатков ранее установленных драйверов Nvidia:

sudo apt-get remove --purge '^nvidia-.*'

или даже

sudo apt-get remove --purge *nvidia*
sudo reboot
sudo apt-get autoremove

Затем, если не сделали этого ранее, отключаем графическое окружение:

sudo service lightdm stop
sudo killall Xorg

и запускаем инсталлятор.

Чтобы избежать проблем с загрузкой драйвера nouveau, его желательно отключить:

sudo nano /etc/modprobe.d/nvidia-installer-disable-nouveau.conf

Как установить несколько версий компилятора gcc в (x)ubuntu?

По умолчанию в ubuntu 22.04 стоит gcc одинадцатого поколения:

gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

При попытке установить gcc старее девятой версии, например, gcc-5, появляется сообщение:

Package g++-5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
gcc-10-test-results gcc-9-test-results:i386 gcc-12-test-results:i386 gcc-11-test-results:i386 gcc-10-test-results:i386
gcc-9-test-results gcc-12-test-results gcc-11-test-results
E: Unable to locate package gcc-5
E: Package 'g++-5' has no installation candidate

Чтобы использовать несколько версий gcc в одной системе, нужно инсталлировать метапакет build-essential:

sudo apt install build-essential

Затем нужно добавить в список источников обновлений gcc предыдущие версии операционной системы.

Например, для установки gcc-7/8 добавляем адрес источников обновлений для ubuntu 20.04:

deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe

После выполнения

sudo apt update && sudo apt upgrade -y

можно установить gcc-7 и/или gcc-8:

sudo apt install gcc-8 g++-8

Для установки еще более старого компилятора (например, пятой версии), в список источников нужно добавить соответствующий архив, для gcc-5 это релиз ubuntu 18.04 (bionic):

deb [arch=amd64] http://archive.ubuntu.com/ubuntu bionic main universe

Кроме того, для репозитория bionic нужно установить ключ:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32

После обновления системы появляется возможность установки gcc-5:

sudo apt install gcc-5 g++-5

Затем нужно обеспечить возможность выбора нужного компилятора при работе:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 70 --slave /usr/bin/g++ g++ /usr/bin/g++-5 --slave /usr/bin/gcov gcov /usr/bin/gcov-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 90 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11

Теперь, при выполнении команды

sudo update-alternatives --config gcc

появится меню, в котором можно будет выбрать альтернативный компилятор:

There are 3 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-11 90 auto mode
1 /usr/bin/gcc-11 90 manual mode
2 /usr/bin/gcc-5 70 manual mode
3 /usr/bin/gcc-8 80 manual mode
Press <enter> to keep the current choice[*], or type selection number:

После работы со старым компилятором желательно не забывать переключаться на gcc, используемый по умолчанию, в противном случае возможно появление проблем с работой системы.

После выполнения указанной доработки системы напильником можно без ошибок скомпилировать старый ccminer или любую другую подходящую программу в ubuntu 22.04 или новее…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *