gprovision

package module
v0.0.0-...-b79a0d8 Latest Latest
Warning

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

Go to latest
Published: Dec 15, 2022 License: MIT Imports: 0 Imported by: 0

README

gprovision

GoDoc

Source code related to factory restore and provisioning (aka manufacture or imaging). Also includes buildroot files.

Written in go.

target architecture

x86 linux

This has only been tested on x86, but there shouldn't be much that is x86-specific. Buildroot is used to get a repeatable build of AMD64 utilities, as well as x86-32 libraries (one tool we use is only available in 32-bit versions).

known architecture-specific bits

A few ioctl's are used by their raw number, rather than by symbol. These numbers are unlikely to be portable. All uses should be in packages under hw/.

The type of the device (aka platform, variant) is currently determined from dmi/smbios values.

PCI is ubiquitous on x86 but not as common elsewhere. There is some pci-specific logic but probably not in any critical paths.

packages that may be of particular interest

  • provisioning, aka manufacture gprovision/pkg/mfg
  • factory restore gprovision/pkg/recovery
  • data erase gprovision/pkg/erase
  • linux /init binary gprovision/cmd/init, gprovision/pkg/init
    • determines whether to erase, factory restore, or do normal boot
    • or, with the appropriate build tag, provisions the unit
  • integ tests for the above
  • crystalfontz lcd code, including menus gprovision/pkg/hw/cfa
  • partitioning/formatting/bootability code for uefi and legacy gprovision/pkg/recovery/disk
  • flexible logging to multiple sinks (lcd, file, console) gprovision/pkg/log
  • appliance package identifies the hardware variant it's running on gprovision/pkg/appliance
  • config of ipmi account, password gprovision/pkg/hw/ipmi

proprietary/oss

Some packages couldn't be open sourced, and a few provided functionality that is absolutely required; for those, replacements were written and live under gprovision/pkg/oss. These packages are related to remote logging, record keeping, and factory restore data persistence.

To facilitate open source release while still using proprietary packages within genesys, gprovision/pkg/common (and subpackages) was added. This uses interfaces to abstract away exactly what package is providing the functionality. In a few dirs, you will find an oss.go file; internally, we use a proprietary.go in place of oss.go, to similar effect. These files have the effect of initializing interface vars in the aforementioned common package.

If you wish to customize gprovision's behavior, start by looking at the interfaces in common - re-implementing one or more of these may provide all you need.

not included

security

The code we could open source does not include a mechanism for secure storage of passwords. Password storage is required for the integ tests, so some sort of implementation was required. To discourage use of the simplistic and weak mechanism included in this code, it deliberately uses annoying passwords and emits warnings.

image creation

This code does not include anything to build the images (*.upd).

OTA

A mechanism for distribution of over-the-air updates is not included, nor is any sort of fleet status/control dashboard. This code does not (currently) integrate with mender.io but that's probably the most logical choice for those functionalities.

image

name

The image name must match a specific format: WIDGET.LNX.SHINY.YYYY-MM-DD.NNNN.upd

  • extension: .upd
  • prefix must match the string returned by common/strs.ImgPrefix()
    • default is WIDGET.LNX.SHINY.
      • product: widget
      • os: lnx
      • hardware platform: shiny
  • remaining fields are date and a build number
    • see recovery/archive package for additional info including sort algo
format
  • xz-compressed tarball
    • xz must be invoked with the sha256 checksum option
    • treated as invalid if:
      • xz signature is missing
      • xz checksum type is not sha256
      • xz checksum validation fails
content
  • a tarball of the root filesystem that will be laid down
    • assumptions
      • systemd is the init system
      • systemd-networkd manages networking
      • /boot/norm_boot is the kernel built by mage in this repo, with embedded initramfs
  • on install, the kernel located under /boot in the image is compared to the previously installed kernel
    • comparison is by build number, not kernel version
      • example: 4.19.16 (user@host) #300 SMP <timestamp> => build number is 300
      • use the kernel built here by mage
        • build number is set from an env var
      • kernel with higher number will overwrite the other
    • do not include any boot-related files except the kernel; they will be ignored.
      • grub
      • grub menus
      • separate initramfs
      • etc
  • accounts
    • admin must exist
    • no accounts in the image (other than admin) should allow login
    • factory restore will set password for admin account
file location

Factory restore looks for update files on the recovery volume, under Image/. The first image is written during provisioning. Others are the responsibility of your code to download/place. Note that factory restore verifies the checksum to avoid corruption, but this does not provide any guarantees that the image came from the right place.

Your download code should have additional safeguards, such as

  • signature verification
  • only allow downloads from a host under your control
  • only allow https downloads
  • pin the certificate for the download host
  • etc

building

Modules are not supported yet; at least one of our dependencies needs changes before it'll work with modules. This repo may also need changes for modules. Thus, you will need to have GOPATH set up.

Many packages can be built with go build, but the initramfs's, kernels, and integ tests require mage.

generated code

Generated code is used in a number of packages and (with the exception of protocol buffer code) isn't included in the repo. If go-bindata is present, go generate ./... will suffice; otherwise, mage bins:generate will fetch the correct version and generate code.

If you desire to re-generate pb code (for pkg/oss/pblog), remove disabled from the go:generate line in gen.go first. You'll need protoc installed, as well as the plugins for grpc and go.

PATH (for mage)

With bash on linux, run . ./bash_env.sh to set up your env. This adds bin/ to your PATH, runs dep ensure if it looks like you haven't, and lists mage targets.

For other shells, you'll need to update PATH to include the repo's /bin so that our mage is found before any version you may have installed.

TEMPDIR

For integ tests, your /tmp must have plenty of free space. If it has < 8GB or so, set the TEMPDIR env var to point to a dir that does have that much free space.

Passing tests delete their temp dirs, but failing tests generally do not. Re-running a failed integ test will delete temp dirs from previous runs of that test. This delete is done with a wildcard like test-gprov-erase*, so there is a slight but non-zero chance it would delete something it didn't create.

dep

dep is needed. Once installed, cd to the repo root and run dep ensure to download all dependencies.

mage

Using mage is not necessary for simple packages like the crystalfontz code, but it is needed for things like the kernels with embedded initramfs and for integ tests. These integ tests depend on env vars mage sets, and are skipped if the vars are not set.

Due to required dependencies, mage will not run until after you run dep - see its section above.

Mage targets (listed with mage -l) are case insensitive, and each corresponds to a public function in build/. For example, mage bins:embedded runs the function with signature func (Bins) Embedded(ctx context.Context).

qemu

qemu is also needed for integ tests. See build/qemu/ for a Dockerfile that'll build qemu and copy the necessary files out. A pre-built version is available on github under releases, and is automatically downloaded by mage.

protoc

Optional: protoc, the protocol buffer compiler, is only needed to regenerate code for pkg/oss/pblog.

kernel

All tools required to build the kernel are needed - gcc, flex, bison, make, binutils, etc. See kernel documentation for details.

kernel version

The kernel source to download is determined from the name of the linux-*.config file.

buildroot

Files in build/brx/ are inputs to build a cpio of non-go binaries. A pre-built version is available on github under releases, and is automatically downloaded by mage.

Known to work with...

Known to work with go v1.12.5 or higher, the latest dep, and protoc 3.x.

go packages

To pull in dependencies:

cd $GOPATH/src/gprovision
dep ensure
verify

Once that is done, running mage -l from any dir should print a list of targets. (This is automatically done when you source bash-env.sh, so generally this can be skipped.)

Targets are run like so:

  • mage tests:unit
    • runs unit tests (but not the much more lengthy integ tests)

Known issues

The integ tests are occasionally flaky, as are the crystalfontz tests.

Shells out too much. u-root provides many packages we could use to avoid shelling out, but don't (yet).

Old images are never removed from the recovery volume. This means you will eventually run out of space, depending on volume size, image size, and frequency of pushing out images. Though this could be seen as the responsibility of the code downloading images...

Sequence

Provision, AKA manufacture
+---------+     +---------+
| Legacy  |     | UEFI    |
| PXEboot |     | PXEboot |
+----+----+     +----+----+
     |               |
     +-------+-------+
             |
             v
     +-------+-------+
     | provision.pxe |
     +-------+-------+
             |
             v
   +---------+----------+
   | load json from url |
   |  passed in kernel  |
   | parameter 'mfgurl' |
   +---------+----------+
             |
             v
 +-----------+-------------+
 | verify hardware specs,  |
 | download image & write  |
 |   to recovery volume,   |
 | write credentials, etc  |
 +-----------+-------------+
             |
             v
    +--------+---------+
    |  configure boot  |
    | (legacy or uefi) |
    +--------+---------+
             |
             v
        +----+-----+
        |  reboot  |
        +----------+

See Infrastructure below for off-device services that are required.

All boots after manufacture
  +--------+   +------+
  | Legacy |   | UEFI |
  |  boot  |   | boot |
  +----+---+   +---+--+
       |           |
       +-----+-----+
             |
             v
    +--------+--------+
    | "normal" kernel |
    +--------+--------+
             |
             v
     +-------+-------+
     | erase needed? |
     +--+----------+-+
        |          |
        v          v
      +-+--+    +--+--+
      | no |    | yes |
      +-+--+    +--+--+
        |          |
        |          v
        |      +---+---+     +--------+
        |      | erase +---->+ reboot |
        |      +-------+     +--------+
        |
        v
 +------+---------------+
 | locate primary drive |
 +----------+-----------+
            |
            v
+-----------+-----------+
| does flag file exist? |
+--+--------------+-----+
   |              |
   v              v
+--+-+         +--+--+
| no |         | yes |
+--+-+         +--+--+
   |              |
   |              v
   |       +------+--------+
   |       | all good,     |     +----------+
   |       | start systemd +---->+ eventual |
   |       | from primary  |     |  reboot  |
   |       +---------------+     +----------+
   v
 +-+---------------------+
 | start factory restore |
 +----------+------------+
            |
            v
 +----------+-------------------------+
 |                                    |       +--------+
 | find latest good image on recovery +------>+ reboot |
 | format primary & write image       |       +--------+
 | write network config               |
 | write flag file                    |
 | etc                                |
 |                                    |
 +------------------------------------+

Infrastructure for provisioning/manufacture

The integ tests (especially lifecycle and mfg) set up minimal infrastructure, which could be used as examples for some of the infrastructure.

For production, you will need the following:

  • DHCP and TFTP set up for PXEboot
    • Setting up a network that will PXEboot both legacy and uefi can be painful. If you can get away with uefi-only, great!
    • iPXE supports http transfers. They say this is far faster than tftp, so serve only the bare minimum (iPXE) from TFTP and everything else over http (assuming you use iPXE)
  • web server
    • serve files needed by iPXE (if used) - menus, provisioning kernel
    • serve file passed to kernel as mfgurl, and files referenced by that file
      • when booting provisioning.pxe, pass in an arg like mfgurl=http://1.2.3.4/blah/manufData.json
      • content: see below
  • log server
    • collects logs produced by devices being imaged
    • included implementation (cmd/util/pbLogServer, pkg/oss/pblog/server) bundles additional functionality
      • password generation & storage
      • qa doc printing
      • other record keeping
      • web server for viewing logs
mfgurl / manufData.json
  • format: json
  • lists additional files needed, common to all hardware variants
    • image
    • kernel
    • (optional) other files to write to recovery volume
  • specific to a particular variant:
    • hardware characteristics for validation (# cpus, pci devices present, etc)
    • additial configuration steps

As an example, see doc/manufDataSample.json.

Exactly what variant a device is, is determined by the appliance package. That package primarily uses dmi/smbios fields.

If this repo interests you...

Third party repos that cover similar topics:

  • github.com/u-root/u-root
  • github.com/gokrazy/gokrazy
  • github.com/mendersoftware/mender
  • github.com/sbabic/swupdate

Documentation

Overview

Subpackages contain code for use in provisioning (also referred to as manufacture) and factory restore (aka recovery) as well as services which run in the image.

Three main flavors of kernel can be built. The kernel code remains the same, with the initramfs changing. The flavors are:

  • provisioning: pxebooted, used to image large numbers of servers with full functionality. Requires at least two physical storage devices within the unit - a small recovery device containing a copy of the image, and a (generally much larger) primary device onto which the image is decompressed. Recovery device could be a usb key, ssd, etc. Depends upon additional infrastructure - dhcp and tftp config for pxe, ipxe and boot menu(s), http file server, logging server, and some mechanism to store (and optionally, generate) passwords.

  • recipe: a "downloadable installer"

  • downloaded by a customer for installation onto hardware they source, for use in regions where shipping from the US is painful.

  • combines the QA functionality of provisioning with some functionality of factory restore. Imaged unit _lacks_ factory restore functionality on its own as that requires the secondary storage.

  • norm: after recipe or provisioning, this is the kernel that is always used. Includes factory restore functionality, though this only functions if the unit was provisioned (as opposed to recipe). For provisioned units, factory restore:

  • will be triggered if the primary device's filesystem (or a flag file therein) is missing, or

  • may be triggered on demand by the user. In all other cases, the root volume is located and mounted, the initramfs is cleaned up, and systemd is started.

Use `mage` to build these targets.

Directories

Path Synopsis
build
paths
Package paths contains functions used by integ tests and by mage.
Package paths contains functions used by integ tests and by mage.
cmd
dummy
A helper/dummy multi-call binary used in integ testing.
A helper/dummy multi-call binary used in integ testing.
img/corer
Service corer listens for fs events on given dir, and if the events are for a coredump, it creates a backtrace via gdb.
Service corer listens for fs events on given dir, and if the events are for a coredump, it creates a backtrace via gdb.
img/nic_config
Service nic_config configures RFS, RSS, XPS for interfaces.
Service nic_config configures RFS, RSS, XPS for interfaces.
init
Command init replaces the sh script /init in an initramfs, doing the normal early userspace tasks.
Command init replaces the sh script /init in an initramfs, doing the normal early userspace tasks.
util/appliance-schema
Appliance-schema generates a json schema for github.com/purecloudlabs/gprovision/pkg/appliance or github.com/purecloudlabs/gprovision/pkg/mfg/qa.
Appliance-schema generates a json schema for github.com/purecloudlabs/gprovision/pkg/appliance or github.com/purecloudlabs/gprovision/pkg/mfg/qa.
util/blink
Test app for github.com/purecloudlabs/gprovision/pkg/hw/ipmi/uid, blinking the IPMI UID light.
Test app for github.com/purecloudlabs/gprovision/pkg/hw/ipmi/uid, blinking the IPMI UID light.
util/currentBoot
Command currentBoot reads the current boot var
Command currentBoot reads the current boot var
util/devvm
Cmd devvm re-uses integ test logic to spin up VMs for dev work.
Cmd devvm re-uses integ test logic to spin up VMs for dev work.
util/identify
Command identify identifies a hardware device from dmi data, using github.com/purecloudlabs/gprovision/pkg/appliance.
Command identify identifies a hardware device from dmi data, using github.com/purecloudlabs/gprovision/pkg/appliance.
windows/netexport
Netexport.exe exports network config data from windows.
Netexport.exe exports network config data from windows.
pkg
appliance
Package appliance contains data on various models/revisions of appliance.
Package appliance contains data on various models/revisions of appliance.
appliance/altIdent
Package altIdent allows reading, writing a file containing the platform's identity, for use as a fallback if the dmi data doesn't clearly identify the platform.
Package altIdent allows reading, writing a file containing the platform's identity, for use as a fallback if the dmi data doesn't clearly identify the platform.
common
Common (and subpackages) contains interfaces that make it easier to avoid import cycles, swap out functionality for testing, etc.
Common (and subpackages) contains interfaces that make it easier to avoid import cycles, swap out functionality for testing, etc.
common/fr
Interface for a mechanism storing data for use by factory restore
Interface for a mechanism storing data for use by factory restore
common/rkeep
Some sort of external mechanism recording details about units imaged.
Some sort of external mechanism recording details about units imaged.
common/rlog
Interfaces related to setting up or mocking remote logging.
Interfaces related to setting up or mocking remote logging.
common/strs
Abstraction for strings that implementors will likely wish to change.
Abstraction for strings that implementors will likely wish to change.
corer/backtrace
Package backtrace creates backtraces from coredumps.
Package backtrace creates backtraces from coredumps.
corer/opts
Package opts parses flags and stores config used elsewhere in corer.
Package opts parses flags and stores config used elsewhere in corer.
corer/stream
Package stream contains chainable functions acting on sizeable data streams such as cores.
Package stream contains chainable functions acting on sizeable data streams such as cores.
corer/testhelper
Package testhelper does setup for tests requiring a core dump.
Package testhelper does setup for tests requiring a core dump.
disktag
Package disktag encodes and decodes disktags.
Package disktag encodes and decodes disktags.
erase
Package erase handles data erase of data on units, for use when a customer's data is sufficiently sensitive and they need to ship a unit without data.
Package erase handles data erase of data on units, for use when a customer's data is sufficiently sensitive and they need to ship a unit without data.
erase/raid
Package raid handles reading, storing, and re-writing raid metadata as necessary during the erase process.
Package raid handles reading, storing, and re-writing raid metadata as necessary during the erase process.
fileutil
Package fileutil contains various utility functions useful for dealing with files and dirs.
Package fileutil contains various utility functions useful for dealing with files and dirs.
guid
Package guid handles uuid's encoded in the mixed-endianness format used by microsoft and uefi.
Package guid handles uuid's encoded in the mixed-endianness format used by microsoft and uefi.
hw
Sub-packages of hw deal with specific hardware or other low-level interfaces.
Sub-packages of hw deal with specific hardware or other low-level interfaces.
hw/beep
Package beep activates PC Speaker on hardware supporting it.
Package beep activates PC Speaker on hardware supporting it.
hw/block
Package block contains functions dealing with linux block devices and the underlying hardware.
Package block contains functions dealing with linux block devices and the underlying hardware.
hw/block/md
Package md does various things with mdadm.
Package md does various things with mdadm.
hw/block/partitioning
Package partitioning allows creation of MBR and GPT partition tables and partitions, DESTROYING ANY EXISTING DATA.
Package partitioning allows creation of MBR and GPT partition tables and partitions, DESTROYING ANY EXISTING DATA.
hw/cfa
Package cfa implements communication with Crystalfontz LCDs such as CFA-631 and CFA-635, without use of CGO.
Package cfa implements communication with Crystalfontz LCDs such as CFA-631 and CFA-635, without use of CGO.
hw/cfa/demo
Demo app to exercise a compatible Crystalfontz LCD.
Demo app to exercise a compatible Crystalfontz LCD.
hw/cfa/serial
Package serial configures a serial port for use with Crystalfontz LCDs.
Package serial configures a serial port for use with Crystalfontz LCDs.
hw/console
Package console allows for some trivial manipulations of linux virtual terminals, such as switching which one is in the foreground, displaying messages, then switching back.
Package console allows for some trivial manipulations of linux virtual terminals, such as switching which one is in the foreground, displaying messages, then switching back.
hw/console/contest
Test app for console package; normal unit test won't work as the vt commands require root privs.
Test app for console package; normal unit test won't work as the vt commands require root privs.
hw/cpu
Package cpu allows determining topological arrangement of CPU cores, generally for use in setting RSS IRQs.
Package cpu allows determining topological arrangement of CPU cores, generally for use in setting RSS IRQs.
hw/dmi
Package dmi reads DMI (aka SMBIOS) data via dmidecode.
Package dmi reads DMI (aka SMBIOS) data via dmidecode.
hw/ioctl
Package ioctl uses IOCTL's to find block device size, adjust network interface state, etc.
Package ioctl uses IOCTL's to find block device size, adjust network interface state, etc.
hw/ipmi
Package ipmi interacts with the platform BMC.
Package ipmi interacts with the platform BMC.
hw/ipmi/uid
Package uid allows control of the IPMI UID light (AKA Chassis ID light).
Package uid allows control of the IPMI UID light (AKA Chassis ID light).
hw/kmsg
Package kmsg facilitates processes writing to the kernel ring buffer.
Package kmsg facilitates processes writing to the kernel ring buffer.
hw/nic
Package nic allows enabling/disabling NICs, configuring XPS, RFS, and RSS, etc.
Package nic allows enabling/disabling NICs, configuring XPS, RFS, and RSS, etc.
hw/power
Package power handles poweroff- and reboot-related functionality, including running pre-reboot (Preboot) functions registered with the housekeeping pkg.
Package power handles poweroff- and reboot-related functionality, including running pre-reboot (Preboot) functions registered with the housekeeping pkg.
hw/udev
Package udev allows starting udev and finding udevd if running.
Package udev allows starting udev and finding udevd if running.
hw/uefi
Package uefi manipulates UEFI boot entries and other variables.
Package uefi manipulates UEFI boot entries and other variables.
id
Package id returns UID, GID for given user from given filesystem (not necessarily mounted at /)
Package id returns UID, GID for given user from given filesystem (not necessarily mounted at /)
init
Package init implements early userspace logic in go, replacing the functionality of initramfs's /init.
Package init implements early userspace logic in go, replacing the functionality of initramfs's /init.
init/consts
Package consts contains init-related consts so they can be shared outside of pkg init.
Package consts contains init-related consts so they can be shared outside of pkg init.
init/housekeeping
Package housekeeping works with lists of tasks to be performed in the future.
Package housekeeping works with lists of tasks to be performed in the future.
init/progress
Provides feedback on the LCD that the boot is progressing.
Provides feedback on the LCD that the boot is progressing.
log
Package log is a flexible logging mechanism allowing multiple log sinks, outputting to one or more of: the console, a file, an LCD, a networked log ingester, etc.
Package log is a flexible logging mechanism allowing multiple log sinks, outputting to one or more of: the console, a file, an LCD, a networked log ingester, etc.
log/lcd
Package lcd is a StackableLog that logs events to cfa.DefaultLcd, as long as those events have the EndUserFlag set.
Package lcd is a StackableLog that logs events to cfa.DefaultLcd, as long as those events have the EndUserFlag set.
log/testlog
Package testlog hijacks the output of github.com/purecloudlabs/gprovision/pkg/log, and can hijack log.Cmd().
Package testlog hijacks the output of github.com/purecloudlabs/gprovision/pkg/log, and can hijack log.Cmd().
mfg
Package mfg is used to validate the hardware of freshly-assembled units and to image them.
Package mfg is used to validate the hardware of freshly-assembled units and to image them.
mfg/configStep
Package configStep implements manufacturing steps that can be specified in manufData.json.
Package configStep implements manufacturing steps that can be specified in manufData.json.
mfg/mfgflags
Package mfgflags handles flags used to alter mfg behavior for testing.
Package mfgflags handles flags used to alter mfg behavior for testing.
mfg/qa
Package QA implements quality checks for the mfg process.
Package QA implements quality checks for the mfg process.
net
Package net implements some network-related functions for recovery.
Package net implements some network-related functions for recovery.
net/xfer
Package xfer handles robust file transfers, primarily for use in mfg process.
Package xfer handles robust file transfers, primarily for use in mfg process.
netexport
Package netexport reads network config data from windows.
Package netexport reads network config data from windows.
oss
Sub-packages of oss contain replacements for proprietary functionality that could not be open sourced.
Sub-packages of oss contain replacements for proprietary functionality that could not be open sourced.
oss/frd
Minimal, OSS impl of a mechanism storing data for use by factory restore.
Minimal, OSS impl of a mechanism storing data for use by factory restore.
oss/pblog
Package pblog is the client for a logger using gRPC.
Package pblog is the client for a logger using gRPC.
oss/stash
Package stash - oss impl of stash
Package stash - oss impl of stash
recovery
Package recovery, known alternately as factory restore, is used to overwrite the main drive of a unit with a fresh image.
Package recovery, known alternately as factory restore, is used to overwrite the main drive of a unit with a fresh image.
recovery/archive
Package archive sorts, verifies, and extracts .upd (xz-compressed tar) files.
Package archive sorts, verifies, and extracts .upd (xz-compressed tar) files.
recovery/disk
Package disk handles logical disks, filesystems, and boot entries for the purposes of factory restore.
Package disk handles logical disks, filesystems, and boot entries for the purposes of factory restore.
recovery/emode
Package emode checks any emergency-mode files to determine whether they are updates, json data, or unknown.
Package emode checks any emergency-mode files to determine whether they are updates, json data, or unknown.
recovery/history
Package history logs image success/failure to disk.
Package history logs image success/failure to disk.
systemd/networkd
Package networkd can be used to write config files for systemd-networkd.
Package networkd can be used to write config files for systemd-networkd.
systemd/status
Package status can be used to query service status, stop/start services, etc.
Package status can be used to query service status, stop/start services, etc.
fakeupd
Package fakeupd creates a fake .upd file with enough content to keep factory restore happy and to boot to a point where it can print a message.
Package fakeupd creates a fake .upd file with enough content to keep factory restore happy and to boot to a point where it can print a message.
fakeupd/consts
Package consts contains consts used with fake update.
Package consts contains consts used with fake update.
integ
Package integ contains integ tests run by mage.
Package integ contains integ tests run by mage.
integ/helper/erase
prepare for erase integ test - create filesystem on recovery, write pattern on main volume
prepare for erase integ test - create filesystem on recovery, write pattern on main volume
vm
Package vm contains utility functions used in integ tests with qemu VMs.
Package vm contains utility functions used in integ tests with qemu VMs.

Jump to

Keyboard shortcuts

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