From 4ed8dd0d6c81bbcc2475d8e428472084bc9d2667 Mon Sep 17 00:00:00 2001 From: Kayla Washburn Date: Wed, 6 Sep 2023 12:57:28 -0600 Subject: [PATCH] refactor: improve flag interpretation for install.sh (#9554) --- docs/install/install.sh.md | 81 ++++++++++++++++++++++++++++ install.sh | 107 +++++++++++++++++++++++++++---------- 2 files changed, 160 insertions(+), 28 deletions(-) diff --git a/docs/install/install.sh.md b/docs/install/install.sh.md index 93c04d74d5..9eb253f358 100644 --- a/docs/install/install.sh.md +++ b/docs/install/install.sh.md @@ -34,6 +34,87 @@ manually via `coder server` or as a system package. By default, the Coder server runs on `http://127.0.0.1:3000` and uses a [public tunnel](../admin/configure.md#tunnel) for workspace connections. +## `PATH` conflicts + +It's possible to end up in situations where you have multiple `coder` binaries +in your `PATH`, and your system may use a version that you don't intend. Your +`PATH` is a variable that tells your shell where to look for programs to run. + +You can check where all of the versions are by running `which -a coder`. + +For example, a common conflict on macOS might be between a version installed by +Homebrew, and a version installed manually to the /usr/local/bin directory. + +```console +$ which -a coder +/usr/local/bin/coder +/opt/homebrew/bin/coder +``` + +Whichever binary comes first in this list will be used when running `coder` +commands. + +### Reordering your `PATH` + +If you use bash or zsh, you can update your `PATH` like this: + +```shell +# You might want to add this line to the end of your ~/.bashrc or ~/.zshrc file! +export PATH="/opt/homebrew/bin:$PATH" +``` + +If you use fish, you can update your `PATH` like this: + +```shell +# You might want to add this line to the end of your ~/.config/fish/config.fish file! +fish_add_path "/opt/homebrew/bin" +``` + +> ℹ If you ran install.sh with a `--prefix` flag, you can replace +> `/opt/homebrew` with whatever value you used there. Make sure to leave the +> `/bin` at the end! + +Now we can observe that the order has changed: + +```console +$ which -a coder +/opt/homebrew/bin/coder +/usr/local/bin/coder +``` + +### Removing unneeded binaries + +If you want to uninstall a version of `coder` that you installed with a package +manager, you can run whichever one of these commands applies: + +```shell +# On macOS, with Homebrew installed +brew uninstall coder +``` + +```shell +# On Debian/Ubuntu based systems +sudo dpkg -r coder +``` + +```shell +# On Fedora/RHEL-like systems +sudo rpm -e coder +``` + +```shell +# On Alpine +sudo apk del coder +``` + +If the conflicting binary is not installed by your system package manager, you +can just delete it. + +```shell +# You might not need `sudo`, depending on the location +sudo rm /usr/local/bin/coder +``` + ## Next steps - [Configuring Coder](../admin/configure.md) diff --git a/install.sh b/install.sh index 9831e01775..49f09a7ad1 100755 --- a/install.sh +++ b/install.sh @@ -104,18 +104,29 @@ Standalone release has been installed into $STANDALONE_INSTALL_PREFIX/bin/$STAND EOF - if [ "$STANDALONE_INSTALL_PREFIX" != /usr/local ]; then + CODER_COMMAND="$(command -v "$STANDALONE_BINARY_NAME")" + + if [ ! "$CODER_COMMAND" ]; then cath < EOF fi - cath <