##// END OF EJS Templates
Merge branch 'master' of git://github.com/drtyhlpr/rpi23-gen-image into drtyhlpr-master
vidal -
r707:4b0de60ca6dc Fusion
parent child
Show More
@@ -1,580 +1,596
1 1 # rpi23-gen-image
2 2 ## Introduction
3 <<<<<<< HEAD
3 4
4 5
5 6 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `jessie`, `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.11.y```).
6 7
7 8
9 =======
10 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for all Raspberry Pi computers. The script at this time supports the bootstrapping of the Debian (armhf/armel) releases `stretch` and `buster`. Raspberry Pi 0/1/2/3/4 images are generated for 32-bit mode only. Raspberry Pi 3 supports 64-bit images that can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
11 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
8 12
9 13 ## Build dependencies
10 14 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
11 15
12 16 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
13 17
18 <<<<<<< HEAD
14 19 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the Raspberry 3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf/armel) cross-compiler toolchain.
20 =======
21 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
15 22 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the Raspberry 3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf/armel/aarch64) cross-compiler toolchain.
16 23
17 24 The script has been tested using the default `crossbuild-essential-armhf` and `crossbuild-essential-armel` toolchain meta packages on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
18 25
19 26 ## Command-line parameters
20 27 The script accepts certain command-line parameters to enable or disable specific OS features, services and configuration settings. These parameters are passed to the `rpi23-gen-image.sh` script via (simple) shell-variables. Unlike environment shell-variables (simple) shell-variables are defined at the beginning of the command-line call of the `rpi23-gen-image.sh` script.
21 28
22 29 ##### Command-line examples:
23 30 ```shell
24 31 ENABLE_UBOOT=true ./rpi23-gen-image.sh
25 32 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
26 33 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
27 34 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
28 35 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
29 36 ENABLE_MINBASE=true ./rpi23-gen-image.sh
30 37 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
31 38 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
32 39 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
33 40 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
34 41 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
35 42 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
36 43 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
37 44 ```
38 45
39 46 ## Configuration template files
40 47 To avoid long lists of command-line parameters and to help to store the favourite parameter configurations the `rpi23-gen-image.sh` script supports so called configuration template files (`CONFIG_TEMPLATE`=template). These are simple text files located in the `./templates` directory that contain the list of configuration parameters that will be used. New configuration template files can be added to the `./templates` directory.
41 48
42 49 ##### Command-line examples:
43 50 ```shell
44 51 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
45 52 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
46 53 ```
47 54
48 55 ## Supported parameters and settings
49 56 #### APT settings:
50 57 ##### `APT_SERVER`="ftp.debian.org"
51 58 Set Debian packages server address. Choose a server from the list of Debian worldwide [mirror sites](https://www.debian.org/mirror/list). Using a nearby server will probably speed-up all required downloads within the bootstrapping process.
52 59
53 60 ##### `APT_PROXY`=""
54 61 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will speed-up the bootstrapping process because all required Debian packages will only be downloaded from the Debian mirror site once. If `apt-cacher-ng` is running on default `http://127.0.0.1:3142` it is autodetected and you don't need to set this.
55 62
56 63 ##### `KEEP_APT_PROXY`=false
57 64 Keep the APT_PROXY settings used in the bootsrapping process in the generated image.
58 65
59 66 ##### `APT_INCLUDES`=""
60 67 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
61 68
62 69 ##### `APT_INCLUDES_LATE`=""
63 70 A comma-separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
64 71
65 72 ---
66 73
67 74 #### General system settings:
68 75 ##### `SET_ARCH`=32
76 <<<<<<< HEAD
69 77 Set Architecture to default 32bit. If you want to compile 64-bit (RPI3 or RPI3+) set it to `64`. This option will set every needed cross-compiler or board specific option for a successful build.
78 =======
79 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
70 80 Set Architecture to default 32bit. If you want to compile 64-bit (RPI3/RPI3+/RPI4) set it to `64`. This option will set every needed cross-compiler or board specific option for a successful build.
71 81
72 82 ##### `RPI_MODEL`=2
73 83 Specify the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
74 84 - `0` = Raspberry Pi 0 and Raspberry Pi 0 W
75 85 - `1` = Raspberry Pi 1 model A and B
76 86 - `1P` = Raspberry Pi 1 model B+ and A+
77 87 - `2` = Raspberry Pi 2 model B
78 88 - `3` = Raspberry Pi 3 model B
79 89 - `3P` = Raspberry Pi 3 model B+
80 90 - `4` = Raspberry Pi 4 model B
81 91
82 92 ##### `RELEASE`="buster"
83 93 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
84 94
85 95 ##### `RELEASE_ARCH`="armhf"
86 96 Set the desired Debian release architecture.
87 97
88 98 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
89 99 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
90 100
91 101 ##### `PASSWORD`="raspberry"
92 102 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
93 103
94 104 ##### `USER_PASSWORD`="raspberry"
95 105 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
96 106
97 107 ##### `DEFLOCAL`="en_US.UTF-8"
98 108 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
99 109
100 110 ##### `TIMEZONE`="Europe/Berlin"
101 111 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
102 112
103 113 ##### `EXPANDROOT`=true
104 114 Expand the root partition and filesystem automatically on first boot.
105 115
106 116 ##### `ENABLE_DPHYSSWAP`=true
107 117 Enable swap. The size of the swapfile is chosen relative to the size of the root partition. It'll use the `dphys-swapfile` package for that.
108 118
109 119 ##### `ENABLE_QEMU`=false
110 120 Generate kernel (`vexpress_defconfig`), file system image (`qcow2`) and DTB files that can be used for QEMU full system emulation (`vexpress-A15`). The output files are stored in the `$(pwd)/images/qemu` directory. You can find more information about running the generated image in the QEMU section of this readme file.
111 121
112 122 ---
113 123
114 124 #### Keyboard settings:
115 125 These options are used to configure keyboard layout in `/etc/default/keyboard` for console and Xorg. These settings can also be changed inside the running OS using the `dpkg-reconfigure keyboard-configuration` command.
116 126
117 127 ##### `XKB_MODEL`=""
118 128 Set the name of the model of your keyboard type.
119 129
120 130 ##### `XKB_LAYOUT`=""
121 131 Set the supported keyboard layout(s).
122 132
123 133 ##### `XKB_VARIANT`=""
124 134 Set the supported variant(s) of the keyboard layout(s).
125 135
126 136 ##### `XKB_OPTIONS`=""
127 137 Set extra xkb configuration options.
128 138
129 139 ---
130 140
131 141 #### Networking settings (DHCP):
132 142 This parameter is used to set up networking auto-configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
133 143
134 144 ##### `ENABLE_DHCP`=true
135 145 Set the system to use DHCP. This requires an DHCP server.
136 146
137 147 ---
138 148
139 149 #### Networking settings (static):
140 150 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
141 151
142 152 ##### `NET_ADDRESS`=""
143 153 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
144 154
145 155 ##### `NET_GATEWAY`=""
146 156 Set the IP address for the default gateway.
147 157
148 158 ##### `NET_DNS_1`=""
149 159 Set the IP address for the first DNS server.
150 160
151 161 ##### `NET_DNS_2`=""
152 162 Set the IP address for the second DNS server.
153 163
154 164 ##### `NET_DNS_DOMAINS`=""
155 165 Set the default DNS search domains to use for non fully qualified hostnames.
156 166
157 167 ##### `NET_NTP_1`=""
158 168 Set the IP address for the first NTP server.
159 169
160 170 ##### `NET_NTP_2`=""
161 171 Set the IP address for the second NTP server.
162 172
163 173 ---
164 174
165 175 #### Basic system features:
166 176 ##### `ENABLE_CONSOLE`=true
167 177 Enable serial console interface. Recommended if no monitor or keyboard is connected to the RPi2/3. In case of problems fe. if the network (auto) configuration failed - the serial console can be used to access the system. On RPI `0` `3` `3P` the CPU speed is locked at lowest speed.
168 178
169 179 ##### `ENABLE_PRINTK`=false
170 180 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
171 181
172 182 ##### `ENABLE_BLUETOOTH`=false
173 183 Enable onboard Bluetooth interface on the RPi0/3/3P. See: [Configuring the GPIO serial port on Raspbian jessie and stretch](https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/).
174 184
175 185 ##### `ENABLE_MINIUART_OVERLAY`=false
176 186 Enable Bluetooth to use this. Adds overlay to swap UART0 with UART1. Enabling (slower) Bluetooth and full speed serial console. - RPI `0` `3` `3P` have a fast `hardware UART0` (ttyAMA0) and a `mini UART1` (ttyS0)! RPI `1` `1P` `2` only have a `hardware UART0`. `UART0` is considered better, because is faster and more stable than `mini UART1`. By default the Bluetooth modem is mapped to the `hardware UART0` and `mini UART` is used for console. The `mini UART` is a problem for the serial console, because its baudrate depends on the CPU frequency, which is changing on runtime. Resulting in a volatile baudrate and thus in an unusable serial console.
177 187
178 188 ##### `ENABLE_TURBO`=false
179 189 Enable Turbo mode. This setting locks cpu at the highest frequency. As setting ENABLE_CONSOLE=true locks RPI to lowest CPU speed, this is can be used additionally to lock cpu hat max speed. Need a good power supply and probably cooling for the Raspberry PI.
180 190
181 191 ##### `ENABLE_I2C`=false
182 192 Enable I2C interface on the RPi 0/1/2/3. Please check the [RPi 0/1/2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
183 193
184 194 ##### `ENABLE_SPI`=false
185 195 Enable SPI interface on the RPi 0/1/2/3. Please check the [RPi 0/1/2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
186 196
187 197 ##### `ENABLE_IPV6`=true
188 198 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
189 199
190 200 ##### `ENABLE_SSHD`=true
191 201 Install and enable OpenSSH service. The default configuration of the service doesn't allow `root` to login. Please use the user `pi` instead and `su -` or `sudo` to execute commands as root.
192 202
193 203 ##### `ENABLE_NONFREE`=false
194 204 Allow the installation of non-free Debian packages that do not comply with the DFSG. This is required to install closed-source firmware binary blobs.
195 205
196 206 ##### `ENABLE_WIRELESS`=false
197 207 Download and install the [closed-source firmware binary blob](https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm) that is required to run the internal wireless interface of the Raspberry Pi model `3`. This parameter is ignored if the specified `RPI_MODEL` is not `3`.
198 208
199 209 ##### `ENABLE_RSYSLOG`=true
200 210 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
201 211
202 212 ##### `ENABLE_SOUND`=true
203 213 Enable sound hardware and install Advanced Linux Sound Architecture.
204 214
205 215 ##### `ENABLE_HWRANDOM`=true
206 216 Enable Hardware Random Number Generator. Strong random numbers are important for most network-based communications that use encryption. It's recommended to be enabled.
207 217
208 218 ##### `ENABLE_MINGPU`=false
209 219 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
210 220
211 221 ##### `ENABLE_DBUS`=true
212 222 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
213 223
214 224 ##### `ENABLE_XORG`=false
215 225 Install Xorg open-source X Window System.
216 226
217 227 ##### `ENABLE_WM`=""
218 228 Install a user-defined window manager for the X Window System. To make sure all X related package dependencies are getting installed `ENABLE_XORG` will automatically get enabled if `ENABLE_WM` is used. The `rpi23-gen-image.sh` script has been tested with the following list of window managers: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
219 229
220 230 ##### `ENABLE_SYSVINIT`=false
221 231 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
222 232
223 233 ---
224 234
225 235 #### Advanced system features:
226 236 ##### `ENABLE_KEYGEN`=false
227 237 Recover your lost codec license
228 238
229 239 ##### `ENABLE_SYSTEMDSWAP`=false
230 240 Enables [Systemd-swap service](https://github.com/Nefelim4ag/systemd-swap). Usefull if `KERNEL_ZSWAP` is enabled.
231 241
232 242 ##### `ENABLE_MINBASE`=false
233 243 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
234 244
235 245 ##### `ENABLE_REDUCE`=false
236 246 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
237 247
238 248 ##### `ENABLE_UBOOT`=false
239 249 Replace the default RPi 0/1/2/3 second stage bootloader (bootcode.bin) with [U-Boot bootloader](https://git.denx.de/?p=u-boot.git;a=summary). U-Boot can boot images via the network using the BOOTP/TFTP protocol.
240 250 RPI4 needs tbd
241 251
242 252 ##### `UBOOTSRC_DIR`=""
243 253 Path to a directory (`u-boot`) of [U-Boot bootloader sources](https://git.denx.de/?p=u-boot.git;a=summary) that will be copied, configured, build and installed inside the chroot.
244 254
245 255 ##### `ENABLE_FBTURBO`=false
246 256 Install and enable the [hardware accelerated Xorg video driver](https://github.com/ssvb/xf86-video-fbturbo) `fbturbo`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
247 257
248 258 ##### `FBTURBOSRC_DIR`=""
249 259 Path to a directory (`xf86-video-fbturbo`) of [hardware accelerated Xorg video driver sources](https://github.com/ssvb/xf86-video-fbturbo) that will be copied, configured, build and installed inside the chroot.
250 260
251 261 ##### `ENABLE_VIDEOCORE`=false
252 262 Install and enable the [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) `vcgencmd`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
253 263
254 264 ##### `VIDEOCORESRC_DIR`=""
255 265 Path to a directory (`userland`) of [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
256 266
257 267 ##### `ENABLE_NEXMON`=false
258 268 Install and enable the [Source code for a C-based firmware patching framework for Broadcom/Cypress WiFi chips that enables you to write your own firmware patches, for example, to enable monitor mode with radiotap headers and frame injection](https://github.com/seemoo-lab/nexmon.git).
259 269
260 270 ##### `NEXMONSRC_DIR`=""
261 271 Path to a directory (`nexmon`) of [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
262 272
263 273 ##### `ENABLE_IPTABLES`=false
264 274 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
265 275
266 276 ##### `ENABLE_USER`=true
267 277 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
268 278
269 279 ##### `USER_NAME`=pi
270 280 Non-root user to create. Ignored if `ENABLE_USER`=false
271 281
272 282 ##### `ENABLE_ROOT`=false
273 283 Set root user password so root login will be enabled
274 284
275 285 ##### `ENABLE_HARDNET`=false
276 286 Enable IPv4/IPv6 network stack hardening settings.
277 287
278 288 ##### `ENABLE_SPLITFS`=false
279 289 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
280 290
281 291 ##### `CHROOT_SCRIPTS`=""
282 292 Path to a directory with scripts that should be run in the chroot before the image is finally built. Every executable file in this directory is run in lexicographical order.
283 293
284 294 ##### `ENABLE_INITRAMFS`=false
285 295 Create an initramfs that that will be loaded during the Linux startup process. `ENABLE_INITRAMFS` will automatically get enabled if `ENABLE_CRYPTFS`=true. This parameter will be ignored if `BUILD_KERNEL`=false.
286 296
287 297 ##### `ENABLE_IFNAMES`=true
288 298 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
289 299
290 300 ##### `ENABLE_SPLASH`=true
291 301 Enable default Raspberry Pi boot up rainbow splash screen.
292 302
293 303 ##### `ENABLE_LOGO`=true
294 304 Enable default Raspberry Pi console logo (image of four raspberries in the top left corner).
295 305
296 306 ##### `ENABLE_SILENT_BOOT`=false
297 307 Set the verbosity of console messages shown during boot up to a strict minimum.
298 308
299 309 ##### `DISABLE_UNDERVOLT_WARNINGS`=
300 310 Disable RPi2/3 under-voltage warnings and overlays. Setting the parameter to `1` will disable the warning overlay. Setting it to `2` will additionally allow RPi2/3 turbo mode when low-voltage is present.
301 311
302 312 ---
303 313
304 314 #### SSH settings:
305 315 ##### `SSH_ENABLE_ROOT`=false
306 316 Enable password-based root login via SSH. This may be a security risk with the default password set, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
307 317
308 318 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
309 319 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
310 320
311 321 ##### `SSH_LIMIT_USERS`=false
312 322 Limit the users that are allowed to login via SSH. Only allow user `USER_NAME`=pi and root if `SSH_ENABLE_ROOT`=true to login. This parameter will be ignored if `dropbear` SSH is used (`REDUCE_SSHD`=true).
313 323
314 324 ##### `SSH_ROOT_PUB_KEY`=""
315 325 Add SSH (v2) public key(s) from specified file to `authorized_keys` file to enable public key based SSH (v2) authentication of user `root`. The specified file can also contain multiple SSH (v2) public keys. SSH protocol version 1 is not supported. `ENABLE_ROOT` **and** `SSH_ENABLE_ROOT` must be set to `true`.
316 326
317 327 ##### `SSH_USER_PUB_KEY`=""
318 328 Add SSH (v2) public key(s) from specified file to `authorized_keys` file to enable public key based SSH (v2) authentication of user `USER_NAME`=pi. The specified file can also contain multiple SSH (v2) public keys. SSH protocol version 1 is not supported.
319 329
320 330 ---
321 331
322 332 #### Kernel compilation:
323 333 ##### `BUILD_KERNEL`=true
334 <<<<<<< HEAD
324 335 Build and install the latest RPi 0/1/2/3 Linux kernel. Currently only the default RPi 0/1/2/3 kernel configuration is used.
336 =======
337 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
325 338 Build and install the latest RPi 0/1/2/3/4 Linux kernel. The default RPi 0/1/2/3/ kernel configuration is used most of the time.
326 339 ENABLE_NEXMON - Changes Kernel Source to [https://github.com/Re4son/](Kali Linux Kernel)
327 340 Precompiled 32bit kernel for RPI0/1/2/3 by [https://github.com/hypriot/](hypriot)
328 341 Precompiled 64bit kernel for RPI3/4 by [https://github.com/sakaki-/](sakaki)
329 342
330 343
331 344 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
332 345 This sets the cross-compile environment for the compiler.
333 346
334 347 ##### `KERNEL_ARCH`="arm"
335 348 This sets the kernel architecture for the compiler.
336 349
337 350 ##### `KERNEL_IMAGE`="kernel7.img"
338 351 Name of the image file in the boot partition. If not set, `KERNEL_IMAGE` will be set to "kernel8.img" automatically if building for arm64.
339 352
340 353 ##### `KERNEL_BRANCH`=""
341 354 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
342 355
343 356 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
344 357 Sets the QEMU enviornment for the Debian archive. If not set, `QEMU_BINARY` will be set to "/usr/bin/qemu-aarch64-static" automatically if building for arm64.
345 358
346 359 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
347 360 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
348 361
349 362 ##### `KERNEL_REDUCE`=false
350 363 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
351 364
352 365 ##### `KERNEL_THREADS`=1
353 366 Number of parallel kernel building threads. If the parameter is left untouched the script will automatically determine the number of CPU cores to set the number of parallel threads to speed the kernel compilation.
354 367
355 368 ##### `KERNEL_HEADERS`=true
356 369 Install kernel headers with the built kernel.
357 370
358 371 ##### `KERNEL_MENUCONFIG`=false
359 372 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
360 373
361 374 ##### `KERNEL_OLDDEFCONFIG`=false
362 375 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
363 376
364 377 ##### `KERNEL_CCACHE`=false
365 378 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
366 379
367 380 ##### `KERNEL_REMOVESRC`=true
368 381 Remove all kernel sources from the generated OS image after it was built and installed.
369 382
370 383 ##### `KERNELSRC_DIR`=""
371 384 Path to a directory (`linux`) of [RaspberryPi Linux kernel sources](https://github.com/raspberrypi/linux) that will be copied, configured, build and installed inside the chroot.
372 385
373 386 ##### `KERNELSRC_CLEAN`=false
374 387 Clean the existing kernel sources directory `KERNELSRC_DIR` (using `make mrproper`) after it was copied to the chroot and before the compilation of the kernel has started. This parameter will be ignored if no `KERNELSRC_DIR` was specified or if `KERNELSRC_PREBUILT`=true.
375 388
376 389 ##### `KERNELSRC_CONFIG`=true
377 390 Run `make bcm2709_defconfig` (and optional `make menuconfig`) to configure the kernel sources before building. This parameter is automatically set to `true` if no existing kernel sources directory was specified using `KERNELSRC_DIR`. This parameter is ignored if `KERNELSRC_PREBUILT`=true.
378 391
379 392 ##### `KERNELSRC_USRCONFIG`=""
380 393 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
381 394
382 395 ##### `KERNELSRC_PREBUILT`=false
383 396 With this parameter set to true the script expects the existing kernel sources directory to be already successfully cross-compiled. The parameters `KERNELSRC_CLEAN`, `KERNELSRC_CONFIG`, `KERNELSRC_USRCONFIG` and `KERNEL_MENUCONFIG` are ignored and no kernel compilation tasks are performed.
384 397
385 398 ##### `RPI_FIRMWARE_DIR`=""
386 399 The directory (`firmware`) containing a local copy of the firmware from the [RaspberryPi firmware project](https://github.com/raspberrypi/firmware). Default is to download the latest firmware directly from the project.
387 400
388 401 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
389 402 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
390 403
391 404 ##### `KERNEL_NF`=false
392 405 Enable Netfilter modules as kernel modules
393 406
394 407 ##### `KERNEL_VIRT`=false
395 408 Enable Kernel KVM support (/dev/kvm)
396 409
397 410 ##### `KERNEL_ZSWAP`=false
398 411 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
399 412
400 413 ##### `KERNEL_BPF`=true
401 414 Allow attaching eBPF programs to a cgroup using the bpf syscall (CONFIG_BPF_SYSCALL CONFIG_CGROUP_BPF) [systemd compilations about it - File /lib/systemd/system/systemd-journald.server:36 configures an IP firewall (IPAddressDeny=all), but the local system does not support BPF/cgroup based firewalls]
402 415
403 416 ##### `KERNEL_SECURITY`=false
404 417 Enables Apparmor, integrity subsystem, auditing.
405 418
406 419 ##### `KERNEL_BTRFS`="false"
407 420 enable btrfs kernel support
408 421
409 422 ##### `KERNEL_POEHAT`="false"
410 423 enable Enable RPI POE HAT fan kernel support
411 424
412 425 ##### `KERNEL_NSPAWN`="false"
413 426 Enable per-interface network priority control - for systemd-nspawn
414 427
415 428 ##### `KERNEL_DHKEY`="true"
416 429 Diffie-Hellman operations on retained keys - required for >keyutils-1.6
417 430
418 431 ---
419 432
420 433 #### Reduce disk usage:
421 434 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
422 435
423 436 ##### `REDUCE_APT`=true
424 437 Configure APT to use compressed package repository lists and no package caching files.
425 438
426 439 ##### `REDUCE_DOC`=true
427 440 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
428 441
429 442 ##### `REDUCE_MAN`=true
430 443 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
431 444
432 445 ##### `REDUCE_VIM`=false
433 446 Replace `vim-tiny` package by `levee` a tiny vim clone.
434 447
435 448 ##### `REDUCE_BASH`=false
436 449 Remove `bash` package and switch to `dash` shell (experimental).
437 450
438 451 ##### `REDUCE_HWDB`=true
439 452 Remove PCI related hwdb files (experimental).
440 453
441 454 ##### `REDUCE_SSHD`=true
442 455 Replace `openssh-server` with `dropbear`.
443 456
444 457 ##### `REDUCE_LOCALE`=true
445 458 Remove all `locale` translation files.
446 459
447 460 ---
448 461
449 462 #### Encrypted root partition:
450 463 ##### `ENABLE_CRYPTFS`=false
451 464 Enable full system encryption with dm-crypt. Setup a fully LUKS encrypted root partition (aes-xts-plain64:sha512) and generate required initramfs. The /boot directory will not be encrypted. This parameter will be ignored if `BUILD_KERNEL`=false. `ENABLE_CRYPTFS` is experimental. SSH-to-initramfs is currently not supported but will be soon - feel free to help.
452 465
453 466 ##### `CRYPTFS_PASSWORD`=""
454 467 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
455 468
456 469 ##### `CRYPTFS_MAPPING`="secure"
457 470 Set name of dm-crypt managed device-mapper mapping.
458 471
472 <<<<<<< HEAD
459 473 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
474 =======
475 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
460 476 ##### `CRYPTFS_CIPHER`="aes-xts-plain64"
461 477 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
462 478
463 479 ##### `CRYPTFS_HASH`=sha512
464 480 Hash function and size to be used
465 481
466 482 ##### `CRYPTFS_XTSKEYSIZE`=512
467 483 Sets key size in bits. The argument has to be a multiple of 8.
468 484
469 485 ##### `CRYPTFS_DROPBEAR`=false
470 486 Enable Dropbear Initramfs support
471 487
472 488 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
473 489 Provide path to dropbear Public RSA-OpenSSH Key
474 490
475 491 ---
476 492
477 493 #### Build settings:
478 494 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
479 495 Set a path to a working directory used by the script to generate an image.
480 496
481 497 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
482 498 Set a filename for the output file(s). Note: the script will create $IMAGE_NAME.img if `ENABLE_SPLITFS`=false or $IMAGE_NAME-frmw.img and $IMAGE_NAME-root.img if `ENABLE_SPLITFS`=true. Note 2: If the KERNEL_BRANCH is not set, the word "CURRENT" is used.
483 499
484 500 ## Understanding the script
485 501 The functions of this script that are required for the different stages of the bootstrapping are split up into single files located inside the `bootstrap.d` directory. During the bootstrapping every script in this directory gets executed in lexicographical order:
486 502
487 503 | Script | Description |
488 504 | --- | --- |
489 505 | `10-bootstrap.sh` | Debootstrap basic system |
490 506 | `11-apt.sh` | Setup APT repositories |
491 507 | `12-locale.sh` | Setup Locales and keyboard settings |
492 508 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
493 509 | `14-fstab.sh` | Setup fstab and initramfs |
494 510 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
495 511 | `20-networking.sh` | Setup Networking |
496 512 | `21-firewall.sh` | Setup Firewall |
497 513 | `30-security.sh` | Setup Users and Security settings |
498 514 | `31-logging.sh` | Setup Logging |
499 515 | `32-sshd.sh` | Setup SSH and public keys |
500 516 | `41-uboot.sh` | Build and Setup U-Boot |
501 517 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
502 518 | `43-videocore.sh` | Build and Setup videocore libraries |
503 519 | `50-firstboot.sh` | First boot actions |
504 520 | `99-reduce.sh` | Reduce the disk space usage |
505 521
506 522 All the required configuration files that will be copied to the generated OS image are located inside the `files` directory. It is not recommended to modify these configuration files manually.
507 523
508 524 | Directory | Description |
509 525 | --- | --- |
510 526 | `apt` | APT management configuration files |
511 527 | `boot` | Boot and RPi 0/1/2/3 configuration files |
512 528 | `dpkg` | Package Manager configuration |
513 529 | `etc` | Configuration files and rc scripts |
514 530 | `firstboot` | Scripts that get executed on first boot |
515 531 | `initramfs` | Initramfs scripts |
516 532 | `iptables` | Firewall configuration files |
517 533 | `locales` | Locales configuration |
518 534 | `modules` | Kernel Modules configuration |
519 535 | `mount` | Fstab configuration |
520 536 | `network` | Networking configuration files |
521 537 | `sysctl.d` | Swapping and Network Hardening configuration |
522 538 | `xorg` | fbturbo Xorg driver configuration |
523 539
524 540 ## Custom packages and scripts
525 541 Debian custom packages, i.e. those not in the debian repositories, can be installed by placing them in the `packages` directory. They are installed immediately after packages from the repositories are installed. Any dependencies listed in the custom packages will be downloaded automatically from the repositories. Do not list these custom packages in `APT_INCLUDES`.
526 542
527 543 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
528 544
529 545 ## Logging of the bootstrapping process
530 546 All information related to the bootstrapping process and the commands executed by the `rpi23-gen-image.sh` script can easily be saved into a logfile. The common shell command `script` can be used for this purpose:
531 547
532 548 ```shell
533 549 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
534 550 ```
535 551
536 552 ## Flashing the image file
537 553 After the image file was successfully created by the `rpi23-gen-image.sh` script it can be copied to the microSD card that will be used by the RPi 0/1/2/3 computer. This can be performed by using the tools `bmaptool` or `dd`. Using `bmaptool` will probably speed-up the copy process because `bmaptool` copies more wisely than `dd`.
538 554
539 555 ##### Flashing examples:
540 556 ```shell
541 557 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
542 558 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
543 559 ```
544 560 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
545 561 ```shell
546 562 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
547 563 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
548 564 ```
549 565
550 566 ## QEMU emulation
551 567 Start QEMU full system emulation:
552 568 ```shell
553 569 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=tty1"
554 570 ```
555 571
556 572 Start QEMU full system emulation and output to console:
557 573 ```shell
558 574 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
559 575 ```
560 576
561 577 Start QEMU full system emulation with SMP and output to console:
562 578 ```shell
563 579 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -smp cpus=2,maxcpus=2 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
564 580 ```
565 581
566 582 Start QEMU full system emulation with cryptfs, initramfs and output to console:
567 583 ```shell
568 584 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -initrd "initramfs-${KERNEL_VERSION}" -append "root=/dev/mapper/secure cryptdevice=/dev/mmcblk0p2:secure rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
569 585 ```
570 586
571 587 ## External links and references
572 588 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
573 589 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
574 590 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
575 591 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
576 592 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
577 593 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
578 594 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
579 595 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm)
580 596 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,615 +1,889
1 1 #
2 2 # Build and Setup RPi2/3 Kernel
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Need to use kali kernel src if nexmon is enabled
9 9 if [ "$ENABLE_NEXMON" = true ] ; then
10 10 KERNEL_URL="${KALI_KERNEL_URL}"
11 11 # Clear Branch and KernelSRC_DIR if using nexmon. Everyone will forget to clone kali kernel instead of nomrla kernel
12 12 KERNEL_BRANCH=""
13 13 KERNELSRC_DIR=""
14 14 fi
15 15
16 16 # Fetch and build latest raspberry kernel
17 17 if [ "$BUILD_KERNEL" = true ] ; then
18 18 # Setup source directory
19 19 mkdir -p "${KERNEL_DIR}"
20 20
21 21 # Copy existing kernel sources into chroot directory
22 22 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
23 23 # Copy kernel sources and include hidden files
24 24 cp -r "${KERNELSRC_DIR}/". "${KERNEL_DIR}"
25 25
26 26 # Clean the kernel sources
27 27 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
28 28 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
29 29 fi
30 30 else # KERNELSRC_DIR=""
31 31 # Create temporary directory for kernel sources
32 32 temp_dir=$(as_nobody mktemp -d)
33 33
34 34 # Fetch current RPi2/3 kernel sources
35 35 if [ -z "${KERNEL_BRANCH}" ] ; then
36 36 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
37 37 else
38 38 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
39 39 fi
40 40
41 41 # Copy downloaded kernel sources
42 42 cp -r "${temp_dir}/linux/"* "${KERNEL_DIR}"
43 43
44 44 # Remove temporary directory for kernel sources
45 45 rm -fr "${temp_dir}"
46 46
47 47 # Set permissions of the kernel sources
48 48 chown -R root:root "${R}/usr/src"
49 49 fi
50 50
51 51 # Calculate optimal number of kernel building threads
52 52 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
53 53 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
54 54 fi
55 55
56 #Copy 32bit config to 64bit
57 if [ "$ENABLE_QEMU" = true ] && [ "$KERNEL_ARCH" = arm64 ]; then
58 cp "${KERNEL_DIR}"/arch/arm/configs/vexpress_defconfig "${KERNEL_DIR}"/arch/arm64/configs/
59 fi
60
56 61 # Configure and build kernel
57 62 if [ "$KERNELSRC_PREBUILT" = false ] ; then
58 63 # Remove device, network and filesystem drivers from kernel configuration
59 64 if [ "$KERNEL_REDUCE" = true ] ; then
60 65 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
61 66 sed -i\
62 67 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
63 68 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
64 69 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
65 70 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
66 71 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
67 72 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
68 73 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
69 74 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
70 75 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
71 76 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
72 77 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
73 78 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
74 79 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
75 80 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
76 81 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
77 82 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
78 83 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
79 84 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
80 85 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
81 86 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
82 87 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
83 88 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
84 89 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
85 90 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
86 91 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
87 92 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
88 93 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
89 94 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
90 95 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
91 96 "${KERNEL_DIR}/.config"
92 97 fi
93 98
94 99 if [ "$KERNELSRC_CONFIG" = true ] ; then
95 100 # Load default raspberry kernel configuration
96 101 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
97 102
98 103 #Switch to KERNELSRC_DIR so we can use set_kernel_config
99 104 cd "${KERNEL_DIR}" || exit
100 105
101 if [ "$KERNEL_ARCH" = arm64 ] ; then
106 # Enable RPI POE HAT fan
107 if [ "$KERNEL_POEHAT" = true ]; then
108 set_kernel_config CONFIG_SENSORS_RPI_POE_FAN m
109 fi
110
111 # Enable per-interface network priority control
112 # (for systemd-nspawn)
113 if [ "$KERNEL_NSPAN" = true ]; then
114 set_kernel_config CONFIG_CGROUP_NET_PRIO y
115 fi
116
117 # Compile in BTRFS
118 if [ "$KERNEL_BTRFS" = true ]; then
119 set_kernel_config CONFIG_BTRFS_FS y
120 set_kernel_config CONFIG_BTRFS_FS_POSIX_ACL y
121 set_kernel_config CONFIG_BTRFS_FS_REF_VERIFY y
122 fi
123
124 # Diffie-Hellman operations on retained keys
125 # (required for >keyutils-1.6)
126 if [ "$KERNEL_DHKEY" = true ]; then
127 set_kernel_config CONFIG_KEY_DH_OPERATIONS y
128 fi
129
130 if [ "$KERNEL_ARCH" = arm64 ] && [ "$ENABLE_QEMU" = false ]; then
131 # Mask this temporarily during switch to rpi-4.19.y
102 132 #Fix SD_DRIVER upstream and downstream mess in 64bit RPIdeb_config
103 133 # use correct driver MMC_BCM2835_MMC instead of MMC_BCM2835_SDHOST - see https://www.raspberrypi.org/forums/viewtopic.php?t=210225
104 set_kernel_config CONFIG_MMC_BCM2835 n
105 set_kernel_config CONFIG_MMC_SDHCI_IPROC n
106 set_kernel_config CONFIG_USB_DWC2 n
107 sed -i "s|depends on MMC_BCM2835_MMC && MMC_BCM2835_DMA|depends on MMC_BCM2835_MMC|" "${KERNEL_DIR}"/drivers/mmc/host/Kconfig
134 #set_kernel_config CONFIG_MMC_BCM2835 n
135 #set_kernel_config CONFIG_MMC_SDHCI_IPROC n
136 #set_kernel_config CONFIG_USB_DWC2 n
137 #sed -i "s|depends on MMC_BCM2835_MMC && MMC_BCM2835_DMA|depends on MMC_BCM2835_MMC|" "${KERNEL_DIR}"/drivers/mmc/host/Kconfig
108 138
109 139 #VLAN got disabled without reason in arm64bit
110 140 set_kernel_config CONFIG_IPVLAN m
111 141 fi
112 142
113 143 # enable ZSWAP see https://askubuntu.com/a/472227 or https://wiki.archlinux.org/index.php/zswap
114 144 if [ "$KERNEL_ZSWAP" = true ] ; then
115 145 set_kernel_config CONFIG_ZPOOL y
116 146 set_kernel_config CONFIG_ZSWAP y
117 147 set_kernel_config CONFIG_ZBUD y
118 148 set_kernel_config CONFIG_Z3FOLD y
119 149 set_kernel_config CONFIG_ZSMALLOC y
120 150 set_kernel_config CONFIG_PGTABLE_MAPPING y
121 151 set_kernel_config CONFIG_LZO_COMPRESS y
152 fi
153
154 if [ "$RPI_MODEL" = 4 ] ; then
155 # Following are set in current 32-bit LPAE kernel
156 set_kernel_config CONFIG_CGROUP_PIDS y
157 set_kernel_config CONFIG_NET_IPVTI m
158 set_kernel_config CONFIG_NF_TABLES_SET m
159 set_kernel_config CONFIG_NF_TABLES_INET y
160 set_kernel_config CONFIG_NF_TABLES_NETDEV y
161 set_kernel_config CONFIG_NF_FLOW_TABLE m
162 set_kernel_config CONFIG_NFT_FLOW_OFFLOAD m
163 set_kernel_config CONFIG_NFT_CONNLIMIT m
164 set_kernel_config CONFIG_NFT_TUNNEL m
165 set_kernel_config CONFIG_NFT_OBJREF m
166 set_kernel_config CONFIG_NFT_FIB_IPV4 m
167 set_kernel_config CONFIG_NFT_FIB_IPV6 m
168 set_kernel_config CONFIG_NFT_FIB_INET m
169 set_kernel_config CONFIG_NFT_SOCKET m
170 set_kernel_config CONFIG_NFT_OSF m
171 set_kernel_config CONFIG_NFT_TPROXY m
172 set_kernel_config CONFIG_NF_DUP_NETDEV m
173 set_kernel_config CONFIG_NFT_DUP_NETDEV m
174 set_kernel_config CONFIG_NFT_FWD_NETDEV m
175 set_kernel_config CONFIG_NFT_FIB_NETDEV m
176 set_kernel_config CONFIG_NF_FLOW_TABLE_INET m
177 set_kernel_config CONFIG_NF_FLOW_TABLE m
178 set_kernel_config CONFIG_NETFILTER_XT_MATCH_SOCKET m
179 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
180 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
181 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
182 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
183 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
184 set_kernel_config CONFIG_NFT_DUP_IPV6 m
185 set_kernel_config CONFIG_NFT_FIB_IPV6 m
186 set_kernel_config CONFIG_NF_FLOW_TABLE_IPV6 m
187 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
188 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
189 set_kernel_config CONFIG_NF_LOG_BRIDGE m
190 set_kernel_config CONFIG_MT76_CORE m
191 set_kernel_config CONFIG_MT76_LEDS m
192 set_kernel_config CONFIG_MT76_USB m
193 set_kernel_config CONFIG_MT76x2_COMMON m
194 set_kernel_config CONFIG_MT76x0U m
195 set_kernel_config CONFIG_MT76x2U m
196 set_kernel_config CONFIG_TOUCHSCREEN_ILI210X m
197 set_kernel_config CONFIG_BCM_VC_SM m
198 set_kernel_config CONFIG_BCM2835_SMI_DEV m
199 set_kernel_config CONFIG_RPIVID_MEM m
200 set_kernel_config CONFIG_HW_RANDOM_BCM2835 y
201 set_kernel_config CONFIG_TCG_TPM m
202 set_kernel_config CONFIG_HW_RANDOM_TPM y
203 set_kernel_config CONFIG_TCG_TIS m
204 set_kernel_config CONFIG_TCG_TIS_SPI m
205 set_kernel_config CONFIG_I2C_MUX m
206 set_kernel_config CONFIG_I2C_MUX_GPMUX m
207 set_kernel_config CONFIG_I2C_MUX_PCA954x m
208 set_kernel_config CONFIG_SPI_GPIO m
209 set_kernel_config CONFIG_BATTERY_MAX17040 m
210 set_kernel_config CONFIG_SENSORS_GPIO_FAN m
211 set_kernel_config CONFIG_SENSORS_RASPBERRYPI_HWMON m
212 set_kernel_config CONFIG_BCM2835_THERMAL y
213 set_kernel_config CONFIG_RC_CORE y
214 set_kernel_config CONFIG_RC_MAP y
215 set_kernel_config CONFIG_LIRC y
216 set_kernel_config CONFIG_RC_DECODERS y
217 set_kernel_config CONFIG_IR_NEC_DECODER m
218 set_kernel_config CONFIG_IR_RC5_DECODER m
219 set_kernel_config CONFIG_IR_RC6_DECODER m
220 set_kernel_config CONFIG_IR_JVC_DECODER m
221 set_kernel_config CONFIG_IR_SONY_DECODER m
222 set_kernel_config CONFIG_IR_SANYO_DECODER m
223 set_kernel_config CONFIG_IR_SHARP_DECODER m
224 set_kernel_config CONFIG_IR_MCE_KBD_DECODER m
225 set_kernel_config CONFIG_IR_XMP_DECODER m
226 set_kernel_config CONFIG_IR_IMON_DECODER m
227 set_kernel_config CONFIG_RC_DEVICES y
228 set_kernel_config CONFIG_RC_ATI_REMOTE m
229 set_kernel_config CONFIG_IR_IMON m
230 set_kernel_config CONFIG_IR_MCEUSB m
231 set_kernel_config CONFIG_IR_REDRAT3 m
232 set_kernel_config CONFIG_IR_STREAMZAP m
233 set_kernel_config CONFIG_IR_IGUANA m
234 set_kernel_config CONFIG_IR_TTUSBIR m
235 set_kernel_config CONFIG_RC_LOOPBACK m
236 set_kernel_config CONFIG_IR_GPIO_CIR m
237 set_kernel_config CONFIG_IR_GPIO_TX m
238 set_kernel_config CONFIG_IR_PWM_TX m
239 set_kernel_config CONFIG_VIDEO_V4L2_SUBDEV_API y
240 set_kernel_config CONFIG_VIDEO_AU0828_RC y
241 set_kernel_config CONFIG_VIDEO_CX231XX m
242 set_kernel_config CONFIG_VIDEO_CX231XX_RC y
243 set_kernel_config CONFIG_VIDEO_CX231XX_ALSA m
244 set_kernel_config CONFIG_VIDEO_CX231XX_DVB m
245 set_kernel_config CONFIG_VIDEO_TM6000 m
246 set_kernel_config CONFIG_VIDEO_TM6000_ALSA m
247 set_kernel_config CONFIG_VIDEO_TM6000_DVB m
248 set_kernel_config CONFIG_DVB_USB m
249 set_kernel_config CONFIG_DVB_USB_DIB3000MC m
250 set_kernel_config CONFIG_DVB_USB_A800 m
251 set_kernel_config CONFIG_DVB_USB_DIBUSB_MB m
252 set_kernel_config CONFIG_DVB_USB_DIBUSB_MB_FAULTY y
253 set_kernel_config CONFIG_DVB_USB_DIBUSB_MC m
254 set_kernel_config CONFIG_DVB_USB_DIB0700 m
255 set_kernel_config CONFIG_DVB_USB_UMT_010 m
256 set_kernel_config CONFIG_DVB_USB_CXUSB m
257 set_kernel_config CONFIG_DVB_USB_M920X m
258 set_kernel_config CONFIG_DVB_USB_DIGITV m
259 set_kernel_config CONFIG_DVB_USB_VP7045 m
260 set_kernel_config CONFIG_DVB_USB_VP702X m
261 set_kernel_config CONFIG_DVB_USB_GP8PSK m
262 set_kernel_config CONFIG_DVB_USB_NOVA_T_USB2 m
263 set_kernel_config CONFIG_DVB_USB_TTUSB2 m
264 set_kernel_config CONFIG_DVB_USB_DTT200U m
265 set_kernel_config CONFIG_DVB_USB_OPERA1 m
266 set_kernel_config CONFIG_DVB_USB_AF9005 m
267 set_kernel_config CONFIG_DVB_USB_AF9005_REMOTE m
268 set_kernel_config CONFIG_DVB_USB_PCTV452E m
269 set_kernel_config CONFIG_DVB_USB_DW2102 m
270 set_kernel_config CONFIG_DVB_USB_CINERGY_T2 m
271 set_kernel_config CONFIG_DVB_USB_DTV5100 m
272 set_kernel_config CONFIG_DVB_USB_AZ6027 m
273 set_kernel_config CONFIG_DVB_USB_TECHNISAT_USB2 m
274 set_kernel_config CONFIG_DVB_USB_AF9015 m
275 set_kernel_config CONFIG_DVB_USB_LME2510 m
276 set_kernel_config CONFIG_DVB_USB_RTL28XXU m
277 set_kernel_config CONFIG_VIDEO_EM28XX_RC m
278 set_kernel_config CONFIG_SMS_SIANO_RC m
279 set_kernel_config CONFIG_VIDEO_IR_I2C m
280 set_kernel_config CONFIG_VIDEO_ADV7180 m
281 set_kernel_config CONFIG_VIDEO_TC358743 m
282 set_kernel_config CONFIG_VIDEO_OV5647 m
283 set_kernel_config CONFIG_DVB_M88DS3103 m
284 set_kernel_config CONFIG_DVB_AF9013 m
285 set_kernel_config CONFIG_DVB_RTL2830 m
286 set_kernel_config CONFIG_DVB_RTL2832 m
287 set_kernel_config CONFIG_DVB_SI2168 m
288 set_kernel_config CONFIG_DVB_GP8PSK_FE m
289 set_kernel_config CONFIG_DVB_USB m
290 set_kernel_config CONFIG_DVB_LGDT3306A m
291 set_kernel_config CONFIG_FB_SIMPLE y
292 set_kernel_config CONFIG_SND_BCM2708_SOC_IQAUDIO_CODEC m
293 set_kernel_config CONFIG_SND_BCM2708_SOC_I_SABRE_Q2M m
294 set_kernel_config CONFIG_SND_AUDIOSENSE_PI m
295 set_kernel_config CONFIG_SND_SOC_AD193X m
296 set_kernel_config CONFIG_SND_SOC_AD193X_SPI m
297 set_kernel_config CONFIG_SND_SOC_AD193X_I2C m
298 set_kernel_config CONFIG_SND_SOC_CS4265 m
299 set_kernel_config CONFIG_SND_SOC_DA7213 m
300 set_kernel_config CONFIG_SND_SOC_ICS43432 m
301 set_kernel_config CONFIG_SND_SOC_TLV320AIC32X4 m
302 set_kernel_config CONFIG_SND_SOC_TLV320AIC32X4_I2C m
303 set_kernel_config CONFIG_SND_SOC_I_SABRE_CODEC m
304 set_kernel_config CONFIG_HID_BIGBEN_FF m
305 #set_kernel_config CONFIG_USB_XHCI_PLATFORM y
306 set_kernel_config CONFIG_USB_TMC m
307 set_kernel_config CONFIG_USB_UAS y
308 set_kernel_config CONFIG_USBIP_VUDC m
309 set_kernel_config CONFIG_USB_CONFIGFS m
310 set_kernel_config CONFIG_USB_CONFIGFS_SERIAL y
311 set_kernel_config CONFIG_USB_CONFIGFS_ACM y
312 set_kernel_config CONFIG_USB_CONFIGFS_OBEX y
313 set_kernel_config CONFIG_USB_CONFIGFS_NCM y
314 set_kernel_config CONFIG_USB_CONFIGFS_ECM y
315 set_kernel_config CONFIG_USB_CONFIGFS_ECM_SUBSET y
316 set_kernel_config CONFIG_USB_CONFIGFS_RNDIS y
317 set_kernel_config CONFIG_USB_CONFIGFS_EEM y
318 set_kernel_config CONFIG_USB_CONFIGFS_MASS_STORAGE y
319 set_kernel_config CONFIG_USB_CONFIGFS_F_LB_SS y
320 set_kernel_config CONFIG_USB_CONFIGFS_F_FS y
321 set_kernel_config CONFIG_USB_CONFIGFS_F_UAC1 y
322 set_kernel_config CONFIG_USB_CONFIGFS_F_UAC2 y
323 set_kernel_config CONFIG_USB_CONFIGFS_F_MIDI y
324 set_kernel_config CONFIG_USB_CONFIGFS_F_HID y
325 set_kernel_config CONFIG_USB_CONFIGFS_F_UVC y
326 set_kernel_config CONFIG_USB_CONFIGFS_F_PRINTER y
327 set_kernel_config CONFIG_LEDS_PCA963X m
328 set_kernel_config CONFIG_LEDS_IS31FL32XX m
329 set_kernel_config CONFIG_LEDS_TRIGGER_NETDEV m
330 set_kernel_config CONFIG_RTC_DRV_RV3028 m
331 set_kernel_config CONFIG_AUXDISPLAY y
332 set_kernel_config CONFIG_HD44780 m
333 set_kernel_config CONFIG_FB_TFT_SH1106 m
334 set_kernel_config CONFIG_VIDEO_CODEC_BCM2835 m
335 set_kernel_config CONFIG_BCM2835_POWER y
336 set_kernel_config CONFIG_INV_MPU6050_IIO m
337 set_kernel_config CONFIG_INV_MPU6050_I2C m
338 set_kernel_config CONFIG_SECURITYFS y
122 339
340 # Safer to build this in
341 set_kernel_config CONFIG_BINFMT_MISC y
342
343 # pulseaudio wants a buffer of at least this size
344 set_kernel_config CONFIG_SND_HDA_PREALLOC_SIZE 2048
345
346 # PR#3063: enable 3D acceleration with 64-bit kernel on RPi4
347 # set the appropriate kernel configs unlocked by this PR
348 set_kernel_config CONFIG_ARCH_BCM y
349 set_kernel_config CONFIG_ARCH_BCM2835 y
350 set_kernel_config CONFIG_DRM_V3D m
351 set_kernel_config CONFIG_DRM_VC4 m
352 set_kernel_config CONFIG_DRM_VC4_HDMI_CEC y
353
354 # PR#3144: add arm64 pcie bounce buffers; enables 4GiB on RPi4
355 # required by PR#3144; should already be applied, but just to be safe
356 set_kernel_config CONFIG_PCIE_BRCMSTB y
357 set_kernel_config CONFIG_BCM2835_MMC y
358
359 # Snap needs squashfs. The ubuntu eoan-preinstalled-server image at
360 # http://cdimage.ubuntu.com/ubuntu-server/daily-preinstalled/current/ uses snap
361 # during cloud-init setup at first boot. Without this the login accounts are not
362 # created and the user can not login.
363 set_kernel_config CONFIG_SQUASHFS y
364
365 # Ceph support for Block Device (RBD) and Filesystem (FS)
366 # https://docs.ceph.com/docs/master/
367 set_kernel_config CONFIG_CEPH_LIB m
368 set_kernel_config CONFIG_CEPH_LIB_USE_DNS_RESOLVER y
369 set_kernel_config CONFIG_CEPH_FS m
370 set_kernel_config CONFIG_CEPH_FSCACHE y
371 set_kernel_config CONFIG_CEPH_FS_POSIX_ACL y
372 set_kernel_config CONFIG_BLK_DEV_RBD m
123 373 fi
124 374
125 375 # enable basic KVM support; see https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=210546&start=25#p1300453
126 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
376 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ]; } ; then
377 set_kernel_config CONFIG_HAVE_KVM y
378 set_kernel_config CONFIG_HIGH_RES_TIMERS y
127 379 set_kernel_config CONFIG_HAVE_KVM_IRQCHIP y
128 380 set_kernel_config CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL y
129 381 set_kernel_config CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT y
130 382 set_kernel_config CONFIG_HAVE_KVM_EVENTFD y
131 383 set_kernel_config CONFIG_HAVE_KVM_IRQFD y
132 384 set_kernel_config CONFIG_HAVE_KVM_IRQ_ROUTING y
133 385 set_kernel_config CONFIG_HAVE_KVM_MSI y
134 386 set_kernel_config CONFIG_KVM y
135 387 set_kernel_config CONFIG_KVM_ARM_HOST y
136 388 set_kernel_config CONFIG_KVM_ARM_PMU y
137 389 set_kernel_config CONFIG_KVM_COMPAT y
138 390 set_kernel_config CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT y
139 391 set_kernel_config CONFIG_KVM_MMIO y
140 392 set_kernel_config CONFIG_KVM_VFIO y
393 set_kernel_config CONFIG_KVM_MMU_AUDIT y
141 394 set_kernel_config CONFIG_VHOST m
142 395 set_kernel_config CONFIG_VHOST_CROSS_ENDIAN_LEGACY y
143 396 set_kernel_config CONFIG_VHOST_NET m
144 397 set_kernel_config CONFIG_VIRTUALIZATION y
145
398 set_kernel_config CONFIG_SLAB_FREELIST_RANDOM=y
399 set_kernel_config CONFIG_SLAB_FREELIST_HARDENED=y
146 400 set_kernel_config CONFIG_MMU_NOTIFIER y
147 401
148 402 # erratum
149 403 set_kernel_config ARM64_ERRATUM_834220 y
150 404
151 405 # https://sourceforge.net/p/kvm/mailman/message/18440797/
152 406 set_kernel_config CONFIG_PREEMPT_NOTIFIERS y
153 407 fi
154 408
155 409 # enable apparmor,integrity audit,
156 410 if [ "$KERNEL_SECURITY" = true ] ; then
157 411
158 412 # security filesystem, security models and audit
159 413 set_kernel_config CONFIG_SECURITYFS y
160 414 set_kernel_config CONFIG_SECURITY y
161 415 set_kernel_config CONFIG_AUDIT y
162 416
163 417 # harden strcpy and memcpy
164 418 set_kernel_config CONFIG_HARDENED_USERCOPY y
165 419 set_kernel_config CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR y
166 420 set_kernel_config CONFIG_FORTIFY_SOURCE y
167 421
168 422 # integrity sub-system
169 423 set_kernel_config CONFIG_INTEGRITY y
170 424 set_kernel_config CONFIG_INTEGRITY_ASYMMETRIC_KEYS y
171 425 set_kernel_config CONFIG_INTEGRITY_AUDIT y
172 426 set_kernel_config CONFIG_INTEGRITY_SIGNATURE y
173 427 set_kernel_config CONFIG_INTEGRITY_TRUSTED_KEYRING y
174 428
175 429 # This option provides support for retaining authentication tokens and access keys in the kernel.
176 430 set_kernel_config CONFIG_KEYS y
177 431 set_kernel_config CONFIG_KEYS_COMPAT y
178 432
179 433 # Apparmor
180 434 set_kernel_config CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE 0
181 435 set_kernel_config CONFIG_SECURITY_APPARMOR_HASH_DEFAULT y
182 436 set_kernel_config CONFIG_DEFAULT_SECURITY_APPARMOR y
183 437 set_kernel_config CONFIG_SECURITY_APPARMOR y
184 438 set_kernel_config CONFIG_SECURITY_APPARMOR_HASH y
185 439 set_kernel_config CONFIG_DEFAULT_SECURITY "apparmor"
186 440
187 441 # restrictions on unprivileged users reading the kernel
188 442 set_kernel_config CONFIG_SECURITY_DMESG_RESTRICT y
189 443
190 444 # network security hooks
191 445 set_kernel_config CONFIG_SECURITY_NETWORK y
192 446 set_kernel_config CONFIG_SECURITY_NETWORK_XFRM y
193 447 set_kernel_config CONFIG_SECURITY_PATH y
194 448 set_kernel_config CONFIG_SECURITY_YAMA n
195 449
196 # New Options
197 if [ "$KERNEL_NF" = true ] ; then
198 set_kernel_config CONFIG_IP_NF_SECURITY m
199 set_kernel_config CONFIG_NETLABEL y
200 set_kernel_config CONFIG_IP6_NF_SECURITY m
201 fi
202 450 set_kernel_config CONFIG_SECURITY_SELINUX n
203 451 set_kernel_config CONFIG_SECURITY_SMACK n
204 452 set_kernel_config CONFIG_SECURITY_TOMOYO n
205 453 set_kernel_config CONFIG_SECURITY_APPARMOR_DEBUG n
206 454 set_kernel_config CONFIG_SECURITY_LOADPIN n
207 455 set_kernel_config CONFIG_HARDENED_USERCOPY_PAGESPAN n
208 456 set_kernel_config CONFIG_IMA n
209 457 set_kernel_config CONFIG_EVM n
210 458 set_kernel_config CONFIG_FANOTIFY_ACCESS_PERMISSIONS y
211 459 set_kernel_config CONFIG_NFSD_V4_SECURITY_LABEL y
212 460 set_kernel_config CONFIG_PKCS7_MESSAGE_PARSER y
213 461 set_kernel_config CONFIG_SYSTEM_TRUSTED_KEYRING y
214 set_kernel_config CONFIG_SYSTEM_TRUSTED_KEYS y
215 462 set_kernel_config CONFIG_SYSTEM_EXTRA_CERTIFICATE y
216 463 set_kernel_config CONFIG_SECONDARY_TRUSTED_KEYRING y
217 464 set_kernel_config CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY n
218 465 set_kernel_config CONFIG_SYSTEM_TRUSTED_KEYS m
219 466 set_kernel_config CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE 4096
220 467
221 468 set_kernel_config CONFIG_ARM64_CRYPTO y
222 469 set_kernel_config CONFIG_CRYPTO_SHA256_ARM64 m
223 470 set_kernel_config CONFIG_CRYPTO_SHA512_ARM64 m
224 471 set_kernel_config CONFIG_CRYPTO_SHA1_ARM64_CE m
225 472 set_kernel_config CRYPTO_GHASH_ARM64_CE m
226 473 set_kernel_config CRYPTO_SHA2_ARM64_CE m
227 474 set_kernel_config CONFIG_CRYPTO_CRCT10DIF_ARM64_CE m
228 475 set_kernel_config CONFIG_CRYPTO_CRC32_ARM64_CE m
229 476 set_kernel_config CONFIG_CRYPTO_AES_ARM64 m
230 477 set_kernel_config CONFIG_CRYPTO_AES_ARM64_CE m
231 478 set_kernel_config CONFIG_CRYPTO_AES_ARM64_CE_CCM y
232 479 set_kernel_config CONFIG_CRYPTO_AES_ARM64_CE_BLK y
233 480 set_kernel_config CONFIG_CRYPTO_AES_ARM64_NEON_BLK m
234 481 set_kernel_config CONFIG_CRYPTO_CHACHA20_NEON m
235 482 set_kernel_config CONFIG_CRYPTO_AES_ARM64_BS m
236 set_kernel_config SYSTEM_TRUSTED_KEYS
237 483 fi
238 484
239 485 # Netfilter kernel support See https://github.com/raspberrypi/linux/issues/2177#issuecomment-354647406
240 486 if [ "$KERNEL_NF" = true ] ; then
487 set_kernel_config CONFIG_IP_NF_SECURITY m
488 set_kernel_config CONFIG_NETLABEL y
489 set_kernel_config CONFIG_IP6_NF_SECURITY m
241 490 set_kernel_config CONFIG_IP_NF_TARGET_SYNPROXY m
242 491 set_kernel_config CONFIG_NETFILTER_XT_TARGET_AUDIT m
243 492 set_kernel_config CONFIG_NETFILTER_XT_MATCH_CGROUP m
244 493 set_kernel_config CONFIG_NETFILTER_XT_MATCH_IPCOMP m
245 494 set_kernel_config CONFIG_NETFILTER_XT_MATCH_SOCKET m
246 495 set_kernel_config CONFIG_NFT_FIB_INET m
247 496 set_kernel_config CONFIG_NFT_FIB_IPV4 m
248 497 set_kernel_config CONFIG_NFT_FIB_IPV6 m
249 498 set_kernel_config CONFIG_NFT_FIB_NETDEV m
250 499 set_kernel_config CONFIG_NFT_OBJREF m
251 500 set_kernel_config CONFIG_NFT_RT m
252 501 set_kernel_config CONFIG_NFT_SET_BITMAP m
253 502 set_kernel_config CONFIG_NF_CONNTRACK_TIMEOUT y
254 503 set_kernel_config CONFIG_NF_LOG_ARP m
255 504 set_kernel_config CONFIG_NF_SOCKET_IPV4 m
256 505 set_kernel_config CONFIG_NF_SOCKET_IPV6 m
257 506 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
258 507 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
259 508 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
260 509 set_kernel_config CONFIG_IP6_NF_IPTABLES m
261 510 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
262 511 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
263 512 set_kernel_config CONFIG_IP6_NF_NAT m
264 513 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
265 514 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
266 set_kernel_config CONFIG_IP_NF_SECURITY m
267 515 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
268 516 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
269 517 set_kernel_config CONFIG_IP_SET_HASH_IP m
270 518 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
271 519 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
272 520 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
273 521 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
274 522 set_kernel_config CONFIG_IP_SET_HASH_MAC m
275 523 set_kernel_config CONFIG_IP_SET_HASH_NET m
276 524 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
277 525 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
278 526 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
279 527 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
280 528 set_kernel_config CONFIG_IP_SET_LIST_SET m
281 529 set_kernel_config CONFIG_NETFILTER_XTABLES m
282 530 set_kernel_config CONFIG_NETFILTER_XTABLES m
283 531 set_kernel_config CONFIG_NFT_BRIDGE_META m
284 532 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
285 533 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
286 534 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
287 535 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
288 536 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
289 537 set_kernel_config CONFIG_NFT_COMPAT m
290 538 set_kernel_config CONFIG_NFT_COUNTER m
291 539 set_kernel_config CONFIG_NFT_CT m
292 540 set_kernel_config CONFIG_NFT_DUP_IPV4 m
293 541 set_kernel_config CONFIG_NFT_DUP_IPV6 m
294 542 set_kernel_config CONFIG_NFT_DUP_NETDEV m
295 543 set_kernel_config CONFIG_NFT_EXTHDR m
296 544 set_kernel_config CONFIG_NFT_FWD_NETDEV m
297 545 set_kernel_config CONFIG_NFT_HASH m
298 546 set_kernel_config CONFIG_NFT_LIMIT m
299 547 set_kernel_config CONFIG_NFT_LOG m
300 548 set_kernel_config CONFIG_NFT_MASQ m
301 549 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
302 550 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
303 551 set_kernel_config CONFIG_NFT_META m
304 552 set_kernel_config CONFIG_NFT_NAT m
305 553 set_kernel_config CONFIG_NFT_NUMGEN m
306 554 set_kernel_config CONFIG_NFT_QUEUE m
307 555 set_kernel_config CONFIG_NFT_QUOTA m
308 556 set_kernel_config CONFIG_NFT_REDIR m
309 557 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
310 558 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
311 559 set_kernel_config CONFIG_NFT_REJECT m
312 560 set_kernel_config CONFIG_NFT_REJECT_INET m
313 561 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
314 562 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
315 563 set_kernel_config CONFIG_NFT_SET_HASH m
316 564 set_kernel_config CONFIG_NFT_SET_RBTREE m
317 565 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
318 566 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
319 567 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
320 568 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
321 569 set_kernel_config CONFIG_NF_DUP_IPV4 m
322 570 set_kernel_config CONFIG_NF_DUP_IPV6 m
323 571 set_kernel_config CONFIG_NF_DUP_NETDEV m
324 572 set_kernel_config CONFIG_NF_LOG_BRIDGE m
325 573 set_kernel_config CONFIG_NF_LOG_IPV4 m
326 574 set_kernel_config CONFIG_NF_LOG_IPV6 m
327 575 set_kernel_config CONFIG_NF_NAT_IPV4 m
328 576 set_kernel_config CONFIG_NF_NAT_IPV6 m
329 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
330 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
577 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 y
578 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 y
331 579 set_kernel_config CONFIG_NF_NAT_PPTP m
332 580 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
333 set_kernel_config CONFIG_NF_NAT_REDIRECT m
581 set_kernel_config CONFIG_NF_NAT_REDIRECT y
334 582 set_kernel_config CONFIG_NF_NAT_SIP m
335 583 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
336 584 set_kernel_config CONFIG_NF_NAT_TFTP m
337 585 set_kernel_config CONFIG_NF_REJECT_IPV4 m
338 586 set_kernel_config CONFIG_NF_REJECT_IPV6 m
339 587 set_kernel_config CONFIG_NF_TABLES m
340 588 set_kernel_config CONFIG_NF_TABLES_ARP m
341 589 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
342 590 set_kernel_config CONFIG_NF_TABLES_INET m
343 set_kernel_config CONFIG_NF_TABLES_IPV4 m
344 set_kernel_config CONFIG_NF_TABLES_IPV6 m
591 set_kernel_config CONFIG_NF_TABLES_IPV4 y
592 set_kernel_config CONFIG_NF_TABLES_IPV6 y
345 593 set_kernel_config CONFIG_NF_TABLES_NETDEV m
594 set_kernel_config CONFIG_NF_TABLES_SET m
595 set_kernel_config CONFIG_NF_TABLES_INET y
596 set_kernel_config CONFIG_NF_TABLES_NETDEV y
597 set_kernel_config CONFIG_NFT_CONNLIMIT m
598 set_kernel_config CONFIG_NFT_TUNNEL m
599 set_kernel_config CONFIG_NFT_SOCKET m
600 set_kernel_config CONFIG_NFT_TPROXY m
601 set_kernel_config CONFIG_NF_FLOW_TABLE m
602 set_kernel_config CONFIG_NFT_FLOW_OFFLOAD m
603 set_kernel_config CONFIG_NF_FLOW_TABLE_INET m
604 set_kernel_config CONFIG_NF_TABLES_ARP y
605 set_kernel_config CONFIG_NF_FLOW_TABLE_IPV4 y
606 set_kernel_config CONFIG_NF_FLOW_TABLE_IPV6 y
607 set_kernel_config CONFIG_NF_TABLES_BRIDGE y
608 set_kernel_config CONFIG_NF_CT_NETLINK_TIMEOUT m
609 set_kernel_config CONFIG_NFT_OSF m
610
346 611 fi
347 612
348 613 # Enables BPF syscall for systemd-journald see https://github.com/torvalds/linux/blob/master/init/Kconfig#L848 or https://groups.google.com/forum/#!topic/linux.gentoo.user/_2aSc_ztGpA
349 614 if [ "$KERNEL_BPF" = true ] ; then
350 615 set_kernel_config CONFIG_BPF_SYSCALL y
351 616 set_kernel_config CONFIG_BPF_EVENTS y
352 617 set_kernel_config CONFIG_BPF_STREAM_PARSER y
353 618 set_kernel_config CONFIG_CGROUP_BPF y
619 set_kernel_config CONFIG_XDP_SOCKETS y
354 620 fi
355 621
356 622 # KERNEL_DEFAULT_GOV was set by user
357 623 if [ "$KERNEL_DEFAULT_GOV" != powersave ] && [ -n "$KERNEL_DEFAULT_GOV" ] ; then
358 624
359 625 case "$KERNEL_DEFAULT_GOV" in
360 626 performance)
361 627 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
362 628 ;;
363 629 userspace)
364 630 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE y
365 631 ;;
366 632 ondemand)
367 633 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND y
368 634 ;;
369 635 conservative)
370 636 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE y
371 637 ;;
372 638 shedutil)
373 639 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL y
374 640 ;;
375 641 *)
376 642 echo "error: unsupported default cpu governor"
377 643 exit 1
378 644 ;;
379 645 esac
380 646
381 647 # unset previous default governor
382 648 unset_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
383 649 fi
384 650
385 651 #Revert to previous directory
386 652 cd "${WORKDIR}" || exit
387 653
388 654 # Set kernel configuration parameters to enable qemu emulation
389 655 if [ "$ENABLE_QEMU" = true ] ; then
390 656 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
391 657 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
392 658
393 659 if [ "$ENABLE_CRYPTFS" = true ] ; then
394 660 {
395 661 echo "CONFIG_EMBEDDED=y"
396 662 echo "CONFIG_EXPERT=y"
397 663 echo "CONFIG_DAX=y"
398 664 echo "CONFIG_MD=y"
399 665 echo "CONFIG_BLK_DEV_MD=y"
400 666 echo "CONFIG_MD_AUTODETECT=y"
401 667 echo "CONFIG_BLK_DEV_DM=y"
402 668 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
403 669 echo "CONFIG_DM_CRYPT=y"
404 670 echo "CONFIG_CRYPTO_BLKCIPHER=y"
405 671 echo "CONFIG_CRYPTO_CBC=y"
406 672 echo "CONFIG_CRYPTO_XTS=y"
407 673 echo "CONFIG_CRYPTO_SHA512=y"
408 674 echo "CONFIG_CRYPTO_MANAGER=y"
409 675 } >> "${KERNEL_DIR}"/.config
410 676 fi
411 677 fi
412 678
413 679 # Copy custom kernel configuration file
414 680 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
415 681 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
416 682 fi
417 683
418 684 # Set kernel configuration parameters to their default values
419 685 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
420 686 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
421 687 fi
422 688
423 689 # Start menu-driven kernel configuration (interactive)
424 690 if [ "$KERNEL_MENUCONFIG" = true ] ; then
425 691 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
426 692 fi
427 693 # end if "$KERNELSRC_CONFIG" = true
428 694 fi
429 695
430 696 # Use ccache to cross compile the kernel
431 697 if [ "$KERNEL_CCACHE" = true ] ; then
432 698 cc="ccache ${CROSS_COMPILE}gcc"
433 699 else
434 700 cc="${CROSS_COMPILE}gcc"
435 701 fi
436 702
437 703 # Cross compile kernel and dtbs
438 704 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
439 705
440 706 # Cross compile kernel modules
441 707 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
442 708 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
443 709 fi
444 710 # end if "$KERNELSRC_PREBUILT" = false
445 711 fi
446 712
447 713 # Check if kernel compilation was successful
448 714 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
449 715 echo "error: kernel compilation failed! (kernel image not found)"
450 716 cleanup
451 717 exit 1
452 718 fi
453 719
454 720 # Install kernel modules
455 721 if [ "$ENABLE_REDUCE" = true ] ; then
456 722 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
457 723 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
458 724 fi
459 725 else
460 726 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
461 727 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
462 728 fi
463 729
464 730 # Install kernel firmware
465 731 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
466 732 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
467 733 fi
468 734 fi
469 735
470 736 # Install kernel headers
471 737 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
472 738 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
473 739 fi
474 740
475 741 # Prepare boot (firmware) directory
476 742 mkdir "${BOOT_DIR}"
477 743
478 744 # Get kernel release version
479 745 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
480 746
481 747 # Copy kernel configuration file to the boot directory
482 748 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
483 749
484 750 # Prepare device tree directory
485 751 mkdir "${BOOT_DIR}/overlays"
486 752
487 753 # Ensure the proper .dtb is located
488 754 if [ "$KERNEL_ARCH" = "arm" ] ; then
489 755 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
490 756 if [ -f "${dtb}" ] ; then
491 757 install_readonly "${dtb}" "${BOOT_DIR}/"
492 758 fi
493 759 done
494 760 else
495 761 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
496 762 if [ -f "${dtb}" ] ; then
497 763 install_readonly "${dtb}" "${BOOT_DIR}/"
498 764 fi
499 765 done
500 766 fi
501 767
502 768 # Copy compiled dtb device tree files
503 769 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
504 770 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtbo ; do
505 771 if [ -f "${dtb}" ] ; then
506 772 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
507 773 fi
508 774 done
509 775
510 776 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
511 777 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
512 778 fi
513 779 fi
514 780
515 781 if [ "$ENABLE_UBOOT" = false ] ; then
516 782 # Convert and copy kernel image to the boot directory
517 783 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
518 784 else
519 785 # Copy kernel image to the boot directory
520 786 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
521 787 fi
522 788
523 789 # Remove kernel sources
524 790 if [ "$KERNEL_REMOVESRC" = true ] ; then
525 791 rm -fr "${KERNEL_DIR}"
526 792 else
527 793 # Prepare compiled kernel modules
528 794 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
529 795 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
530 796 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
531 797 fi
532 798
533 799 # Create symlinks for kernel modules
534 800 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
535 801 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
536 802 fi
537 803 fi
538 804
539 805 else # BUILD_KERNEL=false
540 if [ "$SET_ARCH" = 64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
541
806 if [ "$SET_ARCH" = 64 ] ; then
807 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
542 808 # Use Sakakis modified kernel if ZSWAP is active
543 809 if [ "$KERNEL_ZSWAP" = true ] || [ "$KERNEL_VIRT" = true ] || [ "$KERNEL_NF" = true ] || [ "$KERNEL_BPF" = true ] ; then
544 810 RPI3_64_KERNEL_URL="${RPI3_64_BIS_KERNEL_URL}"
545 811 fi
546 812
547 813 # Create temporary directory for dl
548 814 temp_dir=$(as_nobody mktemp -d)
549 815
550 816 # Fetch kernel dl
551 817 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
818 fi
819 if [ "$SET_ARCH" = 64 ] && [ "$RPI_MODEL" = 4 ] ; then
820 # Create temporary directory for dl
821 temp_dir=$(as_nobody mktemp -d)
822
823 # Fetch kernel dl
824 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI4_64_KERNEL_URL"
825 fi
552 826
553 827 #extract download
554 828 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
555 829
556 830 #move extracted kernel to /boot/firmware
557 831 mkdir "${R}/boot/firmware"
558 832 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
559 833 cp -r "${temp_dir}"/lib/* "${R}"/lib/
560 834
561 835 # Remove temporary directory for kernel sources
562 836 rm -fr "${temp_dir}"
563 837
564 838 # Set permissions of the kernel sources
565 839 chown -R root:root "${R}/boot/firmware"
566 840 chown -R root:root "${R}/lib/modules"
567 841 fi
568 842
569 # Install Kernel from hypriot comptabile with all Raspberry PI
570 if [ "$SET_ARCH" = 32 ] ; then
843 # Install Kernel from hypriot comptabile with all Raspberry PI (dunno if its compatible with RPI4 - better compile your own kernel)
844 if [ "$SET_ARCH" = 32 ] && [ "$RPI_MODEL" != 4 ] ; then
571 845 # Create temporary directory for dl
572 846 temp_dir=$(as_nobody mktemp -d)
573 847
574 848 # Fetch kernel
575 849 as_nobody wget -O "${temp_dir}"/kernel.deb -c "$RPI_32_KERNEL_URL"
576 850
577 # Copy downloaded U-Boot sources
851 # Copy downloaded kernel package
578 852 mv "${temp_dir}"/kernel.deb "${R}"/tmp/kernel.deb
579 853
580 854 # Set permissions
581 855 chown -R root:root "${R}"/tmp/kernel.deb
582 856
583 857 # Install kernel
584 858 chroot_exec dpkg -i /tmp/kernel.deb
585 859
586 860 # move /boot to /boot/firmware to fit script env.
587 861 #mkdir "${BOOT_DIR}"
588 862 mkdir "${temp_dir}"/firmware
589 863 mv "${R}"/boot/* "${temp_dir}"/firmware/
590 864 mv "${temp_dir}"/firmware "${R}"/boot/
591 865
592 866 #same for kernel headers
593 867 if [ "$KERNEL_HEADERS" = true ] ; then
594 868 # Fetch kernel header
595 869 as_nobody wget -O "${temp_dir}"/kernel-header.deb -c "$RPI_32_KERNELHEADER_URL"
596 870 mv "${temp_dir}"/kernel-header.deb "${R}"/tmp/kernel-header.deb
597 871 chown -R root:root "${R}"/tmp/kernel-header.deb
598 872 # Install kernel header
599 873 chroot_exec dpkg -i /tmp/kernel-header.deb
600 874 rm -f "${R}"/tmp/kernel-header.deb
601 875 fi
602 876
603 877 # Remove temporary directory and files
604 878 rm -fr "${temp_dir}"
605 879 rm -f "${R}"/tmp/kernel.deb
606 880 fi
607 881
608 882 # Check if kernel installation was successful
609 883 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
610 884 if [ -z "$KERNEL" ] ; then
611 885 echo "error: kernel installation failed! (/boot/kernel* not found)"
612 886 cleanup
613 887 exit 1
614 888 fi
615 889 fi
@@ -1,122 +1,128
1 1 #
2 2 # Setup fstab and initramfs
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Install and setup fstab
9 9 install_readonly files/mount/fstab "${ETC_DIR}/fstab"
10 10
11 11 # Generate initramfs file
12 12 if [ "$ENABLE_INITRAMFS" = true ] ; then
13 13 if [ "$ENABLE_CRYPTFS" = true ] ; then
14 14
15 15 # Include initramfs scripts to auto expand encrypted root partition
16 16 if [ "$EXPANDROOT" = true ] ; then
17 17 install_exec files/initramfs/expand_encrypted_rootfs "${ETC_DIR}/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs"
18 18 install_exec files/initramfs/expand-premount "${ETC_DIR}/initramfs-tools/scripts/local-premount/expand-premount"
19 19 install_exec files/initramfs/expand-tools "${ETC_DIR}/initramfs-tools/hooks/expand-tools"
20 20 fi
21 21
22 22 # Replace fstab root partition with encrypted partition mapping
23 23 sed -i "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING}/" "${ETC_DIR}/fstab"
24 24
25 25 # Add encrypted partition to crypttab and fstab
26 26 install_readonly files/mount/crypttab "${ETC_DIR}/crypttab"
27 27 echo "${CRYPTFS_MAPPING} /dev/mmcblk0p2 none luks,initramfs" >> "${ETC_DIR}/crypttab"
28 28
29 29 if [ "$ENABLE_USBBOOT" = true ] && [ "$ENABLE_SPLITFS" = false ]; then
30 30 sed -i "s/mmcblk0p1/sda1/" "${ETC_DIR}/fstab"
31 31 # Add usb/sda2 disk to crypttab
32 32 sed -i "s/mmcblk0p2/sda2/" "${ETC_DIR}/crypttab"
33 33 fi
34 34
35 35 # Add encrypted root partition to fstab and crypttab
36 36 if [ "$ENABLE_SPLITFS" = true ] && [ "$ENABLE_USBBOOT" = false ]; then
37 37 # Add usb/sda1 disk to crypttab
38 38 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/crypttab"
39 39 fi
40 40
41 41 if [ "$CRYPTFS_DROPBEAR" = true ]; then
42 42 if [ "$ENABLE_DHCP" = false ] ; then
43 43 # Get cdir from NET_ADDRESS e.g. 24
44 44 cdir=$(printf "%s" "${NET_ADDRESS}" | cut -d '/' -f2)
45 45
46 46 # Convert cdir ro netmask e.g. 24 to 255.255.255.0
47 47 NET_MASK=$(cdr2mask "$cdir")
48 48
49 49 # Write static ip settings to "${ETC_DIR}"/initramfs-tools/initramfs.conf
50 50 # ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
51 51 sed -i "\$a\nIP=${NET_ADDRESS}::${NET_GATEWAY}:${NET_MASK}:${HOSTNAME}:" "${ETC_DIR}"/initramfs-tools/initramfs.conf
52 52 else
53 53 sed -i "\$a\nIP=::::${HOSTNAME}::dhcp" "${ETC_DIR}"/initramfs-tools/initramfs.conf
54 54 fi
55 55
56 56 if [ -n "$CRYPTFS_DROPBEAR_PUBKEY" ] && [ -f "$CRYPTFS_DROPBEAR_PUBKEY" ] ; then
57 57 install_readonly "${CRYPTFS_DROPBEAR_PUBKEY}" "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
58 58 cat "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub >> "${ETC_DIR}"/dropbear-initramfs/authorized_keys
59 59 else
60 60 # Create key
61 61 chroot_exec /usr/bin/dropbearkey -t rsa -f /etc/dropbear-initramfs/id_rsa.dropbear
62 62
63 63 # Convert dropbear key to openssh key
64 64 chroot_exec /usr/lib/dropbear/dropbearconvert dropbear openssh /etc/dropbear-initramfs/id_rsa.dropbear /etc/dropbear-initramfs/id_rsa
65 65
66 66 # Get Public Key Part
67 67 chroot_exec /usr/bin/dropbearkey -y -f /etc/dropbear-initramfs/id_rsa.dropbear | chroot_exec tee /etc/dropbear-initramfs/id_rsa.pub
68 68
69 69 # Delete unwanted lines
70 70 sed -i '/Public/d' "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
71 71 sed -i '/Fingerprint/d' "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
72 72
73 73 # Trust the new key
74 74 cat "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub > "${ETC_DIR}"/dropbear-initramfs/authorized_keys
75 75
76 76 # Save Keys - convert with putty from rsa/openssh to puttkey
77 77 cp -f "${ETC_DIR}"/dropbear-initramfs/id_rsa "${BASEDIR}"/dropbear_initramfs_key.rsa
78 78
79 79 # Get unlock script
80 80 install_exec files/initramfs/crypt_unlock.sh "${ETC_DIR}"/initramfs-tools/hooks/crypt_unlock.sh
81 81
82 82 # Enable Dropbear inside initramfs
83 83 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=y\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
84 84
85 85 # Enable Dropbear inside initramfs
86 86 sed -i "54 i sleep 5" "${R}"/usr/share/initramfs-tools/scripts/init-premount/dropbear
87 87 fi
88 88 # CRYPTFSDROPBEAR=false
89 89 else
90 90 # Disable SSHD inside initramfs
91 91 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=n\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
92 92 fi
93 93
94 94 # Add cryptsetup modules to initramfs
95 <<<<<<< HEAD
95 96 printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
96 97 #printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
97 98
98 99 # Dummy mapping required by mkinitramfs
99 100 echo "0 1 crypt $(echo "${CRYPTFS_CIPHER}" | cut -d ':' -f 1) ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
101 =======
102 #printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
103
104 # Dummy mapping required by mkinitramfs
105 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
100 106 echo "0 1 crypt "${CRYPTFS_CIPHER}" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
101 107
102 108 # Generate initramfs with encrypted root partition support
103 109 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
104 110
105 111 # Remove dummy mapping
106 112 chroot_exec cryptsetup close "${CRYPTFS_MAPPING}"
107 113 # CRYPTFS=false
108 114 else
109 115 #USB BOOT /boot on sda1 / on sda2
110 116 if [ "$ENABLE_USBBOOT" = true ] ; then
111 117 sed -i "s/mmcblk0p1/sda1/" "${ETC_DIR}/fstab"
112 118 sed -i "s/mmcblk0p2/sda2/" "${ETC_DIR}/fstab"
113 119 fi
114 120
115 121 # Add usb/sda disk root partition to fstab
116 122 if [ "$ENABLE_SPLITFS" = true ] ; then
117 123 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/fstab"
118 124 fi
119 125 # Generate initramfs without encrypted root partition support
120 126 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
121 127 fi
122 128 fi
@@ -1,311 +1,316
1 1 #
2 2 # Setup RPi2/3 config and cmdline
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
9 9 # Install boot binaries from local directory
10 10 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
11 11 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
12 12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
13 13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
14 14 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
15 15 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
16 16 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
17 17 else
18 18 # Create temporary directory for boot binaries
19 19 temp_dir=$(as_nobody mktemp -d)
20 20
21 21 # Install latest boot binaries from raspberry/firmware github
22 22 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
23 23 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
24 24 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
25 25 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
26 26 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
27 27 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
28 28 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
29 29
30 30 # Move downloaded boot binaries
31 31 mv "${temp_dir}/"* "${BOOT_DIR}/"
32 32
33 33 # Remove temporary directory for boot binaries
34 34 rm -fr "${temp_dir}"
35 35
36 36 # Set permissions of the boot binaries
37 37 chown -R root:root "${BOOT_DIR}"
38 38 chmod -R 600 "${BOOT_DIR}"
39 39 fi
40 40
41 41 # Setup firmware boot cmdline
42 42 if [ "$ENABLE_USBBOOT" = true ] ; then
43 43 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline console=tty1 rootwait init=/bin/systemd"
44 44 else
45 45 if [ "$ENABLE_SPLITFS" = true ] ; then
46 46 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline console=tty1 rootwait init=/bin/systemd"
47 47 else
48 48 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline console=tty1 rootwait init=/bin/systemd"
49 49 fi
50 50 fi
51 51
52 52 # Add encrypted root partition to cmdline.txt
53 53 if [ "$ENABLE_CRYPTFS" = true ] ; then
54 54 if [ "$ENABLE_SPLITFS" = true ] ; then
55 55 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
56 56 else
57 57 if [ "$ENABLE_USBBOOT" = true ] ; then
58 58 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda2:${CRYPTFS_MAPPING}/")
59 59 else
60 60 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
61 61 fi
62 62 fi
63 63 fi
64 64
65 65 # Enable Kernel messages on standard output
66 66 if [ "$ENABLE_PRINTK" = true ] ; then
67 67 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
68 68 fi
69 69
70 70 # Enable Kernel messages on standard output
71 71 if [ "$KERNEL_SECURITY" = true ] ; then
72 72 install_readonly files/sysctl.d/84-rpi-ASLR.conf "${ETC_DIR}/sysctl.d/84-rpi-ASLR.conf"
73 73 fi
74 74
75 75 # Install udev rule for serial alias - serial0 = console serial1=bluetooth
76 76 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
77 77
78 78 # Remove IPv6 networking support
79 79 if [ "$ENABLE_IPV6" = false ] ; then
80 80 CMDLINE="${CMDLINE} ipv6.disable=1"
81 81 fi
82 82
83 83 # Automatically assign predictable network interface names
84 84 if [ "$ENABLE_IFNAMES" = false ] ; then
85 85 CMDLINE="${CMDLINE} net.ifnames=0"
86 86 else
87 87 CMDLINE="${CMDLINE} net.ifnames=1"
88 88 fi
89 89
90 90 # Disable Raspberry Pi console logo
91 91 if [ "$ENABLE_LOGO" = false ] ; then
92 92 CMDLINE="${CMDLINE} logo.nologo"
93 93 fi
94 94
95 95 # Strictly limit verbosity of boot up console messages
96 96 if [ "$ENABLE_SILENT_BOOT" = true ] ; then
97 97 CMDLINE="${CMDLINE} quiet loglevel=0 rd.systemd.show_status=auto rd.udev.log_priority=0"
98 98 fi
99 99
100 100 # Install firmware config
101 101 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
102 102
103 103 # Disable Raspberry Pi console logo
104 104 if [ "$ENABLE_SLASH" = false ] ; then
105 105 echo "disable_splash=1" >> "${BOOT_DIR}/config.txt"
106 106 fi
107 107
108 108 # Locks CPU frequency at maximum
109 109 if [ "$ENABLE_TURBO" = true ] ; then
110 110 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
111 111 # helps to avoid sdcard corruption when force_turbo is enabled.
112 112 echo "boot_delay=1" >> "${BOOT_DIR}/config.txt"
113 113 fi
114 114
115 <<<<<<< HEAD
115 116 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
117 =======
118 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
116 119 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ]; then
117 120
118 121 # Bluetooth enabled
119 122 if [ "$ENABLE_BLUETOOTH" = true ] ; then
120 123 # Create temporary directory for Bluetooth sources
121 124 temp_dir=$(as_nobody mktemp -d)
122 125
123 126 # Fetch Bluetooth sources
124 127 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
125 128
126 129 # Copy downloaded sources
127 130 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
128 131
129 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
130 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
131 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://raw.githubusercontent.com/RPi-Distro/bluez-firmware/master/broadcom/BCM43430A1.hcd
132
133 132 # Set permissions
134 133 chown -R root:root "${R}/tmp/pi-bluetooth"
135 134
136 135 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
137 136 wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
138 137 wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://raw.githubusercontent.com/RPi-Distro/bluez-firmware/master/broadcom/BCM43430A1.hcd
139 138
140 139 # Install tools
141 140 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
142 141 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
143 142
144 143 # make scripts executable
145 144 chmod +x "${R}/usr/bin/bthelper"
146 145 chmod +x "${R}/usr/bin/btuart"
147 146
148 147 # Install bluetooth udev rule
149 148 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
150 149
151 150 # Install Firmware Flash file and apropiate licence
152 151 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
153 152 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
154 153 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/BCM43430A1.hcd"
155 154 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
156 155 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
157 156
158 157 # Remove temporary directories
159 158 rm -fr "${temp_dir}"
160 159 rm -fr "${R}"/tmp/pi-bluetooth
161 160
162 161 # Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15. Slow Bluetooth and slow cpu. Use /dev/ttyS0 instead of /dev/ttyAMA0
163 162 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
164 163 # set overlay to swap ttyAMA0 and ttyS0
165 164 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
166 165
167 166 if [ "$ENABLE_TURBO" = false ] ; then
168 167 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
169 168 fi
170 169
171 170 fi
172 171
173 172 # Activate services
174 173 chroot_exec systemctl enable pi-bluetooth.hciuart.service
175 174
176 175 else # if ENABLE_BLUETOOTH = false
177 176 # set overlay to disable bluetooth
178 177 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
179 178 fi # ENABLE_BLUETOOTH end
180 179 fi
181 180
182 181 # may need sudo systemctl disable hciuart
183 182 if [ "$ENABLE_CONSOLE" = true ] ; then
184 183 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
185 184 # add string to cmdline
186 185 CMDLINE="${CMDLINE} console=serial0,115200"
187 186
188 187 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]|| [ "$RPI_MODEL" = 0 ]; then
189 188 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
190 189 if [ "$ENABLE_TURBO" = false ] ; then
191 190 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
192 191 fi
193 192 fi
194 193
195 194 # Enable serial console systemd style
196 195 chroot_exec systemctl enable serial-getty@serial0.service
197 196 else
198 197 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
199 198 fi
200 199
201 200 # Disable dphys-swapfile service. Will get enabled on first boot
202 201 if [ "$ENABLE_DPHYSSWAP" = true ] ; then
203 202 chroot_exec systemctl disable dphys-swapfile
204 203 fi
205 204
206 205 if [ "$ENABLE_SYSTEMDSWAP" = true ] ; then
207 206 # Create temporary directory for systemd-swap sources
208 207 temp_dir=$(as_nobody mktemp -d)
209 208
210 209 # Fetch systemd-swap sources
211 210 as_nobody git -C "${temp_dir}" clone "${SYSTEMDSWAP_URL}"
212 211
213 212 # Copy downloaded systemd-swap sources
214 213 mv "${temp_dir}/systemd-swap" "${R}/tmp/"
215 214
216 215 # Change into downloaded src dir
217 216 cd "${R}/tmp/systemd-swap" || exit
217 <<<<<<< HEAD
218 218
219 =======
220 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
219 221
220 222 # Get Verion
221 223 VERSION=$(git tag | tail -n 1)
222 224 #sed -i "s/DEB_NAME=.*/DEB_NAME=systemd-swap_all/g" "${R}/tmp/systemd-swap/package.sh"
223 225
224 226 # Build package
225 227 bash ./package.sh debian
226 228
227 229 # Change back into script root dir
228 230 cd "${WORKDIR}" || exit
229 231
230 232 # Set permissions of the systemd-swap sources
231 233 chown -R root:root "${R}/tmp/systemd-swap"
232 234
233 235 # Install package - IMPROVE AND MAKE IT POSSIBLE WITHOUT VERSION NR.
236 <<<<<<< HEAD
234 237 chroot_exec dpkg -i /tmp/systemd-swap/systemd-swap_4.0.1_any.deb
238 =======
239 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
235 240 chroot_exec dpkg -i /tmp/systemd-swap/systemd-swap_"$VERSION"_all.deb
236 241
237 242 # Enable service
238 243 chroot_exec systemctl enable systemd-swap
239 244
240 245 # Remove temporary directory for systemd-swap sources
241 246 rm -fr "${temp_dir}"
242 247 else
243 248 # Enable ZSWAP in cmdline if systemd-swap is not used
244 249 if [ "$KERNEL_ZSWAP" = true ] ; then
245 250 CMDLINE="${CMDLINE} zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lz4"
246 251 fi
247 252 fi
248 253 if [ "$KERNEL_SECURITY" = true ] ; then
249 254 CMDLINE="${CMDLINE} apparmor=1 security=apparmor"
250 255 fi
251 256
252 257 # Install firmware boot cmdline
253 258 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
254 259
255 260 # Setup minimal GPU memory allocation size: 16MB (no X)
256 261 if [ "$ENABLE_MINGPU" = true ] ; then
257 262 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
258 263 fi
259 264
260 265 # Setup boot with initramfs
261 266 if [ "$ENABLE_INITRAMFS" = true ] ; then
262 267 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
263 268 fi
264 269
265 270 # Create firmware configuration and cmdline symlinks
266 271 ln -sf firmware/config.txt "${R}/boot/config.txt"
267 272 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
268 273
269 274 # Install and setup kernel modules to load at boot
270 275 mkdir -p "${LIB_DIR}/modules-load.d/"
271 276 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
272 277
273 278 # Load hardware random module at boot
274 279 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
275 280 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
276 281 fi
277 282
278 283 # Load sound module at boot
279 284 if [ "$ENABLE_SOUND" = true ] ; then
280 285 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
281 286 else
282 287 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
283 288 fi
284 289
285 290 # Enable I2C interface
286 291 if [ "$ENABLE_I2C" = true ] ; then
287 292 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
288 293 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
289 294 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
290 295 fi
291 296
292 297 # Enable SPI interface
293 298 if [ "$ENABLE_SPI" = true ] ; then
294 299 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
295 300 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
296 301 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
297 302 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
298 303 fi
299 304 fi
300 305
301 306 # Disable RPi2/3 under-voltage warnings
302 307 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
303 308 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
304 309 fi
305 310
306 311 # Install kernel modules blacklist
307 312 mkdir -p "${ETC_DIR}/modprobe.d/"
308 313 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
309 314
310 315 # Install sysctl.d configuration files
311 316 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,137 +1,140
1 1 #
2 2 # Setup Networking
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Install and setup hostname
9 9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
10 10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
11 11
12 12 # Install and setup hosts
13 13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
14 14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
15 15
16 16 # Setup hostname entry with static IP
17 17 if [ "$NET_ADDRESS" != "" ] ; then
18 18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
19 19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
20 20 fi
21 21
22 22 # Remove IPv6 hosts
23 23 if [ "$ENABLE_IPV6" = false ] ; then
24 24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
25 25 fi
26 26
27 27 # Install hint about network configuration
28 28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
29 29
30 30 # Install configuration for interface eth0
31 31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
32 32
33 33 if [ "$RPI_MODEL" = 3P ] ; then
34 34 printf "\n[Link]\nGenericReceiveOffload=off\nTCPSegmentationOffload=off\nGenericSegmentationOffload=off" >> "${ETC_DIR}/systemd/network/eth.network"
35 35 fi
36 36
37 37 # Install configuration for interface wl*
38 38 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
39 39
40 40 #always with dhcp since wpa_supplicant integration is missing
41 41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
42 42
43 43 if [ "$ENABLE_DHCP" = true ] ; then
44 44 # Enable DHCP configuration for interface eth0
45 45 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
46 46
47 47 # Set DHCP configuration to IPv4 only
48 48 if [ "$ENABLE_IPV6" = false ] ; then
49 49 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
50 50 fi
51 51
52 52 else # ENABLE_DHCP=false
53 53 # Set static network configuration for interface eth0
54 54 sed -i\
55 55 -e "s|DHCP=.*|DHCP=no|"\
56 56 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
57 57 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
58 58 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
59 59 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
60 60 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
61 61 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
62 62 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
63 63 "${ETC_DIR}/systemd/network/eth.network"
64 64 fi
65 65
66 66 # Remove empty settings from network configuration
67 67 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
68 68 # Remove empty settings from wlan configuration
69 69 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
70 70
71 71 # Move systemd network configuration if required by Debian release
72 72 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
73 73 # If WLAN is enabled copy wlan configuration too
74 74 if [ "$ENABLE_WIRELESS" = true ] ; then
75 75 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
76 76 fi
77 77 rm -fr "${ETC_DIR}/systemd/network"
78 78
79 79 # Enable systemd-networkd service
80 80 chroot_exec systemctl enable systemd-networkd
81 81
82 82 # Install host.conf resolver configuration
83 83 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
84 84
85 85 # Enable network stack hardening
86 86 if [ "$ENABLE_HARDNET" = true ] ; then
87 87 # Install sysctl.d configuration files
88 88 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
89 89
90 90 # Setup resolver warnings about spoofed addresses
91 91 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
92 92 fi
93 93
94 94 # Enable time sync
95 95 if [ "$NET_NTP_1" != "" ] ; then
96 96 chroot_exec systemctl enable systemd-timesyncd.service
97 97 fi
98 98
99 99 # Download the firmware binary blob required to use the RPi3 wireless interface
100 100 if [ "$ENABLE_WIRELESS" = true ] ; then
101 101 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
102 102 mkdir -p "${WLAN_FIRMWARE_DIR}"
103 103 fi
104 104
105 105 # Create temporary directory for firmware binary blob
106 106 temp_dir=$(as_nobody mktemp -d)
107 107
108 108 # Fetch firmware binary blob for RPI3B+
109 <<<<<<< HEAD
109 110 if [ "$RPI_MODEL" = 3P ] ; then
111 =======
112 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
110 113 if [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then
111 114 # Fetch firmware binary blob for RPi3P
112 115 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
113 116 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
114 117 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
115 118
116 119 # Move downloaded firmware binary blob
117 120 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
118 121
119 122 # Set permissions of the firmware binary blob
120 123 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
121 124 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
122 125 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
123 126 # Fetch firmware binary blob for RPi3
124 127 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
125 128 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
126 129
127 130 # Move downloaded firmware binary blob
128 131 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
129 132
130 133 # Set permissions of the firmware binary blob
131 134 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 135 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
133 136 fi
134 137
135 138 # Remove temporary directory for firmware binary blob
136 139 rm -fr "${temp_dir}"
137 140 fi
@@ -1,58 +1,64
1 1 #
2 2 # Setup videocore - Raspberry Userland
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
9 9 # Copy existing videocore sources into chroot directory
10 10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
11 11 # Copy local videocore sources
12 12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
13 13 else
14 14 # Create temporary directory for videocore sources
15 15 temp_dir=$(as_nobody mktemp -d)
16 16
17 17 # Fetch videocore sources
18 18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
19 19
20 20 # Copy downloaded videocore sources
21 21 mv "${temp_dir}/userland" "${R}/tmp/"
22 22
23 23 # Set permissions of the U-Boot sources
24 24 chown -R root:root "${R}/tmp/userland"
25 25
26 26 # Remove temporary directory for U-Boot sources
27 27 rm -fr "${temp_dir}"
28 28 fi
29 29
30 30 # Create build dir
31 31 mkdir "${R}"/tmp/userland/build
32 32
33 33 # push us to build directory
34 34 cd "${R}"/tmp/userland/build
35 35
36 36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
37 <<<<<<< HEAD
37 38 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
39 =======
40 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
38 41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/aarch64-linux-gnu.cmake -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
39 42 fi
40 43
41 44 if [ "$RELEASE_ARCH" = "armel" ] ; then
45 <<<<<<< HEAD
42 46 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
47 =======
48 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
43 49 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
44 50 fi
45 51
46 52 if [ "$RELEASE_ARCH" = "armhf" ] ; then
47 53 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
48 54 fi
49 55
50 56 #build userland
51 57 make -j "$(nproc)"
52 58
53 59 #back to root of scriptdir
54 60 cd "${WORKDIR}"
55 61
56 62 # Remove videocore sources
57 63 rm -fr "${R}"/tmp/userland/
58 64 fi
@@ -1,98 +1,101
1 1 #!/bin/sh
2 2 #
3 3 # Build and Setup nexmon with monitor mode patch
4 4 #
5 5
6 6 # Load utility functions
7 7 . ./functions.sh
8 8
9 9 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
10 10 # Copy existing nexmon sources into chroot directory
11 11 if [ -n "$NEXMONSRC_DIR" ] && [ -d "$NEXMONSRC_DIR" ] ; then
12 12 # Copy local U-Boot sources
13 13 cp -r "${NEXMONSRC_DIR}" "${R}/tmp"
14 14 else
15 15 # Create temporary directory for nexmon sources
16 16 temp_dir=$(as_nobody mktemp -d)
17 17
18 18 # Fetch nexmon sources
19 19 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
20 20
21 21 # Copy downloaded nexmon sources
22 22 mv "${temp_dir}/nexmon" "${R}"/tmp/
23 23
24 24 # Set permissions of the nexmon sources
25 25 chown -R root:root "${R}"/tmp/nexmon
26 26
27 27 # Remove temporary directory for nexmon sources
28 28 rm -fr "${temp_dir}"
29 29 fi
30 30
31 31 # Set script Root
32 32 export NEXMON_ROOT="${R}"/tmp/nexmon
33 33
34 34 # Build nexmon firmware outside the build system, if we can.
35 35 cd "${NEXMON_ROOT}" || exit
36 36
37 37 # Make ancient isl build
38 38 cd buildtools/isl-0.10 || exit
39 39 ./configure
40 40 make
41 41 cd ../.. || exit
42 42
43 43 # Disable statistics
44 44 touch DISABLE_STATISTICS
45 45
46 46 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
47 47 export KERNEL="${KERNEL_IMAGE}"
48 48 export ARCH=arm
49 49 export SUBARCH=arm
50 50 export CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
51 51 export CC="${CC}"gcc
52 52 export CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
53 53 export ZLIBFLATE="zlib-flate -compress"
54 54 export Q=@
55 55 export NEXMON_SETUP_ENV=1
56 56 export HOSTUNAME=$(uname -s)
57 57 export PLATFORMUNAME=$(uname -m)
58 58
59 59 # Make nexmon
60 60 make
61 61
62 62 # build patches
63 63 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
64 64 cd "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon || exit
65 65 sed -i -e 's/all:.*/all: $(RAM_FILE)/g' ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon/Makefile
66 66 make clean
67 67
68 68 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
69 69 LD_LIBRARY_PATH="${NEXMON_ROOT}"/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
70 70
71 71 # copy RPi0W & RPi3 firmware
72 72 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
73 73 cp "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
74 74 cp -f "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
75 75 fi
76 76
77 <<<<<<< HEAD
77 78 if [ "$RPI_MODEL" = 3P ] ; then
79 =======
80 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
78 81 if [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then
79 82 cd "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon || exit
80 83 sed -i -e 's/all:.*/all: $(RAM_FILE)/g' ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon/Makefile
81 84 make clean
82 85
83 86 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
84 87 LD_LIBRARY_PATH=${NEXMON_ROOT}/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
85 88
86 89 # RPi3B+ firmware
87 90 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
88 91 cp "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
89 92 cp -f "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
90 93 fi
91 94
92 95 #Revert to previous directory
93 96 cd "${WORKDIR}" || exit
94 97
95 98 # Remove nexmon sources
96 99 rm -fr "${NEXMON_ROOT}"
97 100
98 101 fi
@@ -1,908 +1,936
1 1 #!/bin/sh
2 2 ########################################################################
3 3 # rpi23-gen-image.sh 2015-2017
4 4 #
5 5 # Advanced Debian "stretch" and "buster" bootstrap script for Raspberry Pi
6 6 #
7 7 # This program is free software; you can redistribute it and/or
8 8 # modify it under the terms of the GNU General Public License
9 9 # as published by the Free Software Foundation; either version 2
10 10 # of the License, or (at your option) any later version.
11 11 #
12 12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
13 13 #
14 14 # Big thanks for patches and enhancements by 20+ github contributors!
15 15 ########################################################################
16 16
17 17 # Are we running as root?
18 18 if [ "$(id -u)" -ne "0" ] ; then
19 19 echo "error: this script must be executed with root privileges!"
20 20 exit 1
21 21 fi
22 22
23 23 # Check if ./functions.sh script exists
24 24 if [ ! -r "./functions.sh" ] ; then
25 25 echo "error: './functions.sh' required script not found!"
26 26 exit 1
27 27 fi
28 28
29 29 # Load utility functions
30 30 . ./functions.sh
31 31
32 32 # Load parameters from configuration template file
33 33 if [ -n "$CONFIG_TEMPLATE" ] ; then
34 34 use_template
35 35 fi
36 36
37 37 # Introduce settings
38 38 set -e
39 39 echo -n -e "\n#\n# RPi 0/1/2/3 Bootstrap Settings\n#\n"
40 40 set -x
41 41
42 42 # Raspberry Pi model configuration
43 43 RPI_MODEL=${RPI_MODEL:=2}
44 44
45 45 # Debian release
46 46 RELEASE=${RELEASE:=buster}
47 47 if [ $RELEASE = "bullseye" ] ; then
48 48 RELEASE=testing
49 49 fi
50 50
51 51 # Kernel Branch
52 52 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
53 53
54 54 # URLs
55 55 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
56 56 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
57 57 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
58 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
59 58 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
60 59 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
61 60 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
62 61 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
63 62 NEXMON_URL=${NEXMON_URL:=https://github.com/seemoo-lab/nexmon.git}
64 63 SYSTEMDSWAP_URL=${SYSTEMDSWAP_URL:=https://github.com/Nefelim4ag/systemd-swap.git}
65 64
66 65 # Kernel deb packages for 32bit kernel
67 66 RPI_32_KERNEL_URL=${RPI_32_KERNEL_URL:=https://github.com/hypriot/rpi-kernel/releases/download/v4.14.34/raspberrypi-kernel_20180422-141901_armhf.deb}
68 67 RPI_32_KERNELHEADER_URL=${RPI_32_KERNELHEADER_URL:=https://github.com/hypriot/rpi-kernel/releases/download/v4.14.34/raspberrypi-kernel-headers_20180422-141901_armhf.deb}
69 68 # Kernel has KVM and zswap enabled - use if KERNEL_* parameters and precompiled kernel are used
69 <<<<<<< HEAD
70 70 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.14.80.20181113/bcmrpi3-kernel-bis-4.14.80.20181113.tar.xz}
71 71 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.19.80.20191022/bcmrpi3-kernel-bis-4.19.80.20191022.tar.xz}
72 72 # Default precompiled 64bit kernel
73 73 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.14.80.20181113/bcmrpi3-kernel-4.14.80.20181113.tar.xz}
74 =======
75 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.19.80.20191022/bcmrpi3-kernel-bis-4.19.80.20191022.tar.xz}
76 # Default precompiled 64bit kernel
77 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
74 78 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.19.80.20191022/bcmrpi3-kernel-4.19.80.20191022.tar.xz}
75 79 # Sakaki BIS Kernel RPI4 - https://github.com/sakaki-/bcm2711-kernel-bis
76 80 RPI4_64_BIS_KERNEL_URL=${RPI4_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcm2711-kernel-bis/releases/download/4.19.59.20190724/bcm2711-kernel-bis-4.19.59.20190724.tar.xz}
77 81 # Default precompiled 64bit kernel - https://github.com/sakaki-/bcm2711-kernel
78 82 RPI4_64_DEF_KERNEL_URL=${RPI4_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcm2711-kernel-bis/releases/download/4.19.59.20190724/bcm2711-kernel-bis-4.19.59.20190724.tar.xz}
79 83 # Generic
80 84 RPI3_64_KERNEL_URL=${RPI3_64_KERNEL_URL:=$RPI3_64_DEF_KERNEL_URL}
81 85 RPI4_64_KERNEL_URL=${RPI4_64_KERNEL_URL:=$RPI4_64_DEF_KERNEL_URL}
82 86 # Kali kernel src - used if ENABLE_NEXMON=true (they patch the wlan kernel modul)
83 87 KALI_KERNEL_URL=${KALI_KERNEL_URL:=https://github.com/Re4son/re4son-raspberrypi-linux.git}
84 88
85 89 # Build directories
86 90 WORKDIR=$(pwd)
87 91 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
88 92 BUILDDIR="${BASEDIR}/build"
89 93
90 94 # Chroot directories
91 95 R="${BUILDDIR}/chroot"
92 96 ETC_DIR="${R}/etc"
93 97 LIB_DIR="${R}/lib"
94 98 BOOT_DIR="${R}/boot/firmware"
95 99 KERNEL_DIR="${R}/usr/src/linux"
96 100 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
97 101 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
98 102
99 103 # Firmware directory: Blank if download from github
100 104 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
101 105
102 106 # General settings
103 107 SET_ARCH=${SET_ARCH:=32}
104 108 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
105 109 PASSWORD=${PASSWORD:=raspberry}
106 110 USER_PASSWORD=${USER_PASSWORD:=raspberry}
107 111 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
108 112 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
109 113 EXPANDROOT=${EXPANDROOT:=true}
110 114 ENABLE_DPHYSSWAP=${ENABLE_DPHYSSWAP:=true}
111 115
112 116 # Keyboard settings
113 117 XKB_MODEL=${XKB_MODEL:=""}
114 118 XKB_LAYOUT=${XKB_LAYOUT:=""}
115 119 XKB_VARIANT=${XKB_VARIANT:=""}
116 120 XKB_OPTIONS=${XKB_OPTIONS:=""}
117 121
118 122 # Network settings (DHCP)
119 123 ENABLE_DHCP=${ENABLE_DHCP:=true}
120 124
121 125 # Network settings (static)
122 126 NET_ADDRESS=${NET_ADDRESS:=""}
123 127 NET_GATEWAY=${NET_GATEWAY:=""}
124 128 NET_DNS_1=${NET_DNS_1:=""}
125 129 NET_DNS_2=${NET_DNS_2:=""}
126 130 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
127 131 NET_NTP_1=${NET_NTP_1:=""}
128 132 NET_NTP_2=${NET_NTP_2:=""}
129 133
130 134 # APT settings
131 135 APT_PROXY=${APT_PROXY:=""}
132 136 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
133 137 KEEP_APT_PROXY=${KEEP_APT_PROXY:=false}
134 138
135 139 # Feature settings
136 140 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
137 141 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
138 142 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
139 143 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
140 144 ENABLE_I2C=${ENABLE_I2C:=false}
141 145 ENABLE_SPI=${ENABLE_SPI:=false}
142 146 ENABLE_IPV6=${ENABLE_IPV6:=true}
143 147 ENABLE_SSHD=${ENABLE_SSHD:=true}
144 148 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
145 149 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
146 150 ENABLE_SOUND=${ENABLE_SOUND:=true}
147 151 ENABLE_DBUS=${ENABLE_DBUS:=true}
148 152 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
149 153 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
150 154 ENABLE_XORG=${ENABLE_XORG:=false}
151 155 ENABLE_WM=${ENABLE_WM:=""}
152 156 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
153 157 ENABLE_USER=${ENABLE_USER:=true}
154 158 USER_NAME=${USER_NAME:="pi"}
155 159 ENABLE_ROOT=${ENABLE_ROOT:=false}
156 160 ENABLE_QEMU=${ENABLE_QEMU:=false}
157 161 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
158 162
159 163 # SSH settings
160 164 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
161 165 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
162 166 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
163 167 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
164 168 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
165 169
166 170 # Advanced settings
167 171 ENABLE_SYSTEMDSWAP=${ENABLE_SYSTEMDSWAP:=false}
168 172 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
169 173 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
170 174 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
171 175 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
172 176 ENABLE_USBBOOT=${ENABLE_USBBOOT=false}
173 177 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
174 178 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
175 179 ENABLE_NEXMON=${ENABLE_NEXMON:=false}
176 180 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
177 181 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
178 182 NEXMONSRC_DIR=${NEXMONSRC_DIR:=""}
179 183 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
180 184 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
181 185 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
182 186 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
183 187 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
184 188 ENABLE_SPLASH=${ENABLE_SPLASH:=true}
185 189 ENABLE_LOGO=${ENABLE_LOGO:=true}
186 190 ENABLE_SILENT_BOOT=${ENABLE_SILENT_BOOT=false}
187 191 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
188 192
189 193 # Kernel compilation settings
190 194 BUILD_KERNEL=${BUILD_KERNEL:=true}
191 195 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
192 196 KERNEL_THREADS=${KERNEL_THREADS:=1}
193 197 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
194 198 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
195 199 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
196 200 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
197 201 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
198 202 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
199 203 KERNEL_VIRT=${KERNEL_VIRT:=false}
200 204 KERNEL_BPF=${KERNEL_BPF:=false}
201 205 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=ondemand}
202 206 KERNEL_SECURITY=${KERNEL_SECURITY:=false}
203 207 KERNEL_NF=${KERNEL_NF:=false}
204 208 KERNEL_DHKEY=${KERNEL_DHKEY:=true}
205 209 KERNEL_BTRFS=${KERNEL_BTRFS:=false}
206 210 KERNEL_NSPAN=${KERNEL_NSPAN:=false}
207 211 KERNEL_POEHAT=${KERNEL_POEHAT:=false}
208 212
209 213 # Kernel compilation from source directory settings
210 214 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
211 215 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
212 216 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
213 217 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
214 218
215 219 # Reduce disk usage settings
216 220 REDUCE_APT=${REDUCE_APT:=true}
217 221 REDUCE_DOC=${REDUCE_DOC:=true}
218 222 REDUCE_MAN=${REDUCE_MAN:=true}
219 223 REDUCE_VIM=${REDUCE_VIM:=false}
220 224 REDUCE_BASH=${REDUCE_BASH:=false}
221 225 REDUCE_HWDB=${REDUCE_HWDB:=true}
222 226 REDUCE_SSHD=${REDUCE_SSHD:=true}
223 227 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
224 228
225 229 # Encrypted filesystem settings
226 230 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
227 231 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
228 232 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
233 <<<<<<< HEAD
229 234 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
235 =======
236 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
230 237 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64"}
231 238 CRYPTFS_HASH=${CRYPTFS_HASH:="sha512"}
232 239 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
233 240 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
234 241 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
235 242 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
236 243 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
237 244
238 245 # Chroot scripts directory
239 246 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
240 247
241 248 # Packages required in the chroot build environment
242 249 APT_INCLUDES=${APT_INCLUDES:=""}
250 <<<<<<< HEAD
243 251 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup,libnss-systemd"
252 =======
253 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
244 254 APT_INCLUDES="${APT_INCLUDES},flex,bison,libssl-dev,apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup,libnss-systemd"
245 255
246 256 # Packages to exclude from chroot build environment
247 257 APT_EXCLUDES=${APT_EXCLUDES:=""}
248 258
249 259 # Packages required for bootstrapping
260 <<<<<<< HEAD
250 261 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
262 =======
263 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
251 264 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus bison flex libssl-dev sudo"
252 265 MISSING_PACKAGES=""
253 266
254 267 # Packages installed for c/c++ build environment in chroot (keep empty)
255 268 COMPILER_PACKAGES=""
256 269
257 270 # Check if apt-cacher-ng has port 3142 open and set APT_PROXY
258 271 APT_CACHER_RUNNING=$(lsof -i :3142 | cut -d ' ' -f3 | uniq | sed '/^\s*$/d')
259 272 if [ "${APT_CACHER_RUNNING}" = "apt-cacher-ng" ] ; then
260 273 APT_PROXY=http://127.0.0.1:3142/
261 274 fi
262 275
263 276 # Setup architecture specific settings
264 277 if [ -n "$SET_ARCH" ] ; then
265 278 # 64-bit configuration
266 279 if [ "$SET_ARCH" = 64 ] ; then
267 280 # General 64-bit depended settings
268 281 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
269 282 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
270 283 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
271 284
272 285 # Raspberry Pi model specific settings
273 286 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then
274 287 if [ "$RPI_MODEL" != 4 ] ; then
275 288 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
276 289 else
277 290 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2711_defconfig}
278 291 fi
279 292
280 293 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
281 294 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
282 295 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
283 296 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
284 297 else
285 298 echo "error: Only Raspberry PI 3, 3B+ and 4 support 64-bit"
286 299 exit 1
287 300 fi
288 301 fi
289 302
290 303 # 32-bit configuration
291 304 if [ "$SET_ARCH" = 32 ] ; then
292 305 # General 32-bit dependend settings
293 306 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
294 307 KERNEL_ARCH=${KERNEL_ARCH:=arm}
295 308 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
296 309
297 310 # Raspberry Pi model specific settings
298 311 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
299 312 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
300 313 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
301 314 RELEASE_ARCH=${RELEASE_ARCH:=armel}
302 315 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
303 316 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
304 317 fi
305 318
306 319 # Raspberry Pi model specific settings
307 320 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then
308 321 if [ "$RPI_MODEL" != 4 ] ; then
309 322 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
310 323 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
311 324 else
312 325 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2711_defconfig}
313 326 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7l.img}
314 327 fi
315 328
316 329 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
317 330 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
331 <<<<<<< HEAD
318 332 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
333 =======
334 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
319 335
320 336 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
321 337 fi
322 338 fi
323 339 # SET_ARCH not set
324 340 else
325 341 echo "error: Please set '32' or '64' as value for SET_ARCH"
326 342 exit 1
327 343 fi
328 344 # Device specific configuration and U-Boot configuration
329 345 case "$RPI_MODEL" in
330 346 0)
331 347 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
332 348 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
333 349 ;;
334 350 1)
335 351 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
336 352 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
337 353 ;;
338 354 1P)
339 355 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
340 356 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
341 357 ;;
342 358 2)
343 359 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
344 360 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
345 361 ;;
346 362 3)
347 363 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
348 364 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
349 365 ;;
350 366 3P)
351 367 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
352 368 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
353 369 ;;
354 370 4)
355 371 DTB_FILE=${DTB_FILE:=bcm2711-rpi-4-b.dtb}
356 372 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_4_defconfig}
357 373 ;;
358 374 *)
359 375 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
360 376 exit 1
361 377 ;;
362 378 esac
363 379
364 380 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
365 381 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then
366 382 # Include bluetooth packages on supported boards
367 383 if [ "$ENABLE_BLUETOOTH" = true ] ; then
368 384 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
369 385 fi
370 386 if [ "$ENABLE_WIRELESS" = true ] ; then
371 387 APT_INCLUDES="${APT_INCLUDES},wireless-tools,crda,wireless-regdb"
372 388 fi
373 389 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
374 390 # Check if the internal wireless interface is not supported by the RPi model
375 391 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
376 392 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
377 393 exit 1
378 394 fi
379 395 fi
380 396
381 397 if [ "$BUILD_KERNEL" = false ] && [ "$ENABLE_NEXMON" = true ]; then
382 398 echo "error: You have to compile kernel sources, if you want to enable nexmon"
383 399 exit 1
384 400 fi
385 401
386 402 # Prepare date string for default image file name
387 403 DATE="$(date +%Y-%m-%d)"
388 404 if [ -z "$KERNEL_BRANCH" ] ; then
389 405 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
390 406 else
391 407 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
392 408 fi
393 409
394 410 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
395 411 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
396 412 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
397 413 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
398 414 exit 1
399 415 fi
400 416 fi
401 417
402 418 # Add cmake to compile videocore sources
403 419 if [ "$ENABLE_VIDEOCORE" = true ] ; then
404 420 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
405 421 fi
406 422
407 423 # Add deps for nexmon
408 424 if [ "$ENABLE_NEXMON" = true ] ; then
425 <<<<<<< HEAD
409 426 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf bison flex make autoconf automake build-essential libtool"
427 =======
428 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
410 429 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf make autoconf automake build-essential libtool"
411 430 fi
412 431
413 432 # Add libncurses5 to enable kernel menuconfig
414 433 if [ "$KERNEL_MENUCONFIG" = true ] ; then
415 434 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
416 435 fi
417 436
418 437 # Add ccache compiler cache for (faster) kernel cross (re)compilation
419 438 if [ "$KERNEL_CCACHE" = true ] ; then
420 439 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
421 440 fi
422 441
423 442 # Add cryptsetup package to enable filesystem encryption
424 443 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
425 444 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
445 <<<<<<< HEAD
426 446 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
447 =======
448 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
427 449 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup,cryptsetup-initramfs"
428 450
429 451 # If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
430 452 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
431 453 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
432 454 fi
433 455
434 456 if [ -z "$CRYPTFS_PASSWORD" ] ; then
435 457 echo "error: no password defined (CRYPTFS_PASSWORD)!"
436 458 exit 1
437 459 fi
438 460 ENABLE_INITRAMFS=true
439 461 fi
440 462
441 463 # Add initramfs generation tools
442 464 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
443 465 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
444 466 fi
445 467
446 468 # Add device-tree-compiler required for building the U-Boot bootloader
447 469 if [ "$ENABLE_UBOOT" = true ] ; then
448 470 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
449 471 fi
450 472
451 473 if [ "$ENABLE_USBBOOT" = true ] ; then
452 474 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 2 ]; then
453 475 echo "error: Booting from USB alone is only supported by Raspberry Pi 3 and 3P"
454 476 exit 1
455 477 fi
456 478 fi
457 479
458 480 # Check if root SSH (v2) public key file exists
459 481 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
460 482 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
461 483 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
462 484 exit 1
463 485 fi
464 486 fi
465 487
466 488 # Check if $USER_NAME SSH (v2) public key file exists
467 489 if [ -n "$SSH_USER_PUB_KEY" ] ; then
468 490 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
469 491 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
470 492 exit 1
471 493 fi
472 494 fi
473 495
474 496 if [ "$ENABLE_NEXMON" = true ] && [ -n "$KERNEL_BRANCH" ] ; then
475 497 echo "error: Please unset KERNEL_BRANCH if using ENABLE_NEXMON"
476 498 exit 1
477 499 fi
478 500
479 501 # Check if all required packages are installed on the build system
480 502 for package in $REQUIRED_PACKAGES ; do
481 503 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
482 504 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
483 505 fi
484 506 done
485 507
486 508 # If there are missing packages ask confirmation for install, or exit
487 509 if [ -n "$MISSING_PACKAGES" ] ; then
488 510 echo "the following packages needed by this script are not installed:"
489 511 echo "$MISSING_PACKAGES"
490 512
491 513 printf "\ndo you want to install the missing packages right now? [y/n] "
492 514 read -r confirm
493 515 [ "$confirm" != "y" ] && exit 1
494 516
495 517 # Make sure all missing required packages are installed
518 <<<<<<< HEAD
496 519 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
520 =======
521 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
497 522 apt-get update && apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
498 523 fi
499 524
500 525 # Check if ./bootstrap.d directory exists
501 526 if [ ! -d "./bootstrap.d/" ] ; then
502 527 echo "error: './bootstrap.d' required directory not found!"
503 528 exit 1
504 529 fi
505 530
506 531 # Check if ./files directory exists
507 532 if [ ! -d "./files/" ] ; then
508 533 echo "error: './files' required directory not found!"
509 534 exit 1
510 535 fi
511 536
512 537 # Check if specified KERNELSRC_DIR directory exists
513 538 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
514 539 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
515 540 exit 1
516 541 fi
517 542
518 543 # Check if specified UBOOTSRC_DIR directory exists
519 544 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
520 545 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
521 546 exit 1
522 547 fi
523 548
524 549 # Check if specified VIDEOCORESRC_DIR directory exists
525 550 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
526 551 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
527 552 exit 1
528 553 fi
529 554
530 555 # Check if specified FBTURBOSRC_DIR directory exists
531 556 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
532 557 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
533 558 exit 1
534 559 fi
535 560
536 561 # Check if specified NEXMONSRC_DIR directory exists
537 562 if [ -n "$NEXMONSRC_DIR" ] && [ ! -d "$NEXMONSRC_DIR" ] ; then
538 563 echo "error: '${NEXMONSRC_DIR}' specified directory not found (NEXMONSRC_DIR)!"
539 564 exit 1
540 565 fi
541 566
542 567 # Check if specified CHROOT_SCRIPTS directory exists
543 568 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
544 569 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
545 570 exit 1
546 571 fi
547 572
548 573 # Check if specified device mapping already exists (will be used by cryptsetup)
549 574 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
550 575 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
551 576 exit 1
552 577 fi
553 578
554 579 # Don't clobber an old build
555 580 if [ -e "$BUILDDIR" ] ; then
556 581 echo "error: directory ${BUILDDIR} already exists, not proceeding"
557 582 exit 1
558 583 fi
559 584
560 585 # Setup chroot directory
561 586 mkdir -p "${R}"
562 587
563 588 # Check if build directory has enough of free disk space >512MB
564 589 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
565 590 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
566 591 exit 1
567 592 fi
568 593
569 594 set -x
570 595
571 596 # Call "cleanup" function on various signals and errors
572 597 trap cleanup 0 1 2 3 6
573 598
574 599 # Add required packages for the minbase installation
575 600 if [ "$ENABLE_MINBASE" = true ] ; then
576 601 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
577 602 fi
578 603
579 604 # Add parted package, required to get partprobe utility
580 605 if [ "$EXPANDROOT" = true ] ; then
581 606 APT_INCLUDES="${APT_INCLUDES},parted"
582 607 fi
583 608
584 609 # Add dphys-swapfile package, required to enable swap
585 610 if [ "$ENABLE_DPHYSSWAP" = true ] ; then
586 611 APT_INCLUDES="${APT_INCLUDES},dphys-swapfile"
587 612 fi
588 613
589 614 # Add dbus package, recommended if using systemd
590 615 if [ "$ENABLE_DBUS" = true ] ; then
591 616 APT_INCLUDES="${APT_INCLUDES},dbus"
592 617 fi
593 618
594 619 # Add iptables IPv4/IPv6 package
595 620 if [ "$ENABLE_IPTABLES" = true ] ; then
596 621 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
597 622 fi
598 623 # Add apparmor for KERNEL_SECURITY
599 624 if [ "$KERNEL_SECURITY" = true ] ; then
600 625 APT_INCLUDES="${APT_INCLUDES},apparmor,apparmor-utils,apparmor-profiles,apparmor-profiles-extra,libapparmor-perl"
601 626 fi
602 627
603 628 # Add openssh server package
604 629 if [ "$ENABLE_SSHD" = true ] ; then
605 630 APT_INCLUDES="${APT_INCLUDES},openssh-server"
606 631 fi
607 632
608 633 # Add alsa-utils package
609 634 if [ "$ENABLE_SOUND" = true ] ; then
610 635 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
611 636 fi
612 637
613 638 # Add rng-tools package
614 639 if [ "$ENABLE_HWRANDOM" = true ] ; then
615 640 APT_INCLUDES="${APT_INCLUDES},rng-tools"
616 641 fi
617 642
618 643 # Add fbturbo video driver
619 644 if [ "$ENABLE_FBTURBO" = true ] ; then
620 645 # Enable xorg package dependencies
621 646 ENABLE_XORG=true
622 647 fi
623 648
624 649 # Add user defined window manager package
625 650 if [ -n "$ENABLE_WM" ] ; then
626 651 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
627 652
628 653 # Enable xorg package dependencies
629 654 ENABLE_XORG=true
630 655 fi
631 656
632 657 # Add xorg package
633 658 if [ "$ENABLE_XORG" = true ] ; then
634 659 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
635 660 fi
636 661
637 662 # Replace selected packages with smaller clones
638 663 if [ "$ENABLE_REDUCE" = true ] ; then
639 664 # Add levee package instead of vim-tiny
640 665 if [ "$REDUCE_VIM" = true ] ; then
641 666 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
642 667 fi
643 668
644 669 # Add dropbear package instead of openssh-server
645 670 if [ "$REDUCE_SSHD" = true ] ; then
646 671 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
647 672 fi
648 673 fi
649 674
650 675 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
651 676 if [ "$ENABLE_SYSVINIT" = false ] ; then
652 677 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
653 678 fi
654 679
655 680 # Configure kernel sources if no KERNELSRC_DIR
656 681 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
657 682 KERNELSRC_CONFIG=true
658 683 fi
659 684
660 685 # Configure reduced kernel
661 686 if [ "$KERNEL_REDUCE" = true ] ; then
662 687 KERNELSRC_CONFIG=false
663 688 fi
664 689
665 690 # Configure qemu compatible kernel
666 691 if [ "$ENABLE_QEMU" = true ] ; then
667 692 DTB_FILE=vexpress-v2p-ca15_a7.dtb
668 693 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
669 694 KERNEL_DEFCONFIG="vexpress_defconfig"
670 695 if [ "$KERNEL_MENUCONFIG" = false ] ; then
671 696 KERNEL_OLDDEFCONFIG=true
672 697 fi
673 698 fi
674 699
675 700 # Execute bootstrap scripts
676 701 for SCRIPT in bootstrap.d/*.sh; do
677 702 head -n 3 "$SCRIPT"
678 703 . "$SCRIPT"
679 704 done
680 705
681 706 ## Execute custom bootstrap scripts
682 707 if [ -d "custom.d" ] ; then
683 708 for SCRIPT in custom.d/*.sh; do
684 709 . "$SCRIPT"
685 710 done
686 711 fi
687 712
688 713 # Execute custom scripts inside the chroot
689 714 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
690 715 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
691 716 chroot_exec /bin/bash -x <<'EOF'
692 717 for SCRIPT in /chroot_scripts/* ; do
693 718 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
694 719 $SCRIPT
695 720 fi
696 721 done
697 722 EOF
698 723 rm -rf "${R}/chroot_scripts"
699 724 fi
700 725
701 726 # Remove c/c++ build environment from the chroot
702 727 chroot_remove_cc
703 728
704 729 # Generate required machine-id
705 730 MACHINE_ID=$(dbus-uuidgen)
706 731 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
707 732 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
708 733
709 734 # APT Cleanup
710 735 chroot_exec apt-get -y clean
711 736 chroot_exec apt-get -y autoclean
712 737 chroot_exec apt-get -y autoremove
713 738
714 739 # Unmount mounted filesystems
715 740 umount -l "${R}/proc"
716 741 umount -l "${R}/sys"
717 742
718 743 # Clean up directories
719 744 rm -rf "${R}/run/*"
720 745 rm -rf "${R}/tmp/*"
721 746
722 747 # Clean up APT proxy settings
723 748 if [ "$KEEP_APT_PROXY" = false ] ; then
724 749 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
725 750 fi
726 751
727 752 # Clean up files
728 753 rm -f "${ETC_DIR}/ssh/ssh_host_*"
729 754 rm -f "${ETC_DIR}/dropbear/dropbear_*"
730 755 rm -f "${ETC_DIR}/apt/sources.list.save"
731 756 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
732 757 rm -f "${ETC_DIR}/*-"
733 758 rm -f "${ETC_DIR}/resolv.conf"
734 759 rm -f "${R}/root/.bash_history"
735 760 rm -f "${R}/var/lib/urandom/random-seed"
736 761 rm -f "${R}/initrd.img"
737 762 rm -f "${R}/vmlinuz"
738 763 rm -f "${R}${QEMU_BINARY}"
739 764
740 765 if [ "$ENABLE_QEMU" = true ] ; then
741 766 # Setup QEMU directory
742 767 mkdir "${BASEDIR}/qemu"
743 768
744 769 # Copy kernel image to QEMU directory
745 770 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
746 771
747 772 # Copy kernel config to QEMU directory
748 773 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
749 774
750 775 # Copy kernel dtbs to QEMU directory
751 776 for dtb in "${BOOT_DIR}/"*.dtb ; do
752 777 if [ -f "${dtb}" ] ; then
753 778 install_readonly "${dtb}" "${BASEDIR}/qemu/"
754 779 fi
755 780 done
756 781
757 782 # Copy kernel overlays to QEMU directory
758 783 if [ -d "${BOOT_DIR}/overlays" ] ; then
759 784 # Setup overlays dtbs directory
760 785 mkdir "${BASEDIR}/qemu/overlays"
761 786
762 787 for dtb in "${BOOT_DIR}/overlays/"*.dtbo ; do
763 788 if [ -f "${dtb}" ] ; then
764 789 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
765 790 fi
766 791 done
767 792 fi
768 793
769 794 # Copy u-boot files to QEMU directory
770 795 if [ "$ENABLE_UBOOT" = true ] ; then
771 796 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
772 797 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
773 798 fi
774 799 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
775 800 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
776 801 fi
777 802 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
778 803 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
779 804 fi
780 805 fi
781 806
782 807 # Copy initramfs to QEMU directory
783 808 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
784 809 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
785 810 fi
786 811 fi
787 812
788 813 # Calculate size of the chroot directory in KB
789 814 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
790 815
791 816 # Calculate the amount of needed 512 Byte sectors
792 817 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
793 818 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
794 819 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
795 820
796 821 # The root partition is EXT4
797 822 # This means more space than the actual used space of the chroot is used.
798 823 # As overhead for journaling and reserved blocks 35% are added.
799 824 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
800 825
801 826 # Calculate required image size in 512 Byte sectors
802 827 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
803 828
804 829 # Prepare image file
805 830 if [ "$ENABLE_SPLITFS" = true ] ; then
806 831 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
807 832 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
808 833 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
809 834 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
810 835
811 836 # Write firmware/boot partition tables
812 837 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
813 838 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
814 839 EOM
815 840
816 841 # Write root partition table
817 842 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
818 843 ${TABLE_SECTORS},${ROOT_SECTORS},83
819 844 EOM
820 845
821 846 # Setup temporary loop devices
822 847 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
823 848 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
824 849 else # ENABLE_SPLITFS=false
825 850 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
826 851 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
827 852
828 853 # Write partition table
829 854 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
830 855 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
831 856 ${ROOT_OFFSET},${ROOT_SECTORS},83
832 857 EOM
833 858
834 859 # Setup temporary loop devices
835 860 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
836 861 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
837 862 fi
838 863
839 864 if [ "$ENABLE_CRYPTFS" = true ] ; then
840 865 # Create dummy ext4 fs
841 866 mkfs.ext4 "$ROOT_LOOP"
842 867
843 868 # Setup password keyfile
844 869 touch .password
845 870 chmod 600 .password
846 871 echo -n ${CRYPTFS_PASSWORD} > .password
847 872
848 873 # Initialize encrypted partition
874 <<<<<<< HEAD
849 875 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
876 =======
877 >>>>>>> af203dbe173e4e5ca755058b3284dc61375ca579
850 878 cryptsetup --verbose --debug -q luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -h "${CRYPTFS_HASH}" -s "${CRYPTFS_XTSKEYSIZE}" .password
851 879
852 880 # Open encrypted partition and setup mapping
853 881 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
854 882
855 883 # Secure delete password keyfile
856 884 shred -zu .password
857 885
858 886 # Update temporary loop device
859 887 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
860 888
861 889 # Wipe encrypted partition (encryption cipher is used for randomness)
862 890 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
863 891 fi
864 892
865 893 # Build filesystems
866 894 mkfs.vfat "$FRMW_LOOP"
867 895 mkfs.ext4 "$ROOT_LOOP"
868 896
869 897 # Mount the temporary loop devices
870 898 mkdir -p "$BUILDDIR/mount"
871 899 mount "$ROOT_LOOP" "$BUILDDIR/mount"
872 900
873 901 mkdir -p "$BUILDDIR/mount/boot/firmware"
874 902 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
875 903
876 904 # Copy all files from the chroot to the loop device mount point directory
877 905 rsync -a "${R}/" "$BUILDDIR/mount/"
878 906
879 907 # Unmount all temporary loop devices and mount points
880 908 cleanup
881 909
882 910 # Create block map file(s) of image(s)
883 911 if [ "$ENABLE_SPLITFS" = true ] ; then
884 912 # Create block map files for "bmaptool"
885 913 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
886 914 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
887 915
888 916 # Image was successfully created
889 917 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
890 918 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
891 919 else
892 920 # Create block map file for "bmaptool"
893 921 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
894 922
895 923 # Image was successfully created
896 924 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
897 925
898 926 # Create qemu qcow2 image
899 927 if [ "$ENABLE_QEMU" = true ] ; then
900 928 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
901 929 QEMU_SIZE=16G
902 930
903 931 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
904 932 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
905 933
906 934 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
907 935 fi
908 936 fi
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant