Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gzupanda
code-server
提交
7ef82d84
C
code-server
项目概览
gzupanda
/
code-server
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
code-server
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
7ef82d84
编写于
5月 22, 2020
作者:
A
Anmol Sethi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improved install.sh flags
上级
42b51528
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
172 addition
and
139 deletion
+172
-139
README.md
README.md
+12
-7
ci/build/build-code-server.sh
ci/build/build-code-server.sh
+2
-2
ci/build/build-static-release.sh
ci/build/build-static-release.sh
+2
-1
ci/build/code-server.sh
ci/build/code-server.sh
+1
-1
doc/FAQ.md
doc/FAQ.md
+1
-1
doc/guide.md
doc/guide.md
+36
-38
doc/install.md
doc/install.md
+13
-11
install.sh
install.sh
+105
-78
未找到文件。
README.md
浏览文件 @
7ef82d84
...
...
@@ -6,18 +6,19 @@ Run [VS Code](https://github.com/Microsoft/vscode) on any machine anywhere and a
## Highlights
-
**Code everywhere:**
Code on your Chromebook, tablet, and laptop with a
consistent dev environment. Develop on a Linux machine and pick up from any
device with a web browser.
-
**Server-powered:**
Take advantage of large cloud servers to speed up tests, compilations, downloads, and more.
Preserve battery life when you're on the go since all intensive tasks runs on your server.
Make use of a spare computer you have lying around and turn it into a full development environment.
-
**Code everywhere**
-
Code on your Chromebook, tablet, and laptop with a consistent development environment.
-
Develop on a Linux machine and pick up from any device with a web browser.
-
**Server-powered**
-
Take advantage of large cloud servers to speed up tests, compilations, downloads, and more.
-
Preserve battery life when you're on the go as all intensive tasks runs on your server.
-
Make use of a spare computer you have lying around and turn it into a full development environment.
## Getting Started
For a full setup and walkthrough, please see
[
./doc/guide.md
](
./doc/guide.md
)
.
[
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.
...
...
@@ -35,6 +36,10 @@ curl -fsSL https://code-server.dev/install.sh | sh
The install script will print out how to run and start using code-server.
If you believe an install script used with
`curl | sh`
is insecure, please give
[
this wonderful blogpost
](
https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install
)
by
[
sandstorm.io
](
https://sandstorm.io
)
a read.
Docs on the install script, manual installation and docker image are at
[
./doc/install.md
](
./doc/install.md
)
.
## FAQ
...
...
ci/build/build-code-server.sh
浏览文件 @
7ef82d84
...
...
@@ -9,7 +9,7 @@ MINIFY=${MINIFY-true}
main
()
{
cd
"
$(
dirname
"
${
0
}
"
)
/../.."
npx
tsc
--outDir
out
--tsBuildInfoFile
.cache/out.tsbuildinfo
tsc
--outDir
out
--tsBuildInfoFile
.cache/out.tsbuildinfo
# If out/node/entry.js does not already have the shebang,
# we make sure to add it and make it executable.
if
!
grep
-q
-m1
"^#!/usr/bin/env node"
out/node/entry.js
;
then
...
...
@@ -17,7 +17,7 @@ main() {
chmod
+x out/node/entry.js
fi
npx
parcel build
\
parcel build
\
--public-url
"/static/
$(
git rev-parse HEAD
)
/dist"
\
--out-dir
dist
\
$(
[[
$MINIFY
]]
||
echo
--no-minify
)
\
...
...
ci/build/build-static-release.sh
浏览文件 @
7ef82d84
...
...
@@ -34,7 +34,8 @@ main() {
}
bundle_dynamic_lib
()
{
lib_name
=
"
$1
"
local
lib_name
=
"
$1
"
local
lib_path
if
[[
$OS
==
"linux"
]]
;
then
lib_path
=
"
$(
ldd
"
$RELEASE_PATH
/lib/node"
|
grep
"
$lib_name
"
|
awk
'{print $3 }'
)
"
...
...
ci/build/code-server.sh
浏览文件 @
7ef82d84
...
...
@@ -19,7 +19,7 @@ bin_dir() {
BIN_DIR
=
$(
bin_dir
)
if
[
"
$(
uname
)
"
=
"Linux"
]
;
then
export
LD_LIBRARY_PATH
=
"
$BIN_DIR
/../lib
${
LD_LIBRARY_PATH
+
:
$LD_LIBRARY_PATH
}
"
el
se
el
if
[
"
$(
uname
)
"
=
"Darwin"
]
;
then
export
DYLD_LIBRARY_PATH
=
"
$BIN_DIR
/../lib
${
DYLD_LIBRARY_PATH
+
:
$DYLD_LIBRARY_PATH
}
"
fi
exec
"
$BIN_DIR
/../lib/node"
"
$BIN_DIR
/.."
"
$@
"
doc/FAQ.md
浏览文件 @
7ef82d84
...
...
@@ -40,7 +40,7 @@ See https://cdn.vsassets.io/v/M146_20190123.39/_content/Microsoft-Visual-Studio-
> Marketplace Offerings are intended for use only with Visual Studio Products and Services
> and you may only install and use Marketplace Offerings with Visual Studio Products and Services.
As a result,
[
Coder
](
https://coder.com
)
has created its
own marketplace for open source extensions.
As a result,
we have created our
own marketplace for open source extensions.
It works by scraping GitHub for VS Code extensions and building them. It's not perfect but getting
better by the day with more and more extensions.
...
...
doc/guide.md
浏览文件 @
7ef82d84
...
...
@@ -15,21 +15,22 @@
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
This guide demonstrates how to setup and use
code-server
.
To reiterate,
code-server
lets you run VS Code on a remote server and then access it via a browser.
This guide demonstrates how to setup and use
`code-server`
.
To reiterate,
`code-server`
lets you run VS Code on a remote server and then access it via a browser.
Further docs are at:
-
[
README.md
](
../README.md
)
for a general overview
-
[
FAQ.md
](
./FAQ.md
)
for common questions.
-
[
CONTRIBUTING.md
](
../doc/CONTRIBUTING.md
)
for development docs
-
[
README
](
../README.md
)
for a general overview
-
[
INSTALL
](
../doc/install.md
)
for installation
-
[
FAQ
](
./FAQ.md
)
for common questions.
-
[
CONTRIBUTING
](
../doc/CONTRIBUTING.md
)
for development docs
We'll walk you through acquiring a remote machine to run
code-server
on
We'll walk you through acquiring a remote machine to run
`code-server`
on
and then exposing
`code-server`
so you can securely access it.
## 1. Acquire a remote machine
First, you need a machine to run
code-server
on. You can use a physical
First, you need a machine to run
`code-server`
on. You can use a physical
machine you have lying around or use a VM on GCP/AWS.
### Requirements
...
...
@@ -64,7 +65,6 @@ Once you've signed up and created a GCP project, create a new Compute Engine VM
-
Click
`Change`
under
`Boot Disk`
and change the type to
`SSD Persistent Disk`
and the size
to
`32`
.
-
You can always grow your disk later.
-
The default OS of Debian 10 is fine.
8.
Navigate to
`Networking -> Network interfaces`
and edit the existing interface
to use a static external IP.
-
Click done to save network interface changes.
...
...
@@ -78,7 +78,7 @@ 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.
...
...
@@ -94,7 +94,7 @@ Now to actually install:
curl
-fsSL
https://code-server.dev/install.sh | sh
```
The install script will print out how to run and start using
code-server
.
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
)
.
...
...
@@ -103,32 +103,29 @@ Docs on the install script, manual installation and docker image are at [./doc/i
**Never**
,
**ever**
expose
`code-server`
directly to the internet without some form of authentication
and encryption as someone can completely takeover your machine with the terminal.
By default, code-server will enable password authentication which will
require you to copy the password from the code-server config file to login. Since it
cannot use TLS by default, it will listen on
`localhost`
to avoid exposing itself
to the world. This is fine for testing but will not work if you want to access
`code-server`
By default,
`code-server`
will enable password authentication which will require you to copy the
password from the
`code-server`
config file to login. It will listen on
`localhost`
to avoid exposing
itself to the world. This is fine for testing but will not work if you want to access
`code-server`
from a different machine.
There are several approaches to securely operating and exposing
code-server
.
There are several approaches to securely operating and exposing
`code-server`
.
**tip**
: You can list the full set of
code-server
options with
`code-server --help`
**tip**
: You can list the full set of
`code-server`
options with
`code-server --help`
### SSH forwarding
We highly recommend this approach for not requiring any additional setup, you just need an
SSH server on your remote machine. The downside is you won't be able to access
`code-server`
without an SSH client like a
n iPad. If that's important to you, skip to
[
Let's Encrypt
](
#lets-encrypt
)
.
on any machine without an SSH client like o
n iPad. If that's important to you, skip to
[
Let's Encrypt
](
#lets-encrypt
)
.
Recommended reading: https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding.
First, ssh into your instance and edit your code-server config file to disable password authentication.
First, ssh into your instance and edit your
`code-server`
config file to disable password authentication.
```
bash
# Replaces "auth: password" with "auth: none" in the code-server config.
sed
-i
.bak
's/auth: password/auth: none/'
~/.config/code-server/config.yaml
```
Restart
code-server
with (assuming you followed the guide):
Restart
`code-server`
with (assuming you followed the guide):
```
bash
systemctl
--user
restart code-server
...
...
@@ -136,12 +133,14 @@ systemctl --user restart code-server
Now forward local port 8080 to
`127.0.0.1:8080`
on the remote instance.
Recommended reading: https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding.
```
bash
# -N disables executing a remote shell
ssh
-N
-L
8080:127.0.0.1:8080 <instance-ip>
```
Now if you access http://127.0.0.1:8080 locally, you should see
code-server
!
Now if you access http://127.0.0.1:8080 locally, you should see
`code-server`
!
If you want to make the SSH port forwarding persistent we recommend using
[
mutagen
](
https://mutagen.io/documentation/introduction/installation
)
.
...
...
@@ -168,8 +167,8 @@ and sign commits without copying your keys.
### Let's Encrypt
[
Let's Encrypt
](
https://letsencrypt.org
)
is a great option if you want to access
code-server
on an iPad
or do not want to use SSH forwarding. This does require that the remote machine
is
exposed to the internet.
[
Let's Encrypt
](
https://letsencrypt.org
)
is a great option if you want to access
`code-server`
on an iPad
or do not want to use SSH forwarding. This does require that the remote machine
be
exposed to the internet.
Assuming you have been following the guide, edit your instance and checkmark the allow HTTP/HTTPS traffic options.
...
...
@@ -198,9 +197,9 @@ reverse_proxy 127.0.0.1:8080
sudo
systemctl reload caddy
```
Visit
`https://<your-domain-name>`
to access
code-server
. Congratulations!
Visit
`https://<your-domain-name>`
to access
`code-server`
. Congratulations!
In a future release we plan to integrate Let's Encrypt directly with
code-server
to avoid
In a future release we plan to integrate Let's Encrypt directly with
`code-server`
to avoid
the dependency on caddy.
### Self Signed Certificate
...
...
@@ -210,13 +209,12 @@ have to use [Let's Encrypt](#lets-encrypt) instead. See the [FAQ](https://github
Recommended reading: https://security.stackexchange.com/a/8112.
We recommend this as a last resort
as
self signed certificates do not work with iPads and can
cause other bizarre issues. Not to mention all the warnings when you access
code-server
.
We recommend this as a last resort
because
self signed certificates do not work with iPads and can
cause other bizarre issues. Not to mention all the warnings when you access
`code-server`
.
Only use this if:
1.
You do not want to buy a domain.
2.
You cannot expose the remote machine to the internet.
3.
You do not want to use SSH forwarding.
1.
You do not want to buy a domain or you cannot expose the remote machine to the internet.
2.
You do not want to use SSH forwarding.
ssh into your instance and edit your code-server config file to use a randomly generated self signed certificate:
...
...
@@ -229,7 +227,7 @@ sed -i.bak 's/bind-addr: 127.0.0.1:8080/bind-addr: 0.0.0.0:443/' ~/.config/code-
sudo
setcap
cap_net_bind_service
=
+ep /usr/lib/code-server/lib/node
```
Assuming you have been following the guide, restart
code-server
with:
Assuming you have been following the guide, restart
`code-server`
with:
```
bash
systemctl
--user
restart code-server
...
...
@@ -237,17 +235,17 @@ systemctl --user restart code-server
Edit your instance and checkmark the allow HTTPS traffic option.
Visit
`https://<your-instance-ip>`
to access
code-server
.
Visit
`https://<your-instance-ip>`
to access
`code-server`
.
You'll get a warning when accessing but if you click through you should be good.
To avoid the warnings, you can use
[
mkcert
](
https://mkcert.dev
)
to create a self signed certificate
trusted by your OS and then pass it into
code-server
via the
`cert`
and
`cert-key`
config
trusted by your OS and then pass it into
`code-server`
via the
`cert`
and
`cert-key`
config
fields.
### Change the password?
Edit the
`password`
field in the
code-server
config file at
`~/.config/code-server/config.yaml`
and then restart
code-server
with:
Edit the
`password`
field in the
`code-server`
config file at
`~/.config/code-server/config.yaml`
and then restart
`code-server`
with:
```
bash
systemctl
--user
restart code-server
...
...
@@ -255,6 +253,6 @@ systemctl --user restart code-server
### How do I securely access development web services?
If you're working on a web service and want to access it locally,
code-server
can proxy it for you.
If you're working on a web service and want to access it locally,
`code-server`
can proxy it for you.
See
[
FAQ.md
](
https://github.com/cdr/code-server/blob/master/doc/FAQ.md#how-do-i-securely-access-web-services
)
.
See
the
[
FAQ
](
https://github.com/cdr/code-server/blob/master/doc/FAQ.md#how-do-i-securely-access-web-services
)
.
doc/install.md
浏览文件 @
7ef82d84
...
...
@@ -4,7 +4,7 @@
-
[
install.sh
](
#installsh
)
-
[
Flags
](
#flags
)
-
[
Installation reference
](
#installation
-reference
)
-
[
Detect Reference
](
#detect
-reference
)
-
[
Debian, Ubuntu
](
#debian-ubuntu
)
-
[
Fedora, CentOS, RHEL, SUSE
](
#fedora-centos-rhel-suse
)
-
[
Arch Linux
](
#arch-linux
)
...
...
@@ -20,7 +20,7 @@ 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.
...
...
@@ -42,19 +42,21 @@ If you believe an install script used with `curl | sh` is insecure, please give
[
this wonderful blogpost
](
https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install
)
by
[
sandstorm.io
](
https://sandstorm.io
)
a read.
If you'd still prefer manual installation despite the below
[
reference
](
#
reference
)
and
`--dry-run`
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
commands presented in the rest of this document.
### Flags
-
`--dry-run`
to echo the commands for the install process without running them.
-
`--static`
to install a static release into
`~/.local`
.
-
`--static=/usr/local`
to install a static release system wide.
-
`--method`
to choose the installation method.
-
`--method=detect`
to detect the package manager but fallback to
`--method=archive`
.
-
`--method=archive`
to install a static release archive into
`~/.local`
.
-
`--prefix=/usr/local`
to install a static release archive system wide.
-
`--version=X.X.X`
to install version
`X.X.X`
instead of latest.
-
`--help`
to see full usage docs.
### Reference
###
Detect
Reference
-
For Debian, Ubuntu and Raspbian it will install the latest deb package.
-
For Fedora, CentOS, RHEL and openSUSE it will install the latest rpm package.
...
...
@@ -66,7 +68,7 @@ commands presented in the rest of this document.
-
For macOS it will install the Homebrew package.
-
If Homebrew is not installed it will install the latest static release into
`~/.local`
.
-
Add
~/.local/bin to your
\$
PATH
to run code-server.
-
Add
`~/.local/bin`
to your
`$PATH`
to run code-server.
-
If ran on an architecture with no binary releases, it will install the npm package with
`yarn`
or
`npm`
.
-
We only have binary releases for amd64 and arm64 presently.
...
...
@@ -137,14 +139,14 @@ brew services start code-server
## Static Releases
We publish self contained
`.tar.gz`
archives for every release on
[
github
](
https://github.com/cdr/code-server/releases
)
.
They bundle the node binary and
node_modules
.
They bundle the node binary and
`node_modules`
.
1.
Download the latest release archive for your system from
[
github
](
https://github.com/cdr/code-server/releases
)
.
2.
Unpack the release.
3.
You can run code-server by executing
`./bin/code-server`
.
You can add the code-server
`bin`
directory to your
`$PATH`
or link to it from a
directory in your
`$PATH`
to easily execute
`code-server`
without the full path every time.
You can add the code-server
`bin`
directory to your
`$PATH`
to easily execute
`code-server`
without the full path every time.
Here is an example script for installing and using a static
`code-server`
release on Linux:
...
...
@@ -174,6 +176,6 @@ docker run -it -p 127.0.0.1:8080:8080 \
Our official image supports
`amd64`
and
`arm64`
.
For
`arm32`
support there is a
highly
popular community maintained alternative:
For
`arm32`
support there is a popular community maintained alternative:
https://hub.docker.com/r/linuxserver/code-server
install.sh
浏览文件 @
7ef82d84
#!/bin/sh
set
-eu
# code-server's automatic install script.
# See https://github.com/cdr/code-server/blob/master/doc/install.md
usage
()
{
cli
=
"
$0
"
arg0
=
"
$0
"
if
[
"
$0
"
=
sh
]
;
then
cli
=
"curl -fsSL https://code-server.dev/install.sh | sh -s --"
arg0
=
"curl -fsSL https://code-server.dev/install.sh | sh -s --"
else
curl_usage
=
"The latest script is available at https://code-server.dev/install.sh"
curl_usage
=
"The latest script is available at https://code-server.dev/install.sh
"
fi
cat
<<
EOF
Installs code-server for Linux
or
macOS.
Installs code-server for Linux
and
macOS.
It tries to use the system package manager if possible.
After successful installation it explains how to start using code-server.
${
curl_usage
-
}
Usage:
$cli
[--dry-run] [--version X.X.X] [--static <install-prefix>=~/.local]
--dry-run Echo the commands for the install process without running them.
--version Install a specific version instead of the latest release.
--static Install a static release into ~/.local
The release will be unarchived into ~/.local/lib/code-server.X.X.X
and the binary symlinked into ~/.local/bin/code-server.
Add ~/.local/bin to your
\$
PATH to use it.
To install system wide pass ---static=/usr/local
$arg0
[--dry-run] [--version X.X.X] [--method detect] [--prefix ~/.local]
--dry-run
Echo the commands for the install process without running them.
--version X.X.X
Install a specific version instead of the latest.
--method [detect | archive]
Choose the installation method. Defaults to detect.
- detect detects the system package manager and tries to use it.
Full reference on the process is further below.
- archive installs a static release archive into ~/.local
Add ~/.local/bin to your
\$
PATH to use it.
--prefix <dir>
Sets the prefix used by static release archives. Defaults to ~/.local
The release is unarchived into ~/.local/lib/code-server-X.X.X
and the binary symlinked into ~/.local/bin/code-server
To install system wide pass ---prefix=/usr/local
- For Debian, Ubuntu and Raspbian it will install the latest deb package.
- For Fedora, CentOS, RHEL and openSUSE it will install the latest rpm package.
- For Arch Linux it will install the AUR package.
- For any unrecognized Linux operating system it will install the latest static
release into ~/.local
- Add ~/.local/bin to your
\$
PATH to run code-server.
- For macOS it will install the Homebrew package.
- If Homebrew is not installed it will install the latest static release
into ~/.local
- Add ~/.local/bin to your
\$
PATH to run code-server.
- If ran on an architecture with no binary releases, it will install the
npm package with yarn or npm.
- We only have binary releases for amd64 and arm64 presently.
It will cache all downloaded assets into ~/.cache/code-server
More installation docs are at https://github.com/cdr/code-server/blob/master/doc/install.md
EOF
}
...
...
@@ -60,10 +68,9 @@ echo_latest_version() {
echo_static_postinstall
()
{
echo
cat
<<
EOF
Static release has been installed into
$STATIC_INSTALL_PREFIX
/lib/code-server-
$VERSION
Static release has been installed into
$ARCHIVE_INSTALL_PREFIX
/lib/code-server-
$VERSION
Please extend your path to use code-server:
PATH="
$
STATIC
_INSTALL_PREFIX
/bin:
\$
PATH"
PATH="
$
ARCHIVE
_INSTALL_PREFIX
/bin:
\$
PATH"
Then you can run:
code-server
EOF
...
...
@@ -86,8 +93,8 @@ main() {
unset
\
DRY_RUN
\
STATIC
\
STATIC
_INSTALL_PREFIX
\
METHOD
\
ARCHIVE
_INSTALL_PREFIX
\
SKIP_ECHO
\
VERSION
\
OPTIONAL
...
...
@@ -97,16 +104,19 @@ main() {
--dry-run
)
DRY_RUN
=
1
;;
--
static
)
STATIC
=
1
if
[
"
${
2
-
}
"
]
;
then
STATIC_INSTALL_PREFIX
=
"
$(
OPTIONAL
=
1 parse_arg
"
$@
"
)
"
shift
fi
--
method
)
METHOD
=
"
$(
parse_arg
"
$@
"
)
"
shift
;;
--method
=
*
)
METHOD
=
"
$(
parse_arg
"
$@
"
)
"
;;
--static
=
*
)
STATIC
=
1
STATIC_INSTALL_PREFIX
=
"
$(
OPTIONAL
=
1 parse_arg
"
$@
"
)
"
--prefix
)
ARCHIVE_INSTALL_PREFIX
=
"
$(
parse_arg
"
$@
"
)
"
shift
;;
--prefix
=
*
)
ARCHIVE_INSTALL_PREFIX
=
"
$(
parse_arg
"
$@
"
)
"
;;
--version
)
VERSION
=
"
$(
parse_arg
"
$@
"
)
"
...
...
@@ -115,7 +125,7 @@ main() {
--version
=
*
)
VERSION
=
"
$(
parse_arg
"
$@
"
)
"
;;
-h
|
--help
)
-h
|
--h
|
-help
|
--h
elp
)
usage
exit
0
;;
...
...
@@ -130,7 +140,13 @@ main() {
done
VERSION
=
"
${
VERSION
-
$(
echo_latest_version
)
}
"
STATIC_INSTALL_PREFIX
=
"
${
STATIC_INSTALL_PREFIX
-
$HOME
/.local
}
"
METHOD
=
"
${
METHOD
-detect
}
"
if
[
"
$METHOD
"
!=
detect
]
&&
[
"
$METHOD
"
!=
archive
]
;
then
echoerr
"Unknown install method
\"
$METHOD
\"
"
echoerr
"Run with --help to see usage."
exit
1
fi
ARCHIVE_INSTALL_PREFIX
=
"
${
ARCHIVE_INSTALL_PREFIX
-
$HOME
/.local
}
"
OS
=
"
$(
os
)
"
if
[
!
"
$OS
"
]
;
then
...
...
@@ -142,11 +158,12 @@ main() {
ARCH
=
"
$(
arch
)
"
if
[
!
"
$ARCH
"
]
;
then
if
[
"
$
{
STATIC
-
}
"
]
;
then
if
[
"
$
METHOD
"
=
archive
]
;
then
echoerr
"No static releases available for the architecture
$(
uname
-m
)
."
echoerr
"Please rerun without the --static flag to install from npm."
echoerr
'Please rerun without the "--method archive" flag to install from npm.'
exit
1
fi
echo
"No precompiled releases for
$(
uname
-m
)
."
install_npm
return
fi
...
...
@@ -154,8 +171,8 @@ main() {
CACHE_DIR
=
"
$(
echo_cache_dir
)
"
mkdir
-p
"
$CACHE_DIR
"
if
[
"
$
{
STATIC
-
}
"
]
;
then
install_
static
if
[
"
$
METHOD
"
=
archive
]
;
then
install_
archive
return
fi
...
...
@@ -170,10 +187,11 @@ main() {
install_rpm
;;
arch
)
install_a
rch
install_a
ur
;;
*
)
install_static
echo
"Unsupported package manager."
install_archive
;;
esac
}
...
...
@@ -212,36 +230,43 @@ fetch() {
URL
=
"
$1
"
FILE
=
"
$2
"
echo
"+ Downloading
$URL
"
if
[
-e
"
$FILE
"
]
;
then
echo
echo
"+ Using cached
$FILE
from
$URL
"
echo
"+ Using cached
$FILE
"
return
fi
SKIP_ECHO
=
1
sh_c curl
\
-#fL
\
-
R
o
"
$FILE
.incomplete"
\
-o
"
$FILE
.incomplete"
\
-C
-
\
"
$URL
"
SKIP_ECHO
=
1 sh_c
mv
"
$FILE
.incomplete"
"
$FILE
"
sh_c
mv
"
$FILE
.incomplete"
"
$FILE
"
unset
SKIP_ECHO
echo
"+ Downloaded into
$FILE
"
}
install_macos
()
{
if
command_exists brew
;
then
echo
"Installing from Homebrew."
echo
sh_c brew
install
code-server
return
fi
echo
"Homebrew
is not installed so installing static release
."
echo
"Homebrew
not installed
."
install_
static
install_
archive
}
install_deb
()
{
echo
"Installing v
$VERSION
deb package from GitHub releases."
echo
fetch
"https://github.com/cdr/code-server/releases/download/v
$VERSION
/code-server_
${
VERSION
}
_
$ARCH
.deb"
"
$CACHE_DIR
/code-server_
${
VERSION
}
_
$ARCH
.deb"
sudo_sh_c dpkg
-i
"
$CACHE_DIR
/code-server_
${
VERSION
}
_
$ARCH
.deb"
...
...
@@ -251,6 +276,7 @@ install_deb() {
install_rpm
()
{
echo
"Installing v
$VERSION
rpm package from GitHub releases."
echo
fetch
"https://github.com/cdr/code-server/releases/download/v
$VERSION
/code-server-
$VERSION
-
$ARCH
.rpm"
"
$CACHE_DIR
/code-server-
$VERSION
-
$ARCH
.rpm"
sudo_sh_c rpm
-i
"
$CACHE_DIR
/code-server-
$VERSION
-
$ARCH
.rpm"
...
...
@@ -260,65 +286,67 @@ install_rpm() {
install_aur
()
{
echo
"Installing from the AUR."
echo
fetch
"https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz"
"
$CACHE_DIR
/code-server-aur.tar.gz"
prev_dir
=
"
$PWD
"
tmp_dir
=
"
$(
mktemp
-d
)
"
(
cd
"
$tmp_dir
"
SKIP_ECHO
=
1 sh_c
tar
-xzf
"
$CACHE_DIR
/code-server-aur.tar.gz"
--strip-components
1
sh_c makepkg
-si
)
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
cd
"
$prev_dir
"
rm
-Rf
"
$tmp_dir
"
echo_systemd_postinstall
}
install_static
()
{
STATIC_INSTALL_PREFIX
=
${
STATIC_INSTALL_PREFIX
-/usr/local/lib
}
install_archive
()
{
echo
"Installing static release v
$VERSION
"
echo
fetch
"https://github.com/cdr/code-server/releases/download/v
$VERSION
/code-server-
$VERSION
-
$OS
-
$ARCH
.tar.gz"
"
$CACHE_DIR
/code-server-
$VERSION
-
$OS
-
$ARCH
.tar.gz"
if
[
!
-d
"
$STATIC_INSTALL_PREFIX
"
]
;
then
echo
echoerr
"Static release install prefix
$STATIC_INSTALL_PREFIX
does not exist"
exit
1
fi
fetch
"https://github.com/cdr/code-server/releases/download/v
$VERSION
/code-server-
$VERSION
-
$OS
-
$ARCH
.tar.gz"
\
"
$CACHE_DIR
/code-server-
$VERSION
-
$OS
-
$ARCH
.tar.gz"
sh_c
=
"sh_c"
if
[
!
-w
"
$
STATIC
_INSTALL_PREFIX
"
]
;
then
if
[
!
-w
"
$
ARCHIVE
_INSTALL_PREFIX
"
]
;
then
sh_c
=
"sudo_sh_c"
fi
SKIP_ECHO
=
1 sh_c
mkdir
-p
"
$STATIC_INSTALL_PREFIX
/lib"
"
$STATIC_INSTALL_PREFIX
/bin"
if
[
-e
"
$STATIC_INSTALL_PREFIX
/lib/code-server-
$VERSION
"
]
;
then
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
err
"code-server-
$VERSION
is already installed at
$STATIC
_INSTALL_PREFIX
/lib/code-server-
$VERSION
"
echo
err
"Please r
emove it to reinstall."
exit
1
echo
"code-server-
$VERSION
is already installed at
$ARCHIVE
_INSTALL_PREFIX
/lib/code-server-
$VERSION
"
echo
"R
emove it to reinstall."
exit
0
fi
"
$sh_c
"
tar
-C
"
$STATIC_INSTALL_PREFIX
/lib"
-xzf
"
$CACHE_DIR
/code-server-
$VERSION
-
$OS
-
$ARCH
.tar.gz"
"
$sh_c
"
mv
-f
"
$STATIC_INSTALL_PREFIX
/lib/code-server-
$VERSION
-
$OS
-
$ARCH
"
"
$STATIC_INSTALL_PREFIX
/lib/code-server-
$VERSION
"
"
$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"
echo_static_postinstall
}
install_npm
()
{
echoerr
"No precompiled releases for
$(
uname
-m
)
."
if
command_exists yarn
;
then
echo
"Installing with yarn."
echo
sh_c yarn global add code-server
--unsafe-perm
return
elif
command_exists npm
;
then
echo
"Installing with npm."
echo
sh_c npm
install
-g
code-server
--unsafe-perm
return
fi
echo
err
echo
echoerr
"Please install npm or yarn to install code-server!"
echoerr
"You will need at least node v12 and a few C
build
dependencies."
echoerr
"You will need at least node v12 and a few C dependencies."
echoerr
"See the docs https://github.com/cdr/code-server#yarn-npm"
exit
1
}
...
...
@@ -402,7 +430,6 @@ command_exists() {
sh_c
()
{
if
[
!
"
${
SKIP_ECHO
-
}
"
]
;
then
echo
echo
"+
$*
"
fi
if
[
!
"
${
DRY_RUN
-
}
"
]
;
then
...
...
@@ -421,7 +448,7 @@ sudo_sh_c() {
echo
echoerr
"This script needs to run the following command as root."
echoerr
"
$*
"
echoerr
"Please
run this script as root or
install sudo or su."
echoerr
"Please install sudo or su."
exit
1
fi
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录