Перейти к содержимому

igorwhite's блог

  • записи
    4
  • комментариев
    358
  • просмотров
    62 778

Создание собственной ноды p2pool Bitcoin с объединенным майнингом (Super Node).

igorwhite

11 919 просмотров

Создание собственной (Super Node) ноды p2pool Bitcoin с объединенным майнингом. Merged Mining.

 

Требование по железу ремендую:

CPU - 4 Core

ОЗУ - 8 GB

HDD - SSD (это очень важно)

 

И так приступим.... Пишу очень много по памяти так что если где-то будут ошибки пишите поправим.

Предупреждаю впереди очень многа букаф!!! :blink:

И еще я не писатель, а больше читатель.

 

Делать будем все в Linux. Я рекомендую Linux на основе Ubuntu или Debian. Мои сервера работают на консольной версии Ubuntu.

Но для наглядности и удобства можете начать с версии Lubuntu 14.04.01 Мне кажется самой стабильной на данный момент.

Вся инструкция написана для Ubuntu Server 14.04.02 Нам нужен быстрый и легковесный сервер.

 

Кратко о Merged это дополнительный майнинг параллельных coins не влияющий на основной процесс майнинга. Добыча идет как бы в соло.

.........

Так Linux поставили.

 

1. Сделаем обновление системы:

sudo apt-get updatesudo apt-get upgradesudo rebootsudo apt-get dist-upgradesudo reboot

2. Установим зависимости и дополнительные программы "mc" и "htop":

mc (Midnight Commander) для удобства навигации в консольной версии Linux.

htop (top) расширенная версия утилиты "top" для мониторинга и тонкой настройки системы.

sudo apt-get install build-essential libtool autotools-dev autoconf automake libssl-dev libboost1.55-all-dev libminiupnpc-dev libqt5gui5 libqt5core5a libqt5dbus5 libglib2.0-dev libglibmm-2.4-dev libdb5.1++-dev libcurl4-openssl-dev qttools5-dev qttools5-dev-tools libprotobuf-dev libqrencode-dev pkg-config libprotoc8 protobuf-compiler git screen htop mc software-properties-common python-software-properties python-rrdtool python-pygame python-scipy python-twisted python-twisted-web python-imaging python-dev

3. Установим демон Bitcoin(BTC):

sudo add-apt-repository ppa:bitcoin/bitcoin sudo apt-get update sudo apt-get install bitcoind ​

4. Приступим к компиляции наших Merged Коинов:

 

4.1 Namecoin(NMC):

git clone https://github.com/namecoin/namecoin.git cd namecoin/srcmake# Скопируем namecoind в папку /usr/local/bin  # У меня все демоны там, можно - любое sudo cp namecoind /usr/local/bin/namecoind

Внимание если "git" будет ругаться на отсутствие доступа к папке ".coinfig" то смените владельца этой папки командой:

sudo chown user:group .config # где "user" ваш логин, а "group" ваша группа

 

4.2 Unobtanium(UNO) (надо делать четко по инструкции иначе не c компилируется наш демон Unobtanium):

git clone https://github.com/unobtanium-official/Unobtanium.gitcd Unobtaniumchmod +x autogen.shchmod +x share/genbuild.shchmod +x src/leveldb/build_detect_platform./autogen.sh./configuremake# Скопируем unobtanium-cli, unobtaniumd в папку /usr/local/bincd Unobtanium/srcsudo cp unobtanium-cli /usr/local/bin/unobtanium-clisudo cp unobtaniumd /usr/local/bin/unobtaniumd

К стати после "make" можно добавить ключ -j2 или -j4 где цифра "2 или 4" количество ядер процессора, тогда демоны будут быстрее компилироваться.

 

4.3 IXCoind(IXC):

git clone https://github.com/FrictionlessCoin/iXcoin.gitcd  iXcoin/srcmake -f makefile.unix ixcoind# Скопируем ixcoind в папку /usr/local/binsudo cp ixcoind /usr/local/bin/ixcoind

4.4 Fusioncoin(FSC):

git clone https://github.com/fusioncoin/fusioncoin.gitcd fusioncoin/srcmake -f makefile.unix fusioncoind# Скопируем fusioncoind в папку /usr/local/bin/sudo cp fusioncoind /usr/local/bin/fusioncoind

4.5 I0Coin(I0C):

git clone https://github.com/rsnel/i0coin.gitcd  i0coin/srcmake -f makefile.unix i0coind# Скопируем i0coind в папку /usr/local/bin/sudo cp i0coind /usr/local/bin/i0coind

4.6 Huntercoin(HUC):

git clone https://github.com/chronokings/huntercoin.gitcd huntercoin/srcmake# Скопируем huntercoind в папку /usr/local/bin/sudo cp huntercoind /usr/local/bin/huntercoind

4.7 Devcoin(DVC):

git clone https://github.com/coinzen/devcoin.gitcd devcoin/srcmake -f makefile.unix USE_PNP=1 devcoind# Скопируем devcoind в папку /usr/local/bin/sudo cp devcoind /usr/local/bin/devcoind

Так с компиляцией мы покончили.

 

5. Приступаем к созданию конфигов наших демонов:

Создаем папки:

mkdir ~/.bitcoinmkdir ~/.namecoinmkdir ~/.unobtaniummkdir ~/.ixcoinmkdir ~/.fusioncoinmkdir ~/.i0coinmkdir ~/.huntercoinmkdir ~/.devcoin

5.1 Bitcoin(BTC):

# Создаем файл bitcoin.conf nano ~/.bitcoin/bitcoin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=8332port=8333rpcallowip=127.0.0.1disablewallet=1mintxfee=0.00001minrelaytxfee=0.00001# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x") 

5.2 Namecoin(NMC):

# Создаем файл namecoin.confnano ~/.namecoin/namecoin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=8336port=8334rpcallowip=127.0.0.1# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.3 Unobtanium(UNO):

# Создаем файл unobtanium.confnano ~/.unobtanium/unobtanium.conf# Копируем туда:server=1listen=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=65535port=65534rpcallow=127.0.0.1 addnode=104.131.25.221addnode=108.61.10.90addnode=137.135.57.119addnode=144.76.239.66addnode=144.76.64.123addnode=158.255.89.244addnode=162.216.4.199addnode=162.243.47.14addnode=167.114.156.87addnode=178.33.209.208addnode=178.62.145.250addnode=185.50.213.123addnode=188.138.33.239addnode=188.138.94.6addnode=192.95.29.153addnode=192.99.245.21addnode=195.117.180.229addnode=198.15.127.242addnode=199.192.77.162addnode=199.192.78.194addnode=203.206.142.19addnode=63.247.147.166addnode=64.156.193.100addnode=68.232.186.171addnode=69.197.61.58addnode=74.120.220.54addnode=74.131.163.95addnode=75.19.27.26addnode=79.251.172.84addnode=91.235.254.37addnode=92.3.42.66addnode=93.197.227.99addnode=94.23.32.109# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.4 IXCoin(IXC):

# Создаем файл ixcoin.confnano ~/.ixcoin/ixcoin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=8338port=8337rpcallowip=127.0.0.1addnode=24.34.40.175addnode=142.4.208.71addnode=24.42.148.53addnode=184.78.215.89addnode=62.75.167.48addnode=83.163.120.176addnode=123.203.84.34addnode=86.93.208.193# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.5 Fusioncoin(FSC):

# Создаем файл fusioncoin.confnano ~/.fusioncoin/fusioncoin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=18491port=8492rpcallowip=127.0.0.1miningalgo=sha256addnode=54.193.11.95addnode=54.255.130.210addnode=198.23.242.92addnode=121.199.12.227addnode=54.185.94.219# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.6 I0Coin(I0C):

# Создаем файл i0coin.confnano ~/.i0coin/i0coin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcport=7332port=7333rpcallowip=127.0.0.1addnode=85.17.248.211:7333addnone=198.154.60.61:7333addnode=188.165.216.59:7333# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.7 Huntercoin(HUC):

# Создаем файл huntercoin.confgedit ~/.huntercoin/huntercoin.conf# Копируем туда:server=1daemon=1rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯrpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬrpcallowip=127.0.0.1rpcport=8399port=8398algo=sha256daddnode=192.241.222.65addnode=192.81.209.210addnode=178.32.31.41addnode=162.243.175.205# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.8 Devcoin(DVC):

# Создаем файл devcoin.confgedit ~/.devcoin/devcoin.conf# Копируем туда:server=1daemon=1rpcuser=userWzorDVCrpcpassword=FCvhzdhrwq1MiPZX88YhHyKjDVsJzXFl6uirpcport=6333port=6334rpcallowip=127.0.0.1# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

# Не забываем сохранять внесенную информацию!!!

 

6. Так файлы конфигурации создали. Сделаем базовые настройки безопасности:

Так как мы тут все параноики нам нужно защитить наши честно добытые коины.Применим chmod 600 или 400 (все зависит от состояния паранойи) к нашим файлам конфигурацииПример:chmod 400 ~/.bitcoin/bitcoin.conf На основе примера повторить с остальными конфигами.

6.1 Farewell

sudo ufw enablesudo ufw allow 8333/tcp  # bitcoin peer to peersudo ufw allow 8334/tcp  # namecoin peer to peersudo ufw allow 65534/tcp  # unobtanium peer to peersudo ufw allow 8337/tcp  # ixcoin peer to peersudo ufw allow 6334/tcp  # devcoin peer to peersudo ufw allow 7333/tcp  # i0coin peer to peersudo ufw allow 8492/tcp  # fusioncoin peer to peersudo ufw allow 8398/tcp  # huntercoin peer to peersudo ufw allow 9333/tcp  # P2pool peer to peersudo ufw allow 9332/tcp  # P2Pool connections and Web interface# Не забываем открыть эти же порты на роутере если таковой есть. RPC порты ни где не открываем!!! # Если работаем по удаленке то открываем порт sshsudo ufw allow 22/tcp

7. Приступаем к запуску демонов. Первый запуск делаем в ручную потом добавим в автозагрузку.

# Запускаем демоны в терминале по очереди:bitcoindnamecoindunobtaniumd # Внимание первый запуск Unobtanium делаем с ключом -reindexixcoindfusioncoindi0coindhuntercoinddevcoind#Демоны начинают синхронизироваться с сетью.

# После запуска демона вы должны увидеть:

blogentry-14647-0-21557900-1433867976_thumb.jpg

# Если увидите типа зависания:

blogentry-14647-0-29294800-1433867984_thumb.jpg

# Не обращайте внимание просто закройте терминал и откройте его заново и продолжайте дальше. Демон все равно запустился.

#Демоны начинают синхронизироваться с сетью.

Ждем минут 5-10 и проверяем наши демоны:

bitcoin-cli getinfonamecoind getinfounobtanium-cli getinfoixcoin-cli getinfofusioncoind getinfoi0coind getinfohuntercoind getinfodevcoind getinfo

# Если все ОК то должны ​увидеть:

blogentry-14647-0-09137000-1433868877_thumb.jpg

 

Демоны синхронизируется долго, несколько дней поэтому рекомендую поискать торренты с цепочкой блоков. Например Huntercoin находится здесь. И не забываем что эти файлы кроссплатформенные. Т.Е. если у вас уже есть кошельки можете перекинуть свои файлы на сервер только естественно без "wallet.dat и конфигов"

 

8. Создаем скрипты автостарта и остановки наших демонов:

Основа скриптов это файл "skeleton" находящийся по пути /etc/init.d

cd /etc/init.d/sudo cp skeleton bitcoindsudo nano bitcoind# Далее вносим следующие изменения:#! /bin/sh### BEGIN INIT INFO# Provides: bitcoind# Required-Start: $network $local_fs# Required-Stop: $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Auto start-stop bitcoind# Description: Auto start-stop bitcoind via booting system# placed in /etc/init.d.### END INIT INFO# Author: wzor <poolcrypto.org@gmail.com>## Please remove the "Author" lines above and replace them# with your own name if you copy and modify this script.# Do NOT "set -e"# PATH should only include /usr/* if it runs after the mountnfs.sh scriptPATH=/sbin:/usr/sbin:/bin:/usr/binDESC="Bitcoin Daemon"NAME=/usr/local/bin/bitcoindDAEMON=$NAMEDAEMON_ARGS="-daemon"CLI=/usr/local/bin/bitcoin-cliDAEMON_LOADER="/usr/bin/taskset 0x4 "$DAEMONPIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAMECHUID=user:group# Exit if the package is not installed[ -x "$DAEMON" ] || exit 0# Read configuration variable file if it is present[ -r /etc/default/$NAME ] && . /etc/default/$NAME# Load the VERBOSE setting and other rcS variables. /lib/init/vars.sh# Define LSB log_* functions.# Depend on lsb-base (>= 3.2-14) to ensure that this file is present# and status_of_proc is working.. /lib/lsb/init-functions## Function that starts the daemon/service#do_start(){# Return# 0 if daemon has been started# 1 if daemon was already running# 2 if daemon could not be startedstart-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \|| return 1start-stop-daemon --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON_LOADER -- \$DAEMON_ARGS \|| return 2# Add code here, if necessary, that waits for the process to be ready# to handle requests from services started subsequently which depend# on this one. As a last resort, sleep for some time.}## Function that stops the daemon/service#stop_daemon_by_cli(){#[ ! -e "$PIDFILE" ] && echo "$DESC not running!" && return 0start-stop-daemon --start --chuid $CHUID --exec $CLI -- -rpcwait stopreturn 0}do_stop(){# Return# 0 if daemon has been stopped# 1 if daemon was already stopped# 2 if daemon could not be stopped# other if a failure occurredstop_daemon_by_clistart-stop-daemon --stop --quiet --chuid $CHUID --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $NAMERETVAL="$?"[ "$RETVAL" = 2 ] && return 2# Wait for children to finish too if this is a daemon that forks# and if the daemon is only ever run from this initscript.# If the above conditions are not satisfied then add some other code# that waits for the process to drop all resources that could be# needed by services started subsequently. A last resort is to# sleep for some time.start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON[ "$?" = 2 ] && return 2# Many daemons don't delete their pidfiles when they exit.rm -f $PIDFILEreturn "$RETVAL"}## Function that sends a SIGHUP to the daemon/service#do_reload() {## If the daemon can reload its configuration without# restarting (for example, when it is sent a SIGHUP),# then implement that here.#start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAMEreturn 0}case "$1" instart)[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"do_startcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;stop)[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"do_stopcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;status)status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?;;#reload|force-reload)## If do_reload() is not implemented then leave this commented out# and leave 'force-reload' as an alias for 'restart'.##log_daemon_msg "Reloading $DESC" "$NAME"#do_reload#log_end_msg $?#;;restart|force-reload)## If the "reload" option is implemented then remove the# 'force-reload' alias#log_daemon_msg "Restarting $DESC" "$NAME"do_stopcase "$?" in0|1)do_startcase "$?" in0) log_end_msg 0 ;;1) log_end_msg 1 ;; # Old process is still running*) log_end_msg 1 ;; # Failed to startesac;;*)# Failed to stoplog_end_msg 1;;esac;;*)#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2exit 3;;esac:

# Пояснения для скрипта или что же там такое:

 

1.Provides - название скрипта

2. Short-Description/Description - описание того что делает данный файл, а то вдруг "забудем" или кто то другой будет разбираться.

3. DESC="Bitcoin Daemon" - описание сервиса

4. NAME=/usr/local/bin/bitcoind - имя и путь исполняемого файла

5. DAEMON=$NAME - какой демон должен запуститься

6. DAEMON_ARGS="-daemon" - задаём аргументы запуска демона, он должен стартовать режиме демона (правда можно и без этого аргумента. это я так для большей уверенности)

7. CLI=/usr/local/bin/bitcoin-cli - для остановки демона. Мы же знаем что бы остановить демон Bitcoin надо использовать "bitcoin-cli stop"

8. DAEMON_LOADER="/usr/bin/taskset 0x4 "$DAEMON - На этом пункте остановимся и распишем по подробней. Надо распределить нагрузку на сервер т.е. на его процессор и для этого нам поможет утилита "taskset". У нас есть две приоритетные задачи это ДЕМОН BITCOIN и СКРИПТ P2POOL-а. Аргумент "0x4" утилиты "taskset" запускает наш демон Bitcoin на третьем ядре процессора. Настоятельно рекомендую распределять между ядрами процессы самих демонов наших монет и скрипта p2pool-a и для повышения скорости работы пула-ноды. Как мы представляем себе четырехъядерный процессор - "1,2,3,4" это и есть ядра процессора, но это не так для системы ядро под номером "1" это "0" а в шестнадцатеричном формате это "0x00000001" или сокращенно "0x1". Идея такая у нас семь merged монет им отдадим на растерзание первые два ядра используя аргумент "0x3", для bitcoind "0x4" что заставит его работать исключительно на третьем ядре и скрипт p2pool-а "0x8" что соответствует четвертому ядру процессора.

В случае когда у вас только одноядерный процессор, то в данной строке нужно удалить "/usr/bin/taskset 0x4 " оставив только $DAEMON.

Если у вас процессор больше чем четырехъядерный то вам придется поискать в гугле значения ваших ядер.

9. CHUID=user:group - задаём пользователя и группу, от имени которых будет запускаться исполняемый скрипт.

 

9. Запуск скрипта bitcoind:

# Делаем скрипт исполняемым (находимся в папке /etc/init.d)sudo chmod +x bitcoind# Выходим из папки /etc/init.d и Запускаем скрипт:/etc/init.d/bitcoind# Должна появиться строка "{start|stop|restart|reload|force-reload}" нас интересует "start" и "stop"/etc/init.d/bitcoind start# Проверяем запустился демон Bitcoin утилитой "htop"sudo htop# Если видим как на скрине то все ОК если нет ищем ошибки!!!# Остановка нашего демона /etc/init.d/bitcoind stop # Если старт-стоп происходит без ошибок добавляем скрипт а автозагрузку sudo update-rc.d bitcoind defaults # С этого момента скрипты будут стартовать и останавливаться сами (соответственно демоны коинов тоже) при включении или отключении сервера!!!# Если нужно удалить из автостарта то выполняем следующую команду sudo update-rc.d -f bitcoind remove

Скрин "htop"

blogentry-14647-0-98919600-1434634236_thumb.jpg

 

10. Так на основе скрипта Bitcoin делаем скрипт для запуска Unobtanim. Т.К. их демоны отличаются от других тем что используют отдельные утилиты мониторинга и контроля, это соответственно "bitcoin-cli' и "unobtanium-cli".

cd /etc/init.dsudo cp bitcoind unobtaniumd# Изменяем все пункты которые связаны с bitcoin и на unobtanium и проводим те же процедуры что делали со скриптом bitcoind (пункт 9). 

11. Создаем скрипт запуска Namecoin (NMC) на основе его делаем остальные:

cd /etc/init.dsudo cd skeleton namecoindsudo nano namecoind# Далее вносим следующие изменения:#! /bin/sh### BEGIN INIT INFO# Provides: namecoind# Required-Start: $network $local_fs# Required-Stop: $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Auto start-stop namecoind# Description: Auto start-stop namecoind via booting system# placed in /etc/init.d.### END INIT INFO# Author: wzor <poolcrypto.org@gmail.com>## Please remove the "Author" lines above and replace them# with your own name if you copy and modify this script.# Do NOT "set -e"# PATH should only include /usr/* if it runs after the mountnfs.sh scriptPATH=/sbin:/usr/sbin:/bin:/usr/binDESC="Namecoin Daemon"NAME=/usr/local/bin/namecoindDAEMON=$NAMEDAEMON_ARGS="-daemon"DAEMON_LOADER="/usr/bin/taskset 0x3 "$DAEMONPIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAMECHUID=user:group# Exit if the package is not installed[ -x "$DAEMON" ] || exit 0# Read configuration variable file if it is present[ -r /etc/default/$NAME ] && . /etc/default/$NAME# Load the VERBOSE setting and other rcS variables. /lib/init/vars.sh# Define LSB log_* functions.# Depend on lsb-base (>= 3.2-14) to ensure that this file is present# and status_of_proc is working.. /lib/lsb/init-functions## Function that starts the daemon/service#do_start(){# Return# 0 if daemon has been started# 1 if daemon was already running# 2 if daemon could not be startedstart-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \|| return 1start-stop-daemon --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON_LOADER -- \$DAEMON_ARGS \|| return 2# Add code here, if necessary, that waits for the process to be ready# to handle requests from services started subsequently which depend# on this one. As a last resort, sleep for some time.}## Function that stops the daemon/service#do_stop(){# Return# 0 if daemon has been stopped# 1 if daemon was already stopped# 2 if daemon could not be stopped# other if a failure occurredstart-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMONRETVAL="$?"[ "$RETVAL" = 2 ] && return 2# Wait for children to finish too if this is a daemon that forks# and if the daemon is only ever run from this initscript.# If the above conditions are not satisfied then add some other code# that waits for the process to drop all resources that could be# needed by services started subsequently. A last resort is to# sleep for some time.start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON[ "$?" = 2 ] && return 2# Many daemons don't delete their pidfiles when they exit.rm -f $PIDFILEreturn "$RETVAL"}## Function that sends a SIGHUP to the daemon/service#do_reload() {## If the daemon can reload its configuration without# restarting (for example, when it is sent a SIGHUP),# then implement that here.#start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAMEreturn 0}case "$1" instart)[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"do_startcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;stop)[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"do_stopcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;status)status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?;;#reload|force-reload)## If do_reload() is not implemented then leave this commented out# and leave 'force-reload' as an alias for 'restart'.##log_daemon_msg "Reloading $DESC" "$NAME"#do_reload#log_end_msg $?#;;restart|force-reload)## If the "reload" option is implemented then remove the# 'force-reload' alias#log_daemon_msg "Restarting $DESC" "$NAME"do_stopcase "$?" in0|1)do_startcase "$?" in0) log_end_msg 0 ;;1) log_end_msg 1 ;; # Old process is still running*) log_end_msg 1 ;; # Failed to startesac;;*)# Failed to stoplog_end_msg 1;;esac;;*)#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2exit 3;;esac:

11.1 Создаем остальные скрипты и не забываем все повторять как в пункте 9.

cd /etc/init.dsudo cp namecoind fusioncoindsudo cp namecoind i0coindsudo cp namecoind ixcoindsudo cp namecoind devcoindsudo cp namecoind huntercoind# Все делаем как в пунктах 9-10

12. Наконец-то переходим к p2pool-у

# Копируем p2poolgit clone https://github.com/p2pool/p2pool.git# На гитхабе есть много версий p2pool например можете скачать адаптив. Там больше выводится статистики.git clone https://github.com/amarian12/p2pool-adaptive.git# У Фореста очень простая по внешнему виду статистика поэтому поменяйте ее на более читаемую. Например:https://github.com/blixnood/P2PoolExtendedFrontEndhttps://github.com/johndoe75/p2pool-node-status# просто  скачайте архив и поменяйте все в папке "web-static"

12.1 Скрипт запуска p2pool через костыль :)

Скрипт создавался также для init.d но вот есть косяк. Во первых скрипт упорно не хочет ждать остальных демонов и запускается раньше и это не смотря на то что в нем прописан аргумент "$all". Второй это то что "python" (скрипт p2pool написан на нем) должен стартовать через утилиту "screen" а думать куда ее туда воткнуть у меня больше нет сил. И если честно я че-то утомился от этих скриптов. Поэтому я решил запускать этот скрипт другим скриптом.

# Скрипт основной. Создаем папку например "scripts'# Ниже разберем что там и как.mkdir ~/scriptscd scriptsnano run-p2pool# Далее вносим следующие изменения:#! /bin/sh### BEGIN INIT INFO# Provides: p2pool start# Required-Start: $all# Required-Stop: $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Auto init p2pool start# Description: Auto init p2pool start via booting system# placed in /etc/init.d.### END INIT INFO# Author: wzor <poolcrypto.org@gmail.com>## Please remove the "Author" lines above and replace them# with your own name if you copy and modify this script.# Do NOT "set -e"# PATH should only include /usr/* if it runs after the mountnfs.sh scriptPATH=/sbin:/usr/sbin:/bin:/usr/binDESC="P2Pool Start"NAME=pythonDAEMON=/usr/bin/$NAMEDAEMON_ARGS="/home/user/p2pool/run_p2pool.py --net bitcoin --give-author 0 rpcuser rpcpass -a your_wallet_btc --merged http://user:pass@127.0.0.1:8336/ --merged http://user:pass@127.0.0.1:65535/ --merged http://user:pass@127.0.0.1:18491/ --merged http://user:pass@127.0.0.1:8338/ --merged http://user:pass@127.0.0.1:7332/ --merged http://user:pass@127.0.0.1:8399/ --merged http://user:pass@127.0.0.1:6333/ --max-conns 100 --outgoing-conns 10 --fee 0"DAEMON_LOADER="/usr/bin/taskset 0x8 "$DAEMONPIDFILE=/var/run/$NAME.pidSCRIPTNAME=/home/user/script/$NAMECHUID=user:group# Exit if the package is not installed[ -x "$DAEMON" ] || exit 0# Read configuration variable file if it is present[ -r /etc/default/$NAME ] && . /etc/default/$NAME# Load the VERBOSE setting and other rcS variables. /lib/init/vars.sh# Define LSB log_* functions.# Depend on lsb-base (>= 3.2-14) to ensure that this file is present# and status_of_proc is working.. /lib/lsb/init-functions## Function that starts the daemon/service#do_start(){# Return# 0 if daemon has been started# 1 if daemon was already running# 2 if daemon could not be startedstart-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \|| return 1start-stop-daemon --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON_LOADER -- \$DAEMON_ARGS \|| return 2# Add code here, if necessary, that waits for the process to be ready# to handle requests from services started subsequently which depend# on this one. As a last resort, sleep for some time.}## Function that stops the daemon/service#do_stop(){# Return# 0 if daemon has been stopped# 1 if daemon was already stopped# 2 if daemon could not be stopped# other if a failure occurredstart-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMONRETVAL="$?"[ "$RETVAL" = 2 ] && return 2# Wait for children to finish too if this is a daemon that forks# and if the daemon is only ever run from this initscript.# If the above conditions are not satisfied then add some other code# that waits for the process to drop all resources that could be# needed by services started subsequently. A last resort is to# sleep for some time.start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON[ "$?" = 2 ] && return 2# Many daemons don't delete their pidfiles when they exit.rm -f $PIDFILEreturn "$RETVAL"}## Function that sends a SIGHUP to the daemon/service#do_reload() {## If the daemon can reload its configuration without# restarting (for example, when it is sent a SIGHUP),# then implement that here.#start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAMEreturn 0}case "$1" instart)[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"do_startcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;stop)[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"do_stopcase "$?" in0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;esac;;status)status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?;;#reload|force-reload)## If do_reload() is not implemented then leave this commented out# and leave 'force-reload' as an alias for 'restart'.##log_daemon_msg "Reloading $DESC" "$NAME"#do_reload#log_end_msg $?#;;restart|force-reload)## If the "reload" option is implemented then remove the# 'force-reload' alias#log_daemon_msg "Restarting $DESC" "$NAME"do_stopcase "$?" in0|1)do_startcase "$?" in0) log_end_msg 0 ;;1) log_end_msg 1 ;; # Old process is still running*) log_end_msg 1 ;; # Failed to startesac;;*)# Failed to stoplog_end_msg 1;;esac;;*)#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2exit 3;;esac:

# Разберем что там и как:

 

Основные пункты уже понятны они встречались выше.

DAEMON_ARGS="/home/user/p2pool/run_p2pool.py ------------ это с какими параметрами должен запуститься скрипт p2pool. В этом пункте:

--net bitcoin ---------------------------------------------------------------- пул работает с сетью BItcoin.

--give-author 0 ------------------------------------------------------------ донат создателю p2pool (на ваше усмотрение)

rpcuser rpcpass -----------------------------------------------------------логин и пароль из вашего конфига Bitcoin

-a your_wallet_btc ------------------------------------------------------- ваш внешний кошель куда будут падать Bitcoin если предусмотрена комиссия пула.

--merged http://user:pass@127.0.0.1:8336/ ------------------------merged - для того чтобы скрипт p2pool-а понял что у нас майнинг с параллельной добычей.

user:pass ------------------------------------------------------------------ логин и пароль из конфигов наших merged coins.

--max-conns 100 --outgoing-conns 10-------------------------------наше количество соединений ноды с сетью. Это с какой скоростью мы буем давать знать о найденных шарах-блоках. (Этот пункт обсудим еще чуть позже)

--fee 0-----------------------------------------------------------------------Комиссия ноды.

 

# С этим скриптом проделываем то же самое что и в п. 9. Кроме добавления в update-rc.d

 

12.2 Костыль (скрипт запускающий скрипт) :D

# Этот скрипит дает возможность запустить основной скрипт через утилиту "screen" с задержкой в 180 секунд (можете поставить любое на ваше усмотрение, но помните что наши коины по разному синхронизируются с сетью) cd /etc/init.dsudo cp skeleton start-p2pool# Приводим к виду:#! /bin/sh### BEGIN INIT INFO# Provides: start-p2pool# Required-Start: $all# Required-Stop: $local_fs $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: start-p2pool# Description: This runs a script "run-p2pool" in screen.### END INIT INFOcase "$1" instart)echo "Starting P2Pool"sleep 180screen -dmS p2pool /home/user/scripts/run-p2pool start;;stop)echo "Stopping P2Pool"/home/user/scripts/run-p2pool stop;;*)N=/etc/init.d/$NAMEecho "Usage: $N {start|stop}" >&2exit 1;;esacexit 0# Для него так же повторяем пункт 9.

# и так подводим потихоньку итоги.

! Мы собрали демоны наших коинов

! Создали скрипты автостарта демонов с распределением их по ядрам процессора.

Теперь будем делать оптимизацию ноды.

Для ноды очень важен интернет не мегабиты, а getwork latency (не путать с пингом).

Что это такое кратко можно понять из текста ниже (текст не мой)

Плохо (Latency):

  • Сервер: «Так, компьютер, отправил тебе пакет с данными. Получил?»
  • Компьютер: «…»
  • Сервер: «Ну, давай, отвечай, мне целый день тебя ждать?»
  • Компьютер: «…»
  • Сервер: «Ладно, проехали, вот тебе еще один пакет. Получил?»
  • Компьютер: «Ага, получил, и предыдущий пакет тоже, спасибо».
  • Сервер: «А чего же сразу не ответил?»
  • Компьютер: «Вот так я настроен по умолчанию, извините».

Хорошо (Latency):

  • Сервер: «Так, компьютер, отправил тебе пакет с данными. Получил?»
  • Компьютер: «Ага, шли следующий!»
  • Сервер: «Ух, быстро ты! Лови следующий. Получил?»
  • Компьютер: «Да, давай еще!»
  • Сервер: «Ого! Быстрый ты. Лови!»
  • И так далее.

# Только это не относиться к майнерам, а от ноды к ноде.

 

И так делаем дополнительные изменения в конфиге bitcoin.

Если с инетом все ОК. Можно добавить:

blockmaxsize=1000000 По умолчанию 750000. Это увеличит объем проводимых транзакций через наш демон bitcoin. И должен соответственно увеличить наш доход. Если инет не очень то можно поставить ниже чем "по умолчанию" - 250000.

Рекомендую так же уменьшить количество соединений демона bitcoin с сетью. По умолчанию 125.

maxconnections=25 Можно поставить 25-45. Это ограничит скачивание с нашей ноды blockchain.

Помните в конфиге запуска скрипта p2pool мы указывали значения --max-conns 100 --outgoing-conns 10. По умолчанию эти значения равны 40 и 6 соответственно. Можно так же их уменьшить.

Все это будет влиять на getwork latency а она очень влияет на DOA на нашей ноде.

Подбирайте лучшие значения для своих условий.

Если самый худший вариант с инетом то вот самые минимальные значения:

Для Bitcoin:

blockmaxsize=250000

maxconnections=8

mintxfee=0.0005

minrelaytxfee=0.0005

Для p2pool:

--max-conns 8

--outgoing-conns 4

 

Помним если поставим все по минимуму мы повысим скорость ноды. Но понизим свой доход. Надо найти золотую середину.

 

# И напоследок уж совсем тонкая настройка.

Воспользуемся командой "nice" для увеличения приоритета. Запустим "htop"

И на выбранном процессе клавишей "F7" увеличим приоритет демону bitcoin и python до -10 (в данном случае чем меньше значение тем больше приоритет, так что не удивляемся знаку "минус") (см. скрин выше "htop")

 

Какие недочеты: Даже наверное это важно надо создать отдельного пользователя и группу для всего выше изложенного. Т.Е. сделать разделение между администратором сервера и как бы пулом. Это для повышения безопасности.

 

Кому лень собирать демоны вот архив с уже готовыми демонами - кроме Bitcoin.

 

 

# Пока Финиш. Будут дополнения соответственно допишу.

 

 

#### Если это кому-то помогло меня можно отблагодарить :) на кошелек 14RTSbmixwthDNvxcLhXvuAyQfBHGXEXTc



59 комментариев




Рекомендуемые комментарии

Спасибо за How-to, если соберусь делать свою ноду инфа очень пригодится. В сети есть автоматический скрипт установки merged-mining ноды:

 

http://bitcoin.kyros.info/

Это отсюда:

https://bitcointalk.org/index.php?topic=651819.0;all

Возможно что-то пригодится .

Поделиться комментарием


Ссылка на комментарий

Отлично расписано, однозначно плюс, как кошелек восстановится однозначно отправлю немного биточков за труды :)

Поделиться комментарием


Ссылка на комментарий

Спасибо за How-to, если соберусь делать свою ноду инфа очень пригодится. В сети есть автоматический скрипт установки merged-mining ноды:

 

http://bitcoin.kyros.info/

Это отсюда:

https://bitcointalk.org/index.php?topic=651819.0;all

Возможно что-то пригодится .

там не все правильно 

Поделиться комментарием


Ссылка на комментарий

Отлично расписано, однозначно плюс, как кошелек восстановится однозначно отправлю немного биточков за труды :)

Спасибо!!! 

Поделиться комментарием


Ссылка на комментарий

Кошелек починил, отправил 10 баксов на пиво :)

https://blockchain.info/tx/26047878d7fcd4871513883a49eea0cf7a27dde94186d791220d28832a87f87a

Очень большое спасибо!!! Я как раз после свадьбы друга :)  :D  :wacko:  :blink:  Утром пиво очень нужно!!! Следующая статья будет о создании пула unomp+mpos и мергед.

Поделиться комментарием


Ссылка на комментарий

Очень большое спасибо!!! Я как раз после свадьбы друга :)  :D  :wacko:  :blink:  Утром пиво очень нужно!!! Следующая статья будет о создании пула unomp+mpos и мергед.

Это хорошо если пригодится, меня в этой статье больше всего стартовые скрипты заинтересовали, уж больно было лень их писать, а тут всё готовое,  я кстати  unomp на  rpi2  завёл,  правда с родной мордой, без  mpos, 1,2  гигахеша на скрипте тянет без проблем :D

Поделиться комментарием


Ссылка на комментарий

Это хорошо если пригодится, меня в этой статье больше всего стартовые скрипты заинтересовали, уж больно было лень их писать, а тут всё готовое,  я кстати  unomp на  rpi2  завёл,  правда с родной мордой, без  mpos, 1,2  гигахеша на скрипте тянет без проблем :D

Блин скрипты отдельная тема... Я как бы душой понимаю что надо сделать, а мозг и руки не фига не делают... :)

Поделиться комментарием


Ссылка на комментарий

Блин скрипты отдельная тема... Я как бы душой понимаю что надо сделать, а мозг и руки не фига не делают... :)

Вот вот, та же фигня, вы меня понимаете :D

Поделиться комментарием


Ссылка на комментарий

Есть несколько непонятных моментов:

1. Насколько вообще есть смысл ставить майнинг форков? Они же жрут место на диске, ресурсы процессора и памяти. Большой ли процент они дают относительно майнинга биткойнов?

2. Как определить что скачались полные блокчейны битка и форков?

3. Как автоматизированно проверять выход новых версий кошелька btc и форков, p2pool-а и обновлять их?

Поделиться комментарием


Ссылка на комментарий

Есть несколько непонятных моментов:

1. Насколько вообще есть смысл ставить майнинг форков? Они же жрут место на диске, ресурсы процессора и памяти. Большой ли процент они дают относительно майнинга биткойнов?

2. Как определить что скачались полные блокчейны битка и форков?

3. Как автоматизированно проверять выход новых версий кошелька btc и форков, p2pool-а и обновлять их?

1. Каждый сам решает нужно это или нет.

2. Посмотреть какой идет блок на bitcointalk.org в разделе монет

3. Ручками. Кроме BTC - обновление приходит автоматом.

Поделиться комментарием


Ссылка на комментарий

доброго,а теперь меня как пользователя пула интересует как мне подключиться к этому P2Pool,пока 2 s5 .Или с предыдущей статьи не изменились адреса?

Поделиться комментарием


Ссылка на комментарий

доброго,а теперь меня как пользователя пула интересует как мне подключиться к этому P2Pool,пока 2 s5 .Или с предыдущей статьи не изменились адреса?

Вы хотите подключится к моей ноде?

Поделиться комментарием


Ссылка на комментарий

node poolcrypto.org:9332

Подключение: (для antminer s5)

С начало прошиваем вот эту прошивку

Далее:

Адрес: stratum+tcp://poolcrypto.org:9332

Воркер: ваш_биткоин_адрес+1024

Пароль: любой

 

Набираемся терпения т.к. анты минут 30-50 раскачиваются и в течении нескольких дней выйдите на максимальный predicted payout

p.s. Нода в процессе тонкой настройки возможны очень кратковременные отключения для повышения доходности!!!

Поделиться комментарием


Ссылка на комментарий

ок,сегодня думаю найду время переключить и прошить s5

Поделиться комментарием


Ссылка на комментарий

пока ушел с вашей ноды,HW что-то начали сыпаться,прошивку тоже пришлось сбросить т.к. на вашей прошивке только одно лезвие работало на рыбах.позже попробую другой возможно более стабильный s5.

Поделиться комментарием


Ссылка на комментарий

пока ушел с вашей ноды,HW что-то начали сыпаться,прошивку тоже пришлось сбросить т.к. на вашей прошивке только одно лезвие работало на рыбах.позже попробую другой возможно более стабильный s5.

Дело не в ноде а в самих железках s5 не предназначены для p2pool.  у меня штук 5 только работаю в разгоне. остальные в штатном режиме. 

Поделиться комментарием


Ссылка на комментарий

лучший вариант -это сток?

 

P.S. я не говорил что нода плохая.

Поделиться комментарием


Ссылка на комментарий

Да, когда их гонишь HW прут и замерь сколько вольт выдает бп при включенном анте

Поделиться комментарием


Ссылка на комментарий

на централизованных пулах HW 0.0003 на обоих s5 при 400 мгц.БП дает 12,2 при работающих антах.

Поделиться комментарием


Ссылка на комментарий

на централизованных пулах HW 0.0003 на обоих s5 при 400 мгц.БП дает 12,2 при работающих антах.

Да это только с p2p это я тоже заметил

Поделиться комментарием


Ссылка на комментарий

может мне со стоковой прошивкой попробовать?

Поделиться комментарием


Ссылка на комментарий

может мне со стоковой прошивкой попробовать?

попробуй но там queue 8192

Поделиться комментарием


Ссылка на комментарий

со стандартной прошивкой вроде так же работает.Только вот твою прошивку не с первого раза почему -то снесло.

Поделиться комментарием


Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×