freemt commited on
Commit
763a996
·
1 Parent(s): 22a1b68

Update mp.Pool

Browse files
.stignore ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .git
2
+ # Byte-compiled / optimized / DLL files
3
+ __pycache__
4
+ *.py[cod]
5
+ *$py.class
6
+
7
+ # C extensions
8
+ *.so
9
+
10
+ # Distribution / packaging
11
+ .Python
12
+ build
13
+ develop-eggs
14
+ dist
15
+ downloads
16
+ eggs
17
+ .eggs
18
+ lib
19
+ lib64
20
+ parts
21
+ sdist
22
+ var
23
+ wheels
24
+ pip-wheel-metadata
25
+ share/python-wheels
26
+ *.egg-info
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Translations
42
+ *.mo
43
+ *.pot
44
+
45
+ # Django stuff:
46
+ *.log
47
+ local_settings.py
48
+ db.sqlite3
49
+
50
+ # Flask stuff:
51
+ instance
52
+ .webassets-cache
53
+
54
+ # Scrapy stuff:
55
+ .scrapy
56
+
57
+ # Sphinx documentation
58
+ docs/_build
59
+
60
+ # PyBuilder
61
+ target
62
+
63
+ # Jupyter Notebook
64
+ .ipynb_checkpoints
65
+
66
+ # IPython
67
+ profile_default
68
+ ipython_config.py
69
+
70
+ # pyenv
71
+ .python-version
72
+
73
+ # celery beat schedule file
74
+ celerybeat-schedule
75
+
76
+ # SageMath parsed files
77
+ *.sage.py
78
+
79
+ # Environments
80
+ .env
81
+ .venv
82
+ env
83
+ venv
84
+ ENV
85
+ env.bak
86
+ venv.bak
87
+
88
+ # Spyder project settings
89
+ .spyderproject
90
+ .spyproject
91
+
92
+ # Rope project settings
93
+ .ropeproject
94
+
95
+ # mypy
96
+ .mypy_cache
97
+ .dmypy.json
98
+ dmypy.json
99
+
100
+ # Pyre type checker
101
+ .pyre
app.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Prep gradio API."""
2
+ # pylint: diable=invalid-name
3
+ from typing import List, Optional, Union
4
+
5
+ import os
6
+ from pathlib import Path
7
+ import multiprocessing as mp
8
+ import numpy as np
9
+ import psutil
10
+ import ray
11
+
12
+ import gradio as gr
13
+ # import joblib
14
+ import more_itertools as mit
15
+ import numpy as np
16
+ import psutil
17
+ import ray
18
+ from about_time import about_time
19
+ from logzero import logger
20
+
21
+ from radio_embed import radio_embed
22
+
23
+ num_cpus_m = mp.cpu_count()
24
+ num_cpus = psutil.cpu_count(logical=False)
25
+
26
+ filename = "fangfang-en.txt"
27
+ lines = Path(filename).read_text("utf8").splitlines()
28
+ lst = [_.strip() for _ in lines if _.strip()]
29
+
30
+ args_m = ["\n".join(elm) for elm in mit.divide(num_cpus_m, lst)]
31
+ args = ["\n".join(elm) for elm in mit.divide(num_cpus, lst)]
32
+
33
+
34
+ os.environ["TOKENIZERS_PARALLELISM"] = "false"
35
+
36
+ if not ray.is_initialized():
37
+ ray.init(num_cpus=num_cpus)
38
+
39
+
40
+ @ray.remote
41
+ def ray_embed(text):
42
+ """Embed text to d-512."""
43
+ return radio_embed(text)
44
+
45
+
46
+ def test_pool(func, args_, num_procs=None):
47
+ """Test mp.Pool."""
48
+ if num_procs is None:
49
+ num_procs = num_cpus_m
50
+ elif num_procs < 1:
51
+ num_procs = num_cpus_m
52
+ with mp.Pool(num_procs) as pool:
53
+ ret = pool.map(func, args_)
54
+ return ret
55
+
56
+ def fn(type_, num_cpus):
57
+ if type_ in ["mp_pool"]:
58
+ with about_time() as dur:
59
+ _ = test_pool(radio_embed, args, num_procs=num_cpus)
60
+
61
+ return dur.duration
62
+
63
+
64
+
65
+ with gr.Blocks() as blocks:
66
+ with gr.Row():
67
+ type_ = gr.Radio(
68
+ label="type",
69
+ choices=[
70
+ "mp_pool",
71
+ "joblib(loky)",
72
+ "joblib(mp)",
73
+ "ray",
74
+ ],
75
+ value="mp_pool",
76
+ interactive=False,
77
+ )
78
+ num_cpus_ = gr.Slider(
79
+ label="num_cpus",
80
+ value=num_cpus_m,
81
+ minimum=1,
82
+ maximum=2 * num_cpus_m,
83
+ step=1,
84
+ )
85
+ btn = gr.Button("Go")
86
+ out = gr.Textbox(
87
+ label="time elapsed",
88
+ value="",
89
+ )
90
+ btn.click(
91
+ fn=fn,
92
+ inputs=[type_, num_cpus_],
93
+ outputs=out,
94
+ api_name="time",
95
+ )
96
+ # gr.Markdown(f"{description}")
97
+
98
+ blocks.launch(enable_queue=True)
exclude-from ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ exclude-from
2
+ .gitignore
3
+ .git
4
+ .venv
5
+ .pytest_cache
6
+ **/__pycache__
7
+ *.bat
fangfang-en.txt ADDED
The diff for this file is too large to render. See raw diff
 
install-sw.sh ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # pip install pipx
2
+ # pipx install poetry
3
+ # pipx ensurepath
4
+ # source ~/.bashrc
5
+
6
+ # curl -sSL https://install.python-poetry.org | python3 -
7
+ # -C- continue -S show error -o output
8
+ curl -sSL -C- -o install-poetry.py https://install.python-poetry.org
9
+ python install-poetry.py
10
+ rm install-poetry.py
11
+ echo export PATH=~/.local/bin:$PATH > ~/.bashrc
12
+ source ~/.bashrc
13
+ # ~/.local/bin/poetry install
14
+
15
+ wget -c https://deb.nodesource.com/setup_14.x
16
+ bash setup_14.x
17
+ apt-get install -y nodejs
18
+ npm install -g npm@latest
19
+ npm install -g nodemon
20
+ rm setup_14.x
21
+
22
+ # apt upate # alerady done in apt-get install -y nodejs
23
+ apt install byobu -y > /dev/null 2>&1
install-sw1.sh ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # pip install pipx
2
+ # pipx install poetry
3
+ # pipx ensurepath
4
+ # source ~/.bashrc
5
+
6
+ # curl -sSL https://install.python-poetry.org | python3 -
7
+ # -C- continue -S show error -o output
8
+ curl -sSL -C- -o install-poetry.py https://install.python-poetry.org
9
+ python install-poetry.py
10
+ rm install-poetry.py
11
+ echo export PATH=~/.local/bin:$PATH > ~/.bashrc
12
+ source ~/.bashrc
13
+ # ~/.local/bin/poetry install
14
+
15
+ wget -c https://deb.nodesource.com/setup_12.x
16
+ bash setup_14.x
17
+ apt-get install -y nodejs
18
+ npm install -g npm@latest
19
+ npm install -g nodemon
20
+ rm setup_14.x
21
+
22
+ # apt update # alerady done in apt-get install -y nodejs
23
+ apt install byobu -y > /dev/null 2>&1
24
+ byobu-enable
25
+ byobu
okteto-up.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ okteto up
okteto.yml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: gradio-cmat
2
+
3
+ # The build section defines how to build the images of
4
+ # your development environment
5
+ # More info: https://www.okteto.com/docs/reference/manifest/#build
6
+ # build:
7
+ # my-service:
8
+ # context: .
9
+
10
+ # The deploy section defines how to deploy your development environment
11
+ # More info: https://www.okteto.com/docs/reference/manifest/#deploy
12
+ # deploy:
13
+ # commands:
14
+ # - name: Deploy
15
+ # command: echo 'Replace this line with the proper 'helm'
16
+
17
+ # or 'kubectl' commands to deploy your development environment'
18
+
19
+ # The dependencies section defines other git repositories to be
20
+ # deployed as part of your development environment
21
+ # More info: https://www.okteto.com/docs/reference/manifest/#dependencies
22
+ # dependencies:
23
+ # - https://github.com/okteto/sample
24
+ # The dev section defines how to activate a development container
25
+ # More info: https://www.okteto.com/docs/reference/manifest/#dev
26
+ dev:
27
+ gradio-cmat:
28
+ # image: okteto/dev:latest
29
+ # image: python:3.8.13-bullseye
30
+ # image: simbachain/poetry-3.8
31
+ image: python:3.8
32
+ command: bash
33
+ workdir: /usr/src/app
34
+ sync:
35
+ - .:/usr/src/app
36
+ environment:
37
+ - name=$USER
38
+ forward:
39
+ - 7861:7861
40
+ - 7860:7860
41
+ - 8501:8501
42
+ - 22:22
43
+ reverse:
44
+ - 9000:9000
45
+ autocreate: true
poetry.lock ADDED
The diff for this file is too large to render. See raw diff
 
poetry.toml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [virtualenvs]
2
+ create = true
3
+ in-project = true
pyproject.toml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [tool.poetry]
2
+ name = "radio-embed-parallel"
3
+ version = "0.1.0"
4
+ description = ""
5
+ authors = ["Your Name <you@example.com>"]
6
+ license = "mit"
7
+
8
+ [tool.poetry.dependencies]
9
+ python = ">=3.8.3,<4.0"
10
+ ray = "^1.13.0"
11
+ psutil = "^5.9.1"
12
+ about-time = "^3.1.1"
13
+ logzero = "^1.7.0"
14
+ hf-model-s-cpu = "^0.1.1"
15
+ more-itertools = "^8.13.0"
16
+
17
+ [tool.poetry.dev-dependencies]
18
+
19
+ [build-system]
20
+ requires = ["poetry-core>=1.0.0"]
21
+ build-backend = "poetry.core.masonry.api"
radio_embed/__init__.py ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ """Init."""
2
+ __version__ = "0.1.0a0"
3
+ from .radio_embed import radio_embed
4
+
5
+ __all__ = ("radio_embed",)
radio_embed/__main__.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Prep __main__.py."""
2
+ # pylint: disable=invalid-name
3
+ from pathlib import Path
4
+ from typing import Optional
5
+
6
+ import logzero
7
+ import typer
8
+ from logzero import logger
9
+ from set_loglevel import set_loglevel
10
+
11
+ from radio_embed import __version__, radio_embed
12
+
13
+ logzero.loglevel(set_loglevel())
14
+
15
+ app = typer.Typer(
16
+ name="radio_embed",
17
+ add_completion=False,
18
+ help="radio_embed help",
19
+ )
20
+
21
+
22
+ def _version_callback(value: bool) -> None:
23
+ if value:
24
+ typer.echo(f"{app.info.name} v.{__version__} -- ...")
25
+ raise typer.Exit()
26
+
27
+
28
+ @app.command()
29
+ def main(
30
+ version: Optional[bool] = typer.Option( # pylint: disable=(unused-argument
31
+ None,
32
+ "--version",
33
+ "-v",
34
+ "-V",
35
+ help="Show version info and exit.",
36
+ callback=_version_callback,
37
+ is_eager=True,
38
+ ),
39
+ ):
40
+ """Define."""
41
+ ...
42
+
43
+
44
+ if __name__ == "__main__":
45
+ app()
radio_embed/radio_embed.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Embed input."""
2
+ import numpy
3
+ from hf_model_s_cpu import model_s
4
+ from logzero import logger
5
+
6
+ try:
7
+ model = model_s()
8
+ except Exception as _:
9
+ logger.exception(_)
10
+ raise SystemExit(1) from _
11
+
12
+
13
+ def radio_embed(
14
+ text: str,
15
+ ) -> numpy.ndarray:
16
+ """Embed input."""
17
+ try:
18
+ _ = model.encode(text.strip().splitlines())
19
+ except Exception as _:
20
+ logger.exception(_)
21
+ raise
22
+
23
+ return _
rsync-to-forindo.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ rsync.bat -uvaz ./ forindo:github/radio-embed-parallel/ --exclude .git --exclude .venv --exclude-from exclude-from
run-nodemon.bat ADDED
@@ -0,0 +1 @@
 
 
1
+ nodemon -e * -x rsync-to-forindo.bat
setup_12.x ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Discussion, issues and change requests at:
4
+ # https://github.com/nodesource/distributions
5
+ #
6
+ # Script to install the NodeSource Node.js 12.x repo onto a
7
+ # Debian or Ubuntu system.
8
+ #
9
+ # Run as root or insert `sudo -E` before `bash`:
10
+ #
11
+ # curl -sL https://deb.nodesource.com/setup_12.x | bash -
12
+ # or
13
+ # wget -qO- https://deb.nodesource.com/setup_12.x | bash -
14
+ #
15
+ # CONTRIBUTIONS TO THIS SCRIPT
16
+ #
17
+ # This script is built from a template in
18
+ # https://github.com/nodesource/distributions/tree/master/deb/src
19
+ # please don't submit pull requests against the built scripts.
20
+ #
21
+
22
+
23
+ export DEBIAN_FRONTEND=noninteractive
24
+ SCRSUFFIX="_12.x"
25
+ NODENAME="Node.js 12.x"
26
+ NODEREPO="node_12.x"
27
+ NODEPKG="nodejs"
28
+
29
+ print_status() {
30
+ echo
31
+ echo "## $1"
32
+ echo
33
+ }
34
+
35
+ if test -t 1; then # if terminal
36
+ ncolors=$(which tput > /dev/null && tput colors) # supports color
37
+ if test -n "$ncolors" && test $ncolors -ge 8; then
38
+ termcols=$(tput cols)
39
+ bold="$(tput bold)"
40
+ underline="$(tput smul)"
41
+ standout="$(tput smso)"
42
+ normal="$(tput sgr0)"
43
+ black="$(tput setaf 0)"
44
+ red="$(tput setaf 1)"
45
+ green="$(tput setaf 2)"
46
+ yellow="$(tput setaf 3)"
47
+ blue="$(tput setaf 4)"
48
+ magenta="$(tput setaf 5)"
49
+ cyan="$(tput setaf 6)"
50
+ white="$(tput setaf 7)"
51
+ fi
52
+ fi
53
+
54
+ print_bold() {
55
+ title="$1"
56
+ text="$2"
57
+
58
+ echo
59
+ echo "${red}================================================================================${normal}"
60
+ echo "${red}================================================================================${normal}"
61
+ echo
62
+ echo -e " ${bold}${yellow}${title}${normal}"
63
+ echo
64
+ echo -en " ${text}"
65
+ echo
66
+ echo "${red}================================================================================${normal}"
67
+ echo "${red}================================================================================${normal}"
68
+ }
69
+
70
+ bail() {
71
+ echo 'Error executing command, exiting'
72
+ exit 1
73
+ }
74
+
75
+ exec_cmd_nobail() {
76
+ echo "+ $1"
77
+ bash -c "$1"
78
+ }
79
+
80
+ exec_cmd() {
81
+ exec_cmd_nobail "$1" || bail
82
+ }
83
+
84
+ node_deprecation_warning() {
85
+ if [[ "X${NODENAME}" == "Xio.js 1.x" ||
86
+ "X${NODENAME}" == "Xio.js 2.x" ||
87
+ "X${NODENAME}" == "Xio.js 3.x" ||
88
+ "X${NODENAME}" == "XNode.js 0.10" ||
89
+ "X${NODENAME}" == "XNode.js 0.12" ||
90
+ "X${NODENAME}" == "XNode.js 4.x LTS Argon" ||
91
+ "X${NODENAME}" == "XNode.js 5.x" ||
92
+ "X${NODENAME}" == "XNode.js 6.x LTS Boron" ||
93
+ "X${NODENAME}" == "XNode.js 7.x" ||
94
+ "X${NODENAME}" == "XNode.js 8.x LTS Carbon" ||
95
+ "X${NODENAME}" == "XNode.js 9.x" ||
96
+ "X${NODENAME}" == "XNode.js 10.x" ||
97
+ "X${NODENAME}" == "XNode.js 11.x" ||
98
+ "X${NODENAME}" == "XNode.js 12.x" ||
99
+ "X${NODENAME}" == "XNode.js 13.x" ||
100
+ "X${NODENAME}" == "XNode.js 15.x" ||
101
+ "X${NODENAME}" == "XNode.js 17.x" ]]; then
102
+
103
+ print_bold \
104
+ " DEPRECATION WARNING " "\
105
+ ${bold}${NODENAME} is no longer actively supported!${normal}
106
+
107
+ ${bold}You will not receive security or critical stability updates${normal} for this version.
108
+
109
+ You should migrate to a supported version of Node.js as soon as possible.
110
+ Use the installation script that corresponds to the version of Node.js you
111
+ wish to install. e.g.
112
+
113
+ * ${green}https://deb.nodesource.com/setup_14.x — Node.js 14 LTS \"Fermium\"${normal} (recommended)
114
+ * ${green}https://deb.nodesource.com/setup_16.x — Node.js 16 \"Gallium\"${normal}
115
+ * ${green}https://deb.nodesource.com/setup_18.x — Node.js 18 \"Eighteen\"${normal} (current)
116
+
117
+ Please see ${bold}https://github.com/nodejs/Release${normal} for details about which
118
+ version may be appropriate for you.
119
+
120
+ The ${bold}NodeSource${normal} Node.js distributions repository contains
121
+ information both about supported versions of Node.js and supported Linux
122
+ distributions. To learn more about usage, see the repository:
123
+ ${bold}https://github.com/nodesource/distributions${normal}
124
+ "
125
+ echo
126
+ echo "Continuing in 20 seconds ..."
127
+ echo
128
+ sleep 20
129
+ fi
130
+ }
131
+
132
+ script_deprecation_warning() {
133
+ if [ "X${SCRSUFFIX}" == "X" ]; then
134
+ print_bold \
135
+ " SCRIPT DEPRECATION WARNING " "\
136
+ This script, located at ${bold}https://deb.nodesource.com/setup${normal}, used to
137
+ install Node.js 0.10, is deprecated and will eventually be made inactive.
138
+
139
+ You should use the script that corresponds to the version of Node.js you
140
+ wish to install. e.g.
141
+
142
+ * ${green}https://deb.nodesource.com/setup_14.x — Node.js 14 LTS \"Fermium\"${normal} (recommended)
143
+ * ${green}https://deb.nodesource.com/setup_16.x — Node.js 16 \"Gallium\"${normal}
144
+ * ${green}https://deb.nodesource.com/setup_18.x — Node.js 18 \"Eighteen\"${normal} (current)
145
+
146
+ Please see ${bold}https://github.com/nodejs/Release${normal} for details about which
147
+ version may be appropriate for you.
148
+
149
+ The ${bold}NodeSource${normal} Node.js Linux distributions GitHub repository contains
150
+ information about which versions of Node.js and which Linux distributions
151
+ are supported and how to use the install scripts.
152
+ ${bold}https://github.com/nodesource/distributions${normal}
153
+ "
154
+
155
+ echo
156
+ echo "Continuing in 20 seconds (press Ctrl-C to abort) ..."
157
+ echo
158
+ sleep 20
159
+ fi
160
+ }
161
+
162
+ setup() {
163
+
164
+ script_deprecation_warning
165
+ node_deprecation_warning
166
+
167
+ print_status "Installing the NodeSource ${NODENAME} repo..."
168
+
169
+ if $(uname -m | grep -Eq ^armv6); then
170
+ print_status "You appear to be running on ARMv6 hardware. Unfortunately this is not currently supported by the NodeSource Linux distributions. Please use the 'linux-armv6l' binary tarballs available directly from nodejs.org for Node.js 4 and later."
171
+ exit 1
172
+ fi
173
+
174
+ PRE_INSTALL_PKGS=""
175
+
176
+ # Check that HTTPS transport is available to APT
177
+ # (Check snaked from: https://get.docker.io/ubuntu/)
178
+
179
+ if [ ! -e /usr/lib/apt/methods/https ]; then
180
+ PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} apt-transport-https"
181
+ fi
182
+
183
+ if [ ! -x /usr/bin/lsb_release ]; then
184
+ PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} lsb-release"
185
+ fi
186
+
187
+ if [ ! -x /usr/bin/curl ] && [ ! -x /usr/bin/wget ]; then
188
+ PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} curl"
189
+ fi
190
+
191
+ # Used by apt-key to add new keys
192
+
193
+ if [ ! -x /usr/bin/gpg ]; then
194
+ PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} gnupg"
195
+ fi
196
+
197
+ # Populating Cache
198
+ print_status "Populating apt-get cache..."
199
+ exec_cmd 'apt-get update'
200
+
201
+ if [ "X${PRE_INSTALL_PKGS}" != "X" ]; then
202
+ print_status "Installing packages required for setup:${PRE_INSTALL_PKGS}..."
203
+ # This next command needs to be redirected to /dev/null or the script will bork
204
+ # in some environments
205
+ exec_cmd "apt-get install -y${PRE_INSTALL_PKGS} > /dev/null 2>&1"
206
+ fi
207
+
208
+ IS_PRERELEASE=$(lsb_release -d | grep 'Ubuntu .*development' >& /dev/null; echo $?)
209
+ if [[ $IS_PRERELEASE -eq 0 ]]; then
210
+ print_status "Your distribution, identified as \"$(lsb_release -d -s)\", is a pre-release version of Ubuntu. NodeSource does not maintain official support for Ubuntu versions until they are formally released. You can try using the manual installation instructions available at https://github.com/nodesource/distributions and use the latest supported Ubuntu version name as the distribution identifier, although this is not guaranteed to work."
211
+ exit 1
212
+ fi
213
+
214
+ DISTRO=$(lsb_release -c -s)
215
+
216
+ check_alt() {
217
+ if [ "X${DISTRO}" == "X${2}" ]; then
218
+ echo
219
+ echo "## You seem to be using ${1} version ${DISTRO}."
220
+ echo "## This maps to ${3} \"${4}\"... Adjusting for you..."
221
+ DISTRO="${4}"
222
+ fi
223
+ }
224
+
225
+ check_alt "SolydXK" "solydxk-9" "Debian" "stretch"
226
+ check_alt "Kali" "sana" "Debian" "jessie"
227
+ check_alt "Kali" "kali-rolling" "Debian" "bullseye"
228
+ check_alt "Sparky Linux" "Tyche" "Debian" "stretch"
229
+ check_alt "Sparky Linux" "Nibiru" "Debian" "buster"
230
+ check_alt "Sparky Linux" "Po-Tolo" "Debian" "bullseye"
231
+ check_alt "MX Linux 17" "Horizon" "Debian" "stretch"
232
+ check_alt "MX Linux 18" "Continuum" "Debian" "stretch"
233
+ check_alt "MX Linux 19" "patito feo" "Debian" "buster"
234
+ check_alt "MX Linux 21" "wildflower" "Debian" "bullseye"
235
+ check_alt "Linux Mint" "maya" "Ubuntu" "precise"
236
+ check_alt "Linux Mint" "qiana" "Ubuntu" "trusty"
237
+ check_alt "Linux Mint" "rafaela" "Ubuntu" "trusty"
238
+ check_alt "Linux Mint" "rebecca" "Ubuntu" "trusty"
239
+ check_alt "Linux Mint" "rosa" "Ubuntu" "trusty"
240
+ check_alt "Linux Mint" "sarah" "Ubuntu" "xenial"
241
+ check_alt "Linux Mint" "serena" "Ubuntu" "xenial"
242
+ check_alt "Linux Mint" "sonya" "Ubuntu" "xenial"
243
+ check_alt "Linux Mint" "sylvia" "Ubuntu" "xenial"
244
+ check_alt "Linux Mint" "tara" "Ubuntu" "bionic"
245
+ check_alt "Linux Mint" "tessa" "Ubuntu" "bionic"
246
+ check_alt "Linux Mint" "tina" "Ubuntu" "bionic"
247
+ check_alt "Linux Mint" "tricia" "Ubuntu" "bionic"
248
+ check_alt "Linux Mint" "ulyana" "Ubuntu" "focal"
249
+ check_alt "Linux Mint" "ulyssa" "Ubuntu" "focal"
250
+ check_alt "Linux Mint" "uma" "Ubuntu" "focal"
251
+ check_alt "Linux Mint" "una" "Ubuntu" "focal"
252
+ check_alt "LMDE" "betsy" "Debian" "jessie"
253
+ check_alt "LMDE" "cindy" "Debian" "stretch"
254
+ check_alt "LMDE" "debbie" "Debian" "buster"
255
+ check_alt "LMDE" "elsie" "Debian" "bullseye"
256
+ check_alt "elementaryOS" "luna" "Ubuntu" "precise"
257
+ check_alt "elementaryOS" "freya" "Ubuntu" "trusty"
258
+ check_alt "elementaryOS" "loki" "Ubuntu" "xenial"
259
+ check_alt "elementaryOS" "juno" "Ubuntu" "bionic"
260
+ check_alt "elementaryOS" "hera" "Ubuntu" "bionic"
261
+ check_alt "elementaryOS" "odin" "Ubuntu" "focal"
262
+ check_alt "elementaryOS" "jolnir" "Ubuntu" "focal"
263
+ check_alt "Trisquel" "toutatis" "Ubuntu" "precise"
264
+ check_alt "Trisquel" "belenos" "Ubuntu" "trusty"
265
+ check_alt "Trisquel" "flidas" "Ubuntu" "xenial"
266
+ check_alt "Trisquel" "etiona" "Ubuntu" "bionic"
267
+ check_alt "Uruk GNU/Linux" "lugalbanda" "Ubuntu" "xenial"
268
+ check_alt "BOSS" "anokha" "Debian" "wheezy"
269
+ check_alt "BOSS" "anoop" "Debian" "jessie"
270
+ check_alt "BOSS" "drishti" "Debian" "stretch"
271
+ check_alt "BOSS" "unnati" "Debian" "buster"
272
+ check_alt "bunsenlabs" "bunsen-hydrogen" "Debian" "jessie"
273
+ check_alt "bunsenlabs" "helium" "Debian" "stretch"
274
+ check_alt "bunsenlabs" "lithium" "Debian" "buster"
275
+ check_alt "Tanglu" "chromodoris" "Debian" "jessie"
276
+ check_alt "PureOS" "green" "Debian" "sid"
277
+ check_alt "PureOS" "amber" "Debian" "buster"
278
+ check_alt "PureOS" "byzantium" "Debian" "bullseye"
279
+ check_alt "Devuan" "jessie" "Debian" "jessie"
280
+ check_alt "Devuan" "ascii" "Debian" "stretch"
281
+ check_alt "Devuan" "beowulf" "Debian" "buster"
282
+ check_alt "Devuan" "chimaera" "Debian" "bullseye"
283
+ check_alt "Devuan" "ceres" "Debian" "sid"
284
+ check_alt "Deepin" "panda" "Debian" "sid"
285
+ check_alt "Deepin" "unstable" "Debian" "sid"
286
+ check_alt "Deepin" "stable" "Debian" "buster"
287
+ check_alt "Pardus" "onyedi" "Debian" "stretch"
288
+ check_alt "Liquid Lemur" "lemur-3" "Debian" "stretch"
289
+ check_alt "Astra Linux" "orel" "Debian" "stretch"
290
+ check_alt "Ubilinux" "dolcetto" "Debian" "stretch"
291
+
292
+ if [ "X${DISTRO}" == "Xdebian" ]; then
293
+ print_status "Unknown Debian-based distribution, checking /etc/debian_version..."
294
+ NEWDISTRO=$([ -e /etc/debian_version ] && cut -d/ -f1 < /etc/debian_version)
295
+ if [ "X${NEWDISTRO}" == "X" ]; then
296
+ print_status "Could not determine distribution from /etc/debian_version..."
297
+ else
298
+ DISTRO=$NEWDISTRO
299
+ print_status "Found \"${DISTRO}\" in /etc/debian_version..."
300
+ fi
301
+ fi
302
+
303
+ print_status "Confirming \"${DISTRO}\" is supported..."
304
+
305
+ if [ -x /usr/bin/curl ]; then
306
+ exec_cmd_nobail "curl -sLf -o /dev/null 'https://deb.nodesource.com/${NODEREPO}/dists/${DISTRO}/Release'"
307
+ RC=$?
308
+ else
309
+ exec_cmd_nobail "wget -qO /dev/null -o /dev/null 'https://deb.nodesource.com/${NODEREPO}/dists/${DISTRO}/Release'"
310
+ RC=$?
311
+ fi
312
+
313
+ if [[ $RC != 0 ]]; then
314
+ print_status "Your distribution, identified as \"${DISTRO}\", is not currently supported, please contact NodeSource at https://github.com/nodesource/distributions/issues if you think this is incorrect or would like your distribution to be considered for support"
315
+ exit 1
316
+ fi
317
+
318
+ if [ -f "/etc/apt/sources.list.d/chris-lea-node_js-$DISTRO.list" ]; then
319
+ print_status 'Removing Launchpad PPA Repository for NodeJS...'
320
+
321
+ exec_cmd_nobail 'add-apt-repository -y -r ppa:chris-lea/node.js'
322
+ exec_cmd "rm -f /etc/apt/sources.list.d/chris-lea-node_js-${DISTRO}.list"
323
+ fi
324
+
325
+ print_status 'Adding the NodeSource signing key to your keyring...'
326
+ keyring='/usr/share/keyrings'
327
+ node_key_url="https://deb.nodesource.com/gpgkey/nodesource.gpg.key"
328
+ local_node_key="$keyring/nodesource.gpg"
329
+
330
+ if [ -x /usr/bin/curl ]; then
331
+ exec_cmd "curl -s $node_key_url | gpg --dearmor | tee $local_node_key >/dev/null"
332
+ else
333
+ exec_cmd "wget -q -O - $node_key_url | gpg --dearmor | tee $local_node_key >/dev/null"
334
+ fi
335
+
336
+ print_status "Creating apt sources list file for the NodeSource ${NODENAME} repo..."
337
+
338
+ exec_cmd "echo 'deb [signed-by=$local_node_key] https://deb.nodesource.com/${NODEREPO} ${DISTRO} main' > /etc/apt/sources.list.d/nodesource.list"
339
+ exec_cmd "echo 'deb-src [signed-by=$local_node_key] https://deb.nodesource.com/${NODEREPO} ${DISTRO} main' >> /etc/apt/sources.list.d/nodesource.list"
340
+
341
+ print_status 'Running `apt-get update` for you...'
342
+
343
+ exec_cmd 'apt-get update'
344
+
345
+ yarn_site='https://dl.yarnpkg.com/debian'
346
+ yarn_key_url="$yarn_site/pubkey.gpg"
347
+ local_yarn_key="$keyring/yarnkey.gpg"
348
+
349
+ print_status """Run \`${bold}sudo apt-get install -y ${NODEPKG}${normal}\` to install ${NODENAME} and npm
350
+ ## You may also need development tools to build native addons:
351
+ sudo apt-get install gcc g++ make
352
+ ## To install the Yarn package manager, run:
353
+ curl -sL $yarn_key_url | gpg --dearmor | sudo tee $local_yarn_key >/dev/null
354
+ echo \"deb [signed-by=$local_yarn_key] $yarn_site stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list
355
+ sudo apt-get update && sudo apt-get install yarn
356
+ """
357
+
358
+ }
359
+
360
+ ## Defer setup until we have the complete script
361
+ setup
start-sshd.sh ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ apt update && apt-get install openssh-server -y
2
+ /etc/init.d/ssh restart && mkdir -p ~/.ssh && echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOl+SiDFL1ZUh1QJ0454eYKtamkMCVs2hhuv3cWN1LU7 id_ed25519_colab > ~/.ssh/authorized_keys