From d9fc4be48641bc7116e4dacbdb5e3115c3181a89 Mon Sep 17 00:00:00 2001 From: "Sergey V. Lobanov" Date: Tue, 28 May 2024 21:46:28 +0200 Subject: build: add dkms support for ipoe and vlan_mon drivers, ci optimizations Signed-off-by: Sergey V. Lobanov --- .github/workflows/build-and-run.yml | 112 ++++++++++++++---------------------- .github/workflows/run-tests.yml | 86 +++++++++++++++++++++------ 2 files changed, 113 insertions(+), 85 deletions(-) (limited to '.github') diff --git a/.github/workflows/build-and-run.yml b/.github/workflows/build-and-run.yml index d788eda3..df0a5511 100644 --- a/.github/workflows/build-and-run.yml +++ b/.github/workflows/build-and-run.yml @@ -28,15 +28,17 @@ jobs: - name: Set common vars run: | echo UNAME_R=`uname -r` >> $GITHUB_ENV - echo UNAME_M=`uname -m` >> $GITHUB_ENV; + echo UNAME_M=`uname -m` >> $GITHUB_ENV + echo NEEDRESTART_SUSPEND=1 >> $GITHUB_ENV + echo DEBIAN_FRONTEND=noninteractive >> $GITHUB_ENV + echo DEBCONF_NONINTERACTIVE_SEEN=true >> $GITHUB_ENV - name: Install build tools run: > - sudo apt update && - NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install + sudo apt update && sudo -E apt -y install git build-essential cmake gcc linux-headers-`uname -r` libpcre3-dev libssl-dev liblua5.1-0-dev kmod - name: Check out repository code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: mkdir build @@ -61,7 +63,7 @@ jobs: accel-ppp_`git describe --tags --long | sed 's/^v//' | sed 's/-/+/' | sed 's/-/~/'`-1+${{ matrix.pkg-distro }}_`uname -m`.deb - name: Install debian package working-directory: ./build - run: NEEDRESTART_SUSPEND=1 sudo -E apt -y install ./accel-ppp*.deb + run: sudo -E apt -y install ./accel-ppp*.deb - name: Copy default config run: sudo cp /etc/accel-ppp.conf.dist /etc/accel-ppp.conf - name: Start accel-ppp @@ -70,12 +72,6 @@ jobs: run: sudo systemctl status accel-ppp - name: Check accel-ppp stat run: accel-cmd show stat - - name: Upload .deb package as artifact - uses: actions/upload-artifact@v4 - with: - name: deb-package-${{ matrix.distro }}-${{ env.UNAME_M }}-${{ env.UNAME_R }} - path: build/accel-ppp_*.deb - if-no-files-found: error # Debian based distros Build-in-Container-Debian: @@ -91,9 +87,9 @@ jobs: "debian:trixie", "ubuntu:20.04", "ubuntu:22.04", - "ubuntu:24.04" + "ubuntu:24.04", ] - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest container: image: ${{ matrix.distro }} steps: @@ -114,20 +110,25 @@ jobs: echo DISTRO=$DISTRO >> $GITHUB_ENV; echo CPACK_TYPE=$CPACK_TYPE >> $GITHUB_ENV; echo UNAME_M=`uname -m` >> $GITHUB_ENV; + echo NEEDRESTART_SUSPEND=1 >> $GITHUB_ENV; + echo DEBIAN_FRONTEND=noninteractive >> $GITHUB_ENV; + echo DEBCONF_NONINTERACTIVE_SEEN=true >> $GITHUB_ENV; cat $GITHUB_ENV - name: Install build tools run: > apt update && apt -y upgrade && apt -y dist-upgrade && - NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt -y install git build-essential cmake gcc + apt -y install git build-essential cmake gcc linux-headers-${{ env.HEADERS_SUFFIX }} - libpcre3-dev libssl-dev liblua5.1-0-dev kmod + libpcre3-dev libssl-dev liblua5.1-0-dev kmod dkms debhelper devscripts + - name: Install additional build tools (using apt) (for some OS) + run: apt -y install dh-dkms || exit 0 - name: Get kernel name from headers run: > echo KERNEL_NAME=`ls -1 /usr/src/ | grep 'linux-headers.*${{ env.HEADERS_SUFFIX }}' | sed 's/linux-headers-//'` >> $GITHUB_ENV; cat $GITHUB_ENV - name: Check out repository code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: mkdir build @@ -137,7 +138,7 @@ jobs: - name: cmake working-directory: ./build run: > - cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr + cmake -DBUILD_IPOE_DRIVER=FALSE -DBUILD_VLAN_MON_DRIVER=FALSE -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-${{ env.KERNEL_NAME }} -DMODULES_KDIR=${{ env.KERNEL_NAME }} -DLUA=TRUE -DSHAPER=FALSE -DRADIUS=TRUE @@ -145,7 +146,7 @@ jobs: - name: make working-directory: ./build run: make - - name: Generate debian package + - name: Generate debian package (without drivers) working-directory: ./build run: cpack -G DEB - name: Rename accel-ppp deb package @@ -153,6 +154,22 @@ jobs: run: > mv -v accel-ppp.deb accel-ppp_`git describe --tags --long | sed 's/^v//' | sed 's/-/+/' | sed 's/-/~/'`-1+${{ env.DISTRO }}_${{ env.UNAME_M }}.deb + - name: build dkms package for ipoe + working-directory: ./drivers/dkms/ipoe + run: | + cp -f ../../../build/version.h src/ + debuild -us -uc -tc -b + - name: build dkms package for vlan_mon + working-directory: ./drivers/dkms/vlan_mon + run: | + cp -f ../../../build/version.h src/ + debuild -us -uc -tc -b + - name: install ipoe and vlan_mon via dkms + working-directory: ./drivers/dkms + run: apt -y install ./*.deb + - name: install ipoe and vlan_mon via dkms + working-directory: ./drivers/dkms + run: apt -y install ./*.deb - name: Install debian package working-directory: ./build run: apt -y install ./accel-ppp*.deb @@ -162,60 +179,18 @@ jobs: run: sleep 1 - name: Check accel-ppp stat run: accel-cmd show stat - - name: Upload .deb package as artifact + - name: Upload accel-ppp .deb package as artifact uses: actions/upload-artifact@v4 with: - name: deb-package-${{ env.DISTRO }}-${{ env.UNAME_M }}-${{ env.KERNEL_NAME }} + name: deb-accel-ppp-${{ env.DISTRO }}-${{ env.UNAME_M }} path: build/accel-ppp_*.deb if-no-files-found: error - - Build-in-Container-Mainline: - if: ${{ false }} # disable for now - runs-on: ubuntu-latest - container: - image: ubuntu:devel - steps: - - name: Install build tools - run: > - apt update && apt -y upgrade && apt -y dist-upgrade && - DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt -y install git build-essential cmake gcc - linux-headers-generic libpcre3-dev libssl-dev liblua5.1-0-dev kmod software-properties-common - pkexec dbus linux-base && - add-apt-repository -y ppa:cappelikan/ppa && apt update && - service dbus start && - apt -y install mainline && - mainline --include-rc install-latest && - apt -y purge linux-headers-generic && apt -y autoremove - - name: Get kernel name from headers - run: > - echo KERNEL_NAME=`ls -1 /usr/src/ | grep 'linux-headers.*generic' | - sed 's/linux-headers-//'` >> $GITHUB_ENV; - cat $GITHUB_ENV - - name: Check out repository code - uses: actions/checkout@v3 + - name: Upload driver .deb packages as artifact + uses: actions/upload-artifact@v4 with: - fetch-depth: 0 - - name: mkdir build - run: mkdir build - - name: Disable git security warnings - run: git config --global --add safe.directory '*' - - name: cmake - working-directory: ./build - run: > - cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr - -DCMAKE_INSTALL_SYSCONFDIR=/etc - -DKDIR=/usr/src/linux-headers-${{ env.KERNEL_NAME }} - -DMODULES_KDIR=${{ env.KERNEL_NAME }} - -DLUA=TRUE -DSHAPER=FALSE -DRADIUS=TRUE .. - - name: make and install - working-directory: ./build - run: make && make install - - name: Start accel-ppp with default config - run: accel-pppd -d -c /etc/accel-ppp.conf.dist - - name: Sleep for 1 sec - run: sleep 1 - - name: Check accel-ppp stat - run: accel-cmd show stat + name: deb-accel-ppp-drivers-dkms-${{ env.DISTRO }} + path: drivers/dkms/accel-ppp*.deb + if-no-files-found: error Build-in-Container-Alpine: runs-on: ubuntu-24.04 @@ -226,7 +201,7 @@ jobs: run: > apk update && apk add --no-cache git cmake make g++ pcre-dev libressl-dev linux-headers libucontext-dev lua5.1-dev - name: Check out repository code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: mkdir build @@ -250,4 +225,3 @@ jobs: run: sleep 1 - name: Check accel-ppp stat run: accel-cmd show stat - \ No newline at end of file diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 303dfd0a..1e98e8a1 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -10,7 +10,7 @@ on: jobs: Test-in-Qemu: #if: ${{ false }} # disable for now - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest name: Test in Qemu (${{ matrix.distro }}) strategy: fail-fast: false @@ -57,10 +57,15 @@ jobs: with: fetch-depth: 0 path: "accel-ppp" + - name: Set common vars + run: | + echo NEEDRESTART_SUSPEND=1 >> $GITHUB_ENV + echo DEBIAN_FRONTEND=noninteractive >> $GITHUB_ENV + echo DEBCONF_NONINTERACTIVE_SEEN=true >> $GITHUB_ENV - name: Install qemu and required tools run: > sudo apt update && - NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install qemu-system-x86 qemu-utils cloud-image-utils cpu-checker cloud-image-utils wget openssh-client screen + sudo -E apt -y install qemu-system-x86 qemu-utils cloud-image-utils cpu-checker cloud-image-utils wget openssh-client screen - name: Check kvm support (fail is ok) run: sudo kvm-ok || exit 0 - name: Prepare cloud-init image disk @@ -96,9 +101,9 @@ jobs: wget -nv ${{ matrix.image }} -O img/image qemu-img resize -f ${{ matrix.format }} img/`ls -1 img` +2G - name: Run target OS first time (for cloud-init actions) - run: sudo qemu-system-x86_64 -m 4096 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img` -drive format=raw,file=init.img + run: sudo qemu-system-x86_64 -m 3072 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img` -drive format=raw,file=init.img - name: Run target OS - run: sudo screen -dmS qemu qemu-system-x86_64 -net nic -net user,hostfwd=tcp::2222-:22 -m 4096 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img` + run: sudo screen -dmS qemu qemu-system-x86_64 -net nic -net user,hostfwd=tcp::2222-:22 -m 3072 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img` - name: Check that target OS is running run: | sleep 1 @@ -124,8 +129,11 @@ jobs: git build-essential cmake gcc linux-headers-\`uname -r\` libpcre3-dev libssl-dev liblua5.1-0-dev kmod python3-pip libxml2-dev libxslt1-dev zlib1g-dev + dkms kmod debhelper devscripts iproute2 ppp pppoe isc-dhcp-client timelimit && (sudo pip3 install pytest pytest-dependency || sudo pip3 install --break-system-packages pytest pytest-dependency)" + - name: Install additional build tools (using apt) (for some OS) + run: ssh -i ssh-key -p2222 user@localhost "sudo -E apt -y install dh-dkms || exit 0" - name: Copy source code to target OS run: | tar -Jcf accel-ppp.tar.xz accel-ppp @@ -135,11 +143,28 @@ jobs: run: > ssh -i ssh-key -p2222 user@localhost "cd accel-ppp && mkdir build && cd build && - cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr + cmake -DBUILD_IPOE_DRIVER=FALSE -DBUILD_VLAN_MON_DRIVER=FALSE -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-\`uname -r\` -DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE .. && make && sudo make install" + - name: build dkms package for ipoe + run: > + ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/drivers/dkms/ipoe && + cp -f ../../../build/version.h src/ && + debuild -us -uc -tc -b" + + - name: build dkms package for vlan_mon + run: > + ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/drivers/dkms/vlan_mon && + cp -f ../../../build/version.h src/ && + debuild -us -uc -tc -b" + + - name: install ipoe and vlan_mon via dkms + run: > + ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/drivers/dkms && + sudo -E apt -y install ./*.deb" + - name: Run tests (not related to ipoe and vlan_mon drivers) timeout-minutes: 5 run: > @@ -154,7 +179,7 @@ jobs: - name: Insert ipoe kernel module run: > ssh -i ssh-key -p2222 user@localhost "cd accel-ppp && - sudo insmod build/drivers/ipoe/driver/ipoe.ko && + sudo modprobe ipoe && lsmod | grep ipoe " - name: Run tests (not related to vlan_mon drivers) @@ -172,7 +197,7 @@ jobs: - name: Insert vlan_mon kernel module run: > ssh -i ssh-key -p2222 user@localhost "cd accel-ppp && - sudo insmod build/drivers/vlan_mon/driver/vlan_mon.ko && + sudo modprobe vlan_mon && lsmod | grep vlan_mon" - name: Run tests (all) @@ -197,13 +222,21 @@ jobs: runs-on: ${{ matrix.distro }} steps: + - name: Set common vars + run: | + echo NEEDRESTART_SUSPEND=1 >> $GITHUB_ENV + echo DEBIAN_FRONTEND=noninteractive >> $GITHUB_ENV + echo DEBCONF_NONINTERACTIVE_SEEN=true >> $GITHUB_ENV - name: Install build tools (using apt) run: > sudo apt update && - NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install + sudo -E apt -y install git build-essential cmake gcc linux-headers-`uname -r` libpcre3-dev libssl-dev liblua5.1-0-dev kmod python3-pip - iproute2 ppp pppoe isc-dhcp-client + iproute2 ppp pppoe isc-dhcp-client dkms debhelper devscripts + + - name: Install additional build tools (using apt) (for some OS) + run: sudo -E apt -y install dh-dkms || exit 0 - name: Install testing tools (using pip) run: > @@ -217,22 +250,38 @@ jobs: - name: mkdir build run: mkdir build - - name: cmake + - name: cmake (without drivers) working-directory: ./build run: > - cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr + cmake -DBUILD_IPOE_DRIVER=FALSE -DBUILD_VLAN_MON_DRIVER=FALSE -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-`uname -r` -DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE .. - - name: make && make install + - name: make && make install (without drivers) working-directory: ./build run: make && sudo make install + - name: build dkms package for ipoe + working-directory: ./drivers/dkms/ipoe + run: | + cp -f ../../../build/version.h src/ + debuild -us -uc -tc -b + + - name: build dkms package for vlan_mon + working-directory: ./drivers/dkms/vlan_mon + run: | + cp -f ../../../build/version.h src/ + debuild -us -uc -tc -b + + - name: install ipoe and vlan_mon via dkms + working-directory: ./drivers/dkms + run: sudo -E apt -y install ./*.deb + - name: Insert and check kernel modules (ipoe and vlan-mon) # if: ${{ false }} run: | - sudo insmod build/drivers/vlan_mon/driver/vlan_mon.ko - sudo insmod build/drivers/ipoe/driver/ipoe.ko + sudo modprobe vlan_mon + sudo modprobe ipoe lsmod | grep ipoe lsmod | grep vlan_mon @@ -246,14 +295,19 @@ jobs: strategy: fail-fast: false matrix: - distro: ["ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04"] + distro: ["ubuntu-24.04"] runs-on: ${{ matrix.distro }} steps: + - name: Set common vars + run: | + echo NEEDRESTART_SUSPEND=1 >> $GITHUB_ENV + echo DEBIAN_FRONTEND=noninteractive >> $GITHUB_ENV + echo DEBCONF_NONINTERACTIVE_SEEN=true >> $GITHUB_ENV - name: Install build tools (using apt) run: > sudo apt update && - NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install + sudo -E apt -y install git build-essential cmake gcc linux-headers-`uname -r` libpcre3-dev libssl-dev liblua5.1-0-dev kmod python3-pip iproute2 ppp pppoe isc-dhcp-client -- cgit v1.2.3