114 lines
4.6 KiB
Python
Executable File
114 lines
4.6 KiB
Python
Executable File
#!/usr/bin/env bash
|
|
|
|
cd "$(dirname $(readlink -f ${0}))"
|
|
exec > >(tee -i /tmp/llf.log) 2>&1
|
|
#trap 'echo $(basename ${BASH_SOURCE[0]}):${LINENO}: "${BASH_COMMAND}"' DEBUG
|
|
set -eET -o pipefail
|
|
. initrd/functions||true
|
|
for i in mksquashfs cpio gzip sed grep xorriso tar find file grub-mkrescue; do
|
|
if [ ! -x "$(type -P ${i})" ]; then
|
|
progsNotFound+=(${i})
|
|
case ${i} in
|
|
mksquashfs) a="squashfs-tools";;
|
|
readelf) a="binutils";;
|
|
find) a="find-utils";;
|
|
grub-mkrescue) a="grub2";;
|
|
*) a="${i}"
|
|
esac
|
|
echo "Please install ${a} package"
|
|
false
|
|
fi
|
|
done
|
|
|
|
main()
|
|
{
|
|
local DATA ret tmpRoot utc v krnV
|
|
krnV="$(file -bL ${kernel} | grep -o 'version .*' | cut -d' ' -f2)"
|
|
top="${PWD}"
|
|
INITRAMFS="${workTmpDir}/initRd"
|
|
DATA="${workTmpDir}/isoImage"
|
|
cat <<eot >>.config
|
|
KERNEL='$(readlink -f ${kernel})'
|
|
LMK='/lib/modules/${krnV}'
|
|
eot
|
|
env INITRAMFS="${INITRAMFS}" V="${V}" top="${top}" LMK="/lib/modules/${krnV}" initrd/create||true
|
|
ret="${?}"
|
|
tmpRoot="${workTmpDir}/tmpRoot"
|
|
mkdir -p $([ ${V} ]&&echo ${V}) ${DATA}/changes ${DATA}/os/modules
|
|
mv -f $([ ${V} ]&&echo ${V}) ${INITRAMFS}.img ${DATA}/initrd.img
|
|
rsync --force -aA $([ ${V} ]&&echo -P) $(for i in $(awk '{print $2}' /proc/mounts) /tmp; do echo "--exclude=${i}/*"; done) $(for i in /lib/modules/*; do [[ "${i}" =~ ${krnV} ]]&&continue||echo "--exclude=${i}";done) / ${tmpRoot}
|
|
chmod +x -R $([ ${V} ]&&echo ${V}) inc2sys
|
|
cp -rf $([ ${V} ]&&echo ${V}) inc2sys/* ${tmpRoot}
|
|
mknod ${tmpRoot}/dev/console c 5 1
|
|
mknod ${tmpRoot}/dev/null c 1 3
|
|
mknod ${tmpRoot}/dev/ram0 b 1 0
|
|
mknod ${tmpRoot}/dev/tty1 c 4 1
|
|
mknod ${tmpRoot}/dev/tty2 c 4 2
|
|
mknod ${tmpRoot}/dev/tty3 c 4 3
|
|
mknod ${tmpRoot}/dev/tty4 c 4 4
|
|
for i in zstd xz lz4 lzo gzip; do
|
|
mksquashfs ${tmpRoot} ${DATA}/os/system.sfs -comp $([ ${i} = lz4 ]&&echo echo "${i} -Xhc"||echo ${i}) $([ ${V} ]&&echo "-progress"||echo "-no-progress") -processors $(($(nproc)/6)) -noappend -limit 50
|
|
[ -e ${DATA}/os/system.sfs ]&&break
|
|
done
|
|
cp -rf $([ ${V} ]&&echo ${V}) bootfiles/* ${DATA}
|
|
for i in ${DATA}/syslinux.cfg ${DATA}/boot/grub/grub.cfg; do
|
|
sed -i -r "s/__DISTRO__/${DISTRO}/" ${i}
|
|
done
|
|
cp -f $([ ${V} ]&&echo ${V}) ${KERNEL} ${DATA}/vmlinuz
|
|
cd ${DATA}
|
|
utc="$(date +%s)"
|
|
v="$(git -C ${top} rev-parse HEAD 2>/dev/null|tr [:lower:] [:upper:]):$(git -C ${top} branch --show-current 2>/dev/null|tr [:lower:] [:upper:]):GIT"||true;v="INFINITY:PRIVATE:LOCAL"
|
|
cat <<eot >.LlfMeta
|
|
# Built using Linux-Live-Framework technology.
|
|
LLF_NAME="${DISTRO}"
|
|
LLF_VERSION="${v}"
|
|
LLF_UTC="${utc}"
|
|
eot
|
|
[[ ${ret} = 2 ]]&&echo "LLF_ELF_STATIC_INITRD=\"y\"" >>.LlfMeta||echo "LLF_ELF_STATIC_INITRD=\"n\"" >>.LlfMeta
|
|
grub-mkrescue $([ ${V} ]&&echo ${V}) -o /${DISTRO}-${utc}.iso --compress=xz --product-name="${DISTRO}" --product-version="v=${v} t=${UTC}" .
|
|
mv -f /${DISTRO}-${utc}.iso ${top}/images/${DISTRO}-${utc}.iso
|
|
#xorriso -as mkisofs -o /${DISTRO}-${utc}.iso -iso-level 3 -J -R -D -A ${DISTRO} -V ${DISTRO} -no-emul-boot -boot-info-table -boot-load-size 2 -b isolinux.bin -c boot/grub/grub.cat -eltorito-alt-boot -e /efi.img -no-emul-boot .
|
|
#isohybrid --version >/dev/null 2>&1&&isohybrid -u /${DISTRO}-${utc}.iso
|
|
}
|
|
selectKernel()
|
|
{
|
|
local checkbox_output list
|
|
mapfile -t list < <(find /boot -type f|egrep "bzImage|kernel|vmlinuz" 2>/dev/null|egrep -v "init|.*.old$"|sort -rn)
|
|
if [ ${#list[@]} -gt 1 ]; then
|
|
. ext/checkbox/checkbox.sh --message="Please choose your kernel version to proceed:" --index --options="$(for i in "${list[@]}"; do basename "${i}";done;)"
|
|
kernel="${list[${checkbox_output}]}"
|
|
else
|
|
kernel="${list[0]}"
|
|
fi
|
|
export kernel
|
|
}
|
|
validArgs="$(getopt --name "${0}" --options 'i::k:d:w:CDnv' --longoptions 'interactive,,kernel:,distro:,workdir:,clean,debug,dry-run,verbose' -- "$@")"
|
|
[[ ${?} -ne 0 ]]&&false
|
|
eval set -- "${validArgs}"
|
|
while :; do
|
|
case ${1} in
|
|
-i|--interactive) helper=true ;;
|
|
-k|--kernel) kernel="${2}"; shift ;;
|
|
-d|--distro) DISTRO="${2}"; shift ;;
|
|
-w|--workdir) workTmpDir="${2}"; shift ;;
|
|
-D|--debug) set -x ;;
|
|
-n|--dry-run) set -nv ;;
|
|
-v|--verbose) set -v ;;
|
|
-C|--clean) clean=true ;;
|
|
--) shift; break ;;
|
|
esac
|
|
shift
|
|
done
|
|
#shift $((OPTIND-1))
|
|
export SHELLOPTS
|
|
cp -f config .config
|
|
export V setCompatFlags clean
|
|
trap '. initrd/functions 2>/dev/null;[[ ${clean} ]]&& { m A "\nCleaning-up";if rp f "rm -rf ${workTmpDir}";then m i "\nDone!\n";else m w "\nFailed!\n";fi; };reset;exit ${?}' QUIT EXIT INT TERM
|
|
[[ ${helper} ]]&&selectKernel
|
|
[[ -z ${DISTRO} ]]&&. .config&&m w "DISTRO not set. Using defaults: ${DISTRO}\n"||true
|
|
workTmpDir="${workTmpDir:-$(mktemp -d cache/Llf_WorkDir_XXXXX_$(date +%s))}"||true
|
|
mkdir -p "${workTmpDir}"
|
|
export workTmpDir DISTRO kernel V
|
|
main
|
|
exit ${?}
|