chroot

package
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2017 License: MPL-2.0 Imports: 23 Imported by: 0

Documentation

Overview

The chroot package is able to create an Amazon AMI without requiring the launch of a new instance for every build. It does this by attaching and mounting the root volume of another AMI and chrooting into that directory. It then creates an AMI from that attached drive.

Index

Constants

View Source
const BuilderId = "mitchellh.amazon.chroot"

The unique ID for this builder

View Source
const LOCK_EX = 2

See: http://linux.die.net/include/sys/file.h

View Source
const LOCK_NB = 4
View Source
const LOCK_UN = 8

Variables

This section is empty.

Functions

func AvailableDevice

func AvailableDevice() (string, error)

AvailableDevice finds an available device and returns it. Note that you should externally hold a flock or something in order to guarantee that this device is available across processes.

func RunLocalCommands

func RunLocalCommands(commands []string, wrappedCommand CommandWrapper, ctx interpolate.Context, ui packer.Ui) error

func ShellCommand

func ShellCommand(command string) *exec.Cmd

ShellCommand takes a command string and returns an *exec.Cmd to execute it within the context of a shell (/bin/sh).

Types

type Builder

type Builder struct {
	// contains filtered or unexported fields
}

func (*Builder) Cancel

func (b *Builder) Cancel()

func (*Builder) Prepare

func (b *Builder) Prepare(raws ...interface{}) ([]string, error)

func (*Builder) Run

func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error)

type Cleanup

type Cleanup interface {
	CleanupFunc(multistep.StateBag) error
}

Cleanup is an interface that some steps implement for early cleanup.

type CommandWrapper

type CommandWrapper func(string) (string, error)

CommandWrapper is a type that given a command, will possibly modify that command in-flight. This might return an error.

type Communicator

type Communicator struct {
	Chroot     string
	CmdWrapper CommandWrapper
}

Communicator is a special communicator that works by executing commands locally but within a chroot.

func (*Communicator) Download

func (c *Communicator) Download(src string, w io.Writer) error

func (*Communicator) DownloadDir

func (c *Communicator) DownloadDir(src string, dst string, exclude []string) error

func (*Communicator) Start

func (c *Communicator) Start(cmd *packer.RemoteCmd) error

func (*Communicator) Upload

func (c *Communicator) Upload(dst string, r io.Reader, fi *os.FileInfo) error

func (*Communicator) UploadDir

func (c *Communicator) UploadDir(dst string, src string, exclude []string) error

type Config

type Config struct {
	common.PackerConfig       `mapstructure:",squash"`
	awscommon.AMIBlockDevices `mapstructure:",squash"`
	awscommon.AMIConfig       `mapstructure:",squash"`
	awscommon.AccessConfig    `mapstructure:",squash"`

	ChrootMounts      [][]string                 `mapstructure:"chroot_mounts"`
	CommandWrapper    string                     `mapstructure:"command_wrapper"`
	CopyFiles         []string                   `mapstructure:"copy_files"`
	DevicePath        string                     `mapstructure:"device_path"`
	FromScratch       bool                       `mapstructure:"from_scratch"`
	MountOptions      []string                   `mapstructure:"mount_options"`
	MountPartition    int                        `mapstructure:"mount_partition"`
	MountPath         string                     `mapstructure:"mount_path"`
	PostMountCommands []string                   `mapstructure:"post_mount_commands"`
	PreMountCommands  []string                   `mapstructure:"pre_mount_commands"`
	RootDeviceName    string                     `mapstructure:"root_device_name"`
	RootVolumeSize    int64                      `mapstructure:"root_volume_size"`
	SourceAmi         string                     `mapstructure:"source_ami"`
	SourceAmiFilter   awscommon.AmiFilterOptions `mapstructure:"source_ami_filter"`
	// contains filtered or unexported fields
}

Config is the configuration that is chained through the steps and settable from the template.

type StepAttachVolume

type StepAttachVolume struct {
	// contains filtered or unexported fields
}

StepAttachVolume attaches the previously created volume to an available device location.

Produces:

device string - The location where the volume was attached.
attach_cleanup CleanupFunc

func (*StepAttachVolume) Cleanup

func (s *StepAttachVolume) Cleanup(state multistep.StateBag)

func (*StepAttachVolume) CleanupFunc

func (s *StepAttachVolume) CleanupFunc(state multistep.StateBag) error

func (*StepAttachVolume) Run

type StepCheckRootDevice

type StepCheckRootDevice struct{}

StepCheckRootDevice makes sure the root device on the AMI is EBS-backed.

func (*StepCheckRootDevice) Cleanup

func (*StepCheckRootDevice) Run

type StepChrootProvision

type StepChrootProvision struct {
}

StepChrootProvision provisions the instance within a chroot.

func (*StepChrootProvision) Cleanup

func (s *StepChrootProvision) Cleanup(state multistep.StateBag)

func (*StepChrootProvision) Run

type StepCopyFiles

type StepCopyFiles struct {
	// contains filtered or unexported fields
}

StepCopyFiles copies some files from the host into the chroot environment.

Produces:

copy_files_cleanup CleanupFunc - A function to clean up the copied files
early.

func (*StepCopyFiles) Cleanup

func (s *StepCopyFiles) Cleanup(state multistep.StateBag)

func (*StepCopyFiles) CleanupFunc

func (s *StepCopyFiles) CleanupFunc(state multistep.StateBag) error

func (*StepCopyFiles) Run

type StepCreateVolume

type StepCreateVolume struct {
	RootVolumeSize int64
	// contains filtered or unexported fields
}

StepCreateVolume creates a new volume from the snapshot of the root device of the AMI.

Produces:

volume_id string - The ID of the created volume

func (*StepCreateVolume) Cleanup

func (s *StepCreateVolume) Cleanup(state multistep.StateBag)

func (*StepCreateVolume) Run

type StepEarlyCleanup

type StepEarlyCleanup struct{}

StepEarlyCleanup performs some of the cleanup steps early in order to prepare for snapshotting and creating an AMI.

func (*StepEarlyCleanup) Cleanup

func (s *StepEarlyCleanup) Cleanup(state multistep.StateBag)

func (*StepEarlyCleanup) Run

type StepEarlyUnflock

type StepEarlyUnflock struct{}

StepEarlyUnflock unlocks the flock.

func (*StepEarlyUnflock) Cleanup

func (s *StepEarlyUnflock) Cleanup(state multistep.StateBag)

func (*StepEarlyUnflock) Run

type StepFlock

type StepFlock struct {
	// contains filtered or unexported fields
}

StepFlock provisions the instance within a chroot.

Produces:

flock_cleanup Cleanup - To perform early cleanup

func (*StepFlock) Cleanup

func (s *StepFlock) Cleanup(state multistep.StateBag)

func (*StepFlock) CleanupFunc

func (s *StepFlock) CleanupFunc(state multistep.StateBag) error

func (*StepFlock) Run

type StepInstanceInfo

type StepInstanceInfo struct{}

StepInstanceInfo verifies that this builder is running on an EC2 instance.

func (*StepInstanceInfo) Cleanup

func (s *StepInstanceInfo) Cleanup(multistep.StateBag)

func (*StepInstanceInfo) Run

type StepMountDevice

type StepMountDevice struct {
	MountOptions   []string
	MountPartition int
	// contains filtered or unexported fields
}

StepMountDevice mounts the attached device.

Produces:

mount_path string - The location where the volume was mounted.
mount_device_cleanup CleanupFunc - To perform early cleanup

func (*StepMountDevice) Cleanup

func (s *StepMountDevice) Cleanup(state multistep.StateBag)

func (*StepMountDevice) CleanupFunc

func (s *StepMountDevice) CleanupFunc(state multistep.StateBag) error

func (*StepMountDevice) Run

type StepMountExtra

type StepMountExtra struct {
	// contains filtered or unexported fields
}

StepMountExtra mounts the attached device.

Produces:

mount_extra_cleanup CleanupFunc - To perform early cleanup

func (*StepMountExtra) Cleanup

func (s *StepMountExtra) Cleanup(state multistep.StateBag)

func (*StepMountExtra) CleanupFunc

func (s *StepMountExtra) CleanupFunc(state multistep.StateBag) error

func (*StepMountExtra) Run

type StepPostMountCommands

type StepPostMountCommands struct {
	Commands []string
}

StepPostMountCommands allows running arbitrary commands after mounting the device, but prior to the bind mount and copy steps.

func (*StepPostMountCommands) Cleanup

func (s *StepPostMountCommands) Cleanup(state multistep.StateBag)

func (*StepPostMountCommands) Run

type StepPreMountCommands

type StepPreMountCommands struct {
	Commands []string
}

StepPreMountCommands sets up the a new block device when building from scratch

func (*StepPreMountCommands) Cleanup

func (s *StepPreMountCommands) Cleanup(state multistep.StateBag)

func (*StepPreMountCommands) Run

type StepPrepareDevice

type StepPrepareDevice struct {
}

StepPrepareDevice finds an available device and sets it.

func (*StepPrepareDevice) Cleanup

func (s *StepPrepareDevice) Cleanup(state multistep.StateBag)

func (*StepPrepareDevice) Run

type StepRegisterAMI

type StepRegisterAMI struct {
	RootVolumeSize           int64
	EnableAMIENASupport      bool
	EnableAMISriovNetSupport bool
}

StepRegisterAMI creates the AMI.

func (*StepRegisterAMI) Cleanup

func (s *StepRegisterAMI) Cleanup(state multistep.StateBag)

func (*StepRegisterAMI) Run

type StepSnapshot

type StepSnapshot struct {
	// contains filtered or unexported fields
}

StepSnapshot creates a snapshot of the created volume.

Produces:

snapshot_id string - ID of the created snapshot

func (*StepSnapshot) Cleanup

func (s *StepSnapshot) Cleanup(state multistep.StateBag)

func (*StepSnapshot) Run

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL