archboot/install/arch-current-install
Alexander Baldeck 2a150b1dca Initial revision
2007-02-22 22:46:50 +00:00

150 lines
5.2 KiB
Text

# Created by Tobias Powalowski <tpowa@archlinux.org>
install ()
{
### check for root
if ! [ $UID -eq 0 ]; then
echo "ERROR: only works when run as root!"
exit 1
fi
### check for activated testing repository
if ! [ "$(grep '^\[testing\]' /etc/pacman.conf)" = "" ]; then
echo "WARNING: TESTING REPOSITORY ACTIVATED"
echo "-------------------------------------"
echo "POSSIBILITY OF BROKEN BINARY PACKAGES ON INSTALL MEDIA!"
echo "Use a chroot instead to avoid those problems."
echo "5 seconds time to cancel with CTRL+C"
sleep 5
fi
### begin cvs part
if ! [ "${LOCALSETUP}" = "yes" ]; then
CVSTREE=$(mktemp /tmp/archcvs.XXXX)
rm ${CVSTREE}
mkdir -p ${CVSTREE}
# checkout actual CURRENT cvs
export CVSROOT=${CVSSETUP}
else
CVSTREE=${CVSTREE}
fi
cd ${CVSTREE}
if ! [ "${LOCALSETUP}" = "yes" ]; then
cvs -z3 co -r ${TAG} arch/build/
MAINCVSDIR="${CVSTREE}/arch/build"
cd ${MAINCVSDIR}
SEARCHCVS=$(find ./ -type d ! -name "CVS")
else
cd ${MAINCVSDIR}
SEARCHCVS=$(find ./ -type d ! -name "CVS")
fi
if ! [ "${TEMPDIR}" = "" ]; then
mkdir -p ${TEMPDIR}/arch/pkg/setup
# Download all packages
PACKAGES=$(for i in ${SEARCHCVS};do ! [ "$(echo $i | awk -F/ '{print $3}')" = "" ] && echo -n "current/$(echo $i| awk -F/ '{print $3}') ";done)
if ! [ "${LOCALSETUP}" = "yes" ]; then
pacman -Sy
if ! [ "$(pacman -Sw --noconfirm ${PACKAGES})" ]; then
echo "ABORTING: Something went wrong in package retrieving or md5sum check."
exit 1
fi
else
DBGENERATE="$(mktemp /tmp/db-generate.XXX)"
rm ${DBGENERATE}
mkdir -p ${DBGENERATE}
gensync ${MAINCVSDIR}/ ${DBGENERATE}/current.db.tar.gz ${PACKAGEDIR}
PACMANREPO="$(mktemp /tmp/pacman-repo.XXX)"
rm ${PACMANREPO}
mkdir -p ${PACMANREPO}
mount --bind ${PACKAGEDIR} ${PACMANREPO}
mv ${DBGENERATE}/current.db.tar.gz ${PACMANREPO}/
rm -r ${DBGENERATE}
PACMANCONF="$(mktemp /tmp/pacman-conf.XXX)"
echo "[current]" >> ${PACMANCONF}
echo "Server = file://${PACMANREPO}" >> ${PACMANCONF}
pacman -Sy --config ${PACMANCONF}
if ! [ "$(pacman -Sw --noconfirm --config ${PACMANCONF} ${PACKAGES})" ]; then
echo "ABORTING: Something went wrong in package retrieving or md5sum check."
umount ${PACMANREPO}
exit 1
fi
fi
# collect the packages
cd ${MAINCVSDIR}
for COPY in ${SEARCHCVS};do
if ! [ "$(echo ${COPY} | awk -F/ '{print $3}')" = "" ]; then
source "${COPY}/PKGBUILD"
cp /var/cache/pacman/pkg/${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz ${TEMPDIR}/arch/pkg/
echo "$(echo ${COPY}| awk -F/ '{print $2}')/${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz" >> ${TEMPDIR}/arch/pkg/setup/packages.txt
fi
done
# generate packages.txt
sort -u ${TEMPDIR}/arch/pkg/setup/packages.txt -o ${TEMPDIR}/arch/pkg/setup/packages.txt
fi
SCRIPT=
BINARIES=
# always needed for every install
cd ${CVSTREE}
if ! [ "${LOCALSETUP}" = "yes" ]; then
cvs -z3 co arch/scripts/{km,setup,quickinst}
cvs -z3 co arch/doc/en/guide/install/arch-install-guide.txt
cvs -z3 co arch/misc/bootdisk/2/mirrors.txt
fi
# fix km script
KM=$(mktemp /tmp/km.XXXX)
if ! [ "${LOCALSETUP}" = "yes" ]; then
cp -f ${CVSTREE}/arch/scripts/km ${KM}
else
cp -f ${KMSCRIPT} ${KM}
fi
sed -i -e 's#$BASEDIR/keymaps/##g' ${KM}
chmod 755 ${KM}
mkdir -p ${TEMPDIR}/arch
add_file "${KM}" "/bin/km"
# fix mirrors.txt
if ! [ "${LOCALSETUP}" = "yes" ]; then
sed -i -e "s/i686/$(uname -m)/g" ${CVSTREE}/arch/misc/bootdisk/2/mirrors.txt
add_file "${CVSTREE}/arch/scripts/setup" "/arch/setup"
add_file "${CVSTREE}/arch/scripts/quickinst" "/arch/quickinst"
add_file "${CVSTREE}/arch/misc/bootdisk/2/mirrors.txt" "/arch/mirrors.txt"
else
sed -i -e "s/i686/$(uname -m)/g" ${MIRRORS}
add_file "${SETUP}" "/arch/setup"
add_file "${QUICKINST}" "/arch/quickinst"
add_file "${MIRRORS}" "/arch/mirrors.txt"
fi
DOCS=$(mktemp /tmp/docs.XXXX)
if ! [ "${LOCALSETUP}" = "yes" ]; then
cp -f ${CVSTREE}/arch/doc/en/guide/install/arch-install-guide.txt ${DOCS}
else
cp -f ${DOCUMENTATION} ${DOCS}
fi
gzip -9 ${DOCS}
add_file "${DOCS}.gz" "/arch/archdoc.txt.gz"
add_dir "/src"
if ! [ "${LOCALSETUP}" = "yes" ]; then
if ! [ "${TEMPDIR}" = "" ]; then
cp ${CVSTREE}/arch/doc/en/guide/install/arch-install-guide.txt ${TEMPDIR}/arch/archdoc.txt
cd ${TEMPDIR}/arch/pkg/setup/
wget ${FTPSERVER}/$(uname -m)/setup/pacman.pkg.tar.gz
cd ${TEMPDIR}/arch/pkg/
wget ${FTPSERVER}/$(uname -m)/current.db.tar.gz
fi
else
if ! [ "${TEMPDIR}" = "" ]; then
cp -f ${DOCUMENTATION} ${TEMPDIR}/arch/archdoc.txt
cp -f ${PACMANBINARY} ${TEMPDIR}/arch/pkg/setup/
mv ${PACMANREPO}/current.db.tar.gz ${TEMPDIR}/arch/pkg/
umount ${PACMANREPO}
fi
fi
# generate iso title name
[ "${RUNPROGRAM}" = "mkbootcd" -o "${RUNPROGRAM}" = "mkbootcd-grub" ] && echo "Arch Linux CURRENT $(uname -m)" >> ${ISONAME}
}
help ()
{
cat <<HELPEOF
This hook sets up all you need for a arch current install image.
HELPEOF
}