Skip to content

Add auto install script #1701

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

Merged
merged 27 commits into from
May 28, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
96eeb9f
Fix install instructions for SUSE
nhooyr May 20, 2020
3b11733
Add auto install script
nhooyr May 20, 2020
0129e00
Add install.sh into README.md
nhooyr May 20, 2020
510d848
install.sh: Add our own flag parser
nhooyr May 21, 2020
c80b274
install.sh: Fixes from @code-asher's review
nhooyr May 21, 2020
e0172d0
Minor fixes for install.sh and bundle in libstdc++
nhooyr May 21, 2020
a40dabb
Add install script to docs
nhooyr May 21, 2020
f117475
install.md: Add https://github.com/linuxserver/docker-code-server
nhooyr May 21, 2020
ac9b57c
Properly bundle in libstdc++
nhooyr May 21, 2020
e55d3e4
Bundle in libicu on macOS
nhooyr May 22, 2020
15cd727
Replace gif with screenshot
nhooyr May 22, 2020
7dcfde7
Documentation fixes
nhooyr May 22, 2020
42b5152
Further documentation cleanup
nhooyr May 22, 2020
7ef82d8
Improved install.sh flags
nhooyr May 22, 2020
e9101a2
Improve formatting
nhooyr May 27, 2020
c51d94d
Document PWA
nhooyr May 27, 2020
eb17a29
Document Microsoft's Remote extensions
nhooyr May 27, 2020
33bca2d
Adjust nfpm config for bindir removal
nhooyr May 27, 2020
665ca01
Fixes from @code-asher's godly review
nhooyr May 27, 2020
fa45fd0
Rename static releases to binary releases
nhooyr May 27, 2020
06c26a2
Improve aur installation clarity
nhooyr May 27, 2020
f71d887
Rename binary release to standalone
nhooyr May 27, 2020
29e5c4a
Clarify npm docs in install.md
nhooyr May 27, 2020
af398c4
Workaround lack of builtin in /bin/sh
nhooyr May 27, 2020
30e9c51
Further improve AUR installation
nhooyr May 27, 2020
fbd8564
Fix CI
nhooyr May 27, 2020
69ad529
v3.4.0
nhooyr May 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion ci/dev/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
16 changes: 7 additions & 9 deletions doc/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down
10 changes: 5 additions & 5 deletions doc/guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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

Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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).
8 changes: 4 additions & 4 deletions doc/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -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).

Expand Down
67 changes: 41 additions & 26 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ main() {
DRY_RUN \
METHOD \
ARCHIVE_INSTALL_PREFIX \
SKIP_ECHO \
VERSION \
OPTIONAL

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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
}
Expand All @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -431,9 +435,7 @@ command_exists() {
}

sh_c() {
if [ ! "${SKIP_ECHO-}" ]; then
echo "+ $*"
fi
echo "+ $*"
if [ ! "${DRY_RUN-}" ]; then
sh -c "$*"
fi
Expand Down Expand Up @@ -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 "$@"