Montag, 28. September 2015

Comparing SunOS patches

On Solaris 10 it is sometimes necessary to compare the installed patches. The following command generates a list of all patches:
showrev -p |sed 's/^Patch: \([^ ]*\) .*/\1/'
And the following Perl script takes the output of the above command from two different systems and compares the patches. The script assumes, that the patches on the second system are newer.
#! /usr/bin/perl
use strict;
use warnings;

#showrev -p |sed 's/^Patch: \([^ ]*\) .*/\1/'

sub max {
    my $max  = shift;
    my $next = shift;
    return $max if not $next;
    unshift @_, $max > $next ? $max : $next;
    goto &max;
}

sub read_patches {
    my $file = shift;
    my $hash;
    while (<$file>) {
        s/\r?\n$//;
        my ($patch, $number) = split ('-');
        push @{$hash->{$patch}}, $number;
    }
    return $hash;
}

my ($f1, $f2) = @ARGV;

my ($fd1, $fd2);
open $fd1, "<", $f1 || die "Can not open input file $f1, $!";
open $fd2, "<", $f2 || die "Can not open input file $f2, $!";

my ($p1, $p2);
$p1 = read_patches ($fd1);
$p2 = read_patches ($fd2);

print $f1, ": ", scalar(keys %$p1), "\n";
print $f2, ": ", scalar(keys %$p2), "\n";

my ($p, $n1, $n2);
foreach $p (sort keys %$p2) {
    $n1 = max(@{$p1->{$p}});
    $n2 = max(@{$p2->{$p}});
    if (!defined $n1 || $n1 < $n2) {
        print $p, ": ", (defined $n1 ? $n1 : "()"), " -> ", $n2, "\n";
    }
}

Sonntag, 6. September 2015

Windows-Schriften unter Linux verwenden

Wer unter Windows eine virtuelle Maschine verwendet, um Linux zu benutzen, kann sehr einfach die Windows-Schriften auch unter Linux verwenden. Dazu muss lediglich das Verzeichnis, in dem sich unter Windows die Schriften befinden als Shared-Folder für den Linux-Gast freigegeben werden. Die entsprechende Option sieht VirtualBox folgendermaßen aus.

Mit Hilfe des Namens kann das Verzeichnis unter Linux eingebunden werden. Dazu muss erst ein Mount-Point angelegt werden.

mkdir /usr/local/share/fonts/windows

Anschließend kann ein Eintrag in der fstab-Datei hinzugefügt werden, damit das Verzeichnis beim Start automatisch eingebunden wird.

echo fonts /usr/local/share/fonts/windows vboxsf ro,comment=systemd.automount 0 0 >> /etc/fstab

Wer sein System nicht neu starten will, muss jetzt das Verzeichnis manuell einbinden.

mount fonts

Abschließend muss der Font-Cache aktualisiert werden. Das kann je nach Anzahl der Fonts unter Windows etwas dauern.

fc-cache -fv

Jetzt stehen die Schriften im System zur Verfügung und können in den entsprechenden Programm ausgewählt werden. Zum Beispiel Tahoma für XFCE ...

... oder Emacs mit Lucida Console wie damals auf den SPARCstations unter OpenWindows.

Nachtrag

Emacs dazu zu überreden, dass das richtige Font-Hinting verwendet wird, gestaltet sich schwieriger als erwartet. Der Font-Dialog erlaubt es nicht, das Font-Hinting auszuwählen. Wer es trotzdem verwenden will darf nicht über die Emacs-Customization die Schrift auswählen. Statt dessen muss sie als X11-Resource in der Datei ~/.Xresources definiert werden. Für Lucida-Console auf einem 72dpi-Display sieht der Eintrag folgendermaßen aus:

Emacs.font: Lucida Console-14:antialias=true:hinting=true:autohint=false:hintstyle=3

Bei Systemen mit einer höheren Auflösung kann man auch kleinere Schrift-Größen wählen.