Fork me on GitHub

plash export-tar


Usage

plash export-tar CONTAINER [ FILE | - ]

Description

Export container as tar archive. It exports the file system of a container
to the given file as a compressed tar archive.  If no file is supplied or the
file is '-' the tar archive wil be printed to stdout instead.

Tested Behaviour

#!/bin/bash
set -xeu

• tar written to file in first argument

tmp=$(mktemp)
plash export-tar 1 $tmp
tar --list -f $tmp >/dev/null

• tar printed to stdout if no arguments

tmp=$(mktemp)
plash export-tar 1 > $tmp
tar --list -f $tmp >/dev/null

• tar printed to stdout if `-` is the first argument

tmp=$(mktemp)
plash export-tar 1 - > $tmp
tar --list -f $tmp >/dev/null

• exported tar looks like a rootfs

tmp=$(mktemp)
plash export-tar 1 > $tmp
tar --list -f $tmp | grep /etc/passwd
tar --list -f $tmp | grep /bin/sh

Source Code


#define USAGE "usage: plash export-tar CONTAINER [ FILE | - ]\n"

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>

#include <plash.h>

int export_tar_main(int argc, char *argv[]) {
  char *image_id, *file;
  if (!(image_id = argv[1])) {
    fputs(USAGE, stderr);
    return EXIT_FAILURE;
  }
  if (!(file = argv[2]))
    file = "-";
  pl_unshare_user();
  execvp("/proc/self/exe", (char *[]){"plash", "with-mount", image_id, "tar",
                                      "-cf", file, ".", NULL});
  pl_fatal("exec");
  return EXIT_FAILURE;
}