build using Docker

This commit is contained in:
Daniel Brahneborg 2025-12-05 10:03:05 +01:00
parent 8b1c128a93
commit b57bdea231
7 changed files with 147 additions and 9 deletions

8
.vimrc Normal file
View file

@ -0,0 +1,8 @@
set ts=4 sw=4
set ai si
" can this be copied from the /etc/vim/vimrc file instead?
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

31
.zshrc Normal file
View file

@ -0,0 +1,31 @@
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/emg/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
alias l=less m=more
alias ll='ls -l'
alias vi=vim
alias vg='valgrind --leak-check=full --show-leak-kinds=all --gen-suppressions=all'
ulimit -c unlimited
git_prompt() {
git branch --color=never |& grep -v "Not a git" | grep '^\*' | head -1 | tr -d '*' | tr ' ' '@'
}
setopt prompt_subst
autoload -U promptinit
promptinit
PS1='%n@%m:%~$(git_prompt)>'
RPS1='%T'
export TZ=CET

38
Dockerfile Normal file
View file

@ -0,0 +1,38 @@
# syntax=docker/dockerfile:1
FROM ubuntu:18.04
LABEL maintainer="daniel@braxo.se"
RUN \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata && \
apt-get install -y \
cmake \
gcc \
g++ \
git \
less \
libpcre2-dev \
make \
valgrind \
vim \
zsh \
&& \
apt-get clean
ADD \
.vimrc \
.zshrc \
/root/
RUN mkdir /opt/autofw
WORKDIR /opt/autofw
ADD src .
RUN \
cmake . && \
make

View file

@ -13,15 +13,13 @@ It assumes UFW for now.
## Building ## Building
First install some build tools. The easiest way to build this is to use Docker.
On Ubuntu you will run something like this:
- `apt-get install -y cmake libpcre2-dev make gcc` 1. Install the Docker command line client on your machine.
1. Run `./build.sh`. This will build a binary for aarch64 or x84_64, depending on your host.
We use CMake. 1. You can also add the parameter `arm` or `x86` to the `./build.sh` script to build for a particular architecture.
1. The result will be a binary in the `bin` sub directory.
- `cmake .` 1. You can then run `./run.sh` for an interactive environment. In this case the source code will be copied to new `src-x` directory (where `x` depends on the architecture), so your changes do not disappear when the Docker container exits. This script also takes the parameter `arm` or `x86`.
- `make`
Some functions are perhaps overly general, but that is because they are taken directly from the [EMG](https://nordicmessaging.se) source code. Some functions are perhaps overly general, but that is because they are taken directly from the [EMG](https://nordicmessaging.se) source code.
@ -68,7 +66,7 @@ This way whitelisted addresses can never be blocked.
## TODO ## TODO
- Dockerfile, for building x86 binaries on arm machines. - Better git/ssh setup.
- IPv6 - IPv6
- Other firewall backends, such as raw iptables. - Other firewall backends, such as raw iptables.

18
build.sh Executable file
View file

@ -0,0 +1,18 @@
. ./setarch.sh
pf=linux/$arch
img=autofw-$arch
export DOCKER_BUILDKIT=1
docker build \
--platform $pf \
-t $img \
.
mkdir -p bin
docker run --platform $pf -v $PWD/bin:/opt/mount --rm $img cp bin/autofw /opt/mount/autofw-$arch
exit 0

20
run.sh Executable file
View file

@ -0,0 +1,20 @@
#!/bin/sh
. ./setarch.sh
pf=linux/$arch
img=autofw-$arch
srcdir=`pwd`/src-$arch
if [ ! -d $srcdir ]; then
mkdir -p $srcdir
cp -a src/ $srcdir/
fi
srcbind="--mount type=bind,source=$srcdir,target=/opt/autofw"
docker run --rm -ti \
--platform=$pf \
`echo $srcbind` \
$img \
/bin/zsh

25
setarch.sh Normal file
View file

@ -0,0 +1,25 @@
hostarch=`arch`
if [ $hostarch = arm64 ]; then
arch=arm64
else
arch=amd64
fi
#arch=arm64
#arch=amd64
while [ $# -gt 0 ]; do
arg=$1
case $arg in
arm)
arch=arm64
;;
x86)
arch=amd64
;;
*)
echo ignored arg: $arg
;;
esac
shift
done