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