smallstep / cli

🧰 A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc.
https://smallstep.com/cli
Apache License 2.0
3.56k stars 248 forks source link

[Bug]: `make install` fails on macOS due to missing `install -D` flag #1211

Closed marten-seemann closed 5 days ago

marten-seemann commented 2 weeks ago

Steps to Reproduce

Run make install on macOS.

Your Environment

Expected Behavior

make install should succeed.

Actual Behavior

It doesn't, since install doesn't have a -D flag on macOS.

See man page:

NAME
     install – install binaries

SYNOPSIS
     install [-bCcMpSsv] [-B suffix] [-f flags] [-g group] [-m mode] [-o owner] file1 file2
     install [-bCcMpSsv] [-B suffix] [-f flags] [-g group] [-m mode] [-o owner] file1 ... fileN directory
     install -d [-v] [-g group] [-m mode] [-o owner] directory ...

DESCRIPTION
     The file(s) are copied to the target file or directory.  If the destination is a directory, then the file is copied into directory with its original filename.  If the target file already
     exists, it is either renamed to file.old if the -b option is given or overwritten if permissions allow.  An alternate backup suffix may be specified via the -B option's argument.

     The options are as follows:

     -B suffix
             Use suffix as the backup suffix if -b is given.

     -b      Back up any existing files before overwriting them by renaming them to file.old.  See -B for specifying a different backup suffix.

     -C      Copy the file.  If the target file already exists and the files are the same, then don't change the modification time of the target.

     -c      Copy the file.  This is actually the default.  The -c option is only included for backwards compatibility.

     -d      Create directories.  Missing parent directories are created as required.

     -f      Specify the target's file flags; see chflags(1) for a list of possible flags and their meanings.

     -g      Specify a group.  A numeric GID is allowed.

     -M      Disable all use of mmap(2).

     -m      Specify an alternate mode.  The default mode is set to rwxr-xr-x (0755).  The specified mode may be either an octal or symbolic value; see chmod(1) for a description of possible
             mode values.

     -o      Specify an owner.  A numeric UID is allowed.

     -p      Preserve the modification time.  Copy the file, as if the -C (compare and copy) option is specified, except if the target file doesn't already exist or is different, then
             preserve the modification time of the file.

     -S      Safe copy.  Normally, install unlinks an existing target before installing the new file.  With the -S flag a temporary file is used and then renamed to be the target.  The reason
             this is safer is that if the copy or rename fails, the existing target is left untouched.

     -s      install exec's the command strip(1) to strip binaries so that install can be portable over a large number of systems and binary types.

     -v      Causes install to show when -C actually installs something.

     By default, install preserves all file flags, with the exception of the “nodump” flag.

     The install utility attempts to prevent moving a file onto itself.

     Installing /dev/null creates an empty file.

Additional Context

See https://apple.stackexchange.com/questions/201029/install-illegal-option-d for discussion and a suggested workaround. PR incoming.

Contributing

Vote on this issue by adding a 👍 reaction. To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).