pentoo-overlay/pentoo/pentoo-livecd/files/makemo-2020.3
2020-08-28 22:58:52 -04:00

68 lines
2.2 KiB
Bash

#!/bin/bash
#gentoo-functions uses "consoletype" which returns non-zero exit codes on success
#the cleanest way to handle this is to never "set -e" before sourcing gentoo-functions
source /lib/gentoo/functions.sh
set -e
DST="/mnt/cdrom/modules"
if [[ -z "$@" ]] ; then
eerror "Please specify a package to build." && exit 1
fi
PKGDIR="$(portageq envvar PKGDIR)"
if [ ! -d "${PKGDIR}" ]; then
einfo "PKGDIR ${PKGDIR} missing, creating it"
mkdir "${PKGDIR}" || eerror "Failed to create ${PKGDIR}"
fi
if [ ! -w "${PKGDIR}" ]; then
eerror "ERROR: ${PKGDIR} is not writable or does not exist!"
exit 1
fi
if [ ! -w "${DST}" ]; then
eerror "ERROR: ${DST} is not writable, are you on the livecd?"
exit 1
fi
TMPDIR="$(mktemp -d)"
DEPS=$(emerge -pv "$@")
# | ignore nomerge | find versions | remove [ ebuild N ] | remove use flags | remove repo from version | not sure
PKG=$(echo "${DEPS}" | grep -v nomerge | grep -e ".*/.*" | awk -F '] ' '{print $2}' | awk '{print $1}' | awk -F '::' '{print $1}' | grep -v ^/)
[[ -z "${PKG}" ]] && eerror "Nothing to emerge!" && exit 1
einfo "Here are the dependencies :"
echo "${DEPS}"
read -rp "Proceed with the merging? [y]/n " ASK
if [ "${ASK}" == "n" ]; then
exit 0
fi
einfo "Preparing to merge all required packages"
emerge --oneshot "$@"
for x in ${PKG}
do
einfo "Prepping all required packages for module inclusion..."
quickpkg --include-config=y "=${x}"
# remove slot from version since portage doesn't include slot in tarball name
[[ ! -e ${PKGDIR}/"${x%:*}".tbz2 ]] && eerror "Build failed" && exit 1
tar -I lbzip2 -xf ${PKGDIR}/"${x%:*}".tbz2 -C "${TMPDIR}"
if [ -d "${TMPDIR}"/lib ] && [ -L /lib ]; then
mkdir -p "${TMPDIR}$(realpath /lib)"
mv -f "${TMPDIR}"/lib/* "${TMPDIR}$(realpath /lib)"
rm -rf "${TMPDIR:?}"/lib
fi
mkdir -p "${TMPDIR}"/var/db/pkg/"${x%:*}"
# remove slot again since it's not in the vdb folder version number
cp -a /var/db/pkg/"${x%:*}"/* "${TMPDIR}"/var/db/pkg/"${x%:*}"/
MOFILE=$(echo "${x%:*}" | sed -e 's/.*\///g')
einfo "Building module for ${MOFILE}"
mksquashfs "${TMPDIR}" "${DST}"/"${MOFILE}".lzm -comp xz -Xbcj x86 -b 1048576 -no-recovery -noappend -Xdict-size 1048576
einfo "Module now available in ${DST}/${MOFILE}.lzm"
rm -rf "${TMPDIR}"
done