github.com/canonical/ubuntu-image@v0.0.0-20240430122802-2202fe98b290/internal/statemachine/pack_states.go (about)

     1  package statemachine
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  )
     8  
     9  var preparePackState = stateFunc{"prepare_pack", (*StateMachine).preparePack}
    10  
    11  // preparePack prepare the packStateMachine
    12  // This step must be run first
    13  func (stateMachine *StateMachine) preparePack() error {
    14  	packStateMachine := stateMachine.parent.(*PackStateMachine)
    15  
    16  	packStateMachine.YamlFilePath = filepath.Join(packStateMachine.Opts.GadgetDir, gadgetYamlPathInTree)
    17  
    18  	return nil
    19  }
    20  
    21  var populateTemporaryDirectoriesState = stateFunc{"populate_temporary_directories", (*StateMachine).populateTemporaryDirectories}
    22  
    23  // populateTemporaryDirectories fills tempDirs with dirs given as Opts
    24  func (stateMachine *StateMachine) populateTemporaryDirectories() error {
    25  	packStateMachine := stateMachine.parent.(*PackStateMachine)
    26  
    27  	files, err := osReadDir(packStateMachine.Opts.RootfsDir)
    28  	if err != nil {
    29  		return fmt.Errorf("Error reading rootfs dir: %s", err.Error())
    30  	}
    31  
    32  	for _, srcFile := range files {
    33  		srcFile := filepath.Join(packStateMachine.Opts.RootfsDir, srcFile.Name())
    34  		if err := osutilCopySpecialFile(srcFile, stateMachine.tempDirs.rootfs); err != nil {
    35  			return fmt.Errorf("Error copying rootfs: %s", err.Error())
    36  		}
    37  	}
    38  
    39  	// make the gadget directory under unpack
    40  	gadgetDir := filepath.Join(stateMachine.tempDirs.unpack, "gadget")
    41  
    42  	err = osMkdir(gadgetDir, 0755)
    43  	if err != nil && !os.IsExist(err) {
    44  		return fmt.Errorf("Error creating scratch/gadget directory: %s", err.Error())
    45  	}
    46  
    47  	gfiles, err := osReadDir(packStateMachine.Opts.GadgetDir)
    48  	if err != nil {
    49  		return fmt.Errorf("Error reading gadget dir: %s", err.Error())
    50  	}
    51  
    52  	for _, srcFile := range gfiles {
    53  		srcFile := filepath.Join(packStateMachine.Opts.GadgetDir, srcFile.Name())
    54  		if err := osutilCopySpecialFile(srcFile, gadgetDir); err != nil {
    55  			return fmt.Errorf("Error copying gadget: %s", err.Error())
    56  		}
    57  	}
    58  
    59  	return nil
    60  }