1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# Crossbuild
## Summary
The "crossbuild" system is a way to build FreeRADIUS for multiple
different operating systems, using Docker.
The primary purpose is for developers to easily test FreeRADIUS on
different systems.
**Do not use this for running FreeRADIUS in production - see
`scripts/docker` instead.**
## Common Usage
The systems supported can be listed with
make crossbuild.info
A reminder of the make targets may be seen with
make crossbuild.help
To make all the known systems (this may take quite a while, at
least on the first run):
make crossbuild
or for the most common systems (Debian, Ubuntu, CentOS, Rocky):
make crossbuild.common
## General operation
The system works by building and then starting up Docker
containers for the systems. When a build is triggered (either
generally, as above, or for a specific OS) the current git commits
are copied into the image and then `make test` run.
The Docker containers are left running, and may be stopped with
make crossbuild.down
The system tries to be as efficient as possible, so will not
rebuild the Docker images from scratch every time, but use an
existing image and copy just the latest git commits in for
testing.
## Global make targets
The following targets will operate on the crossbuild system
globally, or on all images (unless otherwise stated):
- `make crossbuild`
Create all docker images (if required), start them, build and
test FreeRADIUS.
- `make crossbuild.common`
As `make crossbuild`, but only build and test the most common
systems.
- `make crossbuild.info`
List all systems, together with the expected state. See
`crossbuild.reset`.
- `make crossbuild.down`
Stop all containers.
- `make crossbuild.reset`
If containers are stopped or started outside Docker,
crossbuild may get confused. This will clear the internal
state which should try and start everything from be beginning
again.
- `make crossbuild.clean`
Bring down all containers, clear state. This is a general
"tidy up".
- `make crossbuild.wipe`
Don't just stop, but destroy all crossbuild docker images.
This will mean they need to be recreated again upon next use.
## Per-image make targets
The following make targets may be used on a per-image basis:
* `make crossbuild.IMAGE`: build and test image
* `make crossbuild.IMAGE.log`: show latest build log
* `make crossbuild.IMAGE.up`: start container
* `make crossbuild.IMAGE.down`: stop container
* `make crossbuild.IMAGE.sh`: shell in container
* `make crossbuild.IMAGE.refresh`: push latest commits into container
* `make crossbuild.IMAGE.clean`: stop container and tidy up
* `make crossbuild.IMAGE.wipe`: remove Docker image
For example, `make crossbuild.debian10` to create, build and test
FreeRADIUS on Debian 10. `make crossbuild.debian10.down` will then
stop the container.
## Docker image and container names
Docker images will be created with names in the form:
freeradius-build/debian10
while containers will have names like:
fr-crossbuild-debian10
## Re-generating Dockerfiles
The Dockerfiles used for crossbuild are generated from m4
templates. To regenerate one use `make crossbuild.IMAGE.regen`, or
`make crossbuild.regen` to generate them all. The m4 templates are
stored in `scripts/crossbuild/m4/`. This will usually only need to
be used to add a new operating system, not during standard build
testing.
|