#!/bin/sh

usage() {
cat <<USAGE
Usage: apt-rep.sh OPTION... REPOSITORY...

Options:
         -d, --download       Download Packages
         -r, --repository     Build Repositories
         -c, --cdimage        Make CD-Images

Copyright (c) 2002-2003 Ronny Buchmann <ronny-vlug@vlugnet.org>
This script is in the Public Domain.
USAGE
exit
}

download() {

rsync="rsync -vzrP --delete --delete-after --size-only"

if [ -n "$freshrpms" ]; then
mkdir -p freshrpms
$rsync freshrpms.net::freshrpms/redhat/9/ freshrpms/
fi


if [ -n "$updates" ]; then
mkdir -p os
$rsync ftp-stud.fht-esslingen.de::redhat/redhat/linux/updates/9/en/os/i386 os/
$rsync ftp-stud.fht-esslingen.de::redhat/redhat/linux/updates/9/en/os/i586 os/
$rsync ftp-stud.fht-esslingen.de::redhat/redhat/linux/updates/9/en/os/i686 os/
$rsync ftp-stud.fht-esslingen.de::redhat/redhat/linux/updates/9/en/os/athlon os/
$rsync ftp-stud.fht-esslingen.de::redhat/redhat/linux/updates/9/en/os/noarch os/
fi

if [ -n "$inoupdates" ]; then
mkdir -p inoupdates
rsync -vzrP --size-only -essh vlugnet.org:inoupdates/redhat-9/ inoupdates/
fi

if [ -n "$vlugrpms" ]; then
mkdir -p vlugrpms
rsync -vzrP -essh vlugnet.org:redhat-9/ vlugrpms/
fi

if [ -n "$newrpms" ]; then
mkdir -p newrpms
$rsync newrpms.sunsite.dk::projects/newrpms/www/htdocs/apt/redhat/en/i386/9.0/RPMS.newrpms newrpms/RPMS
$rsync newrpms.sunsite.dk::projects/newrpms/www/htdocs/apt/redhat/en/i386/9.0/SRPMS.newrpms newrpms/SRPMS
fi

if [ -n "$fedora" ]; then
mkdir -p fedora
$rsync ftp-stud.fht-esslingen.de::fedora/redhat/9/i386/RPMS.* fedora/
fi

if [ -n "$dag" ]; then
mkdir -p dag
$rsync dag.wieers.com::dag/apt/redhat/9/en/i386/RPMS.dag dag/
fi

} # download

repository() {

rm -rf apt/rh9/
mkdir -p apt/rh9/base

if [ -n "$freshrpms" ]; then
mkdir -p apt/rh9/RPMS.freshrpms
mkdir -p apt/rh9/SRPMS.freshrpms
find freshrpms -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.freshrpms/ \;
find freshrpms -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.freshrpms/ \;
cat <<EOF >apt/rh9/base/release.freshrpms
Archive: Red Hat Linux
Component: freshrpms
Version: 9
Origin: Freshrpms.net
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$updates" ]; then
mkdir -p apt/rh9/RPMS.updates
mkdir -p apt/rh9/SRPMS.updates
find os -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.updates/ \;
find os -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.updates/ \;
cat <<EOF >apt/rh9/base/release.updates
Archive: Red Hat Linux
Component: updates
Version: 9 en
Origin: Red Hat
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$inoupdates" ]; then
mkdir -p apt/rh9/RPMS.inoupdates
mkdir -p apt/rh9/SRPMS.inoupdates
find inoupdates -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.inoupdates/ \;
find inoupdates -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.inoupdates/ \;
cat <<EOF >apt/rh9/base/release.inoupdates
Archive: Red Hat Linux
Component: inoupdates
Version: 9
Origin: Vlugnet.org
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$vlugrpms" ]; then
mkdir -p apt/rh9/RPMS.vlugrpms
mkdir -p apt/rh9/SRPMS.vlugrpms
find vlugrpms -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.vlugrpms/ \;
find vlugrpms -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.vlugrpms/ \;
cat <<EOF >apt/rh9/base/release.vlugrpms
Archive: Red Hat Linux
Component: vlugrpms
Version: 9
Origin: Vlugnet.org
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$newrpms" ]; then
mkdir -p apt/rh9/RPMS.newrpms
mkdir -p apt/rh9/SRPMS.newrpms
find newrpms -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.newrpms/ \;
find newrpms -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.newrpms/ \;
cat <<EOF >apt/rh9/base/release.newrpms
Archive: Red Hat Linux
Component: newrpms
Version: 9
Origin: newrpms.sunsite.dk
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$fedora" ]; then
mkdir -p apt/rh9/RPMS.fedora.stable
mkdir -p apt/rh9/RPMS.fedora.unstable
mkdir -p apt/rh9/RPMS.fedora.testing
find fedora/*.stable -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.fedora.stable/ \;
find fedora/*.stable -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.fedora.stable/ \;
find fedora/*.unstable -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.fedora.unstable/ \;
find fedora/*.unstable -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.fedora.unstable/ \;
find fedora/*.testing -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.fedora.testing/ \;
find fedora/*.testing -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.fedora.testing/ \;
cat <<EOF >apt/rh9/base/release.fedora.stable
Archive: Red Hat Linux
Component: Fedora stable
Version: 9
Origin: fedora.us
Label: Shrike
Architecture: i386
EOF
cat <<EOF >apt/rh9/base/release.fedora.unstable
Archive: Red Hat Linux
Component: Fedora unstable
Version: 9
Origin: fedora.us
Label: Shrike
Architecture: i386
EOF
cat <<EOF >apt/rh9/base/release.fedora.testing
Archive: Red Hat Linux
Component: Fedora testing
Version: 9
Origin: fedora.us
Label: Shrike
Architecture: i386
EOF
fi

if [ -n "$dag" ]; then
mkdir -p apt/rh9/RPMS.dag
mkdir -p apt/rh9/SRPMS.dag
find dag -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln {} apt/rh9/RPMS.dag/ \;
find dag -type f -name "*.src.rpm" -exec ln {} apt/rh9/SRPMS.dag/ \;
cat <<EOF >apt/rh9/base/release.newrpms
Archive: Red Hat Linux
Component: dag
Version: 9
Origin: dag.wieers.com
Label: Shrike
Architecture: i386
EOF
fi

for i in apt/rh9/RPMS.*; do
pushd $i
	yum-arch -q . >/dev/null
	cat headers/header.info | cut -d= -f2 | xargs chmod 000
	find . -perm -400 -type f -maxdepth 1 -not -name 'kernel-*' -exec rm -f {} \;
	chmod 644 *
	chmod 755 headers
popd
done

genbasedir --flat --bloat --bz2only --progress `pwd`/apt/rh9 \
	inoupdates updates freshrpms vlugrpms newrpms dag \
	fedora.stable fedora.unstable fedora.testing

} # repository

cdimage() {
size=0
cdnum=1
base=apt/rh9/base
rm -rf apt-cd* shrike?.iso
for dir in `du -s apt/rh9/RPMS.*| sort -n | awk '{ print $2 }'`; do
	comp=$(basename $dir | sed -e 's/RPMS.//')
	size=$(($size+$(du -s $dir | awk '{ print $1 }')))
	if [ $size -gt 716000 ]; then
		# finish this cd
		# in the hope no single repo is bigger than one cd
		pushd apt-cd$cdnum >/dev/null
		mkdir -p .disk
		echo "Shrike CD$cdnum $(date +%Y-%m-%d)" > .disk/info
		mkisofs -J -r -f -o ../shrike$cdnum.iso -q .
		popd >/dev/null
		# and start next
		size=$(du -s $dir | awk '{ print $1 }')
		cdnum=$(($cdnum+1))
	fi
	mkdir -p apt-cd$cdnum/$base
	ln -s ../../../$dir apt-cd$cdnum/$dir
	ln -s ../../../../$base/release.$comp apt-cd$cdnum/$base/release.$comp
	ln -s ../../../../$base/pkglist.$comp.bz2 apt-cd$cdnum/$base/pkglist.$comp.bz2
done
# finish last cd
pushd apt-cd$cdnum
mkdir -p .disk
echo "Shrike CD$cdnum $(date +%Y-%m-%d)" > .disk/info
mkisofs -J -r -f -o ../shrike$cdnum.iso -q .
popd
}

# main
while [ -n "$1" ]; do
case "$1" in
	-d|--download)		download=1; shift;;
	-r|--repository)	repository=1; shift;;
	-c|--cdimage)		cdimage=1; shift;;
	fdr)			fedora=1; shift;;
	fr)			freshrpms=1; shift;;
	dag)			dag=1; shift;;
	os)			updates=1; shift;;
	ino)			inoupdates=1; shift;;
	vlug)			vlugrpms=1; shift;;
	new)			newrpms=1; shift;;
	all)			#fedora=1
				freshrpms=1
				dag=1
				updates=1 
				inoupdates=1
				vlugrpms=1
				newrpms=1
				shift
				;;
	*)			usage;;
esac
done

action="$download$repository$cdimage"
rep="$fedora$freshrpms$dag$updates$inoupdates$vlugrpms$newrpms"
[ -z "$action" -o -z "$rep" ] && usage

[ -n "$download" ] && download
[ -n "$repository" ] && repository
[ -n "$cdimage" ] && cdimage

