Finding the right image
There are many single-board computers on the OpenSuSE hardware-compatibility list (HCL), including:
Raspberry models Pi, Pi 2, Pi 3
ODroid models C1, XU
A lot of them have ready to go images, often for Tumbleweed, however none of the pages explain the below image differences hence the one-line for each:
JeOS – Just Enough Operating System (JeOS, pronounced “juice”) is a paradigm for customizing operating systems to fit the needs of a particular application such as for a software appliance.
E20 – Enlightenment, also known simply as E, is a compositing and stacking window manager for the X Window System…. The current version is E20.
XFCE – Xfce (pronounced as four individual letters)[3] is a free and open-source desktop environment for Unix and Unix-like operating systems.
LXQT – Qt port of the full LXDE suite; LXDE (abbreviation for Lightweight X11 Desktop Environment) is a free desktop environment with comparatively low resource requirements.
Since I wanted a headless system, JeOS was what I needed.
As it wasn’t available for my ODroid C1+ but was for my Raspberry Pi 2 and as my main machine is a 15″ Retina MacBook Pro Late 2013 [WayBack] below are the steps I used to get the image working.
Installing the Raspberry Pi 2 image using OS X
The below Raspberry Pi2 link will redirect to the correct image in the generic download directory http://download.opensuse.org/repositories/devel:/ARM:/Factory:/Contrib:/RaspberryPi2/images/
http://download.opensuse.org/repositories/devel:/ARM:/Factory:/Contrib:/RaspberryPi2/images/openSUSE-Tumbleweed-ARM-JeOS-raspberrypi2.armv7l.raw.xz
For other Raspberry Pi versions, you can find them here:
http://download.opensuse.org/repositories/devel:/ARM:/Factory:/Contrib:/RaspberryPi3/images/openSUSE-Tumbleweed-ARM-JeOS-raspberrypi3.aarch64.raw.xz
http://download.opensuse.org/ports/armv6hl/tumbleweed/images/openSUSE-Tumbleweed-ARM-JeOS-raspberrypi.armv6l-Current.raw.xz
I installed on a 8 gigabyte SD card that revealed itself as /dev/disk1 using this diskutil command (via osx – List all devices connected, lsblk for Mac OS X – Ask Different [WayBack])
diskutil list
So this wrote the image to SD card in a sudo su - prompt:
targetDevice="disk2"
unxz --keep openSUSE-Tumbleweed-ARM-JeOS-raspberrypi2.armv7l-2016.08.20-Build2.1.raw.xz; \
diskutil umount "/dev/${targetDevice}s1"; \
dd bs=1m of="/dev/r${targetDevice}" if=openSUSE-Tumbleweed-ARM-JeOS-raspberrypi2.armv7l-2016.08.20-Build2.1.raw; \
sync; \
diskutil list; \
diskutil eject "/dev/${targetDevice}"
or if you want to select which image to “burn”:
targetDevice="disk2"
imageName="openSUSE-Tumbleweed-ARM-JeOS-raspberrypi2.armv7l-2016.08.20-Build2.1.raw"
imageName="openSUSE-Tumbleweed-ARM-JeOS-raspberrypi.armv6l-2016.11.23-Build2.22.raw"
imageName="openSUSE-Tumbleweed-ARM-JeOS-raspberrypi3.aarch64-2017.01.12-Build3.2.raw"
unxz --keep ${imageName}.xz; \
diskutil umount "/dev/${targetDevice}s1"; \
dd bs=1m of="/dev/r${targetDevice}" if=${imageName}; \
sync; \
diskutil list; \
diskutil eject "/dev/${targetDevice}"
A few notes:
As a precaution, I always diskutil unmount disks before dd write operations to them.
Contrary to the example in the OpenSuSE documentation, Mac OS X does not support binary prefixes like M. When you do use them you get this error
dd: bs: illegal numeric value
For the same reason, I’ve removed iflag=fullblock and oflag=direct otherwise you get this error:
dd: unknown operand iflag
dd: unknown operand oflag
I’ve used rdisk devices instead of disk devices as raw disks are at least an order of magnitude faster to write:Source: archlinux – SD card write speed seems to be 14 times slower than read speed – Raspberry Pi Stack Exchange [WayBack]
I got 4 megabyte/second which is OK for my Kingston class 4 [WayBack] device.
Coloured splash screen (gradient / rainbow)
After that the image didn’t boot: I saw a blink of the “rainbow screen” (4 pixel gradient) on the right and that was it. According to the Raspberry Pi trouble shooting guide, this likely means the kernel could not be loaded correctly.
This one did: https://www.raspberrypi.org/downloads/raspbian/ -> https://downloads.raspberrypi.org/raspbian_lite_latest -> http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-05-31/2016-05-27-raspbian-jessie-lite.zip with commands on a sudo su - prompt:
targetDevice="disk1"
unzip 2016-05-27-raspbian-jessie-lite.zip; \
diskutil umount "/dev/${targetDevice}s1"; \
dd bs=1m of="/dev/r${targetDevice}" if=2016-05-27-raspbian-jessie-lite.img; \
sync; \
diskutil list; \
diskutil eject "/dev/${targetDevice}"
Connecting the wires of a USB TTL UART serial adapter to your Raspberry Pi
Debugging over serial
As I wanted to sort out what I screwed up, I wanted to see the serial output.
For that, you need a USB to TTL Serial Cable which I had as it was part of https://www.amazon.com/gp/product/B00MR2HR6O
Some links (note do NOT power both over serial and micro-USB at the same time!):
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/connect-the-lead
http://www.savagehomeautomation.com/projects/raspberry-pi-rs232-serial-interface-options-revisit.html
There are many USB serial TTL cables, but most of them use either of these chips manufacturers I wrote about in Some notes on apcupsd, a SUA3000XLI and a SUA48XLBP battery pack:
Prolific PL-2303HXA and PL-2303X, PL2303SA, PL2303TA, PL2303TB, PL2303HXD, PL2303EA, PL2303RA and PL2305
FTDI FT232BM, FT245BM, FT2232C, FT2232D, FT245R, FT232H, FT231X and FT230X
Silabs CP2101, CP2102, CP2103, CP2104, CP2105, CP2108, CP2109, CP2110, CP2112, CP2114, CP2130 and CP2614
The majority have these connector pins on the TTL (Raspberry) side:
RED power (do NOT connect if you have an other power source for the Raspberry!)
BLACK ground
WHITE TxD on the Raspberry PI connected to RxD of the USB adapter.
GREEN RxDon the Raspberry PI connected to TxD of the USB adapter.
Do NOT mix up the order or it won’t work; see rpi-usb-ttl-ssh.md [WayBack]
I use screen for connecting over serial. Sometimes a session hangs so you might want to learn how to kill a screen session – Ask Ubuntu [WayBack].
screen /dev/cu.usbserial 115200
You might want to set your screen buffer size to more than the default 1024 lines as described in linux – How do I increase the scrollback buffer in a running screen session – Stack Overflow [WayBack]:
Press Ctrl-a then : and then type
to get a 10000 line buffer, for example.
You can also set the default number of scrollback lines by adding
to your ~/.screenrc file.
To scroll (if your terminal doesn’t allow you to by default), press Ctrl-aESC and then scroll (with the usual Ctrl-f for next page or Ctrl-a for previous page, or just with your mouse wheel / two-fingers). To exit the scrolling mode, just press ESC.
Another tip: Ctrl-ai shows your current buffer setting.
Within screen, you can scroll through the buffer (I like Esc for exiting the scrolling better than Enter twice), see terminal – Scroll inside Screen, or Pause Output – Unix & Linux Stack Exchange [WayBack]:
Screen has its own scroll buffer, as it is a terminal multiplexer and has to deal with several buffers.
Maybe there’s a better way, but I’m used to scrolling using the “copy mode” (which you can use to copy text using screen itself, although that requires the paste command too):
Hit your screen prefix combination (C-a / control+A by default), then hit Escape.
Move up/down with the arrow keys (↑ and ↓).
When you’re done, hit Return twice to get back to the end of the scroll buffer.
(If you move the cursor after hitting Return once, you’ll be selecting text to copy, and hitting Returnthe second time will copy it. Then you can paste with C-a followed by ])
Of course, you can always use more and less, two commonly used pagers, which may be enough for some commands.
Resetting your Raspberry Pi B+/2/3
Without modification, you have to pull/reinsert the power plug to reset your Raspberry Pi. Since connectors only survive a limited number of insertions, you might want to add a Raspberry Pi 2 Reset Button – All [WayBack] which works by shortening the RUN header with a switch.
The RUN header (which basically is a reset switch [WayBack]) is placed on various locations depending on your Raspberry Pi models:
between the GPIO pin header and display header on these models:
A+ v1.1: File:Raspberry Pi A+.jpg – Wikimedia Commons / File:Drawing of Raspberry Pi model A+ rev1.1.svg – Wikipedia, the free encyclopedia
B+ v1.2: File:Raspberry Pi B+ top.jpg – Wikimedia Commons / File:Raspberry Pi B+ rev 1.2.svg – Wikipedia, the free encyclopedia
2B v1.2: File:Raspberry Pi 2 Model B v1.1 top new.jpg – Wikimedia Commons / File:Raspberry Pi B+ rev 1.2.svg – Wikipedia, the free encyclopedia
under the board hole that’s between the GPI pin header and USB header on these models:
3B v1.2: File:Raspberry Pi 3 Model B.JPG – Wikimedia Commons / File:RaspberryPi 3B.svg – Wikipedia, the free encyclopedia
right below GPI pin header on the right side near pin #37/#39:
zero: File:Pi Zero.png – Wikimedia Commons / File:Location of connectors and ICs on Raspberry Pi Zero.svg – Wikipedia, the free encyclopedia
named P6 situated between the 3.3V regulator chip and the HDMI out connector:
B: File:Raspberry Pi Model B Rev. 2 (rotated cropped).jpg – Wikimedia Commons / File:Drawing of Raspberry Pi model B rev2.svg – Wikipedia, the free encyclopedia
not available (N/A):
A/1: File:Front of Raspberry Pi.jpg – Wikimedia Commons / File:Raspberry Pi 1A.svg – Wikipedia, the free encyclopedia
Here is a YouTube video on How to fit a reset switch to your Raspberry Pi Rev 2 and blog post How To Add a Reset Switch To Your Raspberry Pi [WayBack]
Fixing the GPT into MBR
http://www.tonymacx86.com/threads/converting-guid-gpt-partition-to-mbr-in-mac.55352/
http://www.rodsbooks.com/gdisk/mbr2gpt.html
https://sourceforge.net/projects/gptfdisk/
http://heanet.dl.sourceforge.net/project/gptfdisk/gptfdisk/1.0.1/gdisk-binaries/gdisk-1.0.1.pkg
http://www.filedropper.com/u-boot
mkdir /efipart
mount -tmsdos /dev/disk1s1 /efipart
copy ~/Downloads/u-boot.bin /efipart
That didn’t work either, so I carefully looked at the board inside the case: it was a Raspberry B+ one which happened to be in the stock of Raspberry 2 pile. Stupid me!
Taking a “correct” Raspberry Pi 2 from the stock indeed worked with the above image.
Updating/Upgrading the Raspberry Pi 2
After installing, login on the console or via ssh (user root, password linux), then:
change the root password
add a new user that can sudo
change the hostname
update/upgrade: ensure you trust the 'Factory-Contrib-RPi2' key:
Installing the Raspberry Pi image on a Raspberry B+
That turned out to be easy after downloading http://download.opensuse.org/repositories/devel:/ARM:/Factory:/Contrib:/RaspberryPi/images/openSUSE-Tumbleweed-ARM-JeOS-raspberrypi.armv6l-2016.06.09-Build2.3.raw.xz from http://download.opensuse.org/repositories/devel:/ARM:/Factory:/Contrib:/RaspberryPi/images/
targetDevice="disk1"
unxz --keep openSUSE-Tumbleweed-ARM-JeOS-raspberrypi.armv6l-2016.06.09-Build2.3.raw.xz; \
diskutil umount "/dev/${targetDevice}s1"; \
dd bs=1m of="/dev/r${targetDevice}" if=openSUSE-Tumbleweed-ARM-JeOS-raspberrypi.armv6l-2016.06.09-Build2.3.raw; \
sync; \
diskutil list; \
diskutil eject "/dev/${targetDevice}"
A few notes:
From this image, zypper dist-upgrade gives this errror:
Problem: nothing provides raspberrypi-firmware = 2016.07.15 needed by raspberrypi-firmware-config-rpi-2016.07.15-1.1.noarch
The workaround his to add the hardware repository:
Raspberry Pi logo
Boot differences between Raspberry Pi 2 and B+
The Raspberry Pi 2 boots faster, but blanks the screen between loading the kernel and showing the logon prompt.
The Raspberry Pi B+ shows a Raspberry logon between those moments.
The Raspberry Pi 2 does not need any repository changes in order to perform a zypper dist-upgrade (might be because the image is younger).
–jeroen
via: Raspberry Pi with boots up with Rainbow screen – Raspberry Pi Stack Exchange
How to fit a reset switch on your Raspberry Pi Rev 2:
Filed under: *nix, Development, Hardware, Hardware Development, Linux, openSuSE, Power User, Raspberry Pi, Single-Board Computers, SuSE Linux, Tumbleweed