diff --git a/.github/workflows/ci-modules.yaml b/.github/workflows/ci-modules.yaml index 2bc99c9..5bafb8a 100644 --- a/.github/workflows/ci-modules.yaml +++ b/.github/workflows/ci-modules.yaml @@ -2,9 +2,21 @@ name: Build and Push PF_RING modules on: workflow_dispatch: + inputs: + tag: + type: choice + description: "Tag to build" + options: + - all + - canary + per-module: + type: boolean + description: "Build container per module" + default: true jobs: prepare-matrix: + if: inputs.per-module == 'true' runs-on: ubuntu-latest outputs: versions: ${{ steps.set-matrix.outputs.versions }} @@ -60,6 +72,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -76,7 +91,7 @@ jobs: images: kubeshark/pf-ring-module tags: | type=raw,value={{date 'YYYYMMDD'}} - type=raw,value=all + type=raw,value=${{ inputs.tag}} - name: Build and push uses: docker/build-push-action@v5 @@ -85,6 +100,7 @@ jobs: file: ./modules/Dockerfile.all push: true tags: ${{ steps.meta.outputs.tags }} + platforms: linux/amd64,linux/arm64/v8 upload-modules-to-s3: runs-on: ubuntu-latest diff --git a/modules/Dockerfile.all b/modules/Dockerfile.all index e1ca2a6..15f1709 100644 --- a/modules/Dockerfile.all +++ b/modules/Dockerfile.all @@ -1,9 +1,8 @@ # Build container with all available modules FROM alpine:3.18 -COPY ko/*.ko /tmp/modules/ -COPY scripts/load-all-modules.sh /opt/scripts/load-all-modules.sh +COPY ko/*.ko /opt/modules/ COPY scripts/entrypoint.sh /opt/scripts/entrypoint.sh -RUN /opt/scripts/load-all-modules.sh +RUN apk add kmod ENTRYPOINT [ "/opt/scripts/entrypoint.sh" ] \ No newline at end of file diff --git a/modules/Dockerfile.single b/modules/Dockerfile.single index 8a193b4..ec8986b 100644 --- a/modules/Dockerfile.single +++ b/modules/Dockerfile.single @@ -2,9 +2,8 @@ FROM alpine:3.18 ARG KERNEL_VERSION -COPY ko/pf-ring-${KERNEL_VERSION}.ko /opt/lib/modules/${KERNEL_VERSION}/pf_ring.ko +COPY ko/pf-ring-${KERNEL_VERSION}.ko /opt/modules/pf-ring-${KERNEL_VERSION}.ko COPY scripts/entrypoint.sh /opt/scripts/entrypoint.sh RUN apk add kmod -RUN depmod -b /opt ${KERNEL_VERSION} ENTRYPOINT [ "/opt/scripts/entrypoint.sh" ] \ No newline at end of file diff --git a/modules/ko/pf-ring-5.10.209-198.812.amzn2.x86_64.ko b/modules/ko/pf-ring-5.10.209-198.812.amzn2.x86_64.ko new file mode 100644 index 0000000..46b819b Binary files /dev/null and b/modules/ko/pf-ring-5.10.209-198.812.amzn2.x86_64.ko differ diff --git a/modules/scripts/entrypoint.sh b/modules/scripts/entrypoint.sh index 73423e6..d346f4a 100755 --- a/modules/scripts/entrypoint.sh +++ b/modules/scripts/entrypoint.sh @@ -1,26 +1,31 @@ #!/bin/sh # Get the current kernel version -current_kernel_version=$(uname -r) +kernel_version=$(uname -r) # Check if the module directory exists for the current kernel -module_path="/opt/lib/modules/${current_kernel_version}/pf_ring.ko" +module_path="/opt/modules/pf-ring-${kernel_version}.ko" if [ -f "$module_path" ]; then # Check if the module is already loaded if ! lsmod | grep -q pf_ring; then - echo "Loading pf_ring module for kernel ${current_kernel_version}" - insmod $module_path + echo "Loading pf_ring module for kernel ${kernel_version}" + module_load_path="/opt/lib/modules/${kernel_version}/pf_ring.ko" + mkdir /opt/lib/modules/${kernel_version} -p + cp $module_path ${module_load_path} + depmod -b /opt ${kernel_version} + insmod ${module_load_path} if [ $? -ne 0 ]; then - echo "Failed to load module from $module_path" + echo "Failed to load module from ${module_load_path}" echo "Falling back to AF_PACKET" exit 0 fi + echo "pf_ring module loaded for kernel ${kernel_version}" else - echo "pf_ring module is already loaded for kernel ${current_kernel_version}" + echo "pf_ring module is already loaded for kernel ${kernel_version}" exit 0 fi else - echo "No pf_ring module found for the current kernel version ${current_kernel_version}" + echo "No pf_ring module found for the current kernel version ${kernel_version}" echo "Falling back to AF_PACKET" fi \ No newline at end of file diff --git a/modules/scripts/load-all-modules.sh b/modules/scripts/load-all-modules.sh deleted file mode 100755 index 10be4a5..0000000 --- a/modules/scripts/load-all-modules.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -apk add kmod - -for f in $(ls /tmp/modules/*.ko); do - kernel_version=$(echo $f | sed -E 's/.*pf-ring-(.*)\.ko/\1/'); - mkdir /opt/lib/modules/${kernel_version} -p - mv ${f} /opt/lib/modules/${kernel_version}/pf_ring.ko - echo "Loading module for ${kernel_version} kernel" - depmod -b /opt ${kernel_version} -done \ No newline at end of file