Руководство. Как собрать ccminer из исходников под Windows?

В этом посте, по многочисленным просьбам пользователей, я расскажу вам как собрать (скомпилировать) ccminer из исходников под платформу Windows. Чуть ниже картинка, найденная мной на просторах интернета:

Админами не рождаются, их компилят родители из исходников.
Админами не рождаются, их компилят родители из исходников.

С майнерами ситуация полностью аналогичная. Собирая майнер из исходников вы не только сможете изучить их, чтобы понять как он работает, но также и убедиться в том, что в код не заложено каких-то дополнительных нежелательных функций, например, "майнинга на сторону", каких-то деструктивных действий для вашего ПК и т.п. Ведь скачивая бинарник, т.е. уже скомпилированный файл, особенно из непроверенных источников (форумов и т.п.) вы никак не сможете убедиться в том, что майнер выполняет только то, чего от него ожидают - майнинга на указанный вами при запуске кошелек. Помимо этого тот, кто выкладывал эту сборку, вполне мог встроить в него "закладки", начиная от периодического майнинга на свой кошелек (часть вашего хешрейта будет просто "уходить на сторону", т.е. часть времени ваше оборудование будет работать "на дядю") и заканчивая отправкой вашего wallet.dat в руки злоумышленника. Чтобы избежать этого - всегда рекомендуется использовать только open source проекты и собирать бинарник самостоятельно. Чему мы и научимся в этой статье.

Что нам потребуется?

1. ПК с установленной ОС Windows, желательно x64, начиная от Windows 7 и выше. В данном руководстве будет использоваться Windows 7 (x64). Если у вас до сих пор WinXP, то самое время обновить ее на что-то посвежее. Также, чтобы избежать каких-либо проблем с отсутствующими библиотеками и т.п., мы будем рассматривать процесс сборки, исходя из того, что у нас "чистая", т.е. свежеустановленная ОС, поэтому не удивляйтесь, если далее по тексту мы будем устанавливать альтернативный браузер или архиватор. У большинства все это конечно есть, но данное руководство ориентировано прежде всего на новичков.

2. Альтернативный браузер. Т.к. статье мы будем часто что-то скачивать и т.п., лучше сразу установить его, установленный в Windows 7 (x64) по-умолчанию Internet Explorer 8.0 мало подходит для этих целей. К тому же его использование в современном интернете - просто небезопасно. В качестве альтернативного браузера я установил Яндекс.Браузер. Почему именно его - это вопрос, который выходит за рамки данной статьи, но если в двух словах, то мне просто нравится как он развивается, например, встроенная поддержка DNSCrypt, наличие разнообразных плагинов (FriGate, Adguard и т.п.) и все это "из коробки" делает его использование очень удобным.

3. Архиватор 7-zip. Без использования архиватора никуда, поэтому устанавливаем его с официального сайта - 64-bit, либо 32-bit версию, в зависимости от разрядности используемой вами ОС.

4. Файловый менеджер Far Manager. Понятно что многие привыкли работать в Total Commander, или вообще обходятся без файлового менеджера, но т.к. нам иногда придется что-то делать в консоли, например, править конфигурационные файлы или запускать консольные утилиты (да что там говорить, по факту любой майнер - это и есть обычная консольная утилита, поэтому редактировать .bat файлы или запускать майнер с ключами - гораздо проще из оболочки консольного файлового менеджера, т.е. Far'а, в этом вы еще сможете убедиться не раз), поэтому устанавливаем его. Скачиваем и устанавливаем Far Manager v3.0 build 5000, MSI сборку для 32-bit или 64-bit системы.

5. Git for Windows - средство для работы с репозиториями GitHub. 32-bit или 64-bit версию. Так как большинство исходников выложено на GitHub'е, то использование git'а в нашем случае обязательно.

6. Компилятор Visual Studio 2013. Мы будем использовать бесплатную MSVC 2013 Express или Community Edition, но для того чтобы получить доступ к ней, нам необходимо будет оформить бесплатную Visual Studio Dev Essentials подписку в нашей учетной записи Microsoft. О разнице между Express и Community Edition подробно рассказано тут. Правда после оформления подписки в разделе Downloads оказалась доступной только 32-bit версия - Visual Studio Community 2013 with Update 5 (x86) - en_visual_studio_community_2013_with_update_5_x86_dvd_6816332.iso , но она замечательно умеет собирать и 64-bit бинарники, так что нам она полностью подходит.

7. Virtual CD-ROM Control Panel - т.к. на предыдущем шаге мы скачали ISO образ, а Windows 7 по-умолчанию не умеет штатно монтировать ISO'шки в виртуальный привод, то нам понадобится еще и утилита для монтирования ISO. Правда на x86 системах VCdControlTool от Microsoft работает без проблем, а вот на x64 начинаются проблемы с драйверов. Поэтому в качестве альтернативной утилиты для x64 можно посоветовать бесплатную WinCDEmu. Для монтирования скачанного ISO образа в ней достаточно кликнуть правой кнопкой мыши на файле образа и выбрать в меню "Выбрать букву диска и монтировать ... ". Пользователи Windows 8 и выше лишены таких сложностей, там монтирование ISO поддерживается на уровне самой ОС, поэтому для них выполнение этого пункта не обязательно.

8. CUDA Toolkit. Здесь нужно скачать и установить CUDA 7.5 и CUDA 8.0, соответствующие вашей ОС и ее разрядности. Обратите внимание, что устанавливать CUDA необходимо только после завершения установки MSVC, чтобы CUDA нормально интегрировалась в среду MSVC.

На этом все необходимое у нас скачано и можно приступать к последовательной установке по пунктам. Никаких специфических настроек при инсталляции не требуется, просто запускаем по очереди скачанные дистрибутивы и действуем по принципу Далее, Далее, Далее ... Для удобства выведите ярлык Far Manager на рабочий стол и добавьте в свойствах безопасности для этого ярлыка "Запуск от имени администратора", либо просто запускайте его в будущем по правой кнопке через "Запуск от имени администратора".

Курс молодого бойца Far Manager

В двух словах об использовании Far Manager. Если вы привыкли всегда и везде кликать мышкой, то здесь этот навык будет неудобен. Для эффективной работы проще всего запомнить несколько горячих клавиш. Как вы успели заметить, запустив Far, он представляет собой консольное приложение, интерфейс которого разделен на две панели. Перемещаться между панелями вы можете с помощью кнопки Tab. Сочетание клавиш Alt-F1 - выбор диска на первой панели, Alt-F2 - на второй панели, соответственно. F5 - копирование файлов, F7 - создание папки. Не так уж и сложно, правда? Остальные хоткеи перечислены в подсказках в строке статуса. Давайте создадим папку, в которой мы займемся сборкой ccminer. Переходим на диск C:\ (или D:\) и создаем в его корне папку ccminer-project, т.е. нажимаем F7 и вводим название папки, затем с помощью стрелок курсора и кнопки Enter заходим в нее.

Экран Far Manager после создания папки ccminer-project
Экран Far Manager после создания папки ccminer-project

Чем вообще удобно использование Far, помимо hotkey'ев и прочего? Т.к. файловый менеджер консольный, вы работаете в консоли, но при этом имеете удобный интерфейс, видите в какой папке вы находитесь, может быстро перемещаться по ним, без использования команды cd, создавать директории без использования md и т.п. К тому же командная строка всегда под рукой и находится внизу под панелями. В ней вы всегда сможете выполнить любую консольную команду в текущей папке. Если вы уже установили Git из 5-го пункта инструкции, давайте так и поступим.

Клонируем исходники с Git'а

Находясь в папке ccminer-project введите в окно консоли следующую команду:

git clone https://github.com/krnlx/ccminer-skunk-krnlx

И нажмите Enter (примечание, сначала надо установить Git, а уже потом запускать Far, если вы сначала запустили Far, а потом установили Git, закройте Far с помощью хоткея F10, а потом снова откройте его):

Клонирование Git-репозитария (копирование исходников)
Клонирование Git-репозитария (копирование исходников)

Далее заходим в получившуюся папку ccminer-skunk-krnlx, находим в нем файл ccminer.vcxproj, открываем его на редактирование (кнопка F4 в Far'е) и находим в нем следующую строку:

<CodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
compute_61,sm_61;compute_52,sm_52;compute_50,sm_50;compute_30,sm_30</CodeGeneration>

В ней убираем compute_61,sm_61; , т.е. в итоге у нас должно получиться:

<CodeGeneration Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
compute_52,sm_52;compute_50,sm_50;compute_30,sm_30</CodeGeneration>

Это нужно для того чтобы x64 релиз с CUDA 7.5 собрался успешно. После редактирования строки записываем изменения на диск (кнопка F2 - Save), и возвращаемся (Esc) к экрану с панелями.

Компилируем ...

ccminer уже имеет в своем составе файл проекта (.sln), поэтому компиляция фактически сведется к нескольким кликам и небольшому ожиданию. Ничего сложного или какой-то особенной магии тут нет. Давайте убедимся в этом сами. Запускаем наш MSVC 2013, выбираем в меню File -> Open -> Project/Solution ... и находим файл C:\ccminer-project\ccminer-skunk-krnlx\ccminer.sln :

Открываем файл проекта в MSVC 2013
Открываем файл проекта в MSVC 2013

Обратите внимание, что его тип должен быть Microsoft Visual Studio Solution, а расширение .sln, файл имеющий тип VC++ Project - открывать не нужно. После открытия, если вы не устанавливали CUDA 8.0 (а его нужно было установить) вы скорее всего получите ошибку вида:

C:\ccminer-project\ccminer-skunk-krnlx\ccminer.vcxproj : error : Unable to read the project file "ccminer.vcxproj".
C:\ccminer-project\ccminer-skunk-krnlx\ccminer.vcxproj(42,5): The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 8.0.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Которая говорит нам о том, что CUDA 8.0 не установлен. Вариантов тут несколько - либо установить CUDA 8.0, либо заменить в файле ccminer.vcxproj, как мы уже это делали раньше, строки CUDA 8.0.props на CUDA 7.5.props и CUDA 8.0.targets на CUDA 7.5.targets . Как вы уже поняли - таким образом мы выбираем версию CUDA, с которой мы будем собирать проект. Если у нас установлены и CUDA 7.5 и CUDA 8.0, то выбрать версию можно проще. Для этого кликаем правой кнопкой мыши про проекту и в меню Build Dependencies -> Build customizations ... выбираем нужную нам версию CUDA:

Project -> Buld Dependencies -> Build Customizations ...
Project -> Buld Dependencies -> Build Customizations ...

После чего выбираем что мы собираем Release версию (в меню сверху), а также указываем архитектуру (в нашем случае мы будем собирать x64). После чего выбираем в меню BUILD -> Build Solution (Ctrl-Shift-B) и ждем результата компиляции:

Магия в действии ... ccminer компилируется ...
Магия в действии ... ccminer компилируется ...

Скорость сборки напрямую зависит от мощности вашего ПК, могу сказать что на виртуальной машине (основная операционная система у меня Ubuntu Linux, поэтому для написания этого руководства пришлось установить Windows 7 x64 в VirtualBox) с 4-мя ядрами Core i7-6700K и 4 Gb RAM, с виртуальным диском расположенным на SSD процесс сборки занял около 30-40 минут. Сначала компилируется CUDA модули для всех алгоритмов (это самая ресурсоемкая и долгая часть процесса), а затем само приложение. Естественно, что если вы что-то захотите изменить в исходном коде майнера, а затем пересобрать его, то процесс сборки будет идти гораздо быстрее, т.к. будут компилироваться только измененные модули. По окончанию сборки (если она прошла успешно) вы должны увидеть что-то вроде этого в Output Window:

Сборка успешно завершена ...
Сборка успешно завершена ...

Полученный ccminer.exe будет располагаться в папке с проектом в подпапке Release, если вы собирали 32-bit версию, или в папке x64\Release, если вы собирали 64-bit версию. Обратите внимание, что папка с объектными файлами, библиотеками и прочими компонентами, используемыми в процессе, будет занимать около 8.3 Gb, поэтому перед началом сборки убедитесь в наличии свободного места на диске.

Проверяем сборку ...

Переходим в папку C:\ccminer-project\ccminer-skunk-krnlx\x64\Release и запускаем получившийся в процессе компиляции ccminer.exe (сделать это удобнее всего в Far'е):

Как видно, собранный ccminer.exe запускается ...
Как видно, собранный ccminer.exe запускается ...

Hint: когда вы запускаете ccminer.exe из под Far'а, он запустится, но т.к. мы не указали никаких ключей при запуске на экране опять появятся панели Far'а. Чтобы увидеть что отобразил нам майнер после запуска достаточно нажать комбинацию кнопок Ctrl-O ("O" - английское), чтобы опять вернуться к экрану с панелями нажмите Ctrl-O повторно.

Вот такое вот нехитрое руководство, благодаря которому мы научились как правильно собрать проект из исходников. Важным замечанием здесь пожалуй может быть использование только указанных версий ПО, приведенных в разделе "Что нам потребуется?". Особенно это касается выбора компилятора. Не стоит устанавливать более свежие версии MSVC, например, MSVC 2015 или 2017. Проект ccminer "заточен" на сборку именно в среде VC2013 и не адаптирован к старшим версиям компилятора, поэтому если вы вдруг попытаетесь собрать его с использованием VC2015, то неизбежно получите ошибку.

Поддержка

Если данное руководство помогло вам, вы можете поддержать автора, используя следующие реквизиты:

1. BTC/BCC (BitCoin/BitCoin Cash) - 1EXS9xuWDuXHXXrGggm94BEJhcuSvDC5sy
2. SIGT (Signatum) - BFBPSpkY2CKLCBkubxaExm3sFXNFAx8bZ1
3. ETH (Ethereum) - 0xd41285d881b59cf5650807acef0ff5224e8665dd