balenaEtcher — это программа для создания загрузочных USB-накопителей и SD-карт из образов ISO, IMG и других форматов. Она особенно полезна, когда нужно установить новую операционную систему (например, другой дистрибутив Linux), создать загрузочную флешку для восстановления системы или подготовить SD-карту для Raspberry Pi. В отличие от команды dd, balenaEtcher имеет понятный графический интерфейс и автоматически проверяет, что образ записан правильно.
💡 balenaEtcher не входит в стандартные репозитории Debian, но разработчики предоставляют официальные сборки на GitHub. В этом руководстве мы разберём два способа установки: ZIP-метод (работает на всех версиях Debian, включая 11) и DEB-метод (только для Debian 12 и 13). Вы также узнаете, как создать скрипты для автоматического обновления.
⚠️ Важно об архитектуре: balenaEtcher официально поддерживает только архитектуру amd64 (x64). Версии для arm64 на GitHub нет. Если у вас Raspberry Pi или другая ARM-платформа, используйте альтернативные инструменты (например, dd, usbboot или Raspberry Pi Imager).
В этой статье вы узнаете:
- Как скачать последнюю версию balenaEtcher с GitHub
- Как установить через ZIP-архив (рекомендуется для Debian 11)
- Как установить через DEB-пакет (Debian 12 и 13)
- Как создать скрипты для автоматического обновления
- Как решить типичные проблемы (ошибки прав, команда не найдена)
Оглавление
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена 64-битная (amd64/x86_64) версия Debian 11, 12 или 13
- Подключение к интернету стабильно
- У вас есть USB-флешка или SD-карта (для записи образов)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo -l
Что делает: sudo -l — показывает список команд, которые ваш пользователь может выполнять с правами суперпользователя.
✅ Ожидаемый вывод: список разрешённых команд. Если видите (ALL : ALL) ALL или другие записи, означающие полный доступ — у вас есть права sudo.
❌ Если видите ошибку user is not in the sudoers file или may not run sudo — сначала пройдите наше руководство по настройке sudo. Без этого дальнейшие шаги не сработают.
1.1 Обновление системы
Перед установкой всегда обновляйте список пакетов:
sudo apt update
Что делает: Обновляет список доступных пакетов из всех подключённых репозиториев.
Теперь обновите установленные пакеты:
sudo apt upgrade
Что делает: Обновляет все установленные пакеты до актуальных версий.
💡 Если вы уверены в своих действиях и хотите автоматически подтверждать все запросы, можно добавить флаг -y: sudo apt upgrade -y. В обучающей инструкции мы рекомендуем сначала посмотреть, что будет обновлено, и подтвердить вручную.
1.2 Установка необходимых утилит
sudo apt install ca-certificates curl jq unzip
Что делает: Устанавливает утилиты для скачивания файлов и работы с архивами.
💡 Если вы уверены в своих действиях и хотите автоматически подтверждать все запросы, можно добавить флаг -y: sudo apt install ca-certificates curl jq unzip -y.
2. 📊 Сравнение способов установки
| Метод | Поддерживаемые версии | Обновления | Для кого |
|---|---|---|---|
| ZIP-архив (рекомендуемый) | Debian 11, 12, 13 | Вручную (скрипт-помощник) | Все пользователи, включая Debian 11 |
| DEB-пакет | Debian 12, 13 | Вручную (скрипт-помощник) | Пользователи Debian 12/13, предпочитающие пакетную установку |
⚠️ Важно: DEB-пакет не работает на Debian 11, так как требует более новую версию dpkg. Пользователи Debian 11 должны использовать ZIP-метод.
3. 📦 Способ 1: Установка из официального ZIP-архива (Debian 11, 12, 13)
Этот метод работает на всех поддерживаемых версиях Debian, включая 11.
3.1 Проверка архитектуры
ARCH="$(dpkg --print-architecture)"
printf 'Обнаруженная архитектура: %s\n' "$ARCH"
if [ "$ARCH" != "amd64" ]; then
echo "Ошибка: balenaEtcher поддерживает только архитектуру amd64. У вашей системы — '$ARCH'." >&2
exit 1
fi
echo "Архитектура поддерживается для официальной загрузки Linux x64."
Что делает: Проверяет, что система 64-битная (требование для balenaEtcher).
3.2 Определение последней версии
RELEASE_JSON="$(curl -fsSL https://api.github.com/repos/balena-io/etcher/releases/latest)"
RELEASE_TAG="$(printf '%s' "$RELEASE_JSON" | jq -r '.tag_name // empty')"
PACKAGE_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name | test("^balenaEtcher-linux-x64-[0-9.]+\.zip$")) | .browser_download_url' | head -n 1)"
CHECKSUM_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name == "SHA256SUMS.Linux.x64.txt") | .browser_download_url')"
if [ -z "$RELEASE_TAG" ] || [ -z "$PACKAGE_URL" ] || [ "$PACKAGE_URL" = "null" ] || [ -z "$CHECKSUM_URL" ] || [ "$CHECKSUM_URL" = "null" ]; then
echo "Не удалось найти файлы для текущей версии balenaEtcher (Linux x64)." >&2
PACKAGE_FILE=""
else
PACKAGE_FILE="${PACKAGE_URL##*/}"
printf 'Версия релиза: %s\nФайл пакета: %s\n' "$RELEASE_TAG" "$PACKAGE_FILE"
fi
Что делает: Получает информацию о последнем релизе с GitHub API.
3.3 Скачивание и проверка архива
if [ -z "${PACKAGE_FILE:-}" ]; then
echo "Ошибка: сначала определите файлы релиза (раздел 3.2)." >&2
exit 1
else
curl -fL --progress-bar -o "$PACKAGE_FILE" "$PACKAGE_URL"
curl -fsSLo SHA256SUMS.Linux.x64.txt "$CHECKSUM_URL"
# Более надёжная проверка контрольной суммы
if ! grep -q "^[[:space:]]*[0-9a-fA-F]\{64\}\s\+${PACKAGE_FILE//./\\.}$" SHA256SUMS.Linux.x64.txt; then
echo "Ошибка: файл $PACKAGE_FILE не найден в списке контрольных сумм." >&2
exit 1
fi
sha256sum -c SHA256SUMS.Linux.x64.txt --ignore-missing
fi
✅ Ожидаемый вывод: balenaEtcher-linux-x64-2.1.6.zip: OK
3.4 Установка в систему
if dpkg -l balena-etcher 2>/dev/null | grep -q '^ii'; then
echo "Ошибка: сначала удалите DEB‑пакет (sudo apt remove balena-etcher)." >&2
exit 1
elif [ -e /usr/local/bin/balena-etcher ] && ! [ -L /usr/local/bin/balena-etcher ]; then
echo "Ошибка: не заменяю обычный файл /usr/local/bin/balena-etcher — ожидается символическая ссылка." >&2
exit 1
elif [ ! -f "${PACKAGE_FILE:-}" ]; then
echo "Ошибка: скачайте и проверьте ZIP‑архив перед установкой." >&2
exit 1
else
sudo rm -rf /opt/balenaEtcher
sudo unzip -q "$PACKAGE_FILE" -d /opt
sudo mv /opt/balenaEtcher-linux-x64 /opt/balenaEtcher
sudo chmod -R a+rX /opt/balenaEtcher
sudo ln -sf /opt/balenaEtcher/balena-etcher /usr/local/bin/balena-etcher
# Скачивание иконки с защитой от сбоя (не критично для работы, но лучше не ломать скрипт)
if ! sudo curl -fsSLo /opt/balenaEtcher/icon.png "https://raw.githubusercontent.com/balena-io/etcher/${RELEASE_TAG}/assets/icon.png"; then
echo "Предупреждение: не удалось скачать иконку, программа будет работать без неё." >&2
fi
printf '%s\n' "${RELEASE_TAG#v}" | sudo tee /opt/balenaEtcher/.unishell-version > /dev/null
printf '%s\n' \
'[Desktop Entry]' \
'Name=balenaEtcher' \
'Comment=Запись образов ОС на SD‑карты и USB‑накопители' \
'Exec=/usr/local/bin/balena-etcher %U' \
'Terminal=false' \
'Type=Application' \
'Icon=/opt/balenaEtcher/icon.png' \
'Categories=Utility;' | sudo tee /usr/share/applications/balena-etcher.desktop > /dev/null
fi
Что делает: Распаковывает архив в /opt/balenaEtcher, создаёт символическую ссылку и ярлык в меню.
3.5 Проверка установки
LAUNCHER_PATH="$(command -v balena-etcher 2>/dev/null)"
if [ -z "$LAUNCHER_PATH" ]; then
echo "Ошибка: команда balena-etcher не найдена в PATH." >&2
exit 1
else
printf '%s\n' "$LAUNCHER_PATH"
fi
if ! test -x /opt/balenaEtcher/balena-etcher; then
echo "Ошибка: исполняемый файл /opt/balenaEtcher/balena-etcher отсутствует или не является исполняемым." >&2
exit 1
fi
echo "balenaEtcher executable is installed"
✅ Ожидаемый вывод:
/usr/local/bin/balena-etcher
balenaEtcher executable is installed
3.6 Создание скрипта для обновления ZIP-версии
⚠️ Важное предупреждение: Скрипты обновления не являются официальными от balena.io и предоставляются «как есть». Для максимальной безопасности вы можете выполнять обновления вручную, используя команды из раздела 3.1–3.4. Скрипты создаются для удобства автоматизации и работают на ваш страх и риск.
if [ -e /usr/local/bin/update-balenaetcher ] && ! grep -q 'Managed balenaEtcher ZIP update helper' /usr/local/bin/update-balenaetcher 2>/dev/null; then
echo "Ошибка: не заменяю существующий /usr/local/bin/update-balenaetcher без маркера Managed helper." >&2
exit 1
else
sudo tee /usr/local/bin/update-balenaetcher > /dev/null << 'SCRIPT_EOF'
#!/bin/bash
# Managed balenaEtcher ZIP update helper
set -euo pipefail
trap 'echo "Произошла ошибка на строке $LINENO." >&2' ERR
APP_DIR="/opt/balenaEtcher"
VERSION_FILE="$APP_DIR/.unishell-version"
LAUNCHER="/usr/local/bin/balena-etcher"
DESKTOP_FILE="/usr/share/applications/balena-etcher.desktop"
API_URL="https://api.github.com/repos/balena-io/etcher/releases/latest"
if [ "$(id -u)" -eq 0 ]; then
echo "Запускайте update-balenaetcher от имени обычного пользователя; sudo будет запрошен при необходимости." >&2
exit 1
fi
for cmd in curl grep jq unzip sha256sum dpkg mktemp sudo; do
if ! command -v "$cmd" > /dev/null 2>&1; then
echo "Не найдена требуемая команда: $cmd" >&2
echo "Установите зависимости: sudo apt install ca-certificates curl jq unzip -y" >&2
exit 1
fi
done
ARCH="$(dpkg --print-architecture)"
if [ "$ARCH" != "amd64" ]; then
echo "balenaEtcher официально доступен только для архитектуры amd64. Ваша система: $ARCH" >&2
exit 1
fi
if dpkg -l balena-etcher 2>/dev/null | grep -q '^ii'; then
echo "Сначала удалите DEB‑пакет: sudo apt remove balena-etcher" >&2
exit 1
fi
if [ -e "$LAUNCHER" ] && [ ! -L "$LAUNCHER" ]; then
echo "Не заменяю обычный файл $LAUNCHER — ожидается символическая ссылка." >&2
exit 1
fi
CURRENT_VERSION="missing"
if [ -r "$VERSION_FILE" ]; then
CURRENT_VERSION="$(cat "$VERSION_FILE" 2>/dev/null || true)"
CURRENT_VERSION="${CURRENT_VERSION:-unknown}"
elif [ -x "$APP_DIR/balena-etcher" ]; then
CURRENT_VERSION="installed"
fi
echo "Проверка последней версии balenaEtcher..."
RELEASE_JSON="$(curl -fsSL "$API_URL")"
LATEST_TAG="$(printf '%s' "$RELEASE_JSON" | jq -r '.tag_name // empty')"
PACKAGE_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name | test("^balenaEtcher-linux-x64-[0-9.]+\.zip$")) | .browser_download_url' | head -n 1)"
CHECKSUM_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name == "SHA256SUMS.Linux.x64.txt") | .browser_download_url')"
if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ] || [ -z "$PACKAGE_URL" ] || [ "$PACKAGE_URL" = "null" ] || [ -z "$CHECKSUM_URL" ] || [ "$CHECKSUM_URL" = "null" ]; then
echo "Не удалось получить данные о последней версии релиза (Linux x64)." >&2
exit 1
fi
LATEST_VERSION="${LATEST_TAG#v}"
PACKAGE_FILE="${PACKAGE_URL##*/}"
echo "Текущая версия: $CURRENT_VERSION"
echo "Доступна версия: $LATEST_VERSION"
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "balenaEtcher уже обновлён до последней версии."
exit 0
fi
echo "Подготовка прав sudo для установки..."
sudo true
WORK_DIR="$(mktemp -d)"
trap 'rm -rf "$WORK_DIR"' EXIT
echo "Скачивание $PACKAGE_FILE..."
curl -fL --progress-bar -o "$WORK_DIR/$PACKAGE_FILE" "$PACKAGE_URL"
curl -fsSLo "$WORK_DIR/SHA256SUMS.Linux.x64.txt" "$CHECKSUM_URL"
echo "Проверка контрольной суммы..."
cd "$WORK_DIR"
# Надёжная проверка: ищем строку формата «хеш имя_файла»
if ! grep -q "^[[:space:]]*[0-9a-fA-F]\{64\}\s\+${PACKAGE_FILE//./\\.}$" SHA256SUMS.Linux.x64.txt; then
echo "Ошибка: запись для $PACKAGE_FILE не найдена в файле контрольных сумм." >&2
exit 1
fi
sha256sum -c SHA256SUMS.Linux.x64.txt --ignore-missing
echo "Распаковка пакета..."
mkdir -p "$WORK_DIR/extract"
unzip -q "$WORK_DIR/$PACKAGE_FILE" -d "$WORK_DIR/extract"
EXTRACTED_DIR="$WORK_DIR/extract/balenaEtcher-linux-x64"
if [ ! -x "$EXTRACTED_DIR/balena-etcher" ]; then
echo "Ошибка: исполняемый файл не найден в распакованной папке." >&2
exit 1
fi
echo "Установка balenaEtcher версии $LATEST_VERSION..."
sudo rm -rf "$APP_DIR"
sudo mv "$EXTRACTED_DIR" "$APP_DIR"
sudo chmod -R a+rX "$APP_DIR"
sudo ln -sf "$APP_DIR/balena-etcher" "$LAUNCHER"
# Скачивание иконки: если не получится — предупреждение, но не ошибка
if ! sudo curl -fsSLo "$APP_DIR/icon.png" "https://raw.githubusercontent.com/balena-io/etcher/${LATEST_TAG}/assets/icon.png"; then
echo "Предупреждение: не удалось скачать иконку. Программа будет работать без неё." >&2
fi
printf '%s\n' "$LATEST_VERSION" | sudo tee "$VERSION_FILE" > /dev/null
sudo tee "$DESKTOP_FILE" > /dev/null << DESKTOP_EOF
[Desktop Entry]
Name=balenaEtcher
Comment=Запись образов ОС на SD‑карты и USB‑накопители
Exec=/usr/local/bin/balena-etcher %U
Terminal=false
Type=Application
Icon=/opt/balenaEtcher/icon.png
Categories=Utility;
DESKTOP_EOF
# Обновление базы .desktop — только если команда есть
if command -v update-desktop-database > /dev/null 2>&1; then
sudo update-desktop-database /usr/share/applications > /dev/null 2>&1 || true
fi
if [ ! -x "$APP_DIR/balena-etcher" ]; then
echo "Ошибка установки: $APP_DIR/balena-etcher отсутствует или не является исполняемым." >&2
exit 1
fi
echo "Обновление завершено: balenaEtcher $LATEST_VERSION"
echo "Ярлык: $LAUNCHER"
SCRIPT_EOF
fi
if grep -q 'Managed balenaEtcher ZIP update helper' /usr/local/bin/update-balenaetcher 2>/dev/null; then
sudo chmod +x /usr/local/bin/update-balenaetcher
echo "Скрипт update-balenaetcher успешно создан."
fi
Что делает: Создаёт скрипт, который автоматически проверяет, скачивает и устанавливает новые версии balenaEtcher.
4. 📦 Способ 2: Установка из DEB-пакета (Debian 12 и 13)
⚠️ Этот метод не работает на Debian 11 из-за устаревшей версии dpkg. Пользователи Debian 11 должны использовать ZIP-метод (раздел 3).
4.1 Проверка версии Debian
if [ ! -f /etc/os-release ]; then
echo "Ошибка: файл /etc/os-release не найден." >&2
exit 1
fi
# Безопасное чтение переменных из os-release (без eval)
while IFS='=' read -r key value; do
case "$key" in
VERSION_ID) VERSION_ID="${value//\"}" ;;
VERSION_CODENAME) VERSION_CODENAME="${value//\"}" ;;
esac
done < /etc/os-release
# Проверка, что переменные вообще определились
if [ -z "$VERSION_ID" ] || [ -z "$VERSION_CODENAME" ]; then
echo "Ошибка: не удалось определить версию Debian из /etc/os-release." >&2
exit 1
fi
printf 'Версия Debian: %s (%s)\n' "$VERSION_ID" "$VERSION_CODENAME"
case "$VERSION_ID" in
13|12)
echo "Метод установки через DEB‑пакет поддерживается для этой версии."
;;
11)
echo "Для Debian 11 используйте ZIP‑метод: текущий DEB‑пакет использует control.tar.zst."
;;
*)
echo "Используйте ZIP‑метод, если вы не проверили совместимость этой версии Debian вручную."
;;
esac
4.2 Скачивание DEB-пакета
RELEASE_JSON="$(curl -fsSL https://api.github.com/repos/balena-io/etcher/releases/latest)"
# Исправленное регулярное выражение: \. вместо [.]
PACKAGE_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name | test("^balena-etcher_[0-9.]+_amd64\.deb$")) | .browser_download_url' | head -n 1)"
CHECKSUM_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name == "SHA256SUMS.Linux.x64.txt") | .browser_download_url')"
if [ -z "$PACKAGE_URL" ] || [ "$PACKAGE_URL" = "null" ] || [ -z "$CHECKSUM_URL" ] || [ "$CHECKSUM_URL" = "null" ]; then
echo "Ошибка: не удалось найти файлы релиза для DEB‑пакета (amd64)." >&2
PACKAGE_FILE=""
else
PACKAGE_FILE="${PACKAGE_URL##*/}"
curl -fL --progress-bar -o "$PACKAGE_FILE" "$PACKAGE_URL"
curl -fsSLo SHA256SUMS.Linux.x64.txt "$CHECKSUM_URL"
# Надёжная проверка контрольной суммы
if ! grep -q "^[[:space:]]*[0-9a-fA-F]\{64\}\s\+${PACKAGE_FILE//./\\.}$" SHA256SUMS.Linux.x64.txt; then
echo "Ошибка: запись для $PACKAGE_FILE не найдена в файле контрольных сумм." >&2
exit 1
fi
sha256sum -c SHA256SUMS.Linux.x64.txt --ignore-missing
fi
✅ Ожидаемый вывод: balena-etcher_2.1.6_amd64.deb: OK
4.3 Установка пакета
if [ -d /opt/balenaEtcher ] || [ -e /usr/local/bin/balena-etcher ]; then
echo "Ошибка: сначала удалите ZIP‑установку (папка /opt/balenaEtcher или симлинк /usr/local/bin/balena-etcher)." >&2
exit 1
elif [ ! -f "${PACKAGE_FILE:-}" ]; then
echo "Ошибка: скачайте и проверьте DEB‑пакет перед установкой balenaEtcher." >&2
exit 1
else
sudo apt install "./$PACKAGE_FILE" -y
fi
4.4 Проверка установки
dpkg -l balena-etcher
command -v balena-etcher
✅ Ожидаемый вывод: /usr/bin/balena-etcher
4.5 Создание скрипта для обновления DEB-версии
⚠️ Важное предупреждение: Скрипты обновления не являются официальными от balena.io и предоставляются «как есть». Для максимальной безопасности вы можете выполнять обновления вручную, используя команды из раздела 4.1–4.3. Скрипты создаются для удобства автоматизации и работают на ваш страх и риск.
if [ -e /usr/local/bin/update-balenaetcher-deb ] && ! grep -q 'Managed balenaEtcher DEB update helper' /usr/local/bin/update-balenaetcher-deb 2>/dev/null; then
echo "Ошибка: не заменяю существующий /usr/local/bin/update-balenaetcher-deb без маркера Managed helper." >&2
exit 1
else
sudo tee /usr/local/bin/update-balenaetcher-deb > /dev/null << 'SCRIPT_EOF'
#!/bin/bash
# Managed balenaEtcher DEB update helper
set -euo pipefail
trap 'echo "Произошла ошибка на строке $LINENO." >&2' ERR
API_URL="https://api.github.com/repos/balena-io/etcher/releases/latest"
if [ "$(id -u)" -eq 0 ]; then
echo "Запускайте update-balenaetcher-deb от имени обычного пользователя; sudo будет запрошен при необходимости." >&2
exit 1
fi
for cmd in apt curl dpkg dpkg-query grep jq mktemp sha256sum sudo; do
if ! command -v "$cmd" > /dev/null 2>&1; then
echo "Не найдена требуемая команда: $cmd" >&2
echo "Установите зависимости: sudo apt install ca-certificates curl jq -y" >&2
exit 1
fi
done
# Безопасное чтение переменных из os-release (без eval)
while IFS='=' read -r key value; do
case "$key" in
VERSION_ID) VERSION_ID="${value//\"}" ;;
esac
done < /etc/os-release
case "$VERSION_ID" in
13|12) ;;
*)
echo "Используйте ZIP‑метод, если вы не проверили совместимость DEB‑пакета для Debian $VERSION_ID вручную." >&2
exit 1
;;
esac
ARCH="$(dpkg --print-architecture)"
if [ "$ARCH" != "amd64" ]; then
echo "balenaEtcher публикует DEB‑пакеты только для архитектуры amd64. Ваша система: $ARCH" >&2
exit 1
fi
if [ -d /opt/balenaEtcher ] || [ -e /usr/local/bin/balena-etcher ]; then
echo "Сначала удалите ZIP‑установку перед обновлением DEB‑пакета." >&2
exit 1
fi
CURRENT_VERSION="$(dpkg-query -W -f='${Version}' balena-etcher 2>/dev/null || true)"
if [ -z "$CURRENT_VERSION" ]; then
echo "balena-etcher не установлен через DEB‑метод." >&2
exit 1
fi
echo "Проверка последней версии DEB‑релиза balenaEtcher..."
RELEASE_JSON="$(curl -fsSL "$API_URL")"
LATEST_TAG="$(printf '%s' "$RELEASE_JSON" | jq -r '.tag_name // empty')"
PACKAGE_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name | test("^balena-etcher_[0-9.]+_amd64\.deb$")) | .browser_download_url' | head -n 1)"
CHECKSUM_URL="$(printf '%s' "$RELEASE_JSON" | jq -r '.assets[] | select(.name == "SHA256SUMS.Linux.x64.txt") | .browser_download_url')"
if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ] || [ -z "$PACKAGE_URL" ] || [ "$PACKAGE_URL" = "null" ] || [ -z "$CHECKSUM_URL" ] || [ "$CHECKSUM_URL" = "null" ]; then
echo "Не удалось получить данные о последней версии DEB‑релиза (amd64)." >&2
exit 1
fi
LATEST_VERSION="${LATEST_TAG#v}"
PACKAGE_FILE="${PACKAGE_URL##*/}"
echo "Текущая установленная версия: $CURRENT_VERSION"
echo "Доступная версия: $LATEST_VERSION"
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "DEB‑пакет balenaEtcher уже обновлён до последней версии."
exit 0
fi
echo "Подготовка прав sudo для APT..."
sudo true
WORK_DIR="$(mktemp -d)"
trap 'rm -rf "$WORK_DIR"' EXIT
echo "Скачивание $PACKAGE_FILE..."
curl -fL --progress-bar -o "$WORK_DIR/$PACKAGE_FILE" "$PACKAGE_URL"
curl -fsSLo "$WORK_DIR/SHA256SUMS.Linux.x64.txt" "$CHECKSUM_URL"
echo "Проверка контрольной суммы..."
cd "$WORK_DIR"
# Надёжная проверка: ищем строку формата «хеш имя_файла»
if ! grep -q "^[[:space:]]*[0-9a-fA-F]\{64\}\s\+${PACKAGE_FILE//./\\.}$" SHA256SUMS.Linux.x64.txt; then
echo "Ошибка: запись для $PACKAGE_FILE не найдена в файле контрольных сумм." >&2
exit 1
fi
sha256sum -c SHA256SUMS.Linux.x64.txt --ignore-missing
echo "Установка $PACKAGE_FILE через APT..."
sudo apt install "$WORK_DIR/$PACKAGE_FILE" -y
FINAL_VERSION="$(dpkg-query -W -f='${Version}' balena-etcher 2>/dev/null || true)"
echo "Обновление завершено: balenaEtcher $FINAL_VERSION"
SCRIPT_EOF
fi
if grep -q 'Managed balenaEtcher DEB update helper' /usr/local/bin/update-balenaetcher-deb 2>/dev/null; then
sudo chmod +x /usr/local/bin/update-balenaetcher-deb
echo "Скрипт update-balenaetcher-deb успешно создан."
fi
5. 🖱️ Запуск balenaEtcher
5.1 Запуск из терминала
balena-etcher
5.2 Запуск из меню приложений
Нажмите Super (клавиша с логотипом Windows) или кликните «Activities», введите в поиске «balenaEtcher» и нажмите на иконку.
6. 📝 Использование balenaEtcher (краткая инструкция)
Интерфейс программы состоит из трёх простых шагов:
- Выбрать образ (Flash from file) — нажмите на иконку с папкой и выберите ISO или IMG-файл
- Выбрать целевой накопитель (Select target) — выберите USB-флешку или SD-карту (будьте внимательны — все данные на ней будут удалены!)
- Начать запись (Flash!) — нажмите кнопку, чтобы начать запись. После завершения программа проверит, что образ записан правильно.
⚠️ Внимание: Все данные на выбранном USB-накопителе или SD-карте будут безвозвратно удалены. Перед записью убедитесь, что вы выбрали правильный диск.
Как определить правильный USB-накопитель (чтобы не ошибиться)
lsblk
Пример вывода:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 238G 0 part /
sdb 8:16 1 14.9G 0 disk
└─sdb1 8:17 1 14.9G 0 part /media/user/USB
sda— ваш основной жёсткий диск (не трогайте его!)sdb— это ваша USB-флешка (14.9G = примерно 16 ГБ)
⚠️ Перед записью обязательно сверяйте не только имя (sdb), но и размер! Часто бывает, что системный диск и флешка имеют похожие имена, а размер — самый надёжный ориентир. Например, если вы ожидаете флешку на 16 ГБ, а в lsblk видите диск на 500 ГБ — это точно не флешка.
💡 Если флешка уже смонтирована (есть строка /media/... в выводе lsblk), лучше её размонтировать перед записью. balenaEtcher обычно сам это делает, но явное размонтирование снижает риск ошибки:
sudo umount /dev/sdb*
(замените sdb на имя вашего устройства).
7. ⚠️ Решение типичных проблем
7.1 Ошибка: balena-etcher: command not found
Симптом: После установки команда balena-etcher не найдена.
Решение: Проверьте, что пакет установлен:
dpkg -l | grep balena
Если в начале строки стоит iU или iF вместо ii — исправьте зависимости:
sudo apt --fix-broken install
7.2 Ошибка: Permission denied при записи на USB-накопитель
Симптом: balenaEtcher не может записать образ на флешку.
⚠️ Не запускайте balenaEtcher от root (sudo). Графические приложения не стоит запускать от суперпользователя — это может привести к проблемам с конфигурацией и кэшем.
Решение:
Шаг 1: Убедитесь, что вы выбрали целевой диск (например, sdb), а не раздел (например, sdb1).
Шаг 2: Проверьте, установлен ли пакет polkit (или policykit-1):
dpkg -l | grep polkit
Шаг 3: Если polkit не установлен, установите его:
sudo apt install polkit
Зачем: balenaEtcher использует Polkit для запроса прав на запись на блочные устройства. При правильно настроенном Polkit программа сама запросит необходимые привилегии через системное окно подтверждения.
Шаг 4: Если окно подтверждения не появляется, можно попробовать запустить программу с передачей прав на устройство через PolicyKit:
pkexec balena-etcher
Что делает: pkexec — это безопасный способ запуска графических приложений с повышенными привилегиями, в отличие от sudo.
⚠️ Если после запуска pkexec balena-etcher появляется ошибка «No such file or directory» или «Failed to execute child process», это значит, что Polkit не может найти исполняемый файл.
В случае ZIP‑установки это нормально: pkexec ищет /usr/bin/balena-etcher, а у вас он лежит как /usr/local/bin/balena-etcher.
Для ZIP‑установки безопаснее вообще не использовать pkexec, а положиться на встроенную авторизацию Polkit внутри самого приложения.
7.3 Ошибка на Debian 11 при установке DEB-пакета
Симптом: При установке DEB-пакета на Debian 11 появляется ошибка:
dpkg-deb: error: archive uses unknown compression for member 'control.tar.zst'
Решение: Используйте ZIP-метод (раздел 3) — он работает на всех версиях Debian.
7.4 Старый APT-репозиторий всё ещё есть в системе
Если старые инструкции оставили файл репозитория, удалите его:
sudo rm -f /etc/apt/sources.list.d/balena-etcher.list
sudo apt update
8. 🗑️ Удаление balenaEtcher
Удаление ZIP-версии
echo "Удаление ZIP‑установки balenaEtcher..."
sudo rm -rf /opt/balenaEtcher
# Удаляем только если файлы существуют (rm -f и так не ругается, но вывод сделаем аккуратнее)
sudo rm -f /usr/local/bin/balena-etcher /usr/share/applications/balena-etcher.desktop
if grep -q 'Managed balenaEtcher ZIP update helper' /usr/local/bin/update-balenaetcher 2>/dev/null; then
echo "Удаление скрипта обновления update-balenaetcher..."
sudo rm -f /usr/local/bin/update-balenaetcher
fi
echo "ZIP‑установка balenaEtcher удалена."
Удаление DEB-версии
echo "Удаление DEB‑пакета balena-etcher..."
sudo apt remove balena-etcher -y
sudo apt autoremove -y
if grep -q 'Managed balenaEtcher DEB update helper' /usr/local/bin/update-balenaetcher-deb 2>/dev/null; then
echo "Удаление скрипта обновления update-balenaetcher-deb..."
sudo rm -f /usr/local/bin/update-balenaetcher-deb
fi
echo "DEB‑установка balenaEtcher удалена."
Удаление пользовательских данных
rm -rf ~/.config/balenaEtcher ~/.cache/balenaEtcher
⚠️ Эти команды удалят историю выбранных образов, целевых накопителей и сохранённые настройки. Если вы хотите сохранить эти данные, не выполняйте удаление папок ~/.config/balenaEtcher и ~/.cache/balenaEtcher.
9. 📝 Чек-лист: всё готово к работе
- [ ] balenaEtcher установлен:
dpkg -l balena-etcher(DEB) илиtest -x /opt/balenaEtcher/balena-etcher(ZIP) - [ ] Программа запускается из меню приложений
- [ ] Программа запускается из терминала командой
balena-etcher - [ ] Скрипт обновления создан:
command -v update-balenaetcher(ZIP) илиcommand -v update-balenaetcher-deb(DEB) - [ ] Вы можете выбрать образ ISO/IMG
- [ ] Вы можете выбрать USB-накопитель (не перепутайте с системным диском!)
10. 🏁 Заключение
Вы успешно установили balenaEtcher на Debian. Теперь вы можете создавать загрузочные USB-флешки и SD-карты с любыми ISO-образами через простой графический интерфейс. Программа автоматически проверяет, что образ записан правильно, что избавляет от проблем при первой загрузке с флешки.
Что дальше:
- Скачайте ISO-образ вашего любимого дистрибутива Linux и запишите его на флешку
- Подготовьте SD-карту для Raspberry Pi
- Изучите официальную документацию balenaEtcher