Ukoliko ste ikada poželeli da napišete sopstvenu SlackBuild skriptu, bilo iz razloga što željeni softver nije dostupan sa SlackBuilds.org ili nekog drugog repozitorijuma sa SlackBuild skriptama, bilo da želite da napravite svoj paket koji biste sačuvali za neku narednu instalaciju ili postavili negde na neko javno mesto na internetu, možda ste se našli u situaciji kada ne znate koji je tačno postupak i šta su SlackBuild skripte. Ovaj članak je napisan kao (relativno) kratak vodič i objašnjenje šta su to SlackBuild skripte, kako one funkcionišu i šta to one u stvari rade.
Slackware paketi
Imenovanje paketa
Slackware paketi se generalno imenuju na sledeći način:
Code: Select all
imepaketa-verzija-arhitektura-brojizgradnje.tiparhive
- imepaketa se odnosi na ime aplikacije
Primer:
alpine-2.02-i486-1.txz - ime aplikacije je alpine - verzija se odnosi na verziju zvaničnog izdanja aplikacije
Primer:
alpine-2.02-i486-1.txz - verzija je 2.02. Ovo je verzija koja se nalazi u nazivu arhive sa izvornim kodom (alpine-2.02.tar.bz2). - arhitektura se odnosi na arhitekturu za koju je izgrađen paket
Trenutne zvanične vrednosti su:- i486 - i486 i noviji
- i686 - i686 i noviji
- x86_64 - paketi za 64-bitni slackware
- arm - paketi za Armed Slack (arm platforma)
- s390 - paketi za Slack390 (S/390 platforma)
Primer:Code: Select all
uname -m
alpine-2.02-i486-1.txz - brojizgradnje se menja svaki put kada se izmeni SlackBuild skripta.
U narednom primeru vidimo da je ovo tek prva revizija paketa.
Primer:
alpine-2.02-i486-1.txz - tiparhive se odnosi na tip kompresije paketa.
Trenutni zvanično podržani tipovi arhiva su:- txz - xz kompresovana tar arhiva (podrazumevan tip kompresije za pakete na 13.0 i novijim 1)
- tlz - lzma kompresovana tar arhiva (od 13.0)
- tbz - bzip2 kompresovana tar arhiva (od 13.0)
- tgz - gzip kompresovana tar arhiva (podrazumevana vrednost za 12.2 i starijim)
alpine-2.02-i486-1.txz
Primer
Code: Select all
install/
install/slack-desc
usr/
usr/bin/
usr/bin/lesspipe.sh
usr/bin/lesskey
usr/bin/less
usr/bin/lessecho
usr/man/
usr/man/man1/
usr/man/man1/lesskey.1.gz
usr/man/man1/less.1.gz
usr/doc/
usr/doc/less-451/
usr/doc/less-451/COPYING
usr/doc/less-451/LICENSE
usr/doc/less-451/README
usr/doc/less-451/NEWS
- Podrazumevani prefix je /usr
- Dokumentacija se instalira u /usr umesto u /usr/share (ovo nije u skladu sa FHS)
- Man i info strane se kompresuju
- Dodatna dokumentacija se instalira u /usr/doc/program-verzija (mada bi na SlackBuilds.org mogli imati različita pravila).
- Iz binarnih datoteka se uklanjaju (strip) debug informacije
- Paketi ne sadrže simboličke linkove - svi simbolički linkovi se kreiraju putem doinst.sh skripte
Svaki paket sadrži, pored datoteka same aplikacije i nekoliko slackware specifičnih datoteka. One se nalaze u direktorijumu "install" u paketu. Ovo su obično dve datoteke: slack-desc i doinst.sh, mada postoje paketi koji sadrže samo slack-desc. Paketi pravljeni za menadžere paketa sa automatskom rezolucijom zavisnosti (slapt-get) mogu sadržati i slack-required i slack-conflicts datoteke (primer: paketi sa slacky.eu).
slack-desc
slack-desc sadrži osnovni opis aplikacije. Ovaj tekst će se prikazati pri instalaciji. Na primer: slack-desc ima jednostavan format. Opis se nalazi na linijama koje počinju sa "imeprograma:". "imeprograma" mora biti isto kao i "imepaketa" u prethodnoj sekciji, ili opis neće biti prikazan pri instalaciji. Nakon prve dvotačke (":") linije mogu imati najviše 73 karaktera. Može postojati najviše 11 linija koje počinju sa "imeprograma:", a preporučeno je da postoje svih 11 linija čak i kad je opis kraći. Linije bez opisa bi trebalo da sadrže samo "imeprograma:" bez razmaka nakon dvotačke.
Prva linija sadrži ime aplikacije i kratak opis u zagradi. Ovo je obično neki generički opis, tipa "Image viewer" (program za pregled slika). Generički šablon sadrži i kratko uputstvo i pomoćni lenjir. Pomoćni lenjir vam omogućava da uskladite opis sa ograničenjem dužine (73 karaktera) i počinje od dvotačke u "imeprograma:". Prvi "|" karakter se nalazi poravnan sa dvotačkom.
Preveden generički šablon:
Code: Select all
# KAKO UREĐIVATI OVU DATOTEKU:
# "Pomoćni lenjir" ispod olakšava uređivanje opisa paketa. Linija do prvog '|'
# iznad ':' počinje od imena paketa, a '|' na desnoj strani označava poslednju
# kolonu u kojoj možete napisati slovo. Morate napraviti tačno 11 linija koja
# počinju na ovaj način kako bi formatiranje bilo ispravno. Takođe je
# uobičajeno da se ostavi jedno prazno mesto posle ':' osim na inače praznim
# linijama.
|-----pomoćni-lenjir---------------------------------------------------|
imeprograma: imeprograma (kratak opis programa)
imeprograma:
imeprograma: Duži opis aplikacije, dužine najviše 71 karaktera nakon "imeprograma:"
imeprograma: ('pomoćni lenjir' bi trebao početi na ':' i biti dugačak tačno 71
imeprograma: karakter. Ako ima dovoljno prostora, takođe možete postavit link
imeprograma: ka matičnoj strani aplikacije na jednoj od tih linija, ali ovo nije
imeprograma: nepohodno.
imeprograma:
imeprograma: Maksimalni broj linija koje počinju sa "imeprograma:" je 11.
imeprograma: Linije bez ikakvog teksta *ne bi smele* imati prazan prostor nakon ':'
imeprograma:
doinst.sh
doinst.sh obavlja neke postinstalacione zadatke. On može, ali i ne mora postojati, u zavisnosti od konkretne potrebe. Format doinst.sh će zavisiti i šta konkretno treba odraditi nakon instalacije. Primeri su: osvežavanje keša fontova, keša "hicolor" teme ikona, kompajliranje glib šema i drugo.
Pošto paket ne sme sadržati simboličke linkove, obično doinst.sh sadrži linije koje ih kreiraji tokom instalacije. Ovo obično nije potrebno ručno dodavati. Ako se pri kreiranju paketa naiđe na simboličke linkove, oni će automatski biti dodati u doinst.sh tokom pokretanja makepkg.
SlackBuilds.org šablon je kompleksniji od prosečne doinst.sh skripte. Obično je doinst.sh vrlo jednostavan i sadrži tek nekoliko linija. Šta konkretno, to će zavisiti od konkretnog softvera koji pakujete. Ne postoji neko generalno pravilo i ovo ćete morati da naučiti iz prakse. Mada se neka pravila mogu izvesti u zavisnosti od aplikacije. Najbolji primer je pregled doinst.sh za već postojeće SlackBuild skripte (iz recimo SlackBuilds.org).
Često aplikacija ne zahteva nikakve post-instalacione aktivnosti. U tom slučaju doinst.sh nije potreban. Kada je ovo slučaj? Opet ne postoji generalno pravilo i zavisi od same aplikacije. U generalnom slučaju, doinst.sh možete izostaviti. Ako je ipak potreban, biće vam skrenuta pažnja (ako kačite SlackBuild kod nas na forum ili na SlackBuilds.org).
slack-required, slack-suggests i slack-conflicts
Ove datoteke predstavljaju proširenja koja koristi slapt-get menadžer paketa. Shodno imenu, ove datoteke omogućavaju definisanje zavisnosti, sugestija ili konflikta među paketima. Oni neće biti detaljnije obrađeni. Ako želite da saznate više, pogledajte dokumentaciju na slapt-get matičnoj strani:
http://software.jaos.org/" onclick="window.open(this.href);return false;
Ako vas zanima više informacija, takođe možete pogledati datoteke iz Slacky.eu repozitorijuma. Distribucije bazirane na Slackware-u često koriste slapt-get, tako da bi i ovo mogao biti dobar izvor primera kako se one koriste. Neke od ovih distribucija su i Salix i Zenwalk.
SlackBuild skripte
Kratak pregled SlackBuild skripti
Napomena: SlackBuild skripte iz zvaničnih direktorijuma i SlackBuilds.org se pokreću kao root korisnik. Tako da je pre pokretanja skripte potrebno koristiti "su" ili "su -".
SlackBuild skripte su skripte ljuske/školjke/shella (različiti pojmovi koji se kod nas koriste za prevod engleskog "shell"). Shell skripte su skup komandi i pomoćnih varijabli koje služe automatizaciji nekog zadatka. Tako i SlackBuild skripte automatizuju izgradnju paketa na Slackware baziranim sistemima. One sadrže skup komandi koje biste koristili i pri ručnoj izgradnji paketa. Štaviše SlackBuild skripte se mogu prevesti u "ručne" komande radi lakše ilustracije.
Na primer (ne koristim varijable, s obzirom da bi onima koji nemaju iskustva sa pisanjem shell skripti to moglo biti nejasno/zbunjuće):
Code: Select all
#!/bin/sh
# Slackware build script for unrar
# Copyright 2006 Halim Issa <yallaone@gmail.com>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Updated by Andrew Brouwers
# Updated by Niklas 'Nille' Åkerström
PRGNAM=unrar
VERSION=4.0.7
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
DOCS="license.txt readme.txt"
case "$ARCH" in
i486) SLKCFLAGS="-O2 -march=i486 -mtune=i686"
;;
i686) SLKCFLAGS="-O2 -march=i686 -mtune=i686"
;;
x86_64) SLKCFLAGS="-O2 -fPIC"
;;
*) SLKCFLAGS="-O2"
;;
esac
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM
tar xvf $CWD/${PRGNAM}src-$VERSION.tar.gz
cd $PRGNAM
chown -R root:root .
chmod -R a-s,u+w,go+r-w .
make CXXFLAGS="$SLKCFLAGS" -f makefile.unix
install -D -m 755 unrar $PKG/usr/bin/unrar
strip --strip-unneeded $PKG/usr/bin/unrar
mkdir -p $PKG/usr/man/man1
gzip -9c $CWD/unrar.1 > $PKG/usr/man/man1/unrar.1.gz
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
chmod 0644 $PKG/usr/doc/$PRGNAM-$VERSION/*
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
Code: Select all
rm -rf /tmp/SBo/unrar-package
mkdir -p /tmp/SBo /tmp/SBo/unrar-package
cd /tmp/SBo
rm -rf unrar
tar xvf /home/bocke/source/unrar/unrarsrc-4.0.7.tar.gz
cd unrar
chown -R root:root .
chmod -R a-s,u+w,go+r-w .
make CXXFLAGS="-O2 -march=i686 -mtune=i686" -f makefile.unix
install -D -m 755 unrar unrar /tmp/SBo/unrar-package/usr/bin/unrar
strip --strip-unneeded /tmp/SBo/unrar-package/usr/bin/unrar
mkdir -p /tmp/SBo/unrar-package/usr/doc/unrar-4.0.7
gzip -9c /home/bocke/source/unrar/unrar.1 > /tmp/SBo/unrar-package/usr/man/man1/unrar.1.gz
mkdir -p /tmp/SBo/unrar-package/usr/doc/unrar-4.0.7
cp -a license.txt readme.txt /tmp/SBo/unrar-package/usr/doc/unrar-4.0.7
cat /home/bocke/source/unrar/unrar.SlackBuild > /tmp/SBo/unrar-package/usr/doc/unrar-4.0.7/unrar.SlackBuild
chmod 0644 /tmp/SBo/unrar-package/usr/doc/unrar-4.0.7/*
mkdir -p /tmp/SBo/install
cat /home/bocke/source/unrar/slack-desc > /tmp/SBo/unrar-package/install/slack-desc
cd /tmp/SBo/unrar-package
/sbin/makepkg -l -y -c n /tmp/unrar-4.0.7-1_SBo.tgz
Code: Select all
./unrar.SlackBuild
Code: Select all
installpkg /tmp/unrar-4.0.7-1_SBo.tgz
Struktura SlackBuild skripti
Svaka SlackBuild skripta sadrži nekoliko funkcionalnih delova. Pokušaću da ih pređem na najjednostavniji mogući način. Nadam se da će to biti dovoljno za bolje razumevanje nečega što vam se može učiniti komplikovanim ako ranije niste imali iskustva sa pisanjem shell ili SlackBuild skripti. Naravno od vas se očekuje poznavanje osnovnih Unix/Linux komandi.
- Kratak opis
- Licenca
- Definisanje osnovnih varijabli
- Auto-detekcija arhitekture
- Definisanje direktorijuma za izgradnju i pakovanje
- Automatsko postavljanje parametara kompajlera
- Priprema direktorijuma za izgradnju i pakovanje
- Otpakivanje arhive sa izvornim kodom
- Sanitizacija dozvola i vlasništva u direktorijumu za izgradnju
- Konfiguracija izvornog koda
- Kompajliranje softvera i instalacija u direktorijum za pakovanje
- Uklanjanje debug informacija iz binarnih datoteka i biblioteka
- Kompresija dokumentacije
- Instalacija dodatne dokumentacije
- Kopiranje slack-desc i (ako postoji) doinst.sh u direktorijum za pakovanje
- Kreiranje paketa
Prva linija sadrži kratak opis skripte:
Code: Select all
# Slackware build script for <imeprograma>
imeprograma označava program koji se pakuje.
Licenca
Preporučljivo je da navedete licencu. SlackBuilds.org skripte obavezno sadrže i deo sa licencom. Od verzije 14.0, preporučena licenca je BSD/MIT. Generički šablon bi izgledao ovako:
Code: Select all
# Copyright <godina> <ime i prezime> <mesto i država u kojoj živite>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Definisanje osnovnih varijabli
Code: Select all
PRGNAM=<ime programa>
VERSION=${VERSION:-<verzija>}
BUILD=${BUILD:-<broj izgradnje>}
TAG=${TAG:-_<vaš tag>}
VERSION je varijabla koja sadrži verziju programa
BULD je varijabla koja sadrži broj izgradnje
TAG je vaša oznaka
Primer:
Code: Select all
PRGNAM=hello
VERSION=${VERSION:-0.1.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_bocke}
Code: Select all
VARIJABLA=${VARIJABLA:-vrednost}
Recimo:
Code: Select all
VERSION=0.2.0 ./hello.SlackBuild
Napomena: TAG za SlackBuilds.org pakete je _SBo.
Auto-detekcija arhitekture
Ovaj odeljak sadrži deo za auto-detekciju arhitekture. I ovu vrednost je moguće definisati na komandoj liniji.
Code: Select all
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
- $ARCH (hardverska arhitektura za koju se izgrađuje paket)
U ovom koraku se definišu osnovni direktorijumi nad kojima skripta operiše.
Code: Select all
CWD=$(pwd)
TMP=${TMP:-/tmp/<vaša oznaka>}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
- CWD - direktorijum u kojem se nalazi SlackBuild skripta
- TMP - privremeni direktorijum u kome će se nalaziti otpakovani izvorni kod i direktorijum u kome se privremeno instalira program pre pakovanja
- PKG - direktorijum za pakovanje - ovo je poddirektorijum u TMP
- OUTPUT - direktorijum u kome će biti sačuvan paket
Code: Select all
TMP=${TMP:-/tmp/SBo}
U ovom koraku se automatski postavljaju podrazumevani parametri kompajlera koji će kasnije biti prosleđeni configure skripti. Pored parametara kompajlera u ovom delu se postavlja i podrazumevani sufiks direktorijuma sa bibliotekama.
Code: Select all
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
- SLKCFLAGS - parametri kompajlera
- LIBDIRSUFFIX - sufiks sistemskog direktorijuma sa bibliotekama
Korišćene komande Priprema direktorijuma za izgradnju i pakovanje
Ovaj deo SlackBuild skripte priprema direktorijume koje koristi skripta.
Code: Select all
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
- $TMP (privremeni direktorijum)
- $PKG (direktorijum za pakovanje)
- $OUTPUT (direktorijum u kojem se kreira gotov paket)
Ovaj deo SlackBuild skripte otpakuje arhivu sa izvornim kodom, brišući (ako postoji) prethodno postojeći direktorijum sa izvornim kodom.
Code: Select all
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
- $CWD (direktorijum sa SlackBuild skriptom)
- $PRGNAM (ime programa)
- $VERSION (verzija programa)
Sanitizacija dozvola i vlasništva u direktorijumu za izgradnju
Ovaj deo prelazi u direktorijum sa izvornim kodom, nalazi sve datoteke sa "čudnim" dozvolama (pogledajte chmod man uputstvo za više informacija), a zatim postavlja dozvole izvornog koda. Dozvole običnih datoteka se postavljaju na 644 (rw-r-r), a direktorijuma na 755 (rwx-rx-rx). Vlasništvo nad datotekama se dodeljuje korisniku root i grupi root. Objašnjenje komande find možete nači i u sledećoj temi: find - korišćenje komande.
Code: Select all
cd $PRGNAM-$VERSION
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
- $PRGNAM (ime programa)
- $VERSION (verzija programa)
Konfiguracija izvornog koda
U ovom delu se pokreće configure skripta sa opcijama koje postavljaju neke podrazumevane vrednosti za instalacione lokacije i izgradnju. Prve dve linije prosleđuju prethodno definisane parametre kompajlera configure skripti.
Code: Select all
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--build=$ARCH-slackware-linux
- $SLKCFLAGS (parametri C kompajlera)
Kompajliranje softvera
U ovom koraku se vrši samo kompajliranje softvera i instalacija u privremeni direktorijum za pakovanje ($PKG).
Code: Select all
make
make install DESTDIR=$PKG
- $PKG (direktorijum za pakovanje)
Uklanjanje debug informacija iz binarnih datoteka i biblioteka
U ovom koraku se pronalaze sve izvršne datoteke i biblioteke u privremenom direktorijumu za pakovanje, a zatim se iz njih uklanjaju sve debug informacije. Zašto se ovo radi? Debug informacije se odnose na podatke koji su korisni programerima za uočavanje i ispravku grešaka. Ovo nije potrebno krajnjim korisnicima, a čini izvršne datoteke većima. Uklanjanjem ovih informacija, instalirani softver zauzima manje prostora na disku.
Code: Select all
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
- $PKG (direktorijum za pakovanje)
Kompresija dokumentacije
U ovom koraku se kompresuju man i info dokumentacija korišćenjem gzip.
Code: Select all
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
rm -f $PKG/usr/info/dir
gzip -9 $PKG/usr/info/*.info*
- $PKG (direktorijum za pakovanje)
Instalacija dodatne dokumentacije
Obično uz izvornu arhivu dolaze i datoteke kao što su AUTHORS, ChangeLog, COPYING, FAQ, INSTALL, README, TODO i druge. Često se pri instalaciji (make install) ne instaliraju ove datoteke u odgovarajući direktorijum. Ovaj korak čini baš to. Sledeći kod je preuzet iz generičkog šablona sa SlackBuilds.org. Deo "<dokumentacija>" je potrebno zameniti imenima datoteka razdvojenim razmakom. U ovom koraku se takođe u isti direktorijum kopira i sama SlackBuild skripta (ovo je praksa na SlackBuilds.org, zvanični Slackware paketi, s druge strane, ne sadrže kopiju SlackBuild skripte).
Code: Select all
cp -a \
<dokumentacija> \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
- $CWD (direktorijum sa SlackBuild skriptom)
- $PKG (direktorijum za pakovanje)
- $PRGNAM (ime programa)
- $VERSION (verzija programa)
Kopiranje slack-desc i (ako postoji) doinst.sh u direktorijum za pakovanje
Ove datoteke su ukratko opisane nešto iznad (Slackware specifične datoteke). One se, u ovom koraku kopiraju u pod-direktorijum install u direktorijumu za pakovanje. Ukoliko vaša aplikacija ne zahteva nikakve post-instalacione aktivnosti, možete obrisati liniju koja se odnosi na doinst.sh (to ćemo videti i na kasnijem primeru).
Code: Select all
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
- $CWD (direktorijum sa SlackBuild skriptom)
- $PKG (direktorijum za pakovanje)
Kreiranje paketa
U ovom koraku se prelazi u direktorijum za pakovanje i zatim kreira i sam paket komandom makepkg.
Code: Select all
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
- $OUTPUT (direktorijum u kome će biti sačuvan napravljeni paket)
- $PRGNAM (ime programa)
- $VERSION (verzija programa)
- $ARCH (arhitektura za koju je napravljen paket)
- BUILD (broj izgradnje)
- TAG (oznaka osobe ili grupe koji su upakovali paket)
- PKGTYPE (tip kompresije arhive - nastavak paketa)
Kratki rezime
U ovom primeru ćemo napraviti SlackBuild skriptu za GNU Interactive Tools (GNUIT). GNU Interactive Tools je skup interaktivnih tekstualnih alata i uključuje menadžer datoteka, program za pregled i manipulisanje procesima, program za prikaz datoteka u heks/ascii formatu, kao i neke prateće alatke.
Priprema
- Preuzmite SlackBuild šablon odavde:
SlackBuilds.org šablona.
Kada ste ga preuzeli, preimenujte ga u gnuit.SlackBuild
Napomena: Moja preporuka je da nakon što završite ovo upustvo, bacite oko i na SBo šablon i vrlo korisne komentare koje sam zbog jasnoće i sažetosti morao da uklonim. Naravno, biće vam potrebno kakvo-takvo poznavanje engleskog za razumevanje.
Ovo je pojednostavljena verzija - Preuzmite šablon za slack-desc sa SlackBuilds.org:
http://slackbuilds.org/templates/slack-desc" onclick="window.open(this.href);return false; - Preuzmite GNUIT sa sledećeg linka: ftp://ftp.gnu.org/pub/gnu/gnuit/gnuit-4.9.5.tar.gz" onclick="window.open(this.href);return false;
- Napravite gnuit direktorijum i prebacite gnuit.SlackBuild, slack-desc i gnuit-4.9.5.tar.gz u njega
Izmena slack-desc šablona
1. Prvo potražite opis programa na matičnoj strani:
http://www.gnu.org/software/gnuit/" onclick="window.open(this.href);return false;
U ovom slučaju naš opis je odmah na glavnoj strani:
Code: Select all
gnuit (GNU Interactive Tools) is a set of interactive text-mode tools, closely integrated with the shell. It contains an extensible file system browser, an ascii/hex file viewer, a process viewer/killer and some other related utilities and shell scripts.
It can be used to increase the speed and efficiency of most of the daily tasks such as copying and moving files and directories, invoking editors, compressing and uncompressing files, creating and expanding archives, compiling programs, sending mail, etc. It looks nice, has colors (if the standard ANSI color sequences are supported) and is user-friendly.
Code: Select all
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
gnuit: gnuit (GNU Interactive Tools)
gnuit:
gnuit: gnuit is a set of interactive text-mode tools, closely integrated with
gnuit: the shell. It contains an extensible file system browser, an ascii/hex
gnuit: file viewer, a process viewer/killer and some related utilites.
gnuit:
gnuit: It can be used to increase the speed and efficiency of most of the
gnuit: daily tasks. It looks nice and is user-friendly
gnuit:
gnuit: Homepage: http://www.gnu.org/software/gnuit/
gnuit:
Izmena SlackBuild skripte
Otvorite gnuit.SlackBuild u omiljenom tekst editoru.
Pronađite deo koji počinje:
Code: Select all
# Slackware build script for <appname>
# Copyright <year> <you> <where you live>
# All rights reserved.
Code: Select all
# Slackware build script for gnuit
# Copyright 2012 Bojan Popovic, Belgrade, Serbia
# All rights reserved.
Code: Select all
PRGNAM=appname
VERSION=${VERSION:-x.y.z}
BUILD=${BUILD:-x}
TAG=${TAG:-_tag}
Code: Select all
PRGNAM=gnuit
VERSION=${VERSION:-4.9.5}
BUILD=${BUILD:-1}
TAG=${TAG:-_bocke}
Code: Select all
TMP=${TMP:-/tmp/tag}
Code: Select all
TMP=${TMP:-/tmp/bocke}
Komanda 1 - provera za postojanje man dokumentacije
Code: Select all
tar tf gnuit-4.9.5.tar.gz | grep ".1$"
Code: Select all
# Compress man pages
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
Komanda 2 - provera za postojanje info dokumentacije
Code: Select all
tar tf gnuit-4.9.5.tar.gz | grep ".info$"
Code: Select all
# Compress info pages and remove the package's dir file
rm -f $PKG/usr/info/dir
gzip -9 $PKG/usr/info/*.info*
U ovom slučaju, paket sadrži i info i man strane:
Code: Select all
~> tar tf gnuit-4.9.5.tar.gz | grep ".info$"
gnuit-4.9.5/doc/gnuit.texinfo
gnuit-4.9.5/doc/gnuit.info
~> tar tf gnuit-4.9.5.tar.gz | grep ".1$"
gnuit-4.9.5/doc/git.1
gnuit-4.9.5/doc/gitmount.1
gnuit-4.9.5/doc/gitps.1
gnuit-4.9.5/doc/gitview.1
gnuit-4.9.5/doc/gitwipe.1
gnuit-4.9.5/doc/gitunpack.1
gnuit-4.9.5/doc/gitrgrep.1
gnuit-4.9.5/doc/gitaction.1
gnuit-4.9.5/doc/gitdpkgname.1
gnuit-4.9.5/doc/gitkeys.1
gnuit-4.9.5/doc/gitfm.1
gnuit-4.9.5/doc/gitinternal.1
S obzirom da postoje i info datoteke, moramo prilagoditi putanju za info dokumentaciju (već sam pomenuo iznad da Slackware koristi tradicionalne putanje). Pokretanjem ./configure --help vidimo da postoji komandna opcija kojom je moguće definisati drugačiju lokaciju za info dokumentaciju. To je opcija "--infodir". Dakle, nađite sledeće:
Code: Select all
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--build=$ARCH-slackware-linux
Code: Select all
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--infodir=/usr/info \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--build=$ARCH-slackware-linux
Code: Select all
$ ./configure --help
`configure' configures gnuit 4.9.5 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/gnuit]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--disable-largefile omit support for large files
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-transition install transitional /usr/bin/git
--enable-debian Enable Debian-specific customisations
--enable-smp enable parallel compilation (Linux only)
--enable-gcc-warnings more gcc warnings for debugging purposes
--enable-efence link against the Electric Fence library
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <ianb@erislabs.net>.
Nakon ovoga, nađite deo koji izgleda ovako:
Code: Select all
cp -a \
<documentation> \
$PKG/usr/doc/$PRGNAM-$VERSION
Code: Select all
cp -a \
AUTHORS ChangeLog COPYING INSTALL LSM NEWS PLATFORMS PROBLEMS README \
$PKG/usr/doc/$PRGNAM-$VERSION
Code: Select all
cat $CWD/doinst.sh > $PKG/install/doinst.sh
Code: Select all
rm -fr $PKG/usr/bin/git
Code: Select all
# Copy the slack-desc (and a custom doinst.sh if necessary) into ./install
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
rm -fr $PKG/usr/bin/git
# Make the package
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
Testiranje
Sad je vreme da testiramo naš novi SlackBuild.
Code: Select all
chmod 755 gnuit.SlackBuild
su
./gnuit.SlackBuild
Code: Select all
Slackware package /tmp/gnuit-4.9.5-i486-1_bocke.tgz created.
Code: Select all
su
installpkg /tmp/gnuit-4.9.5-i486-1_bocke.tgz
Code: Select all
Verifying package gnuit-4.9.5-i486-1_bocke.tgz.
Installing package gnuit-4.9.5-i486-1_bocke.tgz:
PACKAGE DESCRIPTION:
# gnuit (GNU Interactive Tools)
#
# gnuit is a set of interactive text-mode tools, closely integrated with
# the shell. It contains an extensible file system browser, an ascii/hex
# file viewer, a process viewer/killer and some related utilites.
#
# It can be used to increase the speed and efficiency of most of the
# daily tasks. It looks nice and is user-friendly
#
# Homepage: http://www.gnu.org/software/gnuit/
#
Executing install script for gnuit-4.9.5-i486-1_bocke.tgz.
Package gnuit-4.9.5-i486-1_bocke.tgz installed.
Code: Select all
gitfm
Neke napomene
Programi koji ne koriste configure
Postupak izgradnje iz izvornog koda možemo podeliti u 3 aktivnosti:
- konfiguracija izgradnje
- izgradnja
- instalacija
- ./configure
- make
- make install
Neki od njih su i
- cmake (SlackBuilds.org šablon)
- Perl Build.pl (SlackBuilds.org šablon)
- Python setup tools (SlackBuilds.org šablon)
- Ruby gem (SlackBuilds.org šablon)
- qmake
- imake
- jam/ftjam
- primemover
Takođe postoje i paketi koji dolaze samo sa Makefile datotekom. Makefile datoteka sadrži skup pravila za "make", program koji služi za automatizaciju izgradnje. Dobro napisane Makefile datoteke koje podržavaju DESTDIR varijablu nisu problem. Ali postoji veliki broj Makefile datoteka koje je ne podržavaju. U ovom slučaju će biti potrebno da ručno kopirate datoteke programa u odgovarajući privremeni direktorijum (komandama install ili cp).
Dodatne datoteke za SlackBuilds.org skripte
Pored program.SlackBuild, slack-desc i doinst.sh, za prijavljivanje vaše skripte na SBo biće vam potrebne još najmanje dve datoteke:
- program.info - datoteka koja sadrži informacije o paketu
- README - datoteka koja sadrži kratki opis aplikacije i bilo kakve dodatne napomene
Datoteke sa ekstenzijom info, u ovom slučaju nisu isto što i info dokumentacija. Ovo je SlackBuilds.org specifičan info format.
Generički šablon dostupan na SlackBuilds.org izgleda ovako:
Code: Select all
PRGNAM="ime aplikacije"
VERSION="verzija aplikacije"
HOMEPAGE="matična strana aplikacije"
DOWNLOAD="direktan link za preuzimanje arhive sa izvornim kodom - nezavisnim od arhitekture ili x86"
MD5SUM="md5 suma arhive sa izvornim kodom"
DOWNLOAD_x86_64="direktan link za preuzimanje arhive sa izvornim kodom, samo x86_64"
MD5SUM_x86_64="md5 suma arhive sa izvornim kodom za x86_64"
REQUIRES="Aplikacije ili biblioteke dostupne iz SlackBuilds.org od kojih zavisi aplikacija (ovo ne uključuje pakete koji već dolaze uz Slack)"
MAINTAINER="Ime autora/osobe koja trenutno održava skript"
EMAIL="email adresa autora/osobe koja trenutno održava skript"
Ne treba da vas zbunjuje što postoje dve opcije za x86 i x86_64. SlackBuild skripte mogu da se koriste za izgradnju iz izvornog koda ili za prepakovanje već kompajliranih gotovih paketa.
- U prvom slučaju, bez obzira za koju arhitekturu pravite pakete, popunićete samo DOWNLOAD vrednost.
- U drugom slučaju, morate popuniti i DOWNLOAD_x86_64 vrednost. Primeri ovoga su vam verovatno dobro poznati: Google Chrome, Opera, itd.
Elem, većinu informacija već imamo, ali nam fali md5 zbir za arhivu sa izvornim kodom. To ćemo dobiti ovako:
Code: Select all
md5sum gnuit-4.9.5.tar.gz
Code: Select all
6b88eea39361ead2ad48b33b17a870f5 gnuit-4.9.5.tar.gz
Code: Select all
PRGNAM="gnuit"
VERSION="4.9.5"
HOMEPAGE="http://www.gnu.org/software/gnuit/"
DOWNLOAD="http://ftp.gnu.org/gnu/gnuit/gnuit-4.9.5.tar.gz"
MD5SUM="6b88eea39361ead2ad48b33b17a870f5"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Bojan Popovic"
EMAIL="bocke@slackware-srbija.org"
README datoteka
Uobičajena je praksa da README sadrži opis koji je sadržan u slack-desc datoteci. Na primer:
Code: Select all
gnuit is a set of interactive text-mode tools, closely integrated with
the shell. It contains an extensible file system browser, an ascii/hex
file viewer, a process viewer/killer and some related utilites.
It can be used to increase the speed and efficiency of most of the
daily tasks. It looks nice and is user-friendly
Priprema za prijavljivanje vašeg SlackBuild-a na naš forum ili SlackBuilds.org
Napravite direktorijum imepaketa. Na primer, za gnuit:
Code: Select all
mkdir gnuit
Code: Select all
tar cvfz gnuit.tar.gz gnuit/
Otvorite novu temu u forumu SlackBuild Radionica. Naslov mora biti "imeprograma". Napišite naziv program, prenesite ili napišite kratak opis aplikacije (recimo sadržaj README datoteke), postavite link ka matičnoj strani, direktan link za download verzije koja je pomenuta u SlackBuild skripti i prikačite arhivu "imeprograma.tar.gz" uz poruku. Nakon kratke provere, ako vaš SlackBuild ispunjava sve uslove, biće premešten u forum "Build skripte". Ako postoji neki problem sa skriptom, bićete zamoljeni da ga ispravite.
Pogledajte ovu temu za gnuit primer:
viewtopic.php?f=77&t=1702" onclick="window.open(this.href);return false;
U arhivi se nalaze i već gotovi SlackBuild i prateće datoteke, tako da možete da prekontrolišete vaše nakon što ste ispratili praktični deo tutorijala.
Postupak za prijavljivanje na SlackBuilds.org
Otvorite stranu http://slackbuilds.org/submit/" onclick="window.open(this.href);return false; i pratite uputstvo na engleskom jeziku.
Nakon prijave vaš paket će se nalaziti u redu za pregled: http://slackbuilds.org/pending/" onclick="window.open(this.href);return false;. Koliko će dugo vaša SlackBuild arhiva stajati u redu zavisi od više faktora. Između ostalog i od zauzetosti SlackBuilds.org administracije, broja paketa u redu, itd.
Ako postoji problem sa vašom skriptom, dobićete email sa komentarima admina koji je pregledao skriptu u kojoj će vam ukazati na greške. Mada se može desiti da, ako su u pitanju neke sitnije ispravke, dežurni admin sam izmeni skriptu. I u ovom slučaju ćete najčešće biti obavešteni putem email-a.
Reference
Literatura
- Neki delovi ovog članka su inspirisani sledećim dokumentom: An Introduction to Slackware Packages (PDF), Stuart Winter, FOSDEM 2005
Fusnote