github.com/apptainer/singularity@v3.1.1+incompatible/internal/app/starter/stage.go (about)

     1  // Copyright (c) 2018, Sylabs Inc. All rights reserved.
     2  // This software is licensed under a 3-clause BSD license. Please consult the
     3  // LICENSE.md file distributed with the sources of this project regarding your
     4  // rights to use or distribute this software.
     5  
     6  package starter
     7  
     8  import (
     9  	"net"
    10  	"os"
    11  
    12  	"github.com/sylabs/singularity/internal/pkg/runtime/engines"
    13  	sarterConfig "github.com/sylabs/singularity/internal/pkg/runtime/engines/config/starter"
    14  	"github.com/sylabs/singularity/internal/pkg/sylog"
    15  )
    16  
    17  // Stage performs container startup.
    18  func Stage(stage, masterSocket int, sconfig *sarterConfig.Config, engine *engines.Engine) {
    19  	var conn net.Conn
    20  	var err error
    21  
    22  	if masterSocket != -1 {
    23  		comm := os.NewFile(uintptr(masterSocket), "master-socket")
    24  		conn, err = net.FileConn(comm)
    25  		if err != nil {
    26  			sylog.Fatalf("failed to copy master unix socket descriptor: %s", err)
    27  			return
    28  		}
    29  		comm.Close()
    30  	} else {
    31  		conn = nil
    32  	}
    33  
    34  	if stage == 1 {
    35  		sylog.Debugf("Entering stage 1\n")
    36  		if err := engine.PrepareConfig(sconfig); err != nil {
    37  			sylog.Fatalf("%s\n", err)
    38  		}
    39  		if err := sconfig.Write(engine.Common); err != nil {
    40  			sylog.Fatalf("%s", err)
    41  		}
    42  		os.Exit(0)
    43  	} else {
    44  		sylog.Debugf("Entering stage 2\n")
    45  		if err := engine.StartProcess(conn); err != nil {
    46  			// write data to just tell master to not execute PostStartProcess
    47  			// in case of failure
    48  			if _, err := conn.Write([]byte("f")); err != nil {
    49  				sylog.Errorf("fail to send data to master: %s", err)
    50  			}
    51  			sylog.Fatalf("%s\n", err)
    52  		}
    53  	}
    54  }