mirror of
https://github.com/krislamo/kernmod.git
synced 2025-09-14 09:59:29 +00:00
Compare commits
6 Commits
e48f1aaf3c
...
rocky
Author | SHA1 | Date | |
---|---|---|---|
f1192da2cb | |||
88e33a86bb | |||
a92fd87ba2 | |||
42c46c0556
|
|||
2523cb117b
|
|||
3dde1c3235
|
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,8 +1 @@
|
|||||||
*.cmd
|
|
||||||
*.ko
|
|
||||||
*.mod*
|
|
||||||
*.o
|
|
||||||
.helloworld.o.d
|
|
||||||
.vagrant
|
.vagrant
|
||||||
Module.symvers
|
|
||||||
modules.order
|
|
||||||
|
11
Vagrantfile
vendored
11
Vagrantfile
vendored
@@ -1,5 +1,14 @@
|
|||||||
|
VAGRANT_BOX=ENV["VAGRANT_BOX"]
|
||||||
|
if !VAGRANT_BOX || VAGRANT_BOX == "debian"
|
||||||
|
VAGRANT_BOX = "debian/bullseye64"
|
||||||
|
elsif VAGRANT_BOX == "rocky"
|
||||||
|
VAGRANT_BOX = "rockylinux/8"
|
||||||
|
elsif VAGRANT_BOX == "centos"
|
||||||
|
VAGRANT_BOX = "centos/7"
|
||||||
|
end
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
Vagrant.configure("2") do |config|
|
||||||
config.vm.box = "debian/bullseye64"
|
config.vm.box = VAGRANT_BOX
|
||||||
config.vm.synced_folder ".", "/vagrant"
|
config.vm.synced_folder ".", "/vagrant"
|
||||||
config.vm.network "private_network", type: "dhcp"
|
config.vm.network "private_network", type: "dhcp"
|
||||||
config.vm.provision "shell", path: "build.sh"
|
config.vm.provision "shell", path: "build.sh"
|
||||||
|
124
build.sh
124
build.sh
@@ -1,29 +1,117 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Initial variables
|
||||||
PACKAGE="helloworld"
|
PACKAGE="helloworld"
|
||||||
VERSION="0.1"
|
VERSION="0.1"
|
||||||
REVISION="1"
|
REVISION="1"
|
||||||
BUILDDIR="$(mktemp -d)/${PACKAGE}_$VERSION-$REVISION"
|
SRCDIR="/vagrant/src"
|
||||||
|
SCRATCH="/vagrant/scratch"
|
||||||
|
OUTDIR="$SCRATCH"
|
||||||
|
TEMPDIR="$(mktemp -d)"
|
||||||
|
INSTALL=0
|
||||||
|
BUILDDIR="$TEMPDIR/${PACKAGE}_$VERSION-$REVISION"
|
||||||
|
|
||||||
# Place sources and build package
|
# Test for distribution of GNU/Linux
|
||||||
mkdir -p "$BUILDDIR/usr/src/${PACKAGE}-$VERSION"
|
# 0 = unknown
|
||||||
mkdir -p "$BUILDDIR/etc"
|
# 1 = debian
|
||||||
mkdir -p "$BUILDDIR/DEBIAN"
|
# 2 = rocky/centos/rhel
|
||||||
cp -r /vagrant/src/usr/src/* "$BUILDDIR/usr/src/${PACKAGE}-$VERSION"
|
function check_distro {
|
||||||
cp -r /vagrant/src/etc/* "$BUILDDIR/etc"
|
if [ -f /etc/debian_version ]; then echo 1
|
||||||
cp -r /vagrant/src/DEBIAN/* "$BUILDDIR/DEBIAN"
|
elif [ -f /etc/redhat-release ]; then echo 2
|
||||||
cd "$BUILDDIR/.."
|
else echo 0
|
||||||
dpkg-deb --build "${PACKAGE}_$VERSION-$REVISION"
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Install package
|
# Install Linux headers for current debian kernel
|
||||||
|
function debian_headers {
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y linux-headers-$(uname -r)
|
apt-get install -y linux-headers-$(uname -r)
|
||||||
apt-get install -y "./${PACKAGE}_$VERSION-$REVISION.deb"
|
}
|
||||||
|
|
||||||
# Load module and show details about it
|
# Build debian package
|
||||||
modinfo helloworld
|
function build_deb {
|
||||||
cat /proc/modules | grep helloworld
|
[ $INSTALL -eq 1 ] && debian_headers
|
||||||
rmmod helloworld
|
mkdir -p "$BUILDDIR/usr/src/${PACKAGE}-$VERSION"
|
||||||
modprobe helloworld
|
mkdir -p "$BUILDDIR/etc"
|
||||||
cat /var/log/messages | grep helloworld
|
mkdir -p "$BUILDDIR/DEBIAN"
|
||||||
|
cp -r $SRCDIR/usr/src/* "$BUILDDIR/usr/src/${PACKAGE}-$VERSION"
|
||||||
|
cp -r $SRCDIR/etc/* "$BUILDDIR/etc"
|
||||||
|
cp -r $SRCDIR/DEBIAN/* "$BUILDDIR/DEBIAN"
|
||||||
|
cd "$TEMPDIR"
|
||||||
|
dpkg-deb --build "${PACKAGE}_$VERSION-$REVISION"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install Linux headers for current rhel kernel
|
||||||
|
function rhel_headers {
|
||||||
|
KERNEL_VERSION="$(uname -r | rev | cut -d '.' -f 2- | rev)"
|
||||||
|
yum install -y kernel-headers-"$KERNEL_VERSION" kernel-devel
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build redhat package
|
||||||
|
function build_rpm {
|
||||||
|
EL_VER="$(uname -r | awk 'match($0,/el[0-9]/) {print substr($0, RSTART, RLENGTH)}')"
|
||||||
|
[ $INSTALL -eq 1 ] && rhel_headers
|
||||||
|
yum install -y rpm-build rpmdevtools rpmlint
|
||||||
|
rpmdev-setuptree
|
||||||
|
mkdir -p "$BUILDDIR/${PACKAGE}-${VERSION}"
|
||||||
|
cp -r $SRCDIR/* "$BUILDDIR/${PACKAGE}-${VERSION}"
|
||||||
|
rm -rf ~/rpmbuild/SOURCES/$PACKAGE-$VERSION.tar.gz
|
||||||
|
(cd $BUILDDIR &&
|
||||||
|
tar -czvf ~/rpmbuild/SOURCES/$PACKAGE-$VERSION.tar.gz $PACKAGE-$VERSION)
|
||||||
|
cp $SRCDIR/$PACKAGE.spec ~/rpmbuild/SPECS/
|
||||||
|
rpmlint ~/rpmbuild/SPECS/$PACKAGE.spec &&
|
||||||
|
rpmbuild -bb ~/rpmbuild/SPECS/$PACKAGE.spec
|
||||||
|
}
|
||||||
|
|
||||||
|
# Display details on module
|
||||||
|
function info_mod {
|
||||||
|
modinfo "$PACKAGE"
|
||||||
|
cat /proc/modules | grep "$PACKAGE"
|
||||||
|
rmmod "$PACKAGE"
|
||||||
|
modprobe "$PACKAGE"
|
||||||
|
cat /var/log/messages | grep "$PACKAGE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build and install (optional)
|
||||||
|
function build_install {
|
||||||
|
DISTRO="$(check_distro)"
|
||||||
|
if [ $DISTRO -eq 0 ]; then
|
||||||
|
echo "ERROR: GNU/Linux distribution not detected"
|
||||||
|
exit -1
|
||||||
|
elif [ $DISTRO -eq 1 ]; then
|
||||||
|
build_deb
|
||||||
|
[ $INSTALL -eq 1 ] && apt-get install -y "./${PACKAGE}_$VERSION-$REVISION.deb"
|
||||||
|
elif [ $DISTRO -eq 2 ]; then
|
||||||
|
build_rpm
|
||||||
|
if [ $INSTALL -eq 1 ]; then
|
||||||
|
yum install -y epel-release
|
||||||
|
yum install -y dkms
|
||||||
|
rpm -i "~/rpmbuild/RPMS/noarch/$PACKAGE-$VERSION-$REVISION.$EL_VER.noarch.rpm"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
info_mod
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build and install helloworld module or module(s) in $SCRATCH
|
||||||
|
function main_routine {
|
||||||
|
if [ ! -z "$(ls -Al $SCRATCH | grep -e ^d)" ]; then
|
||||||
|
cd "$SCRATCH"
|
||||||
|
for d in */ ; do
|
||||||
|
if [ -f "$(basename $d)/override.sh" ]; then
|
||||||
|
SRCDIR="$(pwd)/$(basename $d)"
|
||||||
|
. "$(basename $d)/override.sh"
|
||||||
|
build_install
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
INSTALL=1
|
||||||
|
build_install
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Program starts here unless KERNMOD_MAIN is not 0
|
||||||
|
if [ "${KERNMOD_MAIN:-0}" -eq 0 ]; then
|
||||||
|
set -x
|
||||||
|
main_routine
|
||||||
|
fi
|
||||||
|
2
scratch/.gitignore
vendored
Normal file
2
scratch/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
37
src/helloworld.spec
Normal file
37
src/helloworld.spec
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
Name: helloworld
|
||||||
|
Version: 0.1
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: hello, world
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
License: 0BSD
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
Requires: dkms
|
||||||
|
|
||||||
|
%description
|
||||||
|
hello, world example
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
%build
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/%{_usrsrc}/%{name}-%{version}
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/etc
|
||||||
|
cp -r usr/src/* $RPM_BUILD_ROOT/%{_usrsrc}/%{name}-%{version}
|
||||||
|
cp -r etc/* $RPM_BUILD_ROOT/etc
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%files
|
||||||
|
%{_usrsrc}/%{name}-%{version}/dkms.conf
|
||||||
|
%{_usrsrc}/%{name}-%{version}/helloworld.c
|
||||||
|
%{_usrsrc}/%{name}-%{version}/Makefile
|
||||||
|
/etc/modules-load.d/%{name}.conf
|
||||||
|
|
||||||
|
%post
|
||||||
|
dkms add -m %{name} -v %{version}
|
||||||
|
dkms build -m %{name} -v %{version}
|
||||||
|
dkms install -m %{name} -v %{version}
|
||||||
|
modprobe %{name}
|
Reference in New Issue
Block a user