Documentation/scripts/prtcheck

122 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
#
# $Id: prtcheck,v 1.1.1.1 2003/08/27 11:43:05 opel Exp $
# (c) 2003, Martin Opel <mo@obbl-net.de>
# revised 2022 by John McQuah <jmcquah@disroot.org> to address FS#1763
#
# Utility to check a port for existence of .signature, .footprint and
# the mandatory fields in Pkgfile. See "man 1 prtcheck" for details
#
# May be redistributed and modified under the terms of the GPL
# only usable with CRUX Linux, version 1.0 or higher
#
# USE AT YOUR OWN RISK
#
msg() {
echo -n -e "====> $1"
}
warn() {
msg "WARNING: $1\n"
excode=$(( excode+1 ))
}
error() {
msg "ERROR: $1\n"
exit -1
}
ok() {
msg "$(basename "$PWD") ok"
}
get_filename() {
if [[ "$1" =~ ^(http|https|ftp|file)://.*/(.+) ]]; then
echo "${BASH_REMATCH[2]}"
else
echo "$1"
fi
}
#
# read options
#
while [ $# -gt 0 ]; do
if [ "$1" = "--root" ]; then
convertfootprint="true"
else
error "unsupported option \"$1\""
fi
shift
done
((excode=0))
#
# Checking footprint
#
if [ ! -s .footprint ]; then
error "no footprint found or empty footprint!"
fi
if [ "$convertfootprint" = "true" ]; then
uid="$(id -nu)"
gid="$(id -ng)"
file=".footprint"
<$file sed -e "s,$uid/$gid,root/root," > $file.tmp
mv $file.tmp $file
fi
if [ "$( <.footprint cut -f 2 | grep -c -v "root/root" )" -gt 0 ]; then
warn "non-root users found!\nrun \"prtcheck --root\" to convert footprint"
fi
#
# Checking Pkgfile
#
if [ ! -s Pkgfile ]; then
error "no Pkgfile found or Pkgfile empty!"
fi
desc="$(<Pkgfile awk '/^# Description:/ {print gensub(/# Description:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
if [ "$desc" = "" ]; then
error "no Description in Pkgfile!"
fi
url="$(<Pkgfile awk '/^# URL:/ {print gensub(/# URL:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
if [ "$url" = "" ]; then
error "no URL in Pkgfile!"
fi
maintainer="$(<Pkgfile awk '/^# Maintainer:/ {print gensub(/# Maintainer:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
if [ "$maintainer" = "" ]; then
error "no Maintainer in Pkgfile!"
fi
depends="$(<Pkgfile awk '/^# Depends on:/ {print gensub(/# Depends on:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
if [ "$depends" = "" ]; then
warn "no dependencies, please check!"
fi
#
# Checking .signature
#
. Pkgfile
(( unsigned=0 ))
for f in Pkgfile .footprint; do
if ! grep -q "($f)" .signature; then
warn "$f not signed"
unsigned=$(( unsigned+1 ))
fi
done
for (( p=0; p<${#source[@]}; p++ )); do
if [ -z "${renames[$p]}" ] || [ "${renames[$p]}" = "SKIP" ]; then
renames[$p]=$( get_filename "${source[$p]}" )
fi
if ! grep -q "(${renames[$p]})" .signature; then
warn "${renames[$p]} not signed"
unsigned=$(( unsigned+1 ))
fi
done
[ "$unsigned" = 0 ] || error "incomplete signature file"
[ "$excode" = 0 ] && ok || exit $excode