Arch Linux auf Samsungs ARM-Chromebook installieren

Vor gut zwei Wochen hatte ich über mein ARM Chromebook und die Möglichkeit geschrieben, Arch Linux darauf zu installieren. Inzwischen habe ich genau das getan. Die Installation ist denkbar einfach. Hier steht, wie es geht!

UPDATE
Im Herbst 2013 wurde die Installationsroutine verändert. Nun ist es auch möglich, eine USB-Festplatte als Installationsort zu benutzen. In diesem Zusammenhang wurde zudem eine umfangreiche neue Installationsanleitung veröffentlicht. Damit werden die Schritte „Download und Installation des Betriebssystems“ sowie „Anpassen der SD-Partitionsgröße“ hinfällig! Bitte in diesem Punkten der Installationsanleitung folgen, die auf der verlinkten Seite zu finden ist!

Disclaimer und Einschränkungen

WARNUNG!
Die Installation von Arch Linux auf dem Chromebook ist derzeit hochgradig experimentell. Es gibt keinen offiziellen Support, das Projekt wird von der Arch Linux ARM Community vorangetrieben. Derzeit (Mitte 2012) gibt es erhebliche Risiken bei der Audio-Unterstützung; scheinbar können durch Samsungs ungewöhnliches Hardware-Design die Lautsprecher unter Arch Linux buchstäblich durchschmoren. Es besteht Brandgefahr!

Installiert man keine Audiounterstützung (so wie ich), tritt das Problem offenbar nicht auf. Ich übernehme keine Haftung für Schäden, die durch das Ausführen der folgenden Schritte entstehen.

Bei Fragen und Problemen

Arch Linux ARM ist ein vom eigentlichen Arch Linux abgekoppeltes Projekt. Fragen zur Unterstützung des Chromebooks gehören daher nicht ins Arch Linux – Forum! Wer dort Fragen zu ARM-Hardware postet, erhält i.d.R. keinen Support. Das Arch Linux ARM – Projekt betreibt ein eigenes Forum, in dem man seine Fragen stellen sollte.

Die Software-Installation erfolgt hingegen analog zum normalen Arch Linux; hier kann man also die Anleitungen aus dem Arch Linux – Wiki befolgen. Einige Pakete sind jedoch leider nicht für Arch Linux ARM verfügbar; Dropbox sei hier als besonders ärgerliches Beispiel genannt. In diesen Fällen kann man nur hoffen, dass diese Pakete eines Tages auch für ARM verfügbar sein werden. In manchen fallen hilft allerdings ein Blick ins AUR. Arch Linux ARM hat übrigens die Besonderheit, dass es als Paketquelle auch (einen Teil des) AUR anbietet. Im Zweifelsfall also einfach mal versuchen, das gewünschte Paket ganz normal über pacman zu installieren.

Voraussetzungen

Im Wesentlichen brauchen wir drei Dinge:

  • Ein in den Developer Mode versetztes Chromebook
  • Eine Internetverbindung zum Download des Betriebssystem-Images
  • Eine SD-Karte, 4GB oder größer, auf die das Betriebssystem installiert wird

Die Vorbereitung der Installation erfolgt vollständig über das Chromebook, es ist kein zusätzlicher Rechner erforderlich.

Ich beschränke mich hier auf die Installation und Konfiguration eines minimal lauffähigen, für einen Window Manager vorbereitetes System. Ich verwende Nano als Editor; wer lieber mit Vi arbeitet, kann natürlich stattdessen genau so gut Vi verwenden.

Der Developer Mode

Als erstes muss man das Chromebook in den Developer Mode versetzen. Die Informationen stammen von der Chromium-Projekt-Website.

Achtung!
Beim Aktivieren des Developer Mode gehen lokal gespeicherte Daten verloren! Alle Chrome-Einstellungen, -Plugins und -Apps werden nach einem Neustart neu geladen. Dateien, die im Download-Ordner gespeichert waren, werden NICHT wiederhergestellt!

Bei einem ausgeschalteten Chromebook drückt man zunächst ESC und REFRESH (F3-Taste). Während man beide gedrückt hält, startet man das Chromebook mit einem Antippen des Power-Buttons. Das führt dazu, dass das Chromebook im Recovery-Modus startet.

Im Recovery-Modus drückt man STRG+D (es gibt keine Aufforderung, das zu tun, also nicht wundern). Nach einer Bestätigungsabfrage wird das Chromebook in den Developer Mode versetzt. Dabei wird Chrome OS völlig neu installiert; das nimmt etwa eine halbe Stunde Zeit in Anspruch.

Chromebook im Developer Mode

Chromebook im Developer Mode

 

Nach der Aktivierung des Developer Mode erscheint bei jedem Start eine Meldung, die man entweder mit STRG+D oder STRG+U quittieren kann. Mit STRG+D startet man Chrome OS, mit STRG+U startet man von der SD-Karte. Die Leertaste, wie vorgeschlagen, sollte man nicht drücken; in diesem Fall wird der Developer Mode wieder deaktiviert.

Wir haben noch keine bootfähige SD-Karte und starten daher zunächst wieder Chrome OS mit STRG+D. Nicht erschrecken: zwar präsentiert sich Chrome OS nach dem Neustart „nackt“ wie im Auslieferungszustand, nach der Anmeldung werden jedoch alle Chrome-Einstellungen, -Plugins und -Apps im Hintergrund neu geladen.

Download und Installation des Betriebssystems [obsolet]

Als erstes wechseln wir in Chrome OS ins integrierte Terminal. Dazu öffnen wir ein neues Chrome-Fenster und drücken wir STRG+ALT+T. Dort tippen wir nacheinander shell und sudo su ein, was wir jeweils mit ENTER bestätigen. Damit sind wir als Root-User angemeldet.

Wenn das das erste Mal ist, dass von einer SD-Karte gestartet werden soll, müssen wir das im System erst erlauben. Das erreichen wir durch Eintippen von

crossystem dev_boot_usb=1 dev_boot_signed_only=0

Anschießend starten wir das Chromebook neu und melden uns erneut als Root-User in der Shell an.

Als nächstes legen wir die SD-Karte ein. Diese wird automatisch gemountet, was wir nicht wollen. Mit

umount /dev/mmcblk1/*

hängen wir alle vorhandenen Partitionen auf der SD-Karte aus.

Jetzt laden wir das Arch Linux System-Image herunter, welches wir direkt im Anschluss auf die SD-Karte entpacken:

cd /tmp
wget http://us.mirror.archlinuxarm.org/os/ArchLinuxARM-chromebook-latest.img.gz
umount /dev/mmcblk1*
zcat ArchLinuxARM-chromebook-latest.img.gz > /dev/mmcblk1
sync

Damit sind wir grundsätzlich schon fertig.

Anpassen der SD-Partitionsgröße [obsolet]

Nach dem Flashen des Images werden 4 Gb auf der SD-Karte als Partition verwendet. Verwendet man eine größere Karte, macht es Sinn, die Partition zu vergrößern. Wer möchte, kann auch eine /home-Partition oder eine Swap-Partition anlegen; ich gehe hier jedoch vom einfachsten Fall aus: keine /home-Partition und kein Swap.

Zunächst starten wir das Chromebook neu, starten mit STRG+D erneut Chrome OS und wechseln wie gehabt in die Shell. Dort hängen wir mit

umount /dev/mmcblk1/*

erneut alle Partitionen aus.

Das Image, das wir auf die SD-Karte geschrieben haben, legt ein GPT-Partitionsschema an. Bei GPT wird das Inhaltsverzeichnis, die Partitionstabelle, in die ersten Sektoren des Datenträgers geschrieben – zusätzlich wird allerdings eine Backup-Tabelle ans Ende der Karte geschrieben. Da das Image jedoch kleiner ist als unsere SD-Karte, befindet sich die Backup-Tabelle in unserem Fall jetzt mitten auf der Karte und nicht am Ende. Sie ist somit im Weg, wenn wir die System-Partition vergrößern wollen; ganz abgesehen davon gehört die Backup-Tabelle nunmal ans Ende eines Datenträgers.

kleiner ist als die Deshalb reparieren wir die SD-Karte als erstes mit:

parted /dev/mmcblk1

In parted tippen wir als erstes p ein, gefolgt von ENTER. Es erscheint folgende Meldung:

Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)?
Fix/Ignore/Cancel?

Wir tippen „Fix“ ein und bestätigen mit ENTER. Bei mir kam die gleiche Meldung ein zweites Mal; hier wieder „Fix“ eintippen und bestätigen. Mit „w“ und ENTER schreiben wir die Änderungen in die Partitionstabelle.

Jetzt sind wir soweit, dass wir die Partition vergrößern können. Dazu nutzen wir das Chromebook-spezifische Programm cgpt. Nacheinander führen wir aus:

cgpt repair /dev/mmcblk1
cgpt show /dev/mmcblk1

Nun bekommen wir eine Übersicht über die Partitionstabelle auf unserer SD-Karte. Bei mir (16 GB Samsung Class 10 SHDC) schaut das folgendermaßen aus:

 start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
8192 32768 1 Label: "KERN-A"
Type: ChromeOS kernel
UUID: 8507A6CC-5DF9-4069-B24F-5280566C99BF
Attr: priority=10 tries=5 successful=1
40960 32768 2 Label: "KERN-B"
Type: ChromeOS kernel
UUID: 56616F21-B70C-45AD-9626-A7E4A5C489BA
Attr: priority=5 tries=5 successful=1
73728 9691764 3 Label: ""
Type: Linux data
UUID: 72A0B77B-7EE2-417E-9990-5097CFBA5313
30702559 32 Sec GPT table
30702591 1 Sec GPT header

Es werden drei Partitionen angezeigt: die ersten beiden sind Kernel-Partitionen, die dritte beherbergt das Betriebssystem. Genau diese Partition wollen wir vergrößern. Was wir dazu wissen müssen, ist, wie groß der freie Platz zwischen der dritten Partition und der Backup-Partitionstabelle ist.

Diese Übersicht liest sich in meinem Fall folgendermaßen (bitte entsprechend der eigenen Anzeige abändern): Die Partition 2 (KERN-B) beginnt bei 40.960 kBytes und hat eine Länge von 32.768 kBytes. Dementsprechend sollte die dritte Partition (Label: „Linux-Filesystem“) in Sektor 73.728 beginnen – und siehe da, das tut sie auch. Sie ist allerdings nur 9.691.864 kBytes lang (und endet somit bei 9.765.591 kBytes). Die Backup-Partitionstabelle beginnt jedoch erst bei 30.702.559 kBytes. Der Platz dazwischen ist somit ungenutzt. Das werden wir nun ändern.

Wir nutzen dazu den Befehl cgpt add, der nicht nur eine neue Partition erstellt, wie der Name suggeriert, sondern auch eine vorhandene Partition in ihrer Größe ändern kann. Die Befehlssyntax lautet:

cgpt add -i [Partition] -b [Anfang] -s [Größe]

Die Größe der Partition 3 berechnen wir, in dem wir vom Beginn der Backup-Partitionstabelle den Beginn der Partition 3 abziehen, in meinem Fall also 30.702.559 – 73.728 = 30.628.871. Der Befehl schaut dann so aus:

cgpt add -i 3 -b 73728 -s 30628871

Wir kontrollieren das Ergebnis:

cgpt repair /dev/mmcblk1
cgpt show /dev/mmcblk1

start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
8192 32768 1 Label: "KERN-A"
Type: ChromeOS kernel
UUID: 8507A6CC-5DF9-4069-B24F-5280566C99BF
Attr: priority=10 tries=5 successful=1
40960 32768 2 Label: "KERN-B"
Type: ChromeOS kernel
UUID: 56616F21-B70C-45AD-9626-A7E4A5C489BA
Attr: priority=5 tries=5 successful=1
73728 30702558 3 Label: ""
Type: Linux data
UUID: 72A0B77B-7EE2-417E-9990-5097CFBA5313
30702559 32 Sec GPT table
30702591 1 Sec GPT header

Schaut gut aus! Aber wenn wir jetzt neu starten würden, wäre der verfügbare Platz genau so groß wie vorher! Warum? Wir haben zwar die Größe der Partition angepasst, nicht jedoch die Größe des ext4-Dateisystems, welches auf der dritten Partition installiert ist.

Führen wir zunächst eine Überprüfung des Dateisystems aus und vergrößern dann das Dateisystem :

fdisk /dev/mmcblk1p3
resize2fs /dev/mmcblk1p3

Fast geschafft! Damit wir von der SD-Karte booten können, müssen wir als letztes einer der beiden Kernel-Partitionen eine höhere Boot-Priorität geben als der anderen:

cgpt repair /dev/sdb
cgpt add -i 1 -S 1 -T 5 -P 10 -l KERN-A /dev/mmcblk1
cgpt add -i 2 -S 1 -T 5 -P 5 -l KERN-B /dev/mmcblk1

Fertig! Jetzt können wir die Shell beenden und von der SD-Karte starten.

Basis-Konfiguration

Arch Linux startet und wir können uns als Root mit Passwort alarm anmelden. Jetzt beginnen wir mit der Konfiguration. Ich beschränke mich hier auf die grundsätzlichen Dinge; eine ausführliche Anleitung gibt es im Beginner’s Guide im offiziellen Arch Wiki.

1. Sprache und Zeitzone einstellen

Bevor wir irgendetwas anderes machen, stellen wir die Sprache und das Tastaturlayout auf Deutsch um:

loadkeys de-latin1

Der Befehl macht auf dem voreingestellten englischen Tastaturlayout Probleme; um den Befehl richtig einzugeben, muss man folgendes eintippen:

loadkezs deßlatin1

Danach kann man ganz normal „auf Deutsch“ tippen. Weiter gehts; wir ändern die geladenen Sprachpakete:

ano /etc/locale.gen

In dieser Datei sind die Lokalisierungen vermerkt, die aktiviert werden sollen. Man aktiviert sie, indem man die Raute vor der entsprechenden Zeile entfernt, deaktivieren tut man sie umgekehrt. Wenn es keinen expliziten Grund gibt, der dagegen spricht, aktiviert man am Besten die UTF-8-Variante einer Lokalisierung. In meinem fall habe ich en_US.UTF-8 und de_AT.UTF-8 aktiviert. Leute aus der Schweiz oder Deutschland ersetzen das AT einfach gegen ein CH oder DE.

Mit STRG-X beenden wir nano und bestätigen die Speicherabfrage mit ENTER.

Anschließend stellen wir die Systemsprache um und führen locale-gen aus:

echo LANG=de_AT.UTF-8 > /etc/locale.conf
export LANG=de_AT.UTF-8
locale-gen

Wer mag, kann auch die Schriftart des Terminals verändern:

setfont Lat2-Terminus16

Um das dauerhaft zu tun, kann man folgenden Befehl ausführen:

ano /etc/vconsole.conf

und in die Datei eingeben:

KEYMAP=de-latin1
FONT=Lat2-Terminus16

Anschließend stellen wir die korrekte Zeitzone ein. Da schon eine Zeitzone eingestellt ist, müssen wir diese zunächst entfernen:

rm /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Vienna /etc/localtime

Statt Vienna kann man natürlich auch Berlin oder Bern wählen; an der Uhrzeit ändert dies (hoffentlich) nichts. 😉

Zum Schluss synchronisieren wir noch die Uhr:

hwclock --systohc --utc

2. Online gehen

Die Suche des Drahtlosnetzwerks ist sehr komfortabel, dank dem grafischen wifi-menu:

sudo wifi-menu mlan0

3. Pakete aktualisieren und installieren

Als erstes führen wir ein System-Update aus und initialisieren den Schlüsselbund:

pacman -Sy pacman
pacman-key --init
pacman -S archlinux-keyring
pacman-key --populate archlinux
pacman -Syu

In Zukunft kann man wie gehabt mit pacman -Syu aktualisieren.

4. Useraccount anlegen und sudo installieren

Zunächst ändern wir das Passwort für den root-Account.

passwd

Als nächstes legen wir einen neuen Benutzer mit Standard-Rechten an und geben auch ihm ein Passwort.

useradd -m -g users -s /bin/bash [Accountname]
passwrd [Accountname]

Bevor wir uns vom root-Account abmelden, installieren und konfigurieren wir noch sudo:

pacman -S sudo
nano /etc/sudoers

Dort aktivieren wir durch Entfernen des Kommentarzeichens (%) die Zeile

%wheel ALL=(ALL) ALL

und speichern wie gehabt mit STRG+X und ENTER.

Damit unser Benutzeraccount Zugriff auf das sudo-Kommando hat, müssen wir ihn der Benutzergruppe wheel hinzufügen, die wir soeben für das sudo-Kommando autorisiert haben:

gpasswd -a [Accountname] wheel

Jetzt melden wir uns mit logout ab und als normaler Benutzer wieder an.

5. X installieren und konfigurieren

Als nächstes installieren wir X. Für den Videotreiber haben wir zwei Optionen: xf86-video-fbdev oder xf86-video-armsoc. Obwohl armsoc speziell für Geräte wie das ARM-Chromebook konzipiert ist, erzielt man mit dem Standard-fbdev-Treiber derzeit eine bessere Grafikleistung.

sudo pacman -S xorg-server xorg-xinit xorg-server-utils mesa xf86-video-fbdev xf86-input-synaptics unzip

Dank der Vorarbeit von Craig Errington müssen wir zur Einrichtung von X lediglich ein zip-File downloaden und entpacken (weshalb wir im vorherigen Schritt auch unzip mitinstallieren) – dann ist X einsatzbereit.

cd /etc/X11/xorg.conf.d/
sudo rm *
sudo wget http://craigerrington.com/chrome/x_alarm_chrubuntu.zip
sudo unzip x_alarm_chrubuntu.zip
sudo rm x_alarm_chrubuntu.zip

Um das Tastaturlayout unter X auf Deutsch umzustellen, müssen wir die Datei 10-keyboard.conf anpassen:

ano 10-keyboard.conf

Hier wechseln wir das Kürzel hinter XkbLayout auf de und speichern.

 Option "XkbLayout" "de"

Fertig!

6. Kleinere Probleme beheben

Das Chromebook wechselt nicht in den Standby-Modus, wenn man den Deckel schließt. Um das zu ermöglichen werden, muss zunächst ACPI-Support installiert werden:

pacman -S acpid pm-utils

Anschließend muss dem ACPI-Daemnon mitgeteilt werderen, was er tun soll, wenn der Deckel geschlossen wird. Dies tut man, in dem man die Datei /etc/acpi/handler.sh bearbeitet und im Abschnitt button/lid folgenden Code eingibt:

button/lid)
case "$3" in
close)
logger 'LID closed'
pm-suspend
;;

Anschließend aktiviert man die ACPI-Daemon mit:

systemctl enable acpid
systemctl start acpid

UPDATE
Mit dem Erscheinen des neuen Installations-Guide wurden noch einige weitere Workarounds zur Anleitung hinzugefügt, zu finden im Tab „Advanced“. Dort wird auch beschrieben, wie man mit dem oben beschriebenen Audio-Problem umgehen kann.

Das Ergebnis

Hier endet der Guide. Grundsätzlich sollte nun alles so weit funktionieren, dass man mit der Installation eines Window Managers beginnen kann. Grundsätzlich in Frage dafür kommen Leichtgewichte wie Openbox, IcyBox, LXDE oder XFCE. Da das letztendlich Geschmacksache ist, verweise ich hier auf die entsprechenden Artikel im Arch Linux Wiki.

Ich selbst verwende Openbox mit Tint2 und cairo-compmgr und bin mit der Performance sehr zufrieden. Nachteilig ist wie gesagt das Fehlen von ARM-Unterstützung für einige Pakete; Dropbox hatte ich schon erwähnt, aber auch das Fehlen von Flash ist gelegentlich ärgerlich.

Alles in allem läuft mein Chromebook trotz des experimentellen Charakters extrem stabil. Wer auf die Audioausgabe verzichten kann und experimentierfreudig ist, dem lege ich ans Herz, das Ganze einfach mal auszuprobieren.

Für die nicht ganz so Experimentierfreudigen gibt es übrigens mit ChrUbuntu auch eine Ubuntu-Version für das Chromebook.

GD Star Rating
loading…

Dieser Blogeintrag wurde 2510 mal gelesen.

Kategorien: Computer, Hardware und Linux.