Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

--environment cannot pass environment variable value with a space #2962

Open
jelly opened this issue Aug 19, 2024 · 2 comments
Open

--environment cannot pass environment variable value with a space #2962

jelly opened this issue Aug 19, 2024 · 2 comments
Labels

Comments

@jelly
Copy link
Contributor

jelly commented Aug 19, 2024

mkosi commit the issue has been seen with

main

Used host distribution

Arch Linux

Used target distribution

Arch Linux

Linux kernel version used

No response

CPU architectures issue was seen on

x86_64

Unexpected behaviour you saw

Trying to pass an environment variable with spaces causes the splits it up making it impossible to pass something like "-O ^orphan_file".

This is not an issue with --env-file FYI, Haven't tested Enviroment as a Config option.

mkosi --debug -d arch -p systemd --seed 0e9a6fe0-68f6-408c-bbeb-136054d20445 --source-date-epoch 1662046009 -m https://archive.archlinux.org/repos/2024/06/30/ --force -o bar --environment=SYSTEMD_REPART_MKFS_OPTIONS_EXT4="-O ^orphan_file" --environment=SYSTEMD_LOG_LEVEL=debug

Debug print of the passed env variable to systemd-repart

ENV {'SYSTEMD_TMPFILES_FORCE_SUBVOL': '0', 'TERM': 'screen-256color', 'SOURCE_DATE_EPOCH': '1662046009', 'GIT_PROXY_SSL_CAINFO': '/proxy.cacert', 'SYSTEMD_REPART_MKFS_OPTIONS_EXT4': '-O', '^orphan_file': '', 'SYSTEMD_LOG_LEVEL': 'debug'}
‣ + systemd-repart --empty=allow --size=auto --dry-run=no --json=pretty --no-pager --offline=yes --seed 0e9a6fe0-68f6-408c-bbeb-136054d20445 /home/jelle/.cache/mkosi/mkosi-workspace-ko3gkhyb/staging/bar.raw --root=/buildroot --empty=create --defer-partitions esp,xbootldr --generate-fstab=/etc/fstab --generate-crypttab=/etc/crypttab --definiti
Successfully populated ext4 filesystem.
Executing mkfs command: mkfs.ext4 -L root-x86-64 -U 1dde1f49-50c2-4e9f-ac6a-93112acd4880 -I 256 -m 0 -E discard,lazy_itable_init=1 -b 4096 -T default /var/tmp/.#repartbe039c3943c2d910 -d /var/tmp/.#repart58e854ebe43787fa -O
Successfully forked off '(mkfs)' as PID 95812.
PR_SET_MM_ARG_START failed: Operation not permitted
mkfs.ext4: option requires an argument -- 'O'
Usage: mkfs.ext4 [-c|-l filename] [-b block-size] [-C cluster-size]
        [-i bytes-per-inode] [-I inode-size] [-J journal-options]
        [-G flex-group-size] [-N number-of-inodes] [-d root-directory|tarball]
        [-m reserved-blocks-percentage] [-o creator-os]
        [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
        [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
        [-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]
        [-jnqvDFSV] device [blocks-count]

Used mkosi config

No response

mkosi output

No response

@jelly jelly added the bug label Aug 19, 2024
@behrmann
Copy link
Contributor

It's definitely not working as one would expect, but

python -m mkosi -E 'FOO=foo\ bar' -E BAR='qux quz' summary

shows the two different versions, with the former working and the latter not. FOO will have value foo bar and BAR will have value qux, with another broken environment variable quz as in your example.

The parser for the environment variables works as expected, but the problem is getting the right thing through from the shell.

The Environment= setting worked for me, when I quickly tested it by adding a line to the test.

@jelly
Copy link
Contributor Author

jelly commented Aug 20, 2024

As far as I can it's due to the delimiter being a space in

    ConfigSetting(
        dest="environment",
        short="-E",
        metavar="NAME[=VALUE]",
        section="Content",
        parse=config_make_dict_parser(delimiter=" ", parse=parse_environment, unescape=True),
        match=config_match_key_value,
        help="Set an environment variable when running scripts",
    ),

So this seems to implicate that you can pass multiple env vars via one --environment invocation which is not something I would expect. That is proven by:

python -m mkosi -E 'FOO=1 BAR=1'  summary
                                     FOO=1
                                     BAR=1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

No branches or pull requests

2 participants