Tworzenie pakietów ARCHa jest prostsze niż tworzenie RPMów, a repozytoria nie oferują wszystkich aplikacji więc umiejętność ich tworzenia może być przydatna (warto podzielić się nimi ze społecznością). Na początek zainstaluj:
pacman -Sy cvsup wget
Pakiet archa to skompilowany program gotowy do instalacji oraz pliki konfiguracyjne i informacyjne. Przy tworzeniu pakietu będziemy musieli podać część tych danych jak i "opis" instalacji - w pliku PKGBUILD. Oto przykładowa zawartość takiego pliku:
# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $
# Maintainer: judd
# Contributor: Judd Vinet
pkgname=foo
pkgver=0.99
pkgrel=1
pkgdesc="opis pakietu"
url="http://www.foo.org"
groups=
provides=
depends=('qt' 'python')
makedepends=('guile')
conflicts=('yafoo')
replaces=('mffoo')
backup=('/etc/foo/foo.conf')
install=('foo.install')
source=("http://www.foo.org/download/$pkgname-$pkgver.tar.gz")
md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make prefix=$startdir/pkg/usr install
}
# text : komentarze
# $Id: PKGBUILD,v ... : tag cvs dla pakietu (generowany przez archlinux-cvs)
# Maintainer : osoba zajmująca się pakietem w repozytorium oficjalnym
# Contributor : osoba, która napisała pierwszego pkgbuilda
pkgname : nazwa pakietu
pkgver : wersja aplikacji
pkgrel : wersja pakietu
pkgdesc : krótki opis pakietu
url : strona pakietu
groups : grupowanie pakietów (np. instalacja "kde" zainstaluje wszystko z grupy "kde")
provides : używane jeżeli pakiet dodaje jeszcze inny/inne pakiety
depends : zależności
makedepends : zależności potrzebne jedynie do kompilacji
conflicts : konflikty - czego nie można instalować z tym pakietem
replaces : jakie pakiety ma ten pakiet zastąpić (np. stare wersje)
backup : jakie pliki zapisać jako backup (plik.pacsave) gdy pakiet zostanie usunięty
install : określa skrypt instalacyjny
source : link do paczki z kodem źródłowym
md5sums : suma kontrolna paczki źródłowej
build: funkcja build - zawiera akcje potrzebne do zbudowania pakietu
Plik instalacyjny zawiera polecenia służące do instalacji pakietu. Oto przykładowy plik:
post_install() {
/bin/true
}
post_upgrade() {
/bin/true
}
pre_remove() {
/bin/true
}
op=$1
shift
$op $*
post_install: skrypt wykonywany po instalacji, przyjmuje 1 argument - wersję pakietu
post_upgrade: wykonywany gdy pakiet zostanie zaktualizowany. Przyjmuje 2 argumenty - nową i starą wersję pakietu
pre_remove: skrypt wykonywany po usunięciu, przyjmuje 1 argument - wersję pakietu
Standardowa kompilacja pakietu polega na wydaniu poleceń ./configure, make i make install. Odpowiednik tego w funkcji build to:
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make prefix=$startdir/pkg/usr install
}
Notka 1:
cd $startdir/src/$pkgname-$pkgver: źródła muszą rozpakować się do katalogu zawierającego nazwę i wersję np. /foo-0.12 a nie /foo
Notka 2:
./configure --prefix=/usr: konfigurujemy z opcją instalacji w kat. /usr
Notka 3:
make prefix=$startdir/pkg/usr install: instalujemy w $startdir/pkg/usr tak by pacman miał nad tym kontrolę.
Notka: czasami
prefix nie jest stosowany tylko
DESTDIR
- jako root w konsoli wykonaj polecenie
abs - nastąpi synchronizacja drzewa ABSa (znajdziesz go w /var/abs).
- jeżeli chcesz przerobić istniejący pakiet (np. zmienić opcje z jakimi został skompilowany) to kopiujemy jego PKGBUILD do pustego katalogu (patrz niżej), modyfikujemy funkcję build i w konsoli wykonujemy
makepkg. Jeżeli jest to nowy pakiet - musimy stworzyć go (PKGBUILDa)
Jako przykład zrobimy pakiet klamav. Tworzymy nowy katalog gdzieś w naszym katalogu użytkownika np.
mkdir pakiet. Do katalogu tego kopiujemy PKGBUILD istniejącego pakietu jeżeli chcemy go przerobić lub tworzymy nowy jeżeli tworzymy pakiet dla nowego programu. Następnie edytujemy go i wpisujemy odpowiednie dane. W przypadku przeróbki istniejącego pakietu na użytek własny edytujemy jedynie funkcję build. W przypadku tworzenia nowego pakietu musimy podać znacznie więcej. Zacznijmy od graficznej nakładki na clamav -
klamav. Adres strony projektu to
http://klamav.sourceforge.net a linki do źródeł:
- ściągamy pakiet ze źródłami
- w konsoli, będąc w katalogu ze ściągniętym archiwum:
md5sum nazwa_archiwum - dostaniemy sumę kontrolną potrzebną do PKGBUILD:
# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $
# Maintainer: none yet
# Contributor: Piotr Malinski
pkgname=klamav
pkgver=0.15.2
pkgrel=1
pkgdesc="kde gui for clamav"
url="http://klamav.sourceforge.net/"
groups=
provides=
depends=('clamav' 'kdebase')
makedepends=
conflicts=
replaces=
backup=
install=('klamav.install')
source=("http://kent.dl.sourceforge.net/sourceforge/klamav/$pkgname-$pkgver.tar.gz" "http://mesh.dl.sourceforge.net/sourceforge/klamav/$pkgname-$pkgver.tar.gz")
md5sums=('be92bd93dad96ada5d8cff914b52ebde')
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make prefix=$startdir/pkg/usr install
}
Źródła tej aplikacji kompiluje się standardowo (./configure, make i make install) tak więc korzystamy ze standardowej funkcji build. Oprócz tego stworzyłem plik klamav.install zawierający standardowy kod podany wcześniej. md5sums zawiera sumę kontrolną archiwum. Jako depends podałem nazwy pakietów jakie potrzebuje czyli generalnie kde (podstawowy pakiet kdebase) i clamav (po co nakładka bez programu ?).
Notka: jeżeli źródła są duże lub nie chcemy ciągnąć z netu źródeł teraz to możemy wykorzystać serwer na naszym komputerze (localhosta) -
source=("http://localhost/$pkgname-$pkgver.tar.gz") :) Jeżeli nie chcemy bawić się w konfigurowanie serwera itd polecam XAMPPa :)
By stworzyć pakiet w konsoli, będąc w katalogu z PKGBUILD i plikiem .install wykonujemy
makepkg. Powyższy przykład nie jest super dokładny (brak zależności dla kompilacji w makedepends i innych dodatkowych danych).
- Dodane: 14.07.2008 przez riklaunim