From 9b873dd45319abe701157cef63cef14b3c9222aa Mon Sep 17 00:00:00 2001 From: anujmaheshwari1 Date: Wed, 12 Feb 2025 16:18:49 -0800 Subject: [PATCH 1/5] feat: install LTS kernel for all ubuntu versions --- vhdbuilder/packer/pre-install-dependencies.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vhdbuilder/packer/pre-install-dependencies.sh b/vhdbuilder/packer/pre-install-dependencies.sh index ea5e9f64e52..f192e3d42d9 100644 --- a/vhdbuilder/packer/pre-install-dependencies.sh +++ b/vhdbuilder/packer/pre-install-dependencies.sh @@ -133,7 +133,7 @@ if [[ ${OS} == ${MARINER_OS_NAME} ]] && [[ "${ENABLE_CGROUPV2,,}" == "true" ]]; enableCgroupV2forAzureLinux fi -if [[ "${UBUNTU_RELEASE}" == "22.04" && "${ENABLE_FIPS,,}" != "true" ]]; then +if [[ "${OS}" == "${UBUNTU_OS_NAME}" && "${ENABLE_FIPS,,}" != "true" ]]; then echo "Logging the currently running kernel: $(uname -r)" echo "Before purging kernel, here is a list of kernels/headers installed:"; dpkg -l 'linux-*azure*' @@ -141,8 +141,8 @@ if [[ "${UBUNTU_RELEASE}" == "22.04" && "${ENABLE_FIPS,,}" != "true" ]]; then DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $(dpkg-query -W 'linux-*azure*' | awk '$2 != "" { print $1 }' | paste -s) echo "After purging kernel, dpkg list should be empty"; dpkg -l 'linux-*azure*' - # Install lts-22.04 kernel - DEBIAN_FRONTEND=noninteractive apt-get install -y linux-image-azure-lts-22.04 linux-cloud-tools-azure-lts-22.04 linux-headers-azure-lts-22.04 linux-modules-extra-azure-lts-22.04 linux-tools-azure-lts-22.04 + # Install lts kernel + DEBIAN_FRONTEND=noninteractive apt-get install -y linux-image-azure-lts-${UBUNTU_RELEASE} linux-cloud-tools-azure-lts-${UBUNTU_RELEASE} linux-headers-azure-lts-${UBUNTU_RELEASE} linux-modules-extra-azure-lts-${UBUNTU_RELEASE} linux-tools-azure-lts-${UBUNTU_RELEASE} echo "After installing new kernel, here is a list of kernels/headers installed"; dpkg -l 'linux-*azure*' update-grub From c5b4d8b10d578aa0034fddb7591afd3ed00ede68 Mon Sep 17 00:00:00 2001 From: anujmaheshwari1 Date: Wed, 12 Feb 2025 17:24:14 -0800 Subject: [PATCH 2/5] test: add test for lts kernel --- vhdbuilder/packer/test/linux-vhd-content-test.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vhdbuilder/packer/test/linux-vhd-content-test.sh b/vhdbuilder/packer/test/linux-vhd-content-test.sh index bc1ab9f32da..ca527e2a7ea 100644 --- a/vhdbuilder/packer/test/linux-vhd-content-test.sh +++ b/vhdbuilder/packer/test/linux-vhd-content-test.sh @@ -404,6 +404,21 @@ testFips() { echo "$test:Finish" } +#testLtsKernel() { +# test="testLtsKernel" +# echo "$test:Start" +# os_version=$1 +# os_sku=$2 +# enable_fips=$3 +# +# if [[ "$os_sku" == "Ubuntu" && ${enable_fips,,} != "true" ]]; then +# echo "OS is Ubuntu and FIPS is not enabled, check LTS kernel version" +# kernel=$(uname -r) +# else +# echo "OS is not Ubuntu, skip LTS kernel test" +# fi +#} + testCloudInit() { test="testCloudInit" echo "$test:Start" From 932e26d37c711d0e556750ef28072b37e00f4583 Mon Sep 17 00:00:00 2001 From: anujmaheshwari1 Date: Wed, 12 Feb 2025 18:13:54 -0800 Subject: [PATCH 3/5] fix: add conditional to check packages are present or not --- vhdbuilder/packer/pre-install-dependencies.sh | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/vhdbuilder/packer/pre-install-dependencies.sh b/vhdbuilder/packer/pre-install-dependencies.sh index 493ec4aa7fe..8c12467c18d 100644 --- a/vhdbuilder/packer/pre-install-dependencies.sh +++ b/vhdbuilder/packer/pre-install-dependencies.sh @@ -116,16 +116,28 @@ if [[ ${OS} == ${MARINER_OS_NAME} ]] && [[ "${ENABLE_CGROUPV2,,}" == "true" ]]; fi if [[ "${OS}" == "${UBUNTU_OS_NAME}" && "${ENABLE_FIPS,,}" != "true" ]]; then + LTS_KERNEL="linux-image-azure-lts-${UBUNTU_RELEASE}" + LTS_TOOLS="linux-tools-azure-lts-${UBUNTU_RELEASE}" + LTS_CLOUD_TOOLS="linux-cloud-tools-azure-lts-${UBUNTU_RELEASE}" + LTS_HEADERS="linux-headers-azure-lts-${UBUNTU_RELEASE}" + LTS_MODULES="linux-modules-extra-azure-lts-${UBUNTU_RELEASE}" + echo "Logging the currently running kernel: $(uname -r)" echo "Before purging kernel, here is a list of kernels/headers installed:"; dpkg -l 'linux-*azure*' - # Purge all current kernels and dependencies - DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $(dpkg-query -W 'linux-*azure*' | awk '$2 != "" { print $1 }' | paste -s) - echo "After purging kernel, dpkg list should be empty"; dpkg -l 'linux-*azure*' + if apt-cache show "$LTS_KERNEL" &>/dev/null; then + echo "LTS kernel is available for ${UBUNTU_RELEASE}, proceeding with purging current kernel and installing LTS kernel..." + + # Purge all current kernels and dependencies + DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y $(dpkg-query -W 'linux-*azure*' | awk '$2 != "" { print $1 }' | paste -s) + echo "After purging kernel, dpkg list should be empty"; dpkg -l 'linux-*azure*' - # Install lts kernel - DEBIAN_FRONTEND=noninteractive apt-get install -y linux-image-azure-lts-${UBUNTU_RELEASE} linux-cloud-tools-azure-lts-${UBUNTU_RELEASE} linux-headers-azure-lts-${UBUNTU_RELEASE} linux-modules-extra-azure-lts-${UBUNTU_RELEASE} linux-tools-azure-lts-${UBUNTU_RELEASE} - echo "After installing new kernel, here is a list of kernels/headers installed"; dpkg -l 'linux-*azure*' + # Install LTS kernel + DEBIAN_FRONTEND=noninteractive apt-get install -y "$LTS_KERNEL" "$LTS_TOOLS" "$LTS_CLOUD_TOOLS" "$LTS_HEADERS" "$LTS_MODULES" + echo "After installing new kernel, here is a list of kernels/headers installed:"; dpkg -l 'linux-*azure*' + else + echo "LTS kernel for Ubuntu ${UBUNTU_RELEASE} is not available. Skipping purging and subsequent installation." + fi update-grub fi From 140acd606826890015efabefc8c3f851ba259d5a Mon Sep 17 00:00:00 2001 From: anujmaheshwari1 Date: Wed, 12 Feb 2025 19:55:13 -0800 Subject: [PATCH 4/5] test: add test for lts kernel --- vhdbuilder/packer/pre-install-dependencies.sh | 2 +- .../packer/test/linux-vhd-content-test.sh | 47 +++++++++++++------ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/vhdbuilder/packer/pre-install-dependencies.sh b/vhdbuilder/packer/pre-install-dependencies.sh index 8c12467c18d..9189a712367 100644 --- a/vhdbuilder/packer/pre-install-dependencies.sh +++ b/vhdbuilder/packer/pre-install-dependencies.sh @@ -115,7 +115,7 @@ if [[ ${OS} == ${MARINER_OS_NAME} ]] && [[ "${ENABLE_CGROUPV2,,}" == "true" ]]; enableCgroupV2forAzureLinux fi -if [[ "${OS}" == "${UBUNTU_OS_NAME}" && "${ENABLE_FIPS,,}" != "true" ]]; then +if [[ ${UBUNTU_RELEASE//./} -ge 2204 && "${ENABLE_FIPS,,}" != "true" ]]; then LTS_KERNEL="linux-image-azure-lts-${UBUNTU_RELEASE}" LTS_TOOLS="linux-tools-azure-lts-${UBUNTU_RELEASE}" LTS_CLOUD_TOOLS="linux-cloud-tools-azure-lts-${UBUNTU_RELEASE}" diff --git a/vhdbuilder/packer/test/linux-vhd-content-test.sh b/vhdbuilder/packer/test/linux-vhd-content-test.sh index 3a5a3f887fc..704a9e7741c 100644 --- a/vhdbuilder/packer/test/linux-vhd-content-test.sh +++ b/vhdbuilder/packer/test/linux-vhd-content-test.sh @@ -408,20 +408,36 @@ testFips() { echo "$test:Finish" } -#testLtsKernel() { -# test="testLtsKernel" -# echo "$test:Start" -# os_version=$1 -# os_sku=$2 -# enable_fips=$3 -# -# if [[ "$os_sku" == "Ubuntu" && ${enable_fips,,} != "true" ]]; then -# echo "OS is Ubuntu and FIPS is not enabled, check LTS kernel version" -# kernel=$(uname -r) -# else -# echo "OS is not Ubuntu, skip LTS kernel test" -# fi -#} +testLtsKernel() { + test="testLtsKernel" + echo "$test:Start" + os_version=$1 + os_sku=$2 + enable_fips=$3 + + if [[ "$os_sku" == "Ubuntu" && ${enable_fips,,} != "true" ]]; then + echo "OS is Ubuntu and FIPS is not enabled, check LTS kernel version" + # Check the Ubuntu version and set the expected kernel version + if [[ "$os_version" == "2204" ]]; then + expected_kernel="5.15" + elif [[ "$os_version" == "2404" ]]; then + expected_kernel="6.8" + else + echo "LTS kernel not installed for: $os_version" + fi + + kernel=$(uname -r) + echo "Current kernel version: $kernel" + if [[ "$kernel" == *"$expected_kernel"* ]]; then + echo "Kernel version is as expected ($expected_kernel)." + else + echo "Kernel version is not as expected. Expected $expected_kernel, found $kernel." + fi + else + echo "OS is not Ubuntu, skip LTS kernel test" + fi + +} testCloudInit() { test="testCloudInit" @@ -1175,4 +1191,5 @@ testPam $OS_SKU $OS_VERSION testUmaskSettings testContainerImagePrefetchScript testAKSNodeControllerBinary -testAKSNodeControllerService \ No newline at end of file +testAKSNodeControllerService +testLtsKernel $OS_VERSION $OS_SKU $ENABLE_FIPS \ No newline at end of file From 5817f9ab57c705c5a22d163e81e997e808b20b2e Mon Sep 17 00:00:00 2001 From: anujmaheshwari1 Date: Fri, 21 Feb 2025 16:44:51 -0800 Subject: [PATCH 5/5] fix: update log statement to correctly reflect conditional --- vhdbuilder/packer/test/linux-vhd-content-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vhdbuilder/packer/test/linux-vhd-content-test.sh b/vhdbuilder/packer/test/linux-vhd-content-test.sh index 704a9e7741c..7593df2d85e 100644 --- a/vhdbuilder/packer/test/linux-vhd-content-test.sh +++ b/vhdbuilder/packer/test/linux-vhd-content-test.sh @@ -434,7 +434,7 @@ testLtsKernel() { echo "Kernel version is not as expected. Expected $expected_kernel, found $kernel." fi else - echo "OS is not Ubuntu, skip LTS kernel test" + echo "OS is not Ubuntu OR OS is Ubuntu and FIPS is true, skip LTS kernel test" fi }