#!/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"