操作方法:在树莓派上安装NRS客户端

From Nxt Wiki
Jump to: navigation, search
This page is a translated version of the page How-To:InstallNRSRaspberryPi and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎italiano • ‎Nederlands • ‎português do Brasil • ‎русский • ‎українська • ‎中文(简体)‎

1 树莓派上安装NXT和NRS客户端

最初由barbarosincilernextcoin.org上创建。如果你认为有价值,请捐赠一些NXT给他的地址7121642459245273749。安装在树莓派上的Java包由 davethetrousers写成, 捐赠帐号:14923118471272229432

Raspbian和NRS客户端都在树莓派Raspberry Pi上运行得很好。当打开Web客户端和解锁帐户, CPU使用率大约是〜15-20%。如果没有Web客户端打开(仍然未锁定),它大部分时间小于〜10%(偶尔峰更高,有时可能会秒杀到满负荷)。内存使用量大约是100MB。

一旦这个软件安装在您的树莓派Raspberry Pi上,它会在系统启动时自动启动。您可以使用远程桌面从另一台PC进行管理。

本教程做以下假设:

  • 安装电脑运行的是Windows,IP为192.168.1.20
  • 您的网络路由器的IP地址为192.168.1.1

1.1 基本Raspbian安装指南

  1. 下载并安装Raspbian
    • [1]下载Raspbian 镜像
    • [2]下载diskimager。
    • 在SD卡上安装镜像,并从SD卡启动树莓派。你应该看到一个配置菜单。
      • 展开文件系统,并更改密码。
      • 启动到桌面。
      • 设置国际化的选项(语言,键盘和时区)
      • 在高级选项启用SSH并设置像“RPI”主机名。
      • 重新启动。

现在,你应该可以看到一个桌面,系统已在运行。

1.2 更新系统

  1. 打开的bash命令行(LXTerminal),键入以下内容,然后按照说明操作:
    • sudo apt-get upgrade
      sudo apt-get dist-update
  2. 请检查您的IP配置
    • 你的草莓派将从DHC中获得一个IP地址,这可以通过在shell中使用命令行确认: ifconfig 。要配置一个静态IP,打开的bash命令行(LXTerminal),然后键入以下内容:
      • sudo nano /etc/network/interfaces
    • Change the following entry from:
      iface eth0 inet dhcp
      To:
      iface eth0 inet static
      address 192.168.1.10
      netmask 255.255.255.0
      gateway 192.168.1.1
      network 192.168.1.0
      broadcast 192.168.1.255
    • 按CTRL+O 存文件
    • 按CTRL+ X退出
    • 重启

1.3 安装XRDP(RDP服务器)

  1. 打开的bash命令行(LXTerminal),然后键入以下内容,然后按照说明操作:
    • sudo apt-get install xrdp
      sudo apt-get upgrade xrdp
  2. 现在,您可以使用Microsoft远程桌面,在你的树莓派上远程工作。
    • 在windows里,开始 -> 打开 -> 键入 "mstsc"
    • 输入你的树莓派的IP地址 (192.168.1.10), 连接并用密码登录


1.4 路由器/防火墙端口转发

  1. 请务必在网络路由器上转发TCP端口7874 你的树莓派IP(192.168.1.10)

1.5 安装NXT客户端

您有两种可能的选择:

  1. 在你的树莓派上使用 包括Oracle JRE的单独包
    1. 从 davethetrousers的镜像中用wget下载tar.gz文件,并解压:
      • wget http://109.230.224.65/~nxt/nxt_rasppi.tar.gz
        tar -xf nxt_rasppi.tar.gz
      • 编辑nxt文件夹中的run_nxt.sh文件,使得树莓派每次重启都会自动运行NRS客户端:
        • nano nxt/run_nxt.sh
      • Copy the code located at the end of this document, and paste it into your file.
      • Press CTRL and O at the same time to save
      • Press CTRL and X together to exit.
      • Enter: crontab -e
      • Insert the code at the end of the file:
        @reboot /home/pi/nxt/run_nxt.sh
      • Press CTRL and O at the same time to save
      • Press CTRL and X together to exit.
    2. 现在你的树莓派应该可以在启动时载入NRS客户端。

1.6 NXT软件的停止脚本

  1. /home/pi/nxt/文件夹中新建一个文件,命名为 "stop_nxt.sh":
    nano nxt/stop_nxt.sh
    1. 如果你使用 davethetrousers' Java包, 输入:
      /home/pi/nxt/ejre1.7.0_45/bin/java -jar /home/pi/nxt/start.jar STOP.PORT=11111 STOP.KEY=123456 --stop
    2. 如果你直接下载NXT,输入:
      /usr/bin/java -jar /home/pi/nxt/start.jar STOP.PORT=11111 STOP.KEY=123456 --stop
  2. 按CTRL+O 保存。
  3. 按CTRL+X 退出。

现在你可以在bash命令行通过下面命令停止客户端:
sudo bash nxt/stop_nxt.sh 在你重启你的树莓派之前,你应该用该脚本以避免损害块链!

现在你可以重启系统:
sudo reboot

1.7 Connecting from your PC instead of localhost

  1. Create a nxt.properties file under the nxt/conf/ folder. You can create the file from command line using the command nano nxt/conf/nxt.properties and write the following in it. Make sure to modify the IP accordingly to yours:
    nxt.allowedBotHosts=127.0.0.1; localhost; 192.168.1.20; 0:0:0:0:0:0:0:1;
    nxt.allowedUserHosts=127.0.0.1; localhost; 192.168.1.20; 0:0:0:0:0:0:0:1;
  2. Press CTRL and O at the same time to save
  3. Press CTRL and X together to exit

1.8 用NRS客户端手动开启锻造

你需要登录你的网页浏览器以开始锻造。

  1. 打开 https://192.168.1.10:7875
  2. 确认SSL的通知
  3. 点击挂锁
  4. 用你的密码,解锁您的帐户(解锁一个地址需要几秒钟)。

如果客户端被解锁,您可以关闭浏览器,系统会开始锻造。

1.9 处理NRS和Java错误

你可以检查NXT文件夹中java的日志文件(nxtout.txt和nxterr.txt),以寻找错误!

1.10 有问题?

可见FAQ和 "常见问题及解决方法common problems and resolutions"!

1.11 其他有用的命令和工具

1.11.1 挂载本地Windows硬盘驱动器远程与树莓派Raspberry Pi数据共享

sudo mount -t cifs //192.168.1.20/c$ /mnt -o user=myusername 其中:

  • x = 您的Windows电脑的IP地址
  • myusername=你在windows电脑上的用户名

1.11.2 开始菜单改变raspbian设置(语言,键盘,时区,主机名等)

sudo raspi-config

1.11.3 检查内置的Java配置

sudo update-alternatives --config java

1.11.4 用putty远程管理

你可以用工具“putty”通过命令行SSL连接管理树莓派。从[3]下载工具。

1.12 run_nxt.sh文件

在你的 run_nxt.sh脚本中使用下面的代码:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          NXTserver
# Required-Start:    $local_fs $remote_fs $network $syslog $named $sshd
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop NXT server
### END INIT INFO

if [ `id -u` != "0" ] && [ "$1" = "start" -o "$1" = "stop" ] ; then
  echo "You must be root to start/stop nxt."
  exit 1
fi

# Settings
nxtdir=/home/pi/nxt
nxt=nxt.jar
java=/usr/bin/java
nxtpid=/var/run/nxt.pid
nxtlog=/home/pi/nxt/nxt.log
nxtuser=pi
nxtgroup=pi
nxtnice=19
timeout=700
maxmem=120
# end Settings

# check for exist files and dirs
test -d $nxtdir || exit 0
test -f $nxtdir/$nxt || exit 0
test -f $java || exit 0

# make sure $nxtdir is ours!
chown -R $nxtuser:$nxtgroup $nxtdir

. /lib/lsb/init-functions

function status {

    start-stop-daemon -T --pidfile "$nxtpid" && echo "NXT server is started." \
    || { echo "NXT server is stopped." ; return 1; }

    return 0;
}

case "$1" in
    start)
        log_daemon_msg "Starting NXT server..." "" || true

        # check if server is running
        if [ -e $nxtpid ]; then
            pid=`cat $nxtpid`
            var=`ps -p$pid | wc -l`

            if [ $var -lt "2" ]; then
                # clear logfile
                echo -n > $nxtlog
            else
                echo -n " NXT server is already running!"
                log_end_msg 0 || true
                exit 0
            fi
        fi
        
        # Enable Debug for more info when starting NXT
        if cat $nxtdir/conf/nxt.properties | grep -q  "nxt.debug="; then
            if cat $nxtdir/conf/nxt.properties | grep -q  "nxt.debug=true"; then
                # Debug is enabled, nothing todo...
                echo -n ""
            elif cat $nxtdir/conf/nxt.properties | grep -q  "nxt.debug=false"; then
                echo nxt.debug=true >> $nxtdir/conf/nxt.properties
            fi
        else
            echo nxt.debug=true >> $nxtdir/conf/nxt.properties
        fi
                
        # n minute timeout.
        sleep $timeout &
        timerPid=$!

        # check log file and generate status-msg; will be killed when server is started or timeout hit
        tail -q -n0 -F --pid=$timerPid $nxtlog 2> /dev/null | while read line; do

            if echo $line | grep -q  "Scanning blockchain"; then
                echo -n " Scanning blockchain"            
            elif echo $line | grep -q  "processed block"; then
                echo -n "."            
            fi

            if echo $line | grep -q  "started successfully."; then
                echo -n "NXT server started successfully."
                log_end_msg 0 || true
                # stop the timer..
                kill $timerPid > /dev/null 2>&1
				$nxtdir/traffic_shaper.sh > /dev/null 2>&1
            fi
        done &
        
        # start server
        if start-stop-daemon --start --name nxt --nicelevel $nxtnice --chuid $nxtuser:$nxtgroup --pidfile $nxtpid -m --chdir $nxtdir --exec $java >> $nxtlog 2>&1 -- -Xmx"$maxmem"m -cp $nxt:lib/*:conf nxt.Nxt >> $nxtlog 2>&1 & then
            # wait for the timer to expire (or be killed)
            wait %sleep > /dev/null 2>&1
        else
            log_end_msg 1 || true
        fi
        ;;
    stop)
        log_daemon_msg "Stopping NXT server..." || true

        # check if server is running
        if start-stop-daemon --stop --pidfile $nxtpid > /dev/null 2>&1; then
            
            while status > /dev/null; do
                sleep 1;
            done
            
            echo -n " NXT server stopped."
            log_end_msg 0 || true
            rm $nxtpid  > /dev/null 2>&1
        else 
            echo -n " NXT server is not running!"
            log_end_msg 0 || true
            exit 0
        fi
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    status)
        status
        ;;
    *)
        echo "usage:`basename $0` start | stop | restart | status"
        exit 1
        ;;
esac