DreamPi NOOBS Image

Background information about DreamPi

The Sega Dreamcast was quite innovative for its time. One major selling point and unique feature for the console during its tragically short, but glorious lifespan was the inclusion of a built-in 56k dial-up internet modem, making the Sega Dreamcast the first home video game console to have online support out-of-the-box. The modem could be upgraded to a Broadband Adapter (BBA) for a higher speed, larger bandwidth DSL internet connection; however, these units are rare, in high-demand, and expensive (even today on eBay). With the 56k modem, players could surf the web using a dial-up connection and Dreamcast web browsers such as PlanetWeb (or likewise could use a DSL connection with the BBA). Most of these web browsers also allowed players to read and send email. Moreover, many games supported online features, such as online multiplayer, leaderboards, and the ability to download DLC to the VMU memory card for usage in-game.

Despite the Sega Dreamcast being discontinued prematurely in 2001, many of the game servers stayed online for a few years afterwards. Eventually, however, as the Sega Dreamcast grew older and less socially relevant, all of the games' official servers were retired offline. Recently there have been many online Dreamcast games whose inner workings have been reverse-engineered, and private servers created to resurrect their online functionality. Despite this, however, nowadays with the advent of newer online connection types (such as DSL, fiber, etc), real landline dial-up connections to use with the default 56k modem are becoming obsolete and it is getting much harder to find ISPs who can actually offer a bonafide dial-up connection, while the BBA adapter (for usage with DSL connections) is still rare and expensive.

Enter DreamPi

In order to create a standardized, modern set of hardware to allow players to connect their Dreamcasts to the internet and applicable games to their respective resurrected game servers, a fellow named "Kazade" created the DreamPi. It is a customized Debian-based Linux distro that runs on a Raspberry Pi Model 2 or 3, which will allow a Dreamcast to connect online via a modern-day RJ45 Ethernet or WiFi connection.

A DreamPi setup consists of the following:

  • Raspberry Pi (Model 2, 3, or 4)

  • DreamPi distro

  • Linux-Compatible USB Modem

  • RJ11 Phone cord

  • Line Voltage Inducer circuit

    • If the USB Modem or Dreamcast modem model requires voltage on the modem connection

  • Internet connection

    • Via RJ45 connection

      • Required for Model 2 RPis

    • Via WiFi access point

      • Via WiFi dongle

      • Via built-in WiFi (Model 3 and 4 RPi)

With the DreamPi software and the USB modem setup, the DreamPi will answer to the Dreamcast's dial-up calls, and allow it to connect to the internet! The Dreamcast Now website displays which players are currently online with registered DreamPis and for what games. Furthermore, a DreamPi can be used to get other dial-up based consoles and computers back online for surfing the web, such as a Sega Saturn. With a DreamPi, the Sega Saturn can browse online with a PlanetWeb web browser and NetLink modem cartridge, or browse the resurrected NetLink Zones for Netlink-enabled games. (More information about surfing the NetLink Zones via the DreamPi on the Sega Saturn available here).

One minor con of the DreamPi distro, however, is that it is not NOOBS compatible; the distro must be installed directly to the SD Card by writing the image to it, meaning that one cannot partition the SD Card easily for multi-booting of several Linux-based distros on the SD card. Enter DreamPi NOOBS Image!

"Industrial Strength" LVI

For those who want to build a DIY LVI, but who struggle with soldering, or for those whom hate dealing with tiny, stranded, standard RJ11 wire (22-24 AWG gauge), I've detailed a polished "Industrial-Strength" LVI you can build. This LVI consists of the standard electronics (resistor, capacitor, 9V battery and clip), but also 2 RJ11 wall plates with wired spade connectors, which help breakout the signals into something more manageable. Everything is installed onto a dedicated breadboard, and into a small metal craft tin.

Full details at the DC-Talk forum thread, or my blog post.

DreamPi NOOBS image

The easiest way to setup a new Raspberry Pi is to install a bootloader software known as NOOBS (New Out Of Box Software).

NOOBS comes in 2 versions:

  • Full-version

    • Has a few Linux distros available locally for installation from the SD Card

    • Allows installing other Distros from an online server

  • Lite version

    • Only allows the user to install a few Linux distros from the online server

NOOBS is run when the Raspberry Pi boots, allows one to install various operating systems in such a way to allow multi-booting, and allows the user to select which OS to run. All the user needs to do to install either is to plop the contents of the NOOBS download to the root of the designated SD Card (formatted to FAT32) for the Raspberry Pi. On first boot, the NOOBS bootloader will create a primary FAT32 partition sized appropriately to contain the NOOBS bootloader files and local OSes (if any) for installation on the SD Card's root folder; afterwards, the user can select what OSes to install (either locally from this partition in the "os" folder for the full-version, or online for the lite-version from the online server for various officially-sponsored distros). The lite-version can only install OSes from the online server. Installing OSes via NOOBS allows for multi-boot capabilities.

A much better alternative to NOOBS is PINN (PINN Is Not NOOBS), which I highly recommend using over NOOBS.

PINN is based off of NOOBS, has the same features as NOOBS, and also has the following enhancements such as:

  • Various ways to install OSes

    • Install from SD Card (offline)

    • Install from online repository (with a wider variety of OSes)

    • External Media support for OS installation

      • USB Flash Drive

      • External SD Card via a USB SD Card reader

  • Install special partition types

    • Install additional 512MB ext4 Data partitions

      • For general data usage

    • Reserve empty partitions ("project spaces")

      • For future OS installs

  • Partition handling features

    • Download and archive to the SD Card the OSes from the online server, for offline installation

    • Easily reinstall OSes if something goes wrong

      • Without having to redo a fresh NOOBS/PINN setup

    • Replacement and upgrading of OS partitions

    • Dual-PINN firmware support to handle OSes for Pre-Raspberry Pi Model 3B+ model and later

  • Various maintenance capabilities

    • OS maintenance utility

    • Recovery shell

    • SD card clone utility

    • Password restorer

    • File System Checker

  • And much more!

To allow easy setup of a DreamPi distro on a Raspberry Pi (with multi-boot capabilities for other OSes), I have a created a NOOBS/PINN-compatible DreamPi image, based against the latest version of DreamPi. This image has its own OS icon and slideshow images too when installing!

How to install DreamPi via NOOBS/PINN

If modifying an existing NOOBS/PINN setup, it is highly recommended to backup the SD Card first!

  • Upgrading an existing DreamPi partition from
    an older NOOBS image to a newer
    on an existing PINN setup

      • Such as upgrading DreamPi NOOBS image from v1.6 to v1.7

    • If your version of PINN does not have a "replace [OS]" feature in the maintenance menu, please upgrade PINN to the latest version

        • Feature added after around PINN v2.4.5 (Feb 2018)

      • Feature is necessary to upgrade the DreamPi partition!

      • Upgrade PINN

        • Online update feature

        • OR

        • Manual install

          • Copy all files/folders from new PINN zip folder onto SD card except Recovery.cmdline

          • Recovery.cmdline on a fresh PINN install "includes the 'runinstaller' option by default.

              • WARNING: If you DO copy recovery.cmdline by mistake, it will wipe out all your existing installed operating systems due to the runinstaller option!

              • If upgrading an existing PINN system, please check recovery.cmdline does not include the 'runinstaller' option."

    • Extract the contents of the newer DreamPi NOOBs image archive onto the root of an external medium

      • USB Stick

      • USB SD Card Reader+SD Card

    • Boot into PINN with the external medium inserted

      • DreamPi OS entry should say "[NEW VERSION]" and have an USB icon

    • Click "More (m)" button to navigate to the "Maintenance" menu

      • Check "DreamPi" OS and click "Replace"

      • Select the new DreamPi image to replace the old partition in the dialog box that appears

      • Click "OK"

      • A warning dialog box shall appear warning you that all data on the DreamPi partition will be deleted during the OS replacement. Click "Yes" if you wish to continue.

    • Let the latest DreamPi image replace the old partition

    • Done!

  • Setting up a new SD Card

    • Format the SD Card to FAT32

      • This will erase all data on it!

    • Download latest version of either

    • Put the contents of the download onto the root of the SD Card

    • Download my DreamPi NOOBS compatible image below

    • Extract the contents from my download onto the root of the SD card; overwrite any files/folders.

      • Also copy the folders for any additional NOOBS-compatible OS images there too (for NOOBS setup, if necessary)

      • To quote the PINN documentation:

"Make sure to add any OSes to the /os/ folder before you boot [NOOBS/PINN] in [an] RPi for the first time. Otherwise you will find the partition has been shrunk to its minimum size and there will be no room to add any more OSes to the card later."

    • Place SD Card into Raspberry Pi, and boot the Pi up

    • Install the OSes (DreamPi and others)

      • Important: For NOOBS, make sure you check all of the OSes you want installed at once!
        Installing a single OS may wipe any currently existing ones, and you aren't easily able to change OSes installed afterwards!

    • Enjoy your new multi-boot capabilities!

  • Setting up an existing SD Card with NOOBS/PINN already installed, and installing DreamPi for the first time (by external media)

    • NOOBS Lite

      • Upgrade to either NOOBS Full-version or PINN (recommended), then follow the "Setting up a new SD Card" section.

      • This is required, because we need offline installation for the DreamPi NOOBS image!

    • NOOBS Full-version

      • Follow steps in "Setting up a new SD Card section" for NOOBS setup.

        • Backup data before doing so, and make sure you either have local access to all OSes

        • Upgrade to superior PINN instalation

    • PINN

      • Format USB Stick/external SD Card to FAT32

        • (if not already; USB Stick/SD Card will be erased!)

      • Download my DreamPi NOOBS image, extract contents onto the root of USB Stick/external Card

      • Boot up Pi with USB Stick/USB Card reader+SD Card inserted, install DreamPi

Installing DreamPi (for dual-boot setup in PINN)

DreamPi installation Slideshow

  • Installing DreamPi (by internet server)

      • For NOOBS or PINN, you can alternatively install DreamPi NOOBS image via the internet instead of from external media

      • This has the benefit of auto-updating for when new versions of this image are built and easier maintenance!

    • Make sure PINN initalizes for the first time before trying (boot up PINN for partition initialization process)

      • How to access the Tamkis Repos online

      • PINN

          • Goto the Maintenance menu

            • Check "PINN [Fixed]" and highlight it (click the PINN OS)

            • Click "Edit Config"

              • Select "recovery.cmdline" tab

              • Click "Edit Options" button

                  • Close all windows (Click OK for everything)

                  • Reboot

                  • Have an ethernet or WiFi connection active (connect online)

                  • DreamPi should appear in the Games tab (indicated with an ethernet port icon)

                  • Install DreamPi!

                • Option #2

                  • Fallback option if option #1 doesn't work, may be more reliable

                  • Temporarily change repo_list from the main PINN repo list to the Tamkis repo list

                  • This option can be more stable and reliable

                  • Close all windows

                  • Reboot

                  • Have an ethernet or WiFi connection active (connect online)

                  • Only Games tab should appear in distro lists, with DreamPi (indicated with an ethernet port icon)

                  • Install DreamPi!

                  • Restore original repo_list and alt_image_source and tweaked settings above

      • NOOBS (untested)

        • Open up recovery.cmdline in a text editor on a PC at the root of the SD card

        • "Repo=" option

        • Boot up raspberry Pi

        • DreamPi distro should appear in "Games" tab

        • Install DreamPi from internet!

How to convert stock DreamPi image
into a NOOBS-compatible image

This section is just a quick summary of the technical details for the conversion process, for those curious (and as a note to myself on the process for future ref :P). It is performed for the creation of each NOOBS-compatible image, and is based off the information on this mounting guide and conversion guide. For this quick guide, we'll use the Stock DreamPi v1.7 image as an example ("DreamPi-1.7.img").

  • Boot up a working Linux environment

    • Raspbian via PINN on Raspberry Pi preferred

  • Download the official DreamPi image and extract it onto a USB Stick

  • Plug USB stick into Linux machine

  • Open up terminal

    • Navigate to the directory holding the DreamPi image on the USB Stick within Terminal

    • Run "fdisk -l DreamPi-1.7.img"

      • This will list

        • Size of each sector within the image

        • Partitions within the image

        • Starting sector addresses for each partition

      • Keep all of this data handy

      • Write down the full size of each partition in MB

        • Partition size = (size of each sector * amount of sectors)

    • Mount the 1st partition (boot partition)

      • This is the smaller FAT32 formatted partition

      • Run sudo mount -o loop,offset=[offset value] DreamPi-1.7.img /mnt/

        • For DreamPi v1.7 example

          • Sector size = 512 bytes

          • Boot partition starts at sector address 8192

          • Offset value = (8192 sectors * 512 bytes/sector) = 4194304

      • Boot partition's contents will be mounted into /mnt/ folder

      • Archive the mounted filesystem into a tarball ("boot.tar")

        • Navigate to the folder containing the mounted filesystem ("/mnt/" in example) in Terminal

        • Run sudo tar - cvpf [path/to/directory/holding_DreamPiImage/onUSBStick]/boot.tar ./*

        • Write down the filesize of this uncompressed tar file in bytes; save it for later

      • XZ Compress the tarball into "boot.tar.xz" file

        • If necessary, install xz-utils package first

          • Run sudo apt-get install xz-utils

        • Run xz -9 -e -v boot.tar at the location of the boot.tar file

    • Unmount the 1st partition

      • Run sudo umount /mnt/

    • Mount the 2nd partition (root partition)

      • This is the larger partition containing the OS' files

      • Do same actions as with 1st partition, but save tarball as "root.tar" and "root.tar.xz"

        • Run sudo mount -o loop,offset=[offset value] DreamPi-1.7.img /mnt/

        • Archive the filesystem into tarball

        • XZ Compress tarball

    • Setup a NOOBs folder for the converted image (call it "DreamPi").

      • This folder should be placed under "[root]/os/" on the external medium, for install later

      • Move the boot.tar.xz and root.tar.xz files into here

      • Copy the following files from my DreamPi NOOBS image below into here

        • os.json

        • partitions.json

        • partition_setup.sh

      • Modify info in os.json

        • Description

        • OS name ("DreamPi")

        • Supported Raspberry Pi models

        • URL

      • Modify info in partitions.json

        • Modify partition_size_nominal for both boot and root

          • Size of the uncompressed, full partitions in MB

            • Values which you recorded when running "fdisk" commands

          • Round up to the nearest MB with some extra MB of padding for spare space!

        • Modify uncompressed_tarball_size for both boot and root

          • Size of the uncompressed tarballs in MB

          • Round up to the nearest MB

      • Create OS logo

        • 40x40 px png

        • Named [OS_Name].png ("DreamPi.png")

      • Place images for the installation slideshow in subfolder "slides_vga"

        • 640x440 px pngs

        • Named alphabetically

          • "A.png"

          • "B.png"

          • Etc.

      • Distribute NOOBs image as archive (like I've done)

      • Done!

How to setup an online repository to host
a NOOBS-compatible image
(for internet downloading from NOOBS/PINN)

An online repository consists of 2 items:

The repo_list.json file is setup as such:

In the "repo_list" field, it contains "name" and "URL" fields. The former is used as a name label for the repo_list, while the latter is the URL pointing to an os_list_v3.json file. The fields for each repo entry are enclosed in curly C++-Styled curly {braces}, with a comma (,) between curly brace entries. The os_list_v3.json URLs should be HTTP, and both should have raw file access (hotlinkable URL with no redirection).

Storage of these files on Mediafire and Google Drive links for example will not work for this case. It is highly recommended to place both files on a Github repository, and get the raw url
(e.g. http://raw.githubusercontent.com/[username]/[project]/path_to_folder/os_list_v3.json or

The os_list_v3.json file is setup as such:

It contains the following fields (red fields are unique to the repository setup)

    • os_name

      • Name of the distro OS

    • description

      • Descriptive string about the OS

    • Release date

      • String with when it was released

      • "YYYY-MM-DD"

    • supported_models

    • url

      • URL about the distro

      • Usually for help/info

    • group

      • PINN-only

        • The tab group category the distro belongs to

        • E.g. "Games"

      • Use one of the groups as seen within PINN distro listing

    • download_size

      • The combined download size of all partition tarballs (usually boot and root, in bytes)

    • The following are download URLs to various distro assets

      • The URLs should

        • Be HTTP

        • Have raw file access

          • Hotlinkable URL with minimum redirection

          • Storage of these files on Mediafire and Google Drive links for example will not work

          • It is highly recommended to host the files on SourceForge on a project repository and get the download url

            • E.g. "http://downloads.sourceforge.net/project/project_name/path/filename.ext"

      • partitions_info

        • partitions.json file from the distro image

      • icon

        • An graphical asset for the distro image

    • marketing_info

        • A tarball of the slides_vga assets from the distro used for the installation slideshow

        • Should be called "marketing.tar"

        • Tarball should be a flat archive of the assets

        • Recommended to be compressed with sudo tar - cvpf marketing.tar ./* on the files

    • partition_setup

      • partition_setup.sh from the distro image

    • tarballs

      • List of URLs to the partition tarballs

      • Usually root.tar.xz and boot.tar.xz

    • nominal size

      • The sum of partition_size_nominal fields from all partitions (usually root and boot) from partitions.json

Once all of the distro files are hosted appropriately online and the os_list_v3.json and repo_list.json files are configured and hosted, the server can then be accessed for downloading! Full details on the JSON fields available here.

To access the server from NOOBS/PINN, please see the "Installing DreamPi (by internet server)" subsection from within the "How to install DreamPi via NOOBS/PINN" section.

Accessing the repo server (summary)

  • Initalize PINN/NOOBS for the first time prior to access!

  • PINN

    • Edit recovery.cmdline in text editor at root of SD card

  • NOOBS (untested)

    • Edit recovery.cmdline in text editor at root of SD card

    • Repo="" option

      • This option contains URLs to repositories to fetch distro images

      • Consists of URLs enclosed in "quotes" and separated by spaces

        • E.g. repo="www.url1.com" "www.url2.com"

      • Add your os_list_v3.json to the option if it does not exist or append this URL to list