Предыдущая часть находится тут.
В этой части будет рассмотрена установка различных инструментов разработчика. Я придерживаюсь феншуя Debian, согласно которому размещение приложений (за некоторым исключением) в домашнем каталоге пользователя - моветон. Если приложение распространяется в виде тарбола и не требует сборки из исходников, то ему самое место в каталоге /opt.
К сожалению абсолютно все инструменты разработки я не смогу привести по причине того, что я не все знаю. Если что отсутствует - пишите. Постараюсь добавить.
Установка git
textsudo aptitude install gitУстановка SDKMan
Скачиваем и устанавливаем:textcurl -fL "https://get.sdkman.io" | bashОбновляем переменные среды:
textsource "$HOME/.sdkman/bin/sdkman-init.sh"Проверяем, что sdkman установился (должна вывестись версия):
textsdk versionsdkman может обновлять сам себя. Команда для обновления:
textsdk selfupdateУстановка Java
Обычно разные версии Java нужны для разработки. И среда разработки настраивается на нужную версию Java. Для Java, как среды выполнения Debian, достаточно просто установить Java из репозитория:textsudo aptitude install default-jdkДля сред разработки же установим разные версии Java. Для начала создадим общий каталог для размещения Java:
textsudo mkdir /opt/javaJava 8
Последнюю версию смотреть тут.
Создаём каталог jdk8 в директории /opt и скачиваем туда 8 версию Явыtextsudo mkdir /opt/java/jdk8 && curl -fL https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u422-b05/OpenJDK8U-jdk_x64_linux_hotspot_8u422b05.tar.gz | sudo tar xzvf - -C /opt/java/jdk8 --strip-components 1Java 11
Последнюю версию смотреть тут.
Создаём каталог jdk11 в директории /opt и скачиваем туда 11 версию Явыtextsudo mkdir /opt/java/jdk11 && curl -fL https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.24%2B8/OpenJDK11U-jdk_x64_linux_hotspot_11.0.24_8.tar.gz | sudo tar xzvf - -C /opt/java/jdk11 --strip-components 1Java 17
Последнюю версию смотреть тут.
Создаём каталог jdk17 в директории /opt и скачиваем туда 17 версию Явыtextsudo mkdir /opt/java/jdk17 && curl -fL https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.17%2B10/OpenJDK17U-jdk_x64_linux_hotspot_17.0.17_10.tar.gz | sudo tar xzvf - -C /opt/java/jdk17 --strip-components 1Java 21
Последнюю версию смотреть тут.
Создаём каталог jdk21 в директории /opt и скачиваем туда 21 версию Явыtextsudo mkdir /opt/java/jdk21 && curl -fL https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.9%2B10/OpenJDK21U-jdk_x64_linux_hotspot_21.0.9_10.tar.gz | sudo tar xzvf - -C /opt/java/jdk21 --strip-components 1Java 25
Последнюю версию смотреть тут.
Создаём каталог jdk21 в директории /opt и скачиваем туда 21 версию Явыtextsudo mkdir /opt/java/jdk25 && curl -fL https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4.1%2B1/OpenJDK25U-jdk_x64_linux_hotspot_25.0.4.1_1.tar.gz | sudo tar xzvf - -C /opt/java/jdk25 --strip-components 1Установка Maven
По аналогии с Java создаём верхнеуровневый каталог для установки разных версий Мавен:textsudo mkdir /opt/mavenmaven 3.6.3
textcurl -fL https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | sudo tar xzvf - -C /opt/mavenДобавляем мавен в sdkman
textsdk install maven maven-3.6.3 /opt/maven/apache-maven-3.6.3Устанавливаем эту версию по-умолчанию:
textsdk default maven maven-3.6.3Обновляем переменные sdk:
textsource "$HOME/.sdkman/bin/sdkman-init.sh"Проверяем версию Maven:
textmvn --versionПроверяем какую переменную sdkman создал для Мавена:
textenv | grep MAVENПросмотр локально установленных версий мавена
textsdk list maven | grep +Установка Gradle
По аналогии с Java создаём верхнеуровневый каталог для установки разных версий gradle:textsudo mkdir /opt/gradleВерсии смотреть тут.
Gradle 8.10.2
Скачиваем и распаковываем в /opt/gradle:textcurl -fL -o /tmp/gradle.zip https://services.gradle.org/distributions/gradle-8.10.2-bin.zip && sudo unzip -d /opt/gradle /tmp/gradle.zipДобавляем gradle в sdkman:
textsdk install gradle gradle-8.10.2 /opt/gradle/gradle-8.10.2Устанавливаем эту версию по-умолчанию:
textsdk default gradle gradle-8.10.2Обновляем переменные sdk:
textsource "$HOME/.sdkman/bin/sdkman-init.sh"Просмотр текущей версии:
textsdk current gradleПросмотр переменных, которые создал sdkman для gradle:
textenv | grep GRADLEУстановка protobuf
Установка:textsudo aptitude install protobuf-compilerПроверка:
textprotoc --versionУстановка NodeJS
Устанавливаем менеджер nvm:textcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bashОбновляем переменные окружения:
textsource ~/.bashrcПросмотр доступных для установки версий:
textnvm ls-remoteУстановим последнюю 22 версию(Jod):
textnvm install lts/jodУстановка VS Code
Ключ:textcurl -fL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/keyrings/microsoft.gpgРепозиторий:
textecho -e "Types: deb\nURIs: https://packages.microsoft.com/repos/code\nSuites: stable\nComponents: main\nArchitectures: amd64\nSigned-By: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/vscode.sourcesОбновление кеша:
textsudo aptitude updateУстановка:
textsudo aptitude install codeПодключение языковых моделей LLM для автодополнения, эмбединга и чата/редактирования кода. Для этого в Расширениях (Extensions) VS Code нужно скачать Continue, которое предоставляет интерфейс для работы с платформами запуска языковых моделей. Далее по руководству представлена установка такой платформы Ollama и скачивание необходимых моделей. Для их подключения к VS Code нужно на левой панели перейти к вкладке скачанного расширения Continue. В правом верхнем углу открывшейся панели нажать на Open Settings (шестерёнка). В появившейся слева подпанели найти иконку листа с загнутым углом (Configs) и нажать. В правой подпанели появится Main Config с шестерёнкой настроек (Open configuration) на которую нужно нажать. В основном окне откроется файл настроек Continue config.yaml. Нужно его дополнить/отредактировать введя следующий код:
textname: Main Config version: 1.0.0 schema: v1 models: - name: Qwen 2.5 Coder 7B provider: ollama model: qwen2.5-coder:7b roles: - chat - edit - apply - name: Qwen2.5-Coder 1.5B provider: ollama model: qwen2.5-coder:1.5b roles: - autocomplete - name: Nomic Embed provider: ollama model: nomic-embed-text:latest roles: - embedУстановка Idea
На данный момент дистрибутив един и для Community версии и для Ultimate.
Скачиваем и устанавливаем:textcurl -L https://github.com/JetBrains/intellij-community/releases/download/idea%2F2026.1.2/idea-2026.1.2.tar.gz | sudo tar xzvf - -C /optСоздаём симлинк на скрипт запуска:
textsudo ln -s /opt/idea-IC-261.24374.151/bin/idea.sh /usr/local/bin/ideaУстановка DBeaver
textwget -O /tmp/dbeaver.deb https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb && sudo apt-get install /tmp/dbeaver.debУстановка Postman
Скачиваем и устанавливаем Postman:textsudo mkdir /opt/postman && wget -O- https://dl.pstmn.io/download/latest/linux64 | sudo tar xzvf - -C /opt/postman --strip-components 1Создаём симлинк для запуска:
textsudo ln -s /opt/postman/Postman /usr/local/bin/postmanУстановка Bruno. Аналог Postman
Скачиваем и устанавливаемtextwget -O /tmp/bruno.deb https://github.com/usebruno/bruno/releases/download/v3.2.0/bruno_3.2.0_amd64_linux.deb && sudo apt-get install /tmp/bruno.debУстановка Docker
Ключ:textsudo curl -fL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.ascРепозиторий:
textecho -e "Types: deb\nURIs: https://download.docker.com/linux/debian\nSuites: trixie\nComponents: stable\nSigned-By: /etc/apt/keyrings/docker.asc" | sudo tee /etc/apt/sources.list.d/docker.sourcesОбновление кеша репозитория:
textsudo aptitude updateУстановка:
textsudo aptitude install docker-ceДокер стартует автоматически. Проверяем:
textsudo systemctl status docker.service sudo systemctl status containerd.serviceТакое поведение нам не нужно. Нужно, чтобы он запускался при необходмости, а не постоянно висел и отжирал ресурсы. Отключаем автоматическую загрузку Докера при старте системы (Docker Desktop сам включит нужные сервисы при запуске):
textsudo systemctl disable --now docker.service sudo systemctl disable --now containerd.serviceЧтобы не вызывать каждый раз sudo(например для просмотра процессов docker ps) нужно добавить текущего пользователя в группу docker:
textsudo adduser $USER dockerСтавим Docker-Desktop:
textwget -O /tmp/docker-desktop.deb https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb && sudo apt-get install /tmp/docker-desktop.debПримечание. docker-compose теперь является плагином для docker. Его запуск осуществляется по аналогии с docker-compose ... только без дефиса - docker compose...
И не забудьте включить виртуализацию в BIOS!
Установка PostgreSQL
Запуск через Докер
Версия PostgreSQL на обычном образе:textdocker run --rm --name docker-postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 -v ~/docker-data/postgres13/pgData:/var/lib/postgresql/data postgres:13Версия PostgreSQL на легковесном alpine:
textdocker run --rm --name docker-postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 -v ~/docker-data/postgres13-alpine/pgData:/var/lib/postgresql/data postgres:13-alpineУстановка YandexDB
Примерно то же самое, что и для PostgreSQL
Создаём каталоги в домашней директории где YDB будет хранить свои данные:textmkdir ~/ydbd && cd ~/ydbd && mkdir ydb_data && mkdir ydb_certsЗапускаем образ через Докер из КОРНЯ домашнего каталога:
textdocker run -d --rm --name ydb-local -h localhost \ --platform linux/amd64 \ -p 2135:2135 -p 2136:2136 -p 8765:8765 -p 9092:9092 \ -v $(pwd)/ydbd/ydb_certs:/ydb_certs -v $(pwd)/ydbd/ydb_data:/ydb_data \ -e GRPC_TLS_PORT=2135 -e GRPC_PORT=2136 -e MON_PORT=8765 \ -e YDB_KAFKA_PROXY_PORT=9092 \ ydbplatform/local-ydb:25.2.1Установка Go
Установка указана для версии 1.25.4. Актуальную версию смотреть тут.
Установка:textsudo mkdir /opt/go && curl -fL https://go.dev/dl/go1.25.4.linux-amd64.tar.gz | sudo tar xzvf - -C /opt/go --strip-components 1Симлинк для запуска:
textsudo ln -s /opt/go/bin/go /usr/local/bin/goСоздание соединения типа Мост
Подключение через Мост хоть и не сильно, но увеличивает накладные расходы(процессор, пропускная способность). Поэтому если нет нужды в использовании эмулятора Qemu, создавать не нужно. А в Qemu он нужен исключительно если необходимо видеть виртуальную машину в локальной сети как отдельный компьютер.
Посмотрим какие типы соединений имеются:textnmcli conn showОбычно результатом будет что-то типа такого:
Wired connection 1 561f5eb9-c660-46ef-9a50-dba40ebc2646 ethernet enp1s0
где Wired connection 1 это имя соединения, ethernet тип соединения, а enp1s0 название устройства, которое и обеспечивает физическую передачу данных (на реальных устройствах обычно называется eno1)
Аналог просмотра ПКМ иконе сетевого соединения в системном трее -> Параметры соединения
Удалим это соединение:textnmcli con delete 'Wired connection 1'Удалить также можно вручную через ту же иконку соединения
Создаем подключение типа «мост» с именем bridge0 используя интерфейс, который назовём br0:textnmcli con add type bridge con-name bridge0 ifname br0Аналог этой команды, будет ПКМ на соединении и выбор Параметры соединений...
Далее, Добавить новое соединение, Виртуальное типа Мост.
Добавляем физический интерфейс (в данном случае enp1s0) в качестве
подчиненного устройства к нашему только что созданному мосту br0:textnmcli con add type bridge-slave ifname enp1s0 master br0В итоге появится новое Ethernet соединение типа bridge-slave-enp1s0 с которым будет работать мост bridge0
Аналог этой команды - в сетевых соединения провалиться в Мост bridge0, на вкладке Мост жмём кнопку Добавить и в раскрывающемся списке выбираем Ethernet и заполняем имя соединения и из выпадающего списка выбираем Устройство
Отключаем STP на мосту bridge0:textnmcli con modify bridge0 bridge.stp noНу, либо вручную снимаем галку Включить STP в соединении типа Мост на вкладке Мост
Посмотреть присвоенные IP адресаtextip addr showЕсли всё сделано правильно, то у моста br0 должны быть присвоены ipшники, а у устройства enp1s0 их быть не должно.
Установка Qemu
В Линуксе традиционно используется эмулятор Qemu вместо неимоверно отжирающего ресурсы VirtualBox, который ещё и требует выгрузки модулей KVM для своего запуска. Однако VirtualBox умеет сам создавать соединения типа Мост, в то время как Qemu требует создания соединения типа Мост на хосте вручную (предыдущий пункт по установке софта) если его нужно видеть в той же сети, что и хост машина.
Сам Qemu уже установлен, однако ГУИ к нему требует отдельно установки:textsudo aptitude install virt-managerДля того, чтобы система не требовала пароля при запуске Менеджера, нужно добавить своего пользователя в группу libvirt:
textsudo adduser $USER libvirtУстановка PhP
Ключ:textcurl -fL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/sury-php.gpgРепозиторий:
textecho "deb [signed-by=/etc/apt/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.listОбновление кеша:
textsudo aptitude updateУстановка нужной версии. Например 8.1 и 8.2:
textsudo aptitude install php8.1textsudo aptitude install php8.2Если нужно включить нужную версию для системы, то это делается командой:
textsudo update-alternatives --config phpгде можно выбрать версию по-умолчанию
Установка Unity Hub
Ключ:textcurl -fL https://hub.unity3d.com/linux/keys/public | sudo gpg --dearmor -o /etc/apt/keyrings/unityhub.gpgРепозиторий:
textecho -e "Types: deb\nURIs: https://hub.unity3d.com/linux/repos/deb\nSuites: stable\nComponents: main\nSigned-By: /etc/apt/keyrings/unityhub.gpg" | sudo tee /etc/apt/sources.list.d/unityhub.sourcesОбновление кеша:
textsudo aptitude updateУстановка:
textsudo aptitude install unityhubУстановка Sublime
Ключ:textcurl -fL https://download.sublimetext.com/sublimehq-pub.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/sublimehq-pub.gpgРепозиторий:
textecho -e "Types: deb\nURIs: https://download.sublimetext.com/\nSuites: apt/stable/\nComponents: \nArchitectures: amd64\nSigned-By: /etc/apt/keyrings/sublimehq-pub.gpg" | sudo tee /etc/apt/sources.list.d/sublime.sourcesОбновление кеша:
textsudo aptitude updateУстановка:
textsudo aptitude install sublime-text