Windows10-Upgrade zerstört Grub-Konfiguration

Auf meinem Arbeitsnotebook mit LinuxMint 17.1 habe ich nebenher noch ein Windows 8.1 mit Grub und entsprechend mühsam eingerichteter UEFI-Konfiguration am Laufen. Nun kam der Tag des (automatisierten) Windows-10-Upgrades. Mutig, wie ich ja bin, habe ich das einfach mal laufen lassen. Hat auch alles auf den ersten Blick geklappt, aber dann kam der große Schreck: Beim Versuch, das Grub-Bootmenü von Linux zu starten, rannte der Rechner prompt in den – genau – Grub-Rescue-Prompt. Somit war LinuxMint erst mal nicht mehr erreichbar.

Wie ich später herausfand, hat das Windows-10-Upgrade die Reihenfolge und Attribute der Partitionen verändert (getreu dem Gebot „Du sollst keine anderen OS neben Windows 10 haben“) – die Linux-Bootpartition war nicht mehr dort, wo Grub sie vermutete. Ich hätte jetzt versuchen können, ein Linux von einer Boot-CD-ROM oder einem USB-Stick zu starten, um dann Reparaturversuche durchzuführen. Ich habe es dann aber doch mit Bordmitteln auf dem Grub-Rescue-Prompt hinbekommen.

Zunächst habe ich mit „ls“ nachgesehen, welche Partitionen überhaupt vorhanden sind. Ergebnis bei mir war (hd0,gpt10), (hd0,gpt9), (hd0,gpt8) … (hd0). Welche davon ist jetzt die Linux-Partition, die ich starten möchte? Das findet man heraus, indem man nacheinander „ls (hd0,gpt1)/“, „ls (hd0,gpt1)/boot“, „ls (hd0,gpt2)/“, „ls (hd0,gpt2)/boot“ usw. eingibt. Meist wird man eine Fehlermeldung erhalten, dass das Filesystem nicht erkannt werden konnte. Irgendwann wird man aber das Laufwerk entdecken, welches das Linux-Hauptverzeichnis enthält – das war in meinem Fall (hd0,gpt9). Viel Spaß übrigens mit der deutschen Tastatur und den Zeichen „()/=“ 🙂

Als nächstes habe ich mit „set“ kontrolliert, wo Grub seine Konfigurationsdateien sucht. Das Ergebnis war in meinem Fall:

prefix=(hd0,gpt8)/boot/grub
root=(hd0,gpt8)

Aha! Ich habe doch zuvor festgestellt, dass mein Linux-Laufwerk (hd0,gpt9) ist. An der Stelle hat Windows 10 also herumfuhrwerkt! Ehemals Partition gpt8 ist jetzt gpt9. Jetzt gilt es also, die Einstellungen für prefix und root so einzustellen, dass Grub seinen Kram wieder findet. Und das geht so:

set prefix=(hd0,gpt9)/boot/grub
set root=(hd0,gpt9)

Wenn man jetzt in die normale Menüansicht von Grub möchte, gibt man Folgendes ein:

insmod normal
normal

Wenn Sie alles richtig gemacht haben, sehen Sie jetzt wieder Ihr altbekanntes Grub-Bootmenü. Juhuuuuu! Aber nicht zu früh freuen! Beim nächsten Booten rennen Sie garantiert wieder in den Grub-Rescue-Prompt. Wenn Sie jetzt auf dem Grub-Bootmenü stehen, stellen Sie den Leuchtbalken auf den Eintrag, der Ihr Linux starten soll, und drücken ‚e‘ (wie „edit“). Hier ändern Sie jetzt überall, wo noch der falsche gpt-x-Wert steht, auf den neuen – bei mir also überall, wo noch ein gpt8 steht, ein gpt9 setzen. Nun F10 drücken – und Linux startet!

Nun sind wir auch schon fast am Ziel. In einer Konsole geben wir nun noch ein „sudo grub-install“ ein, und Grub wird aktualisiert – auch das neue Windows wird erkannt. Jetzt kontrollieren wir nochmal zur Sicherheit die /etc/fstab mit einem Editor (nano, vim, was Sie mögen). Die gemounteten Partitionen mit einem UUID-Identifier stellen natürlich kein Problem dar, sollten Sie dort aber Laufwerke mit einem /dev/…-Eintrag finden, sollten Sie die entsprechende Zeile auf die neuen Gegebenheiten anpassen.

 

Wieder einmal PuTTY: Darstellung von Linien, Umlauten und Sonderzeichen

Ich greife öfter mittels des Terminalprogramms PuTTY unter Windows auf Linux-Rechner zu – insbesondere auf meine Raspberry Pis. Nun kommt es immer wieder mal vor, dass bestimmte zeichenorientierte Anwendungen auf einer Linux-Konsole in PuTTY falsch dargestellt werden. Ich muss z. B. häufig mit dem alsamixer Audio-Einstellungen der USB-Soundcard eines Raspberrys ändern. Aus den gewohnten Rahmenlinien wird in PuTTY ein Buchstaben-Mix umgesetzt, die als lppk-Zeichenfolge bekannt ist. Hinzu kommt, dass die F-Tasten in PuTTY nicht richtig funktionieren und dafür sorgen, dass alsamixer beendet wird, wenn ich mit F3 bzw. F4 zwischen den Wiedergabe- und Aufnahmeeinstellungen umschalten will. Hier helfen einige PuTTY-Einstellungen.

raspberry_putty-lqqk

Diese verwurstete Darstellung nervt mich schon seit Jahren.

 

Unter Connection/Data ist es wichtig, dass man im Feld „Terminal-type String“ das vorgegebene „xterm“ durch das Wort „linux“ ersetzt. Achtung – kontextsensitiv! „linux“ muss komplett kleingeschrieben werden. Somit haben wir die richtige Rahmendarstellung schon mal im Griff. Nun ist es noch wichtig, unter Terminal/Keyboard unter „Function keys and keypad“ den Radiobutton „Linux“ zu setzen – dann funktioniert es auch mit den F-Tasten.

putty-alsamixer

So soll es sein!

 

Eigene Webseiten vor fremden Frames schützen

Es kommt ja immer wieder mal vor, dass die eigene Homepage irgendwo im Web von fremden Leuten per HTML-Frame eingebunden wird – diese Leute machen sich also fremde Webseiten zu eigen. Okay – das mag allenfalls ein urheberrechtliches Problem sein, aber man kann diese uralte HTML-Technik (Frames sind in HTML5 nicht mehr vorgesehen!) auch für richtig bösartige Sachen nutzen. Da baut sich jemand Böses einen Frameset, bindet darin meine Webseite ein und verlinkt seinen Frameset z. B. bei Twitter. Nun wird meine Webseite von zigtausenden Surfern angeklickt – schlimmstenfalls reißt das meinen Webserver in die Knie. Oder jemand lässt mittels Frames meine schöne, hochkulturell wertvolle Seite zusammen mit was-weiß-ich-was-für Seiten im Browser erscheinen.

Wie kann man das nun verhindern? Nun, ich betreibe eine kleine Homepage auf einem Apache2-Server auf einem Raspberry Pi (für wenige Besucher pro Stunde reicht das voll und ganz). In der httpd.conf habe ich eine Zeile eingefügt, welche bewirkt, dass in dem HTTP-Response-Header eine Anweisung ausgegeben wird, dass meine Webseiten nur von meinem eigenen Webserver in Frames eingebunden werden darf. Diese Zeile lautet wie folgt:

Header always append X-Frame-Options SAMEORIGIN

Anstatt „SAMEORIGIN“ kann man auch die Option „DENY“ setzen. Dann darf nicht mal mehr mein eigener Webserver den Content in Frames darstellen – wer weiß, was meine Designer-Kollegen da für einen Unfug treiben 🙂

Nachdem man die Änderung in der httpd.conf gespeichert hat, startet man den Webserver mit sudo service apache2 restart neu. Sollte es beim Neustart zu Fehlermeldungen kommen, ist in der Apache2-Konfiguration das Modul „mod_headers“ nicht aktiviert. Dies kann man nachholen, in dem man in der Konsole „sudo a2enmod headers“eingibt. Jetzt sollte der Apache2-Neustart fehlerfrei laufen.

Und wie testet man jetzt, ob die Änderung wirklich aktiv ist? Hier gibt es eine Testseite, in der man sich den HTTP-Header des eigenen Webservers (und natürlich jedes anderen Webservers der Welt) ansehen kann. Dort sollte jetzt die Zeile

X-Frame-Options: SAMEORIGIN

erscheinen.

Übrigens: Wenn Sie keinen Zugriff auf die Servereinstellungen Ihres Webspaces haben – man kann auch mit .htaccess das Kapern Ihrer Webseiten mit Frames verhindern. Die hinzuzufügende Zeile lautet: Header append X-FRAME-OPTIONS „SAMEORIGIN“

Ach ja, und wo wir schon mal dabei sind: Wenn Sie in der Auflistung des HTTP-Headers die Zeile sehen: „X-Powered by“ – und dahinter Ihre detaillierte PHP-Version (ein Freudenfest für Hacker!), sollte man das schleunigst in der php.ini abschalten, indem man in der Zeile expose_php = On das „On“ durch ein „Off“ ersetzt.

Linux Mint mit apt-get online upgraden

Ich arbeite seit einiger Zeit produktiv auf einem Linux-Mint-Notebook. Ebenfalls seit einiger Zeit werden für Linux Mint 15 (Olivia) online keine Updates mehr geliefert. Nun ist es so, dass Mint empfiehlt, ein Upgrade auf eine neue Version nach der Brachial-Methode durchzuführen. D. h. Backup der persönlichen Daten und Einstellungen mit dem Mint-eigenen Backup-Tool, Festplatte plätten und neue Version von CD/DVD installieren – und dann mit besagtem Backup-Tool eigene Software, Einstellungen und Daten wieder restoren. Soll ja angeblich viel sauberer und sicherer sein und bla …

Das habe ich vor ein paar Monaten bei Erscheinen der Version 16 (Petra) ein einziges Mal genau so durchgezogen – mache ich aber auch nie wieder so! Die neue Version wollte nach der Installation nicht so recht (Probleme mit Grafik und WLAN), und das Wiedereinspielen von dem eigenen Krams passte vorne und hinten nicht mehr. Also habe ich alles wieder gelöscht und Version 15 eingespielt. Auch hier erwies sich das Restore etwas problematisch, aber nach ca. einer Woche hatte ich meine (offenbar doch sehr spezielle) Konfiguration wieder so, wie ich es brauchte. Also viel Zeit kaputt gekriegt für nichts und wieder nichts.

Nun blieben unter Linux Mint 15 allmählich die Updates aus, also musste ich doch mal einen Weg finden, das System auf Version 16 lauffähig zu kriegen. Also habe ich mich an ein Online-Update mittels apt-get gewagt. Um es kurz zu machen: Es hat alles auf Anhieb geklappt. Vorgehensweise wie folgt:

In einer Konsole folgende Befehlszeilen abdrücken:

sudo sed -i ’s/raring/saucy/‘ /etc/apt/sources.list
sudo sed -i ’s/olivia/petra/‘ /etc/apt/sources.list
sudo sed -i ’s/raring/saucy/‘ /etc/apt/sources.list.d/official-package-repositories.list
sudo sed -i ’s/olivia/petra/‘ /etc/apt/sources.list.d/official-package-repositories.list

Und dann das eigentliche Upgrade:

sudo apt-get update
sudo apt-get dist-upgrade

Jetzt gehen Sie erst mal – je nach Bandbreite Ihrer Internetverbindung und Tempo Ihres Rechners – für zwei Stunden Kaffee trinken. Schauen Sie aber zwischendurch immer mal, was sich so tut, denn zwischendurch kommen immer mal Fragen, ob neue Konfigurationsdateien installiert werden sollen. Lieber immer auf „N“ wie „No“ tippen – wenn alles läuft, kann man hinterher immer noch manuell eingreifen.

HALT – noch nicht neu booten! Wenn alles durch ist, noch einmal mit

sudo apt-get upgrade

das System auf den neuesten Stand bringen. Hierbei werden auch noch evtl. defekte Paketabhängigkeiten repariert.

Abschließend mit sudo shutdown -r now den Rechner neu starten.

Viel Glück 😉

 

Grub2 passend machen (oder reparieren)

Mir passiert es immer wieder, dass bei Testinstallationen und LiveCDs verschiedener Linux-Distributionen (LinuxMint 15 und 16, ubuntu 13.04 und 13.10) insbesondere bei Notebooks nach dem Start aus dem Grub2-Menü der Bildschirm schwarz (also richtig dunkel) wird und das ganze System festhängt – es bleibt nur noch langes Drücken auf den PowerOff-Knopf. Grund ist, dass der Kernel beim Initialisieren der Grafik verschiedene Auflösungen „ausprobiert“, was bei manchen Grafikchips dann eben schief geht. Über den Recovery-Modus kann man das System in der Regel aber immer noch irgendwie starten, was ja aber keine Dauerlösung sein kann.

Hier gibt es zwei Lösungsschritte. Man kann versuchen, mittels Grub dem Linux-Kernel den Startparameter „nomodeset“ auf den Weg zu geben. Wenn man also das Grub-Startmenü vor sich sieht und auf dem ersten Listeneintrag steht, drückt man ‚e‘, um den Menüeintrag zu editieren. Nun fügt man in der Zeile mit „splash quiet“ das besagte „nomodeset“ hinzu. Jetzt drückt man Strg-X oder F10, um mit den geänderten Parametern das Betriebssystem zu starten. Jetzt sollte das Starten in den Grafikmodus zum Login-Bildschirm funktionieren.

Nun wäre es natürlich lästig, jedesmal in Grub herumzueditieren, wenn man sein ubuntu oder LinuxMint hochfahren will. Den besagten Parameter „nomodeset“ muss noch dauerhaft in Grub2 gespeichert werden. Und das macht man so:

Man öffnet mit root-Rechten die Datei /etc/default/grub – ob mit „sudo nano“ im Terminal oder mit gedit, überlasse ich dem geneigten User. In dieser Datei sucht man dann die Zeile ‚“GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash“‚ und schreibt hinter dem „splash“ noch „nomodeset“. Die ganze Zeile sollte also so aussehen:

GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash nomodeset“

Nun diese Datei speichern. Damit Grub2 diese Änderung auch annimmt, schießt man im Terminal noch ein „sudo update-grub“ ab.

Nach einem Neustart wird der Listeneintrag im Grub-Menü wie gewünscht funktionieren. Übrigens kann man in der Datei /etc/default/grub sein Startmenü auch optisch noch ein wenig aufhübschen (Auflösung, Hintergrundfarbe). Mehr dazu hier.

IPv6 und Firefox unter Linux

Ich habe auf einem neuen Notebook ein frisches LinuxMint 15 aufgesetzt und verschiedene Browser eingespielt, wie man das so als Webdeveloper macht. Ich habe in meinem Intranet eine Webseite, auf der angezeigt wird, ob man mit IPv4 oder IPv6 ankommt (auch hier auf der Blogseite unten links gibt es sowas). Nun fiel mir auf, dass der Firefox mir an der Stelle ansagt, ich käme lediglich mit IPv4 an. Die anderen Browser (SRWIron, Opera) zeigten mir hingegen an: alles ok mit IPv6. Wat is dat dann???

Die Lösung: bei der Firefox-Installation in Linuxmint ist standardmäßig die Suche nach einem IPv6-DNS abgeschaltet – warum auch immer. Ändern kann man das wie folgt: in der Adresszeile vom FF „about:config“ eingeben. Die Warnung „Hier erlischt eventuell die Garantie“ ignorieren wir geflissentlich. Nun geben wir in der Suchzeile den Begriff „ipv6“ ein. Nun landen wir auf einer einzigen Zeile „network.dns.disableIPv6“. Der Wert steht mit Sicherheit auf „true“. Doppelklick drauf – dann steht der Wert auf „false“. Browser neu starten – und nun kann der Feuerfuchs auch IPv6. Echt jetzt!

Scannen mit Gimp 2.8 unter Linux

Schon seit Ewigkeiten scanne ich mit einem All-in-one-WLAN-Scanner/-Drucker mit dem ubuntu-Tool „Simple Scan“, um das so entstandene Bild anschließend mit Gimp zu bearbeiten. Nun wollte ich mir diesen einen Zwischenschritt sparen – es muss doch möglich sein, direkt in Gimp zu scannen.

Geht natürlich. Mit Sane bzw xsaneimage. Falls noch nicht geschehen, mit dem entsprechenden Installationstool nachinstallieren (synaptic oder sudo apt-get install sane). Zunächst überprüft man mit scanimage –list-device, ob der Scanner korrekt im System vorhanden und erreichbar ist. Da sollte dann etwa sowas in der Art rauskommen wie „device ‚hpaio:/net/Deskjet_3050_J610_series?zc=HP025B5A‘ is a Hewlett-Packard Deskjet_3050_J610_series all-in-one“ – oder so ähnlich.

Nun erzeugt man im Verzeichnis „~/.gimp-2.8/plug-ins“ einen Symlink mit ln -s /usr/bin/xscanimage xscanimage .

Gimp - Scannen mit xscanimage (Sane)

Jetzt kann man endlich in Gimp scannen, und zwar über „Datei > Erstellen > xscanimage > Device Dialog…“ (vorher sollte man natürlich mit „Neu…“ eine neue Bildfläche erstellen). Hier öffnet sich dann der xscanimage-Dialog mit den Voreinstellungen und der Scan-Vorschau. Das Ergebnis lässt sich hier dann als XCF oder jedem beliebigen anderen Bildformat speichern.

Java-Plugin für alle Browser in ubuntu 13.04

Hin und wieder besuche ich immer wieder mal Webseiten, die ein Java-Plugin benötigen (z. B. das Online-Magnetometer DK0WCY in Scheggerott). In ubuntu-Linux hatte jedoch keiner meiner benutzten Browser – als da wären Epiphany, Opera, SRW Iron und Firefox – ein Java-Plugin aktiviert. Nun wusste ich aus früheren Versionen, dass man da z. T. mit lib*.so-Dateien in verschiedenen Verzeichnissen hantieren musste, die sich bei Updates auch immer wieder mal änderten.

Das ist nun vorbei. Standardmäßig ist bei ubuntu13.04 OpenJDK 6 (weitestgehend kompatibel mit Sun-Java JRE 7) bereits an Bord, nur das jeweilige Browser-Plugin (icedtea6) fehlte. Diesen habe ich nachinstalliert wie folgt:

sudo apt-get install openjdk-6-jre icedtea6-plugin

Danach funktionierten Java-Applets in all meinen Browsern.

Über die Diskussion rund um immer wieder auftretende Sicherheitslücken der Java-Plugins will ich mich an dieser Stelle nicht auslassen 😉

Apache und .htaccess auf dem Raspberry Pi

Ich habe auf meinem Raspberry Pi einen Apache2 laufen, der auch meistens per WLAN über den Router ans Netz angebunden ist. Nun ist der Apache in der Standardinstallation eine höchst unsichere Kiste. Verzeichnisse unter /var/www sind offen einsehbar, was natürlich nicht so lustig ist. Also ist hier das Anlegen einer .htaccess-Datei die erste Wahl. Dazu muss die Nutzung der .htaccess erst einmal aktiviert werden.

Man öffnet dazu mit nano, vi oder dem Editor Ihrer Wahl die Datei ‚/etc/apache2/sites-available/default‘. Dort findet man eine Zeile „AllowOverride None“. Die ändert man zu „AllowOverride All“. Zu beachten ist hier, dass man diese Zeile mehrfach findet. Wir bearbeiten hier den Bereich „<Directory /var/www“.

Jetzt können wir im Web-Hauptverzeichnis eine leere Datei .htaccess anlegen. Um Verzeichnisse unsichtbar zu machen (403 – Forbidden), schreiben wir die Zeile „Options -Indexes“ hinein.

Jetzt die Änderungen speichern und den Apache neu starten (sudo service apache2 restart). Ab jetzt sind die Dateien in den Unterverzeichnissen mit dem Browser nicht mehr einsehbar.

Eine nette Übersicht aller .htaccess-Funktionen auf Deutsch findet man unter http://www.trash.net/faq/htaccess.shtml .

PuTTY und der Ziffernblock

Wenn ich mal mit Windows 7 arbeite (kommt selten genug vor 😉 ) und per SSH auf meinen Raspberry Pi zugreifen möchte, nutze ich PuTTY. Seit langem ärgert es mich ein wenig, dass ich auf dem Ziffernblock der Tastatur keine Ziffern im Terminalfenster erhalte, sondern die alternativen Steuerzeichen (so als ob NumLock off wäre).

Abhilfe ist ganz einfach: in den PuTTY-Einstellungen unter „Terminal > Features“ die Option „Disable Application Keypad mode“ aktivieren. Am besten gleich diese Änderung unter „Session“ bei den Saved Sessions dauerhaft speichern.

Dann klappts auch mit den Zahlen.