containers / buildah

A tool that facilitates building OCI images.
https://buildah.io
Apache License 2.0
7.37k stars 781 forks source link

`buildah bud` does not accept multiple options for the `--volume` flag #2000

Closed aucampia closed 4 years ago

aucampia commented 4 years ago

Description

The man page for buildah bud suggests that the --volume flag can take multiple options:

The OPTIONS are a comma delimited list and can be ...

However when I actually try use multiple options (e.g. --volume "${HOME}/.cache/zae9ujei:/myvol:rw,Z") buildah bud complains that ...

incorrect volume format "Z", should be host-dir:ctr-dir[:option

Steps to reproduce the issue:

Run the following commands:

{
mkdir -vp /var/tmp/zae9ujei

cat << EOF > /var/tmp/zae9ujei/Dockerfile
FROM docker.io/alpine:latest
RUN \
  echo AOK > /myvol/status && \
  ls -al /myvol/ && \
  grep -H . /myvol/status && \
  true
EOF

mkdir -vp "${HOME}/.cache/zae9ujei"
rm -fv "${HOME}/.cache/test/status"
(cd /var/tmp/zae9ujei && buildah bud --volume "${HOME}/.cache/zae9ujei:/myvol:rw,Z" -t zae9ujei:latest .)

grep -H . "${HOME}/.cache/zae9ujei/status"

\rm -rv /var/tmp/zae9ujei "${HOME}/.cache/zae9ujei"
}

Describe the results you received:

mkdir: created directory '/var/tmp/zae9ujei'
mkdir: created directory '/home/E1258170/.cache/zae9ujei'
incorrect volume format "Z", should be host-dir:ctr-dir[:option]
ERRO[0000] exit status 1                                
grep: /home/E1258170/.cache/zae9ujei/status: No such file or directory
removed '/var/tmp/zae9ujei/Dockerfile'
removed directory '/var/tmp/zae9ujei'
removed directory '/home/E1258170/.cache/zae9ujei'

Describe the results you expected:

I expect the volume format I supplied to be correct.

Output of rpm -q buildah or apt list buildah:

buildah-1.9.0-5.module+el8.1.0+4240+893c1ab8.x86_64

Output of buildah version:

Version:         1.9.0
Go Version:      go1.12.8
Image Spec:      1.0.0
Runtime Spec:    1.0.0
CNI Spec:        0.4.0
libcni Version:  
Git Commit:      
Built:           Thu Jan  1 01:00:00 1970
OS/Arch:         linux/amd64

Output of podman version if reporting a podman build issue:

Version:            1.4.2-stable2
RemoteAPI Version:  1
Go Version:         go1.12.8
OS/Arch:            linux/amd64

*Output of `cat /etc/release`:**

NAME="Red Hat Enterprise Linux"
VERSION="8.1 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.1"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.1 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.1:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.1
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.1"
Red Hat Enterprise Linux release 8.1 (Ootpa)
Red Hat Enterprise Linux release 8.1 (Ootpa)

Output of uname -a:

Linux noosl-000018.ema.emersonprocess.com 4.18.0-147.0.3.el8_1.x86_64 #1 SMP Mon Nov 11 12:58:36 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Output of cat /etc/containers/storage.conf:

# storage.conf is the configuration file for all tools
# that share the containers/storage libraries
# See man 5 containers-storage.conf for more information
# The "container storage" table contains all of the server options.
[storage]

# Default Storage Driver
driver = "overlay"

# Temporary storage location
runroot = "/var/run/containers/storage"

# Primary Read/Write location of container storage
graphroot = "/var/lib/containers/storage"

[storage.options]
# Storage options to be passed to underlying storage drivers

# AdditionalImageStores is used to pass paths to additional Read/Only image stores
# Must be comma separated list.
additionalimagestores = [
]

# Size is used to set a maximum size of the container image.  Only supported by
# certain container storage drivers.
size = ""

# OverrideKernelCheck tells the driver to ignore kernel checks based on kernel version
override_kernel_check = "true"

# Remap-UIDs/GIDs is the mapping from UIDs/GIDs as they should appear inside of
# a container, to UIDs/GIDs as they should appear outside of the container, and
# the length of the range of UIDs/GIDs.  Additional mapped sets can be listed
# and will be heeded by libraries, but there are limits to the number of
# mappings which the kernel will allow when you later attempt to run a
# container.
#
# remap-uids = 0:1668442479:65536
# remap-gids = 0:1668442479:65536

# Remap-User/Group is a name which can be used to look up one or more UID/GID
# ranges in the /etc/subuid or /etc/subgid file.  Mappings are set up starting
# with an in-container ID of 0 and the a host-level ID taken from the lowest
# range that matches the specified name, and using the length of that range.
# Additional ranges are then assigned, using the ranges which specify the
# lowest host-level IDs first, to the lowest not-yet-mapped container-level ID,
# until all of the entries have been used for maps.
#
# remap-user = "storage"
# remap-group = "storage"

[storage.options.thinpool]
# Storage Options for thinpool

# autoextend_percent determines the amount by which pool needs to be
# grown. This is specified in terms of % of pool size. So a value of 20 means
# that when threshold is hit, pool will be grown by 20% of existing
# pool size.
# autoextend_percent = "20"

# autoextend_threshold determines the pool extension threshold in terms
# of percentage of pool size. For example, if threshold is 60, that means when
# pool is 60% full, threshold has been hit.
# autoextend_threshold = "80"

# basesize specifies the size to use when creating the base device, which
# limits the size of images and containers.
# basesize = "10G"

# blocksize specifies a custom blocksize to use for the thin pool.
# blocksize="64k"

# directlvm_device specifies a custom block storage device to use for the
# thin pool. Required if you setup devicemapper
# directlvm_device = ""

# directlvm_device_force wipes device even if device already has a filesystem
# directlvm_device_force = "True"

# fs specifies the filesystem type to use for the base device.
# fs="xfs"

# log_level sets the log level of devicemapper.
# 0: LogLevelSuppress 0 (Default)
# 2: LogLevelFatal
# 3: LogLevelErr
# 4: LogLevelWarn
# 5: LogLevelNotice
# 6: LogLevelInfo
# 7: LogLevelDebug
# log_level = "7"

# min_free_space specifies the min free space percent in a thin pool require for
# new device creation to succeed. Valid values are from 0% - 99%.
# Value 0% disables
# min_free_space = "10%"

# mkfsarg specifies extra mkfs arguments to be used when creating the base
# device.
# mkfsarg = ""

# mountopt specifies extra mount options used when mounting the thin devices.
# mountopt = ""

# use_deferred_removal Marking device for deferred removal
# use_deferred_removal = "True"

# use_deferred_deletion Marking device for deferred deletion
# use_deferred_deletion = "True"

# xfs_nospace_max_retries specifies the maximum number of retries XFS should
# attempt to complete IO when ENOSPC (no space) error is returned by
# underlying storage device.
# xfs_nospace_max_retries = "0"
aucampia commented 4 years ago

As a workaround I reverted to just supplying Z option as rw seems to be the default.

aucampia commented 4 years ago

I also managed to reproduce this on buildah version 1.11.4 (image-spec 1.0.1-dev, runtime-spec 1.0.1-dev)

rhatdan commented 4 years ago

Thanks @aucampia for the issue. Interested in opening a PR?

TomSweeneyRedHat commented 4 years ago

Closing via #2039