2
2
set -eu
3
3
4
4
# code-server's automatic install script.
5
- # See https://github .com/cdr /code-server/blob/main/docs /install
5
+ # See https://coder .com/docs /code-server/v3.10.2 /install
6
6
7
7
usage () {
8
8
arg0=" $0 "
@@ -48,24 +48,23 @@ Usage:
48
48
--rsh <bin>
49
49
Specifies the remote shell for remote installation. Defaults to ssh.
50
50
51
- - For Debian, Ubuntu and Raspbian it will install the latest deb package.
52
- - For Fedora, CentOS, RHEL and openSUSE it will install the latest rpm package.
53
- - For Arch Linux it will install the AUR package.
54
- - For any unrecognized Linux operating system it will install the latest standalone
55
- release into ~/.local
51
+ The detection method works as follows:
52
+ - Debian, Ubuntu, Raspbian: install the deb package from GitHub.
53
+ - Fedora, CentOS, RHEL, openSUSE: install the rpm package from GitHub.
54
+ - Arch Linux: install from the AUR (which pulls releases from GitHub).
55
+ - FreeBSD, Alpine: install from yarn/npm.
56
+ - macOS: install using Homebrew if installed otherwise install from GitHub.
57
+ - All others: install the release from GitHub.
56
58
57
- - For macOS it will install the Homebrew package.
58
- - If Homebrew is not installed it will install the latest standalone release
59
- into ~/.local
59
+ We only build releases on GitHub for amd64 and arm64 on Linux and amd64 for
60
+ macOS. When the detection method tries to pull a release from GitHub it will
61
+ fall back to installing from npm when there is no matching release for the
62
+ system's operating system and architecture.
60
63
61
- - For FreeBSD or Alpine, it will install the npm package with yarn or npm.
64
+ The standalone method will force installion using GitHub releases. It will not
65
+ fall back to npm so on architectures without pre-built releases this will error.
62
66
63
- - If ran on an architecture with no releases, it will install the
64
- npm package with yarn or npm.
65
- - We only have releases for amd64 and arm64 presently.
66
- - The npm package builds the native modules on postinstall.
67
-
68
- It will cache all downloaded assets into ~/.cache/code-server
67
+ The installer will cache all downloaded assets into ~/.cache/code-server
69
68
70
69
More installation docs are at https://coder.com/docs/code-server/v3.10.2/install
71
70
EOF
@@ -198,80 +197,63 @@ main() {
198
197
return
199
198
fi
200
199
201
- VERSION=" ${VERSION-$(echo_latest_version)} "
202
200
METHOD=" ${METHOD-detect} "
203
201
if [ " $METHOD " != detect ] && [ " $METHOD " != standalone ]; then
204
202
echoerr " Unknown install method \" $METHOD \" "
205
203
echoerr " Run with --help to see usage."
206
204
exit 1
207
205
fi
208
- STANDALONE_INSTALL_PREFIX=" ${STANDALONE_INSTALL_PREFIX-$HOME / .local} "
209
206
210
- OS=" $( os) "
211
- if [ ! " $OS " ]; then
212
- echoerr " Unsupported OS $( uname) ."
213
- exit 1
214
- fi
207
+ # These are used by the various install_* functions that make use of GitHub
208
+ # releases in order to download and unpack the right release.
209
+ CACHE_DIR=$( echo_cache_dir)
210
+ STANDALONE_INSTALL_PREFIX=${STANDALONE_INSTALL_PREFIX:- $HOME / .local}
211
+ VERSION=${VERSION:- $(echo_latest_version)}
212
+ OS=$( os)
213
+ ARCH=$( arch)
215
214
216
215
distro_name
217
216
218
- ARCH=" $( arch) "
219
- if [ ! " $ARCH " ]; then
220
- if [ " $METHOD " = standalone ]; then
221
- echoerr " No precompiled releases for $( uname -m) ."
222
- echoerr ' Please rerun without the "--method standalone" flag to install from npm.'
223
- exit 1
224
- fi
225
- echoh " No precompiled releases for $( uname -m) ."
226
- install_npm
227
- return
228
- fi
229
-
230
- if [ " $OS " = " freebsd" ]; then
231
- if [ " $METHOD " = standalone ]; then
232
- echoerr " No precompiled releases available for $OS ."
233
- echoerr ' Please rerun without the "--method standalone" flag to install from npm.'
234
- exit 1
235
- fi
236
- echoh " No precompiled releases available for $OS ."
237
- install_npm
238
- return
239
- fi
240
-
241
- if [ " $OS " = " linux" ] && [ " $( distro) " = " alpine" ]; then
242
- if [ " $METHOD " = standalone ]; then
243
- echoerr " No precompiled releases available for alpine."
244
- echoerr ' Please rerun without the "--method standalone" flag to install from npm.'
217
+ # Standalone installs by pulling pre-built releases from GitHub.
218
+ if [ " $METHOD " = standalone ]; then
219
+ if has_standalone; then
220
+ install_standalone
221
+ else
222
+ echoerr " There are no standalone releases for $( arch) "
223
+ echoerr " Please try again without '--method standalone'"
245
224
exit 1
246
225
fi
247
- echoh " No precompiled releases available for alpine."
248
- install_npm
249
- return
250
- fi
251
-
252
- CACHE_DIR=" $( echo_cache_dir) "
253
-
254
- if [ " $METHOD " = standalone ]; then
255
- install_standalone
256
- return
257
226
fi
258
227
228
+ # Otherwise try using the system's package manager where possible.
259
229
case " $( distro) " in
230
+ # macOS uses brew which should work for any architecture. Fall back to
231
+ # standalone/npm if brew is not installed.
260
232
macos)
261
- install_macos
262
- ;;
263
- debian)
264
- install_deb
265
- ;;
266
- fedora | opensuse)
267
- install_rpm
268
- ;;
269
- arch)
270
- install_aur
233
+ if command_exists brew; then
234
+ install_brew
235
+ else
236
+ echoh " Homebrew not installed."
237
+ echoh " Falling back to standalone installation."
238
+ npm_fallback install_standalone
239
+ fi
271
240
;;
241
+ # The .deb and .rpm files are pulled from GitHub and we only have amd64 and
242
+ # arm64 there and need to fall back to npm otherwise.
243
+ debian) npm_fallback install_deb ;;
244
+ fedora | opensuse) npm_fallback install_rpm ;;
245
+ # Arch uses the AUR package which only supports amd64 and arm64 since it
246
+ # pulls releases from GitHub so we need to fall back to npm.
247
+ arch) npm_fallback install_aur ;;
248
+ # We don't have GitHub releases that work on Alpine or FreeBSD so we have no
249
+ # choice but to use npm here.
250
+ alpine | freebsd) install_npm ;;
251
+ # For anything else we'll try to install standalone but fall back to npm if
252
+ # we don't have releases for the architecture.
272
253
* )
273
254
echoh " Unsupported package manager."
274
- install_standalone
255
+ echoh " Falling back to standalone installation."
256
+ npm_install install_standalone
275
257
;;
276
258
esac
277
259
}
@@ -326,19 +308,11 @@ fetch() {
326
308
sh_c mv " $FILE .incomplete" " $FILE "
327
309
}
328
310
329
- install_macos () {
330
- if command_exists brew; then
331
- echoh " Installing from Homebrew."
332
- echoh
333
-
334
- sh_c brew install code-server
335
-
336
- return
337
- fi
338
-
339
- echoh " Homebrew not installed."
311
+ install_brew () {
312
+ echoh " Installing from Homebrew."
313
+ echoh
340
314
341
- install_standalone
315
+ sh_c brew install code-server
342
316
}
343
317
344
318
install_deb () {
@@ -434,22 +408,41 @@ install_npm() {
434
408
exit 1
435
409
}
436
410
437
- os () {
438
- case " $( uname) " in
439
- Linux)
440
- echo linux
441
- ;;
442
- Darwin)
443
- echo macos
444
- ;;
445
- FreeBSD)
446
- echo freebsd
411
+ # Run $1 if we have a standalone otherwise run install_npm.
412
+ npm_fallback () {
413
+ if has_standalone; then
414
+ $1
415
+ else
416
+ echoh " No standalone releases for $( arch) ."
417
+ echoh " Falling back to installation from npm."
418
+ install_npm
419
+ fi
420
+ }
421
+
422
+ # Determine if we have standalone releases on GitHub for the system's arch.
423
+ has_standalone () {
424
+ case $( arch) in
425
+ amd64) return 0 ;;
426
+ # We only have amd64 for macOS.
427
+ arm64)
428
+ [ " $( distro) " != macos ]
429
+ return
447
430
;;
431
+ * ) return 1 ;;
448
432
esac
449
433
}
450
434
451
- # distro prints the detected operating system including linux distros.
452
- # Also parses ID_LIKE for common distro bases.
435
+ os () {
436
+ uname=" $( uname) "
437
+ case $uname in
438
+ Linux) echo linux ;;
439
+ Darwin) echo macos ;;
440
+ FreeBSD) echo freebsd ;;
441
+ * ) echo " $uname " ;;
442
+ esac
443
+ }
444
+
445
+ # Print the detected Linux distro, otherwise print the OS name.
453
446
#
454
447
# Example outputs:
455
448
# - macos -> macos
@@ -486,7 +479,7 @@ distro() {
486
479
fi
487
480
}
488
481
489
- # os_name prints a pretty human readable name for the OS/Distro .
482
+ # Print a human- readable name for the OS/distro .
490
483
distro_name () {
491
484
if [ " $( uname) " = " Darwin" ]; then
492
485
echo " macOS v$( sw_vers -productVersion) "
@@ -506,16 +499,11 @@ distro_name() {
506
499
}
507
500
508
501
arch () {
509
- case " $( uname -m) " in
510
- aarch64)
511
- echo arm64
512
- ;;
513
- x86_64)
514
- echo amd64
515
- ;;
516
- amd64) # FreeBSD.
517
- echo amd64
518
- ;;
502
+ uname_m=$( uname -m)
503
+ case $uname_m in
504
+ aarch64) echo arm64 ;;
505
+ x86_64) echo amd64 ;;
506
+ * ) echo " $uname_m " ;;
519
507
esac
520
508
}
521
509
0 commit comments