Skip to content
Efficient CLI for Raspian ARM on QEMU
Python Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Using QEMU for Raspian ARM

single ARM guest configuration tested on Mac OSX 10.14.6 host
experimental multi-guest support for Ubuntu 18.04 host (Gnome / Budgie) over virtual network bridge

Emulates a variety of Raspian releases on proper ARM hardware with QEMU.


QEMU and wget (OSX homebrew)

# OSX:
brew install qemu wget 

# Ubuntu:
sudo apt-get install qemu-system-arm -y

Get the Python3 CLI in this repo:


info - multiple guests over virtual bridge (.deb distros only):

  • multiple guests get unique MAC addresses
  • see / for required packages
# permiss shell scripts with ``` sudo chmod u+x ... ``` 

sudo ./

# switch to bridge br0:
sudo ./

# back to normal host network:
sudo ./

# add network bits for host:
rm /etc/network/interfaces  # existing lo file
cp interfaces /etc/network/  # replace from this repo
cp qemu-ifup /etc/

usage - single guest:

After the first launch, it will launch from the persistent .qcow2 image.

With no arguments & in a new folder, Raspian "stretch-lite" (no desktop environment) will be:
- downloaded as a zip archive with a release kernel
- unarchived --> to img
- converted to a Qcow2 with 8gb allocated as disk
- launched from Qcow2 as administrator

sudo python3 

optional guest configuration arguments:

  • -h prints CLI usage help
  • -rm removes ALL files added in dir with
  • stretch uses standard graphical stretch release with GUI
  • stretchlite for stretchlite release [default!]
  • buster for standard graphical buster release [YMMV]
  • busterlite for busterlite release [YMMV]
# examples:
sudo python3 busterlite
python3 QEMU_Raspian -h  # print help

# YMMV: burn / backup as .img:     

to burn the new image back to an SD card for a hardware Pi:     

# bash
qemu-img convert -f qcow2 -O raw file.qcow2 file.img

Alt text

You can’t perform that action at this time.