Program który przebuduje każdą paczkę dostępną w abs wraz z kompilacją lub ściągnięciem za pomocą pacmana zależności. Ma możliwość podania wersji którą chcesz zainstalować lub pobrania najnowszego revision pakietów cvs/svn/itp. Standardowo pakiety kompilują się w /tmp/repack-build ale możesz to zmienić za pomocą zmiennej builddir na samym początku. Przykład instalacji przy użyciu repackage:
$ pacman -Q bar bar 1.4-1 $ repackage -S bar=1.3.1 ==> Entering fakeroot environment ==> Making package: bar 1.3.1-0 (Wt, 25 wrz 2007, 12:33:12 CEST) ..
#!/bin/bash
#
builddir="/tmp/repack-build"
bin_versionpkg="/usr/bin/versionpkg"
msg() {
echo -e "\\033[1;32m*** \\033[1;37m$1\\033[0;37m"
}
build() {
unset pkgdir fpkgdir revision_number
if [ "`echo $2|grep =|wc -l`" -gt "0" ]; then
pkgname="`echo $2|cut -d= -f1`"
pkgver="`echo $2|cut -d= -f2`"
if [ ! -x "$bin_versionpkg" -a "$pkgver" = "get" ]; then
unset pkgver
msg "Package \"versionpkg\" not installed!"
fi
else
pkgname="$2"
unset pkgver
fi
if [ ! -d "$builddir" ]; then
mkdir "$builddir"
fi
cd "$builddir"
fpkgdir="`find /var/abs -type d -name $pkgname`"
ffind="0"
for i in $fpkgdir; do
if [ -r "$i/PKGBUILD" ]; then
let ffind++
sel_pkgdir[$ffind]="$i"
echo "${ffind}. $i"
fi
done
if [ "$ffind" -gt "1" ]; then
echo -n "Please, select your option [auto-select \"1\" - 15s]: "
typeset -i sel_no
read -n 1 -t 15 -r sel_no; echo
if [ -n "$sel_no" ] && [ "$sel_no" -gt "0" ] && \
[ "$ffind" -ge "$sel_no" ]; then
# ?????????????? please, repair this
[ -n "$sel_no" ] && \
pkgdir="${sel_pkgdir[$sel_no]}" || \
pkgdir="${sel_pkgdir[1]}"
else
pkgdir="${sel_pkgdir[1]}"
fi
else
pkgdir="${sel_pkgdir[1]}"
fi
unset fpkgdir ffind sel_pkgdir sel_no
if [ -n "$pkgdir" ]; then
cp -a $pkgdir $builddir/$pkgname
cd $pkgname
if [ -n "$pkgver" ] && [ "$pkgver" = "get" ]; then
msg "Retrieving latest revision.."
revision_number="$($bin_versionpkg -m 2> /dev/null)"
if [ -n "$revision_number" ]; then
msg "Newer revision detected: $revision_number"
pkgver="$revision_number"
else
msg "Oups.. This isn't revision repo and version will not be changed.."
unset pkgver
fi
fi
if [ -n "$pkgver" ]; then
eval "sed -i -e's#\(pkgver=\).*#\1$pkgver#g' PKGBUILD"
if [ -z "$revision_number" ]; then
sed -i -e's#\(pkgrel=\).*#\10#g' PKGBUILD
sed -i -e's#\(md5sums=\)('.*')#\1#g' PKGBUILD
fi
fi
if [ "`grep arch= PKGBUILD|wc -l`" -lt "1" ]; then
echo "arch=('i686')" >> PKGBUILD
fi
makepkg -$1 || pkgnotbuild=($pkgnotbuild $pkgname)
else
pkgnotfound=($pkgnotfound $pkgname)
fi
}
absup() {
if [ "`sudo -l|grep "/usr/bin/abs"|wc -l`" -gt "0" ]; then
sudo abs
else
msg "Please, give password for root to upgrade abs PKGBUILD tree.."
su -c abs
fi
msg "Upgrade PKGBUILD tree is finished.."
}
### BEGIN ###
if [ "${#@}" = "0" -o "$1" = "--help" -o "$1" = "-h" -o -z "$1" ]; then
cat <<EOF
repackage version 0.1.99.1 2007 | GPL2 | 3ED <kas1987@o2.pl>
Usage:
repackage [-S|-Sd|-So|-Sdo|-Sod] <package-name[=<ver>|=get]> ..
repackage [-B|-Bd|-Bo|-Bdo|-Bod] <package-name[=<ver>|=get]> ..
repackage [-c|-cc|-y|-h]
Options:
-S Depends install with pacman
d not clean cache
o package build only
-B Depends build from source
d not clean cache
o package build only
-c clean cache
-cc delete all files in tmp
-y refresh abs tree
-h show help options
<ver> - put your version of this program
get - versionpkg method for cvs/svn/ltd
EOF
exit 0
elif [ "$1" = "-S" ]; then
buildopts="iSscf"
elif [ "$1" = "-Sd" ]; then
buildopts="iSsf"
elif [ "$1" = "-So" ]; then
buildopts="scf"
elif [ "$1" = "-Sdo" -o "$1" = "-Sod" ]; then
buildopts="sf"
elif [ "$1" = "-B" ]; then
buildopts="iSbcf"
elif [ "$1" = "-Bd" ]; then
buildopts="iSbf"
elif [ "$1" = "-Bo" ]; then
buildopts="bcf"
elif [ "$1" = "-Bdo" -o "$1" = "-Bod" ]; then
buildopts="bf"
elif [ "$1" = "-c" ]; then
if [ -d "$builddir" ]; then
cd $builddir
for i in *; do
if [ -d "$i" ]; then
cd $i
rm -rf src/ pkg/
cd ..
fi
done
fi
msg "Complite.."
exit 0
elif [ "$1" = "-cc" ]; then
if [ -d "$builddir" ]; then
rm -rf $builddir
fi
msg "Complite.."
exit 0
elif [ "$1" = "-y" ]; then
absup
exit 0
fi
for i in $@; do
if [ "`echo $i|cut -c1`" != "-" ]; then
build "$buildopts" "$i"
fi
done
[ -n "$pkgnotbuild" ] && msg "This package is not build: ${pkgnotbuild[*]}"
[ -n "$pkgnotfound" ] && msg "This package is not found: ${pkgnotfound[*]}"