Установка Swift на Debian 13, 12, 11: полное руководство

Swift — это компилируемый, типобезопасный язык программирования, разработанный компанией Apple. Он используется для разработки приложений под iOS, macOS, а также для серверных приложений и инструментов командной строки на Linux. Swift включает встроенную поддержку конкурентности, современный менеджер пакетов (Swift Package Manager) и отладчик LLDB.

В этом руководстве я покажу три способа установки Swift на Debian:

  1. APT — из официальных репозиториев Debian (только Debian 13)
  2. Swiftly — официальный менеджер инструментариев (только Debian 12)
  3. Tarball — ручная установка (Debian 12 и 13)
МетодВерсияОбновленияДля кого
APT (Debian 13)6.0.xЧерез apt upgradeDebian 13 —
системный,
стабильный
Swiftly (Debian 12)6.2.xswiftly updateDebian 12 —
последние версии,
переключение между
версиями
Tarball (Debian 12/13)6.2.xВручную
(скрипт-помощник)
Debian 12/13 —
автономная установка

⚠️ Важно: Debian 11 (Bullseye) не поддерживается ни одним из методов, так как требует glibc 2.34+ (в Debian 11 — 2.31).


Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • У вас Debian 13, Debian 12 или Debian 11 (только через обновление до 12/13)
  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Способ 1: Установка Swift через APT (только Debian 13)

Debian 13 включает пакет swiftlang, который содержит компилятор Swift, менеджер пакетов, отладчик LLDB и SourceKit-LSP.

Шаг 1: Обновите систему

sudo apt update && sudo apt upgrade -y

Шаг 2: Установите Swift

sudo apt install -y swiftlang

Шаг 3: Проверьте установку

swift --version

Ожидаемый вывод:

Swift version 6.0.3 (swift-6.0.3-RELEASE)
Target: x86_64-pc-linux-gnu

Способ 2: Установка Swift через Swiftly (Debian 12)

Swiftly — это официальный менеджер инструментариев Swift для Linux. Он скачивает сборки с swift.org, не добавляет APT-репозитории и позволяет переключаться между версиями.

⚠️ Swiftly поддерживает только Debian 12. На Debian 13 он пока не работает.

Шаг 1: Установите зависимости

sudo apt install -y binutils gcc git pkg-config uuid-dev libcurl4-openssl-dev libedit-dev libicu-dev libncurses-dev libpython3-dev libsqlite3-dev libstdc++-12-dev libxml2-dev

Шаг 2: Скачайте Swiftly

curl -O "https://download.swift.org/swiftly/linux/swiftly-1.1.1-$(uname -m).tar.gz"
tar -zxf "swiftly-1.1.1-$(uname -m).tar.gz"

Шаг 3: Установите Swiftly

./swiftly init

Что делает: Устанавливает swiftly в ~/.local/share/swiftly/bin/, настраивает окружение и скачивает последний стабильный Swift (~960 МБ).

Шаг 4: Загрузите окружение

. "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh"
hash -r

Шаг 5: Проверьте установку

swift --version

Ожидаемый вывод:

Swift version 6.2.4 (swift-6.2.4-RELEASE)
Target: x86_64-unknown-linux-gnu

Шаг 6: Очистите временные файлы

rm -f ~/swiftly ~/swiftly-1.1.1-*.tar.gz

Способ 3: Установка Swift через Tarball (Debian 12/13)

Этот способ подходит для Debian 12 и 13, когда нужна последняя версия без Swiftly.

Шаг 1: Установите зависимости

Для Debian 13 (замените libstdc++-12-dev на libstdc++-14-dev):

sudo apt install -y binutils git gnupg2 libc6-dev libcurl4-openssl-dev libedit2 libpython3-dev libsqlite3-0 libstdc++-14-dev libxml2-dev libz3-dev pkg-config tzdata unzip zlib1g-dev

Для Debian 12:

sudo apt install -y binutils git gnupg2 libc6-dev libcurl4-openssl-dev libedit2 libpython3-dev libsqlite3-0 libstdc++-12-dev libxml2-dev libz3-dev pkg-config tzdata unzip zlib1g-dev

Шаг 2: Определите последнюю версию Swift

SWIFT_VERSION=$(curl -fsSL https://api.github.com/repos/swiftlang/swift/releases/latest \
  | grep -oP '"tag_name": "swift-\K[0-9]+\.[0-9]+(\.[0-9]+)?(?=-RELEASE)')
echo "Latest Swift version: $SWIFT_VERSION"

Шаг 3: Скачайте архив и подпись

curl -fsSLO "https://download.swift.org/swift-${SWIFT_VERSION}-release/debian12/swift-${SWIFT_VERSION}-RELEASE/swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz"
curl -fsSLO "https://download.swift.org/swift-${SWIFT_VERSION}-release/debian12/swift-${SWIFT_VERSION}-RELEASE/swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz.sig"

Шаг 4: Импортируйте GPG-ключи Swift и проверьте подпись

curl -fsSL https://swift.org/keys/all-keys.asc | gpg --import -
gpg --verify "swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz.sig" "swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz"

Ожидаемый вывод: Good signature from "Swift Automatic Signing Key"

Шаг 5: Распакуйте архив

sudo mkdir -p "/opt/swift-${SWIFT_VERSION}"
sudo tar xzf "swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz" -C "/opt/swift-${SWIFT_VERSION}" --strip-components=1

Шаг 6: Создайте символическую ссылку

sudo ln -sfn "/opt/swift-${SWIFT_VERSION}" /opt/swift

Шаг 7: Добавьте Swift в PATH

Вариант A (один пользователь, Bash):

echo 'export PATH=/opt/swift/usr/bin:"$PATH"' >> ~/.profile
source ~/.profile

Вариант B (системно, все пользователи):

echo 'export PATH=/opt/swift/usr/bin:"$PATH"' | sudo tee /etc/profile.d/swift.sh
sudo chmod +x /etc/profile.d/swift.sh
source /etc/profile.d/swift.sh

Шаг 8: Проверьте установку

swift --version
which swift

Ожидаемый вывод: /opt/swift/usr/bin/swift и версия 6.2.x.

Шаг 9: Очистите временные файлы

rm -f "swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz" "swift-${SWIFT_VERSION}-RELEASE-debian12.tar.gz.sig"

Создание тестового проекта

Шаг 1: Создайте директорию и проект

mkdir ~/HelloSwift && cd ~/HelloSwift
swift package init --name HelloSwift --type executable

Шаг 2: Запустите проект

swift run HelloSwift

Ожидаемый вывод:

Building for debugging...
Build of product 'HelloSwift' complete!
Hello, world!

Управление версиями Swift

Swiftly (Debian 12)

Установить дополнительную версию:

swiftly install 5.10

Переключиться на другую версию:

swiftly use 5.10

Список установленных версий:

swiftly list

Tarball (Debian 12/13)

Добавить ещё одну версию:

# Скачайте и распакуйте другую версию, например, 5.10
sudo mkdir -p /opt/swift-5.10.1
sudo tar xzf swift-5.10.1-RELEASE-debian12.tar.gz -C /opt/swift-5.10.1 --strip-components=1

Переключиться между версиями:

sudo ln -sfn /opt/swift-5.10.1 /opt/swift
swift --version

Вернуться к последней версии:

sudo ln -sfn "/opt/swift-${SWIFT_VERSION}" /opt/swift

Обновление Swift

Обновление APT-версии (Debian 13)

sudo apt update && sudo apt install --only-upgrade swiftlang -y

Обновление Swiftly (Debian 12)

swiftly update          # обновить инструментарий
swiftly self-update     # обновить сам Swiftly

Обновление Tarball (Debian 12/13)

Создайте скрипт для автоматического обновления:

cat << 'SCRIPT' > ~/update-swift.sh
#!/bin/bash
set -e

INSTALL_BASE="/opt"
SWIFT_LINK="${INSTALL_BASE}/swift"
SWIFT_BIN="${SWIFT_LINK}/usr/bin/swift"

if [ "$(id -u)" -eq 0 ]; then
  echo "Run this script as a regular user, not root."
  exit 1
fi

for cmd in curl gpg tar; do
  if ! command -v "$cmd" >/dev/null 2>&1; then
    echo "Error: $cmd is required but not installed."
    exit 1
  fi
done

if [ ! -L "$SWIFT_LINK" ] || [ ! -x "$SWIFT_BIN" ]; then
  echo "Error: no tarball installation found at $SWIFT_LINK."
  exit 1
fi

echo "Checking GitHub for the latest stable Swift release..."
TAG=$(curl -fsSL "https://api.github.com/repos/swiftlang/swift/releases/latest" \
  | grep -oP '"tag_name": "\Kswift-[0-9]+\.[0-9]+(\.[0-9]+)?-RELEASE')

if [ -z "$TAG" ]; then
  echo "Error: could not detect the latest Swift version."
  exit 1
fi
LATEST_VERSION=$(echo "$TAG" | grep -oP '[0-9]+\.[0-9]+(\.[0-9]+)?')

CURRENT_VERSION=$("$SWIFT_BIN" --version 2>/dev/null \
  | grep -oP 'Swift version \K[0-9]+\.[0-9]+(\.[0-9]+)?' \
  | head -n 1)

echo "Installed: Swift $CURRENT_VERSION"
echo "Latest:    Swift $LATEST_VERSION"

if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
  echo "Already up to date."
  exit 0
fi

TARBALL="swift-${LATEST_VERSION}-RELEASE-debian12.tar.gz"
BASE_URL="https://download.swift.org/swift-${LATEST_VERSION}-release/debian12/swift-${LATEST_VERSION}-RELEASE"

echo ""
echo "Downloading Swift $LATEST_VERSION..."
curl -fSLO --progress-bar "${BASE_URL}/${TARBALL}"
curl -fsSLO "${BASE_URL}/${TARBALL}.sig"

echo "Importing Swift PGP keys and verifying signature..."
curl -fsSL https://swift.org/keys/all-keys.asc | gpg --import - 2>/dev/null
if ! gpg --verify "${TARBALL}.sig" "$TARBALL" 2>&1 | grep -q "Good signature"; then
  echo "Error: PGP signature verification failed."
  rm -f "$TARBALL" "${TARBALL}.sig"
  exit 1
fi
echo "Signature verified."

INSTALL_DIR="${INSTALL_BASE}/swift-${LATEST_VERSION}"
echo "Extracting to $INSTALL_DIR..."
sudo mkdir -p "$INSTALL_DIR"
sudo tar xzf "$TARBALL" -C "$INSTALL_DIR" --strip-components=1

echo "Updating symlink $SWIFT_LINK -> $INSTALL_DIR"
sudo ln -sfn "$INSTALL_DIR" "$SWIFT_LINK"

rm -f "$TARBALL" "${TARBALL}.sig"

VERIFY=$("$SWIFT_BIN" --version 2>/dev/null \
  | grep -oP 'Swift version \K[0-9]+\.[0-9]+(\.[0-9]+)?' \
  | head -n 1)
echo ""
echo "Swift updated from $CURRENT_VERSION to $VERIFY"
echo "The previous directory /opt/swift-${CURRENT_VERSION} is still on disk."
echo "Remove it with:  sudo rm -rf /opt/swift-${CURRENT_VERSION}"
SCRIPT

chmod +x ~/update-swift.sh

Запустите обновление:

~/update-swift.sh

Решение типичных проблем

8.1 Ошибка: Swiftly shows «Unsupported Linux platform» на Debian 13

Симптом: Swiftly не работает на Debian 13.

Причина: Swiftly 1.1.1 не поддерживает Debian 13.

Пошаговое решение:

Используйте APT (Debian 13) или Tarball.


8.2 Ошибка: Swift tarball не запускается на Debian 11

Симптом: swift: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.34' not found

Причина: Debian 11 использует glibc 2.31, а Swift требует 2.34+.

Пошаговое решение:

Обновитесь до Debian 12 или 13. Debian 11 не поддерживается.


8.3 Ошибка: GPG signature verification failed

Симптом: Проверка подписи не проходит.

Причина: Неправильно импортированы ключи или повреждён архив.

Пошаговое решение:

Шаг 1: Удалите старые ключи и импортируйте заново:

gpg --delete-key "Swift Automatic Signing Key"
curl -fsSL https://swift.org/keys/all-keys.asc | gpg --import -

Шаг 2: Проверьте подпись снова.

Шаг 3: Если не помогло — скачайте архив заново.


8.4 Ошибка: swift: command not found после установки

Симптом: Команда swift не найдена.

Причина: Путь к Swift не добавлен в PATH.

Пошаговое решение:

Для Tarball: выполните шаг 7 из раздела «Tarball» (добавление в PATH).

Для Swiftly: перезагрузите окружение:

. "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh"
hash -r

8.5 Ошибка: Не хватает места на диске при установке

Симптом: Ошибка No space left on device при скачивании или распаковке.

Причина: Swift занимает около 1 ГБ.

Пошаговое решение:

Проверьте свободное место:

df -h /opt ~/.local

Если места мало — очистите диск или установите Swift в другую директорию.


Чек-лист: что проверить после установки

  • [ ] Swift установлен: swift --version показывает версию
  • [ ] Компилятор работает: swiftc --version
  • [ ] Менеджер пакетов работает: swift package --version
  • [ ] Тестовый проект компилируется и запускается: swift run HelloSwift
  • [ ] Для Tarball: which swift/opt/swift/usr/bin/swift
  • [ ] Для Swiftly: swiftly list показывает установленные версии

Удаление Swift

Удаление APT-версии

sudo apt remove swiftlang
sudo apt autoremove

Удаление Swiftly

swiftly uninstall all
rm -rf ~/.local/share/swiftly
sed -i '/# Added by swiftly/d; /\.local\/share\/swiftly\/env\.sh/d' ~/.profile
source ~/.profile

Удаление Tarball

sudo rm -f /opt/swift
sudo rm -rf /opt/swift-*
rm -f ~/update-swift.sh
sed -i '/\/opt\/swift\/usr\/bin/d' ~/.profile ~/.bashrc 2>/dev/null
source ~/.profile

Часто задаваемые вопросы (FAQ)

Вопрос: Какой метод установки выбрать?
Ответ: Debian 13 → APT (просто). Debian 12 → Swiftly (удобно переключать версии) или Tarball (автономно).

Вопрос: Поддерживает ли Swiftly Debian 13?
Ответ: Пока нет. Используйте APT или Tarball.

Вопрос: Можно ли установить Swift на Debian 11?
Ответ: Нет. glibc слишком старый. Обновитесь до Debian 12/13.

Вопрос: Как переключиться между версиями Swift?
Ответ: Swiftly: swiftly use версия. Tarball: перенаправить символическую ссылку /opt/swift.

Вопрос: Нужно ли устанавливать Git?
Ответ: Swift Package Manager требует Git. Он уже установлен как зависимость в Swiftly и Tarball. Для APT установите отдельно: sudo apt install git.


Заключение

Теперь Swift установлен на вашем Debian. Вы можете разрабатывать серверные приложения, командные инструменты и использовать современные возможности языка.

Что дальше?