Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:odroid-c2:notizen

Notizen zum Odroid C2

Es liegt ein Set vor, bestehend aus Ausgepackter Odroid C2

  • Odroid C2
  • eMMC 8 GB + MicroSD Adapter
  • Gehäuse
  • USB Netzteil 5V/2A

Die Vorarbeiten sind mit Ubuntu 16.04.1 gemacht worden

Image aufspielen

Die erste Hürde war, einen MicroSD Adapter zu finden, das mit dem eMMC Modul kooperiert. In meinem Fall war es ein alter Intenso MicroSD (HC) Adapter. Nicht funktioniert haben meine Adapter von Samsung oder SanDisk. Sollte man kein Glück haben, kann man sich an dieser Liste orientieren (Es wird empfohlen, ein USB Flash Card Reader einzusetzen - hier klappte es aber direkt am Notebook Einschub):

Kernel

Die hier aufgelisteten Images laufen derzeit alle mit Kernel 3.14.x. Ich denke, für jeden Geschmack kann eine Distribution gefunden werden. Ich selbst bin bei Arch Linux geblieben.

Es tut sich was mit Kernel 4.10: Armbian arbeitet an einem Image, mit Ubuntu 16.04 und Kernel 4.10 im Gepäck. Zu finden bei den Nightlys:

Mehr Informationen dazu:

:-)

Ubuntu 16.04 (1.1) von hardkernel

Zum Aufspielen des Ubuntu 16.04 Images auf die Speicherkarte, habe ich Etcher genommen, was ich längst mal ausprobieren wollte und hier erfolgreich zum Zug kam. So kann man sich die Tipperei mit dd sparen und validiert wird es auch noch gleich. Etcher ist ebenfalls für Windows und Mac zu haben.

Armbian

Armbian ist auch am Start mit einem C2 Image, was man ebenfalls mit Etcher aufspielen kann:

Der Installationsweg ist auf Arch Linux ARM gut beschrieben:

Nach der Installation und erster Einrichtung:

[haiko@c2arch ~]$ uname -a
Linux c2arch 3.14.79-2-ARCH #1 SMP PREEMPT Mon Sep 19 18:59:55 MDT 2016 aarch64 GNU/Linux

Mal ein Update, nach 4 Monaten:

Linux c2arch.lan 3.14.79-18-ARCH #1 SMP PREEMPT Tue Jan 31 18:25:56 MST 2017 aarch64 GNU/Linux

Wie man sieht, hat sich der Kernel bisher nicht gross geändert. Das ist bisher auch bei keiner mir bekannten Distri anders.

Was läuft bei mir zuhause

  • NFS
  • SSH(FS),autossh
  • Traefik
  • Docker
  • Webanwendungen (tests, etc)

Docker

Auf dem C2 läuft Docker und ich nutze es intensiv für allmöglichen Kram. Als Basis für die Container verwende ich „Alpine Linux“. Um das Image in einem zentrales Repo verfügbar zu haben, habe ich das Image (und andere) auf das Dockerhub hochgeladen:

oder..:

Man kann ein Image mit Alpine flott selber erstellen (Auszug aus einem Makefile):

arch=aarch64
version=3.6.1
tag=datenfahrt/aarch64-alpine:${version}
docker import https://nl.alpinelinux.org/alpine/v3.6/releases/${arch}/alpine-minirootfs-${version}-${arch}.tar.gz ${tag}

Mittlerweile wird die Anzahl der im offiziellem Dockerhub erhältlichen Images für die aarch64 Umgebung immer mehr. Auch ist beispielsweise Portainer verfügbar, was ein nettes Userinterface für Docker Aufgaben bereitstellt:

$ docker run -d -p 0.0.0.0:9000:9000 --restart always --privileged --name portainer -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer:linux-arm64-1.13.2 --no-auth

Erste Bemerkungen

Console Cursor

Es ist auf der Konsole kein Cursor (in keiner Distri) zu finden, was die Arbeit sehr erschwert. Es finden sich Threads dazu im Netz, aber eine vernünftige und dauerhafte Lösung konnte ich nicht finden. Im Terminal via SSH hingegen funktioniert es einwandfrei.

Ethernet Anschluss

Was sofort aufgefallen ist, das Ethernet Jack leuchtet nur Gelb, die grüne LED ist inaktiv. Haben wir Gigabit? Die Spezifikationen vom C2 hilft weiter:

The standard RJ45 Ethernet port for LAN connection supports 10/100/1000Mbps speed.Green LED Flashes when there is 100Mbps connectivity**Yellow(Orange/Amber) LED Flashes when there is 1000Mbps connectivity**

War nicht mal von 2Ghz die Rede?

Hier kann der ganze Kram nachgelesen werden:

http://forum.odroid.com/viewtopic.php?f=141&t=23044

$ lscpu
Architecture:          aarch64
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
CPU max MHz:           1536,0000
CPU min MHz:           100,0000

Ubuntu 16.04: Console loadkeys funktioniert nicht

$ loadkeys de
Could't get a file descriptor referring to the console.

Ein Workaround ist verfügbar, das loadkeys Tool muss demnach neu kompiliert werden:

http://forum.odroid.com/viewtopic.php?t=21378&p=142737

Nach dieser Prozedur ist auch dpkg-reconfigure keyboard-configuration wieder lauffähig.

Vielen Dank an den Nutzer!

Arch linux-odroid-c2-3.14.79-25 kernel + docker + aufs

Es gab das Problem, das Docker nach dem Kernelupgrade nicht mehr wirklich wollte. Systemd konnte docker.service nicht mehr starten.

$ journalctl -ru docker
Jun 14 21:10:20 c2arch.lan systemd[1]: Stopped Docker dAEMon Application Container Engine.
Jun 14 21:10:20 c2arch.lan systemd[1]: docker.service: Service hold-off time over, scheduling restart.
Jun 14 21:10:20 c2arch.lan systemd[1]: docker.service: Failed with result 'exit-code'.
Jun 14 21:10:20 c2arch.lan systemd[1]: docker.service: Unit entered failed state.
Jun 14 21:10:20 c2arch.lan systemd[1]: Failed to start Docker dAEMon Application Container Engine.
Jun 14 21:10:20 c2arch.lan systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Jun 14 21:10:20 c2arch.lan dockerd[1386]: Error starting daemon: error initializing graphdriver: driver not supported
Jun 14 21:10:20 c2arch.lan dockerd[1386]: time="2017-06-14T21:10:20.443150811+02:00" level=error msg="[graphdriver] prior storage driver aufs failed: driver not supported"
Jun 14 21:10:19 c2arch.lan dockerd[1386]: time="2017-06-14T21:10:19.432503885+02:00" level=info msg="libcontainerd: new containerd process, pid: 1394"
Jun 14 21:10:19 c2arch.lan dockerd[1386]: time="2017-06-14T21:10:19.429899865+02:00" level=warning msg="[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting --tlsverify IF YOU DON'T KNOW WHA
Jun 14 21:10:19 c2arch.lan dockerd[1386]: time="2017-06-14T21:10:19+02:00" level=warning msg="the \"-g / --graph\" flag is deprecated. Please use \"--data-root\" instead"
Jun 14 21:10:19 c2arch.lan systemd[1]: Starting Docker dAEMon Application Container Engine...

Aufs support in linux-odroid-c2-3.14.79-25 gibt es nicht mehr:

[1386]: Error starting daemon: error initializing graphdriver: driver not supported
[graphdriver] prior storage driver aufs failed: driver not supported
$ modinfo aufs
modinfo: ERROR: Module aufs not found.

Ein Blick in die Changelog der Kernel Konfiguration:

https://archlinuxarm.org/packages/aarch64/linux-odroid-c2/log?id=c9cabbb65207d223dd5ac582c1b5640a44f1be3b

..
-CONFIG_AUFS_FS=m
 +# CONFIG_AUFS_FS is not set
..
$ modinfo aufs
modinfo: ERROR: Module aufs not found.

Ein Downgrade des Kernels auf linux-odroid-c2-3.14.79-24 ist nun die Option, wenn man auf aufs angewiesen ist

$ sudo pacman -U /var/cache/pacman/pkg/linux-odroid-c2-3.14.79-24-aarch64.pkg.tar.xz
$ modinfo aufs
filename:       /lib/modules/3.14.79-24-ARCH/kernel/fs/aufs/aufs.ko.gz
alias:          fs-aufs
version:        3.14.21+-20150928
description:    aufs -- Advanced multi layered unification filesystem
...

Oder man bleibt beim neuen Kernel und nutzt overlay2 als zukünftigen Storage Treiber. Docker unterstreicht, das overlay2 erst mit Kernel ab 4.1 richtig nutzbar ist. Mit overlay als Storage Treiber waren hier einige Images nicht mehr funktionsfähig.

$ /usr/bin/dockerd -D --storage-opt=overlay2.override_kernel_check=true --storage-driver=overlay2 -g /mnt/ssd/docker -H fd://

Die Umstellung auf overlay2 verlief erstmal problemlos. Ich empfinde die Build Performance schlechter als bei aufs. Laufende Container mit Volumes hingegen habe ich diesen Eindruck nicht. Aufgefallen auch:

Supervisord startet und überwacht in einem Container zwei Dienste - Nach Umstellung auf overlay2 konnte Supervisord keine Prozesse mehr starten.. Beispiel:

$ docker exec -ti meincontainer supervisorctl status

Ergebnis

unix:///tmp/supervisor.socket Connection refuse  ..

Workaround: supervisord mit inet_http_server statt unix_http_server lauschen zu lassen..

;[unix_http_server]
;file = /var/run/supervisor.sock
;chmod = 0777
;chown= nobody:nogroup
 
[inet_http_server]
port = 127.0.0.1:9001
 
[supervisorctl]
;serverurl = unix:///var/run/supervisor.sock
serverurl = http://127.0.0.1:9001
prompt = supervisor
mehr folgt..

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
R M O S I
 
linux/odroid-c2/notizen.txt · Zuletzt geändert: 2017/06/24 17:40 von haiko