build: try to unify the packages chroot handling

This commit is contained in:
Franco Fichtner 2014-12-23 18:36:52 +01:00
parent 054d5224e0
commit cea8c505fb
5 changed files with 44 additions and 49 deletions

View File

@ -118,16 +118,27 @@ setup_packages()
{
echo ">>> Setting up packages in ${1}..."
mkdir -p ${1}/${PACKAGESDIR}
cp ${PACKAGESDIR}/* ${1}/${PACKAGESDIR}
BASEDIR=${1}
shift
PKGLIST=${@}
# bootstrap pkg manually, not sure why...
pkg -c ${1} add ${PACKAGESDIR}/pkg-*.txz
mkdir -p ${PACKAGESDIR} ${BASEDIR}/${PACKAGESDIR}
cp ${PACKAGESDIR}/* ${BASEDIR}/${PACKAGESDIR} || true
# opnsense has all required ports embedded as dependencies
pkg -c ${1} add ${PACKAGESDIR}/opnsense-*.txz
if [ -z "${PKGLIST}" ]; then
# forcefully add all available packages
pkg -c ${BASEDIR} add -f ${PACKAGESDIR}/*.txz || true
else
# always bootstrap pkg
PKGLIST="pkg ${PKGLIST}"
rm -r ${1}/${PACKAGESDIR}
for PKG in ${PKGLIST}; do
# must fail if packages aren't there
pkg -c ${BASEDIR} add ${PACKAGESDIR}/${PKG}-*.txz
done
fi
rm -rf ${BASEDIR}/${PACKAGESDIR}/*
}
setup_platform()

View File

@ -29,20 +29,18 @@ set -e
. ./common.sh
setup_stage ${STAGEDIR}
setup_base ${STAGEDIR}
rm -f ${PACKAGESDIR}/opnsense-*.txz
git_clear ${COREDIR}
git_describe ${COREDIR}
setup_stage ${STAGEDIR}
setup_base ${STAGEDIR}
setup_packages ${STAGEDIR}
# no compiling needed; simply install
make -C ${COREDIR} DESTDIR=${STAGEDIR} install > ${STAGEDIR}/plist
rm -f ${PACKAGESDIR}/opnsense-*.txz
mkdir -p ${PACKAGESDIR} ${STAGEDIR}${PACKAGESDIR}
cp ${PACKAGESDIR}/* ${STAGEDIR}${PACKAGESDIR}
pkg -c ${STAGEDIR} add -f ${PACKAGESDIR}/*
cat >> ${STAGEDIR}/+PRE_DEINSTALL <<EOF
echo "Resetting root shell"
pw usermod -n root -s /bin/csh
@ -120,7 +118,6 @@ EOF
echo -n ">>> Creating custom package for ${COREDIR}... "
pkg -c ${STAGEDIR} create -m / -r / -p /plist -o ${PACKAGESDIR}
mv ${STAGEDIR}${PACKAGESDIR}/opnsense-*.txz ${PACKAGESDIR}
echo "done"

View File

@ -34,7 +34,7 @@ mkdir -p ${IMAGESDIR}
setup_stage ${STAGEDIR}
setup_base ${STAGEDIR}
setup_kernel ${STAGEDIR}
setup_packages ${STAGEDIR}
setup_packages ${STAGEDIR} opnsense
setup_mtree ${STAGEDIR}
setup_platform ${STAGEDIR}

View File

@ -35,7 +35,7 @@ mkdir -p ${IMAGESDIR}
setup_stage ${STAGEDIR}
setup_base ${STAGEDIR}
setup_kernel ${STAGEDIR}
setup_packages ${STAGEDIR}
setup_packages ${STAGEDIR} opnsense
setup_mtree ${STAGEDIR}
setup_platform ${STAGEDIR}

View File

@ -30,12 +30,27 @@ set -e
. ./common.sh
PORT_LIST=$(cat ${TOOLSDIR}/config/current/ports)
PORT_REUSE=
echo "${PORT_LIST}" | { while read PORT_NAME PORT_CAT PORT_OPT; do
if [ "${PORT_NAME}" = "#" ]; then
continue
fi
PACKAGE=$(ls ${PACKAGESDIR}/${PORT_NAME}-*.txz 2> /dev/null || true)
if [ -f "${PACKAGE}" ]; then
# may fail for missing dependencies and
# that's what we need: rebuild chain :)
PORT_REUSE="${PORT_REUSE} ${PORT_NAME}"
fi
done }
git_clear ${PORTSDIR}
git_clear ${SRCDIR}
setup_stage ${STAGEDIR}
setup_base ${STAGEDIR}
setup_packages ${STAGEDIR} ${PACKAGES}
setup_chroot ${STAGEDIR}
echo ">>> Setting up ports in ${STAGEDIR}"
@ -53,27 +68,6 @@ echo ">>> Setting up src in ${STAGEDIR}"
tar -C/ -cf - --exclude=.${SRCDIR}/.git .${SRCDIR} | \
tar -C${STAGEDIR} -pxf -
# bootstrap all available packages to save time
mkdir -p ${PACKAGESDIR} ${STAGEDIR}${PACKAGESDIR}
cp ${PACKAGESDIR}/* ${STAGEDIR}${PACKAGESDIR} || true
(echo "pkg ports-mgmt"; echo "${PORT_LIST}") | {
while read PORT_NAME PORT_CAT PORT_OPT; do
if [ "${PORT_NAME}" = "#" ]; then
continue
fi
PACKAGE=$(ls ${PACKAGESDIR}/${PORT_NAME}-*.txz 2> /dev/null || true)
if [ -f "${PACKAGE}" ]; then
# may fail for missing dependencies and
# that's what we need: rebuild chain :)
pkg -c ${STAGEDIR} add ${PACKAGE} || true
fi
done
}
rm -rf ${STAGEDIR}${PACKAGESDIR}/*
echo ">>> Building packages..."
chroot ${STAGEDIR} /bin/sh -es <<EOF || true
@ -84,8 +78,7 @@ else
make -C ${PORTSDIR}/ports-mgmt/pkg clean all install
fi
echo "${PORT_LIST}" | {
while read PORT_NAME PORT_CAT PORT_OPT; do
echo "${PORT_LIST}" | { while read PORT_NAME PORT_CAT PORT_OPT; do
if [ "\${PORT_NAME}" = "#" ]; then
continue
fi
@ -107,8 +100,7 @@ while read PORT_NAME PORT_CAT PORT_OPT; do
echo "\${PORT_NAME}: package names don't match"
exit 1
fi
done
}
done }
EOF
echo ">>> Creating binary packages..."
@ -136,22 +128,17 @@ pkg_resolve_deps()
pkg_resolve_deps pkg
echo "${PORT_LIST}" | {
while read PORT_NAME PORT_CAT PORT_OPT; do
echo "${PORT_LIST}" | { while read PORT_NAME PORT_CAT PORT_OPT; do
if [ "\${PORT_NAME}" = "#" ]; then
continue
fi
pkg_resolve_deps "\$(pkg info -E \${PORT_NAME})"
done
}
done }
EOF
rm -rf ${PACKAGESDIR}/*
mv ${STAGEDIR}${PACKAGESDIR}/* ${PACKAGESDIR}
# also build the meta-package
cd ${TOOLSDIR}/build && ./core.sh
# bundle all packages into a ready-to-use set
cd ${TOOLSDIR}/build && ./packages.sh