Building a Debian Linux Distribution for the Intel Galileo




Introduction: Building a Debian Linux Distribution for the Intel Galileo

About: I help ambitious entrepreneurs start, build, and grow their online business.

Hello Internet,

Today we'll be learning how to build and install a Debian Linux Distribution for the Intel Galileo Gen 1/2.

Why Debian?

The Debian distribution allows a more native linux familiar command line interface. Commands such as apt-get and aptitude are available straight out the box rather than in a Yokto distribution where using opkg and finding repositories could lead you to an infinite loop.

Lets Get Shopping:

1) Intel Galileo Gen 1 or 2

2) SD Memory Card (8GB Recommended)

You will also need a computer with Linux Installed.

Step 1: Preparation

Format SD Card to FAT file system

On Mac: Run Disk Utility. Go to Applications on your Mac. Open Utilities. Run Disk

Insert the micro SD card into your computer. In the left hand sidebar of Disk Utility, select the card. In this case, the card has never been formatted before and is called NO NAME. Click the Erase tab. From the Format drop-down list, select MS DOS (FAT). In the Name field, type Debian to make it easier to identify in the steps below. Click Erase to confirm your settings. Click Erase in the confirmation message to erase the contents of your card.

On Linux: Run Disks, as follows: Run Unity Dash (desktop search utility). Enter the command: disks. Select the Disks app. Insert the micro SD card into your computer. In the left sidebar, select the micro SD card. If you see multiple partitions, select a partition and click the - icon to delete the partition. Click the + icon to create a new partition. From the Type drop-down list, select Compatible with all systems and devices (FAT). In the Namefield, type Debian to make it easier to identify in the steps below.

Adapted by:

Preparing your linux machine

On your linux machine, enter the following commands which will install debootstrap and setup the environment for mounting a Debian image.

# apt-get install debootstrap

# mkdir galileo-debian

# cd galileo-debian

# mkdir mnt-loop

# mkdir image

Step 2: Creating the Debian Image

Creating the filesystem for the new Debian Image

Entering the following command will create a new Debian image.

# dd if=/dev/zero of=loopback.img bs=1G count=1

# mkfs.ext3 loopback.img

Step 3: Mounting the Image


We will start by downloading the original image for the Galileo from Intel.

Extract the zipped folder, go into the SD CARD directory, and copy "image-full-galileo-clanton.ext3" to your galileo-debian folder.

Enter the following commands:

# mount -o loop loopback.img ./mnt-loop

# debootstrap --arch i386 wheezy ./mnt-loop

# mount image-full-galileo-clanton.ext3 image

Step 4: Copying Files

These copy commands will put together our Debian system with the necessary original linux files needed for the Galileo.

# cp -ru image/lib/ mnt-loop/

# cp -ru image/usr/lib/* mnt-loop/usr/lib

# cp -ru image/lib/ mnt-loop/usr/lib

# cp -ru image/lib/ mnt-loop/usr/lib

# cp image/usr/bin/killall mnt-loop/usr/bin/

# cp image/etc/inittab mnt-loop/etc/inittab

# cp image/etc/modules-load.quark/galileo.conf mnt-loop/etc/modules

# cp -r image/opt/ mnt-loop/

# cp image/etc/init.d/ mnt-loop/etc/init.d/

# cp image/etc/init.d/ mnt-loop/etc/init.d/

Step 5: Configuring Our Debian Build

From this point on, we will be working inside our Debian build configuring important settings such connecting to the internet, ssh, and our hostname.

Run the following commands:

root@debian:/ mount -t proc proc mnt-loop/proc

root@debian:/ mount -t sysfs sysfs mnt-loop/sys

root@debian:/ chroot mnt-loop /bin/bash

root@debian:/ echo "Galileo" > /etc/hostname

root@debian:/ nano /etc/network/interfaces

Edit the file with the following:

auto eth0

iface eth0 inet dhcp

root@debian:/ apt-get install ssh
root@debian:/ passwd

Set your new password

root@debian:/ mkdir /media/realroot

root@debian:/ mkdir /sketch

root@debian:/ update-rc.d start

//(If this gives you errors, don't worry about it). I had errors, fixed them with the help of google and forums

//for them just to come back again. If you have a permanent fix please share and I will update :)

Step 6: Packing Up

Wrap it up, we are almost done packing and sending out new Debian Linux Distribution.

Enter the following commands:

root@debian:/ exit

# umount mnt-loop/proc

# umount mnt-loop/sys

# umount image

# umount mnt-loop

cp loopback.img /pathToSDRoot/image-full-galileo-clanton.ext3

Copy all files that were in the folder "SD CARD" except for "image-full-galileo-clanton.ext3"

to the root of the SD card.

Step 7: Running Debian on the Intel Galileo

Pop the SD Card in and wait 1-2 minutes for Linux to boot.

At this point it is safe to check if the board will save Arduino Sketches uploaded.

Upload the blink sketch provided in the Arduino Examples.

Once you have your LED blinking, Restart the Galileo.

Within 1-2 minutes, if the LED Starts blinking again, Congratulations, you have successfully installed

Debian on your intel Galileo.

Next what you'd want to do is to check if your ethernet port is running and SSH into it.

ethernetTest Arduino Sketch

Download the sketch provided to test your network and its IP Address.

Using the serial monitor, if the IP address of the Galileo is listed, then you are now ready to SSH into it.

Copy down your IP Address.

Step 8: SSH Into Debian

Open a terminal, or putty, or you favorite program for SSH-ing

In terminal, you would type

sudo ssh root@

Enter your sudo password and the password you chose when configuring your Debian Build.

If you receive a message of success, then pat yourself on the back for successfully SSH-ing into your Debian Build on the Intel Galileo.

Step 9: Wrap It Up

From here on I recommend entering a couple of commands:

# apt-get update

# apt-get install ntp //Configures the Network Time Protocol for automatically setting time and date

# apt-get install build-essential //Configures Build Essentials (Make)

If you'd like to set-up a local server on your Intel Galileo (Which I Strongly Recommend for DIY-ers)

# apt-get install apache2 php5 libapache2-mod-php5

You can then access your server by entering /index.html in your browser

You can manage your server in the /var/www directory on your Galileo.

Thank you for taking your time to learn from this Instructable,

I would appreciate all comments and feedback!


First Time Author Contest

Participated in the
First Time Author Contest

Be the First to Share


    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge
    • Big and Small Contest

      Big and Small Contest
    • For the Home Contest

      For the Home Contest



    2 years ago

    I want to try this but all the links are broken by now. I know its obsolete, buy i just want to give my Galileo Gen 2 a chance. Does anyone have the files?


    7 years ago

    I successfully went through the entire process (with jessie instead of wheezy, just had to reenable ssh root login). Thank you very much!

    Is it possible to run the OpenVPN-client on this distribution? The startup of this client fails with the error message "Cannot open TUN/TAP dev /dev/net/tun: No such file or directory". After a lot of fiddling and research I discovered that CONFIG_TUN is not enabled in the kernel, so "modprobe tun" fails with a "module not found". I tried using a different, fully featured kernel ( but sadly this won't boot together with your Debian distro.


    Reply 3 years ago

    Is it possible you could provide your jessie image that you created? I have been struggling with making a image.


    Reply 5 years ago

    Hello Merlin,

    Onae question: How do you get this command: root@debian:/ apt-get install ssh

    I've been trying all the day, my output error is this:

    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
    LANGUAGE = "",
    LC_ALL = "en_US.UTF-8",
    LC_TIME = "en_US.UTF-8",
    LC_MONETARY = "en_US.UTF-8",
    LC_CTYPE = "en_US.UTF-8",
    LC_ = "en_US.UTF-8",
    LC_COLLATE = "en_US.UTF-8",
    LC_ADDRESS = "en_US.UTF-8",
    LC_TELEPHONE = "en_US.UTF-8",
    LC_MESSAGES = "en_US.UTF-8",
    LC_NAME = "en_US.UTF-8",
    LC_NUMERIC = "en_US.UTF-8",
    LC_PAPER = "en_US.UTF-8",
    LANG = "es_MX.UTF-8"
    are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory

    Coulde you help me, please?



    Reply 5 years ago

    Hello Omar,

    It seems to me that your problem is not related to the platform (Galileo), but to the operating system (Debian). Googling the error message "perl: warning: Setting locale failed." yields several results, for example this one:
    Ubuntu is build on Debian, so the described solution might work. Otherwise, keep on going through other search results or ask your question in a Debian-related forum.


    Reply 5 years ago

    Thanks for the Reply. Sorry for the late respond.

    I cannot solve my problem, I tried everything. So I endup using the prebuild image o galileo-debian:


    Reply 7 years ago

    I would appreciate any help, I'm an intermediate Linux user but out of ideas and unfortunately OpenVPN is a key requirement for my desired application.


    7 years ago


    The link that you provided is no longer valid. The current version of the linux image ("") does not work using these instructions. Everything seems to be fine until step 7. The Arduino IDE detects the board, but fails to download. The following is displayed in the output window of the Arduino IDE:


    starting download script

    # clupload script to invoke lsz

    # Copyright (C) 2014 Intel Corporation


    Args to shell: /Users/miguelalonsojr/Library/Arduino15/packages/Intel/tools/sketchUploader/1.6.2+1.0/x86/bin /var/folders/cz/4_f6kxjn7y1b3vtqswlrbkb40000gn/T/build3733215399650621505.tmp/Blink.cpp.elf /dev/cu.usbmodem14131

    # This library is free software; you can redistribute it and/or

    Serial Port PORT (note: should be /dev/cu.xxxxxx for OSX)

    # modify it under the terms of the GNU Lesser General Public

    Using tty Port /dev/cu.usbmodem14131

    # License as published by the Free Software Foundation; either

    Sending Command String to move to download if not already in download mode

    # version 2.1 of the License, or (at your option) any later version.


    # This library is distributed in the hope that it will be useful,

    # but WITHOUT ANY WARRANTY; without even the implied warranty of


    # Lesser General Public License for more details.


    # You should have received a copy of the GNU Lesser General Public

    # License along with this library; if not, write to the Free Software

    # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA


    echo "starting download script"

    echo "Args to shell:" $*


    # ARG 1: Path to lsz executable.

    # ARG 2: Elf File to download

    # ARG 3: TTY port to use.


    #path may contain \ need to change all to /





    echo "Serial Port PORT" $com_port_id "(note: should be /dev/cu.xxxxxx for OSX)"

    echo "Using tty Port" $tty_port_id


    echo "Sending Command String to move to download if not already in download mode"

    echo "~sketch downloadGalileo" > $tty_port_id

    #Give the host time to stop the process and wait for download

    sleep 1


    #Move the existing sketch on target.

    Deleting existing sketch on target

    echo "Deleting existing sketch on target"

    "$fixed_path/lsz" --escape -c "mv -f /sketch/sketch.elf /sketch/sketch.elf.old" < $tty_port_id > $tty_port_id

    Retry 0: Got TIMEOUT

    Retry 0: Got TIMEOUT

    Transfer incomplete

    #"$fixed_path/lsz.exe" --escape -c "mv -f /sketch/sketch.elf /sketch/sketch.elf.old" < $tty_port_id > $tty_port 1>&0


    # Execute the target download command


    #Download the file.


    "$fixed_path/lsz" --escape --binary --overwrite $host_file_name < $tty_port_id > $tty_port_id

    Retry 0: Timeout on pathname

    Transfer incomplete


    #mv the downloaded file to /sketch/sketch.elf


    echo "Moving downloaded file to /sketch/sketch.elf on target"

    "$fixed_path/lsz" --escape -c "mv $target_download_name /sketch/sketch.elf; chmod +x /sketch/sketch.elf" < $tty_port_id > $tty_port_id

    Moving downloaded file to /sketch/sketch.elf on target

    Retry 0: Got TIMEOUT

    Retry 0: Got TIMEOUT

    Transfer incomplete



    This is using Arduino version 1.6.5, with an Intel Galileo Board with the firmware upgraded to 1.0.4 and using the 1.0.4 SDCard tar file mentioned above. Any thoughts on how to resolve this?


    Reply 6 years ago

    Any update on this? I have the same error!


    Reply 7 years ago

    The link seems to be up again, but still no success...


    7 years ago

    Looks great! Can't wait until I can reach this level of comprehension


    7 years ago

    Well, after a few days of scouring the internets... and following many, many, tutorials, I've put together a build script that should handle building a Debian image with debootstrap. Check it out: