# tuna-cli

## Установка

**Windows**

### Установка с помощью winget

Откройте PowerShell и выполните команду:

```shell
winget install --id yuccastream.tuna ; powershell

```

### Установка MSI пакета

Скачайте последнюю версию tuna по [ссылке](https://releases.tuna.am/tuna/latest/tuna_x64.msi) и запустите установку дважды кликнув на файл.

[![Установщик для Windows x64 (требует прав администратора)](/docs/img/getting-started/badge-msi-installer.svg "Установщик для Windows x64 (требует прав администратора)")](https://releases.tuna.am/tuna/latest/tuna_x64.msi)

🖌 Проверка подлинности

Начиная с версии **0.27.4** все артефакты подписаны при помощи [cosign](https://docs.sigstore.dev/). Для проверки оригинальности архива [установите клиент cosign](https://docs.sigstore.dev/cosign/system_config/installation/), скачайте публичный ключ и выполните проверку.

```shell
winget install GnuPG.Gpg4win
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_x64.msi" -OutFile "tuna_x64.msi"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_x64.msi.sig" -OutFile "tuna_x64.msi.sig"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna.asc" -OutFile "tuna.asc"
gpg --import tuna.asc
gpg --verify tuna_x64.msi.sig tuna_x64.msi

```

### Установка вручную

Откройте PowerShell и выполните команды по очереди:

**AMD64**

```powershell
winget install GnuPG.Gpg4win
cd $env:TEMP
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_amd64.zip" -OutFile "$env:TEMP\tuna_windows_amd64.zip"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_amd64.zip.sig" -OutFile "$env:TEMP\tuna_windows_amd64.zip.sig"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna.asc" -OutFile "$env:TEMP\tuna.asc"
gpg --import tuna.asc
gpg --verify tuna_windows_amd64.zip.sig tuna_windows_amd64.zip
Expand-Archive -Path "$env:TEMP\tuna_windows_amd64.zip" -DestinationPath "$env:TEMP\tuna" -Force
Copy-Item -Path "$env:TEMP\tuna\tuna.exe" -Destination "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps" -Force

```

**ARM64**

```powershell
winget install GnuPG.Gpg4win
cd $env:TEMP
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_arm64.zip" -OutFile "$env:TEMP\tuna_windows_arm64.zip"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna/latest/tuna_windows_arm64.zip.sig" -OutFile "$env:TEMP\tuna_windows_arm64.zip.sig"
Invoke-WebRequest -Uri "https://releases.tuna.am/tuna.asc" -OutFile "$env:TEMP\tuna.asc"
gpg --import tuna.asc
gpg --verify tuna_windows_arm64.zip.sig tuna_windows_arm64.zip
Expand-Archive -Path "$env:TEMP\tuna_windows_arm64.zip" -DestinationPath "$env:TEMP\tuna" -Force
Copy-Item -Path "$env:TEMP\tuna\tuna.exe" -Destination "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps" -Force

```

### Проверка работы

Чтобы убедиться, что установка прошла корректно, выполните команду:

```bash
tuna help

```

**macOS**

### Установка с помощью brew

Для установки brew, следуйте [инструкции](https://brew.sh/), затем выполните команду в терминале:

```bash
brew install yuccastream/tap/tuna

```

Если ранее вы установили **tuna** *вручную* или с помощью *скрипта*, удалите предыдущую версию:

```bash
sudo rm -f /usr/local/bin/tuna

```

### Установка с помощью скрипта

Выполните команду в терминале:

**curl**

```shell
sh -c "$(curl -sSLf https://releases.tuna.am/tuna/get.sh)"

```

**wget**

```shell
sh -c "$(wget -qO- https://releases.tuna.am/tuna/get.sh)"

```

### Установка вручную

Откройте терминал, выполните следующие команды:

**ARM64**

```shell
cd $(mktemp -d)
curl -sfSL "https://releases.tuna.am/tuna/latest/tuna_darwin_arm64.tar.gz" | tar -f - -xz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**AMD64**

```shell
cd $(mktemp -d)
curl -sfSL "https://releases.tuna.am/tuna/latest/tuna_darwin_amd64.tar.gz" | tar -f - -xz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

***

к сведению

Бинарный файл [подписан и заверен](https://developer.apple.com/documentation/security/notarizing-macos-software-before-distribution) в Apple на имя: `Developer ID Application: Lev Aminov (FW65BD237L)` Проверить локально можно с помощью команды:

```sh
codesign -dv --verbose=4 $(which tuna)

```

### Проверка работы

Чтобы убедиться, что установка прошла корректно, выполните команду:

```bash
tuna help

```

**Linux**

Поддерживаемые архитектуры

| Архитектура         | Описание                                                                             |
| ------------------- | ------------------------------------------------------------------------------------ |
| **AMD64** (x86_64)  | Стандартные ПК и серверы                                                             |
| **ARM64** (aarch64) | Raspberry Pi 3/4/5, Apple Silicon (в Linux VM), серверы на ARM                       |
| **ARMv7**           | Raspberry Pi 2, большинство 32-битных ARM SBC                                        |
| **ARMv6**           | Raspberry Pi 1, Pi Zero / Zero W                                                     |
| **ARMv5**           | Старые встраиваемые устройства                                                       |
| **MIPS**            | Роутеры и встраиваемые устройства (big-endian)                                       |
| **MIPS LE**         | Роутеры и встраиваемые устройства (little-endian)                                    |
| **RISC-V 64**       | RISC-V платы (например, [NanoKVM](https://tuna.am/docs/tunnels/examples/nanokvm.md)) |

### Установка с помощью скрипта

Выполните команду в терминале:

**curl**

```shell
sh -c "$(curl -sSLf https://releases.tuna.am/tuna/get.sh)"

```

**wget**

```shell
sh -c "$(wget -qO- https://releases.tuna.am/tuna/get.sh)"

```

подсказка

Скрипт определит дистрибутив, подключит репозиторий и установит пакет, если это возможно. Иначе скачает бинарный файл и установит в исполняемый PATH.

### Установка вручную

**Debian/Ubuntu**

Debian и основанные на нём дистрибутивы (Ubuntu, Mint и другие), выполните в терминале следующие команды:

```shell
sudo apt update
sudo apt install -y ca-certificates curl gnupg
curl -fsSL https://code.tuna.am/api/packages/tuna/debian/repository.key | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/tuna-forgejo.gpg
echo 'deb [signed-by=/usr/share/keyrings/tuna-forgejo.gpg] https://code.tuna.am/api/packages/tuna/debian stable main' | sudo tee /etc/apt/sources.list.d/tuna-forgejo.list
sudo apt update
sudo apt install -y tuna-cli

```

**SUSE/OpenSUSE**

SUSE и OpenSUSE, выполните в терминале следующие команды:

```shell
sudo zypper addrepo --repo https://code.tuna.am/api/packages/tuna/rpm/stable.repo
sudo zypper install -y tuna-cli

```

**RHEL/Fedora**

RHEL и основанные на нём дистрибутивы (CentOS, Rocky Linux, AlmaLinux, а также Fedora), выполните в терминале следующие команды:

```shell
sudo curl -fsSL https://code.tuna.am/api/packages/tuna/rpm/stable.repo -o /etc/yum.repos.d/tuna-forgejo.repo
sudo dnf install -y tuna-cli

```

**ALT Linux**

[ALT Linux](https://www.basealt.ru/alt-workstation-k?utm_source=tuna.am&utm_medium=organic&utm_campaign=docs), выполните в терминале следующие команды:

```shell
sudo apt-get update
sudo apt-get install -y curl apt-repo
sudo rpm --import https://releases.tuna.am/tuna.asc
sudo apt-repo add rpm https://code.tuna.am/api/packages/tuna/alt/stable.repo $(arch) classic
sudo apt-repo add rpm https://code.tuna.am/api/packages/tuna/alt/stable.repo noarch classic
sudo apt-get update
sudo apt-get install -y tuna-cli

```

**Arch Linux**

Arch Linux, выполните в терминале следующие команды:

```shell
yay -Syu --noconfirm tuna.am-bin

```

**Linux**

Для установки в любых Linux-системах (NixOS, Alpine Linux и другие), выполните в терминале следующие команды:

**AMD64**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_amd64.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_amd64.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_amd64.tar.gz.sig tuna_linux_amd64.tar.gz
tar -xzf tuna_linux_amd64.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARM64**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_arm64.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_arm64.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_arm64.tar.gz.sig tuna_linux_arm64.tar.gz
tar -xzf tuna_linux_arm64.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARMv7**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv7.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv7.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_armv7.tar.gz.sig tuna_linux_armv7.tar.gz
tar -xzf tuna_linux_armv7.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARMv6**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv6.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv6.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_armv6.tar.gz.sig tuna_linux_armv6.tar.gz
tar -xzf tuna_linux_armv6.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARMv5**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv5.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_armv5.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_armv5.tar.gz.sig tuna_linux_armv5.tar.gz
tar -xzf tuna_linux_armv5.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**MIPS**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_mips.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_mips.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_mips.tar.gz.sig tuna_linux_mips.tar.gz
tar -xzf tuna_linux_mips.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**MIPS LE**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_mipsle.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_mipsle.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_mipsle.tar.gz.sig tuna_linux_mipsle.tar.gz
tar -xzf tuna_linux_mipsle.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**RISC-V 64**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_linux_riscv64.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_linux_riscv64.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_linux_riscv64.tar.gz.sig tuna_linux_riscv64.tar.gz
tar -xzf tuna_linux_riscv64.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

### Проверка работы

Чтобы убедиться, что установка прошла корректно, выполните команду:

```bash
tuna help

```

**FreeBSD**

### Установка с помощью скрипта

Выполните команду в терминале:

**curl**

```shell
sh -c "$(curl -sSLf https://releases.tuna.am/tuna/get.sh)"

```

**wget**

```shell
sh -c "$(wget -qO- https://releases.tuna.am/tuna/get.sh)"

```

### Установка вручную

**AMD64**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_amd64.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_amd64.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_freebsd_amd64.tar.gz.sig tuna_freebsd_amd64.tar.gz
tar -xzf tuna_freebsd_amd64.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARM64**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_arm64.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_arm64.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_freebsd_arm64.tar.gz.sig tuna_freebsd_arm64.tar.gz
tar -xzf tuna_freebsd_arm64.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

**ARMv7**

```shell
cd $(mktemp -d)
curl -sfSL -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_armv7.tar.gz" -O "https://releases.tuna.am/tuna/latest/tuna_freebsd_armv7.tar.gz.sig"
curl -sfSL -O https://releases.tuna.am/tuna.asc
gpg --import tuna.asc
gpg --verify tuna_freebsd_armv7.tar.gz.sig tuna_freebsd_armv7.tar.gz
tar -xzf tuna_freebsd_armv7.tar.gz
chmod +x tuna
sudo mv -f tuna /usr/local/bin/tuna

```

### Проверка работы

Чтобы убедиться, что установка прошла корректно, выполните команду:

```bash
tuna help

```

**Docker**

Чтобы получить последнюю версию Docker-образа, выполните команду:

```shell
docker pull yuccastream/tuna:latest

```

🖌 Проверка подлинности

Начиная с версии **0.27.4** все образы подписаны при помощи [cosign](https://docs.sigstore.dev/). Для проверки оригинальности образа [установите клиент cosign](https://docs.sigstore.dev/cosign/system_config/installation/), скачайте публичный ключ и выполните проверку.

```shell
curl -sSLfO https://releases.tuna.am/tuna-cosign.asc
cosign verify --key tuna-cosign.asc docker.io/yuccastream/tuna:0.27.4

```

### Пример Docker Compose сервиса

```yaml
---
services:
  whoami:
    image: traefik/whoami
    restart: always

  tuna:
    image: yuccastream/tuna:latest
    command: http whoami:80 --inspect=false
    restart: always
    depends_on:
      - whoami
    environment:
      - TUNA_TOKEN=<ваш_токен>

```

Пример с использованием в [Kubernetes](https://tuna.am/docs/tunnels/examples/kubernetes.md).

***

## Авторизация

Для работы клиента необходим Токен, зарегистрируйтесь [по ссылке](https://my.tuna.am/), и авторизуйте приложение. Токен будет сохранён в [конфиг файл](https://tuna.am/docs/guides/config-file.md), либо можно скопировать на [отдельной странице](https://my.tuna.am/token) и указать вручную.

```bash
tuna login

```

Указать токен вручную

```bash
tuna config save-token <ТОКЕН>

```

## Пользуйтесь

Все готово, чтобы приступить к работе. Запустите tuna с передачей порта и делитесь ссылкой с коллегами:

```bash
tuna http 8080

```

### Что дальше?

* Изучите примеры настроек [HTTP туннеля](https://tuna.am/docs/tunnels/http.md)
* Нужен доступ к сервису, не использующему HTTP? Узнайте подробнее в разделе по [TCP туннелю](https://tuna.am/docs/tunnels/tcp.md)
