#!/bin/bash
script_dir="$(dirname ${BASH_SOURCE})"
if [ -d "$script_dir/SPECS" ]; then
spec_dir="$(realpath $script_dir/SPECS)"
else
spec_dir="$(realpath $script_dir/../../SPECS)"
fi
dist=".ph5"
declare -A kvers
declare -A krels
populate_kvers() {
local i=""
local sp=""
for i in linux linux-esx linux-rt; do
local k_specs=($(grep -lrw "^Name:[[:space:]]*$i$" $spec_dir/linux/))
local x="$(echo $i | tr '-' '_')"
for sp in ${k_specs[@]}; do
kvers[$x]+="$(grep ^Version: $sp | awk '{print $2}')"
krels[$x]+="$(grep ^Release: $sp | awk '{print $2}' | tr -d -c 0-9)"
done
done
}
create_specs() {
if [ $# -ne 1 ]; then
echo "ERROR: $FUNCNAME invalid args ..." 1>&2
return 1
fi
local i=
local kver_str="%{KERNEL_VERSION}"
local krel_str="%{KERNEL_RELEASE}"
local ksubrel_str="%{?kernelsubrelease}"
local pkg="$1"
local x="$(echo $pkg | tr '-' '_')"
local kver_arr=${kvers[$x]}
local krel_arr=${krels[$x]}
#local kver_arr=("6.1.75" "6.6.66" "6.8.88")
#local krel_arr=("1" "2" "4")
local sp=""
for i in ${!kver_arr[@]}; do
local kver="${kver_arr[$i]}"
local krel="${krel_arr[$i]}${dist}"
local a="$(echo $kver | cut -d. -f1)"
local b="$(echo $kver | cut -d. -f2)"
local c="$(echo $kver | cut -d. -f3)"
[ -z "$c" ] && c="0"
local d="${krel_arr[$i]}"
local ksubrel=$(printf ".%02d%02d%03d%03d" "$a" "$b" "$c" "$d")
for sp in ${specs[@]}; do
local target_dir="$(dirname $sp)"
if echo $sp | grep -qE "iavf|i40e|ice"; then
local kernel_flavour_macro="%{KERNEL_FLAVOUR}"
local kernel_flavour="${pkg#linux}"
local d_bname="$(basename -s .spec.in ${sp} | rev | cut -d- -f1 | rev)"
local d_vers=()
local tmp=(${d_info["$d_bname"]})
local d_ver_macro="${tmp[${#tmp[@]}-1]}"
for i in ${tmp[@]}; do
[ "$i" != "$d_ver_macro" ] && d_vers+=("$i")
done
local d_ver=""
for d_ver in ${d_vers[@]}; do
local kernel_fn="$(basename -- ${sp} .spec.in)-${d_ver}-${kver}.spec"
local target_fn=${pkg}-${kernel_fn#kernels-}
#echo "Now operating on '${kver}-${krel}' & ${target_dir}/${target_fn} ..."
sed -e "s|$kver_str|${kver}|" \
-e "s|$krel_str|${krel}|" \
-e "s|$ksubrel_str|${ksubrel}|" \
-e "s|$d_ver_macro|${d_ver}|" \
-e "s|$kernel_flavour_macro|${kernel_flavour}|" \
${sp} > ${target_dir}/${target_fn}
done
else
local target_fn="$(basename -- ${sp} .spec.in)-${kver}.spec"
#echo "Now operating on '${kver}-${krel}' & ${target_dir}/${target_fn} ..."
sed -e "s|$kver_str|${kver}|" \
-e "s|$krel_str|${krel}|" \
-e "s|$ksubrel_str|${ksubrel}|" \
${sp} > ${target_dir}/${target_fn}
fi
done
done
}
populate_kvers
specs=(falco sysdig)
echo "Creating ${specs[@]} specs ..."
for s in ${!specs[@]}; do
rm -f $spec_dir/${specs[$s]}/*.spec
specs[$s]="$spec_dir/${specs[$s]}/${specs[$s]}.spec.in"
done
create_specs "linux"
kernel_drivers_intel=()
for i in iavf i40e ice; do
kernel_drivers_intel+=(kernels-drivers-intel-$i)
done
specs=(${kernel_drivers_intel[@]})
for s in ${!specs[@]}; do
specs[$s]="$spec_dir/kernels-drivers-intel/${specs[$s]}.spec.in"
done
rm -f $spec_dir/kernels-drivers-intel/*.spec
declare -A d_info=()
d_info["ice"]="1.13.7 %{ICE_VERSION}"
d_info["iavf"]="4.9.5 %{IAVF_VERSION}"
d_info["i40e"]="2.22.18 %{I40E_VERSION}"
echo "Creating kernel drivers for linux ..."
create_specs "linux"
echo "Creating kernel drivers for linux-esx ..."
create_specs "linux-esx"
d_info["iavf"]="4.9.5 4.8.2 4.5.3 %{IAVF_VERSION}"
d_info["i40e"]="2.22.18 2.23.17 %{I40E_VERSION}"
d_info["ice"]="1.13.7 1.12.7 1.11.14 1.9.11 %{ICE_VERSION}"
echo "Creating kernel drivers for linux-rt ..."
create_specs "linux-rt"