These instructions will show you how to install Raspbian from scratch on your Raspberry Pi, allowing you to select only the components you want to produce your own customized installation.
Note – While these instructions will still work for the Raspberry Pi there is a newer unattended installer which will work on both the Raspberry Pi and Pi2.
I usually connect to my Raspberry Pi using a USB serial console cable which means I can use it headless without a screen, keyboard or mouse. Of course if you prefer to connect a monitor, keyboard and (optionally) mouse to your Raspberry Pi these instructions will work just as well if you skip the sections where I modify /boot/cmdline.txt and /etc/inittab to configure /dev/ttyAMA0 as the console device.
Note on Partitioning
Since the flash RAM on an SD card will only allow a finite number of disk writes I do not use the default partitioning scheme and use just three partitions, leaving out the swap partition. The process below will create a 64 MB FAT32 boot partition containing the configuration files and firmware, and a 2GB linux EXT4 partition for the operating system, which I find is sufficiently large for most uses, including MATE or XFCE which I use from a remote desktop. This leaves the rest of the space for use as extended linux partition for user data.
Partitioning the SD card
To repartition the SD card you need to be running as root.
$ su Password:
$ sudo -i Password:
Insert the SD card in a working linux system using an SD card reader, if there are any existing partitions on the SD card delete them. When you have done that the partition table should be empty as shown below.
Warning – The device name assigned you your SD card may not be the same on your system as it is on mine, if you repartition the wrong device using fdisk you may lose your data – permanently!
# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 7948 MB, 7948206080 bytes 245 heads, 62 sectors/track, 1021 cylinders Units = cylinders of 15190 * 512 = 7777280 bytes Disk identifier: 0x000ee283 Device Boot Start End Blocks Id System
I find is easier to work directly with the number of sectors on the disk when trying to create disk partitions of a particular size.
Command (m for help): u Changing display/entry units to sectors
First we need to create the FAT32 boot partition.
Note – This must start at sector 2048 or it won’t work.
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First sector (62-15523839, default 62): 2048 Last sector 62-15523839, default 15523839): 128000 Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): b Changed system type of partition 1 to b (W95 FAT32) Command (m for help): a Partition number (1-4): 1
Having created the FAT32 boot partition, we can then create a linux partition to hold the operating system later.
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First sector (128001-15523839, default 62): 128001 Last sector (128001-15523839, default 15523839): 4096000 Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 83
The result should look like this:
Command (m for help): p Disk /dev/sda: 7948 MB, 7948206080 bytes 245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x000ee283 Device Boot Start End Blocks Id System /dev/sda1 * 2048 128000 63969+ b W95 FAT32 /dev/sda2 128001 4096000 1984000 83 Linux
Note - I think you can ignore any messages warning you that the partition does not end on cylinder boundary. I have not had any major issues that I've noticed anyway.
Then commit the changes to disk.
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. #
Format the boot partition
If necessary install the tools needed to format a FAT32 volume.
# apt-get install dosfstools Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: dosfstools 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 85.1kB of archives. : : : Setting up dosfstools (3.0.1-1) ... #
Then format the boot partition
# mkfs -t vfat /dev/sda1
Configure the installer
First download the installer from here and save it in your current folder. Then create a temporary folder to hold the boot loader and other files before copying them to the boot partition.
# mkdir rpi_installer_08-19-12 # cd rpi_installer_08-19-12 # unzip ../rpi_installer_08-19-12.zip # mount /dev/sda1 /mnt # mv * /mnt
To be able to use the serial console to install Raspbian you have to make some changes to the boot configuration highlighted below. On my system the USB serial console defaults to 9600 baud so I need to modify the baud rate as well as the console device. If you don't know what baud rate your machine is using leave it as the default and see if it works first.
# vi /mnt/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,9600 kgdboc=ttyAMA0,9600 console=ttyAMA0,9600 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
Note - The above text should all be on one line.
# umount /mnt # cd .. # rmdir rpi_installer_08-19-12
Remove the SD card and insert it into your Raspberry Pi, then connect the serial console cable and power to start the install process.
The following screen shots will walk you through the process of installing Raspbian from scratch using the installer, there are a few differences from the default Debian installation, mostly to do with the installation of the kernel but not many.
The first step is to select the default language to be used by the installer - there is not much of an option here so just select 'English'.
Then select your country - this is use to select the default locale setting later on.
As this is a network installer the next step is to try to detect the network, before configuring the interface using DHCP.
Note - You cannot install Raspbian usign a wireless network adapter using these instructions.
Pick a host name for your Raspberry Pi, the default is 'debian', but you should change this to a name that is unique to your own network but what you choose is up to you (you can change it later on after the installation has finished if you need to).
I've chosen the stunningly original 'pi' - what else!
Unless your machine will actually be connecting to the internet directly, you can use 'local.net' as the domain name.
The next step is to tell the installer where to find the raspbian package repository, which has to be configured manually.
I'm using 'archive.raspbian.org' but which mirror site you use will depend on your location, for the fastest download speeds you should pick the mirror site closest to you.
The directory is depends on the distribution, in this case 'raspbian'.
Unless you are behind a proxy server you can leave the next entry blank, and if you are behind a proxy server you will know what to use!
Do not worry about the following warning message, just select 'Yes' to continue.
The installer will down load some additional components.
Next you need to select a good strong password for the 'root' account and then create a default user account - the one you will normally use.
The installer will then attempt to detect which disks (including SD cards) you have available, and then take you through the process of partitioning them. You can just select the default partition sizes if you want, however because usign an SD card for swap space is not a good idea due to the limited number of writes that a flash RAM device can be used for, I prefer to undo the changes made by the installer and use the partition sizes we created earlier.
To use the defaults just select 'Finish partitioning and write changes to disk', to use the partitions we have already created select 'Undo changes to partitions'.
Select the first partition and tell the partitioner we want to use it as a FAT32 partition with a mount point of '/rpiboot'.
When you have done that select 'Done setting up partition'.
Repeat the process to set up the second partition as a ext3 or ext4 partition for the operating system.
Check that when you are done the partitions look like this.
When you have finished setting up the partitions select 'Finish partitioning and write changes to disk'.
You can ignore the error message and select 'No' to continue.
Confirm that you want to write the changes to disk by selection 'Yes'.
The partitions will then be formatted, and the installation will continue.
Again we can ignore the following warning.
For a minimal installation I prefer to deselect the default software options and install the packages I want manually later, however you can just accept the defaults.
Note - Do NOT select the desktop environment.
The selected packages will then downloaded and installed, this can take a while. Even for a minimal installation will take 15-20 minutes.
You can ignore the following warning.
Allow the installation to finish, and when the system starts to reboot power it off and remove the SD card.
To finish configuring the installation we need to repeat the changes we made earlier to get the newly installed system to use the serial port as the default console, and the second partition as the root, (since they will have been overwritten by the installer).
# umount /dev/sda1 # mount /dev/sda1 /mnt # vi /mnt/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,9600 kgdboc=ttyAMA0,9600
console=ttyAMA0,9600 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
Note - As before the above text should all be on one line. Remember that it will only be necessary to change the root device if like me you didn't use the default partitioning scheme.
Finally we need to modify inittab.
# vi /mnt/etc/inittab
# Example how to put a getty on a serial line (for a terminal) # T0:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100 #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
Then unmount the SD card.
# umount /mnt
Reinsert the SC card into your Rasbperry Pi and power on - if all went well then it should boot (using the serial console if you configured it that way).
Raspbian GNU/Linux 7 pi ttyAMA0 pi login:
Raspberry Pi is a trademark of the Raspberry Pi Foundation