Pisanje SlackBuild skripti

Uputstva, saveti i trikovi

Moderator: Urednik

Post Reply

Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 04 Dec 2012, 14:39


Uvod
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)
    SlackBuild skripte obično automatski detektuju ispravnu vrednost za vašu platformu. Ako malo detaljnije pogledate prosečnu SlackBuild.org skriptu videćete da se ta vrednost dobija pomoću komande:

    Code: Select all

    uname -m
    Primer:
    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)
    Primer:
    alpine-2.02-i486-1.txz
Anatomija paketa

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
Nekoliko pravila
  • 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
Datoteke specifične za Slackware

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:
primer.png
primer.png (9.37 KiB) Viewed 7138 times
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:
Original na engleskom jeziku: http://slackbuilds.org/templates/slack-desc" onclick="window.open(this.href);return false;

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}
Odgovara sledećim ručnim komandama:

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
Kao što vidimo iz primera, SlackBuild skripte (kao i shell skripte uopšte) nam omogućavaju da njihovim pokretanjem izvršimo veliki broj komandi koje bismo inače morali ručno da kucamo. Da bi ih pokrenuli dovoljno je otkucati samo:

Code: Select all

./unrar.SlackBuild
Paket će biti kreiran u /tmp direktorijumu, odakle ćemo ga instalirati sa:

Code: Select all

installpkg /tmp/unrar-4.0.7-1_SBo.tgz
I to je cela priča. Priznaćete da je to mnogo kraće nego kucanje dvadesetak komandi. Ako nije jasna prednost pravljenja skripte umesto ručnog kucanja, zamislite da imate 3 računara. Da li bi bilo lakše kucati 3x20 komandi ili 3x1 komandu? Ili zamislite da ste nabavili novi disk, reinstalirali sistem, kupili novi računar, itd... Jednokratno pisanje skripte nas štedi od bespotrebnog dodatnog kucanja svaki put kada imamo potrebu da ponovo uradimo istu stvar (evo to ti je automatizacija brok).

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
Kratak opis

Prva linija sadrži kratak opis skripte:

Code: Select all

# Slackware build script for <imeprograma>
Ona počinje sa tarabom ("#"). Linije koje počinju sa tarabom predstavljaju komentare u shell skriptama. Ove linije se ne izvršavaju. One služe za napomene, opise šta radi kod koji sledi i generalno bilo kakve komentare koje autor želi da prenese korisnicima skripte.

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.
Naravno, ako ne želite da prijavite svoj SlackBuild na SlackBuilds.org, možete koristiti i neku drugu licencu (Creative Commons, GPL i druge). Nenavođenje licence i "public domain" se ne preporučuju jer prava određenih zemalja ne sadrže institut "javnog dobra" ili "javnog domena".

Definisanje osnovnih varijabli

Code: Select all

PRGNAM=<ime programa>
VERSION=${VERSION:-<verzija>}
BUILD=${BUILD:-<broj izgradnje>}
TAG=${TAG:-_<vaš tag>}
PRGNAM je varijabla koja sadrži ime programa koji se pakuje
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}
Možda vas zbunjuju delovi koji izgledaju ovako:

Code: Select all

VARIJABLA=${VARIJABLA:-vrednost}
Ova konstrukcija omogućava da bez izmene skripte promenite datu vrednost pri njenom pokretanju.

Recimo:

Code: Select all

VERSION=0.2.0 ./hello.SlackBuild
Ovo će pokrenuti hello.SlackBuild i promeniti podrazumevanu vrednost (0.1.0) u novu (0.2.0) koja je postavljena tokom samog izvršavanja skripte.

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
Korišćene varijable
  • $ARCH (hardverska arhitektura za koju se izgrađuje paket)
Definisanje direktorijuma za izgradnju i pakovanje

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}	
Krako objašnjenje šta koja varijabla sadrži:
  • 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
Deo <vaša oznaka> zamenite sa vašom oznakom (kao u gornjoj sekciji), ali ovog puta bez povlake. Na primer, za SlackBuilds.org (SBo oznaka):

Code: Select all

TMP=${TMP:-/tmp/SBo} 
Korišćene komande Automatsko postavljanje parametara kompajlera

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
Ovde se postavljaju dve varijable:
  • SLKCFLAGS - parametri kompajlera
  • LIBDIRSUFFIX - sufiks sistemskog direktorijuma sa bibliotekama
Šta znači "sufiks sistemskog direktorijuma sa bibliotekama". Pa... Na 32-bitnim sistemima se biblioteke čuvaju u /usr/lib. Na 64-bitnim u /usr/lib64. Zašto? Zato što ovo omogućava da 64-bitni sistem sadrži istovremeno 32-bitne i 64-bitne biblioteke. To je ono što zovemo "multilib" sistem.

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
Korišćene komande Korišćene varijable
  • $TMP (privremeni direktorijum)
  • $PKG (direktorijum za pakovanje)
  • $OUTPUT (direktorijum u kojem se kreira gotov paket)
Otpakivanje arhive sa izvornim kodom

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
Korišćene komande Korišćene varijable
  • $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 {} \;
Korišćene komande Korišćene varijable
  • $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
Korišćene varijable
  • $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
Korišćene komande Korišćene varijable
  • $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
Korišćene komande Korišćene varijable
  • $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*
Korišćene komande Korišćene varijable
  • $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
Korišćene komande Korišćene varijable
  • $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
Korišćene komande Korišćene varijable
  • $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}
Korišćene komande Korišćene varijable
  • $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)
Tvoja prva SlackBuild skripta
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:
    sablon.SlackBuild.txt
    (3.58 KiB) Downloaded 571 times
    Ovo je pojednostavljena verzija 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.
  • 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.  
Koristeći ovo možemo popuniti osnovni slack-desc šablon:

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.
I izmenite u nešto poput (zamenite moje ime, mesto, zemlju sa vašim)

Code: Select all

# Slackware build script for gnuit

# Copyright 2012 Bojan Popovic, Belgrade, Serbia
# All rights reserved.
Zatim pronađite deo koji izgleda ovako:

Code: Select all

PRGNAM=appname			
VERSION=${VERSION:-x.y.z}	
BUILD=${BUILD:-x}
TAG=${TAG:-_tag}
i izmenite u (samo umesto "bocke" postavite vaš tag):

Code: Select all

PRGNAM=gnuit			
VERSION=${VERSION:-4.9.5}	
BUILD=${BUILD:-1}
TAG=${TAG:-_bocke}
Pronađite liniju koji izgleda ovako:

Code: Select all

TMP=${TMP:-/tmp/tag}
Zamenite "tag" u vaš izabrani tag, na primer:

Code: Select all

TMP=${TMP:-/tmp/bocke}
Proverite da li arhiva sa izvornim kodom sadrži .info ili .man dokumentaciju pokretanjem sledećih komandi:

Komanda 1 - provera za postojanje man dokumentacije

Code: Select all

tar tf gnuit-4.9.5.tar.gz | grep ".1$" 
Ako je izlaz prazan obrišite sledeći deo SlackBuilda:

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
Ako nije ostavite ga kakav jeste.

Komanda 2 - provera za postojanje info dokumentacije

Code: Select all

tar tf gnuit-4.9.5.tar.gz | grep ".info$"
Ako je izlaz prazan obrišite sledeći deo SlackBuilda:

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*
Ako nije ostavite ga kakav jeste.

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
Dakle, nije potrebno ništa brisati.

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
I umetnite liniju sa opcijom "--infodir":

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
I inače se configure opcije prilagođavaju specifičnom paketu. Ako vas zanima više, bacite pogled na različite skripte iz SBo. Imajte na umu da ne koriste svi programi configure (o tome nešto kasnije). Ali oni koji koriste su odličan primer. Kao što sam već napisao iznad, ako pokrenete configure sa opcijom --help, dobićete spisak svih opcija:

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>.
Ukoliko program koji pakujete ima neke posebne opcije, možete ih na sličan način (kao u gornjem primeru) dodati u vaš SlackBuild. U ovom slučaju ćemo koristiti podrazumevane vrednosti za sve ostalo.

Nakon ovoga, nađite deo koji izgleda ovako:

Code: Select all

cp -a \
  <documentation> \
  $PKG/usr/doc/$PRGNAM-$VERSION
Otvorite arhivu i proverite šta je od dokumentacije dostupno u glavnom direktorijumu arhive (pogledajte u prethodnu sekciju za objašnjenje šta tražimo). Zatim zamenite <documentation> sa listom datoteka. U ovom primeru:

Code: Select all

cp -a \
   AUTHORS ChangeLog COPYING INSTALL LSM NEWS PLATFORMS PROBLEMS README \
  $PKG/usr/doc/$PRGNAM-$VERSION
U ovom slučaju ne postoje neki posebni post-instalacioni zadaci, te nam doinst.sh nije potreban. Brišemo sledeću liniju:

Code: Select all

cat $CWD/doinst.sh > $PKG/install/doinst.sh
Ovaj program zahteva jednu malu intervenciju. Program sadrži menadžer datoteka koji se nekad zvao git, a od skoro je preimenovan u gitfm. Tako gnuit dolazi sa skriptom koja se instalira kao /usr/bin/git čija je jedina uloga da obavesti korisnika da je novo ime menadžera datoteka gitfm. S obzirom da je program git druge namene već instaliran u /usr/bin na Slackware-u, potrebno je obrisati ovu skriptu da bismo sprečili da ovaj drugi "git" bude prepisan. Dakle u SlackBuild skriptu dodajemo:

Code: Select all

rm -fr $PKG/usr/bin/git
Sada poslednji deo SlackBuilda izgleda ovako:

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}
To je sve. Sada prelazimo na sledeći korak: testiranje.

Testiranje

Sad je vreme da testiramo naš novi SlackBuild. :)

Code: Select all

chmod 755 gnuit.SlackBuild
su
./gnuit.SlackBuild
Sada će se odvijati sve one aktivnosti koje su opisane u strukturi SlackBuilda skripti. Kada se to završi, kao poslednju liniju bi trebalo da dobijete obaveštenje poput ovog:

Code: Select all

Slackware package /tmp/gnuit-4.9.5-i486-1_bocke.tgz created.
Sada možemo testirati paket:

Code: Select all

su
installpkg /tmp/gnuit-4.9.5-i486-1_bocke.tgz
Što bi trebalo da da izlaz poput ovoga:

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.
Sada ćemo isprobati gitfm:

Code: Select all

gitfm
Et voila:
gitfm.png
Operacija uspela, a i pacijent se nekako drži. :)

Neke napomene
Programi koji ne koriste configure

Postupak izgradnje iz izvornog koda možemo podeliti u 3 aktivnosti:
  • konfiguracija izgradnje
  • izgradnja
  • instalacija
U prethodnom delu uputstva prešli smo kreiranje paketa za softver koji koristi GNU autotools. Gore pomenuta 3 koraka u ovom slučaju izgledaju ovako:
  • ./configure
  • make
  • make install
Ali ne koriste svi programi ovaj sistem. Postoje alternativni sistemi za izgradnju u kojima se jedan ili prva dva koraka zamenjuju

Neki od njih su i Kao što vidite, za neke od njih postoje već gotovi šabloni. Za one za koje ne postoje ćete morati da konsultuje postojeće SlackBuild skripte sa SBo.

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
*.info datoteke

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"
Sada ćemo ovo popuniti za gnuit.
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.
Ovo ostavlja pitanje a šta je sa 32-bitnim paketima za 64-bitne sisteme? Ovakvi paketi neće biti prihvaćeni na SBo. Skripta će jednostavno izbaciti grešku da x86_64 arhitektura nije podržana. Instalacija 32-bitnih paketa na 64-bitni Slackware je moguće samo na multilib sistem. Ovo je već van materije ovog uputstva i time se neću baviti.

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
Izlaz će biti sledeći:

Code: Select all

6b88eea39361ead2ad48b33b17a870f5  gnuit-4.9.5.tar.gz
Sad kad imamo sve podatke, popunjavamo šablon:

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"
To je to.

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
Takođe je ovde moguće dodati dodatne napomene ili savete. Ovaj tekst se prikazuje kao opis SlackBuilda na SlackBuilds.org.

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
Pomerite sve datoteke osim arhive sa izvornim kodom u taj direktorijum, zatim kreirajte tar.gz (tar.bz2 ili tar.xz su takođe ok) arhivu sa sadržajem tog direktorijuma:

Code: Select all

tar cvfz gnuit.tar.gz gnuit/
Postupak za prijavljivanje na naš forum

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

Fusnote
  1. Wikipedia: Slackware


Post Reply

Who is online

Users browsing this forum: No registered users and 15 guests