From 9c1e2fd26e07275ae298fae5a88fe0d368fec218 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Thu, 3 Nov 2022 17:27:24 -0500 Subject: [PATCH 1/6] Improve readme documentation ; comment out faulty logic --- README.md | 373 +++++++++++++++++++++--- cmd/skywire-cli/commands/reward/root.go | 12 +- cmd/skywire-cli/commands/survey/root.go | 26 +- 3 files changed, 354 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index d993b6e846..522967f83d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,14 @@ Skywire requires a Golang version of `1.16` or higher. # Skywire - [Skywire](#skywire) - - [Build](#build) +- [Commands and Subcommands](#commands-and-subcommands) +- [Build Overview](#build-overview) +- [Dependencies](#dependencies) +- [Runtime Deps](#runtime-deps) +- [Build Deps](#build-deps) + + - [Prepare](#prepare) + - [Build](#build) - [Configure Skywire](#configure-skywire) - [Expose hypervisorUI](#expose-hypervisorui) - [Add remote hypervisor](#add-remote-hypervisor) @@ -14,51 +21,335 @@ Skywire requires a Golang version of `1.16` or higher. - [Creating a GitHub release](#creating-a-github-release) - [How to create a GitHub release](#how-to-create-a-github-release) -## Run from source +## Commands and Subcommands + +* [skywire-cli](cmd/skywire-cli/README.md) +* [skywire-visor](cmd/skywire-visor/README.md) + +## App documentation + +apps are not executed by the user, but hosted by the visor process + +* [skychat](cmd/apps/skychat/README.md) +* [skysocks](cmd/apps/skysocks/README.md) +* [skysocks-client](cmd/apps/skysocks-client/README.md) +* [vpn-client](cmd/apps/vpn-client/README.md) +* [vpn-server](cmd/apps/vpn-server/README.md) + +further documentation can be found in the [skywire wiki](https://github.com/skycoin/skywire/wiki) + +## Installing Skywire + +* [Windows installer](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-windows-amd64.msi) +* [MacOS amd64 package](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-darwin-amd64.pkg) +* [MacOS m1 / arm64](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-darwin-arm64.pkg) +* [Debian Package Installation](github.com/skycoin/skywire/wiki/Skywire-Package-Installation) +* [Binary Releases](https://github.com/skycoin/skywire/releases) + +## Build Overview + +A high-level overview of the process for building skywire from source and the paths and files which comprise the package-based installation is contained in the [PKGBUILD](https://github.com/skycoin/AUR/blob/main/skywire/PKGBUILD) + +## Dependencies + +The systray app requires other build and runtime dependencies and further steps to compile. These are listed in [/docs/systray-builds.md](/docs/systray-builds.md) + +### Runtime Deps + +* ` glibc` or `libc6` _unless statically compiled_ + +### Build Deps + +* `golang` +* `git` (optional) +* `musl` and `kernel-headers-musl` or equivalent - _for static compilation_ + +For more information on static compilation, see [docs/static-builds.md](docs/static-builds.md). + +## Prepare + +The standard procedure for building software with `go` uses the `GOPATH` which is conventionally `$HOME/go` + +Software sources are cloned via `git` to a path such as `$HOME/go/src/github.com/skycoin/skywire` + +Optionally, the source archive of a versioned release is downloaded from the [release section](https://github.com/skycoin/skywire/releases) + +The binaries which are compiled may optionally be placed in the `GOBIN` and then `GOBIN` may be added to the `PATH` in order that any binaries placed in the `GOBIN` will then appear as commands available to execute in the shell or terminal. + +basic setup of `go` is further described [here](https://github.com/skycoin/skycoin/blob/develop/INSTALLATION.md#setup-your-gopath) + +Such a setup is optional, but it is documented below, and other examples will refer to this -```bash -$ mkdir -p $HOME/go/src/github.com/skycoin && cd $HOME/go/src/github.com/skycoin -$ git clone https://github.com/skycoin/skywire.git -$ cd skywire -$ make run-source +``` +mkdir -p "${HOME}/go/src/github.com/skycoin/" "${HOME}"/go/bin "${HOME}"/go/apps || true +cd "${HOME}/go/src/src/github.com/skycoin/" +git clone https://github.com/skycoin/skywire +#optionally checkout any branch +git checkout develop ``` ## Build -```bash -# Clone. -$ git clone https://github.com/skycoin/skywire.git -$ cd skywire +the code below is a rough approximation of `make install` which is used in the build function of the skywire packages + +``` +export GOPATH="${HOME}/go" +export GOBIN="${GOPATH}/bin" +export _GOAPPS="${GOPATH}/apps" +export GOOS=linux +#use musl-gcc for static compilation +export CC=musl-gcc + +cd "${HOME}/go/src/github.com/skycoin/skywire" + +#binary versioning +local _version=$(make version) +DMSG_BASE="github.com/skycoin/dmsg" +BUILDINFO_PATH="${DMSG_BASE}/buildinfo" +BUILDINFO_VERSION="${BUILDINFO_PATH}.version=${_version}" +BUILDINFO="${BUILDINFO_VERSION} ${BUILDINFO_DATE} ${BUILDINFO_COMMIT}" + +#create the skywire binaries +_pkggopath=github.com/skycoin/skywire +cd "${HOME}"/go/src/${_pkggopath} +_cmddir="${HOME}"/go/src/${_pkggopath}/cmd +cd "${_cmddir}"/apps +_app="$(ls)" +for _i in ${_app}; do +echo "building ${_i} binary" +cd "${_cmddir}/apps/${_i}" +go build -trimpath --ldflags="" --ldflags "${BUILDINFO} -s -w -linkmode external -extldflags '-static' -buildid=" -o $_GOAPPS . +done +echo "building skywire-visor binary" +cd "${_cmddir}"/skywire-visor +go build -trimpath --ldflags="" --ldflags "${BUILDINFO} -s -w -linkmode external -extldflags '-static' -buildid=" -o $GOBIN . +echo "building skywire-cli binary" +cd "${_cmddir}"/skywire-cli +go build -trimpath --ldflags="" --ldflags "${BUILDINFO} -s -w -linkmode external -extldflags '-static' -buildid=" -o $GOBIN . +``` + +## Install + +The installation paths for the skywire as present in the skywire package are detailed below + +Note that `make install-system-linux` will place the binaries into the system where the package would install them, and is best used for quickly testing changes to ensure they work with the autoconfig script included with the package + +``` +#to install directly into the system, use "/" +_pkgdir="/" + +#use the appropriate systemd unit installation path for your linux distribution +_systemddir="usr/lib/systemd/system" + +#the base path where skywire is installed +_skydir="opt/skywire" + +#application binaries ; started by the visor process +_skyapps="${_skydir}/apps" + +#main binaries go here +_skybin="${_skydir}/bin" + +#scripts included +_skyscripts="${_skydir}/scripts" + +#create the directories +mkdir -p "${_pkgdir}/usr/bin" +mkdir -p "${_pkgdir}/${_skydir}/bin" +mkdir -p "${_pkgdir}/${_skydir}/apps" +mkdir -p "${_pkgdir}/${_skydir}/scripts" +mkdir -p "${_pkgdir}/${_systemddir}" +#the local folder is otherwise produced by the visor on startup +mkdir -p "${_pkgdir}/${_skydir}/local" + +# instal binaries - assumes nothing else was already in your GOBIN + install -Dm755 "${GOBIN}"/* "${_pkgdir}/${_skybin}/" + +#Symlink the binaries into the executable path +for _i in "${_pkgdir}/${_skybin}"/* ; do + ln -rTsf "${_i}" "${_pkgdir}/usr/bin/${_i##*/}" +done + +#install the app binaries +install -Dm755 "${_GOAPPS}"/* "${_pkgdir}/${_skyapps}/" +#it is not necessary to symlink these binaries to the executable path but may be useful for debugging +for _i in "${_pkgdir}/${_skyapps}"/* ; do + ln -rTsf "${_i}" "${_pkgdir}/usr/bin/${_i##*/}" +done + +#install the dmsghttp-config.json' +install -Dm644 "${HOME}"/go/src/${_pkggopath}/skywire/dmsghttp-config.json" "${_pkgdir}/${_skydir}/dmsghttp-config.json" +``` + +Desktop integration, maintenance scripts, and systemd service files are included in the skywire package from the [skywire AUR](https://aur.archlinux.org/cgit/aur.git/tree/?h=skywire-bin) which is managed as a subtree from [github.com/skycoin/aur](https://github.com/skycoin/AUR/tree/main/skywire-bin) + +`${srcdir}` in the code below is in reference to the directory containing these other source files + +``` +#Install scripts +install -Dm755 "${srcdir}"/skywire-autoconfig "${_pkgdir}/${_skyscripts}/" +ln -rTsf "${_pkgdir}/${_skyscripts}/skywire-autoconfig" "${_pkgdir}"/usr/bin/skywire-autoconfig + +#Installing systemd services' +install -Dm644 "${srcdir}"/*.service "${_pkgdir}/${_systemddir}/" + +# instal desktop files and icons +mkdir -p "${_pkgdir}"/usr/share/applications/ "${_pkgdir}"/usr/share/icons/hicolor/48x48/apps/ +install -Dm644 "${srcdir}"/*.desktop "${_pkgdir}"/usr/share/applications/ +install -Dm644 "${srcdir}"/*.png "${_pkgdir}"/usr/share/icons/hicolor/48x48/apps/ +``` + +## Skywire-autoconfig + +[skywire-autoconfig](https://github.com/skycoin/AUR/blob/main/skywire/skywire-autoconfig) is a script is provided with the package which is executed as part of the postinstall process. It serves as a utility for automating: + +* config management and updates +* setting remote hypervisors +* restarting the skywire process (via systemd) +* printing helpful text for the user to know what is happening +* generating configuration on boot (for skybian images / chroot installations of skywire) +* detecting environmental variables + +for more information regarding this script and the skywire package installation, refer to [this wiki article](https://github.com/skycoin/AUR/wiki/skywire-bin) + +### Package tree +``` +/ +├── opt +│ └── skywire +│ ├── apps +│ │ ├── skychat +│ │ ├── skysocks +│ │ ├── skysocks-client +│ │ ├── vpn-client +│ │ └── vpn-server +│ ├── bin +│ │ ├── skywire-cli +│ │ └── skywire-visor +│ ├── dmsghttp-config.json +│ ├── local +│ └── scripts +│ └── skywire-autoconfig +└── usr + ├── bin + │ ├── skychat -> ../../opt/skywire/apps/skychat + │ ├── skysocks -> ../../opt/skywire/apps/skysocks + │ ├── skysocks-client -> ../../opt/skywire/apps/skysocks-client + │ ├── skywire -> ../../opt/skywire/bin/skywire-visor + │ ├── skywire-autoconfig -> ../../opt/skywire/scripts/skywire-autoconfig + │ ├── skywire-cli -> ../../opt/skywire/bin/skywire-cli + │ ├── skywire-visor -> ../../opt/skywire/bin/skywire-visor + │ ├── vpn-client -> ../../opt/skywire/apps/vpn-client + │ └── vpn-server -> ../../opt/skywire/apps/vpn-server + ├── lib + │ └── systemd + │ └── system + │ ├── skywire-autoconfig.service + │ ├── skywire.service + └── share + ├── applications + │ ├── skywire.desktop + │ └── skywirevpn.desktop + └── icons + └── hicolor + └── 48x48 + └── apps + ├── skywire.png + └── skywirevpn.png + +17 directories, 24 files +``` + +## Build with make + +build the binaries and apps with `go build` +``` +make build +``` + +output tree + +``` +├──skywire-cli +└─┬skywire-visor +└─┬apps +├──skychat +├──skysocks +├──skysocks-client +├──vpn-client +├──vpn-server +└──skychat +``` + +install these executables to the `GOPATH` +``` +make install +``` -# Build and Install -$ make build; make install -# OR build docker image +## Build docker image +``` $ ./ci_scripts/docker-push.sh -t $(git rev-parse --abbrev-ref HEAD) -b ``` -Skywire can be statically built. For instructions check [the docs](docs/static-builds.md). + +## Run from source + +Running from source as outlined here does not write the config to disk or explicitly compile any binaries. The config is piped from skywire-cli stdout to the visor stdin, and all are executed via `go run`. + +``` + mkdir -p $HOME/go/src/github.com/skycoin && cd $HOME/go/src/github.com/skycoin + git clone https://github.com/skycoin/skywire.git + cd skywire + make run-source +``` + +## Files and folders created by skywire + +``` +├──skywire-config.json +└─┬local + ├──skychat + ├──skysocks + ├──apps-pid.txt + ├──skychat_log.db + ├──reward.txt + ├──node-info.json + └─┬transport_logs + └──2022-11-12.csv +``` + +the + ## Configure Skywire +The skywire visor requires a config to run. This config is produced by `skywire-cli config gen` + +The skywire-autoconfig script included with the skywire package handles config generation and updates for the user + +Examples of config generation and command / flag documentation can be found in the [cmd/skywire-cli/README.md](cmd/skywire-cli/README.md) and [cmd/skywire-visor/README.md](cmd/skywire-visor/README.md) + +The most important flags are noted below + ### Expose hypervisorUI In order to expose the hypervisor UI, generate a config file with `--is-hypervisor` or `-i` flag: -```bash -$ skywire-cli config gen -i +``` + skywire-cli config gen -i ``` Docker container will create config automatically for you, should you want to run it manually, you can do: -```bash -$ docker run --rm -v :/opt/skywire \ +``` + docker run --rm -v :/opt/skywire \ skycoin/skywire:test skywire-cli config gen -i ``` Docker container will create config automatically for you, should you want to run it manually, you can do: -```bash +``` $ docker run --rm -v :/opt/skywire \ skycoin/skywire:latest skywire-cli visor gen-config --is-hypervisor ``` @@ -70,33 +361,30 @@ After starting up the visor, the UI will be exposed by default on `localhost:800 Every visor can be controlled by one or more hypervisors. To allow a hypervisor to access a visor, the PubKey of the hypervisor needs to be specified in the configuration file. You can add a remote hypervisor to the config with: -```bash -$ skywire-cli config update --hypervisor-pks ``` - -If the rpc server is exposed on the local network, or the config has been generated with the `--public-rpc` flag, the hypervisor public key can be queried over the network with skywire-cli: - -```bash -$ skywire-cli --rpc visor pk +skywire-cli config update --hypervisor-pks +``` +or +``` +skywire-cli config gen --hvpk ``` -The previous two commands can be nested: - -```bash -$ skywire-cli config update --hypervisor-pks $(skywire-cli --rpc visor pk) +alternatively, this can be done with the skywire-autoconfg script +``` +skywire-autoconfig ``` Or from docker image: -```bash -$ docker run --rm -v :/opt/skywire \ +``` +docker run --rm -v :/opt/skywire \ skycoin/skywire:test skywire-cli config update hypervisor-pks ``` Or from docker image: -```bash -$ docker run --rm -v :/opt/skywire \ +``` +docker run --rm -v :/opt/skywire \ skycoin/skywire:latest skywire-cli update-config hypervisor-pks ``` @@ -107,17 +395,21 @@ $ docker run --rm -v :/opt/skywire \ `skywire-visor` requires a valid configuration to be provided. If you want to run a VPN client locally, run the visor as `sudo`. -```bash -$ sudo skywire-visor -c skywire-config.json +``` + sudo skywire-visor -c skywire-config.json +``` +if the default `skywire-config.json` exists in the current dir, this can be shortened to +``` + sudo skywire-visor ``` Or from docker image: -```bash +``` # with custom config mounted on docker volume -$ docker run --rm -p 8000:8000 -v :/opt/skywire --name=skywire skycoin/skywire:test skywire-visor -c /opt/skywire/.json +docker run --rm -p 8000:8000 -v :/opt/skywire --name=skywire skycoin/skywire:test skywire-visor -c /opt/skywire/.json # without custom config (config is automatically generated) -$ docker run --rm -p 8000:8000 --name=skywire skycoin/skywire:test skywire-visor +docker run --rm -p 8000:8000 --name=skywire skycoin/skywire:test skywire-visor ``` `skywire-visor` can be run on Windows. The setup requires additional setup steps that are specified @@ -129,6 +421,7 @@ If you are interested in running the Skywire VPN as either a client or a server, - [Setup the Skywire VPN](https://github.com/skycoin/skywire/wiki/Skywire-VPN-Client) - [Setup the Skywire VPN server](https://github.com/skycoin/skywire/wiki/Skywire-VPN-Server) +- [Package Installation Guide](https://github.com/skycoin/skywire/wiki/Skywire-Package-Installation) ## Creating a GitHub release diff --git a/cmd/skywire-cli/commands/reward/root.go b/cmd/skywire-cli/commands/reward/root.go index f64ff9e861..953fb6c426 100644 --- a/cmd/skywire-cli/commands/reward/root.go +++ b/cmd/skywire-cli/commands/reward/root.go @@ -6,7 +6,7 @@ import ( "os" "strings" - "github.com/bitfield/script" +// "github.com/bitfield/script" coincipher "github.com/skycoin/skycoin/src/cipher" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -56,13 +56,13 @@ func init() { //the above was insufficient in practice //TODO: re-implement this simple check for the visor running - _, err := script.Exec(`skywire-cli visor pk`).String() - if err == nil { - useRPC = true - } else { +// _, err := script.Exec(`skywire-cli visor pk`).String() +// if err == nil { +// useRPC = true +// } else { useRPC = false rpcFlagTxt = "default: false - visor is not running" - } +// } if skyenv.IsRoot() { useRPC = false rpcFlagTxt = "default: false - root permissions available" diff --git a/cmd/skywire-cli/commands/survey/root.go b/cmd/skywire-cli/commands/survey/root.go index d3cfbee99b..59eb740fcc 100644 --- a/cmd/skywire-cli/commands/survey/root.go +++ b/cmd/skywire-cli/commands/survey/root.go @@ -7,7 +7,7 @@ import ( "fmt" "os" - "github.com/bitfield/script" +// "github.com/bitfield/script" "github.com/spf13/cobra" "github.com/skycoin/skywire-utilities/pkg/cipher" @@ -38,17 +38,21 @@ var surveyCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { survey, err := skyenv.SystemSurvey() if err != nil { - internal.PrintFatalError(cmd.Flags(), fmt.Errorf("Failed to generate system survey: %v", err)) - } - //non-critical logic implemented with bitfield/script - pkString, err = script.Exec(`skywire-cli visor pk -p`).String() - //fail silently or proceed on nil error - if err == nil { - err = pk.Set(pkString) - if err == nil { - survey.PubKey = pk - } + internal.Catch(cmd.Flags(), fmt.Errorf("Failed to generate system survey: %v", err)) } +// //non-critical logic implemented with bitfield/script +// pkString, err = script.Exec(`skywire-cli visor pk -p`).String() +// //fail silently or proceed on nil error +// if err != nil { +// internal.Catch(cmd.Flags(), fmt.Errorf("failed to fetch visor public key: %v", err)) +// } else { +// err = pk.Set(pkString) +// if err != nil { +// internal.Catch(cmd.Flags(), fmt.Errorf("failed to validate visor public key: %v", err)) +// } else { +// survey.PubKey = pk +// } +// } skyaddr, err := os.ReadFile(skyenv.PackageConfig().LocalPath + "/" + skyenv.RewardFile) //nolint if err == nil { survey.SkycoinAddress = string(skyaddr) From 394c84f42bb936e85a8bac0c82192da9b853b905 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Thu, 3 Nov 2022 18:13:45 -0500 Subject: [PATCH 2/6] update readme.md & fix appveyor errors --- README.md | 29 +++++++++++++++++++-- cmd/skywire-cli/commands/reward/root.go | 15 +++++------ cmd/skywire-cli/commands/survey/root.go | 34 ++++++++++++------------- pkg/skyenv/values_linux.go | 3 +-- 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 522967f83d..6551ad4b6f 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,32 @@ further documentation can be found in the [skywire wiki](https://github.com/skyc A high-level overview of the process for building skywire from source and the paths and files which comprise the package-based installation is contained in the [PKGBUILD](https://github.com/skycoin/AUR/blob/main/skywire/PKGBUILD) +this and other build variants can be built into a package with a single command, using `yay` on archlinux + +installing [skywire-bin](https://aur.archlinux.org/packages/skywire-bin) will install the release binaries provided by the release section of this repo + +``` +yay -S skywire-bin +``` + +to build the debian packages using the release binaries + +``` +yay --mflags " -p cc.deb.PKGBUILD " -S skywire-bin +``` + +installing [skywire](https://aur.archlinux.org/packages/skywire) will compile binaries using the source archive for the latest version release + +``` +yay -S skywire +``` + +build from git sources to the develop branch + +``` +yay --mflags " -p git.PKGBUILD " -S skywire +``` + ## Dependencies The systray app requires other build and runtime dependencies and further steps to compile. These are listed in [/docs/systray-builds.md](/docs/systray-builds.md) @@ -319,8 +345,7 @@ Running from source as outlined here does not write the config to disk or explic └──2022-11-12.csv ``` -the - +Some of these files are served via the [dmsghttp logserver](https://github.com/skycoin/skywire/wiki/DMSGHTTP-logserver) ## Configure Skywire diff --git a/cmd/skywire-cli/commands/reward/root.go b/cmd/skywire-cli/commands/reward/root.go index 953fb6c426..02b571cffd 100644 --- a/cmd/skywire-cli/commands/reward/root.go +++ b/cmd/skywire-cli/commands/reward/root.go @@ -6,7 +6,6 @@ import ( "os" "strings" -// "github.com/bitfield/script" coincipher "github.com/skycoin/skycoin/src/cipher" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -56,13 +55,13 @@ func init() { //the above was insufficient in practice //TODO: re-implement this simple check for the visor running -// _, err := script.Exec(`skywire-cli visor pk`).String() -// if err == nil { -// useRPC = true -// } else { - useRPC = false - rpcFlagTxt = "default: false - visor is not running" -// } + // _, err := script.Exec(`skywire-cli visor pk`).String() + // if err == nil { + // useRPC = true + // } else { + useRPC = false + rpcFlagTxt = "default: false - visor is not running" + // } if skyenv.IsRoot() { useRPC = false rpcFlagTxt = "default: false - root permissions available" diff --git a/cmd/skywire-cli/commands/survey/root.go b/cmd/skywire-cli/commands/survey/root.go index 59eb740fcc..41acbd7d15 100644 --- a/cmd/skywire-cli/commands/survey/root.go +++ b/cmd/skywire-cli/commands/survey/root.go @@ -7,18 +7,16 @@ import ( "fmt" "os" -// "github.com/bitfield/script" "github.com/spf13/cobra" - "github.com/skycoin/skywire-utilities/pkg/cipher" "github.com/skycoin/skywire/cmd/skywire-cli/internal" "github.com/skycoin/skywire/pkg/skyenv" ) var ( - pk cipher.PubKey - pkString string - isCksum bool + // pk cipher.PubKey + // pkString string + isCksum bool ) func init() { @@ -40,19 +38,19 @@ var surveyCmd = &cobra.Command{ if err != nil { internal.Catch(cmd.Flags(), fmt.Errorf("Failed to generate system survey: %v", err)) } -// //non-critical logic implemented with bitfield/script -// pkString, err = script.Exec(`skywire-cli visor pk -p`).String() -// //fail silently or proceed on nil error -// if err != nil { -// internal.Catch(cmd.Flags(), fmt.Errorf("failed to fetch visor public key: %v", err)) -// } else { -// err = pk.Set(pkString) -// if err != nil { -// internal.Catch(cmd.Flags(), fmt.Errorf("failed to validate visor public key: %v", err)) -// } else { -// survey.PubKey = pk -// } -// } + // //non-critical logic implemented with bitfield/script + // pkString, err = script.Exec(`skywire-cli visor pk -p`).String() + // //fail silently or proceed on nil error + // if err != nil { + // internal.Catch(cmd.Flags(), fmt.Errorf("failed to fetch visor public key: %v", err)) + // } else { + // err = pk.Set(pkString) + // if err != nil { + // internal.Catch(cmd.Flags(), fmt.Errorf("failed to validate visor public key: %v", err)) + // } else { + // survey.PubKey = pk + // } + // } skyaddr, err := os.ReadFile(skyenv.PackageConfig().LocalPath + "/" + skyenv.RewardFile) //nolint if err == nil { survey.SkycoinAddress = string(skyaddr) diff --git a/pkg/skyenv/values_linux.go b/pkg/skyenv/values_linux.go index dea3636442..731c0cb220 100644 --- a/pkg/skyenv/values_linux.go +++ b/pkg/skyenv/values_linux.go @@ -6,11 +6,10 @@ package skyenv import ( "runtime" - "periph.io/x/periph/host/distro" - "github.com/google/uuid" "github.com/jaypipes/ghw" "github.com/zcalusic/sysinfo" + "periph.io/x/periph/host/distro" "github.com/skycoin/skywire-utilities/pkg/cipher" ) From 637b5d3d5f91cd3707a000f634d542ef690f21b2 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:07:27 -0600 Subject: [PATCH 3/6] add skywire-cli doc command and update readme documentation with it --- README.md | 4 + cmd/skywire-cli/README.md | 2690 +++++++++++------------ cmd/skywire-cli/commands/config/gen.go | 7 +- cmd/skywire-cli/commands/config/root.go | 1 + cmd/skywire-cli/commands/root.go | 80 + 5 files changed, 1435 insertions(+), 1347 deletions(-) diff --git a/README.md b/README.md index 6551ad4b6f..ce5ab8505c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,11 @@ Skywire requires a Golang version of `1.16` or higher. - [Skywire](#skywire) - [Commands and Subcommands](#commands-and-subcommands) +- [App documentation](#app-documentation) +- [Installing Skywire](#) - [Build Overview](#build-overview) +## Installing Skywire + - [Dependencies](#dependencies) - [Runtime Deps](#runtime-deps) - [Build Deps](#build-deps) diff --git a/cmd/skywire-cli/README.md b/cmd/skywire-cli/README.md index 2449b6adff..ee53cd9ac5 100644 --- a/cmd/skywire-cli/README.md +++ b/cmd/skywire-cli/README.md @@ -1,154 +1,223 @@ -# CLI Documentation + +# skywire-cli documentation skywire command line interface - - -- [Install](#install) -- [skywire-cli usage](#skywire-cli-usage) - - [global flags](#global-flags) - - [config usage](#config-usage) - - [gen](#config-gen) - - [update](#config-update) - - [dmsgpty usage](#dmsgpty-usage) - - [dmsgpty ui](#dmsgpty-ui) - - [dmsgpty url](#dmsgpty-url) - - [dmsgpty list](#dmsgpty-list) - - [dmsgpty start](#dmsgpty-start) - - [visor usage](#visor-usage) - - [app](#visor-app) - - [ls](#app-ls) - - [autostart](#app-autostart) - - [start](#app-start) - - [stop](#app-stop) - - [exec](#visor-exec) - - [hvui](#visor-hvui) - - [pk](#visor-pk) - - [hvpk](#visor-hvpk) - - [chvpk](#visor-chvpk) - - [info](#visor-info) - - [version](#visor-version) - - [route](#visor-route) - - [ls rules](#route-ls-rules) - - [rule](#route-rule) - - [add rule](#route-add-rule) - - [rm rule](#route-rm-rule) - - [halt](#visor-halt) - - [start](#visor-start) - - [tp](#visor-tp) - - [type](#tp-type) - - [disc](#tp-disc) - - [id](#tp-id) - - [ls](#tp-ls) - - [add](#tp-add) - - [rm](#tp-rm) - - [vpn](#vpn-usage) - - [list](#vpn-list) - - [ui](#vpn-ui) - - [url](#vpn-url) - - [start](#vpn-start) - - [stop](#vpn-stop) - - [status](#vpn-status) - - [rtfind usage](#rtfind-usage) - - [mdisc usage](#mdisc-usage) - - [servers](#servers) - - [entry](#entry) - - [completion usage](#completion-usage) - - - - -## Install - -```bash -$ cd $GOPATH/src/github.com/skycoin/skywire/cmd/skywire-cli -$ go install ./... -``` - -## skywire-cli usage - -After the installation, you can run `skywire-cli` to see the usage: - -``` -$ skywire-cli + * [skywire\-cli](#skywire-cli) + * [global flags](#global-flags) + * [subcommand tree](#subcommand-tree) + * [config](#config) + * [config gen](#config-gen) + * [config update](#config-update) + * [config update hv](#config-update-hv) + * [config update sc](#config-update-sc) + * [config update ss](#config-update-ss) + * [config update vpnc](#config-update-vpnc) + * [config update vpns](#config-update-vpns) + * [dmsgpty](#dmsgpty) + * [dmsgpty ui](#dmsgpty-ui) + * [dmsgpty url](#dmsgpty-url) + * [dmsgpty list](#dmsgpty-list) + * [dmsgpty start](#dmsgpty-start) + * [visor](#visor) + * [visor app](#visor-app) + * [visor app ls](#visor-app-ls) + * [visor app start](#visor-app-start) + * [visor app stop](#visor-app-stop) + * [visor app log](#visor-app-log) + * [visor app arg](#visor-app-arg) + * [visor app arg autostart](#visor-app-arg-autostart) + * [visor app arg killswitch](#visor-app-arg-killswitch) + * [visor app arg secure](#visor-app-arg-secure) + * [visor app arg passcode](#visor-app-arg-passcode) + * [visor app arg netifc](#visor-app-arg-netifc) + * [visor exec](#visor-exec) + * [visor hv](#visor-hv) + * [visor hv ui](#visor-hv-ui) + * [visor hv cpk](#visor-hv-cpk) + * [visor hv pk](#visor-hv-pk) + * [visor pk](#visor-pk) + * [visor info](#visor-info) + * [visor ver](#visor-ver) + * [visor route](#visor-route) + * [visor route ls\-rules](#visor-route-ls-rules) + * [visor route rule](#visor-route-rule) + * [visor route rm\-rule](#visor-route-rm-rule) + * [visor route add\-rule](#visor-route-add-rule) + * [visor route add\-rule app](#visor-route-add-rule-app) + * [visor route add\-rule fwd](#visor-route-add-rule-fwd) + * [visor route add\-rule intfwd](#visor-route-add-rule-intfwd) + * [visor halt](#visor-halt) + * [visor start](#visor-start) + * [visor tp](#visor-tp) + * [visor tp type](#visor-tp-type) + * [visor tp ls](#visor-tp-ls) + * [visor tp id](#visor-tp-id) + * [visor tp add](#visor-tp-add) + * [visor tp rm](#visor-tp-rm) + * [visor tp disc](#visor-tp-disc) + * [vpn](#vpn) + * [vpn list](#vpn-list) + * [vpn ui](#vpn-ui) + * [vpn url](#vpn-url) + * [vpn start](#vpn-start) + * [vpn stop](#vpn-stop) + * [vpn status](#vpn-status) + * [reward](#reward) + * [survey](#survey) + * [rtfind](#rtfind) + * [mdisc](#mdisc) + * [mdisc entry](#mdisc-entry) + * [mdisc servers](#mdisc-servers) + * [completion](#completion) + * [tree](#tree) + * [doc](#doc) + + +## skywire-cli + +``` ┌─┐┬┌─┬ ┬┬ ┬┬┬─┐┌─┐ ┌─┐┬ ┬ └─┐├┴┐└┬┘││││├┬┘├┤───│ │ │ └─┘┴ ┴ ┴ └┴┘┴┴└─└─┘ └─┘┴─┘┴ -Usage: - skywire-cli [command] - -Available Commands: - config Generate or update a skywire config - dmsgpty Interact with remote visors - visor Query the Skywire Visor - vpn controls for VPN client - rtfind Query the Route Finder - mdisc Query remote DMSG Discovery - completion Generate completion script +Usage: + skywire-cli + +Available Commands: + config Generate or update a skywire config + dmsgpty Interact with remote visors + visor Query the Skywire Visor + vpn controls for VPN client + reward skycoin reward address + survey system survey + rtfind Query the Route Finder + mdisc Query remote DMSG Discovery + completion Generate completion script + tree subcommand tree + doc gnerate markdown docs + -Flags: - --rpc string RPC server address (default "localhost:3435") - -v, --version version for skywire-cli - -Use "skywire-cli [command] --help" for more information about a command. ``` -### global flags + +## global flags The skywire-cli interacts with the running visor via rpc calls. By default the rpc server is available on localhost:3435. The rpc address and port the visor is using may be changed in the config file, once generated. -It is not recommended to expose the rpc server on the local network. -Exposing the rpc allows unsecured access to the machine over the local network +It is not recommended to expose the rpc server on the local network. Exposing the rpc allows unsecured access to the machine over the local network ``` -Global Flags: - --rpc string RPC server address (default "localhost:3435") -``` -### config usage +Global Flags: -A primary function of skywire-cli is generating and updating the config file used by skywire-visor. + --rpc string RPC server address (default "localhost:3435") + + --json bool print output as json + +``` + +## subcommand tree + +A tree representation of the skywire-cli subcommands + +``` +└─┬skywire-cli + ├─┬config + │ ├──gen + │ └─┬update + │ ├──hv + │ ├──sc + │ ├──ss + │ ├──vpnc + │ └──vpns + ├─┬dmsgpty + │ ├──ui + │ ├──url + │ ├──list + │ └──start + ├─┬visor + │ ├─┬app + │ │ ├──ls + │ │ ├──start + │ │ ├──stop + │ │ ├──log + │ │ └─┬arg + │ │ ├──autostart + │ │ ├──killswitch + │ │ ├──secure + │ │ ├──passcode + │ │ └──netifc + │ ├──exec + │ ├─┬hv + │ │ ├──ui + │ │ ├──cpk + │ │ └──pk + │ ├──pk + │ ├──info + │ ├──ver + │ ├─┬route + │ │ ├──ls-rules + │ │ ├──rule + │ │ ├──rm-rule + │ │ └─┬add-rule + │ │ ├──app + │ │ ├──fwd + │ │ └──intfwd + │ ├──halt + │ ├──start + │ └─┬tp + │ ├──type + │ ├──ls + │ ├──id + │ ├──add + │ ├──rm + │ └──disc + ├─┬vpn + │ ├──list + │ ├──ui + │ ├──url + │ ├──start + │ ├──stop + │ └──status + ├──reward + ├──survey + ├──rtfind + ├─┬mdisc + │ ├──entry + │ └──servers + ├──completion + ├──tree + ├──doc + └── + + +``` + +### config ``` -$ skywire-cli config -h -Generate or update a skywire config +A primary function of skywire-cli is generating and updating the config file used by skywire-visor. -Usage: - skywire-cli config [command] +Usage: + skywire-cli config + +Available Commands: + gen Generate a config file + update Update a config file + -Available Commands: - gen Generate a config file - update Update a config file ``` #### config gen ``` -$ skywire-cli config gen --help -Generate a config file - -Usage: - skywire-cli config gen [flags] - -Flags: - -b, --bestproto best protocol (dmsg | direct) based on location - -i, --ishv local hypervisor configuration - -j, --hvpks string list of public keys to use as hypervisor - -o, --out string output config: skywire-config.json - -p, --pkg use path for package: /opt/skywire - -u, --user use paths for user space: /home/user - -r, --regen re-generate existing config & retain keys - -y, --autoconn disable autoconnect to public visors - --all show all flags - -$ skywire-cli config gen --all Generate a config file -Usage: - skywire-cli config gen [flags] - -Flags: +Usage: + skywire-cli config gen [flags] + +Flags: -a, --url string services conf --log-level string level of logging in config (default "info") -b, --bestproto best protocol (dmsg | direct) based on location @@ -160,14 +229,15 @@ Flags: -i, --ishv local hypervisor configuration -j, --hvpks string list of public keys to use as hypervisor -k, --os string (linux / mac / win) paths (default "linux") + -l, --publicip allow display node ip in services -n, --stdout write config to stdout -o, --out string output config: skywire-config.json -p, --pkg use path for package: /opt/skywire - -u, --user use paths for user space: /home/user + -u, --user use paths for user space: /home/d0mo -q, --publicrpc allow rpc requests from LAN -r, --regen re-generate existing config & retain keys -s, --sk cipher.SecKey a random key is generated if unspecified - (default 0000000000000000000000000000000000000000000000000000000000000000) + (default 0000000000000000000000000000000000000000000000000000000000000000) -t, --testenv use test deployment conf.skywire.dev -v, --servevpn enable vpn server -w, --hide dont print the config to the terminal @@ -175,31 +245,18 @@ Flags: -y, --autoconn disable autoconnect to public visors -z, --public publicize visor in service discovery --version string custom version testing override - --binpath string set bin_path + --all show all flags + --binpath string set bin_path + ``` -##### Example defaults - -The default visor config generation assumes the command is run from the root of the cloned repository. -The example further assumes the compiled binary is available in the executable PATH and that GOPATH is set - -
- - -cd $GOPATH/src/github.com/skycoin/skywire && skywire-cli config gen - - ``` -$ cd $GOPATH/src/github.com/skycoin/skywire -$ skywire-cli config gen -[2022-08-15T10:32:29-05:00] INFO []: Fetched service endpoints from 'http://conf.skywire.skycoin.com' -[2022-08-15T10:32:29-05:00] INFO [visor:config]: Flushing config to file. config_version="v1.0.0" filepath="/home/user/go/src/github.com/skycoin/skywire/skywire-config.json" -[2022-08-15T10:32:29-05:00] INFO [skywire-cli]: Updated file 'skywire-config.json' to: +$ skywire-cli config gen -bpirxn { - "version": "v1.0.0", - "sk": "b0b193b38cb970b36bfe4bb05e2354ae96a979283b18bcf516f22a86436ddea3", - "pk": "034b7c206b825e896e727a43ae8685d7d93460ec0f37d4e3bbc3c44e6e771a8455", + "version": "v1.2.0", + "sk": "bed900b94a93f2f61230307008bca7e5df8c7532f14d4963dcdeb59e7ad368a4", + "pk": "02c8cfe6ab9b35beca2e41778302d7870454072246381fe7bcdf542d85b63c200a", "dmsg": { "discovery": "http://dmsgd.skywire.skycoin.com", "sessions_count": 1, @@ -218,7 +275,12 @@ $ skywire-cli config gen "discovery": "http://tpd.skywire.skycoin.com", "address_resolver": "http://ar.skywire.skycoin.com", "public_autoconnect": true, - "transport_setup_nodes": null + "transport_setup_nodes": null, + "log_store": { + "type": "file", + "location": "./local/transport_logs", + "rotation_interval": "168h0m0s" + } }, "routing": { "setup_nodes": [ @@ -265,1613 +327,1551 @@ $ skywire-cli config gen } ], "server_addr": "localhost:5505", - "bin_path": "./apps" + "bin_path": "./apps", + "display_node_ip": false }, "hypervisors": [], "cli_addr": "localhost:3435", "log_level": "info", "local_path": "./local", + "custom_dmsg_http_path": "./local/custom", "stun_servers": [ - "192.46.224.108:3478", - "139.177.185.210:3478", - "139.162.17.54:3478", - "139.162.17.107:3478", - "139.162.17.156:3478", - "45.118.134.168:3478", - "139.177.185.180:3478", - "139.162.17.48:3478" + "192.53.116.178:3478", + "172.105.114.227:3478", + "172.104.47.121:3478", + "172.104.185.252:3478", + "139.162.42.104:3478", + "192.53.172.10:3478", + "172.104.54.73:3478", + "139.162.21.168:3478" ], "shutdown_timeout": "10s", "restart_check_delay": "1s", "is_public": false, "persistent_transports": null } - ``` -
-##### Example hypervisor defaults - -The default configuration is for a visor only. To generate a configuration which provides the hypervisor web interface, -the `-i` or `--is-hypervisor` flag should be specified. - -
- - -skywire-cli config gen -i - +#### config update ``` -$ skywire-cli config gen -i -[2022-08-15T10:33:18-05:00] INFO []: Fetched service endpoints from 'http://conf.skywire.skycoin.com' -[2022-08-15T10:33:18-05:00] INFO [visor:config]: Flushing config to file. config_version="v1.0.0" filepath="/home/user/go/src/github.com/skycoin/skywire/skywire-config.json" -[2022-08-15T10:33:18-05:00] INFO [skywire-cli]: Updated file 'skywire-config.json' to: -{ - "version": "v1.0.0", - "sk": "b0b193b38cb970b36bfe4bb05e2354ae96a979283b18bcf516f22a86436ddea3", - "pk": "034b7c206b825e896e727a43ae8685d7d93460ec0f37d4e3bbc3c44e6e771a8455", - "dmsg": { - "discovery": "http://dmsgd.skywire.skycoin.com", - "sessions_count": 1, - "servers": [] - }, - "dmsgpty": { - "dmsg_port": 22, - "cli_network": "unix", - "cli_address": "/tmp/dmsgpty.sock" - }, - "skywire-tcp": { - "pk_table": null, - "listening_address": ":7777" - }, - "transport": { - "discovery": "http://tpd.skywire.skycoin.com", - "address_resolver": "http://ar.skywire.skycoin.com", - "public_autoconnect": true, - "transport_setup_nodes": null - }, - "routing": { - "setup_nodes": [ - "0324579f003e6b4048bae2def4365e634d8e0e3054a20fc7af49daf2a179658557" - ], - "route_finder": "http://rf.skywire.skycoin.com", - "route_finder_timeout": "10s", - "min_hops": 0 - }, - "uptime_tracker": { - "addr": "http://ut.skywire.skycoin.com" - }, - "launcher": { - "service_discovery": "http://sd.skycoin.com", - "apps": [ - { - "name": "vpn-client", - "auto_start": false, - "port": 43 - }, - { - "name": "skychat", - "args": [ - "-addr", - ":8001" - ], - "auto_start": true, - "port": 1 - }, - { - "name": "skysocks", - "auto_start": true, - "port": 3 - }, - { - "name": "skysocks-client", - "auto_start": false, - "port": 13 - }, - { - "name": "vpn-server", - "auto_start": false, - "port": 44 - } - ], - "server_addr": "localhost:5505", - "bin_path": "./apps" - }, - "hypervisors": [], - "cli_addr": "localhost:3435", - "log_level": "info", - "local_path": "./local", - "stun_servers": [ - "192.46.224.108:3478", - "139.177.185.210:3478", - "139.162.17.54:3478", - "139.162.17.107:3478", - "139.162.17.156:3478", - "45.118.134.168:3478", - "139.177.185.180:3478", - "139.162.17.48:3478" - ], - "shutdown_timeout": "10s", - "restart_check_delay": "1s", - "is_public": false, - "persistent_transports": null, - "hypervisor": { - "db_path": "/home/user/go/src/github.com/skycoin/skywire/users.db", - "enable_auth": false, - "cookies": { - "hash_key": "cd6918c54f4b7b11b50cc395f57b1f78fafa5d08daa6917b246501eeeb00d9ee5557aedf79513f3392c5ffdd5a073711c7a0243460930615424ecfa75f2d3db1", - "block_key": "41caf4a9935b9f48d37fff1b8e950f165e73c29d4effd548def4382c4dff842a", - "expires_duration": 43200000000000, - "path": "/", - "domain": "" - }, - "dmsg_port": 46, - "http_addr": ":8000", - "enable_tls": false, - "tls_cert_file": "./ssl/cert.pem", - "tls_key_file": "./ssl/key.pem" - } -} -``` -
- +Update a config file -Note that it is possible to start the visor with the hypervisor interface explicitly; regardless of how the config was generated; using the -i flag +Usage: + skywire-cli config update [flags] + +Available Commands: + hv update hypervisor config + sc update skysocks-client config + ss update skysocks-server config + vpnc update vpn-client config + vpns update vpn-server config + +Flags: + -a, --endpoints update server endpoints + --log-level string level of logging in config + -b, --url string service config URL: conf.skywire.skycoin.com + -t, --testenv use test deployment: conf.skywire.dev + --public-autoconn string change public autoconnect configuration + --set-minhop int change min hops value (default -1) + -i, --input string path of input config file. + -o, --output string config file to output + -``` -skywire-visor -i ``` -##### Example dmsghttp defaults +##### config update hv -Using dmsghttp routes http traffic used for connecting to the skywire services through dmsg. - -The dmsghttp-config.json file must be present to generate a config with dmsghttp - -The `-b` or `--bestproto` flag will automatically determine if dmsghttp should be used based on region - -The `-d` or `--dmsghttp` flag explicitly creates the config with dmsghttp - -It is recommended to use the `-b` flag for config file generation. - -The example below uses `-d` to create a dmsghttp config - -
- - -skywire-cli config gen -d - - -``` -[2022-08-15T10:34:30-05:00] INFO [skywire-cli]: Found Dmsghttp config: dmsghttp-config.json -[2022-08-15T10:34:31-05:00] INFO []: Fetched service endpoints from 'http://conf.skywire.skycoin.com' -[2022-08-15T10:34:31-05:00] INFO [visor:config]: Flushing config to file. config_version="v1.0.0" filepath="/home/user/go/src/github.com/skycoin/skywire/skywire-config.json" -[2022-08-15T10:34:31-05:00] INFO [skywire-cli]: Updated file 'skywire-config.json' to: -{ - "version": "v1.0.0", - "sk": "b0b193b38cb970b36bfe4bb05e2354ae96a979283b18bcf516f22a86436ddea3", - "pk": "034b7c206b825e896e727a43ae8685d7d93460ec0f37d4e3bbc3c44e6e771a8455", - "dmsg": { - "discovery": "dmsg://022e607e0914d6e7ccda7587f95790c09e126bbd506cc476a1eda852325aadd1aa:80", - "sessions_count": 1, - "servers": [ - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "02a2d4c346dabd165fd555dfdba4a7f4d18786fe7e055e562397cd5102bdd7f8dd", - "server": { - "address": "dmsg.server02a2d4c3.skywire.skycoin.com:30081", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "03717576ada5b1744e395c66c2bb11cea73b0e23d0dcd54422139b1a7f12e962c4", - "server": { - "address": "dmsg.server03717576.skywire.skycoin.com:30082", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "0228af3fd99c8d86a882495c8e0202bdd4da78c69e013065d8634286dd4a0ac098", - "server": { - "address": "45.118.133.242:30084", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "03d5b55d1133b26485c664cf8b95cff6746d1e321c34e48c9fed293eff0d6d49e5", - "server": { - "address": "dmsg.server03d5b55d.skywire.skycoin.com:30083", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "0281a102c82820e811368c8d028cf11b1a985043b726b1bcdb8fce89b27384b2cb", - "server": { - "address": "192.53.114.142:30085", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "02a49bc0aa1b5b78f638e9189be4ed095bac5d6839c828465a8350f80ac07629c0", - "server": { - "address": "dmsg.server02a4.skywire.skycoin.com:30089", - "availableSessions": 0 - } - }, - { - "version": "", - "sequence": 0, - "timestamp": 0, - "static": "02113579604c79b704e169a4fd94fd78167b86fe40da1016f8146935babcc9abcb", - "server": { - "address": "194.147.142.202:30050", - "availableSessions": 0 - } - } - ] - }, - "dmsgpty": { - "dmsg_port": 22, - "cli_network": "unix", - "cli_address": "/tmp/dmsgpty.sock" - }, - "skywire-tcp": { - "pk_table": null, - "listening_address": ":7777" - }, - "transport": { - "discovery": "dmsg://02b307aee5c8ce1666c63891f8af25ad2f0a47a243914c963942b3ba35b9d095ae:80", - "address_resolver": "dmsg://03234b2ee4128d1f78c180d06911102906c80795dfe41bd6253f2619c8b6252a02:80", - "public_autoconnect": true, - "transport_setup_nodes": null - }, - "routing": { - "setup_nodes": [ - "0324579f003e6b4048bae2def4365e634d8e0e3054a20fc7af49daf2a179658557" - ], - "route_finder": "dmsg://039d89c5eedfda4a28b0c58b0b643eff949f08e4f68c8357278081d26f5a592d74:80", - "route_finder_timeout": "10s", - "min_hops": 0 - }, - "uptime_tracker": { - "addr": "dmsg://022c424caa6239ba7d1d9d8f7dab56cd5ec6ae2ea9ad97bb94ad4b48f62a540d3f:80" - }, - "launcher": { - "service_discovery": "dmsg://0204890f9def4f9a5448c2e824c6a4afc85fd1f877322320898fafdf407cc6fef7:80", - "apps": [ - { - "name": "vpn-client", - "auto_start": false, - "port": 43 - }, - { - "name": "skychat", - "args": [ - "-addr", - ":8001" - ], - "auto_start": true, - "port": 1 - }, - { - "name": "skysocks", - "auto_start": true, - "port": 3 - }, - { - "name": "skysocks-client", - "auto_start": false, - "port": 13 - }, - { - "name": "vpn-server", - "auto_start": false, - "port": 44 - } - ], - "server_addr": "localhost:5505", - "bin_path": "./apps" - }, - "hypervisors": [], - "cli_addr": "localhost:3435", - "log_level": "info", - "local_path": "./local", - "stun_servers": [ - "192.46.224.108:3478", - "139.177.185.210:3478", - "139.162.17.54:3478", - "139.162.17.107:3478", - "139.162.17.156:3478", - "45.118.134.168:3478", - "139.177.185.180:3478", - "139.162.17.48:3478" - ], - "shutdown_timeout": "10s", - "restart_check_delay": "1s", - "is_public": false, - "persistent_transports": null -} ``` -
- - -##### Example package based installation defaults +update hypervisor config -This assumes the skywire linux installation is at `/opt/skywire` with binaries and apps in their own subdirectories. -The `-p` flag default paths are provided by the skywire linux / mac packages or windows .msi installer and generate the skywire config within the install dir. - - -
- - -sudo skywire-cli config gen -bipr - +Usage: + skywire-cli config update hv [flags] + +Flags: + -+, --add-pks string public keys of hypervisors that should be added to this visor + -r, --reset resets hypervisor configuration + +Global Flags: + -i, --input string path of input config file. + -o, --output string config file to output + ``` -$ sudo skywire-cli config gen -bipr -[sudo] password for user: -[2022-08-15T10:35:37-05:00] INFO []: Fetched service endpoints from 'http://conf.skywire.skycoin.com' -[2022-08-15T10:35:37-05:00] INFO [visor:config]: Flushing config to file. config_version="v1.0.0" filepath="/opt/skywire/skywire.json" -[2022-08-15T10:35:37-05:00] INFO [skywire-cli]: Updated file '/opt/skywire/skywire.json' to: -{ - "version": "v1.0.0", - "sk": "4aaa3cc266cb8c4ec9689a0d88c49802646517ae2d2240315c480d461c6af70e", - "pk": "0291b61ab823eebe79575d6d0f8e122e84cd17dae1cab5c7dfb9043f1ee4f0a206", - "dmsg": { - "discovery": "http://dmsgd.skywire.skycoin.com", - "sessions_count": 1, - "servers": [] - }, - "dmsgpty": { - "dmsg_port": 22, - "cli_network": "unix", - "cli_address": "/tmp/dmsgpty.sock" - }, - "skywire-tcp": { - "pk_table": null, - "listening_address": ":7777" - }, - "transport": { - "discovery": "http://tpd.skywire.skycoin.com", - "address_resolver": "http://ar.skywire.skycoin.com", - "public_autoconnect": true, - "transport_setup_nodes": null - }, - "routing": { - "setup_nodes": [ - "0324579f003e6b4048bae2def4365e634d8e0e3054a20fc7af49daf2a179658557" - ], - "route_finder": "http://rf.skywire.skycoin.com", - "route_finder_timeout": "10s", - "min_hops": 0 - }, - "uptime_tracker": { - "addr": "http://ut.skywire.skycoin.com" - }, - "launcher": { - "service_discovery": "http://sd.skycoin.com", - "apps": [ - { - "name": "vpn-client", - "auto_start": false, - "port": 43 - }, - { - "name": "skychat", - "args": [ - "-addr", - ":8001" - ], - "auto_start": true, - "port": 1 - }, - { - "name": "skysocks", - "auto_start": true, - "port": 3 - }, - { - "name": "skysocks-client", - "auto_start": false, - "port": 13 - }, - { - "name": "vpn-server", - "auto_start": false, - "port": 44 - } - ], - "server_addr": "localhost:5505", - "bin_path": "/opt/skywire/apps" - }, - "hypervisors": [], - "cli_addr": "localhost:3435", - "log_level": "info", - "local_path": "/opt/skywire/local", - "stun_servers": [ - "192.46.224.108:3478", - "139.177.185.210:3478", - "139.162.17.54:3478", - "139.162.17.107:3478", - "139.162.17.156:3478", - "45.118.134.168:3478", - "139.177.185.180:3478", - "139.162.17.48:3478" - ], - "shutdown_timeout": "10s", - "restart_check_delay": "1s", - "is_public": false, - "persistent_transports": null, - "hypervisor": { - "db_path": "/opt/skywire/users.db", - "enable_auth": true, - "cookies": { - "hash_key": "2e0337acde4de0c92531c39293839ca5b5398409b2da250c30ed89c814bdf6aab6a3e7ab2cd21e077e5d694997811e90be0de8552ad59a788a480d6d2efdf512", - "block_key": "19035ce3ee7110f6d794bf02bab4fb6ed7360db9b725331da2732999745ddcd3", - "expires_duration": 43200000000000, - "path": "/", - "domain": "" - }, - "dmsg_port": 46, - "http_addr": ":8000", - "enable_tls": false, - "tls_cert_file": "./ssl/cert.pem", - "tls_key_file": "./ssl/key.pem" - } -} -``` -
- -The configuration is written (or rewritten) - -##### Example remote hypervisor configuration for package based installation - -The typical arrangement uses a remote hypervisor if a local instance is not started. +##### config update sc -The desired hypervisor public key can be determined by running the following command on the running hypervisor: - -``` -$ skywire-cli visor pk ``` +update skysocks-client config -configure the visor to use the public key of the remote hypervisor: +Usage: + skywire-cli config update sc [flags] + +Flags: + -+, --add-server string add skysocks server address to skysock-client + -r, --reset reset skysocks-client configuration + +Global Flags: + -i, --input string path of input config file. + -o, --output string config file to output + -``` -# skywire-cli config gen -bprj ``` -The configuration is regenerated - -#### config update +##### config update ss ``` -$ skywire-cli config update --help -Update a config file +update skysocks-server config -Usage: - skywire-cli config update [flags] - skywire-cli config update [command] - -Available Commands: - hv update hypervisor config - sc update skysocks-client config - ss update skysocks-server config - vpnc update vpn-client config - vpns update vpn-server config - -Flags: - -a, --endpoints update server endpoints - --log-level string level of logging in config - -b, --url string service config URL: conf.skywire.skycoin.com - -t, --testenv use test deployment: conf.skywire.dev - --public-autoconn string change public autoconnect configuration - --set-minhop int change min hops value (default -1) - -i, --input string path of input config file. - -o, --output string config file to output +Usage: + skywire-cli config update ss [flags] + +Flags: + -s, --passwd string add passcode to skysocks server + -r, --reset reset skysocks configuration + +Global Flags: + -i, --input string path of input config file. + -o, --output string config file to output + ``` -##### Example +##### config update vpnc -
- - -skywire-cli config update - +``` +update vpn-client config +Usage: + skywire-cli config update vpnc [flags] + +Flags: + -x, --killsw string change killswitch status of vpn-client + --add-server string add server address to vpn-client + -s, --pass string add passcode of server if needed + -r, --reset reset vpn-client configurations + +Global Flags: + -i, --input string path of input config file. + -o, --output string config file to output + ``` -$ skywire-cli config update -[2022-08-15T10:44:31-05:00] INFO [visor:config]: Flushing config to file. config_version="v1.0.0" filepath="/home/user/go/src/github.com/skycoin/skywire/skywire-config.json" -[2022-08-15T10:44:31-05:00] INFO [skywire-cli]: Updated file '/home/user/go/src/github.com/skycoin/skywire/skywire-config.json' to: { - "version": "v1.0.0", - "sk": "b0b193b38cb970b36bfe4bb05e2354ae96a979283b18bcf516f22a86436ddea3", - "pk": "034b7c206b825e896e727a43ae8685d7d93460ec0f37d4e3bbc3c44e6e771a8455", - "dmsg": { - "discovery": "http://dmsgd.skywire.skycoin.com", - "sessions_count": 1, - "servers": [] - }, - "dmsgpty": { - "dmsg_port": 22, - "cli_network": "unix", - "cli_address": "/tmp/dmsgpty.sock" - }, - "skywire-tcp": { - "pk_table": null, - "listening_address": ":7777" - }, - "transport": { - "discovery": "http://tpd.skywire.skycoin.com", - "address_resolver": "http://ar.skywire.skycoin.com", - "public_autoconnect": true, - "transport_setup_nodes": null - }, - "routing": { - "setup_nodes": [ - "0324579f003e6b4048bae2def4365e634d8e0e3054a20fc7af49daf2a179658557" - ], - "route_finder": "http://rf.skywire.skycoin.com", - "route_finder_timeout": "10s", - "min_hops": 0 - }, - "uptime_tracker": { - "addr": "http://ut.skywire.skycoin.com" - }, - "launcher": { - "service_discovery": "http://sd.skycoin.com", - "apps": [ - { - "name": "vpn-client", - "auto_start": false, - "port": 43 - }, - { - "name": "skychat", - "args": [ - "-addr", - ":8001" - ], - "auto_start": true, - "port": 1 - }, - { - "name": "skysocks", - "auto_start": true, - "port": 3 - }, - { - "name": "skysocks-client", - "auto_start": false, - "port": 13 - }, - { - "name": "vpn-server", - "auto_start": false, - "port": 44 - } - ], - "server_addr": "localhost:5505", - "bin_path": "./apps" - }, - "hypervisors": [], - "cli_addr": "localhost:3435", - "log_level": "info", - "local_path": "./local", - "stun_servers": [ - "192.46.224.108:3478", - "139.177.185.210:3478", - "139.162.17.54:3478", - "139.162.17.107:3478", - "139.162.17.156:3478", - "45.118.134.168:3478", - "139.177.185.180:3478", - "139.162.17.48:3478" - ], - "shutdown_timeout": "10s", - "restart_check_delay": "1s", - "is_public": false, - "persistent_transports": null -} + +##### config update vpns + ``` -
+update vpn-server config -### dmsgpty usage +Usage: + skywire-cli config update vpns [flags] + +Flags: + -s, --passwd string add passcode to vpn-server + --secure string change secure mode status of vpn-server + --autostart string change autostart of vpn-server + --netifc string set default network interface + -r, --reset reset vpn-server configurations + +Global Flags: + -i, --input string path of input config file. + -o, --output string config file to output + -The dmsgpty is a means of accessing remote visors which are connected to a locally running hypervisor via the shell. +``` -One can think of it as similar in functionality to ssh. The difference is that the connection, from a remote visor to the hypervisor, is already established. +### dmsgpty ``` -$ skywire-cli dmsgpty Interact with remote visors -Usage: - skywire-cli dmsgpty [command] - -Available Commands: - ui Open dmsgpty UI in default browser - url Show dmsgpty UI URL - list List connected visors - start Start dmsgpty session +Usage: + skywire-cli dmsgpty + +Available Commands: + ui Open dmsgpty UI in default browser + url Show dmsgpty UI URL + list List connected visors + start Start dmsgpty session + ``` #### dmsgpty ui -The dmsgpty ui is accessible from the hypervisor UI, and requires that one has already logged into the hypervisor UI or that the session cookie for the hypervisor UI exists. - -Open dmsgpty UI in default browser - -``` -$ skywire-cli dmsgpty ui -h -Usage: - skywire-cli dmsgpty ui [flags] ``` +Open dmsgpty UI in default browser -``` -Flags: +Usage: + skywire-cli dmsgpty ui [flags] + +Flags: -i, --input string read from specified config file -p, --pkg read from /opt/skywire/skywire.json - -v, --visor string public key of visor to connect to + -v, --visor string public key of visor to connect to + + ``` #### dmsgpty url -Show dmsgpty UI URL -``` -$ skywire-cli dmsgpty url -``` - ``` -Usage: - skywire-cli dmsgpty url [flags] +Show dmsgpty UI URL -Flags: +Usage: + skywire-cli dmsgpty url [flags] + +Flags: -i, --input string read from specified config file -p, --pkg read from /opt/skywire/skywire.json - -v, --visor string public key of visor to connect to + -v, --visor string public key of visor to connect to + ``` #### dmsgpty list -The visors which are shown by this command are currently connected to the hypervisor - +``` List connected visors -``` -$ skywire-cli dmsgpty list +Usage: + skywire-cli dmsgpty list [flags] + +Flags: + --rpc string RPC server address (default "localhost:3435") + + ``` #### dmsgpty start -A public key of a connected remote visor must be provided as an argument. The list command, above, lists remote visors which are connected to the locally running hypervisor. - -Start dmsgpty session - -``` -$ skywire-cli dmsgpty start ``` +Start dmsgpty session -``` -Flags: +Usage: + skywire-cli dmsgpty start [flags] + +Flags: -p, --port string port of remote visor dmsgpty (default "22") + --rpc string RPC server address (default "localhost:3435") + ``` -Starting the dmsgpty-cli will give access via the default shell to the remote visor, as the same user which started the remote visor. - -### visor usage +### visor ``` -$ skywire-cli visor Query the Skywire Visor -Usage: - skywire-cli visor [command] +Usage: + skywire-cli visor [flags] + +Available Commands: + app App settings + exec Execute a command + hv Hypervisor + pk Public key of the visor + info Summary of visor info + ver Version and build info + route View and set rules + halt Stop a running visor + start Start a visor + tp View and set transports + +Flags: + --rpc string RPC server address (default "localhost:3435") + + +``` -Available Commands: - app App settings - exec Execute a command - hvui Hypervisor UI - pk Public key of the visor - hvpk Public key of remote hypervisor - chvpk Public key of connected hypervisors - info Summary of visor info - version Version and build info - route View and set rules - halt Stop a running visor - start Start a visor - tp View and set transports +#### visor app ``` -#### visor exec + App settings -execute a given command +Usage: + skywire-cli visor app [flags] + +Available Commands: + ls List apps + start Launch app + stop Halt app + log Logs from app + arg App args + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor exec + +##### visor app ls + ``` -##### Example + List apps -ls +Usage: + skywire-cli visor app ls [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor exec ls -bin -boot -dev -efi -etc -home -lib -lib64 -media -mnt -opt -proc -root -run -sbin -share -srv -sys -tmp -usr -var ``` -echo +##### visor app start ``` -$ skywire-cli visor exec echo "hello world" -hello world -``` -escape a flag + Launch app + +Usage: + skywire-cli visor app start [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$skywire-cli visor exec echo -- "-a" --a + +##### visor app stop + ``` + Halt app -#### visor hvui +Usage: + skywire-cli visor app stop [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -open the hypervisor UI in the default browser ``` -$ skywire-cli visor hvui + +##### visor app log + ``` -#### visor pk + Logs from app since RFC3339Nano-formatted timestamp. + + "beginning" is a special timestamp to fetch all the logs -public key of the visor +Usage: + skywire-cli visor app log [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor pk ``` +##### visor app arg + ``` -Flags: - -i, --input string path of input config file. -``` +App args -##### Example +Usage: + skywire-cli visor app arg [flags] + +Available Commands: + autostart Set app autostart + killswitch Set app killswitch + secure Set app secure + passcode Set app passcode + netifc Set app network interface + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor pk -0359f02198933550ad5b41a21470a0bbe0f73c0eb6e93d7d279133a0d5bffc645c ``` -#### visor hvpk - -Public key of remote hypervisor(s) set in the config +###### visor app arg autostart ``` -$ skywire-cli visor hvpk +Set app autostart + +Usage: + skywire-cli visor app arg autostart (true|false) [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + + ``` +###### visor app arg killswitch + ``` -Usage: - skywire-cli visor hvpk [flags] + Set app killswitch -Flags: - -w, --http serve public key via http - -i, --input string path of input config file. - -p, --pkg read from /opt/skywire/skywire.json +Usage: + skywire-cli visor app arg killswitch (true|false) [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -##### Example +###### visor app arg secure -``` -$ skywire-cli visor hvpk -[0359f02198933550ad5b41a21470a0bbe0f73c0eb6e93d7d279133a0d5bffc645c] ``` -#### visor chvpk + Set app secure -show conected hypervisor(s) +Usage: + skywire-cli visor app arg secure (true|false) [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor chvpk ``` -##### Example +###### visor app arg passcode -``` -$ skywire-cli visor chvpk -[0359f02198933550ad5b41a21470a0bbe0f73c0eb6e93d7d279133a0d5bffc645c] ``` -#### visor info + Set app passcode. + + "remove" is a special arg to remove the passcode -summary of visor info +Usage: + skywire-cli visor app arg passcode [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor info + +###### visor app arg netifc + ``` +Set app network interface. + + "remove" is a special arg to remove the netifc -##### Example +Usage: + skywire-cli visor app arg netifc [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor info -.:: Visor Summary ::. -Public key: "038229af479f87c8132e84884487b8985f55b49c8e0aa17ac715f0270678c33f2a" -Symmetric NAT: false -IP: 192.168.254.130 -DMSG Server: "0371ab4bcff7b121f4b91f6856d6740c6f9dc1fe716977850aeb5d84378b300a13" -Ping: "477.203238ms" -Visor Version: unknown -Skybian Version: -Uptime Tracker: healthy -Time Online: 4242.082701 seconds -Build Tag: + +#### visor exec ``` -#### visor version + Execute a command -version and build info +Usage: + skywire-cli visor exec [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor version ``` -##### Example +#### visor hv -``` -$ skywire-cli visor version -Version "v1.0.0" built on "2022-05-26T18:18:39Z" against commit "668d5ad8" ``` -#### visor app + Hypervisor + + Access the hypervisor UI + View remote hypervisor public key -``` -$ skywire-cli visor app -app settings +Usage: + skywire-cli visor hv [flags] + +Available Commands: + ui open Hypervisor UI in default browser + cpk Public key of remote hypervisor(s) set in config + pk Public key of remote hypervisor(s) + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -Usage: - skywire-cli visor app [command] +``` -Available Commands: - ls list apps - start launch app - stop halt app - autostart set autostart flag for app - log logs from app since RFC3339Nano-formated timestamp. - "beginning" is a special timestamp to fetch all the logs +##### visor hv ui ``` -##### app ls + open Hypervisor UI in default browser -list apps +Usage: + skywire-cli visor hv ui [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor app ls ``` -##### Example +##### visor hv cpk -``` -$ skywire-cli visor app ls -app ports auto_start status -skychat 1 true running -skysocks 3 true running -skysocks-client 13 false stopped -vpn-server 44 false stopped -vpn-client 43 false stopped ``` -#### app start + Public key of remote hypervisor(s) set in config -start application +Usage: + skywire-cli visor hv cpk [flags] + +Flags: + -w, --http serve public key via http + -i, --input string path of input config file. + -p, --pkg read from /opt/skywire/skywire.json + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor app start ``` -##### Example +##### visor hv pk ``` -$ skywire-cli visor app start vpn-server -OK -``` +Public key of remote hypervisor(s) which are currently connected to -#### app stop +Usage: + skywire-cli visor hv pk [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -stop application - -``` -$ skywire-cli visor app stop ``` -##### Example +#### visor pk ``` -$ skywire-cli visor app stop skychat -OK -``` + Public key of the visor -#### app autostart - -set autostart flag for app +Usage: + skywire-cli visor pk [flags] + +Flags: + -w, --http serve public key via http + -i, --input string path of input config file. + -p, --pkg read from /opt/skywire/skywire.json + -x, --prt string serve public key via http (default "7998") + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor app autostart (on|off) ``` -##### Example +#### visor info -``` -$ skywire-cli visor app autostart vpn-server on -OK ``` -#### app logs + Summary of visor info -logs from app since RFC3339Nano-formated timestamp. - "beginning" is a special timestamp to fetch all the logs +Usage: + skywire-cli visor info [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor app logs -``` -##### Example +#### visor ver ``` -$ skywire-cli visor app log skysocks beginning - [2022-03-11T21:15:55-06:00] INFO [public_autoconnect]: Fetching public visors - [2022-03-11T21:16:06-06:00] INFO [public_autoconnect]: Fetching public visors - [2022-03-11T21:16:09-06:00] INFO [dmsgC]: Session stopped. error="failed to serve dialed session to 0371ab4bcff7b121f4b91f6856d6740c6f9dc1fe716977850aeb5d84378b300a13: EOF" - [2022-03-11T21:16:09-06:00] WARN [dmsgC]: Stopped accepting streams. error="EOF" session=0371ab4bcff7b121f4b91f6856d6740c6f9dc1fe716977850aeb5d84378b300a13 - [2022-03-11T21:16:10-06:00] INFO [dmsgC]: Dialing session... remote_pk=0281a102c82820e811368c8d028cf11b1a985043b726b1bcdb8fce89b27384b2cb - [2022-03-11T21:16:14-06:00] INFO [dmsgC]: Serving session. remote_pk=0281a102c82820e811368c8d028cf11b1a985043b726b1bcdb8fce89b27384b2cb + + Version and build info + +Usage: + skywire-cli visor ver [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + + ``` #### visor route ``` -$ skywire-cli visor route -view and set rules -Usage: - skywire-cli visor route [command] + View and set routing rules -Available Commands: - ls-rules list routing rules - rule return routing rule by route ID key - rm-rule remove routing rule - add-rule add routing rule +Usage: + skywire-cli visor route [flags] + +Available Commands: + ls-rules List routing rules + rule Return routing rule by route ID key + rm-rule Remove routing rule + add-rule Add routing rule + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -#### route add-rule +##### visor route ls-rules -``` -$ skywire-cli visor route add-rule (app | fwd ) [flags] ``` -##### Example + List routing rules -``` -$ skywire-cli visor route add-rule -h -add routing rule +Usage: + skywire-cli visor route ls-rules [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -Usage: - skywire-cli visor route add-rule (app | fwd ) [flags] +``` -Flags: - --keep-alive duration duration after which routing rule will expire if no activity is present (default 30s) +##### visor route rule ``` -#### route rm-rule + Return routing rule by route ID key -Removes a routing rule +Usage: + skywire-cli visor route rule [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor route rm-rule ``` -##### Example +##### visor route rm-rule ``` -$ skywire-cli visor route rm-rule -h -Removes a routing rule via route ID key -Usage: - skywire-cli visor rm-rule [flags] + Remove routing rule -``` +Usage: + skywire-cli visor route rm-rule [flags] + +Flags: + -a, --all remove all routing rules + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -#### route ls-rules +``` -list routing rules +##### visor route add-rule -``` -$ skywire-cli visor route ls-rules ``` -#### route rule + Add routing rule + +Usage: + skywire-cli visor route add-rule ( app | fwd | intfwd ) [flags] + +Available Commands: + app Add app/consume routing rule + fwd Add forward routing rule + intfwd Add intermediary forward routing rule + +Flags: + --keep-alive duration timeout for rule expiration (default 30s) + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor route rule ``` -##### Example +###### visor route add-rule app ``` -$ skywire-cli visor route rule -h -Returns a routing rule via route ID key -Usage: - skywire-cli visor route rule [flags] + Add app/consume routing rule + +Usage: + skywire-cli visor route add-rule app \ + \ + \ + \ + \ + \ + || [flags] + +Flags: + -i, --rid string route id + -l, --lpk string local public key + -m, --lpt string local port + -p, --rpk string remote pk + -q, --rpt string remote port + +Global Flags: + --keep-alive duration timeout for rule expiration (default 30s) + --rpc string RPC server address (default "localhost:3435") + ``` -#### visor tp +###### visor route add-rule fwd ``` -view and set transports -Usage: - skywire-cli visor tp [command] + Add forward routing rule -Available Commands: - disc discover transport(s) by ID or public key - type transport types used by the local visor - ls available transports - id transport summary by id - add add a transport - rm remove transport(s) by id +Usage: + skywire-cli visor route add-rule fwd \ + \ + \ + \ + \ + \ + \ + \ + || [flags] + +Flags: + -i, --rid string route id + -j, --nrid string next route id + -k, --ntpid string next transport id + -l, --lpk string local public key + -m, --lpt string local port + -p, --rpk string remote pk + -q, --rpt string remote port + +Global Flags: + --keep-alive duration timeout for rule expiration (default 30s) + --rpc string RPC server address (default "localhost:3435") + ``` -#### tp add +###### visor route add-rule intfwd -add transport - -``` -$ skywire-cli visor tp add [flags] ``` -##### Example + Add intermediary forward routing rule + +Usage: + skywire-cli visor route add-rule intfwd \ + \ + \ + \ + || [flags] + +Flags: + -i, --rid string route id + -n, --nrid string next route id + -t, --tpid string next transport id + +Global Flags: + --keep-alive duration timeout for rule expiration (default 30s) + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor tp add -h -Adds a new transport -Usage: - skywire-cli visor add-tp [flags] +#### visor halt -Flags: - --public whether to make the transport public (deprecated) - -t, --timeout duration if specified, sets an operation timeout - --type string type of transport to add; if unspecified, cli will attempt to establish a transport in the following order: stcp, stcpr, sudph, dmsg ``` -#### tp disc + Stop a running visor -discover transport(s) by ID or public key +Usage: + skywire-cli visor halt [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor tp disc (--id= | --pk=) ``` -##### Example +#### visor start ``` -$ skywire-cli visor tp disc -h -discover transport(s) by ID or public key -Usage: - skywire-cli visor tp disc (--id= | --pk=) [flags] + Start a visor -Flags: - --id transportID if specified, obtains a single transport of given ID (default 00000000-0000-0000-0000-000000000000) - --pk cipher.PubKey if specified, obtains transports associated with given public key (default 000000000000000000000000000000000000000000000000000000000000000000) +Usage: + skywire-cli visor start [flags] + +Flags: + -s, --src 'go run' external commands from the skywire sources + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -#### tp id - -transport summary by id +#### visor tp ``` -$ skywire-cli visor tp id -``` -##### Example + Transports are bidirectional communication protocols + used between two Skywire Visors (or Transport Edges) + + Each Transport is represented as a unique 16 byte (128 bit) + UUID value called the Transport ID + and has a Transport Type that identifies + a specific implementation of the Transport. + +Usage: + skywire-cli visor tp [flags] + +Available Commands: + type Transport types used by the local visor + ls Available transports + id Transport summary by id + add Add a transport + rm Remove transport(s) by id + disc Discover remote transport(s) + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor tp id -h -transport summary by id -Usage: -skywire-cli visor tp [flags] +##### visor tp type + ``` -#### tp ls + Transport types used by the local visor -list transports +Usage: + skywire-cli visor tp type + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor tp ls ``` -##### Example +##### visor tp ls -``` -$ skywire-cli visor tp ls -type id remote mode is_up ``` -#### tp type + Available transports -Lists transport types used by the local visor + displays transports of the local visor + +Usage: + skywire-cli visor tp ls [flags] + +Flags: + -t, --types strings show transport(s) type(s) comma-separated + -p, --pks strings show transport(s) for public key(s) comma-separated + -l, --logs show transport logs (default true) + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor tp type ``` -##### Example +##### visor tp id -``` -$ skywire-cli visor tp type -dmsg -stcp -stcpr -sudph ``` -#### tp rm + Transport summary by id -remove transport +Usage: + skywire-cli visor tp id (-i) + +Flags: + -i, --id string transport ID + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -``` -$ skywire-cli visor tp rm ``` -##### Example +##### visor tp add ``` -$ skywire-cli visor tp rm -h -Removes transport with given id -Usage: - skywire-cli visor tp rm [flags] - -``` + Add a transport + If the transport type is unspecified, + the visor will attempt to establish a transport + in the following order: skywire-tcp, stcpr, sudph, dmsg -#### visor start +Usage: + skywire-cli visor tp add (-p) + +Flags: + -r, --rpk string remote public key. + -o, --timeout duration if specified, sets an operation timeout + -t, --type string type of transport to add. + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -Start a visor -``` -$ skywire-cli visor start ``` -``` -Flags: - -s, --src 'go run' external commands from the skywire sources +##### visor tp rm + ``` -#### visor halt + Remove transport(s) by id -Stop a running visor +Usage: + skywire-cli visor tp rm ( -a || -i ) + +Flags: + -a, --all remove all transports + -i, --id string remove transport of given ID + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli visor halt + +##### visor tp disc + ``` -### vpn usage + Discover remote transport(s) by ID or public key + +Usage: + skywire-cli visor tp disc (--id= || --pk=) + +Flags: + -i, --id string obtain transport of given ID + -p, --pk string obtain transports by public key + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -vpn interface +``` +### vpn ``` -$ skywire-cli vpn controls for VPN client -Usage: - skywire-cli vpn [command] - -Available Commands: - list List public VPN servers - ui Open VPN UI in default browser - url Show VPN UI URL - start start the vpn for - stop stop the vpn - status vpn status +Usage: + skywire-cli vpn [flags] + +Available Commands: + list List public VPN servers + ui Open VPN UI in default browser + url Show VPN UI URL + start start the vpn for + stop stop the vpn + status vpn status + +Flags: + --rpc string RPC server address (default "localhost:3435") + ``` #### vpn list -The vpn list subcommand queries the list of [public VPN servers](https://sd.skycoin.com/api/services?type=vpn) from the service discovery, with optional filters for country and version. - -List [public VPN servers](https://sd.skycoin.com/api/services?type=vpn) - ``` -Usage: - skywire-cli vpn list [flags] +List public VPN servers -Flags: +Usage: + skywire-cli vpn list [flags] + +Flags: -c, --country string filter results by country -n, --nofilter provide unfiltered results - -s, --stats return only a count of the resuts - -y, --systray format results for systray - -v, --ver string filter results by version + -s, --stats return only a count of the results + -v, --ver string filter results by version + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -##### Example +#### vpn ui ``` -$ skywire-cli vpn list -s -293 VPN Servers +Open VPN UI in default browser -$ skywire-cli vpn list -[ - { - "address": "0214948797b58e60febb3c9f977c92203474a3fde470c28fe0b2adc91bf6f3015b:44", - "type": "vpn", - "geo": { - "lat": 0.52, - "lon": 101.44, - "country": "ID", - "region": "RI" - }, - "version": "v0.6.0" - }, - { - "address": "0231fb93b9f5b4e2b9a71a58aa35165b16eaae7df764a839561d008e221d58b148:44", - "type": "vpn", - "geo": { - "lat": 40.5992, - "lon": -77.5768, - "country": "US", - "region": "PA" - }, - "version": "v0.5.1" - }, - { - "address": "02fc1c9e9e78c644e0818cbfbd66585c9c8d664ada0fbf1b89c1afd42178739559:44", - "type": "vpn", - "geo": { - "lat": 33.14, - "lon": -96.75, - "country": "US", - "region": "TX" - }, - "version": "v1.0.0" - }, - { - "address": "029fffe4ffc40d15d2d739b21c8d69c1a7b63e72ad9a6827c6c370cea01dc8e5d4:44", - "type": "vpn", - "geo": { - "lat": 46.88, - "lon": -71.34, - "country": "CA", - "region": "QC" - }, - "version": "v1.0.1" - }, +Usage: + skywire-cli vpn ui [flags] + +Flags: + -c, --config string config path + -p, --pkg use package config path + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + -$ skywire-cli vpn list -y -03287341eb55277a0e8a1c20328900fe955d9fa184989c10dc4218e494e77d7bf3 | GR -031888409f7d5ae26c0dd46b970cc06d75d1b494feacac7c152008811e3c5cc797 | ID -021e95f178a1cace6658d22fa9445101c7001531c75b444fc2f1b92d44bfbba753 | ID -039b61cb88caf9d18104cd661a242607ba174f33fa5df548e6eb5308414002f570 | CA -021d2bb4e3f414bb39fbe2a2f273004b55e611ebfb8fcff7d0795340945e27e36f | US -0277b420e9abeae438a98c63c175ad3f5ba6f02181eb230f1b00eaf16858eef71b | NL -0278df107bdcade217f0a75330122f7d9df3e43f2635686824506f61b21fae2fb5 | BH -03b99bbebafb5dcb0035faf86d84766355fb989da8497ad7128d789bc511e46e52 | ID -02921cd31fc4aaec49b6f460ec87103cfd931cecd6b84007c5d66b1e7af1ba98b8 | CA -03a367c310c4d921a3315dbc3940673f32dcbecb401439c20aeb713558cf6726b2 | US -03fbbacd70dcc16d4336f006d5a5316a4a3e0ea21839ea70228ae164921a731d53 | GR -0280b94366b93d3f145b4ee7a5c4e36a23ee673043a0d9bb8d69fd983fedbf67c6 | ID -03ec7911e471ce4da2ede75c0c1cfe0ead7416c77bfac8b94d8d2456d9d7148abc - -$ skywire-cli vpn list -c US -v 1.0.1 -[ - { - "address": "03a367c310c4d921a3315dbc3940673f32dcbecb401439c20aeb713558cf6726b2:44", - "type": "vpn", - "geo": { - "lat": 39.37, - "lon": -104.86, - "country": "US", - "region": "CO" - }, - "version": "v1.0.1" - }, - { - "address": "0356c02912e2df48afe47b258b98e28b2dea3dd04eb9a6b0d4975ee962959c3834:44", - "type": "vpn", - "geo": { - "lat": 36, - "lon": -83.91, - "country": "US", - "region": "TN" - }, - "version": "v1.0.1" - }, - { - "address": "0311112186dabc0371dce9b8ae0d1a7b4429ec5b8197dd316d3a67b6ec8d5acb9a:44", - "type": "vpn", - "geo": { - "lat": 37.76, - "lon": -122.49, - "country": "US", - "region": "CA" - }, - "version": "v1.0.1" - }, - { - "address": "023d87ddc1ceb2cff04315781a7a70cc8ee7c664a532e428de8da994e815608f1c:44", - "type": "vpn", - "geo": { - "lat": 37.76, - "lon": -122.49, - "country": "US", - "region": "CA" - }, - "version": "v1.0.1" - }, - { - "address": "024034dd09cbff03787db740124496ce8fdbe0cac2a51e20366cb59be10b665506:44", - "type": "vpn", - "geo": { - "lat": 33.14, - "lon": -96.75, - "country": "US", - "region": "TX" - }, - "version": "v1.0.1" - }, - { - "address": "025530eb5e5fd04c1c91d02b405787552d71bde13c9946d33a9a43acf67b7031fc:44", - "type": "vpn", - "geo": { - "lat": 37.76, - "lon": -122.49, - "country": "US", - "region": "CA" - }, - "version": "v1.0.1" - }, -... ``` -#### vpn start - -The vpn start subcommand requires a vpn server public key as argument. -A key may be selected from the output of `skywire-cli vpn list` +#### vpn url ``` -$ skywire-cli vpn start -h -start the vpn for +Show VPN UI URL -Usage: - skywire-cli vpn start [flags] +Usage: + skywire-cli vpn url [flags] + +Flags: + -c, --config string config path + -p, --pkg use package config path + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -#### vpn stop - -stop the vpn +#### vpn start ``` -$ skywire-cli vpn stop -h +start the vpn for -Usage: - skywire-cli vpn stop [flags] +Usage: + skywire-cli vpn start [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -#### vpn status - -vpn status +#### vpn stop ``` -Usage: - skywire-cli vpn status [flags] -``` +stop the vpn -##### Example +Usage: + skywire-cli vpn stop [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli vpn status -stopped -``` +#### vpn status -#### vpn ui +``` +vpn status -Open VPN UI in default browser +Usage: + skywire-cli vpn status [flags] + +Global Flags: + --rpc string RPC server address (default "localhost:3435") + ``` -$ skywire-cli vpn ui -``` - -##### Example +### reward -``` -$ skywire-cli vpn ui ``` -the VPN user interface is opened in the default browser + reward address setting -#### vpn url + Sets the skycoin reward address for the visor. + The config is written to the root of the default local directory -Show VPN UI URL + this config is served via dmsghttp along with transport logs + and the system hardware survey for automating reward distribution -``` -$ skywire-cli vpn url -``` +Usage: + skywire-cli reward
|| [flags] + +Flags: + --all show all flags + +``` -##### Example +### survey ``` -$ skywire-cli visor vpn url -http://127.0.0.1:8000/#/vpn/027087fe40d97f7f0be4a0dc768462ddbb371d4b9e7679d4f11f117d757b9856ed/ -``` +print the system survey +Usage: + skywire-cli survey + +Flags: + -s, --sha generate checksum of system survey + -### rtfind usage +``` ``` -skywire-cli rtfind +{ + "public_key": "000000000000000000000000000000000000000000000000000000000000000000", + "go_os": "linux", + "go_arch": "amd64", + "zcalusic_sysinfo": { + "sysinfo": { + "version": "0.9.5", + "timestamp": "2022-11-06T14:58:47.659746225-06:00" + }, + "node": { + "hostname": "mainframe", + "machineid": "42830379b8ff476696287310f5a62b25", + "timezone": "America/Chicago" + }, + "os": { + "name": "EndeavourOS", + "vendor": "endeavouros", + "architecture": "amd64" + }, + "kernel": { + "release": "6.0.2-arch1-1", + "version": "#1 SMP PREEMPT_DYNAMIC Sat, 15 Oct 2022 14:00:49 +0000", + "architecture": "x86_64" + }, + "product": { + "name": "System Product Name", + "vendor": "System manufacturer", + "version": "System Version", + "serial": "System Serial Number" + }, + "board": { + "name": "P8Z77-V LK", + "vendor": "ASUSTeK COMPUTER INC.", + "version": "Rev X.0x", + "serial": "130106735703073", + "assettag": "To be filled by O.E.M." + }, + "chassis": { + "type": 3, + "vendor": "Chassis Manufacture", + "version": "Chassis Version", + "serial": "Chassis Serial Number", + "assettag": "Asset-1234567890" + }, + "bios": { + "vendor": "American Megatrends Inc.", + "version": "1402", + "date": "03/21/2014" + }, + "cpu": { + "vendor": "GenuineIntel", + "model": "Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz", + "speed": 3511, + "cache": 8192, + "cpus": 1, + "cores": 4, + "threads": 8 + }, + "memory": { + "type": "DDR3", + "speed": 1333, + "size": 32768 + }, + "storage": [ + { + "name": "nvme0n1", + "model": "SPCC M.2 PCIe SSD", + "serial": "2A1407950FDE00144440", + "size": 512 + }, + { + "name": "sda", + "driver": "sd", + "vendor": "ATA", + "model": "JAJS600M128C", + "serial": "30040655310", + "size": 128 + }, + { + "name": "sdb", + "driver": "sd", + "vendor": "ATA", + "model": "WDC WD10EURX-61U", + "serial": "WD-WCC4J1FTPZKE", + "size": 1000 + }, + { + "name": "sdc", + "driver": "sd", + "vendor": "ATA", + "model": "SanDisk SDSSDA12", + "serial": "174470463509", + "size": 120 + }, + { + "name": "sdd", + "driver": "sd", + "vendor": "ATA", + "model": "WDC WD20EVDS-63T", + "serial": "WD-WCAVY3707401", + "size": 2000 + }, + { + "name": "sde", + "driver": "sd", + "vendor": "Generic", + "model": "STORAGE DEVICE", + "serial": "000000001532" + } + ], + "network": [ + { + "name": "enp3s0", + "driver": "r8169", + "macaddress": "60:a4:4c:5e:97:68", + "port": "tp/mii", + "speed": 1000 + } + ] + }, + "ip.skycoin.com": { + "ip_address": "70.121.6.231", + "latitude": 33.1371, + "longitude": -96.7488, + "postal_code": "75035", + "continent_code": "NA", + "country_code": "US", + "country_name": "United States", + "region_code": "TX", + "region_name": "Texas", + "province_code": "", + "province_name": "", + "city_name": "Frisco", + "timezone": "America/Chicago" + }, + "ip_addr": [ + { + "ifindex": 1, + "ifname": "lo", + "flags": [ + "LOOPBACK", + "UP", + "LOWER_UP" + ], + "mtu": 65536, + "qdisc": "noqueue", + "operstate": "UNKNOWN", + "group": "default", + "txqlen": 1000, + "link_type": "loopback", + "address": "00:00:00:00:00:00", + "broadcast": "00:00:00:00:00:00", + "addr_info": [ + { + "family": "inet", + "local": "127.0.0.1", + "prefixlen": 8, + "scope": "host", + "label": "lo", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + }, + { + "family": "inet6", + "local": "::1", + "prefixlen": 128, + "scope": "host", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + } + ] + }, + { + "ifindex": 2, + "ifname": "enp3s0", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "fq_codel", + "operstate": "UP", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "60:a4:4c:5e:97:68", + "broadcast": "ff:ff:ff:ff:ff:ff", + "addr_info": [ + { + "family": "inet", + "local": "192.168.2.130", + "prefixlen": 24, + "scope": "global", + "label": "enp3s0", + "valid_life_time": 63592, + "preferred_life_time": 63592 + }, + { + "family": "inet6", + "local": "fe80::a1b:9c1b:5864:f12b", + "prefixlen": 64, + "scope": "link", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + } + ] + } + ], + "ghw_blockinfo": { + "total_size_bytes": 3760783810560, + "disks": [ + { + "name": "nvme0n1", + "size_bytes": 512110190592, + "physical_block_size_bytes": 512, + "drive_type": "ssd", + "removable": false, + "storage_controller": "nvme", + "bus_path": "pci-0000:01:00.0-nvme-1", + "vendor": "unknown", + "model": "SPCC M.2 PCIe SSD", + "serial_number": "2A1407950FDE00144440", + "wwn": "nvme.1987-3241313430373935304644453030313434343430-53504343204d2e32205043496520535344-00000001", + "partitions": [ + { + "name": "nvme0n1p1", + "label": "unknown", + "mount_point": "/mnt/nvme0n1p1", + "size_bytes": 512104884224, + "type": "ext4", + "read_only": false, + "uuid": "06f46744-01" + } + ] + }, + { + "name": "sda", + "size_bytes": 128035676160, + "physical_block_size_bytes": 512, + "drive_type": "ssd", + "removable": false, + "storage_controller": "scsi", + "bus_path": "pci-0000:00:1f.2-ata-1.0", + "vendor": "ATA", + "model": "JAJS600M128C", + "serial_number": "30040655310", + "wwn": "0x5000000000002e39", + "partitions": [ + { + "name": "sda1", + "label": "unknown", + "mount_point": "/", + "size_bytes": 128033659904, + "type": "ext4", + "read_only": false, + "uuid": "72295fef-01" + } + ] + }, + { + "name": "sdb", + "size_bytes": 1000204886016, + "physical_block_size_bytes": 4096, + "drive_type": "hdd", + "removable": false, + "storage_controller": "scsi", + "bus_path": "pci-0000:00:1f.2-ata-2.0", + "vendor": "ATA", + "model": "WDC_WD10EURX-61UY4Y0", + "serial_number": "WD-WCC4J1FTPZKE", + "wwn": "0x50014ee262644326", + "partitions": [] + }, + { + "name": "sdc", + "size_bytes": 120034123776, + "physical_block_size_bytes": 512, + "drive_type": "ssd", + "removable": false, + "storage_controller": "scsi", + "bus_path": "pci-0000:00:1f.2-ata-3.0", + "vendor": "ATA", + "model": "SanDisk_SDSSDA120G", + "serial_number": "174470463509", + "wwn": "0x5001b444a9bb77cd", + "partitions": [ + { + "name": "sdc1", + "label": "unknown", + "mount_point": "/boot1", + "size_bytes": 536870912, + "type": "ext4", + "read_only": false, + "uuid": "570655b4-01" + }, + { + "name": "sdc2", + "label": "files", + "mount_point": "/home1", + "size_bytes": 119495720960, + "type": "ext4", + "read_only": false, + "uuid": "570655b4-02" + } + ] + }, + { + "name": "sdd", + "size_bytes": 2000398934016, + "physical_block_size_bytes": 512, + "drive_type": "hdd", + "removable": false, + "storage_controller": "scsi", + "bus_path": "pci-0000:00:1f.2-ata-5.0", + "vendor": "ATA", + "model": "WDC_WD20EVDS-63T3B0", + "serial_number": "WD-WCAVY3707401", + "wwn": "0x50014ee20473d45a", + "partitions": [] + }, + { + "name": "sde", + "size_bytes": 0, + "physical_block_size_bytes": 512, + "drive_type": "hdd", + "removable": true, + "storage_controller": "scsi", + "bus_path": "pci-0000:00:14.0-usb-0:4:1.0-scsi-0:0:0:0", + "vendor": "Generic", + "model": "STORAGE_DEVICE", + "serial_number": "000000001532", + "wwn": "unknown", + "partitions": [] + } + ] + }, + "ghw_productinfo": { + "family": "To be filled by O.E.M.", + "name": "System Product Name", + "vendor": "System manufacturer", + "serial_number": "System Serial Number", + "uuid": "306d1ca0-d7da-11dd-b04f-60a44c5e9768", + "sku": "SKU", + "version": "System Version" + }, + "ghw_memoryinfo": { + "total_physical_bytes": 34091302912, + "total_usable_bytes": 33333571584, + "supported_page_sizes": [ + 2097152 + ], + "modules": null + }, + "uuid": "ab703644-11cf-4785-84fe-46f31eacf8ff", + "skywire_version": "v1.2.0" +} ``` -##### Example +### rtfind ``` -$ skywire-cli rtfind -h - Query the Route Finder -Usage: - skywire-cli rtfind [flags] - -Flags: - -a, --addr string route finder service address (default "http://rf.skywire.skycoin.com") - -x, --max-hops uint16 maximum hops (default 1000) +Usage: + skywire-cli rtfind [flags] + +Flags: -n, --min-hops uint16 minimum hops (default 1) + -x, --max-hops uint16 maximum hops (default 1000) -t, --timeout duration request timeout (default 10s) + -a, --addr string route finder service address + (default "http://rf.skywire.skycoin.com") + + ``` -### mdisc usage +### mdisc ``` Query remote DMSG Discovery -Usage: - skywire-cli mdisc [command] +Usage: + skywire-cli mdisc + +Available Commands: + entry Fetch an entry + servers Fetch available servers + -Available Commands: - entry fetch an entry - servers fetch available servers - -Flags: - --addr string address of DMSG discovery server - (default "http://dmsgd.skywire.skycoin.com") ``` -#### servers +#### mdisc entry ``` -$ skywire-cli mdisc servers -``` +Fetch an entry -``` -Flags: +Usage: + skywire-cli mdisc entry [flags] + +Flags: --addr string address of DMSG discovery server - (default "http://dmsgd.skywire.skycoin.com") + (default "http://dmsgd.skywire.skycoin.com") + + ``` -##### Example +#### mdisc servers ``` -$ skywire-cli mdisc server -[2022-03-13T21:10:44-05:00] DEBUG disc.NewHTTP [mdisc:disc]: Created HTTP client. addr="http://dmsgd.skywire.skycoin.com" -version registered public-key address available-sessions -0.0.1 1647224020460616235 02347729662a901d03f1a1ab6c189a173349fa11e79fe82117cca0f8d0e4d64a31 192.53.115.181:8082 2582 -0.0.1 1647224015059832662 02e4660279c83bc6ca0122d3a78c0cb3f3564e03e04876ae7fa30b4e0a63217425 192.53.115.181:8081 1299 -0.0.1 1647224018690620887 02a2d4c346dabd165fd555dfdba4a7f4d18786fe7e055e562397cd5102bdd7f8dd dmsg.server02a2d4c3.skywire.skycoin.com:30081 1109 -0.0.1 1647224019967944735 0371ab4bcff7b121f4b91f6856d6740c6f9dc1fe716977850aeb5d84378b300a13 192.53.114.142:30086 582 -0.0.1 1647224016544544252 0228af3fd99c8d86a882495c8e0202bdd4da78c69e013065d8634286dd4a0ac098 45.118.133.242:30084 48 -0.0.1 1647224021047139719 03717576ada5b1744e395c66c2bb11cea73b0e23d0dcd54422139b1a7f12e962c4 dmsg.server03717576.skywire.skycoin.com:30082 31 -0.0.1 1647224018229901714 0281a102c82820e811368c8d028cf11b1a985043b726b1bcdb8fce89b27384b2cb 192.53.114.142:30085 19 -0.0.1 1647224017051283856 02a49bc0aa1b5b78f638e9189be4ed095bac5d6839c828465a8350f80ac07629c0 dmsg.server02a4.skywire.skycoin.com:30089 1 +Fetch available servers + +Usage: + skywire-cli mdisc servers [flags] + +Flags: + --addr string address of DMSG discovery server + (default "http://dmsgd.skywire.skycoin.com") + ``` -#### entry +### completion ``` -$ skywire-cli mdisc entry -``` +Generate completion script + +Usage: + skywire-cli completion [bash|zsh|fish|powershell] + -``` -Flags: - --addr string address of DMSG discovery server ``` -##### Example +### tree ``` -$ skywire-cli mdisc entry 034b68c4d8ec6d934d3ecb28595fea7e89a8de2048f0f857759c5018cb8e2f9525 -[2022-03-13T21:17:11-05:00] DEBUG disc.NewHTTP [mdisc:disc]: Created HTTP client. addr="http://dmsgd.skywire.skycoin.com" - version: 0.0.1 - sequence: 4 - registered at: 1647205336195743639 - static public key: 034b68c4d8ec6d934d3ecb28595fea7e89a8de2048f0f857759c5018cb8e2f9525 - signature: 7a7cee456a17b13207a8eba6dd60102505e0d5b3b98f047225da8bfc8e963a557c75fbbba5c7654835230c9372d6faae2f7570bb71b1af9d36cbdc4da195b74701 - entry is registered as client. Related info: - delegated servers: - 0371ab4bcff7b121f4b91f6856d6740c6f9dc1fe716977850aeb5d84378b300a13 -``` +subcommand tree +Usage: + skywire-cli tree + -### completion usage - -``` -#skywire-cli completion ``` +### doc + ``` -To load completions +generate markdown docs + + UNHIDEFLAGS=1 skywire-cli doc -Usage: - skywire-cli completion [bash|zsh|fish|powershell] +Usage: + skywire-cli doc + ``` diff --git a/cmd/skywire-cli/commands/config/gen.go b/cmd/skywire-cli/commands/config/gen.go index cfa8fd8246..03ad06c7e4 100644 --- a/cmd/skywire-cli/commands/config/gen.go +++ b/cmd/skywire-cli/commands/config/gen.go @@ -87,8 +87,11 @@ func init() { genConfigCmd.Flags().BoolVar(&isAll, "all", false, "show all flags") genConfigCmd.Flags().StringVar(&binPath, "binpath", "", "set bin_path") gHiddenFlags = append(gHiddenFlags, "binpath") - for _, j := range gHiddenFlags { - genConfigCmd.Flags().MarkHidden(j) //nolint + //show all flags on help + if os.Getenv("UNHIDEFLAGS") != "1" { + for _, j := range gHiddenFlags { + genConfigCmd.Flags().MarkHidden(j) //nolint + } } } diff --git a/cmd/skywire-cli/commands/config/root.go b/cmd/skywire-cli/commands/config/root.go index 4e78c31c9f..8dc2aa6978 100644 --- a/cmd/skywire-cli/commands/config/root.go +++ b/cmd/skywire-cli/commands/config/root.go @@ -82,4 +82,5 @@ var ( var RootCmd = &cobra.Command{ Use: "config", Short: "Generate or update a skywire config", + Long: "A primary function of skywire-cli is generating and updating the config file used by skywire-visor.", } diff --git a/cmd/skywire-cli/commands/root.go b/cmd/skywire-cli/commands/root.go index 56a685f02b..af31ad4701 100644 --- a/cmd/skywire-cli/commands/root.go +++ b/cmd/skywire-cli/commands/root.go @@ -2,9 +2,11 @@ package commands import ( + "fmt" "log" "strings" + "github.com/bitfield/script" cc "github.com/ivanpirog/coloredcobra" "github.com/pterm/pterm" "github.com/pterm/pterm/putils" @@ -84,6 +86,83 @@ var treeCmd = &cobra.Command{ }, } +var docCmd = &cobra.Command{ + Use: "doc", + Short: "gnerate markdown docs", + Long: `generate markdown docs + + UNHIDEFLAGS=1 skywire-cli doc`, + SilenceErrors: true, + SilenceUsage: true, + DisableSuggestions: true, + DisableFlagsInUseLine: true, + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("\n# %s\n", "skywire-cli documentation") + fmt.Printf("\n%s\n", "skywire command line interface") + + fmt.Printf("\n## %s\n", rootCmd.Use) + fmt.Printf("\n```\n") + rootCmd.Help() //nolint + fmt.Printf("\n```\n") + fmt.Printf("\n## %s\n", "global flags") + fmt.Printf("\n%s\n", "The skywire-cli interacts with the running visor via rpc calls. By default the rpc server is available on localhost:3435. The rpc address and port the visor is using may be changed in the config file, once generated.") + + fmt.Printf("\n%s\n", "It is not recommended to expose the rpc server on the local network. Exposing the rpc allows unsecured access to the machine over the local network") + fmt.Printf("\n```\n") + fmt.Printf("\n%s\n", "Global Flags:") + fmt.Printf("\n%s\n", " --rpc string RPC server address (default \"localhost:3435\")") + fmt.Printf("\n%s\n", " --json bool print output as json") + fmt.Printf("\n```\n") + + fmt.Printf("\n## %s\n", "subcommand tree") + fmt.Printf("\n%s\n", "A tree representation of the skywire-cli subcommands") + fmt.Printf("\n```\n") + _, _ = script.Exec(`go run cmd/skywire-cli/skywire-cli.go tree`).Stdout() //nolint + fmt.Printf("\n```\n") + + var use string + for _, j := range rootCmd.Commands() { + use = strings.Split(j.Use, " ")[0] + fmt.Printf("\n### %s\n", use) + fmt.Printf("\n```\n") + j.Help() //nolint + fmt.Printf("\n```\n") + if j.Name() == "survey" { + fmt.Printf("\n```\n") + _, _ = script.Exec(`sudo go run cmd/skywire-cli/skywire-cli.go survey`).Stdout() //nolint + fmt.Printf("\n```\n") + } + for _, k := range j.Commands() { + use = strings.Split(j.Use, " ")[0] + " " + strings.Split(k.Use, " ")[0] + fmt.Printf("\n#### %s\n", use) + fmt.Printf("\n```\n") + k.Help() //nolint + fmt.Printf("\n```\n") + if k.Name() == "gen" { + fmt.Printf("\n```\n") + fmt.Printf("$ skywire-cli config gen -bpirxn\n") + _, _ = script.Exec(`go run cmd/skywire-cli/skywire-cli.go config gen -n`).Stdout() //nolint + fmt.Printf("\n```\n") + } + for _, l := range k.Commands() { + use = strings.Split(j.Use, " ")[0] + " " + strings.Split(k.Use, " ")[0] + " " + strings.Split(l.Use, " ")[0] + fmt.Printf("\n##### %s\n", use) + fmt.Printf("\n```\n") + l.Help() //nolint + fmt.Printf("\n```\n") + for _, m := range l.Commands() { + use = strings.Split(j.Use, " ")[0] + " " + strings.Split(k.Use, " ")[0] + " " + strings.Split(l.Use, " ")[0] + " " + strings.Split(m.Use, " ")[0] + fmt.Printf("\n###### %s\n", use) + fmt.Printf("\n```\n") + m.Help() //nolint + fmt.Printf("\n```\n") + } + } + } + } + }, +} + func init() { rootCmd.AddCommand( cliconfig.RootCmd, @@ -96,6 +175,7 @@ func init() { climdisc.RootCmd, clicompletion.RootCmd, treeCmd, + docCmd, ) var jsonOutput bool rootCmd.PersistentFlags().BoolVar(&jsonOutput, internal.JSONString, false, "print output in json") From f31b959ed26d8e9daa2094bfe5ad22a429c76b41 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:23:48 -0600 Subject: [PATCH 4/6] fix subcommand tree in documentation ; update main README.md --- README.md | 43 +++++---- cmd/skywire-cli/README.md | 156 ++++++++++++++++--------------- cmd/skywire-cli/commands/root.go | 2 +- 3 files changed, 106 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 901073eaf8..c2d4de6255 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,30 @@ Skywire requires a Golang version of `1.16` or higher. # Skywire -- [Skywire](#skywire) -- [Commands and Subcommands](#commands-and-subcommands) - -- [App documentation](#app-documentation) -- [Installing Skywire](#) -- [Build Overview](#build-overview) -- [Dependencies](#dependencies) -- [Runtime Deps](#runtime-deps) -- [Build Deps](#build-deps) - - - [Prepare](#prepare) - - [Build](#build) - - [Configure Skywire](#configure-skywire) - - [Expose hypervisorUI](#expose-hypervisorui) - - [Add remote hypervisor](#add-remote-hypervisor) - - [Run `skywire-visor`](#run-skywire-visor) - - [Using the Skywire VPN](#using-the-skywire-vpn) - - [Creating a GitHub release](#creating-a-github-release) - - [How to create a GitHub release](#how-to-create-a-github-release) +* [Skywire](#skywire) + * [Commands and Subcommands](#commands-and-subcommands) + * [App documentation](#app-documentation) + * [Installing Skywire](#installing-skywire) + * [Build Overview](#build-overview) + * [Dependencies](#dependencies) + * [Runtime Deps](#runtime-deps) + * [Build Deps](#build-deps) + * [Prepare](#prepare) + * [Build](#build) + * [Install](#install) + * [Skywire\-autoconfig](#skywire-autoconfig) + * [Package tree](#package-tree) + * [Build with make](#build-with-make) + * [Build docker image](#build-docker-image) + * [Run from source](#run-from-source) + * [Files and folders created by skywire](#files-and-folders-created-by-skywire) + * [Configure Skywire](#configure-skywire) + * [Expose hypervisorUI](#expose-hypervisorui) + * [Add remote hypervisor](#add-remote-hypervisor) + * [Run skywire\-visor](#run-skywire-visor) + * [Using the Skywire VPN](#using-the-skywire-vpn) + * [Creating a GitHub release](#creating-a-github-release) + * [How to create a GitHub release](#how-to-create-a-github-release) ## Commands and Subcommands diff --git a/cmd/skywire-cli/README.md b/cmd/skywire-cli/README.md index ee53cd9ac5..d0efa44641 100644 --- a/cmd/skywire-cli/README.md +++ b/cmd/skywire-cli/README.md @@ -122,78 +122,78 @@ Global Flags: A tree representation of the skywire-cli subcommands ``` -└─┬skywire-cli - ├─┬config - │ ├──gen - │ └─┬update - │ ├──hv - │ ├──sc - │ ├──ss - │ ├──vpnc - │ └──vpns - ├─┬dmsgpty - │ ├──ui - │ ├──url - │ ├──list - │ └──start - ├─┬visor - │ ├─┬app - │ │ ├──ls - │ │ ├──start - │ │ ├──stop - │ │ ├──log - │ │ └─┬arg - │ │ ├──autostart - │ │ ├──killswitch - │ │ ├──secure - │ │ ├──passcode - │ │ └──netifc - │ ├──exec - │ ├─┬hv - │ │ ├──ui - │ │ ├──cpk - │ │ └──pk - │ ├──pk - │ ├──info - │ ├──ver - │ ├─┬route - │ │ ├──ls-rules - │ │ ├──rule - │ │ ├──rm-rule - │ │ └─┬add-rule - │ │ ├──app - │ │ ├──fwd - │ │ └──intfwd - │ ├──halt - │ ├──start - │ └─┬tp - │ ├──type - │ ├──ls - │ ├──id - │ ├──add - │ ├──rm - │ └──disc - ├─┬vpn - │ ├──list - │ ├──ui - │ ├──url - │ ├──start - │ ├──stop - │ └──status - ├──reward - ├──survey - ├──rtfind - ├─┬mdisc - │ ├──entry - │ └──servers - ├──completion - ├──tree - ├──doc - └── - +└─┬skywire-cli + ├─┬config + │ ├──gen + │ └─┬update + │ ├──hv + │ ├──sc + │ ├──ss + │ ├──vpnc + │ └──vpns + ├─┬dmsgpty + │ ├──ui + │ ├──url + │ ├──list + │ └──start + ├─┬visor + │ ├─┬app + │ │ ├──ls + │ │ ├──start + │ │ ├──stop + │ │ ├──log + │ │ └─┬arg + │ │ ├──autostart + │ │ ├──killswitch + │ │ ├──secure + │ │ ├──passcode + │ │ └──netifc + │ ├──exec + │ ├─┬hv + │ │ ├──ui + │ │ ├──cpk + │ │ └──pk + │ ├──pk + │ ├──info + │ ├──ver + │ ├─┬route + │ │ ├──ls-rules + │ │ ├──rule + │ │ ├──rm-rule + │ │ └─┬add-rule + │ │ ├──app + │ │ ├──fwd + │ │ └──intfwd + │ ├──halt + │ ├──start + │ └─┬tp + │ ├──type + │ ├──ls + │ ├──id + │ ├──add + │ ├──rm + │ └──disc + ├─┬vpn + │ ├──list + │ ├──ui + │ ├──url + │ ├──start + │ ├──stop + │ └──status + ├──reward + ├──survey + ├──rtfind + ├─┬mdisc + │ ├──entry + │ └──servers + ├──completion + ├──tree + ├──doc + └── ``` + ### config ``` @@ -255,8 +255,8 @@ Flags: $ skywire-cli config gen -bpirxn { "version": "v1.2.0", - "sk": "bed900b94a93f2f61230307008bca7e5df8c7532f14d4963dcdeb59e7ad368a4", - "pk": "02c8cfe6ab9b35beca2e41778302d7870454072246381fe7bcdf542d85b63c200a", + "sk": "5fc3b007a6324239066ba84cb05ce7a4af0ff39f0a14cf881c81e629a4138b88", + "pk": "03959334da0e30d2b1987318af159768fe7b32373c1c575212367bc23ce432f29c", "dmsg": { "discovery": "http://dmsgd.skywire.skycoin.com", "sessions_count": 1, @@ -1425,7 +1425,7 @@ Flags: "zcalusic_sysinfo": { "sysinfo": { "version": "0.9.5", - "timestamp": "2022-11-06T14:58:47.659746225-06:00" + "timestamp": "2022-11-06T15:20:05.362595094-06:00" }, "node": { "hostname": "mainframe", @@ -1614,8 +1614,8 @@ Flags: "prefixlen": 24, "scope": "global", "label": "enp3s0", - "valid_life_time": 63592, - "preferred_life_time": 63592 + "valid_life_time": 62314, + "preferred_life_time": 62314 }, { "family": "inet6", @@ -1773,7 +1773,7 @@ Flags: ], "modules": null }, - "uuid": "ab703644-11cf-4785-84fe-46f31eacf8ff", + "uuid": "978ddf7d-950a-4046-bf40-fcab8ad3d3b1", "skywire_version": "v1.2.0" } ``` @@ -1875,3 +1875,9 @@ Usage: ``` + +### + +``` + +``` diff --git a/cmd/skywire-cli/commands/root.go b/cmd/skywire-cli/commands/root.go index af31ad4701..73b5f5c582 100644 --- a/cmd/skywire-cli/commands/root.go +++ b/cmd/skywire-cli/commands/root.go @@ -117,7 +117,7 @@ var docCmd = &cobra.Command{ fmt.Printf("\n## %s\n", "subcommand tree") fmt.Printf("\n%s\n", "A tree representation of the skywire-cli subcommands") fmt.Printf("\n```\n") - _, _ = script.Exec(`go run cmd/skywire-cli/skywire-cli.go tree`).Stdout() //nolint + //_, _ = script.Exec(`go run cmd/skywire-cli/skywire-cli.go tree`).Stdout() //nolint fmt.Printf("\n```\n") var use string From f9267d1f69fbf3bad86ae3c67e2fcb6bcbd16ac9 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:32:50 -0600 Subject: [PATCH 5/6] additional minor readme updates --- README.md | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index c2d4de6255..1eddb1b48c 100644 --- a/README.md +++ b/README.md @@ -31,12 +31,14 @@ Skywire requires a Golang version of `1.16` or higher. ## Commands and Subcommands +Documentation on skywire-cli interface as well as available flags for skywire-visor + * [skywire-cli](cmd/skywire-cli/README.md) * [skywire-visor](cmd/skywire-visor/README.md) ## App documentation -apps are not executed by the user, but hosted by the visor process +Apps are not executed by the user, but hosted by the visor process * [skychat](cmd/apps/skychat/README.md) * [skysocks](cmd/apps/skysocks/README.md) @@ -48,6 +50,8 @@ further documentation can be found in the [skywire wiki](https://github.com/skyc ## Installing Skywire +Pre-compiled resouces + * [Windows installer](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-windows-amd64.msi) * [MacOS amd64 package](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-darwin-amd64.pkg) * [MacOS m1 / arm64](https://github.com/skycoin/skywire/releases/download/v1.2.1/skywire-installer-v1.2.1-darwin-arm64.pkg) @@ -61,25 +65,21 @@ A high-level overview of the process for building skywire from source and the pa this and other build variants can be built into a package with a single command, using `yay` on archlinux installing [skywire-bin](https://aur.archlinux.org/packages/skywire-bin) will install the release binaries provided by the release section of this repo - ``` yay -S skywire-bin ``` to build the debian packages using the release binaries - ``` yay --mflags " -p cc.deb.PKGBUILD " -S skywire-bin ``` installing [skywire](https://aur.archlinux.org/packages/skywire) will compile binaries using the source archive for the latest version release - ``` yay -S skywire ``` build from git sources to the develop branch - ``` yay --mflags " -p git.PKGBUILD " -S skywire ``` @@ -306,13 +306,13 @@ output tree ``` ├──skywire-cli └─┬skywire-visor -└─┬apps -├──skychat -├──skysocks -├──skysocks-client -├──vpn-client -├──vpn-server -└──skychat + └─┬apps + ├──skychat + ├──skysocks + ├──skysocks-client + ├──vpn-client + ├──vpn-server + └──skychat ``` install these executables to the `GOPATH` @@ -343,14 +343,14 @@ Running from source as outlined here does not write the config to disk or explic ``` ├──skywire-config.json └─┬local - ├──skychat - ├──skysocks - ├──apps-pid.txt - ├──skychat_log.db - ├──reward.txt - ├──node-info.json - └─┬transport_logs - └──2022-11-12.csv + ├──skychat + ├──skysocks + ├──apps-pid.txt + ├──skychat_log.db + ├──reward.txt + ├──node-info.json + └─┬transport_logs + └──2022-11-12.csv ``` Some of these files are served via the [dmsghttp logserver](https://github.com/skycoin/skywire/wiki/DMSGHTTP-logserver) @@ -448,6 +448,10 @@ docker run --rm -p 8000:8000 --name=skywire skycoin/skywire:test skywire-visor `skywire-visor` can be run on Windows. The setup requires additional setup steps that are specified in [the docs](docs/windows-setup.md). +### Using Skywire connection for apps + +to be documented + ### Using the Skywire VPN If you are interested in running the Skywire VPN as either a client or a server, please refer to the following guides: From 61bc079667b8c22b343659a1e228fd019c9ef123 Mon Sep 17 00:00:00 2001 From: Moses Narrow <36607567+0pcom@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:35:29 -0600 Subject: [PATCH 6/6] update readme for skywire-visor --- cmd/skywire-visor/README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/cmd/skywire-visor/README.md b/cmd/skywire-visor/README.md index 56c732c44c..1affa3e8ec 100644 --- a/cmd/skywire-visor/README.md +++ b/cmd/skywire-visor/README.md @@ -29,6 +29,7 @@ _Note: flags for autopeering are only available with the environmental variable ``` $ skywire-visor --help + ┌─┐┬┌─┬ ┬┬ ┬┬┬─┐┌─┐ └─┐├┴┐└┬┘││││├┬┘├┤ └─┘┴ ┴ ┴ └┴┘┴┴└─└─┘ @@ -39,13 +40,16 @@ Usage: Flags: -c, --config string config file to use (default): skywire-config.json -b, --browser open hypervisor ui in default web browser - -i, --hvui run as hypervisor + --systray run as systray + -i, --hvui run as hypervisor * --all show all flags -h, --help help for skywire-visor -v, --version version for skywire-visor + $ skywire-visor --all + ┌─┐┬┌─┬ ┬┬ ┬┬┬─┐┌─┐ └─┐├┴┐└┬┘││││├┬┘├┤ └─┘┴ ┴ ┴ └┴┘┴┴└─└─┘ @@ -56,19 +60,20 @@ Flags: Flags: -c, --config string config file to use (default): skywire-config.json -b, --browser open hypervisor ui in default web browser - -i, --hvui run as hypervisor - -j, --hv string add remote hypervisor PKs at runtime - -k, --xhv disable remote hypervisors set in config file - -l, --hvip string set hypervisor by ip (default "192.168.2.2:7998") - -m, --autopeer enable autopeering -n, --stdin read config from stdin - -q, --pprofmode string pprof mode: cpu, mem, mutex, block, trace, http + --systray run as systray + -i, --hvui run as hypervisor * + -x, --nohvui disable hypervisor * + -j, --hv string add remote hypervisor * + -k, --xhv disable remote hypervisors * + -s, --loglvl string [ debug | warn | error | fatal | panic | trace ] * + -q, --pprofmode string [ cpu | mem | mutex | block | trace | http ] -r, --pprofaddr string pprof http port (default "localhost:6060") -t, --tag string logging tag (default "skywire") -y, --syslog string syslog server address. E.g. localhost:514 -z, --completion string [ bash | zsh | fish | powershell ] - -h, --help help for skywire-visor -v, --version version for skywire-visor + * overrides config file ``` ### Skywire visor flags