Portál AbcLinuxu, 4. května 2025 14:06
nainstaloval jsem si Slackware a rád bych si k němu dodělal něco jako systém portů. Jako vzor jsem si vzal existující slackbuild. Nikdy jsem nic většího nenaprogramoval, proto Vás poprosím o pomoc s rozborem slackbuildu, který je v příloze.
Tady se definují proměnné. Jediné, čemu nerozumím, je třetí řádka, odhaduju, že se tu pomocí toho sedu hledá ve zdrojovém kódu údaj o verzi.
PRGNAM=openscad VERSION=${VERSION:-2015.03.3} SRCVER=${SRCVER:-$(echo $VERSION | sed 's/\./-/2')} BUILD=${BUILD:-1} TAG=${TAG:-_SBo}
Tady se pomocí podmínky testuje architektura.
if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi
Další definice proměnných, které definují adresáře, které budou použity při tvorbě balíčku. Je tu definovaná proměnná arch, která bude použita později?
CWD=$(pwd) TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp}
Tady probíhá série porovnávání, za účelem zjištění architektury procesouru.
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
Tady se pravděpodobně mažou některé proměnné a adresáře, které byly předtím vytvořeny. Pak se rozbaluje zdrojový kód a nastavují práva
set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$SRCVER tar xvf $CWD/$PRGNAM-$SRCVER.src.tar.gz cd $PRGNAM-$SRCVER chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -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 {} \;
Tady se definují proměnné. Jediné, čemu nerozumím, je třetí řádka, odhaduju, že se tu pomocí toho sedu hledá ve zdrojovém kódu údaj o verzi.Výraz
${A:-B}
má hodnotu A
pokud ta je definovaná/neprázdná, jinak má hodnotu B
.
Výraz $()
zachytí výstup příkazu a ten je pak jeho hodnotou.
Příkaz echo
vypíše obsah proměnné $VERSION
(definované o řádek výše) a sed
v něm nahradí druhou tečku pomlčkou (mínusem).
Takže pokud je $SRCVER
definovaná tak se nezmění, jinak se vygeneruje podle $VERSION
.
Tady se pomocí podmínky testuje architektura.Pokud je proměnná
$ARCH
prázdná, tak se nastaví podle výstupu příkazu uname -m
.
Další definice proměnných, které definují adresáře, které budou použity při tvorbě balíčku. Je tu definovaná proměnná arch, která bude použita později?Já ji tam nevidím.
Tady probíhá série porovnávání, za účelem zjištění architektury procesouru.Podle toho jakou hodnotu má proměnná
$ARCH
se nastaví hodnoty proměnným $SLKCFLAGS
a $LIBDIRSUFFIX
.
Tady se pravděpodobně mažou některé proměnné a adresáře, které byly předtím vytvořeny. Pak se rozbaluje zdrojový kód a nastavují práva
rm
mazání, mkdir
vytvoření adresáře, cd
měna aktuálního adresáře, tar
komprese, chown
změna vlastníka, find
vyhledání souborů (s danými přístupovými právy) a chmod
pro změnu práv.
Nastartuj man
a pročti témata k jednotlivým příkazům.
táááákže natom třetím řádečku se nejdřiv výstup příkazu echo $VERSION jakoby strčí trubičkou | do příkazu sed. tamten argument příkazu sed se jakoby člení na takový tři kousky s/regulární výraz/čim nahrazuju/flags a v tomdletom konkrétním případě se najdou všecky tečky v tom stringu 2015.03.3 chceme je nahrazovat znakem pomlčky ale tim flagem nakonci řikáme že platí pouze pro druhej výskyt. nóóó takže jakoby dostanem z tamtoho stringu tohleto 2015.03-3 a nakonec to strčíme do proměný SRCVER.
tady něco málo k trubičkám hele tady k sedu hele a nemam vyzkoušený ale možná byse ti mohlo hodit dozačátku todleto 'ide' na dělání se sedem hele :O ;D
proměná arch neni definová tam ale už v tamton ifu s casem. nejdřiv se ten if koukne tim argumentem -z jestli je string nulovej respektive jestli jakoby má nulovou dýlku hele.nóó a když jako jóóó se vezme výstup příkazu uname -m kterej vrací 'machine hardware name' (to sem si našla v manuálu příkazem man uname. šipkama se posouváš a vylezeš z toho máčknutím 'q' ;D) a hledá se vodpovídající pattern a podle toho je ta arch deklarovaná. hele jak case jako funguje ;D
Není to úplně přesně na co se ptáš, ale koukal jsi na pkgsrc?nainstaloval jsem si Slackware a rád bych si k němu dodělal něco jako systém portů.
slackpkg update
slackpkg install-new
slackpkg upgrade-all
lilo
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.