Author Topic: 【技术交流】钱包启动时自动执行一些命令的一种方法  (Read 970 times)

0 Members and 1 Guest are viewing this topic.

Online abit

  • Committee member
  • Hero Member
  • *
  • Posts: 3369
    • View Profile
    • Steemit Blog
  • BitShares: abit
  • GitHub: abitmore
受托人运行过程中,可能遇到服务器重启后,需要自动启动钱包。官方wiki上有说明:
http://wiki.bitshares.org/index.php/Bitshares-x-delegate-how-to#Starting_the_client_after_a_reboot_or_crash

第一步,启动钱包
Code: [Select]
gdb ./bitshares_client --server --httpport 9989 --rpcuser user --rpcpassword pass
第二步,钱包启动后,在钱包的控制台输入下面的命令
Code: [Select]
open mywallet
 unlock 999999
 <enter password>
 wallet_delegate_set_block_production user123 true
 network_set_advanced_node_parameters {"desired_number_of_connections":100, "maximum_number_of_connections":200}

但是实际上,如果是服务器异常重启,是没有机会人工输入上述命令的,这样就会导致丢块。

为了解决这个问题,alt实现了一个用expect脚本来自动输入上述命令的方法,代码见 https://github.com/bitsuperlab/operation_tools/tree/master/restart
其他受托人也有各自的做法。

这里介绍的是另外一种方法:直接使用钱包程序的启动参数和配置文件,来实现启动时自动加载命令执行。
第一步,创建一个文件,比如命名为 startup.input ,内容如下
Code: [Select]
>>> open mywallet
>>> unlock 99999999 <password>
>>> wallet_delegate_set_block_production user123 true
>>> network_set_advanced_node_parameters {"desired_number_of_connections":100, "maximum_number_of_connections":200}
注意,每行以“>>> ”开头,也就是3个大于号加一个空格,后面跟要执行的命令。
命令里的参数,包括钱包名,密码,受托人账号等等,请根据自己情况修改。
至于密码写在文件里怎么让别人看不到,这里不详细讨论,有经验的请补充。

第二步,修改启动钱包的命令,在后面添加一个参数
Code: [Select]
gdb ./bitshares_client --server --httpport 9989 --rpcuser user --rpcpassword pass --input-log startup.input
这样,钱包启动时,就会自动加载 startup.input 里的命令了。

结束。

欢迎打赏或者拍砖 :D

BTS account: abit
BTS committee member: abit
BTS witness: in.abit

Offline alt

  • Hero Member
  • *****
  • Posts: 2613
    • View Profile
  • BitShares: baozi
Re: 【技术交流】钱包启动时自动执行一些命令的一种方法
« Reply #1 on: January 09, 2015, 08:03:49 am »
 +5%
密码最好不要写在文件中,VPS硬盘很容易被克隆,简单点的办法是自己把密码设置到环境变量中,在GDB中从环境变量中读出密码

Online abit

  • Committee member
  • Hero Member
  • *
  • Posts: 3369
    • View Profile
    • Steemit Blog
  • BitShares: abit
  • GitHub: abitmore
Re: 【技术交流】钱包启动时自动执行一些命令的一种方法
« Reply #2 on: January 09, 2015, 08:06:14 am »
+5%
密码最好不要写在文件中,VPS硬盘很容易被克隆,简单点的办法是自己把密码设置到环境变量中,在GDB中从环境变量中读出密码
在机器不重启的情况下可以这么做。
或者,创建一个ramdisk,把主贴所述包含密码的文件写在ramdisk上,这样密码只在内存中,克隆硬盘不会导致密码泄露。

机器重启怎么办?我能想到的两个思路:
1. 采用加密的文件系统来存放敏感数据
2. 使用一台“安全的”电脑来远程监控运行钱包的服务器,需要时,自动远程连接,创建包含密码的文件/设置密码环境变量
« Last Edit: January 10, 2015, 11:32:37 am by abit »
BTS account: abit
BTS committee member: abit
BTS witness: in.abit