
Компиляция Ethminer под Linux
В статье «Майнинг в программе ethminer на поздних эпохах DAG в операционной системе Linux» уже описывались преимущества майнера Ethminer для алгоритма Ethash PoW с открытым исходным кодом для OpenCL и CUDA — устройств.
Самостоятельная сборка майнера обеспечивает наиболее полную совместимость с конкретным «железом», что обеспечивает высокую надежность работы и более высокую вероятность отсутствия встроенных троянских модулей.
В данной статье описывается последовательность действий по компиляции из исходного кода этого майнера для операционной системы Linux (на примере xubuntu).
Сборка Ethminer из исходного кода для операционной системы Linux
В Linux-подобных системах для сборки исполняемого файла ethminer нужно иметь установленные пакеты Git, Python, Perl, Cmake, библиотеки libleveldb-dev, libcurl4-openssl-dev, libmicrohttpd-dev и libudev-dev, а также OpenGL, NVidia CUDA.
Их и ряд других необходимых компонентов можно установить командой:
sudo apt install git libdbus-1-dev mesa-common-dev cmake libleveldb-dev libcurl4-openssl-dev
Проверить наличие в системе поддержки Perl можно командой:
perl -v
При наличии этого языка в системе появится сообщение примерно такого вида:

Последнюю версию Perl для Unix-подобных систем (Linux, Solaris, AIX, HPUX и т. д.) можно скачать на сайте www.perl.org.
Затем следует скачать исходники Ethminer с Github командами:
mkdir ~/ethminer; cd ~/ethminer git clone https://github.com/ethereum-mining/ethminer.git

После этого необходимо обновить git submodules командой (терминал нужно запускать из папки, в которую скачаны исходники):
git submodule update --init --recursive

после этого из папки ethminer запускают терминал и выполняют команды:
mkdir build && cd build && cmake .. && cmake --build
В результате успешной компиляции в папке build будет получен исполняемый файл майнера:
Для более тонкой настройки будущего исполняемого файла можно использовать параметры:
-DETHASHCL=ON — для включения поддержки майнинга на видеокартах, поддерживающих технологию OpenCL, эта опция включена по умолчанию;
-DETHASHCUDA=ON — вклюячение поддержки майнинга на видеокартах nvidia с помощью технологии CUDA, опция по умолчанию включена;
-DAPICORE=ON — включение сервера API, опция по умолчанию включена;
-DBINKERN=ON — инсталляция бинарных ядер AMD, опция по умолчанию включена;
-DETHDBUS=ON — включение поддержки D-Bus, опция по умолчанию выключена.
Для компиляции майнера для видеокарт AMD можно воспользоваться командами:
mkdir build; cd build cmake .. -DETHASHCUDA=OFF -DETHASHCL=ON
После этой команды запуститься первый этап автоматической сборки программы из исходного кода по сценарию, записанному в файле CmakeLists.txt утилитой cmake:
Процесс займет несколько минут.
По окончанию первого этапа сборки появятся сообщения об успехе и записи необходимых для окончательной сборки файлов в папку build:
-- Configuring done -- Generating done -- Build files have been written to: /home/intel33/Рабочий стол/ethminer/ethminer/build

Окончательную сборку исполняемого файла ethminer по финальному скрипту запускают командой:
cmake --build .
Процесс финальной сборки ethminer займет некоторое время:
По окончании процесса сборки исполняемого файла ethminer в терминале появится сообщение об успехе:
Файл ethminer будет находится в папке build.
Для видеокарт Nvidia при компиляции можно использовать команды:
mkdir build; cd build cmake .. -DETHASHCUDA=ON -DETHASHCL=OFF cmake --build .
Для обеспечения полной совместимости кода майнера с установленным железом можно использовать более продвинутые команды компиляции (запускать из папки build):
export CFLAGS="-O2 -march=native -msse3 -fomit-frame-pointer -pipe"
export CHOST="x86_64-pc-linux-gnu"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-Wl,-O1"
cmake .. -DETHASHCUDA=ON -DETHASHCL=ON
make -j 4Ошибки, возникающие при компиляции ethminer
При появлении ошибок вида:
CMake Error at CMakeLists.txt:3 (include): include could not find load file: cmake/cable/bootstrap.cmake CMake Error at CMakeLists.txt:5 (include): include could not find load file: CableBuildInfo CMake Error at CMakeLists.txt:6 (include): include could not find load file: CableBuildType CMake Error at CMakeLists.txt:7 (include): include could not find load file: CableToolchains CMake Error at CMakeLists.txt:8 (include): include could not find load file: HunterGate CMake Error at CMakeLists.txt:10 (include): include could not find load file: defaults/HunterCacheServers CMake Error at CMakeLists.txt:12 (cable_configure_toolchain): Unknown CMake command "cable_configure_toolchain". -- Configuring incomplete, errors occurred! -- Configuring incomplete, errors occurred!

либо
fatal: не найден git репозиторий (или один из родительских каталогов): .git
нужно повторно инициализировать git, а также обновить субмодули командами:
git init
![]()
(терминал запущен из папки build):
git submodule update --init --recursive

При появлении ошибки:
- unsupported GNU version! gcc versions later than 5 are not supported!
нужно вручную установить нужную версию набора программ компиляции gcc:
apt-get install gcc-5 g++-5 export CC=`which gcc-5` export CXX=`which g++-5`
Если при финальной сборке
(команда cmake —build .)
исполняемого файла при генерации ядра OpenCL появляется сообщение об отсутствии файла ethash.cl:
[ 46%] Generating OpenCL Kernel Byte Array CMake Error at /home/intel33/Рабочий стол/ethminer/ethminer/libethash-cl/bin2h.cmake:50 (file): file failed to open for reading (No such file or directory): /home/intel33/Рабочий\ стол/ethminer/ethminer/libethash-cl/kernels/cl/ethash.cl make[2]: *** [libethash-cl/CMakeFiles/ethash-cl.dir/build.make:62: libethash-cl/ethash.h] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:408: libethash-cl/CMakeFiles/ethash-cl.dir/all] Ошибка 2 make: *** [Makefile:152: all] Ошибка 2

хотя файл ethash.cl находится по указанному пути, нужно перенести папку с исходниками в место без кириллических названий типа Рабочий стол или Загрузки, удалить все содержимое из папки build, и повторить процесс сборки заново.



2 комментария
атьюPavel
Привет! спасибо за статью, сильно помогла
cryptoprofi
Пожалуйста! Всегда рады помочь!