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






* * * * * 4 голосов

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

Написано igorwhite, 19 June 2015 · 9829 Просмотров

p2pool bitcoin asic node
Создание собственной (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 update
sudo apt-get upgrade
sudo reboot
sudo apt-get dist-upgrade
sudo 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/src
make
# Скопируем 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.git
cd Unobtanium
chmod +x autogen.sh
chmod +x share/genbuild.sh
chmod +x src/leveldb/build_detect_platform
./autogen.sh
./configure
make
# Скопируем unobtanium-cli, unobtaniumd в папку /usr/local/bin
cd Unobtanium/src
sudo cp unobtanium-cli /usr/local/bin/unobtanium-cli
sudo cp unobtaniumd /usr/local/bin/unobtaniumd
К стати после "make" можно добавить ключ -j2 или -j4 где цифра "2 или 4" количество ядер процессора, тогда демоны будут быстрее компилироваться.

4.3 IXCoind(IXC):
git clone https://github.com/FrictionlessCoin/iXcoin.git
cd  iXcoin/src
make -f makefile.unix ixcoind
# Скопируем ixcoind в папку /usr/local/bin
sudo cp ixcoind /usr/local/bin/ixcoind
4.4 Fusioncoin(FSC):
git clone https://github.com/fusioncoin/fusioncoin.git
cd fusioncoin/src
make -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.git
cd  i0coin/src
make -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.git
cd huntercoin/src
make
# Скопируем huntercoind в папку /usr/local/bin/
sudo cp huntercoind /usr/local/bin/huntercoind
4.7 Devcoin(DVC):
git clone https://github.com/coinzen/devcoin.git
cd devcoin/src
make -f makefile.unix USE_PNP=1 devcoind
# Скопируем devcoind в папку /usr/local/bin/
sudo cp devcoind /usr/local/bin/devcoind
Так с компиляцией мы покончили.

5. Приступаем к созданию конфигов наших демонов:
Создаем папки:
mkdir ~/.bitcoin
mkdir ~/.namecoin
mkdir ~/.unobtanium
mkdir ~/.ixcoin
mkdir ~/.fusioncoin
mkdir ~/.i0coin
mkdir ~/.huntercoin
mkdir ~/.devcoin
5.1 Bitcoin(BTC):
# Создаем файл bitcoin.conf 
nano ~/.bitcoin/bitcoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=8332
port=8333
rpcallowip=127.0.0.1
disablewallet=1
mintxfee=0.00001
minrelaytxfee=0.00001
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x") 
5.2 Namecoin(NMC):
# Создаем файл namecoin.conf
nano ~/.namecoin/namecoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=8336
port=8334
rpcallowip=127.0.0.1
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
5.3 Unobtanium(UNO):
# Создаем файл unobtanium.conf
nano ~/.unobtanium/unobtanium.conf
# Копируем туда:
server=1
listen=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=65535
port=65534
rpcallow=127.0.0.1 
addnode=104.131.25.221
addnode=108.61.10.90
addnode=137.135.57.119
addnode=144.76.239.66
addnode=144.76.64.123
addnode=158.255.89.244
addnode=162.216.4.199
addnode=162.243.47.14
addnode=167.114.156.87
addnode=178.33.209.208
addnode=178.62.145.250
addnode=185.50.213.123
addnode=188.138.33.239
addnode=188.138.94.6
addnode=192.95.29.153
addnode=192.99.245.21
addnode=195.117.180.229
addnode=198.15.127.242
addnode=199.192.77.162
addnode=199.192.78.194
addnode=203.206.142.19
addnode=63.247.147.166
addnode=64.156.193.100
addnode=68.232.186.171
addnode=69.197.61.58
addnode=74.120.220.54
addnode=74.131.163.95
addnode=75.19.27.26
addnode=79.251.172.84
addnode=91.235.254.37
addnode=92.3.42.66
addnode=93.197.227.99
addnode=94.23.32.109
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
5.4 IXCoin(IXC):
# Создаем файл ixcoin.conf
nano ~/.ixcoin/ixcoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=8338
port=8337
rpcallowip=127.0.0.1
addnode=24.34.40.175
addnode=142.4.208.71
addnode=24.42.148.53
addnode=184.78.215.89
addnode=62.75.167.48
addnode=83.163.120.176
addnode=123.203.84.34
addnode=86.93.208.193
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
5.5 Fusioncoin(FSC):
# Создаем файл fusioncoin.conf
nano ~/.fusioncoin/fusioncoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=18491
port=8492
rpcallowip=127.0.0.1
miningalgo=sha256
addnode=54.193.11.95
addnode=54.255.130.210
addnode=198.23.242.92
addnode=121.199.12.227
addnode=54.185.94.219
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")

5.6 I0Coin(I0C):
# Создаем файл i0coin.conf
nano ~/.i0coin/i0coin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcport=7332
port=7333
rpcallowip=127.0.0.1
addnode=85.17.248.211:7333
addnone=198.154.60.61:7333
addnode=188.165.216.59:7333
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
5.7 Huntercoin(HUC):
# Создаем файл huntercoin.conf
gedit ~/.huntercoin/huntercoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=ПРИДУМАЙТЕ_СЛОЖНОЕ_ИМЯ
rpcpassword=ПРИДУМАЙТЕ_СЛОЖНЫЙ_ПАРОЛЬ
rpcallowip=127.0.0.1
rpcport=8399
port=8398
algo=sha256d
addnode=192.241.222.65
addnode=192.81.209.210
addnode=178.32.31.41
addnode=162.243.175.205
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
5.8 Devcoin(DVC):
# Создаем файл devcoin.conf
gedit ~/.devcoin/devcoin.conf
# Копируем туда:
server=1
daemon=1
rpcuser=userWzorDVC
rpcpassword=FCvhzdhrwq1MiPZX88YhHyKjDVsJzXFl6ui
rpcport=6333
port=6334
rpcallowip=127.0.0.1
# Сохраняем конфиг ("Ctrl+o" "Enter" Ctrl+x")
# Не забываем сохранять внесенную информацию!!!

6. Так файлы конфигурации создали. Сделаем базовые настройки безопасности:
Так как мы тут все параноики нам нужно защитить наши честно добытые коины.
Применим chmod 600 или 400 (все зависит от состояния паранойи) к нашим файлам конфигурации
Пример:
chmod 400 ~/.bitcoin/bitcoin.conf 
На основе примера повторить с остальными конфигами.
6.1 Farewell
sudo ufw enable
sudo ufw allow 8333/tcp  # bitcoin peer to peer
sudo ufw allow 8334/tcp  # namecoin peer to peer
sudo ufw allow 65534/tcp  # unobtanium peer to peer
sudo ufw allow 8337/tcp  # ixcoin peer to peer
sudo ufw allow 6334/tcp  # devcoin peer to peer
sudo ufw allow 7333/tcp  # i0coin peer to peer
sudo ufw allow 8492/tcp  # fusioncoin peer to peer
sudo ufw allow 8398/tcp  # huntercoin peer to peer
sudo ufw allow 9333/tcp  # P2pool peer to peer
sudo ufw allow 9332/tcp  # P2Pool connections and Web interface
# Не забываем открыть эти же порты на роутере если таковой есть. RPC порты ни где не открываем!!! 
# Если работаем по удаленке то открываем порт ssh
sudo ufw allow 22/tcp
7. Приступаем к запуску демонов. Первый запуск делаем в ручную потом добавим в автозагрузку.
# Запускаем демоны в терминале по очереди:
bitcoind
namecoind
unobtaniumd # Внимание первый запуск Unobtanium делаем с ключом -reindex
ixcoind
fusioncoind
i0coind
huntercoind
devcoind
#Демоны начинают синхронизироваться с сетью.

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

Ждем минут 5-10 и проверяем наши демоны:
bitcoin-cli getinfo
namecoind getinfo
unobtanium-cli getinfo
ixcoin-cli getinfo
fusioncoind getinfo
i0coind getinfo
huntercoind getinfo
devcoind getinfo

# Если все ОК то должны ​увидеть:
Прикрепленное изображение


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

8. Создаем скрипты автостарта и остановки наших демонов:
Основа скриптов это файл "skeleton" находящийся по пути /etc/init.d
cd /etc/init.d/
sudo cp skeleton bitcoind
sudo 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 script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Bitcoin Daemon"
NAME=/usr/local/bin/bitcoind
DAEMON=$NAME
DAEMON_ARGS="-daemon"
CLI=/usr/local/bin/bitcoin-cli
DAEMON_LOADER="/usr/bin/taskset 0x4 "$DAEMON
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CHUID=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 started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \
|| return 1
start-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 0
start-stop-daemon --start --chuid $CHUID --exec $CLI -- -rpcwait stop
return 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 occurred
stop_daemon_by_cli
start-stop-daemon --stop --quiet --chuid $CHUID --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $NAME

RETVAL="$?"
[ "$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 $PIDFILE
return "$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 $NAME
return 0
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|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_stop
case "$?" in
0|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_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 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"
Прикрепленное изображение


10. Так на основе скрипта Bitcoin делаем скрипт для запуска Unobtanim. Т.К. их демоны отличаются от других тем что используют отдельные утилиты мониторинга и контроля, это соответственно "bitcoin-cli' и "unobtanium-cli".
cd /etc/init.d
sudo cp bitcoind unobtaniumd
# Изменяем все пункты которые связаны с bitcoin и на unobtanium и проводим те же процедуры что делали со скриптом bitcoind (пункт 9). 
11. Создаем скрипт запуска Namecoin (NMC) на основе его делаем остальные:
cd /etc/init.d
sudo cd skeleton namecoind
sudo 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 script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Namecoin Daemon"
NAME=/usr/local/bin/namecoind
DAEMON=$NAME
DAEMON_ARGS="-daemon"
DAEMON_LOADER="/usr/bin/taskset 0x3 "$DAEMON
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CHUID=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 started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \
|| return 1
start-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 occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON
RETVAL="$?"
[ "$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 $PIDFILE
return "$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 $NAME
return 0
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|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_stop
case "$?" in
0|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_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

:

11.1 Создаем остальные скрипты и не забываем все повторять как в пункте 9.
cd /etc/init.d
sudo cp namecoind fusioncoind
sudo cp namecoind i0coind
sudo cp namecoind ixcoind
sudo cp namecoind devcoind
sudo cp namecoind huntercoind
# Все делаем как в пунктах 9-10
12. Наконец-то переходим к p2pool-у
# Копируем p2pool
git clone https://github.com/p2pool/p2pool.git
# На гитхабе есть много версий p2pool например можете скачать адаптив. Там больше выводится статистики.
git clone https://github.com/amarian12/p2pool-adaptive.git
# У Фореста очень простая по внешнему виду статистика поэтому поменяйте ее на более читаемую. Например:
https://github.com/blixnood/P2PoolExtendedFrontEnd
https://github.com/johndoe75/p2pool-node-status
# просто  скачайте архив и поменяйте все в папке "web-static"
12.1 Скрипт запуска p2pool через костыль :)
Скрипт создавался также для init.d но вот есть косяк. Во первых скрипт упорно не хочет ждать остальных демонов и запускается раньше и это не смотря на то что в нем прописан аргумент "$all". Второй это то что "python" (скрипт p2pool написан на нем) должен стартовать через утилиту "screen" а думать куда ее туда воткнуть у меня больше нет сил. И если честно я че-то утомился от этих скриптов. Поэтому я решил запускать этот скрипт другим скриптом.
# Скрипт основной. Создаем папку например "scripts'
# Ниже разберем что там и как.
mkdir ~/scripts
cd scripts
nano 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 script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="P2Pool Start"
NAME=python
DAEMON=/usr/bin/$NAME
DAEMON_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 "$DAEMON
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/home/user/script/$NAME
CHUID=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 started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON_LOADER --test > /dev/null \
|| return 1
start-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 occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON
RETVAL="$?"
[ "$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 $PIDFILE
return "$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 $NAME
return 0
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|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_stop
case "$?" in
0|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_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 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.d
sudo 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 INFO

case "$1" in

start)
echo "Starting P2Pool"
sleep 180
screen -dmS p2pool /home/user/scripts/run-p2pool start
;;
stop)
echo "Stopping P2Pool"
/home/user/scripts/run-p2pool stop
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac
exit 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

  • 14



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

 

http://bitcoin.kyros.info/

Это отсюда:

https://bitcointalk....ic=651819.0;all

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

    • 0

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

    • 0

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

 

http://bitcoin.kyros.info/

Это отсюда:

https://bitcointalk....ic=651819.0;all

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

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

    • 1

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

Спасибо!!! 

    • 0

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

https://blockchain.i...20d28832a87f87a

    • 0

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

https://blockchain.i...20d28832a87f87a

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

    • 0

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

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

    • 0

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

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

    • 0

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

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

    • 0

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

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

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

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

    • 0

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

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

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

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

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

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

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

    • 0

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

    • 0

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

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

    • 0

да

    • 0

node poolcrypto.org:9332

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

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

Далее:

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

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

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

 

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

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

    • 2

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

    • 0

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

    • 0

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

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

    • 0

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

 

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

    • 0

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

    • 0