czwartek, 17 maja 2012

Arch linux i czcionki

Linux nie jest systemem wiodącym prym w ilości i jakości czcionek z powodów licencyjnych, dlatego każdy szanujący się użytkownik tego systemu prędzej czy później zostaje zmuszony do instalacji tychże w swym środowisku. „Porządna” instalacja czcionek nie jest jednak operacją typu kopiuj/wklej tak jak miało to miejsce na windowsie. Na przykładzie archa widać, iż czcionki mogą być traktowane jako normalne pakiety oprogramowania wobec czego można nimi kierować za pomocą pacmana. Daje to dość duże pole do manewru dla końcowego użytkownika, gdyż może on zarządzać instalacją, deinstalacją tudzież aktualizacją czcionek poprzez menadżer pakietów. Nawet gdy upatrzonej przez nas czcionki nie ma w repozytoriach warto się troszkę pomęczyć, dla tej wygody, poprzez stworzenie pakietu czcionki i zainstalowanie go za pomocą pacmana. Nie jest to praca czasochłonna i poniżej postaram się ją zwięźle opisać na przykładzie instalacji pewnej czcionki zwanej The One Ring (taka tam z Władcy Pierścieni).

Pierwszym krokiem jaki polecam zrobić jest utworzenie osobnego katalogu, który posłuży nam do pracy. Najlepszym miejscem do tego będzie katalog /home. Przykładowo, tworzymy katalog fontspkgs za pomocą:
mkdir $HOME/fontspkgs
Następnie tworzymy plik o nazwie PKGBUILD którego zawartość powinna wyglądać tak:
pkgname=ttf-one-ring
pkgver=1.0
pkgrel=1
depends=('fontconfig' 'xorg-font-utils')
pkgdesc="The One Ring is font inspired Lord of the Rings trilogy."
arch=('any')
license=('custom:freeware')
source=($pkgname-$pkgver.zip::http://dl.dropbox.com/u/7773489/PKG/gaut-fonts_the-one-ring.zip)
install=$pkgname-$pkgver.install
md5sums=('a0afa52d60cea6c0363a2a8cb39a4095')

build()
{
    cd "$srcdir"
    unzip $pkgname-$pkgver
    mkdir -p $pkgdir/usr/share/fonts/TTF
    cp $srcdir/*.ttf $pkgdir/usr/share/fonts/TTF
}
  • pkgname to nazwa pakietu naszej czcionki. Zaleca się, aby do nazwy czcionki dodawać prefix "ttf-".
  • pkgver to wersja czcionki, zaś pkgrel to numer wydania czcionki.
  • depends to zależności. Obowiązkowe jest wpisanie 'fontconfig' oraz 'xorg-font-utils'. Pakiet 'unzip' jest również potrzebny, gdy ściągana przez nas czcionka mieści się w archiwum zip tak jak w powyższym przypadku. Przykładowo, gdyby mieściła się w archiwum rar, zamiast unzip wpisalibyśmy do zależności unrar.
  • pkgdesc jest opisem pakietu, w tym wypadku będącego czcionką. Warto tutaj wpisać pełną nazwę czcionki, co będzie pomocne przy wyszukiwaniu, gdyby nasz pakiet znalazł się kiedyś w repozytoriach.
  • arch opisuje architekturę systemu, na którą pakiet ten jest przeznaczony. W przypadku czcionek wpisujemy 'any', czyli dowolna.
  • license to znacznik, w którym wpisujemy licencję czcionki. W tym przypadku jest to licencja freeware. Dla licencji GNU GPL wyglądałoby to tak: license=('GPL').
  • source jest określeniem adresu url, z którego pobieramy archiwum z czcionką. Część przed "::" służy nadaniu nowej nazwy pobranemy pakietowi, czyli pakiet gaut-fonts_the-one-ring.zip zostanie po ściągnięciu przemianowany na ttf-one-ring-1.0.zip.
  • noextract nie jest opcją konieczną, gdy nasz pakiet mieści się w archiwum tar, jednak w przypadku zip mówi narzędziu makepkg, aby nie wypakowywało archiwum zaraz po pobraniu.
  • install określa nazwę skryptu instalacyjnego czcionki, który również należy utworzyć.
  • md5sums to tablica sum MD5 plików określonych przez nas w tablicy source. Generujemy je za pomocą polecenia makepkg -g wykonywanego w katalogu z plikami.

Funkcja build() to polecenia wykonywane w celu budowy pakietu. Warto zwrócić uwagę na polecenie unzip $pkgname-$pkgver, które należy zmienić na unrar $pkgname-$pkgver, gdy nasza czcionka mieści się w archiwum rar lub całkowicie usunąć, gdy jest w archiwum tar. Dalsze polecenia tylko kopiują plik czcionki do katalogu share.

Gdy uporamy się już z utworzeniem pliku PKGBUILD musimy stworzyć plik $pkgname-$pkgver.install, co w moim przypadku będzie miało postać ttf-one-ring-1.0.install. Zawartość powinna wyglądać tak:
post_install()
{
    echo -n "Updating font cache... "
    fc-cache -fs >/dev/null
    mkfontscale /usr/share/fonts/TTF /usr/share/fonts/Type1
    mkfontdir /usr/share/fonts/TTF /usr/share/fonts/Type1
    echo "done"
}

post_upgrade()
{
    post_install
}
Jest to skrypt zawierający polecenia poinstalacyjne, które aktualizują systemową bazę czcionek tak, aby były gotowe do użycia od zaraz.

Kolejnym działaniem jest "wypalenie" pliku pakietu za pomocą polecenia
makepkg
Utworzy to pakiet o nazwie $pkgname-$pkgver-$pkgrel-$arch.pkg.tar.xz, co w moim przypadku dało rezultat w postaci ttf-one-ring-1.0-1-any.pkg.tar.xz. Ostatecznym działaniem jest uruchomienie pacmana:
pacman -U ./ttf-one-ring-1.0-1-any.pkg.tar.xz
Pacman zainstaluje czcionkę w odpowiednich dla niej miejscach, po czym wykona nasz skrypt poinstalacyjny w celu aktualizacji bazy czcionek.

Mam nadzieję, że wielu z was skorzysta z tego sposobu instalacji czcionek, który jest dość popularny, gdyż zapewnia niemałą wygodę w użytkowaniu systemu i pozwala zachować jako taki porządek.