openSUSE 11.2 – mehrere Kernels parallel installieren

Im Normalfall wird der ältere Kernel unter openSUSE bei einem Update deinstalliert und der neue Kernel installiert. Dieses Verhalten stößt bei manchen Systemadministratoren auf Unverständnis. Das Problem lässt sich mit einem simplen Beispiel verdeutlichen. YaST2 bzw. zypper bietet ein Update zu einem neueren Kernel an. Man installiert daraufhin den neuen Kernel. Nach einem Neustart stellt man fest, dass der neuere Kernel eine Hardware-Komponente nicht mehr richtig anspricht. Auch ein Kernel-Panic ist vorstellbar, was zu einer Unbedienbarkeit des Systems führen kann.

Bevor wir uns ans Werk machen, müssen wir noch herausfinden, welche Kernel-Packages installiert sind. Dazu führen wir einfach in der Konsole folgenden Befehl aus:

zypper se -i kernel*

Bei mir sieht die Liste so aus:

Daten des Repositorys laden ...
Installierte Pakete lesen ...

S | Name                 | Zusammenfassung                                         | Typ
--+----------------------+---------------------------------------------------------+------
i | kernel-desktop       | Kernel optimized for the desktop                        | Paket
i | kernel-desktop-devel | Development files necessary for building kernel modules | Paket
i | kernel-source        | The Linux Kernel Sources                                | Paket

Jetzt öffnen wir die Konfigurationsdatei /etc/zypp/zypp.conf und suchen die Textstelle mit multiversion heraus:

##
## Packages which are parallel installable with
## diffent versions
##
# multiversion = kernel-default,kernel-smp 

Und fügen einfach anhand der vorliegenden Liste der installierten Kernel-Packages folgende Zeile ein:

multiversion = kernel-desktop,kernel-desktop-devel,kernel-source

Ab jetzt ist man wirklich auf der sicheren Seite und man kann nach einem Kernel-Update im Bootmenü die Kernels auswählen, die man starten möchte.

Linux – Partition mit ddrescue als Image sichern, mounten und retten

Hinweis: Hier wird auf das Tool ddrescue eingangen. Es existiert auch ein ähnlich klingendes Tool dd_rescue mit fast identischem Zweck. Jedoch sollte dd_rescue nicht mehr verwendet werden, weil das Tool veraltet ist. Zudem ist ddrescue eine komplette Neuprogrammierung. Ausserdem ist es auf Geschwindigkeit und geringere Fehleranfälligkeit beim Auslesen der Festplatte, einer Partition oder einer Datei optimiert.

Noch ein Hinweis für openSUSE 11.2 Nutzer:
In der aktuellen openSUSE 11.2 nennt sich das Package ddrescue, beinhaltet jedoch das veraltete Tool dd_rescue. Diese Package sollte in naher Zukunft ausgetauscht werden. Aus diesem Anlass empfehle ich das Package ddrescue direkt über mein Repo zu beziehen und zu installieren. http://download.opensuse.org/repositories/home:/Freespacer:/ddrescue/

Nun kommen wir zu unserem Thema Partitionssicherung. Für diesen Zweck verwende ich das Tool ddrescue. Es erstellt von einer Partition bzw. auch von einer Datei eine 1:1-Kopie. Das Tool hat auch ein nennenswerten Vorteil: Bei einem Lesefehler bricht es nicht ab, sondern macht einfach weiter. Hier hat das ältere dd_rescue das Nachsehen und quittiert hierbei seinen Dienst.

Um eine Partition z.B. /dev/sda3 in ein Image z.B. /home/benutzer/sicherung.img zu sichern, geben wir ihm folgenden Befehl:

# ddrescue [options] inputfile outputfile [logfile]
ddrescue /dev/sda3 /home/benutzer/sicherung.img

Jetzt können wir das Image ohne Probleme mounten. Es verhält sich so, als ob es eine echte Partition wäre. Man muss jetzt noch wissen, welches Dateisystem das Image hat. Und lässt sich mit folgendem Befehl schnell ermitteln:

# file [FILE...]
file /home/benutzer/sicherung.img

Als Ausgabe habe ich beispielsweise:

sicherung.img: Linux rev 1.0 ext3 filesystem data (large files)

Hier erkennen wir, dass es sich um ein ext3-Dateisystem handelt und geben die Option -t ext3 mit. Falls es abweichen sollte, bitte anpassen. Man kann diese Option auch weglassen. Jedoch muss man damit rechnen, dass das Einhängen des Images evtl. fehlschlagen wird, weil er das Dateisystem nicht kennt.

Nun können wir das Image mit der Option -r als schreibgeschützt mounten. Man kann auch dieses Image ohne Schreibschutz mounten. Dann wäre es aber eine sehr schlecht Kopie und könnte evtl. ein bereits defektes Dateisystem noch mehr kaputt machen. ;-) Da sich die Daten zwangsläufig verändern können. :-)

Zum Schluß haben wir noch eine Option -o loop und weisen damit dem mount-Befehl an, dass die lokale Image-Datei als Loop-Device ins derzeitige Dateisystem einbinden soll.

# Verzeichnis erstellen, in der wir das Image mounten wollen
mkdir -p /mnt/sicherung

# Image nur lesend mounten.
mount -r -t ext3 -o loop /home/benutzer/sicherung.img /mnt/sicherung

Um das Image wieder auszuhängen, genügt folgender Befehl:

umount /mnt/sicherung

Wenn die echte Partition wie auch das Image einen Fehler im Dateisystem hat, kann man auch auf diesem Wege sehen, wie der Fehler im Image behoben wird und ob er überhaupt behoben werden kann. Das Diagnose-Tool für das Dateisystem nennt sich hier fsck und wird wie folgt aufgerufen (hier ext3, sonst bitte anpassen):

fsck.ext3 -f /home/benutzer/sicherung.img

Als Ausgabe könnte es in etwa aussehen:

e2fsck 1.41.9 (22-Aug-2009)
Durchgang 1: Prüfe Inodes, Blocks, und Größen
Durchgang 2: Prüfe Verzeichnis Struktur
Durchgang 3: Prüfe Verzeichnis Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung
sicherung.img: 700882/6561792 Dateien (3.0% nicht zusammenhängend), 17256532/26216064 Blöcke

Falls man die echte Partition total zerschossen und die Partitionstabelle bzw. die Superblocks teilweise zerstört hat. So kann man mit dem Tool TestDisk versuchen, diese Superblocks auf dem Image wiederherzustellen. Hier wird die original Partition gar nicht angefasst. Ob danach der Fehler behoben ist, kann man leider nicht garantieren, aber ein Versuch ist es Wert:

testdisk /home/benutzer/sicherung.img

Für openSUSE 11.2 Nutzer können TestDisk bequem über zypper installieren:

zypper in photorec

TestDisk startet und blendet das Image und dessen Größe ein. Hier gehen wir mit der Enter-Taste auf „Proceed“ und machen mit diesem Image weiter. Im nächsten Menü wählen wir mit den Pfeiltasten den Eintrag „Intel“ aus. Und zum Abschluß wählen wir dann das Menüpunkt „Analyse“ und lassen das Image nun analysieren.

Sobald TestDisk durchgelaufen ist und vielleicht ein paar Superblocks wiederhergestellt hat, kann man das Image nochmal mit fsck drüberlaufen lassen. Zum Schluß kann man das Image mounten und das Ergebnis begutachten.

Viel Glück und Erfolg. ;-)

openSUSE 11.2 – UMTSmon mit Huawei UMTS USB-Stick einrichten

Das Netbook ist nicht nur zum Arbeiten für unterwegs konzipiert, sondern man kann damit auch über ein UMTS USB-Stick im Internet surfen und Emails abrufen. Die Einrichtung einer UMTS Verbindung unter openSUSE 11.2 ist nicht schwierig und lässt sich in wenigen Schritten einrichten.

Ich verwende ein Netbook Medion Akoya Mini E1210 und das Huawei UMTS USB-Stick E172 mit einem Branding von Vodafone. Jedoch als Internet-Provider habe ich Simyo gewählt. Da dieser ein kundenfreundlichen Tarif hat und keine Ports bzw. Dienste gesperrt sind.

Bevor wir UMTSmon benutzen können, müssen wir erst einige Vorarbeiten erledigen. Daher verwenden wir bei unseren Schritten die Konsole mit root-Rechten. Später benötigen wir die Konsole nicht mehr.

Für Besitzer eines Huawei UMTS USB-Stick ist der nachfolgende Schritt notwendig:
Zuerst installieren wir für den Huawei UMTS USB-Stick ein spezielles Package. Denn es sollte unter anderem verhindert werden, dass das UMTS-Stick als Storage erkannt und eingebunden wird.

Der Download des Package erfolgt über meinen Repo-Zweig. Diese Maßnahme halte ich für sinnvoll, weil man nie weiß, ob der Maintainer irgendwann das Repo schließt bzw. löscht. Der Link zu meinem Repo lautet:
http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/
Wenn man dem Link folgt, wird man feststellen, dass das Package auch für openSUSE 11.0 und 11.1 gebaut wurde, falls jemand ältere openSUSE-Systeme verwendet.

Installation des Packages unter openSUSE 11.2 (32-bit):

zypper in http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/openSUSE_11.2/i586/huawei_umtsmodem-1.0.0-2.1.i586.rpm

Installation des Packages unter openSUSE 11.2 (64-bit):

zypper in http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/openSUSE_11.2/x86_64/huawei_umtsmodem-1.0.0-2.1.x86_64.rpm

(Falls sich die Links kurzfristig geändert haben, dann hinterlasst mir bitte ein Kommentar. Ich werde es schnellstmöglich abändern. Danke.)

Als nächstes müssen wir unseren aktuellen Benutzer der Gruppe dialout und uucp zuordnen. (username) ist mit dem aktuellen Benutzername zu ersetzen:

usermod -A dialout,uucp (username)

Anschließend setzen wir noch die korrekten Rechte für die Programme pppd und usb_modeswitch:

chown root:root `which pppd` && chmod u+s `which pppd`
chown root:root `which usb_modeswitch` && chmod u+s `which usb_modeswitch`

Jetzt müssen alle laufenden Programme geschlossen und die Desktop-Umgebung neugestartet werden, damit die zugeordneten Gruppen beim Benutzer in der neuen Sitzung wirksam werden. Dies kann man sehr einfach mit der Tastenkombination STRG+ALT+Rücklöschtaste (2x Rücklöschtaste tippen) auslösen.

Für Besitzer eines Huawei UMTS USB-Stick ist der nachfolgende Schritt abermals notwendig:
Wir öffnen erneut die Konsole. Aber hier arbeiten wir nicht mehr mit root, sondern mit dem derzeitigen Benutzer und lassen uns die USB Device-Schnittstellen anzeigen.

ll /dev/ttyUSB*

Bei mir kommt folgende Ausgabe:

crw-rw---- 1 root dialout 188, 0  9. Dez 00:00 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1  9. Dez 00:00 /dev/ttyUSB1

Der erste Eintrag mit 188, 0 ist der PPP-Port, der zweite Eintrag 188, 1 ist der AT-Port. Beim Erststart von UMTSmon müssen wir ihm genau diese Devices mitteilen, damit er weiß, wie er das Modem ansprechen kann.

Mit dieser Erkenntnis starten wir nun UMTSmon mit folgendem Befehl:

# umtsmon -s <at>[,ppp]
umtsmon -s /dev/ttyUSB1,/dev/ttyUSB0

Jetzt kann man ein Profil nach den Vorgaben des Providers erstellen. Wichtig ist hier der APN (Access Point Name) und die Zugangsdaten. Nachdem diese Vorarbeit erledigt ist, kann man später UMTSmon ohne Probleme über das Menü starten.

Viel Spaß beim Surfen. ;-)

openSUSE 11.2 – Überflüssige RPM-Packages aufspüren

Das Kommandozeilen-Installationstool zypper ist sehr mächtig. Jedoch hat es leider auch eine Schwäche. Es kann bei der Deinstallation eines Package nicht automatisch weitere verwaiste Packages deinstallieren. (Diese Funktionalität ist für die nächste openSUSE Version geplant)

Im Repo von Packman gibt es ein Tool namens rpmorphan. Dieses Tool spürt verwaiste Packages auf und bietet diese ggfs. zur Deinstallation an. Das Packman-Repo lässt sich leicht über die YaST2-Repoverwaltung hinzufügen. Eine Anleitung gibt es hier: http://de.opensuse.org/YaST/Software/Community_Repositories

Nachdem man Packman eingebunden hat, kann man rpmorphan über YaST2 oder per zypper in der Konsole installieren:

zypper in rpmorphan

Das Tool kann man im GUI-Modus wahlweise über den Menü-Eintrag oder in der Konsole starten (letzteres sollte man besser vorziehen):

rpmorphan -gui

Es lässt sich auch ohne GUI-Modus ausführen, in dem man den Schalter -gui weglässt.

rpmorphan ohne weitere Schalter (Voreinstellung: Libraries) listet alle verwaisten Library-Packages auf und man kann hier nochmal die einzelnen Packages durchgehen, die man löschen kann/will/möchte. Hier ist ein wenig Vorsicht geboten. Da die Auswahl auch Entwicklungspakete und Codecs betreffen, sollte man selber nochmal abwägen, ob das Package doch noch gebraucht wird.

Wir können aber auch unsere Auswahl der verwaisten Packages mit folgenden Schaltern beeinflussen:

-guess-perl
    berücksichtigt Perl-Module
-guess-python
    berücksichtigt Python-Module
-guess-pike
    berücksichtigt Pike-Module
-guess-ruby
    berücksichtigt Ruby-Module
-guess-common
    berücksichtigt gemeinsame Packages
-guess-data
    berücksichtigt Packages, in der Daten für ein Package enthalten ist.
-guess-doc
    berücksichtigt Packages, in der Dokumentationen vorkommen.
-guess-dev
    berücksichtigt Development-Packages
-guess-lib
    berücksichtigt Library-Packages (Voreinstellung)
-guess-all
    berücksichtigt alle oben genannten Packages

z.B. mit folgendem Befehl können wir rpmorphan alle verwaisten Perl-, Python- und Ruby-Module auflisten lassen:

rpmorphan -guess-perl -guess-python -guess-ruby

Wenn man z.B. innerhalb der letzten 2 Tagen ein Package mit all seinen Abhängigkeiten installiert hat, kann man auch mit diesem Schalter -install-time das Zeitfenster definieren:

rpmorphan -guess-all -install-time 2

Auch die Auflistung in einem Zeitfenster, in dem auf eine Datei eines Packages nicht zugegriffen wurde, ist auch hier -access-time möglich. Jedoch muss man vorweg warnen, dass es je nach Anzahl der installierten Packages eine Menge Daten auswerten muss und dadurch eine Weile dauern kann. In diesem Beispiel ist der letzte Zugriff vor 30 Tagen:

rpmorphan -guess-all -access-time 30

Hat man einige Packages ausfindig gemacht, die man löschen will. Dann kann man dies mit zypper bequem ein oder mehrere Packages anhand der Package-Namen löschen:

zypper rm (package)

Welche Schalter es noch gibt, lässt sich wie folgt abrufen:

rpmorphan -help

openSUSE 11.2 – Weitere Nameserver eintragen

Traditionsgemäß hatte man in die Datei /etc/resolv.conf mehrere Nameserver eingetragen. Jedoch ist ein direktes Bearbeiten dieser Datei nicht empfohlen, weil in openSUSE 11.2 eigene Konfigurationstool bzw. der NetworkManager die Einstellungen in /etc/resolv.conf überschreiben kann.

Ein Blick in die Datei /etc/resolv.conf sagt eigentlich schon alles:

### /etc/resolv.conf file autogenerated by netconfig!
#
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
#     NETCONFIG_DNS_STATIC_SEARCHLIST
#     NETCONFIG_DNS_STATIC_SERVERS
#     NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
#     NETCONFIG_DNS_POLICY=''
#
# See also the netconfig(8) manual page and other documentation.
#
# Note: Manual change of this file disables netconfig too, but
# may get lost when this file contains comments or empty lines
# only, the netconfig settings are same with settings in this
# file and in case of a "netconfig update -f" call.
#
### Please remove (at least) this line when you modify the file!

Jetzt denkt man gerade, dass man doch einfach in YaST2 in die Netzwerkeinstellungen geht und dort die Nameserver einträgt. Weit gefehlt, da die Option „Benutzergesteuert mithilfe von NetworkManager“ von vornherein aktiviert ist, können auch keine weiteren Nameserver eingetragen werden.

Der NetzwerkManager ist standardmäßig in KDE 4.3.x im „Systemabschnitt der Kontrollleiste“ geladen und läßt sich dort bequem per Rechtsklick über „Verbindungen verwalten“ konfigurieren und weitere Nameserver im jeweiligen Konfigurationsabschnitt hinzufügen.

Wenn man aber ein externes Einwahlprogramm wie UMTSmon verwendet, dann nutzen diese Einstellungen im NetworkManager rein gar nichts. Also, muss man hier zum Teil händisch vorgehen.

1.  YaST2-Kontrollzentrum starten.

2. Im YaST2-Kontrollzentrum “Editor für /etc/sysconfig” starten.

3. Auf der linken Seite den Pfad folgen:
Network / General / NETCONFIG_DNS_STATIC_SERVERS

4. Die IP-Adresse des Nameservers eintragen. Falls es mehrere Nameserver sind, bitte mit Leerzeichen trennen und abschließend auf “OK” klicken (Evtl. die Eingabe nochmal bestätigen lassen)

Nach dieser Arbeit wird die Datei /etc/resolv.conf automatisch aktualisiert und die Nameserver sind nun fest eingetragen.