##// END OF EJS Templates
a
Unknown -
r458:17a59b052c06
parent child
Show More
@@ -1,528 +1,528
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 Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.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 RPi3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf) 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 RPi3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf) cross-compiler toolchain.
11
11
12 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package 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` toolchain meta package 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/debian"
45 ##### `APT_SERVER`="ftp.debian.org/debian"
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 ##### `APT_INCLUDES`=""
51 ##### `APT_INCLUDES`=""
52 A comma separated list of additional packages to be installed by debootstrap during bootstrapping.
52 A comma separated list of additional packages to be installed by debootstrap during bootstrapping.
53
53
54 ##### `APT_INCLUDES_LATE`=""
54 ##### `APT_INCLUDES_LATE`=""
55 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.
55 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.
56
56
57 ---
57 ---
58
58
59 #### General system settings:
59 #### General system settings:
60 ##### `SET_ARCH`=32
60 ##### `SET_ARCH`=32
61 Set Architecture to default 32bit. If you want to to compile 64bit (RPI3 or RPI3+) set it to `64`. This option will set every needed crosscompiler or boeard specific option for a successful build.
61 Set Architecture to default 32bit. If you want to to compile 64bit (RPI3 or RPI3+) set it to `64`. This option will set every needed crosscompiler or boeard specific option for a successful build.
62 If you want to change e.g. cross-compiler -> Templates always override defaults
62 If you want to change e.g. cross-compiler -> Templates always override defaults
63
63
64 ##### `RPI_MODEL`=2
64 ##### `RPI_MODEL`=2
65 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
65 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
66 - `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
66 - `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
67 - `1` = Used for Pi 1 model A and B
67 - `1` = Used for Pi 1 model A and B
68 - `1P` = Used for Pi 1 model B+ and A+
68 - `1P` = Used for Pi 1 model B+ and A+
69 - `2` = Used for Pi 2 model B
69 - `2` = Used for Pi 2 model B
70 - `3` = Used for Pi 3 model B
70 - `3` = Used for Pi 3 model B
71 - `3P` = Used for Pi 3 model B+
71 - `3P` = Used for Pi 3 model B+
72 - `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
72 - `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
73
73
74 ##### `RELEASE`="buster"
74 ##### `RELEASE`="buster"
75 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
75 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
76
76
77 ##### `RELEASE_ARCH`="armhf"
77 ##### `RELEASE_ARCH`="armhf"
78 Set the desired Debian release architecture.
78 Set the desired Debian release architecture.
79
79
80 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
80 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
81 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
81 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
82
82
83 ##### `PASSWORD`="raspberry"
83 ##### `PASSWORD`="raspberry"
84 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
84 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
85
85
86 ##### `USER_PASSWORD`="raspberry"
86 ##### `USER_PASSWORD`="raspberry"
87 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.
87 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
88
89 ##### `DEFLOCAL`="en_US.UTF-8"
89 ##### `DEFLOCAL`="en_US.UTF-8"
90 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`.
90 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
91
92 ##### `TIMEZONE`="Europe/Berlin"
92 ##### `TIMEZONE`="Europe/Berlin"
93 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.
93 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
94
95 ##### `EXPANDROOT`=true
95 ##### `EXPANDROOT`=true
96 Expand the root partition and filesystem automatically on first boot.
96 Expand the root partition and filesystem automatically on first boot.
97
97
98 ##### `ENABLE_QEMU`=false
98 ##### `ENABLE_QEMU`=false
99 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.
99 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.
100
100
101 ---
101 ---
102
102
103 #### Keyboard settings:
103 #### Keyboard settings:
104 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.
104 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.
105
105
106 ##### `XKB_MODEL`=""
106 ##### `XKB_MODEL`=""
107 Set the name of the model of your keyboard type.
107 Set the name of the model of your keyboard type.
108
108
109 ##### `XKB_LAYOUT`=""
109 ##### `XKB_LAYOUT`=""
110 Set the supported keyboard layout(s).
110 Set the supported keyboard layout(s).
111
111
112 ##### `XKB_VARIANT`=""
112 ##### `XKB_VARIANT`=""
113 Set the supported variant(s) of the keyboard layout(s).
113 Set the supported variant(s) of the keyboard layout(s).
114
114
115 ##### `XKB_OPTIONS`=""
115 ##### `XKB_OPTIONS`=""
116 Set extra xkb configuration options.
116 Set extra xkb configuration options.
117
117
118 ---
118 ---
119
119
120 #### Networking settings (DHCP):
120 #### Networking settings (DHCP):
121 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`.`
121 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`.`
122
122
123 ##### `ENABLE_DHCP`=true
123 ##### `ENABLE_DHCP`=true
124 Set the system to use DHCP. This requires an DHCP server.
124 Set the system to use DHCP. This requires an DHCP server.
125
125
126 ---
126 ---
127
127
128 #### Networking settings (static):
128 #### Networking settings (static):
129 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`.
129 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`.
130
130
131 ##### `NET_ADDRESS`=""
131 ##### `NET_ADDRESS`=""
132 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
132 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
133
133
134 ##### `NET_GATEWAY`=""
134 ##### `NET_GATEWAY`=""
135 Set the IP address for the default gateway.
135 Set the IP address for the default gateway.
136
136
137 ##### `NET_DNS_1`=""
137 ##### `NET_DNS_1`=""
138 Set the IP address for the first DNS server.
138 Set the IP address for the first DNS server.
139
139
140 ##### `NET_DNS_2`=""
140 ##### `NET_DNS_2`=""
141 Set the IP address for the second DNS server.
141 Set the IP address for the second DNS server.
142
142
143 ##### `NET_DNS_DOMAINS`=""
143 ##### `NET_DNS_DOMAINS`=""
144 Set the default DNS search domains to use for non fully qualified host names.
144 Set the default DNS search domains to use for non fully qualified host names.
145
145
146 ##### `NET_NTP_1`=""
146 ##### `NET_NTP_1`=""
147 Set the IP address for the first NTP server.
147 Set the IP address for the first NTP server.
148
148
149 ##### `NET_NTP_2`=""
149 ##### `NET_NTP_2`=""
150 Set the IP address for the second NTP server.
150 Set the IP address for the second NTP server.
151
151
152 ---
152 ---
153
153
154 #### Basic system features:
154 #### Basic system features:
155 ##### `ENABLE_CONSOLE`=true
155 ##### `ENABLE_CONSOLE`=true
156 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.
156 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.
157
157
158 ##### `ENABLE_PRINTK`=false
158 ##### `ENABLE_PRINTK`=false
159 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
159 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
160
160
161 ##### `ENABLE_BLUETOOTH`=false
161 ##### `ENABLE_BLUETOOTH`=false
162 Enable onboard Bluetooth interface on the RPi0/3/3P. See: https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/
162 Enable onboard Bluetooth interface on the RPi0/3/3P. See: https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/
163
163
164 ##### `ENABLE_MINIUART_OVERLAY`=false
164 ##### `ENABLE_MINIUART_OVERLAY`=false
165 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.
165 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.
166
166
167 ##### `ENABLE_TURBO`=false
167 ##### `ENABLE_TURBO`=false
168 Enable Turbo mode. This setting locks cpu at 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.
168 VOIDS WARRANTY! Enable Turbo mode - NO overclocking. This setting locks cpu at 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.
169
169
170 ##### `ENABLE_I2C`=false
170 ##### `ENABLE_I2C`=false
171 Enable I2C interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
171 Enable I2C interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
172
172
173 ##### `ENABLE_SPI`=false
173 ##### `ENABLE_SPI`=false
174 Enable SPI interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
174 Enable SPI interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
175
175
176 ##### `ENABLE_IPV6`=true
176 ##### `ENABLE_IPV6`=true
177 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
177 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
178
178
179 ##### `ENABLE_SSHD`=true
179 ##### `ENABLE_SSHD`=true
180 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.
180 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.
181
181
182 ##### `ENABLE_NONFREE`=false
182 ##### `ENABLE_NONFREE`=false
183 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.
183 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.
184
184
185 ##### `ENABLE_WIRELESS`=false
185 ##### `ENABLE_WIRELESS`=false
186 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`.
186 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`.
187
187
188 ##### `ENABLE_RSYSLOG`=true
188 ##### `ENABLE_RSYSLOG`=true
189 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
189 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
190
190
191 ##### `ENABLE_SOUND`=true
191 ##### `ENABLE_SOUND`=true
192 Enable sound hardware and install Advanced Linux Sound Architecture.
192 Enable sound hardware and install Advanced Linux Sound Architecture.
193
193
194 ##### `ENABLE_HWRANDOM`=true
194 ##### `ENABLE_HWRANDOM`=true
195 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
195 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
196
196
197 ##### `ENABLE_MINGPU`=false
197 ##### `ENABLE_MINGPU`=false
198 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
198 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
199
199
200 ##### `ENABLE_DBUS`=true
200 ##### `ENABLE_DBUS`=true
201 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
201 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
202
202
203 ##### `ENABLE_XORG`=false
203 ##### `ENABLE_XORG`=false
204 Install Xorg open-source X Window System.
204 Install Xorg open-source X Window System.
205
205
206 ##### `ENABLE_WM`=""
206 ##### `ENABLE_WM`=""
207 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`.
207 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`.
208
208
209 ##### `ENABLE_SYSVINIT`=false
209 ##### `ENABLE_SYSVINIT`=false
210 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
210 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
211
211
212 ---
212 ---
213
213
214 #### Advanced system features:
214 #### Advanced system features:
215 ##### `ENABLE_MINBASE`=false
215 ##### `ENABLE_MINBASE`=false
216 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
216 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
217
217
218 ##### `ENABLE_REDUCE`=false
218 ##### `ENABLE_REDUCE`=false
219 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
219 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
220
220
221 ##### `ENABLE_UBOOT`=false
221 ##### `ENABLE_UBOOT`=false
222 Replace the default RPi2/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.
222 Replace the default RPi2/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.
223
223
224 ##### `UBOOTSRC_DIR`=""
224 ##### `UBOOTSRC_DIR`=""
225 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.
225 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.
226
226
227 ##### `ENABLE_FBTURBO`=false
227 ##### `ENABLE_FBTURBO`=false
228 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.
228 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.
229
229
230 ##### `FBTURBOSRC_DIR`=""
230 ##### `FBTURBOSRC_DIR`=""
231 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.
231 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.
232
232
233 ##### `ENABLE_VIDEOCORE`=false
233 ##### `ENABLE_VIDEOCORE`=false
234 Install and enable the [Source code for 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.
234 Install and enable the [Source code for 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.
235
235
236 ##### `VIDEOCORESRC_DIR`=""
236 ##### `VIDEOCORESRC_DIR`=""
237 Path to a directory (`userland`) of [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) that will be copied, configured, build and installed inside the chroot.
237 Path to a directory (`userland`) of [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) that will be copied, configured, build and installed inside the chroot.
238
238
239 ##### `ENABLE_NEXMON`=false
239 ##### `ENABLE_NEXMON`=false
240 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).
240 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).
241
241
242 ##### `NEXMON_DIR`=""
242 ##### `NEXMON_DIR`=""
243 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.
243 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.
244
244
245 ##### `ENABLE_IPTABLES`=false
245 ##### `ENABLE_IPTABLES`=false
246 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
246 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
247
247
248 ##### `ENABLE_USER`=true
248 ##### `ENABLE_USER`=true
249 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
249 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
250
250
251 ##### `USER_NAME`=pi
251 ##### `USER_NAME`=pi
252 Non-root user to create. Ignored if `ENABLE_USER`=false
252 Non-root user to create. Ignored if `ENABLE_USER`=false
253
253
254 ##### `ENABLE_ROOT`=false
254 ##### `ENABLE_ROOT`=false
255 Set root user password so root login will be enabled
255 Set root user password so root login will be enabled
256
256
257 ##### `ENABLE_HARDNET`=false
257 ##### `ENABLE_HARDNET`=false
258 Enable IPv4/IPv6 network stack hardening settings.
258 Enable IPv4/IPv6 network stack hardening settings.
259
259
260 ##### `ENABLE_SPLITFS`=false
260 ##### `ENABLE_SPLITFS`=false
261 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
261 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
262
262
263 ##### `CHROOT_SCRIPTS`=""
263 ##### `CHROOT_SCRIPTS`=""
264 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.
264 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.
265
265
266 ##### `ENABLE_INITRAMFS`=false
266 ##### `ENABLE_INITRAMFS`=false
267 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.
267 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.
268
268
269 ##### `ENABLE_IFNAMES`=true
269 ##### `ENABLE_IFNAMES`=true
270 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
270 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
271
271
272 ##### `DISABLE_UNDERVOLT_WARNINGS`=
272 ##### `DISABLE_UNDERVOLT_WARNINGS`=
273 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.
273 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.
274
274
275 ---
275 ---
276
276
277 #### SSH settings:
277 #### SSH settings:
278 ##### `SSH_ENABLE_ROOT`=false
278 ##### `SSH_ENABLE_ROOT`=false
279 Enable password root login via SSH. This may be a security risk with default password, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
279 Enable password root login via SSH. This may be a security risk with default password, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
280
280
281 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
281 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
282 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
282 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
283
283
284 ##### `SSH_LIMIT_USERS`=false
284 ##### `SSH_LIMIT_USERS`=false
285 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).
285 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).
286
286
287 ##### `SSH_ROOT_PUB_KEY`=""
287 ##### `SSH_ROOT_PUB_KEY`=""
288 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`.
288 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`.
289
289
290 ##### `SSH_USER_PUB_KEY`=""
290 ##### `SSH_USER_PUB_KEY`=""
291 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.
291 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.
292
292
293 ---
293 ---
294
294
295 #### Kernel compilation:
295 #### Kernel compilation:
296 ##### `BUILD_KERNEL`=true
296 ##### `BUILD_KERNEL`=true
297 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used.
297 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used.
298
298
299 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
299 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
300 This sets the cross compile enviornment for the compiler.
300 This sets the cross compile enviornment for the compiler.
301
301
302 ##### `KERNEL_ARCH`="arm"
302 ##### `KERNEL_ARCH`="arm"
303 This sets the kernel architecture for the compiler.
303 This sets the kernel architecture for the compiler.
304
304
305 ##### `KERNEL_IMAGE`="kernel7.img"
305 ##### `KERNEL_IMAGE`="kernel7.img"
306 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.
306 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.
307
307
308 ##### `KERNEL_BRANCH`=""
308 ##### `KERNEL_BRANCH`=""
309 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
309 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
310
310
311 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
311 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
312 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.
312 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.
313
313
314 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
314 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
315 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
315 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
316
316
317 ##### `KERNEL_REDUCE`=false
317 ##### `KERNEL_REDUCE`=false
318 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
318 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
319
319
320 ##### `KERNEL_THREADS`=1
320 ##### `KERNEL_THREADS`=1
321 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.
321 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.
322
322
323 ##### `KERNEL_HEADERS`=true
323 ##### `KERNEL_HEADERS`=true
324 Install kernel headers with built kernel.
324 Install kernel headers with built kernel.
325
325
326 ##### `KERNEL_MENUCONFIG`=false
326 ##### `KERNEL_MENUCONFIG`=false
327 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
327 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
328
328
329 ##### `KERNEL_OLDDEFCONFIG`=false
329 ##### `KERNEL_OLDDEFCONFIG`=false
330 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
330 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
331
331
332 ##### `KERNEL_CCACHE`=false
332 ##### `KERNEL_CCACHE`=false
333 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
333 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
334
334
335 ##### `KERNEL_REMOVESRC`=true
335 ##### `KERNEL_REMOVESRC`=true
336 Remove all kernel sources from the generated OS image after it was built and installed.
336 Remove all kernel sources from the generated OS image after it was built and installed.
337
337
338 ##### `KERNELSRC_DIR`=""
338 ##### `KERNELSRC_DIR`=""
339 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.
339 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.
340
340
341 ##### `KERNELSRC_CLEAN`=false
341 ##### `KERNELSRC_CLEAN`=false
342 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.
342 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.
343
343
344 ##### `KERNELSRC_CONFIG`=true
344 ##### `KERNELSRC_CONFIG`=true
345 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.
345 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.
346
346
347 ##### `KERNELSRC_USRCONFIG`=""
347 ##### `KERNELSRC_USRCONFIG`=""
348 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
348 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
349
349
350 ##### `KERNELSRC_PREBUILT`=false
350 ##### `KERNELSRC_PREBUILT`=false
351 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.
351 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.
352
352
353 ##### `RPI_FIRMWARE_DIR`=""
353 ##### `RPI_FIRMWARE_DIR`=""
354 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.
354 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.
355
355
356 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
356 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
357 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
357 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
358
358
359 ##### `KERNEL_NF`=false
359 ##### `KERNEL_NF`=false
360 Enable Netfilter modules as kernel modules
360 Enable Netfilter modules as kernel modules
361
361
362 ##### `KERNEL_VIRT`=false
362 ##### `KERNEL_VIRT`=false
363 Enable Kernel KVM support (/dev/kvm)
363 Enable Kernel KVM support (/dev/kvm)
364
364
365 ##### `KERNEL_ZSWAP`=false
365 ##### `KERNEL_ZSWAP`=false
366 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
366 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
367
367
368 ##### `KERNEL_BPF`=true
368 ##### `KERNEL_BPF`=true
369 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]
369 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]
370
370
371 ---
371 ---
372
372
373 #### Reduce disk usage:
373 #### Reduce disk usage:
374 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
374 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
375
375
376 ##### `REDUCE_APT`=true
376 ##### `REDUCE_APT`=true
377 Configure APT to use compressed package repository lists and no package caching files.
377 Configure APT to use compressed package repository lists and no package caching files.
378
378
379 ##### `REDUCE_DOC`=true
379 ##### `REDUCE_DOC`=true
380 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
380 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
381
381
382 ##### `REDUCE_MAN`=true
382 ##### `REDUCE_MAN`=true
383 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
383 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
384
384
385 ##### `REDUCE_VIM`=false
385 ##### `REDUCE_VIM`=false
386 Replace `vim-tiny` package by `levee` a tiny vim clone.
386 Replace `vim-tiny` package by `levee` a tiny vim clone.
387
387
388 ##### `REDUCE_BASH`=false
388 ##### `REDUCE_BASH`=false
389 Remove `bash` package and switch to `dash` shell (experimental).
389 Remove `bash` package and switch to `dash` shell (experimental).
390
390
391 ##### `REDUCE_HWDB`=true
391 ##### `REDUCE_HWDB`=true
392 Remove PCI related hwdb files (experimental).
392 Remove PCI related hwdb files (experimental).
393
393
394 ##### `REDUCE_SSHD`=true
394 ##### `REDUCE_SSHD`=true
395 Replace `openssh-server` with `dropbear`.
395 Replace `openssh-server` with `dropbear`.
396
396
397 ##### `REDUCE_LOCALE`=true
397 ##### `REDUCE_LOCALE`=true
398 Remove all `locale` translation files.
398 Remove all `locale` translation files.
399
399
400 ---
400 ---
401
401
402 #### Encrypted root partition:
402 #### Encrypted root partition:
403 ##### `ENABLE_CRYPTFS`=false
403 ##### `ENABLE_CRYPTFS`=false
404 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.
404 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.
405
405
406 ##### `CRYPTFS_PASSWORD`=""
406 ##### `CRYPTFS_PASSWORD`=""
407 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
407 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
408
408
409 ##### `CRYPTFS_MAPPING`="secure"
409 ##### `CRYPTFS_MAPPING`="secure"
410 Set name of dm-crypt managed device-mapper mapping.
410 Set name of dm-crypt managed device-mapper mapping.
411
411
412 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
412 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
413 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
413 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
414
414
415 ##### `CRYPTFS_XTSKEYSIZE`=512
415 ##### `CRYPTFS_XTSKEYSIZE`=512
416 Sets key size in bits. The argument has to be a multiple of 8.
416 Sets key size in bits. The argument has to be a multiple of 8.
417
417
418 ##### `CRYPTFS_DROPBEAR`=false
418 ##### `CRYPTFS_DROPBEAR`=false
419 Enable Dropbear Initramfs support
419 Enable Dropbear Initramfs support
420
420
421 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
421 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
422 Provide path to dropbear Public RSA-OpenSSH Key
422 Provide path to dropbear Public RSA-OpenSSH Key
423
423
424 ---
424 ---
425
425
426 #### Build settings:
426 #### Build settings:
427 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
427 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
428 Set a path to a working directory used by the script to generate an image.
428 Set a path to a working directory used by the script to generate an image.
429
429
430 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
430 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
431 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.
431 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.
432
432
433 ## Understanding the script
433 ## Understanding the script
434 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:
434 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:
435
435
436 | Script | Description |
436 | Script | Description |
437 | --- | --- |
437 | --- | --- |
438 | `10-bootstrap.sh` | Debootstrap basic system |
438 | `10-bootstrap.sh` | Debootstrap basic system |
439 | `11-apt.sh` | Setup APT repositories |
439 | `11-apt.sh` | Setup APT repositories |
440 | `12-locale.sh` | Setup Locales and keyboard settings |
440 | `12-locale.sh` | Setup Locales and keyboard settings |
441 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
441 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
442 | `14-fstab.sh` | Setup fstab and initramfs |
442 | `14-fstab.sh` | Setup fstab and initramfs |
443 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
443 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
444 | `20-networking.sh` | Setup Networking |
444 | `20-networking.sh` | Setup Networking |
445 | `21-firewall.sh` | Setup Firewall |
445 | `21-firewall.sh` | Setup Firewall |
446 | `30-security.sh` | Setup Users and Security settings |
446 | `30-security.sh` | Setup Users and Security settings |
447 | `31-logging.sh` | Setup Logging |
447 | `31-logging.sh` | Setup Logging |
448 | `32-sshd.sh` | Setup SSH and public keys |
448 | `32-sshd.sh` | Setup SSH and public keys |
449 | `41-uboot.sh` | Build and Setup U-Boot |
449 | `41-uboot.sh` | Build and Setup U-Boot |
450 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
450 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
451 | `50-firstboot.sh` | First boot actions |
451 | `50-firstboot.sh` | First boot actions |
452 | `99-reduce.sh` | Reduce the disk space usage |
452 | `99-reduce.sh` | Reduce the disk space usage |
453
453
454 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.
454 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.
455
455
456 | Directory | Description |
456 | Directory | Description |
457 | --- | --- |
457 | --- | --- |
458 | `apt` | APT management configuration files |
458 | `apt` | APT management configuration files |
459 | `boot` | Boot and RPi2/3 configuration files |
459 | `boot` | Boot and RPi2/3 configuration files |
460 | `dpkg` | Package Manager configuration |
460 | `dpkg` | Package Manager configuration |
461 | `etc` | Configuration files and rc scripts |
461 | `etc` | Configuration files and rc scripts |
462 | `firstboot` | Scripts that get executed on first boot |
462 | `firstboot` | Scripts that get executed on first boot |
463 | `initramfs` | Initramfs scripts |
463 | `initramfs` | Initramfs scripts |
464 | `iptables` | Firewall configuration files |
464 | `iptables` | Firewall configuration files |
465 | `locales` | Locales configuration |
465 | `locales` | Locales configuration |
466 | `modules` | Kernel Modules configuration |
466 | `modules` | Kernel Modules configuration |
467 | `mount` | Fstab configuration |
467 | `mount` | Fstab configuration |
468 | `network` | Networking configuration files |
468 | `network` | Networking configuration files |
469 | `sysctl.d` | Swapping and Network Hardening configuration |
469 | `sysctl.d` | Swapping and Network Hardening configuration |
470 | `xorg` | fbturbo Xorg driver configuration |
470 | `xorg` | fbturbo Xorg driver configuration |
471
471
472 ## Custom packages and scripts
472 ## Custom packages and scripts
473 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`.
473 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`.
474
474
475 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
475 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
476
476
477 ## Logging of the bootstrapping process
477 ## Logging of the bootstrapping process
478 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:
478 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:
479
479
480 ```shell
480 ```shell
481 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
481 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
482 ```
482 ```
483
483
484 ## Flashing the image file
484 ## Flashing the image file
485 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 RPi2/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`.
485 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 RPi2/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`.
486
486
487 ##### Flashing examples:
487 ##### Flashing examples:
488 ```shell
488 ```shell
489 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
489 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
490 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
490 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
491 ```
491 ```
492 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
492 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
493 ```shell
493 ```shell
494 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
494 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
495 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
495 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
496 ```
496 ```
497
497
498 ## QEMU emulation
498 ## QEMU emulation
499 Start QEMU full system emulation:
499 Start QEMU full system emulation:
500 ```shell
500 ```shell
501 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"
501 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"
502 ```
502 ```
503
503
504 Start QEMU full system emulation and output to console:
504 Start QEMU full system emulation and output to console:
505 ```shell
505 ```shell
506 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
506 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
507 ```
507 ```
508
508
509 Start QEMU full system emulation with SMP and output to console:
509 Start QEMU full system emulation with SMP and output to console:
510 ```shell
510 ```shell
511 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
511 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
512 ```
512 ```
513
513
514 Start QEMU full system emulation with cryptfs, initramfs and output to console:
514 Start QEMU full system emulation with cryptfs, initramfs and output to console:
515 ```shell
515 ```shell
516 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
516 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
517 ```
517 ```
518
518
519 ## External links and references
519 ## External links and references
520 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
520 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
521 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
521 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
522 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
522 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
523 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
523 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
524 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
524 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
525 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
525 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
526 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
526 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
527 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
527 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
528 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
528 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,447 +1,448
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 # Fetch and build latest raspberry kernel
8 # Fetch and build latest raspberry kernel
9 if [ "$BUILD_KERNEL" = true ] ; then
9 if [ "$BUILD_KERNEL" = true ] ; then
10 # Setup source directory
10 # Setup source directory
11 mkdir -p "${KERNEL_DIR}"
11 mkdir -p "${KERNEL_DIR}"
12
12
13 # Copy existing kernel sources into chroot directory
13 # Copy existing kernel sources into chroot directory
14 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
14 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
15 # Copy kernel sources and include hidden files
15 # Copy kernel sources and include hidden files
16 cp -r "${KERNELSRC_DIR}/". "${KERNEL_DIR}"
16 cp -r "${KERNELSRC_DIR}/". "${KERNEL_DIR}"
17
17
18 # Clean the kernel sources
18 # Clean the kernel sources
19 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
19 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
20 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
20 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
21 fi
21 fi
22 else # KERNELSRC_DIR=""
22 else # KERNELSRC_DIR=""
23 # Create temporary directory for kernel sources
23 # Create temporary directory for kernel sources
24 temp_dir=$(as_nobody mktemp -d)
24 temp_dir=$(as_nobody mktemp -d)
25
25
26 # Fetch current RPi2/3 kernel sources
26 # Fetch current RPi2/3 kernel sources
27 if [ -z "${KERNEL_BRANCH}" ] ; then
27 if [ -z "${KERNEL_BRANCH}" ] ; then
28 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
28 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
29 else
29 else
30 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
30 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
31 fi
31 fi
32
32
33 # Copy downloaded kernel sources
33 # Copy downloaded kernel sources
34 cp -r "${temp_dir}/linux/"* "${KERNEL_DIR}"
34 cp -r "${temp_dir}/linux/"* "${KERNEL_DIR}"
35
35
36 # Remove temporary directory for kernel sources
36 # Remove temporary directory for kernel sources
37 rm -fr "${temp_dir}"
37 rm -fr "${temp_dir}"
38
38
39 # Set permissions of the kernel sources
39 # Set permissions of the kernel sources
40 chown -R root:root "${R}/usr/src"
40 chown -R root:root "${R}/usr/src"
41 fi
41 fi
42
42
43 # Calculate optimal number of kernel building threads
43 # Calculate optimal number of kernel building threads
44 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
44 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
45 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
45 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
46 fi
46 fi
47
47
48 # Configure and build kernel
48 # Configure and build kernel
49 if [ "$KERNELSRC_PREBUILT" = false ] ; then
49 if [ "$KERNELSRC_PREBUILT" = false ] ; then
50 # Remove device, network and filesystem drivers from kernel configuration
50 # Remove device, network and filesystem drivers from kernel configuration
51 if [ "$KERNEL_REDUCE" = true ] ; then
51 if [ "$KERNEL_REDUCE" = true ] ; then
52 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
52 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
53 sed -i\
53 sed -i\
54 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
54 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
55 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
55 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
56 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
56 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
57 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
57 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
58 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
58 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
59 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
59 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
60 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
60 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
61 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
61 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
62 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
62 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
63 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
63 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
64 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
64 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
65 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
65 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
66 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
66 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
67 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
67 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
68 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
68 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
69 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
69 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
70 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
70 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
71 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
71 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
72 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
72 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
73 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
73 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
74 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
74 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
75 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
75 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
76 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
76 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
77 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
77 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
78 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
78 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
79 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
79 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
80 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
80 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
81 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
81 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
82 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
82 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
83 "${KERNEL_DIR}/.config"
83 "${KERNEL_DIR}/.config"
84 fi
84 fi
85
85
86 if [ "$KERNELSRC_CONFIG" = true ] ; then
86 if [ "$KERNELSRC_CONFIG" = true ] ; then
87 # Load default raspberry kernel configuration
87 # Load default raspberry kernel configuration
88 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
88 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
89
89
90 #Switch to KERNELSRC_DIR so we can use set_kernel_config
90 #Switch to KERNELSRC_DIR so we can use set_kernel_config
91 cd "${KERNEL_DIR}" || exit
91 cd "${KERNEL_DIR}" || exit
92
92
93 # enable ZSWAP see https://askubuntu.com/a/472227 or https://wiki.archlinux.org/index.php/zswap
93 # enable ZSWAP see https://askubuntu.com/a/472227 or https://wiki.archlinux.org/index.php/zswap
94 if [ "$KERNEL_ZSWAP" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
94 if [ "$KERNEL_ZSWAP" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
95 set_kernel_config CONFIG_ZPOOL y
95 set_kernel_config CONFIG_ZPOOL y
96 set_kernel_config CONFIG_ZSWAP y
96 set_kernel_config CONFIG_ZSWAP y
97 set_kernel_config CONFIG_ZBUD y
97 set_kernel_config CONFIG_ZBUD y
98 set_kernel_config CONFIG_Z3FOLD y
98 set_kernel_config CONFIG_Z3FOLD y
99 set_kernel_config CONFIG_ZSMALLOC y
99 set_kernel_config CONFIG_ZSMALLOC y
100 set_kernel_config CONFIG_PGTABLE_MAPPING y
100 set_kernel_config CONFIG_PGTABLE_MAPPING y
101 fi
101 fi
102
102
103 # enable basic KVM support; see https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=210546&start=25#p1300453
103 # enable basic KVM support; see https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=210546&start=25#p1300453
104 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
104 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
105 set_kernel_config CONFIG_VIRTUALIZATION y
105 set_kernel_config CONFIG_VIRTUALIZATION y
106 set_kernel_config CONFIG_KVM y
106 set_kernel_config CONFIG_KVM y
107 set_kernel_config CONFIG_VHOST_NET m
107 set_kernel_config CONFIG_VHOST_NET m
108 set_kernel_config CONFIG_VHOST_CROSS_ENDIAN_LEGACY y
108 set_kernel_config CONFIG_VHOST_CROSS_ENDIAN_LEGACY y
109 fi
109 fi
110
110
111 # Netfilter kernel support See https://github.com/raspberrypi/linux/issues/2177#issuecomment-354647406
111 # Netfilter kernel support See https://github.com/raspberrypi/linux/issues/2177#issuecomment-354647406
112 if [ "$KERNEL_NF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
112 if [ "$KERNEL_NF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
113 set_kernel_config CONFIG_IP_NF_TARGET_SYNPROXY m
113 set_kernel_config CONFIG_IP_NF_TARGET_SYNPROXY m
114 set_kernel_config CONFIG_NETFILTER_XT_MATCH_CGROUP m
114 set_kernel_config CONFIG_NETFILTER_XT_MATCH_CGROUP m
115 set_kernel_config CONFIG_NETFILTER_XT_MATCH_IPCOMP m
115 set_kernel_config CONFIG_NETFILTER_XT_MATCH_IPCOMP m
116 set_kernel_config CONFIG_NETFILTER_XT_MATCH_SOCKET m
116 set_kernel_config CONFIG_NFT_FIB_INET m
117 set_kernel_config CONFIG_NFT_FIB_INET m
117 set_kernel_config CONFIG_NFT_FIB_IPV4 m
118 set_kernel_config CONFIG_NFT_FIB_IPV4 m
118 set_kernel_config CONFIG_NFT_FIB_IPV6 m
119 set_kernel_config CONFIG_NFT_FIB_IPV6 m
119 set_kernel_config CONFIG_NFT_FIB_NETDEV m
120 set_kernel_config CONFIG_NFT_FIB_NETDEV m
120 set_kernel_config CONFIG_NFT_OBJREF m
121 set_kernel_config CONFIG_NFT_OBJREF m
121 set_kernel_config CONFIG_NFT_RT m
122 set_kernel_config CONFIG_NFT_RT m
122 set_kernel_config CONFIG_NFT_SET_BITMAP m
123 set_kernel_config CONFIG_NFT_SET_BITMAP m
123 set_kernel_config CONFIG_NF_CONNTRACK_TIMEOUT m
124 set_kernel_config CONFIG_NF_CONNTRACK_TIMEOUT y
124 set_kernel_config CONFIG_NF_LOG_ARP m
125 set_kernel_config CONFIG_NF_LOG_ARP m
125 set_kernel_config CONFIG_NF_SOCKET_IPV4 m
126 set_kernel_config CONFIG_NF_SOCKET_IPV4 m
126 set_kernel_config CONFIG_NF_SOCKET_IPV6 m
127 set_kernel_config CONFIG_NF_SOCKET_IPV6 m
127 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
128 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
128 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
129 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
129 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
130 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
130 set_kernel_config CONFIG_IP6_NF_IPTABLES m
131 set_kernel_config CONFIG_IP6_NF_IPTABLES m
131 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
132 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
132 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
133 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
133 set_kernel_config CONFIG_IP6_NF_NAT m
134 set_kernel_config CONFIG_IP6_NF_NAT m
134 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
135 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
135 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
136 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
136 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
137 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
137 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
138 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
138 set_kernel_config CONFIG_IP_SET_HASH_IP m
139 set_kernel_config CONFIG_IP_SET_HASH_IP m
139 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
140 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
140 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
141 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
141 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
142 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
142 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
143 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
143 set_kernel_config CONFIG_IP_SET_HASH_MAC m
144 set_kernel_config CONFIG_IP_SET_HASH_MAC m
144 set_kernel_config CONFIG_IP_SET_HASH_NET m
145 set_kernel_config CONFIG_IP_SET_HASH_NET m
145 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
146 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
146 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
147 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
147 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
148 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
148 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
149 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
149 set_kernel_config CONFIG_IP_SET_LIST_SET m
150 set_kernel_config CONFIG_IP_SET_LIST_SET m
150 set_kernel_config CONFIG_NETFILTER_XTABLES m
151 set_kernel_config CONFIG_NETFILTER_XTABLES m
151 set_kernel_config CONFIG_NETFILTER_XTABLES m
152 set_kernel_config CONFIG_NETFILTER_XTABLES m
152 set_kernel_config CONFIG_NFT_BRIDGE_META m
153 set_kernel_config CONFIG_NFT_BRIDGE_META m
153 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
154 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
154 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
155 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
155 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
156 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
156 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
157 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
157 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
158 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
158 set_kernel_config CONFIG_NFT_COMPAT m
159 set_kernel_config CONFIG_NFT_COMPAT m
159 set_kernel_config CONFIG_NFT_COUNTER m
160 set_kernel_config CONFIG_NFT_COUNTER m
160 set_kernel_config CONFIG_NFT_CT m
161 set_kernel_config CONFIG_NFT_CT m
161 set_kernel_config CONFIG_NFT_DUP_IPV4 m
162 set_kernel_config CONFIG_NFT_DUP_IPV4 m
162 set_kernel_config CONFIG_NFT_DUP_IPV6 m
163 set_kernel_config CONFIG_NFT_DUP_IPV6 m
163 set_kernel_config CONFIG_NFT_DUP_NETDEV m
164 set_kernel_config CONFIG_NFT_DUP_NETDEV m
164 set_kernel_config CONFIG_NFT_EXTHDR m
165 set_kernel_config CONFIG_NFT_EXTHDR m
165 set_kernel_config CONFIG_NFT_FWD_NETDEV m
166 set_kernel_config CONFIG_NFT_FWD_NETDEV m
166 set_kernel_config CONFIG_NFT_HASH m
167 set_kernel_config CONFIG_NFT_HASH m
167 set_kernel_config CONFIG_NFT_LIMIT m
168 set_kernel_config CONFIG_NFT_LIMIT m
168 set_kernel_config CONFIG_NFT_LOG m
169 set_kernel_config CONFIG_NFT_LOG m
169 set_kernel_config CONFIG_NFT_MASQ m
170 set_kernel_config CONFIG_NFT_MASQ m
170 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
171 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
171 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
172 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
172 set_kernel_config CONFIG_NFT_META m
173 set_kernel_config CONFIG_NFT_META m
173 set_kernel_config CONFIG_NFT_NAT m
174 set_kernel_config CONFIG_NFT_NAT m
174 set_kernel_config CONFIG_NFT_NUMGEN m
175 set_kernel_config CONFIG_NFT_NUMGEN m
175 set_kernel_config CONFIG_NFT_QUEUE m
176 set_kernel_config CONFIG_NFT_QUEUE m
176 set_kernel_config CONFIG_NFT_QUOTA m
177 set_kernel_config CONFIG_NFT_QUOTA m
177 set_kernel_config CONFIG_NFT_REDIR m
178 set_kernel_config CONFIG_NFT_REDIR m
178 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
179 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
179 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
180 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
180 set_kernel_config CONFIG_NFT_REJECT m
181 set_kernel_config CONFIG_NFT_REJECT m
181 set_kernel_config CONFIG_NFT_REJECT_INET m
182 set_kernel_config CONFIG_NFT_REJECT_INET m
182 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
183 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
183 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
184 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
184 set_kernel_config CONFIG_NFT_SET_HASH m
185 set_kernel_config CONFIG_NFT_SET_HASH m
185 set_kernel_config CONFIG_NFT_SET_RBTREE m
186 set_kernel_config CONFIG_NFT_SET_RBTREE m
186 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
187 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
187 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
188 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
188 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
189 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
189 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
190 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
190 set_kernel_config CONFIG_NF_DUP_IPV4 m
191 set_kernel_config CONFIG_NF_DUP_IPV4 m
191 set_kernel_config CONFIG_NF_DUP_IPV6 m
192 set_kernel_config CONFIG_NF_DUP_IPV6 m
192 set_kernel_config CONFIG_NF_DUP_NETDEV m
193 set_kernel_config CONFIG_NF_DUP_NETDEV m
193 set_kernel_config CONFIG_NF_LOG_BRIDGE m
194 set_kernel_config CONFIG_NF_LOG_BRIDGE m
194 set_kernel_config CONFIG_NF_LOG_IPV4 m
195 set_kernel_config CONFIG_NF_LOG_IPV4 m
195 set_kernel_config CONFIG_NF_LOG_IPV6 m
196 set_kernel_config CONFIG_NF_LOG_IPV6 m
196 set_kernel_config CONFIG_NF_NAT_IPV4 m
197 set_kernel_config CONFIG_NF_NAT_IPV4 m
197 set_kernel_config CONFIG_NF_NAT_IPV6 m
198 set_kernel_config CONFIG_NF_NAT_IPV6 m
198 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
199 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
199 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
200 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
200 set_kernel_config CONFIG_NF_NAT_PPTP m
201 set_kernel_config CONFIG_NF_NAT_PPTP m
201 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
202 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
202 set_kernel_config CONFIG_NF_NAT_REDIRECT m
203 set_kernel_config CONFIG_NF_NAT_REDIRECT m
203 set_kernel_config CONFIG_NF_NAT_SIP m
204 set_kernel_config CONFIG_NF_NAT_SIP m
204 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
205 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
205 set_kernel_config CONFIG_NF_NAT_TFTP m
206 set_kernel_config CONFIG_NF_NAT_TFTP m
206 set_kernel_config CONFIG_NF_REJECT_IPV4 m
207 set_kernel_config CONFIG_NF_REJECT_IPV4 m
207 set_kernel_config CONFIG_NF_REJECT_IPV6 m
208 set_kernel_config CONFIG_NF_REJECT_IPV6 m
208 set_kernel_config CONFIG_NF_TABLES m
209 set_kernel_config CONFIG_NF_TABLES m
209 set_kernel_config CONFIG_NF_TABLES_ARP m
210 set_kernel_config CONFIG_NF_TABLES_ARP m
210 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
211 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
211 set_kernel_config CONFIG_NF_TABLES_INET m
212 set_kernel_config CONFIG_NF_TABLES_INET m
212 set_kernel_config CONFIG_NF_TABLES_IPV4 m
213 set_kernel_config CONFIG_NF_TABLES_IPV4 m
213 set_kernel_config CONFIG_NF_TABLES_IPV6 m
214 set_kernel_config CONFIG_NF_TABLES_IPV6 m
214 set_kernel_config CONFIG_NF_TABLES_NETDEV m
215 set_kernel_config CONFIG_NF_TABLES_NETDEV m
215 fi
216 fi
216
217
217 # 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
218 # 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
218 if [ "$KERNEL_BPF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
219 if [ "$KERNEL_BPF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
219 set_kernel_config CONFIG_BPF_SYSCALL y
220 set_kernel_config CONFIG_BPF_SYSCALL y
220 set_kernel_config CONFIG_BPF_EVENTS y
221 set_kernel_config CONFIG_BPF_EVENTS y
221 set_kernel_config CONFIG_BPF_STREAM_PARSER y
222 set_kernel_config CONFIG_BPF_STREAM_PARSER y
222 set_kernel_config CONFIG_CGROUP_BPF y
223 set_kernel_config CONFIG_CGROUP_BPF y
223 fi
224 fi
224
225
225 # KERNEL_DEFAULT_GOV was set by user
226 # KERNEL_DEFAULT_GOV was set by user
226 if ! [ "$KERNEL_DEFAULT_GOV" = POWERSAVE ] && [ -n "$KERNEL_DEFAULT_GOV" ]; then
227 if ! [ "$KERNEL_DEFAULT_GOV" = POWERSAVE ] && [ -n "$KERNEL_DEFAULT_GOV" ]; then
227 # unset default governor
228 # unset default governor
228 unset_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
229 unset_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
229
230
230 case "$KERNEL_DEFAULT_GOV" in
231 case "$KERNEL_DEFAULT_GOV" in
231 "PERFORMANCE")
232 "PERFORMANCE")
232 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
233 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
233 ;;
234 ;;
234 "USERSPACE")
235 "USERSPACE")
235 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE y
236 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE y
236 ;;
237 ;;
237 "ONDEMAND")
238 "ONDEMAND")
238 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND y
239 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND y
239 ;;
240 ;;
240 "CONSERVATIVE")
241 "CONSERVATIVE")
241 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE y
242 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE y
242 ;;
243 ;;
243 "CONSERVATIVE")
244 "CONSERVATIVE")
244 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL y
245 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL y
245 ;;
246 ;;
246 *)
247 *)
247 echo "error: unsupported default cpu governor"
248 echo "error: unsupported default cpu governor"
248 exit 1
249 exit 1
249 ;;
250 ;;
250 esac
251 esac
251 fi
252 fi
252
253
253
254
254
255
255 #Revert to previous directory
256 #Revert to previous directory
256 cd "${WORKDIR}" || exit
257 cd "${WORKDIR}" || exit
257
258
258 # Set kernel configuration parameters to enable qemu emulation
259 # Set kernel configuration parameters to enable qemu emulation
259 if [ "$ENABLE_QEMU" = true ] ; then
260 if [ "$ENABLE_QEMU" = true ] ; then
260 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
261 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
261 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
262 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
262
263
263 if [ "$ENABLE_CRYPTFS" = true ] ; then
264 if [ "$ENABLE_CRYPTFS" = true ] ; then
264 {
265 {
265 echo "CONFIG_EMBEDDED=y"
266 echo "CONFIG_EMBEDDED=y"
266 echo "CONFIG_EXPERT=y"
267 echo "CONFIG_EXPERT=y"
267 echo "CONFIG_DAX=y"
268 echo "CONFIG_DAX=y"
268 echo "CONFIG_MD=y"
269 echo "CONFIG_MD=y"
269 echo "CONFIG_BLK_DEV_MD=y"
270 echo "CONFIG_BLK_DEV_MD=y"
270 echo "CONFIG_MD_AUTODETECT=y"
271 echo "CONFIG_MD_AUTODETECT=y"
271 echo "CONFIG_BLK_DEV_DM=y"
272 echo "CONFIG_BLK_DEV_DM=y"
272 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
273 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
273 echo "CONFIG_DM_CRYPT=y"
274 echo "CONFIG_DM_CRYPT=y"
274 echo "CONFIG_CRYPTO_BLKCIPHER=y"
275 echo "CONFIG_CRYPTO_BLKCIPHER=y"
275 echo "CONFIG_CRYPTO_CBC=y"
276 echo "CONFIG_CRYPTO_CBC=y"
276 echo "CONFIG_CRYPTO_XTS=y"
277 echo "CONFIG_CRYPTO_XTS=y"
277 echo "CONFIG_CRYPTO_SHA512=y"
278 echo "CONFIG_CRYPTO_SHA512=y"
278 echo "CONFIG_CRYPTO_MANAGER=y"
279 echo "CONFIG_CRYPTO_MANAGER=y"
279 } >> "${KERNEL_DIR}"/.config
280 } >> "${KERNEL_DIR}"/.config
280 fi
281 fi
281 fi
282 fi
282
283
283 # Copy custom kernel configuration file
284 # Copy custom kernel configuration file
284 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
285 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
285 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
286 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
286 fi
287 fi
287
288
288 # Set kernel configuration parameters to their default values
289 # Set kernel configuration parameters to their default values
289 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
290 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
290 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
291 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
291 fi
292 fi
292
293
293 # Start menu-driven kernel configuration (interactive)
294 # Start menu-driven kernel configuration (interactive)
294 if [ "$KERNEL_MENUCONFIG" = true ] ; then
295 if [ "$KERNEL_MENUCONFIG" = true ] ; then
295 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
296 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
296 fi
297 fi
297 # end if "$KERNELSRC_CONFIG" = true
298 # end if "$KERNELSRC_CONFIG" = true
298 fi
299 fi
299
300
300 # Use ccache to cross compile the kernel
301 # Use ccache to cross compile the kernel
301 if [ "$KERNEL_CCACHE" = true ] ; then
302 if [ "$KERNEL_CCACHE" = true ] ; then
302 cc="ccache ${CROSS_COMPILE}gcc"
303 cc="ccache ${CROSS_COMPILE}gcc"
303 else
304 else
304 cc="${CROSS_COMPILE}gcc"
305 cc="${CROSS_COMPILE}gcc"
305 fi
306 fi
306
307
307 # Cross compile kernel and dtbs
308 # Cross compile kernel and dtbs
308 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
309 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
309
310
310 # Cross compile kernel modules
311 # Cross compile kernel modules
311 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
312 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
312 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
313 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
313 fi
314 fi
314 # end if "$KERNELSRC_PREBUILT" = false
315 # end if "$KERNELSRC_PREBUILT" = false
315 fi
316 fi
316
317
317 # Check if kernel compilation was successful
318 # Check if kernel compilation was successful
318 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
319 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
319 echo "error: kernel compilation failed! (kernel image not found)"
320 echo "error: kernel compilation failed! (kernel image not found)"
320 cleanup
321 cleanup
321 exit 1
322 exit 1
322 fi
323 fi
323
324
324 # Install kernel modules
325 # Install kernel modules
325 if [ "$ENABLE_REDUCE" = true ] ; then
326 if [ "$ENABLE_REDUCE" = true ] ; then
326 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
327 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
327 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
328 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
328 fi
329 fi
329 else
330 else
330 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
331 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
331 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
332 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
332 fi
333 fi
333
334
334 # Install kernel firmware
335 # Install kernel firmware
335 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
336 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
336 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
337 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
337 fi
338 fi
338 fi
339 fi
339
340
340 # Install kernel headers
341 # Install kernel headers
341 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
342 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
342 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
343 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
343 fi
344 fi
344 # make tar.gz kernel package - missing os bzw. modules
345 # make tar.gz kernel package - missing os bzw. modules
345 #** ** ** WARNING ** ** **
346 #** ** ** WARNING ** ** **
346 #Your architecture did not define any architecture-dependent files
347 #Your architecture did not define any architecture-dependent files
347 #to be placed into the tarball. Please add those to ./scripts/package/buildtar .
348 #to be placed into the tarball. Please add those to ./scripts/package/buildtar .
348 # make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" targz-pkg
349 # make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" targz-pkg
349
350
350 # Prepare boot (firmware) directory
351 # Prepare boot (firmware) directory
351 mkdir "${BOOT_DIR}"
352 mkdir "${BOOT_DIR}"
352
353
353 # Get kernel release version
354 # Get kernel release version
354 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
355 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
355
356
356 # Copy kernel configuration file to the boot directory
357 # Copy kernel configuration file to the boot directory
357 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
358 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
358
359
359 # Prepare device tree directory
360 # Prepare device tree directory
360 mkdir "${BOOT_DIR}/overlays"
361 mkdir "${BOOT_DIR}/overlays"
361
362
362 # Ensure the proper .dtb is located
363 # Ensure the proper .dtb is located
363 if [ "$KERNEL_ARCH" = "arm" ] ; then
364 if [ "$KERNEL_ARCH" = "arm" ] ; then
364 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
365 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
365 if [ -f "${dtb}" ] ; then
366 if [ -f "${dtb}" ] ; then
366 install_readonly "${dtb}" "${BOOT_DIR}/"
367 install_readonly "${dtb}" "${BOOT_DIR}/"
367 fi
368 fi
368 done
369 done
369 else
370 else
370 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
371 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
371 if [ -f "${dtb}" ] ; then
372 if [ -f "${dtb}" ] ; then
372 install_readonly "${dtb}" "${BOOT_DIR}/"
373 install_readonly "${dtb}" "${BOOT_DIR}/"
373 fi
374 fi
374 done
375 done
375 fi
376 fi
376
377
377 # Copy compiled dtb device tree files
378 # Copy compiled dtb device tree files
378 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
379 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
379 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
380 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
380 if [ -f "${dtb}" ] ; then
381 if [ -f "${dtb}" ] ; then
381 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
382 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
382 fi
383 fi
383 done
384 done
384
385
385 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
386 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
386 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
387 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
387 fi
388 fi
388 fi
389 fi
389
390
390 if [ "$ENABLE_UBOOT" = false ] ; then
391 if [ "$ENABLE_UBOOT" = false ] ; then
391 # Convert and copy kernel image to the boot directory
392 # Convert and copy kernel image to the boot directory
392 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
393 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
393 else
394 else
394 # Copy kernel image to the boot directory
395 # Copy kernel image to the boot directory
395 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
396 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
396 fi
397 fi
397
398
398 # Remove kernel sources
399 # Remove kernel sources
399 if [ "$KERNEL_REMOVESRC" = true ] ; then
400 if [ "$KERNEL_REMOVESRC" = true ] ; then
400 rm -fr "${KERNEL_DIR}"
401 rm -fr "${KERNEL_DIR}"
401 else
402 else
402 # Prepare compiled kernel modules
403 # Prepare compiled kernel modules
403 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
404 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
404 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
405 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
405 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
406 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
406 fi
407 fi
407
408
408 # Create symlinks for kernel modules
409 # Create symlinks for kernel modules
409 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
410 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
410 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
411 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
411 fi
412 fi
412 fi
413 fi
413
414
414 else # BUILD_KERNEL=false
415 else # BUILD_KERNEL=false
415 # echo Install precompiled kernel...
416 # echo Install precompiled kernel...
416 # echo error: not implemented
417 # echo error: not implemented
417 if [ "$KERNEL_ARCH" = arm64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
418 if [ "$KERNEL_ARCH" = arm64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
418 # Create temporary directory for dl
419 # Create temporary directory for dl
419 temp_dir=$(as_nobody mktemp -d)
420 temp_dir=$(as_nobody mktemp -d)
420
421
421 # Fetch kernel dl
422 # Fetch kernel dl
422 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
423 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
423 #extract download
424 #extract download
424 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
425 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
425
426
426 #move extracted kernel to /boot/firmware
427 #move extracted kernel to /boot/firmware
427 mkdir "${R}/boot/firmware"
428 mkdir "${R}/boot/firmware"
428 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
429 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
429 cp -r "${temp_dir}"/lib/* "${R}"/lib/
430 cp -r "${temp_dir}"/lib/* "${R}"/lib/
430
431
431 # Remove temporary directory for kernel sources
432 # Remove temporary directory for kernel sources
432 rm -fr "${temp_dir}"
433 rm -fr "${temp_dir}"
433 # Set permissions of the kernel sources
434 # Set permissions of the kernel sources
434 chown -R root:root "${R}/boot/firmware"
435 chown -R root:root "${R}/boot/firmware"
435 chown -R root:root "${R}/lib/modules"
436 chown -R root:root "${R}/lib/modules"
436 #Create cmdline.txt for 15-rpi-config.sh
437 #Create cmdline.txt for 15-rpi-config.sh
437 touch "${BOOT_DIR}/cmdline.txt"
438 touch "${BOOT_DIR}/cmdline.txt"
438 fi
439 fi
439
440
440 # Check if kernel installation was successful
441 # Check if kernel installation was successful
441 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
442 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
442 if [ -z "$KERNEL" ] ; then
443 if [ -z "$KERNEL" ] ; then
443 echo "error: kernel installation failed! (/boot/kernel* not found)"
444 echo "error: kernel installation failed! (/boot/kernel* not found)"
444 cleanup
445 cleanup
445 exit 1
446 exit 1
446 fi
447 fi
447 fi
448 fi
@@ -1,237 +1,240
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 [ "$BUILD_KERNEL" = true ] ; then
8 if [ "$BUILD_KERNEL" = true ] ; then
9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
10 # Install boot binaries from local directory
10 # Install boot binaries from local directory
11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
18 else
18 else
19 # Create temporary directory for boot binaries
19 # Create temporary directory for boot binaries
20 temp_dir=$(as_nobody mktemp -d)
20 temp_dir=$(as_nobody mktemp -d)
21
21
22 # Install latest boot binaries from raspberry/firmware github
22 # Install latest boot binaries from raspberry/firmware github
23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
30
30
31 # Move downloaded boot binaries
31 # Move downloaded boot binaries
32 mv "${temp_dir}/"* "${BOOT_DIR}/"
32 mv "${temp_dir}/"* "${BOOT_DIR}/"
33
33
34 # Remove temporary directory for boot binaries
34 # Remove temporary directory for boot binaries
35 rm -fr "${temp_dir}"
35 rm -fr "${temp_dir}"
36
36
37 # Set permissions of the boot binaries
37 # Set permissions of the boot binaries
38 chown -R root:root "${BOOT_DIR}"
38 chown -R root:root "${BOOT_DIR}"
39 chmod -R 600 "${BOOT_DIR}"
39 chmod -R 600 "${BOOT_DIR}"
40 fi
40 fi
41 fi
41 fi
42
42
43 # Setup firmware boot cmdline
43 # Setup firmware boot cmdline
44 if [ "$ENABLE_UBOOTUSB" = true ] ; then
44 if [ "$ENABLE_UBOOTUSB" = true ] ; then
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
46 else
46 else
47 if [ "$ENABLE_SPLITFS" = true ] ; then
47 if [ "$ENABLE_SPLITFS" = true ] ; then
48 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
48 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
49 else
49 else
50 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
50 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
51 fi
51 fi
52 fi
52 fi
53
53
54 # Add encrypted root partition to cmdline.txt
54 # Add encrypted root partition to cmdline.txt
55 if [ "$ENABLE_CRYPTFS" = true ] ; then
55 if [ "$ENABLE_CRYPTFS" = true ] ; then
56 if [ "$ENABLE_SPLITFS" = true ] ; then
56 if [ "$ENABLE_SPLITFS" = true ] ; then
57 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
57 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
58 else
58 else
59 if [ "$ENABLE_UBOOTUSB" = true ] ; then
59 if [ "$ENABLE_UBOOTUSB" = true ] ; then
60 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda2:${CRYPTFS_MAPPING}/")
60 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda2:${CRYPTFS_MAPPING}/")
61 else
61 else
62 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
62 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
63 fi
63 fi
64 fi
64 fi
65 fi
65 fi
66
66
67 #locks cpu at max frequency
67 #locks cpu at max frequency
68 if [ "$ENABLE_TURBO" = true ] ; then
68 if [ "$ENABLE_TURBO" = true ] ; then
69 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
69 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
70 # helps to avoid sdcard corruption when force_turbo is enabled.
71 echo "boot_delay=1" >> "${BOOT_DIR}/config.txt"
72
70 fi
73 fi
71
74
72 if [ "$ENABLE_PRINTK" = true ] ; then
75 if [ "$ENABLE_PRINTK" = true ] ; then
73 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
76 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
74 fi
77 fi
75
78
76 # Install udev rule for serial alias
79 # Install udev rule for serial alias
77 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
80 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
78
81
79 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
82 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
80
83
81 # RPI0,3,3P Use default ttyS0 (mini-UART)as serial interface
84 # RPI0,3,3P Use default ttyS0 (mini-UART)as serial interface
82 SET_SERIAL="ttyS0"
85 SET_SERIAL="ttyS0"
83
86
84 # Bluetooth enabled
87 # Bluetooth enabled
85 if [ "$ENABLE_BLUETOOTH" = true ] ; then
88 if [ "$ENABLE_BLUETOOTH" = true ] ; then
86 # Create temporary directory for Bluetooth sources
89 # Create temporary directory for Bluetooth sources
87 temp_dir=$(as_nobody mktemp -d)
90 temp_dir=$(as_nobody mktemp -d)
88
91
89 # Fetch Bluetooth sources
92 # Fetch Bluetooth sources
90 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
93 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
91
94
92 # Copy downloaded sources
95 # Copy downloaded sources
93 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
96 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
94
97
95 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
98 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
96 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
99 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
97 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
100 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
98
101
99 # Set permissions
102 # Set permissions
100 chown -R root:root "${R}/tmp/pi-bluetooth"
103 chown -R root:root "${R}/tmp/pi-bluetooth"
101
104
102 # Install tools
105 # Install tools
103 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
106 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
104 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
107 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
105
108
106 # Install bluetooth udev rule
109 # Install bluetooth udev rule
107 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
110 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
108
111
109 # Install Firmware Flash file and apropiate licence
112 # Install Firmware Flash file and apropiate licence
110 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
113 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
111 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
114 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
112 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
115 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
113 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
116 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
114 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
117 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
115
118
116 # Remove temporary directory
119 # Remove temporary directory
117 rm -fr "${temp_dir}"
120 rm -fr "${temp_dir}"
118
121
119 # 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
122 # 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
120 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
123 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
121 SET_SERIAL="ttyAMA0"
124 SET_SERIAL="ttyAMA0"
122
125
123 # set overlay to swap ttyAMA0 and ttyS0
126 # set overlay to swap ttyAMA0 and ttyS0
124 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
127 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
125
128
126 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
129 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
127 if [ "$ENABLE_TURBO" = false ] ; then
130 if [ "$ENABLE_TURBO" = false ] ; then
128 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
131 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
129 fi
132 fi
130
133
131 # Activate services
134 # Activate services
132 chroot_exec systemctl enable pi-bluetooth.hciuart.service
135 chroot_exec systemctl enable pi-bluetooth.hciuart.service
133 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
136 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
134 else
137 else
135 chroot_exec systemctl enable pi-bluetooth.hciuart.service
138 chroot_exec systemctl enable pi-bluetooth.hciuart.service
136 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
139 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
137 fi
140 fi
138
141
139 else # if ENABLE_BLUETOOTH = false
142 else # if ENABLE_BLUETOOTH = false
140 # set overlay to disable bluetooth
143 # set overlay to disable bluetooth
141 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
144 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
142 fi # ENABLE_BLUETOOTH end
145 fi # ENABLE_BLUETOOTH end
143
146
144 else
147 else
145 # RPI1,1P,2 Use default ttyAMA0 (full UART) as serial interface
148 # RPI1,1P,2 Use default ttyAMA0 (full UART) as serial interface
146 SET_SERIAL="ttyAMA0"
149 SET_SERIAL="ttyAMA0"
147 fi
150 fi
148
151
149 # may need sudo systemctl disable hciuart
152 # may need sudo systemctl disable hciuart
150 if [ "$ENABLE_CONSOLE" = true ] ; then
153 if [ "$ENABLE_CONSOLE" = true ] ; then
151 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
154 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
152 # add string to cmdline
155 # add string to cmdline
153 CMDLINE="${CMDLINE} console=serial0,115200"
156 CMDLINE="${CMDLINE} console=serial0,115200"
154
157
155 # Enable serial console systemd style
158 # Enable serial console systemd style
156 chroot_exec systemctl enable serial-getty@"$SET_SERIAL".service
159 chroot_exec systemctl enable serial-getty@"$SET_SERIAL".service
157 else
160 else
158 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
161 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
159 # disable serial console systemd style
162 # disable serial console systemd style
160 chroot_exec systemctl disable serial-getty@"$SET_SERIAL".service
163 chroot_exec systemctl disable serial-getty@"$SET_SERIAL".service
161 fi
164 fi
162
165
163 # Remove IPv6 networking support
166 # Remove IPv6 networking support
164 if [ "$ENABLE_IPV6" = false ] ; then
167 if [ "$ENABLE_IPV6" = false ] ; then
165 CMDLINE="${CMDLINE} ipv6.disable=1"
168 CMDLINE="${CMDLINE} ipv6.disable=1"
166 fi
169 fi
167
170
168 # Automatically assign predictable network interface names
171 # Automatically assign predictable network interface names
169 if [ "$ENABLE_IFNAMES" = false ] ; then
172 if [ "$ENABLE_IFNAMES" = false ] ; then
170 CMDLINE="${CMDLINE} net.ifnames=0"
173 CMDLINE="${CMDLINE} net.ifnames=0"
171 else
174 else
172 CMDLINE="${CMDLINE} net.ifnames=1"
175 CMDLINE="${CMDLINE} net.ifnames=1"
173 fi
176 fi
174
177
175 # Install firmware boot cmdline
178 # Install firmware boot cmdline
176 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
179 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
177
180
178 # Install firmware config
181 # Install firmware config
179 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
182 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
180
183
181 # Setup minimal GPU memory allocation size: 16MB (no X)
184 # Setup minimal GPU memory allocation size: 16MB (no X)
182 if [ "$ENABLE_MINGPU" = true ] ; then
185 if [ "$ENABLE_MINGPU" = true ] ; then
183 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
186 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
184 fi
187 fi
185
188
186 # Setup boot with initramfs
189 # Setup boot with initramfs
187 if [ "$ENABLE_INITRAMFS" = true ] ; then
190 if [ "$ENABLE_INITRAMFS" = true ] ; then
188 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
191 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
189 fi
192 fi
190
193
191 # Create firmware configuration and cmdline symlinks
194 # Create firmware configuration and cmdline symlinks
192 ln -sf firmware/config.txt "${R}/boot/config.txt"
195 ln -sf firmware/config.txt "${R}/boot/config.txt"
193 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
196 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
194
197
195 # Install and setup kernel modules to load at boot
198 # Install and setup kernel modules to load at boot
196 mkdir -p "${LIB_DIR}/modules-load.d/"
199 mkdir -p "${LIB_DIR}/modules-load.d/"
197 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
200 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
198
201
199 # Load hardware random module at boot
202 # Load hardware random module at boot
200 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
203 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
201 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
204 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
202 fi
205 fi
203
206
204 # Load sound module at boot
207 # Load sound module at boot
205 if [ "$ENABLE_SOUND" = true ] ; then
208 if [ "$ENABLE_SOUND" = true ] ; then
206 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
209 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
207 else
210 else
208 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
211 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
209 fi
212 fi
210
213
211 # Enable I2C interface
214 # Enable I2C interface
212 if [ "$ENABLE_I2C" = true ] ; then
215 if [ "$ENABLE_I2C" = true ] ; then
213 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
216 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
214 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
217 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
215 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
218 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
216 fi
219 fi
217
220
218 # Enable SPI interface
221 # Enable SPI interface
219 if [ "$ENABLE_SPI" = true ] ; then
222 if [ "$ENABLE_SPI" = true ] ; then
220 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
223 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
221 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
224 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
222 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
225 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
223 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
226 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
224 fi
227 fi
225 fi
228 fi
226
229
227 # Disable RPi2/3 under-voltage warnings
230 # Disable RPi2/3 under-voltage warnings
228 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
231 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
229 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
232 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
230 fi
233 fi
231
234
232 # Install kernel modules blacklist
235 # Install kernel modules blacklist
233 mkdir -p "${ETC_DIR}/modprobe.d/"
236 mkdir -p "${ETC_DIR}/modprobe.d/"
234 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
237 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
235
238
236 # Install sysctl.d configuration files
239 # Install sysctl.d configuration files
237 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
240 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,87 +1,107
1 #!/bin/sh
1 #!/bin/sh
2 #
2 #
3 # Build and Setup nexmon with monitor mode patch
3 # Build and Setup nexmon with monitor mode patch
4 #
4 #
5
5
6 # Load utility functions
6 # Load utility functions
7 . ./functions.sh
7 . ./functions.sh
8
8
9 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
9 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
10
10
11 # Create temporary directory for nexmon sources
11 # Create temporary directory for nexmon sources
12 temp_dir=$(as_nobody mktemp -d)
12 temp_dir=$(as_nobody mktemp -d)
13
13
14 # Fetch nexmon sources
14 # Fetch nexmon sources
15 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
15 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
16
16
17 # Copy downloaded nexmon sources
17 # Copy downloaded nexmon sources
18 mv "${temp_dir}/nexmon" "${R}"/tmp/
18 mv "${temp_dir}/nexmon" "${R}"/tmp/
19
19
20 # Set permissions of the nexmon sources
20 # Set permissions of the nexmon sources
21 chown -R root:root "${R}"/tmp/nexmon
21 chown -R root:root "${R}"/tmp/nexmon
22
22
23 # Set script Root
23 # Set script Root
24 NEXMON_ROOT="${R}"/tmp/nexmon
24 export NEXMON_ROOT="${R}"/tmp/nexmon
25
25
26 # Remove temporary directory for nexmon sources
26 # Remove temporary directory for nexmon sources
27 rm -fr "${temp_dir}"
27 rm -fr "${temp_dir}"
28
28
29 # Build nexmon firmware outside the build system, if we can.
29 # Build nexmon firmware outside the build system, if we can.
30 cd "${NEXMON_ROOT}" || exit
30 cd "${NEXMON_ROOT}" || exit
31
31
32 # Disable statistics
32 # Disable statistics
33 touch DISABLE_STATISTICS
33 touch DISABLE_STATISTICS
34
34
35 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
35 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
36 #ARCH="${KERNEL_ARCH}"
36 #ARCH="${KERNEL_ARCH}"
37 #SUBARCH="${KERNEL_ARCH}"
37 #SUBARCH="${KERNEL_ARCH}"
38 KERNEL="${KERNEL_IMAGE}"
38 export KERNEL="${KERNEL_IMAGE}"
39 ARCH=arm
39 export ARCH=arm
40 SUBARCH=arm
40 export SUBARCH=arm
41 CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
41 export CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
42 CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
42 export CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
43 ZLIBFLATE="zlib-flate -compress"
43 export ZLIBFLATE="zlib-flate -compress"
44 Q=@
44 export Q=@
45 NEXMON_SETUP_ENV=1
45 export NEXMON_SETUP_ENV=1
46 export HOSTUNAME=$(uname -s)
47 export PLATFORMUNAME=$(uname -m)
46 #. ./setup_env.sh
48 #. ./setup_env.sh
47
49
48 # Make nexmon
50 # Make nexmon
49 make
51 make
50
52
51 # Make ancient isl build
53 # Make ancient isl build
52 cd buildtools/isl-0.10 || exit
54 cd buildtools/isl-0.10 || exit
53 CC="${CC}"gcc
55 CC="${CC}"gcc
54 ./configure
56 ./configure
55 make
57 make
56
58
57 # build patches
59 # build patches
58 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
60 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
59 cd "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon || exit
61 cd "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon || exit
60 make clean
62 make clean
61
63
62 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
64 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
63 LD_LIBRARY_PATH="${NEXMON_ROOT}"/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
65 LD_LIBRARY_PATH="${NEXMON_ROOT}"/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
64
66
65 # copy RPi0W & RPi3 firmware
67 # copy RPi0W & RPi3 firmware
66 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
68 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
67 cp "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
69 cp "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
68 cp -f "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
70 cp -f "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
69 fi
71 fi
70
72
71 if [ "$RPI_MODEL" = 3P ] ; then
73 if [ "$RPI_MODEL" = 3P ] ; then
72 cd "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon || exit
74 cd "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon || exit
73 make clean
75 make clean
74
76
75 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
77 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
76 LD_LIBRARY_PATH=${NEXMON_ROOT}/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
78 LD_LIBRARY_PATH=${NEXMON_ROOT}/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
77
79
78 # RPi3B+ firmware
80 # RPi3B+ firmware
79 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
81 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
80 cp "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
82 cp "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
81 cp -f "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
83 cp -f "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
82 fi
84 fi
83
85
86 # Install kernel module
87 "${LIB_DIR}"/modules/${KERNEL_VERSION}/
88
84 #Revert to previous directory
89 #Revert to previous directory
85 cd "${WORKDIR}" || exit
90 cd "${WORKDIR}" || exit
86
91
87 fi
92 fi
93
94 ## To make the RPi load the modified driver after reboot
95 # Find the path of the default driver at reboot
96 # e.g. '/lib/modules/4.14.71-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko'
97 PATH_OF_DEFAULT_DRIVER_AT_REBOOT=$(modinfo brcmfmac | grep -m 1 -oP "^filename:(\s*?)(.*)$" | sed -e 's/^filename:\(\s*\)\(.*\)$/\2/g')
98 # Backup the original driver
99 mv $PATH_OF_DEFAULT_DRIVER_AT_REBOOT "$PATH_OF_DEFAULT_DRIVER_AT_REBOOT.orig"
100 # Copy the modified driver (Kernel 4.14)
101 if is_pizero ; then
102 cp ./patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac_4.14.y-nexmon/brcmfmac.ko $PATH_OF_DEFAULT_DRIVER_AT_REBOOT
103 else
104 cp ./patches/bcm43455c0/7_45_154/nexmon/brcmfmac_4.14.y-nexmon/brcmfmac.ko $PATH_OF_DEFAULT_DRIVER_AT_REBOOT
105 fi
106 # Probe all modules and generate new dependency
107 depmod -a No newline at end of file
@@ -1,97 +1,97
1 #!/bin/sh
1 #!/bin/sh
2 # This file contains utility functions used by rpi23-gen-image.sh
2 # This file contains utility functions used by rpi23-gen-image.sh
3
3
4 cleanup (){
4 cleanup (){
5 set +x
5 set +x
6 set +e
6 set +e
7
7
8 # Identify and kill all processes still using files
8 # Identify and kill all processes still using files
9 echo "killing processes using mount point ..."
9 echo "killing processes using mount point ..."
10 fuser -k "${R}"
10 fuser -k "${R}"
11 sleep 3
11 sleep 3
12 fuser -9 -k -v "${R}"
12 fuser -9 -k -v "${R}"
13
13
14 # Clean up temporary .password file
14 # Clean up temporary .password file
15 if [ -r ".password" ] ; then
15 if [ -r ".password" ] ; then
16 shred -zu .password
16 shred -zu .password
17 fi
17 fi
18
18
19 # Clean up all temporary mount points
19 # Clean up all temporary mount points
20 echo "removing temporary mount points ..."
20 echo "removing temporary mount points ..."
21 umount -l "${R}/proc" 2> /dev/null
21 umount -l "${R}/proc" 2> /dev/null
22 umount -l "${R}/sys" 2> /dev/null
22 umount -l "${R}/sys" 2> /dev/null
23 umount -l "${R}/dev/pts" 2> /dev/null
23 umount -l "${R}/dev/pts" 2> /dev/null
24 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
24 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
25 umount "$BUILDDIR/mount" 2> /dev/null
25 umount "$BUILDDIR/mount" 2> /dev/null
26 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
26 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
27 losetup -d "$ROOT_LOOP" 2> /dev/null
27 losetup -d "$ROOT_LOOP" 2> /dev/null
28 losetup -d "$FRMW_LOOP" 2> /dev/null
28 losetup -d "$FRMW_LOOP" 2> /dev/null
29 trap - 0 1 2 3 6
29 trap - 0 1 2 3 6
30 }
30 }
31
31
32 chroot_exec() {
32 chroot_exec() {
33 # Exec command in chroot
33 # Exec command in chroot
34 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
34 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
35 }
35 }
36
36
37 as_nobody() {
37 as_nobody() {
38 # Exec command as user nobody
38 # Exec command as user nobody
39 sudo -E -u nobody LANG=C LC_ALL=C "$@"
39 sudo -E -u nobody LANG=C LC_ALL=C "$@"
40 }
40 }
41
41
42 install_readonly() {
42 install_readonly() {
43 # Install file with user read-only permissions
43 # Install file with user read-only permissions
44 install -o root -g root -m 644 "$@"
44 install -o root -g root -m 644 "$@"
45 }
45 }
46
46
47 install_exec() {
47 install_exec() {
48 # Install file with root exec permissions
48 # Install file with root exec permissions
49 install -o root -g root -m 744 "$@"
49 install -o root -g root -m 744 "$@"
50 }
50 }
51
51
52 use_template () {
52 use_template () {
53 # Test if configuration template file exists
53 # Test if configuration template file exists
54 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
54 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
55 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
55 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
56 exit 1
56 exit 1
57 fi
57 fi
58
58
59 # Load template configuration parameters
59 # Load template configuration parameters
60 . "./templates/${CONFIG_TEMPLATE}"
60 . "./templates/${CONFIG_TEMPLATE}"
61 }
61 }
62
62
63 chroot_install_cc() {
63 chroot_install_cc() {
64 # Install c/c++ build environment inside the chroot
64 # Install c/c++ build environment inside the chroot
65 if [ -z "${COMPILER_PACKAGES}" ] ; then
65 if [ -z "${COMPILER_PACKAGES}" ] ; then
66 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
66 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
67 # Install COMPILER_PACKAGES in chroot
67 # Install COMPILER_PACKAGES in chroot
68 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install "${COMPILER_PACKAGES}"
68 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install "${COMPILER_PACKAGES}"
69 fi
69 fi
70 }
70 }
71
71
72 chroot_remove_cc() {
72 chroot_remove_cc() {
73 # Remove c/c++ build environment from the chroot
73 # Remove c/c++ build environment from the chroot
74 if [ -n "${COMPILER_PACKAGES}" ] ; then
74 if [ -n "${COMPILER_PACKAGES}" ] ; then
75 chroot_exec apt-get -qq -y --auto-remove purge "${COMPILER_PACKAGES}"
75 chroot_exec apt-get -qq -y --auto-remove purge "${COMPILER_PACKAGES}"
76 COMPILER_PACKAGES=""
76 COMPILER_PACKAGES=""
77 fi
77 fi
78 }
78 }
79 #GPL v2.0
79 #GPL v2.0
80 #https://github.com/sakaki-/bcmrpi3-kernel-bis/blob/master/conform_config.sh
80 #https://github.com/sakaki-/bcmrpi3-kernel-bis/blob/master/conform_config.sh
81 set_kernel_config() {
81 set_kernel_config() {
82 # flag as $1, value to set as $2, config must exist at "./.config"
82 # flag as $1, value to set as $2, config must exist at "./.config"
83 TGT="${1}"
83 TGT="CONFIG_${1#CONFIG_}"
84 REP="${2}"
84 REP="${2}"
85 if grep -q "^${TGT}[^_]" .config; then
85 if grep -q "^${TGT}[^_]" .config; then
86 sed -i "s/^\(${TGT}=.*\|# ${TGT} is not set\)/${TGT}=${REP}/" .config
86 sed -i "s/^\(${TGT}=.*\|# ${TGT} is not set\)/${TGT}=${REP}/" .config
87 else
87 else
88 echo "${TGT}"="${2}" >> .config
88 echo "${TGT}"="${2}" >> .config
89 fi
89 fi
90 }
90 }
91
91
92 unset_kernel_config() {
92 unset_kernel_config() {
93 # unsets flag with the value of $1, config must exist at "./.config"
93 # unsets flag with the value of $1, config must exist at "./.config"
94 TGT="CONFIG_${1#CONFIG_}"
94 TGT="CONFIG_${1#CONFIG_}"
95 sed -i "s/^${TGT}=.*/# ${TGT} is not set/" .config
95 sed -i "s/^${TGT}=.*/# ${TGT} is not set/" .config
96 }
96 }
97 # No newline at end of file
97 #
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant