diff --git a/README.md b/README.md index b090b7794cf8b3fb467170f3936c3c368701de5d..d15189461021f1319c1ef3565fe914cb01285e8f 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ It tries to use the system package manager if possible. First run to print out the install process: ```bash -curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run +curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run ``` Now to actually install: diff --git a/ci/dev/lint.sh b/ci/dev/lint.sh index 180fd6ee645c187a6c61ede8ee5f59cd4fab9e90..f9f54202772950dee6d375208284cf5a81bf2739 100755 --- a/ci/dev/lint.sh +++ b/ci/dev/lint.sh @@ -9,7 +9,7 @@ main() { tsc --noEmit # See comment in ./ci/container/Dockerfile if [[ ! ${CI-} ]]; then - shellcheck -e SC2046,SC2164,SC2154,SC1091 $(git ls-files "*.sh") + shellcheck -e SC2046,SC2164,SC2154,SC1091,SC1090 $(git ls-files "*.sh") fi } diff --git a/doc/FAQ.md b/doc/FAQ.md index 089583a86915439f256b37e0edd12759ab824f5d..cc28c2e2f4e53a7cc1f52ab2146f3f17cebe0fe6 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -152,15 +152,13 @@ user a virtual machine instead of just a container. ## Docker in code-server container? -If you'd like to access docker inside of code-server, we'd recommend running a `docker:dind` container -and mounting in a directory to share between `dind` and the `code-server` container at `/var/run`. -After, install the docker CLI in the code-server container and you should be able to access the -daemon as the socket will be shared at `/var/run/docker.sock`. +If you'd like to access docker inside of code-server, mount the docker socket in from `/var/run/docker.sock`. +Install the docker CLI in the code-server container and you should be able to access the daemon! -In order to make volume mounts work, mount the home directory in the code-server container and the -dind container at the same path. i.e you'd volume mount a directory from the host to `/home/coder` -on both. This will allow any volume mounts in the home directory to work. Similar process -to make volume mounts in any other directory work. +You can even make volume mounts work. Lets say you want to run a container and mount in +`/home/coder/myproject` into it from inside the `code-server` container. You need to make sure +the docker daemon's `/home/coder/myproject` is the same as the one mounted inside the `code-server` +container and the mount will just work. ## Collaboration @@ -269,7 +267,7 @@ it is against their TOS to use the published extensions so we are unable to add them to our marketplace. We may reimplement them at some point. -You can follow [#1315](https://github.com/cdr/code-server/issues/1315) for updates. +You can subscribe to [#1315](https://github.com/cdr/code-server/issues/1315) for updates. ## Enterprise diff --git a/doc/guide.md b/doc/guide.md index fd8219f3b1bd042e6c2c95a46d86ff838694785d..2cd72091358eaec1d751be7d26ebe08f08b26711 100644 --- a/doc/guide.md +++ b/doc/guide.md @@ -78,14 +78,14 @@ to avoid the slow dashboard. ## 2. Install code-server -We have a [script](./install.sh) to install `code-server` for Linux and macOS. +We have a [script](../install.sh) to install `code-server` for Linux and macOS. It tries to use the system package manager if possible. First run to print out the install process: ```bash -curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run +curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run ``` Now to actually install: @@ -96,7 +96,7 @@ curl -fsSL https://code-server.dev/install.sh | sh The install script will print out how to run and start using `code-server`. -Docs on the install script, manual installation and docker image are at [./doc/install.md](./doc/install.md). +Docs on the install script, manual installation and docker image are at [./install.md](./install.md). ## 3. Expose code-server @@ -205,7 +205,7 @@ the dependency on caddy. ### Self Signed Certificate **note:** Self signed certificates do not work with iPad and will cause a blank page. You'll -have to use [Let's Encrypt](#lets-encrypt) instead. See the [FAQ](https://github.com/cdr/code-server/blob/master/doc/FAQ.md#blank-screen-on-ipad). +have to use [Let's Encrypt](#lets-encrypt) instead. See the [FAQ](./FAQ.md#blank-screen-on-ipad). Recommended reading: https://security.stackexchange.com/a/8112. @@ -255,4 +255,4 @@ systemctl --user restart code-server If you're working on a web service and want to access it locally, `code-server` can proxy it for you. -See the [FAQ](https://github.com/cdr/code-server/blob/master/doc/FAQ.md#how-do-i-securely-access-web-services). +See the [FAQ](./FAQ.md#how-do-i-securely-access-web-services). diff --git a/doc/install.md b/doc/install.md index baecf6fd3c24a861bce32713a1e9205902df2b25..73afa0a7d4c234d41f5a268581dbd5d221949812 100644 --- a/doc/install.md +++ b/doc/install.md @@ -20,14 +20,14 @@ various distros and operating systems. ## install.sh -We have a [script](./install.sh) to install code-server for Linux and macOS. +We have a [script](../install.sh) to install code-server for Linux and macOS. It tries to use the system package manager if possible. First run to print out the install process: ```bash -curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run +curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run ``` Now to actually install: @@ -43,7 +43,7 @@ If you believe an install script used with `curl | sh` is insecure, please give [sandstorm.io](https://sandstorm.io) a read. If you'd still prefer manual installation despite the below [detect reference](#detect-reference) and `--dry-run` -then continue on for docs on manual installation. The [`install.sh`](./install.sh) script runs the _exact_ same +then continue on for docs on manual installation. The [`install.sh`](../install.sh) script runs the _exact_ same commands presented in the rest of this document. ### Flags @@ -117,7 +117,7 @@ We recommend installing with `yarn` or `npm` when: 2. If you're on Linux with glibc < v2.17 **note:** Installing via `yarn` or `npm` builds native modules on install and so requires C dependencies. -See [./doc/npm.md](./doc/npm.md) for installing these dependencies. +See [./npm.md](./npm.md) for installing these dependencies. You will need at least node v12 installed. See [#1633](https://github.com/cdr/code-server/issues/1633). diff --git a/install.sh b/install.sh index 275887bc51eaac00cfcd3ed13b4941a0180fc8d7..116d46ca2793e84e0483c64015f2863228c704cf 100755 --- a/install.sh +++ b/install.sh @@ -95,7 +95,6 @@ main() { DRY_RUN \ METHOD \ ARCHIVE_INSTALL_PREFIX \ - SKIP_ECHO \ VERSION \ OPTIONAL @@ -199,7 +198,9 @@ main() { parse_arg() { case "$1" in *=*) - opt="${1#=*}" + # Remove everything after first equal sign. + opt="${1%%=*}" + # Remove everything before first equal sign. optarg="${1#*=}" if [ ! "$optarg" ] && [ ! "${OPTIONAL-}" ]; then echoerr "$opt requires an argument" @@ -230,23 +231,17 @@ fetch() { URL="$1" FILE="$2" - echo "+ Downloading $URL" - if [ -e "$FILE" ]; then - echo "+ Using cached $FILE" + echo "+ Reusing $CACHE_DIR/${URL##*/}" return fi - SKIP_ECHO=1 sh_c curl \ -#fL \ -o "$FILE.incomplete" \ -C - \ "$URL" sh_c mv "$FILE.incomplete" "$FILE" - unset SKIP_ECHO - - echo "+ Downloaded into $FILE" } install_macos() { @@ -290,18 +285,20 @@ install_aur() { echo "Installing from the AUR." echo - prev_dir="$PWD" tmp_dir="$(mktemp -d)" - cd "$tmp_dir" - echo "+ Downloading PKGBUILD from https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz" - SKIP_ECHO=1 sh_c 'curl -fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xz --strip-components 1' - unset SKIP_ECHO - echo "+ Downloaded into $tmp_dir" - sh_c makepkg -si + echo "+ Downloading PKGBUILD into $tmp_dir from https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz" + curl -fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xzC "$tmp_dir" + VERSION="$(. "$tmp_dir/code-server/PKGBUILD" && echo "$pkgver")" + rm -R "$tmp_dir" - cd "$prev_dir" - rm -Rf "$tmp_dir" + mkdir -p "$CACHE_DIR/code-server-$VERSION-aur" + sh_c cp -a "$tmp_dir/code-server/*" "$CACHE_DIR/code-server-$VERSION-aur" + + echo "+ Installing $CACHE_DIR/code-server-$VERSION-aur" + + cd "$CACHE_DIR/code-server-$VERSION-aur" + sh_c makepkg -si echo_systemd_postinstall } @@ -318,15 +315,14 @@ install_archive() { sh_c="sudo_sh_c" fi - SKIP_ECHO=1 sh_c mkdir -p "$ARCHIVE_INSTALL_PREFIX/lib" "$ARCHIVE_INSTALL_PREFIX/bin" - unset SKIP_ECHO - if [ -e "$ARCHIVE_INSTALL_PREFIX/lib/code-server-$VERSION" ]; then echo echo "code-server-$VERSION is already installed at $ARCHIVE_INSTALL_PREFIX/lib/code-server-$VERSION" echo "Remove it to reinstall." exit 0 fi + + "$sh_c" mkdir -p "$ARCHIVE_INSTALL_PREFIX/lib" "$ARCHIVE_INSTALL_PREFIX/bin" "$sh_c" tar -C "$ARCHIVE_INSTALL_PREFIX/lib" -xzf "$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz" "$sh_c" mv -f "$ARCHIVE_INSTALL_PREFIX/lib/code-server-$VERSION-$OS-$ARCH" "$ARCHIVE_INSTALL_PREFIX/lib/code-server-$VERSION" "$sh_c" ln -fs "$ARCHIVE_INSTALL_PREFIX/lib/code-server-$VERSION/bin/code-server" "$ARCHIVE_INSTALL_PREFIX/bin/code-server" @@ -336,14 +332,22 @@ install_archive() { install_npm() { if command_exists yarn; then + sh_c="sh_c" + if [ ! -w "$(yarn global bin)" ]; then + sh_c="sudo_sh_c" + fi echo "Installing with yarn." echo - sh_c yarn global add code-server --unsafe-perm + "$sh_c" yarn global add code-server --unsafe-perm return elif command_exists npm; then + sh_c="sh_c" + if [ ! -w "$(npm config get prefix)" ]; then + sh_c="sudo_sh_c" + fi echo "Installing with npm." echo - sh_c npm install -g code-server --unsafe-perm + "$sh_c" npm install -g code-server --unsafe-perm return fi echo @@ -431,9 +435,7 @@ command_exists() { } sh_c() { - if [ ! "${SKIP_ECHO-}" ]; then - echo "+ $*" - fi + echo "+ $*" if [ ! "${DRY_RUN-}" ]; then sh -c "$*" fi @@ -465,8 +467,21 @@ echo_cache_dir() { fi } +echo() { + builtin echo "$@" | humanpath +} + +cat() { + humanpath +} + echoerr() { echo "$@" >&2 } +# humanpath replaces all occurances of $HOME with ~ +humanpath() { + sed "s#$HOME#~#g" +} + main "$@"