Debian distributions for the Raspberry Pis
The Raspian distribution is Debian recompiled and tuned for the ARM instruction set used in the original Raspberry Pi Model A, Model B, and Model B+.
The Raspberry Pi2 has a more recent ARM instruction set. That gives RaspberryPi2 users two paths to Debian Jessie: use the Raspbian distribution or use the stock Debian ARM distribution with a hack for the Raspberry Pi kernel.
This article is about upgrading an existing Raspbian Wheezy distribution to Raspbian Jessie. Some Linux systems administration skill is required to do this.
Edit the files /etc/apt/sources.list and /etc/apt/sources.list.d/*.list replacing every occurance of "wheezy" with "jessie".
For example is /etc/apt/sources.list says:
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
then alter that to:
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
Similarly /etc/apt/sources.list.d/raspi.list contained:
deb http://archive.raspberrypi.org/debian/ wheezy main
and this becomes:
deb http://archive.raspberrypi.org/debian/ jessie main
The repository described by the file /etc/apt/sources.list.d/collabora.list doesn't yet have a Jessie section.
The number of packages to upgrade will depend on how many packages you installed in addition to those which originally arrived with Raspbian Wheezy. In general, the mark is somewhere around 1GB of data.
Upgrades are best done from the old-fashioned text console. Press Crtl-Alt-F1 and login as root.
# apt-get update
# apt-get dist-upgrade
# apt-get autoremove
Do not reboot when that command completes. We'll fix a few of the more common issues with the upgrade at this most convenient moment.
There are two files containing syntax errors in /lib/udev/rules.d/ which cause udev to fail to start: 60-python-pifacecommon.rules and 60-python3-pifacecommon.rules. These files are not owned by any packages, which is a little annoying and naive of their authors. Rename them to stop udev attempting to read them and failing.
# cd /etc/udev/rules.d
# mv 60-python-pifacecommon.rules 60-python-pifacecommon.rules.failed
# mv 60-python3-pifacecommon.rules 60-python3-pifacecommon.rules.failed
ifplugd replaced by wicd
Networking of plugin interfaces is done using ifplugd in Wheezy. This is done using wicd in Jessie.
# apt-get purge ifplugd
systemd is the cgroups controller
The init system is done using System V-style scripts in Wheezy. This is done using systemd in Jessie.
Systemd uses control groups so that unexpected process stop is reported to systemd. In Linux a control group can only have one controlling process, which has to be systemd in Jessie. This isn't a poor outcome, as systemd makes a fine controller.
However if another process attempts to be the control groups controller then systemd can fail when starting processes. So remove any existing controllers:
# apt-get purge cgmanager cgroup-bin cgroup-tools libcgroup1
systemd is the init system
A package called systemd-shim allow other init systems to use logind and other programs, as systemd-shim provides just enough of systemd's function. Jessie uses systemd, so we don't need systemd-shim. Unfortunately the dist-upgrade seems to pull this in:
# apt-get purge systemd-shim
[Thanks to ktb on the RaspberryPi.org forums for correcting a typo here.]
Allow logging to the journal
systemd doubles the number of system loggers, by adding a new logger called journald. It can provide logs to the usual syslogd. However when debugging startup issues it can be useful to have journald write the files itself. To do this create the directory /var/log/journal/
journald keeps its logs in binary. Use journalctl -xb to see the logs. The -1 parameter is hand to view the log of the previous boot.
Consider booting in single user mode
You might choose to give yourself a way to debug startup issues by having the kernel start in single user mode. Edit /boot/cmdline.txt, appending the text single
The workflow here is:
Press Ctrl-D when asked for a password to enter single user mode. The boot will continue into multi-user mode.
If this hangs then press Ctrl+Alt+Del to shut down.
Restart RPi. This time provide the root password at the single user mode password prompt. Use journalctl to view the log of the previous boot and examine what went wrong.
Correct the error, and use shutdown -r now to try again from the top.
Once you have sorted issues during system init then remove the single phrase from /boot/cmdline.txt so that the system boots into multiuser mode.
Reboot and work through issues resulting from the upgrade.
# apt-get clean
Journald is a enterprise-level logging solution, so it is keen on flushing data to disk. This radically increases the number of flash blocks written and this reduction in flash card lifetime isn't appreciated on the RPi. So it's probably best to remove /var/log/journal/* and allow journald to log to RAM and syslog instead.