@ -21,6 +21,7 @@ import (
"github.com/kr/pty"
"github.com/kr/pty"
"github.com/op/go-logging"
"github.com/op/go-logging"
"os/signal"
)
)
const SocketAddress = "/tmp/oz-init-control"
const SocketAddress = "/tmp/oz-init-control"
@ -151,6 +152,8 @@ func parseArgs() *initState {
func ( st * initState ) runInit ( ) {
func ( st * initState ) runInit ( ) {
st . log . Info ( "Starting oz-init for profile: %s" , st . profile . Name )
st . log . Info ( "Starting oz-init for profile: %s" , st . profile . Name )
sigs := make ( chan os . Signal )
signal . Notify ( sigs , syscall . SIGTERM , os . Interrupt )
if st . profile . Networking . Nettype != "host" {
if st . profile . Networking . Nettype != "host" {
err := network . NetSetup ( st . network )
err := network . NetSetup ( st . network )
@ -192,6 +195,8 @@ func (st *initState) runInit() {
}
}
os . Stderr . WriteString ( "OK\n" )
os . Stderr . WriteString ( "OK\n" )
go st . processSignals ( sigs , s )
if err := s . Run ( ) ; err != nil {
if err := s . Run ( ) ; err != nil {
st . log . Warning ( "MsgServer.Run() return err: %v" , err )
st . log . Warning ( "MsgServer.Run() return err: %v" , err )
}
}
@ -247,7 +252,7 @@ func (st *initState) readXpraOutput(r io.ReadCloser) {
}
}
func ( st * initState ) launchApplication ( ) {
func ( st * initState ) launchApplication ( ) {
cmd := exec . Command ( st . profile . Path + ".unsafe" )
cmd := exec . Command ( st . profile . Path )
stdout , err := cmd . StdoutPipe ( )
stdout , err := cmd . StdoutPipe ( )
if err != nil {
if err != nil {
st . log . Warning ( "Failed to create stdout pipe: %v" , err )
st . log . Warning ( "Failed to create stdout pipe: %v" , err )
@ -361,3 +366,11 @@ func ptyStart(c *exec.Cmd) (ptty *os.File, err error) {
func ( is * initState ) handleChildExit ( pid int , wstatus syscall . WaitStatus ) {
func ( is * initState ) handleChildExit ( pid int , wstatus syscall . WaitStatus ) {
is . log . Debug ( "Child process pid=%d exited with status %d" , pid , wstatus . ExitStatus ( ) )
is . log . Debug ( "Child process pid=%d exited with status %d" , pid , wstatus . ExitStatus ( ) )
}
}
func ( st * initState ) processSignals ( c <- chan os . Signal , s * ipc . MsgServer ) {
for {
sig := <- c
st . log . Info ( "Recieved signal (%v)" , sig )
s . Close ( )
}
}