@@ -69,30 +69,19 @@ class VRouter {
6969 return new Promise ( ( resolve , reject ) => {
7070 sudo . exec ( cmd , option , ( err , stdout , stderr ) => {
7171 if ( err ) {
72- // console.log(err)
7372 reject ( err )
7473 } else {
75- // stderr && console.log(stderr)
7674 resolve ( stdout || stderr )
7775 }
7876 } )
7977 } )
8078 }
8179 localExec ( cmd ) {
82- // const specialCmd = [
83- // /^VBoxManage hostonlyif .*$/ig,
84- // /^VBoxManage startvm/ig,
85- // /^VBoxManage controlvm .* poweroff/ig,
86- // /^VBoxManage convertfromraw .ig
87- // ]
88-
8980 return new Promise ( ( resolve , reject ) => {
9081 exec ( cmd , ( err , stdout , stderr ) => {
9182 if ( err ) {
92- // console.log(err)
9383 reject ( err )
9484 } else {
95- // stderr && console.log(stderr)
9685 resolve ( stdout || stderr )
9786 }
9887 } )
@@ -116,6 +105,7 @@ class VRouter {
116105 return this . localExec ( cmd )
117106 }
118107 async getOSXNetworkService ( inf ) {
108+ // 返回 en{0-9} 对应的网络服务
119109 const cmd = `/usr/sbin/networksetup -listnetworkserviceorder`
120110 const output = await this . localExec ( cmd )
121111 const reg = / \( \d + \) ( .* ) \n \( H a r d w a r e P o r t : .* ?, D e v i c e : ( .* ) \) / g
@@ -446,37 +436,42 @@ EOF`
446436 }
447437 async startvm ( type = 'headless' , waitTime = 100 ) {
448438 const state = await this . getvmState ( )
449- if ( state !== 'running' ) {
450- const cmd = `${ VBoxManage } startvm --type ${ type } ${ this . config . vrouter . name } `
451- await this . localExec ( cmd )
452- await this . wait ( 1000 )
453- await this . sendKeystrokes ( )
454- // skip grub's waiting time
455- await this . wait ( 500 )
456- await this . sendKeystrokes ( )
457- await this . wait ( waitTime )
439+ if ( state === 'running' ) {
440+ return
458441 }
442+ const cmd = `${ VBoxManage } startvm --type ${ type } ${ this . config . vrouter . name } `
443+ await this . localExec ( cmd )
444+ await this . wait ( 1000 )
445+ await this . sendKeystrokes ( )
446+ // skip grub's waiting time
447+ await this . wait ( 500 )
448+ await this . sendKeystrokes ( )
449+ await this . wait ( waitTime )
459450 }
460451 async stopvm ( action = 'savestate' , waitTime = 100 ) {
461452 const serialPortState = await this . isSerialPortOn ( )
462453 const vmState = await this . getvmState ( )
463454 if ( vmState === 'running' ) {
464455 winston . debug ( `about to stop vm. current State: ${ vmState } . action: ${ action } ` )
465456 if ( action === 'force' ) {
457+ winston . debug ( 'vrouter poweroff by controlvm' )
466458 const cmd = `${ VBoxManage } controlvm ${ this . config . vrouter . name } poweroff`
467459 await this . localExec ( cmd )
468460 return this . wait ( waitTime )
469461 } else if ( action === 'poweroff' ) {
470462 if ( serialPortState ) {
471463 // poweroff from inside openwrt is more safer.
464+ winston . debug ( 'poweroff by serialExec' )
472465 await this . serialExec ( 'poweroff' , 'poweroff' )
473466 return this . wait ( 8000 )
474467 } else {
468+ winston . debug ( 'vrouter poweroff by controlvm' )
475469 const cmd = `${ VBoxManage } controlvm ${ this . config . vrouter . name } poweroff`
476470 await this . localExec ( cmd )
477471 return this . wait ( waitTime )
478472 }
479473 } else if ( action === 'savestate' ) {
474+ winston . debug ( 'vrouter savestate' )
480475 const cmd = `${ VBoxManage } controlvm ${ this . config . vrouter . name } savestate`
481476 await this . localExec ( cmd )
482477 return this . wait ( waitTime )
524519 return state
525520 }
526521 async isVRouterRunning ( ) {
527- // State: running (since 2017-06-16T02:13:09.066000000)
528- // VBoxManage showvminfo com.icymind.test --machinereadable | grep vmState
529- // vmState="running"
530522 const cmd = `${ VBoxManage } list runningvms`
531523 const stdout = await this . localExec ( cmd )
532524 const vms = stdout
551543 return this . localExec ( cmd )
552544 }
553545 async getHostonlyInf ( ) {
554- // return [correspondingInf, firstAvailableInf]
555546 const infs = await this . getAllInf ( )
556547 const reg = / ^ v b o x n e t \d + .* \n (?: \t .* \n ) * / img
557548 let correspondingInf = null
0 commit comments