Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
chain33-pai
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
szh
chain33-pai
Commits
5be21cb2
Commit
5be21cb2
authored
Mar 24, 2020
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
部分需手动重启树莓派的操作都改成自动重启
parent
79c54d0e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
251 deletions
+62
-251
app.ini
conf/app.ini
+1
-0
process.go
pkg/app/process.go
+32
-18
setting.go
pkg/setting/setting.go
+1
-0
node.go
routers/api/v1/node.go
+23
-232
pai.go
routers/api/v1/pai.go
+0
-1
router.go
routers/router.go
+2
-0
stop-pai.sh
stop-pai.sh
+3
-0
No files found.
conf/app.ini
View file @
5be21cb2
...
@@ -82,3 +82,4 @@ VersionUrl=https://raspserver.biqianbao.net/pai/latestversion
...
@@ -82,3 +82,4 @@ VersionUrl=https://raspserver.biqianbao.net/pai/latestversion
FeedBackUrl
=
https://raspserver.biqianbao.net/pai/feedback
FeedBackUrl
=
https://raspserver.biqianbao.net/pai/feedback
IsCompleteUrl
=
https://raspserver.biqianbao.net/pai/iscomplete
IsCompleteUrl
=
https://raspserver.biqianbao.net/pai/iscomplete
RaspberryServer
=
112.124.4.47
RaspberryServer
=
112.124.4.47
StopPai
=
/home/pi/chain33-pai/stop-pai.sh
pkg/app/process.go
View file @
5be21cb2
...
@@ -61,7 +61,7 @@ var Bityuan ProcessInfo
...
@@ -61,7 +61,7 @@ var Bityuan ProcessInfo
var
UpdateInfo
updateInfo
var
UpdateInfo
updateInfo
var
NodeError
error
var
NodeError
error
var
ServerStatus
Server
var
ServerStatus
Server
var
IsReboot
bool
//当更新完成 true表示 还没有重启 需要用户手动重启树莓派
var
RebootP
bool
func
getProcessInfo
(
keyfile
string
)
string
{
func
getProcessInfo
(
keyfile
string
)
string
{
var
buffer
bytes
.
Buffer
//
var
buffer
bytes
.
Buffer
//
...
@@ -480,20 +480,31 @@ func AutoUpdate(tick *time.Ticker) {
...
@@ -480,20 +480,31 @@ func AutoUpdate(tick *time.Ticker) {
for
{
for
{
select
{
select
{
case
<-
tick
.
C
:
case
<-
tick
.
C
:
if
!
DPercent
.
Flag
{
//没有其他任务占用
if
RebootP
{
//重启pai
if
IsReboot
{
err
:=
KillPai
()
//更新没有reboot 需要reboot
//先安全close 节点 防止节点数据异常
SafeCloseNode
()
//再reboot
RebootPai
()
}
err
:=
AutoUpdatePai
()
if
err
!=
nil
{
if
err
!=
nil
{
tlog
.
Error
(
"autoupdatepai"
,
"err"
,
err
)
tlog
.
Error
(
"kill pai"
,
"err"
,
err
)
}
else
{
err
:=
StartProcess
(
setting
.
Chain33Pai
.
Start
)
if
err
!=
nil
{
tlog
.
Error
(
"restart pai fail"
,
"err"
,
err
)
}
else
{
tlog
.
Info
(
"kill restart pai success "
)
}
}
}
else
{
if
!
DPercent
.
Flag
{
//没有其他任务占用
DPercent
.
Flag
=
true
err
:=
AutoUpdatePai
()
if
err
!=
nil
{
tlog
.
Error
(
"autoupdatepai"
,
"err"
,
err
)
}
tlog
.
Info
(
"autoupdatepai"
,
"err"
,
GetVersion
())
DPercent
.
Flag
=
false
}
}
tlog
.
Info
(
"autoupdatepai"
,
"err"
,
GetVersion
())
}
}
}
}
}
}
}
}
...
@@ -543,11 +554,15 @@ func AutoUpdatePai() error {
...
@@ -543,11 +554,15 @@ func AutoUpdatePai() error {
tlog
.
Error
(
"rm wait"
,
"err"
,
err
)
tlog
.
Error
(
"rm wait"
,
"err"
,
err
)
return
err
return
err
}
}
IsReboot
=
true
RebootP
=
true
return
nil
}
func
KillPai
()
error
{
err
:=
StartProcess
(
setting
.
Chain33Pai
.
StopPai
)
if
err
!=
nil
{
tlog
.
Error
(
"stop chain33 pai "
,
"err"
,
err
)
}
return
nil
return
nil
}
}
func
RebootPai
()
{
cmd
:=
exec
.
Command
(
"reboot"
)
cmd
.
Run
()
}
\ No newline at end of file
pkg/setting/setting.go
View file @
5be21cb2
...
@@ -87,6 +87,7 @@ type Chain33_pai struct {
...
@@ -87,6 +87,7 @@ type Chain33_pai struct {
FeedBackUrl
string
FeedBackUrl
string
IsCompleteUrl
string
IsCompleteUrl
string
RaspberryServer
string
RaspberryServer
string
StopPai
string
}
}
var
Chain33Pai
=&
Chain33_pai
{}
var
Chain33Pai
=&
Chain33_pai
{}
...
...
routers/api/v1/node.go
View file @
5be21cb2
...
@@ -35,12 +35,10 @@ func ResetWallet(c *gin.Context) {
...
@@ -35,12 +35,10 @@ func ResetWallet(c *gin.Context) {
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
return
return
}
}
cmd
:=
exec
.
Command
(
"kill"
,
"-9"
,
app
.
Bityuan
.
Pid
)
t
,
err
:=
app
.
SafeCloseNode
()
err
:=
cmd
.
Start
()
if
err
!=
nil
||
!
t
{
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
ENV_ERROR
,
"fail to reset wallet"
)
tlog
.
Error
(
"ResetWallet"
,
"kill error "
,
err
)
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
err
)
return
return
}
}
err
=
os
.
RemoveAll
(
fmt
.
Sprintf
(
"%s/wallet"
,
path
.
Dir
(
app
.
Bityuan
.
Path
)))
err
=
os
.
RemoveAll
(
fmt
.
Sprintf
(
"%s/wallet"
,
path
.
Dir
(
app
.
Bityuan
.
Path
)))
...
@@ -62,220 +60,6 @@ func ResetWallet(c *gin.Context) {
...
@@ -62,220 +60,6 @@ func ResetWallet(c *gin.Context) {
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
}
}
//钱包更新
func
UpdateNode
(
c
*
gin
.
Context
){
appG
:=
app
.
Gin
{
C
:
c
}
if
app
.
BityuanFlag
{
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS_RUNNING
,
"node is updating"
)
return
}
if
app
.
NodeError
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"node internal error,could not start node"
)
return
}
absPath
:=
app
.
GetAbsPath
(
setting
.
BityuanSetting
.
Name
)
+
"/"
pwd
,
err
:=
os
.
Getwd
()
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
ERROR
,
"get pwd err"
)
return
}
pwd
=
pwd
+
"/"
app
.
BityuanFlag
=
true
app
.
UpdateInfo
.
Flag
=
false
setting
.
FreshVersion
()
var
pai
pai_service
.
Pai
latestVersion
,
err
:=
pai
.
GetPaiLatestVersion
(
int32
(
1
))
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"get online version err"
)
app
.
BityuanFlag
=
false
app
.
UpdateInfo
.
Flag
=
true
return
}
if
latestVersion
==
setting
.
BityuanSetting
.
Version
{
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"current version is latest"
)
return
}
if
latestVersion
==
""
{
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
NETWORK_ERROR
,
"network error,please checkout your network then try again"
)
return
}
stderr
:=
bytes
.
NewBuffer
(
nil
)
name
:=
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
".tar.gz"
url
:=
setting
.
Chain33Pai
.
DownloadUrl
+
name
tlog
.
Info
(
"UpdateNode"
,
"dir"
,
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
)
tlog
.
Info
(
"UpdateNode"
,
"path"
,
absPath
)
err
=
app
.
DownLoadFile
(
url
,
name
,
int32
(
1
))
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
DOWNLOAD_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//解压缩文件
tar
:=
exec
.
Command
(
"tar"
,
"-xvf"
,
name
)
tar
.
Stderr
=
stderr
err
=
tar
.
Start
()
if
err
!=
nil
{
tlog
.
Error
(
"tar"
,
"err"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
TAR_XVF_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
tar
.
Wait
()
if
err
!=
nil
{
tlog
.
Error
(
"tar"
,
"err"
,
stderr
.
String
())
appG
.
Response
(
http
.
StatusOK
,
e
.
TAR_XVF_ERROR
,
stderr
.
String
())
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//备份原文件 确保没有alias 关联
bak
:=
exec
.
Command
(
"cp"
,
absPath
+
setting
.
BityuanSetting
.
Name
,
absPath
+
setting
.
BityuanSetting
.
Name
+
".bak"
)
bak
.
Stderr
=
stderr
err
=
bak
.
Start
()
if
err
!=
nil
{
tlog
.
Error
(
"bak"
,
"err"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
bak
.
Wait
()
if
err
!=
nil
{
tlog
.
Error
(
"bak"
,
"err"
,
stderr
.
String
())
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
stderr
.
String
())
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//备份配置文件
bakconf
:=
exec
.
Command
(
"cp"
,
absPath
+
"bityuan.toml"
,
absPath
+
"bityuan.toml.bak"
)
bakconf
.
Stderr
=
stderr
err
=
bakconf
.
Start
()
if
err
!=
nil
{
tlog
.
Error
(
"bakconf"
,
"err"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
bakconf
.
Wait
()
if
err
!=
nil
{
tlog
.
Error
(
"bakconf"
,
"err"
,
stderr
.
String
())
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
stderr
.
String
())
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
t
,
err
:=
app
.
SafeCloseNode
()
if
err
!=
nil
||
!
t
{
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
err
)
return
}
//替换原执行文件
err
=
os
.
Chmod
(
pwd
+
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
setting
.
BityuanSetting
.
Name
,
0755
)
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
os
.
Chmod
(
pwd
+
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
setting
.
BityuanSetting
.
Name
+
"-cli"
,
0755
)
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
mv
:=
exec
.
Command
(
"mv"
,
pwd
+
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
setting
.
BityuanSetting
.
Name
,
absPath
)
mv
.
Stderr
=
stderr
err
=
mv
.
Start
()
if
err
!=
nil
{
tlog
.
Error
(
"mv"
,
"err"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
mv
.
Wait
()
if
err
!=
nil
{
tlog
.
Error
(
"stderr:"
,
"err"
,
stderr
.
String
())
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
stderr
.
String
())
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
mv2
:=
exec
.
Command
(
"mv"
,
pwd
+
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
setting
.
BityuanSetting
.
Name
+
"-cli"
,
absPath
)
mv2
.
Stderr
=
stderr
err
=
mv2
.
Start
()
if
err
!=
nil
{
tlog
.
Error
(
"mv2"
,
"err"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
mv2
.
Wait
()
if
err
!=
nil
{
tlog
.
Error
(
"stderr2:"
,
"err"
,
stderr
.
String
())
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
stderr
.
String
())
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//mv2 := exec.Command("mv",setting.BityuanSetting.Name+"_"+latestVersion+"/"+"bityuan.toml",".")
//err = mv2.Start()
//if err != nil {
// tlog.Error("mv2",err)
// appG.Response(http.StatusOK, e.MV_ERROR, err)
// app.UpdateInfo.Flag = true
// app.BityuanFlag = false
// return
//}
//err = mv2.Wait()
//if err != nil {
// tlog.Error("mv2",err)
// appG.Response(http.StatusOK, e.MV_ERROR, err)
// app.UpdateInfo.Flag = true
// app.BityuanFlag = false
// return
//}
remove
:=
exec
.
Command
(
"rm"
,
"-rf"
,
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
,
name
)
remove
.
Stderr
=
stderr
err
=
remove
.
Start
()
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
RM_ERROR
,
err
)
app
.
DPercent
.
Flag
=
false
return
}
err
=
remove
.
Wait
()
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
RM_ERROR
,
stderr
.
String
())
app
.
DPercent
.
Flag
=
false
return
}
//err=app.StartProcess(setting.Chain33Pai.Auto)
//
//if err != nil {
// app.UpdateInfo.Flag = true
// app.BityuanFlag = false
// appG.Response(http.StatusOK, e.NODE_ERROR,"start auto sh err")
// return
//}
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"update job started"
)
}
//钱包更新,只替换执行文件和配置文件
//钱包更新,只替换执行文件和配置文件
//具体更新逻辑不再代码实现
//具体更新逻辑不再代码实现
//oss下载包打包要保持执行权限
//oss下载包打包要保持执行权限
...
@@ -384,9 +168,16 @@ func UpdateNodeNew(c *gin.Context){
...
@@ -384,9 +168,16 @@ func UpdateNodeNew(c *gin.Context){
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
return
return
}
}
err
=
app
.
StartProcess
(
setting
.
Chain33Pai
.
Auto
)
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"fail to restart node"
)
tlog
.
Error
(
"UpdateNodeNew"
,
"auto.sh error "
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
app
.
UpdateInfo
.
Flag
=
true
app
.
UpdateInfo
.
Flag
=
true
app
.
IsReboot
=
true
//需要重启
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"update job started"
)
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"update job started"
)
}
}
...
@@ -398,21 +189,12 @@ func ResetNode(c* gin.Context){
...
@@ -398,21 +189,12 @@ func ResetNode(c* gin.Context){
return
return
}
}
app
.
BityuanFlag
=
true
app
.
BityuanFlag
=
true
kill
:=
exec
.
Command
(
"kill"
,
"-9"
,
app
.
Bityuan
.
Pid
)
_
,
err
:=
app
.
SafeCloseNode
()
err
:=
kill
.
Start
()
if
err
!=
nil
{
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"kill
node err"
)
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"
node err"
)
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
return
return
}
}
err
=
kill
.
Wait
()
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"kill node cmd wait err"
)
app
.
BityuanFlag
=
false
return
}
err
=
os
.
RemoveAll
(
fmt
.
Sprintf
(
"%s/datadir"
,
path
.
Dir
(
app
.
Bityuan
.
Path
)))
err
=
os
.
RemoveAll
(
fmt
.
Sprintf
(
"%s/datadir"
,
path
.
Dir
(
app
.
Bityuan
.
Path
)))
if
err
!=
nil
{
if
err
!=
nil
{
app
.
BityuanFlag
=
false
app
.
BityuanFlag
=
false
...
@@ -463,7 +245,6 @@ func NodeInfo(c *gin.Context){
...
@@ -463,7 +245,6 @@ func NodeInfo(c *gin.Context){
appG
:=
app
.
Gin
{
C
:
c
}
appG
:=
app
.
Gin
{
C
:
c
}
var
client
chain33
.
PaiClient
var
client
chain33
.
PaiClient
_
,
err
:=
client
.
Version
()
_
,
err
:=
client
.
Version
()
if
err
!=
nil
{
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"node down"
)
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"node down"
)
return
return
...
@@ -471,6 +252,16 @@ func NodeInfo(c *gin.Context){
...
@@ -471,6 +252,16 @@ func NodeInfo(c *gin.Context){
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"node is running"
)
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"node is running"
)
}
}
func
RestartNode
(
c
*
gin
.
Context
){
appG
:=
app
.
Gin
{
C
:
c
}
_
,
err
:=
app
.
SafeCloseNode
()
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"node err"
)
return
}
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"node restarted"
)
}
//反馈信息
//反馈信息
func
FeedBack
(
c
*
gin
.
Context
){
func
FeedBack
(
c
*
gin
.
Context
){
appG
:=
app
.
Gin
{
C
:
c
}
appG
:=
app
.
Gin
{
C
:
c
}
...
...
routers/api/v1/pai.go
View file @
5be21cb2
...
@@ -234,7 +234,6 @@ func UpdatePaiNew(c *gin.Context) {
...
@@ -234,7 +234,6 @@ func UpdatePaiNew(c *gin.Context) {
}
}
app
.
DPercent
.
Flag
=
false
app
.
DPercent
.
Flag
=
false
app
.
IsReboot
=
true
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
nil
)
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
nil
)
}
}
...
...
routers/router.go
View file @
5be21cb2
...
@@ -45,6 +45,8 @@ func InitRouter() *gin.Engine {
...
@@ -45,6 +45,8 @@ func InitRouter() *gin.Engine {
apiv1
.
POST
(
"/escrowpassword"
,
v1
.
EscrowPasswd
)
apiv1
.
POST
(
"/escrowpassword"
,
v1
.
EscrowPasswd
)
//pai更新完成用户手动重启设备
//pai更新完成用户手动重启设备
//apiv1.POST("/isreboot",v1.IsReBoot)
//apiv1.POST("/isreboot",v1.IsReBoot)
//重启节点
apiv1
.
POST
(
"/restartnode"
,
v1
.
RestartNode
)
return
r
return
r
}
}
...
...
stop-pai.sh
0 → 100644
View file @
5be21cb2
#!/bin/bash
ps aux |
grep
"chain33-pai"
|
grep
-v
grep
|
awk
'{print $2}'
| xargs
-i
kill
{}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment