$linuxjunkies
>

Install BalenaEtcher and Tour BalenaCloud

Install BalenaEtcher via AppImage or native packages on any Linux distro, flash OS images, and tour BalenaCloud fleet management and self-hosting options.

BeginnerUbuntuDebianFedoraArch8 min readUpdated June 7, 2026

Before you start

  • A 64-bit x86 Linux desktop or server with a graphical session for Etcher (Wayland or X11)
  • A USB drive or SD card of at least the size of the OS image you plan to flash
  • Node.js 18 or later if installing the Balena CLI via npm
  • A BalenaCloud account (free) for the fleet management sections

BalenaEtcher is the go-to tool for flashing OS images to USB drives and SD cards reliably. BalenaCloud sits on top of that workflow, giving you a fleet management layer for embedded Linux devices — Raspberry Pis, industrial gateways, and similar hardware. This guide walks you through installing Etcher on Linux, takes you on a quick tour of BalenaCloud's core concepts, and covers self-hosting alternatives if you'd rather keep everything on-premise.

Install BalenaEtcher via AppImage

The AppImage is the universal, distro-agnostic route. It runs on any x86-64 Linux system without installing packages into your system directories.

1. Download the AppImage

Head to etcher.balena.io and grab the latest .AppImage for x86-64. You can also pull it directly from the terminal (replace the version number with the latest from the releases page):

curl -Lo balenaEtcher.AppImage \
  https://github.com/balena-io/etcher/releases/download/v1.19.21/balena-etcher-1.19.21-linux-x64.AppImage

2. Make it executable and run it

chmod +x balenaEtcher.AppImage
./balenaEtcher.AppImage

On first launch, Etcher may ask to integrate with your desktop (adds a .desktop entry and icon). Accept if you want it in your application menu. If you see a FUSE error, install the FUSE library for your distro before running:

# Debian / Ubuntu
sudo apt install libfuse2

# Fedora / RHEL family
sudo dnf install fuse-libs

# Arch
sudo pacman -S fuse2

Alternative: Package manager installs

If you prefer native packages, Balena publishes a Debian repository and an RPM. These integrate better with system update tooling:

# Debian / Ubuntu — add Balena's repo then install
curl -1sLf \
  'https://dl.cloudsmith.io/public/balena/etcher/setup.deb.sh' \
  | sudo -E bash
sudo apt install balena-etcher
# Fedora / RHEL family
curl -1sLf \
  'https://dl.cloudsmith.io/public/balena/etcher/setup.rpm.sh' \
  | sudo -E bash
sudo dnf install balena-etcher

Flashing your first image

Etcher's interface has three steps: select image, select target drive, flash. It validates the write automatically after flashing — you don't need to run a separate sha256sum check (though doing so before flashing is still good practice). Run Etcher as your normal user; it will prompt for privilege escalation via PolicyKit when it needs to write to the block device. If PolicyKit is absent (common on minimal server installs), launch with sudo:

sudo ./balenaEtcher.AppImage --no-sandbox

Wayland note: Etcher is Electron-based. On a pure Wayland session it will use XWayland automatically. If the window does not appear, set DISPLAY=:0 or force XWayland explicitly before launching.

Tour of BalenaCloud

BalenaCloud is a managed platform for deploying and updating containerized applications on edge devices. The free tier supports up to 10 devices, which is enough to learn the platform thoroughly.

Core concepts

  • Fleet — a logical group of devices that run the same application. All devices in a fleet share the same target release.
  • Device — a physical board running balenaOS, connected to the cloud via an encrypted VPN tunnel (OpenVPN).
  • Release — a versioned snapshot of your Docker Compose application. Pushing a new release triggers an over-the-air (OTA) update across the fleet.
  • Service — a single container within a multi-container release, equivalent to a Docker Compose service.
  • Environment variables — scoped at fleet, device, or service level. Fleet-level vars propagate to all devices unless overridden lower down.

Create an account and your first fleet

  1. Sign up at dashboard.balena-cloud.com.
  2. Click Create fleet, pick a device type (e.g., Raspberry Pi 4), and choose a fleet type. For most beginners, Starter is fine.
  3. Download the balenaOS image for your fleet — the dashboard customises it with your API key and Wi-Fi credentials baked in.
  4. Flash the downloaded image to an SD card using Etcher (see above).
  5. Boot the device. Within a minute or two it appears in your fleet's device list as Online.

Deploy an application

The recommended workflow uses the Balena CLI. Install it with npm or grab the standalone binary from the releases page:

# npm install (requires Node.js 18+)
npm install --global balena-cli

# Verify
balena version
# Log in (opens a browser for OAuth)
balena login

# From your project directory containing docker-compose.yml
balena push MyFleetName

The CLI packages your Compose project, builds it on Balena's builders (or locally with --local), and publishes a release. All online devices in the fleet start pulling the update within seconds. You can watch the progress live:

balena logs <device-uuid> --tail

Key dashboard features worth knowing

  • Web terminal — browser-based SSH into any running container or the host OS. Useful for quick debugging without exposing SSH publicly.
  • Public device URL — toggleable per device. Balena proxies a public HTTPS URL to port 80 on the device, handy for demos.
  • Device pinning — lock a single device to a specific release while the rest of the fleet updates. Critical for staged rollouts.
  • Delta updates — the platform sends binary diffs between container layers, not full image pulls, keeping OTA bandwidth low.

Self-Hosting Alternatives

If BalenaCloud's SaaS model doesn't suit you — privacy requirements, air-gapped networks, or cost at scale — you have two main paths:

openBalena

openBalena is the open-source core that BalenaCloud is built on. It provides the same device VPN, OTA updates, and CLI compatibility but runs entirely on your own servers. The setup is Docker Compose-based:

# Clone the quickstart
git clone https://github.com/balena-io/open-balena.git
cd open-balena

# Configure and start (requires a domain name with DNS pointing to your server)
./scripts/quickstart -U [email protected] -P changeme -d devices.example.com

openBalena lacks the dashboard UI by default — you interact via the CLI. A community project called open-balena-admin adds a basic web UI, though it is not officially maintained by Balena.

Alternative flash tools

If you only need the flashing part and not fleet management, these are mature alternatives to Etcher:

  • dd — the classic Unix approach. Fast, no GUI, unforgiving if you target the wrong device. Always double-check with lsblk first.
  • Raspberry Pi Imager — official tool from the Raspberry Pi Foundation; supports pre-configuration of Wi-Fi and SSH directly in the image.
  • Ventoy — copy an ISO to a USB stick once, then boot multiple ISOs from the same drive without reflashing. Great for multi-distro USB sticks.

Verification

After flashing, verify the write integrity before booting the device. Etcher does this automatically, but you can also verify manually:

# Get the uncompressed SHA256 of the source image
sha256sum ubuntu-24.04-preinstalled-server-arm64+raspi.img

# Read back the same number of bytes from the target device
# Replace /dev/sdb and count= with your image size in bytes / 512
sudo dd if=/dev/sdb bs=512 count=<sector_count> status=none | sha256sum

The two hashes must match. Any mismatch indicates a bad write or a failing drive.

Troubleshooting

  • Etcher fails to detect the drive: Check that the device appears in lsblk. Etcher filters out your root drive and loop devices intentionally.
  • Flash fails partway through: The SD card or USB stick may be defective. Run badblocks -w /dev/sdX (destructive) to test the media.
  • Device shows as Offline in BalenaCloud: Confirm internet access from the device, check that the correct Wi-Fi credentials were baked into the image, and verify the device's time is synced — the VPN handshake is sensitive to clock skew.
  • balena push fails with authentication error: Run balena login again. Tokens expire; the CLI caches them in ~/.balena/.
  • AppImage won't launch on Wayland: Try ELECTRON_OZONE_PLATFORM_HINT=auto ./balenaEtcher.AppImage to let Electron pick the best backend.
tested on:Ubuntu 24.04Fedora 40Debian 12Arch rolling

Frequently asked questions

Does BalenaEtcher require root or sudo to run?
On desktop systems with PolicyKit installed, Etcher runs as your normal user and requests privilege escalation only when it writes to a block device. On minimal server installs without PolicyKit, launch it with sudo and the --no-sandbox flag.
How many devices can I manage for free on BalenaCloud?
The free Starter plan supports up to 10 devices with full OTA update and fleet management features. Beyond 10 devices you need a paid plan.
What is the difference between BalenaCloud and openBalena?
BalenaCloud is the hosted SaaS platform with a web dashboard, build infrastructure, and managed VPN. openBalena is the open-source self-hosted version that provides the same device management core but requires you to run and maintain your own servers.
Can I use Etcher on a Wayland-only desktop?
Yes. Etcher is Electron-based and falls back to XWayland automatically on most Wayland compositors. If the window doesn't appear, set ELECTRON_OZONE_PLATFORM_HINT=auto before launching.
Is there a command-line alternative to Etcher for scripting image flashes?
Yes, dd is the standard tool. Use lsblk to identify your target device carefully, then run: sudo dd if=image.img of=/dev/sdX bs=4M status=progress && sync. Unlike Etcher, dd gives no confirmation prompts, so double-check the target device first.

Related guides