##// END OF EJS Templates
set kernel default governor
Unknown -
r455:7f84c1cfdbfd
parent child
Show More
@@ -1,525 +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 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.
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"
357 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
358
356 ##### `KERNEL_NF`=false
359 ##### `KERNEL_NF`=false
357 Enable Netfilter modules as kernel modules
360 Enable Netfilter modules as kernel modules
358
361
359 ##### `KERNEL_VIRT`=false
362 ##### `KERNEL_VIRT`=false
360 Enable Kernel KVM support (/dev/kvm)
363 Enable Kernel KVM support (/dev/kvm)
361
364
362 ##### `KERNEL_ZSWAP`=false
365 ##### `KERNEL_ZSWAP`=false
363 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
364
367
365 ##### `KERNEL_BPF`=true
368 ##### `KERNEL_BPF`=true
366 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]
367
370
368 ---
371 ---
369
372
370 #### Reduce disk usage:
373 #### Reduce disk usage:
371 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
374 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
372
375
373 ##### `REDUCE_APT`=true
376 ##### `REDUCE_APT`=true
374 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.
375
378
376 ##### `REDUCE_DOC`=true
379 ##### `REDUCE_DOC`=true
377 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.
378
381
379 ##### `REDUCE_MAN`=true
382 ##### `REDUCE_MAN`=true
380 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.
381
384
382 ##### `REDUCE_VIM`=false
385 ##### `REDUCE_VIM`=false
383 Replace `vim-tiny` package by `levee` a tiny vim clone.
386 Replace `vim-tiny` package by `levee` a tiny vim clone.
384
387
385 ##### `REDUCE_BASH`=false
388 ##### `REDUCE_BASH`=false
386 Remove `bash` package and switch to `dash` shell (experimental).
389 Remove `bash` package and switch to `dash` shell (experimental).
387
390
388 ##### `REDUCE_HWDB`=true
391 ##### `REDUCE_HWDB`=true
389 Remove PCI related hwdb files (experimental).
392 Remove PCI related hwdb files (experimental).
390
393
391 ##### `REDUCE_SSHD`=true
394 ##### `REDUCE_SSHD`=true
392 Replace `openssh-server` with `dropbear`.
395 Replace `openssh-server` with `dropbear`.
393
396
394 ##### `REDUCE_LOCALE`=true
397 ##### `REDUCE_LOCALE`=true
395 Remove all `locale` translation files.
398 Remove all `locale` translation files.
396
399
397 ---
400 ---
398
401
399 #### Encrypted root partition:
402 #### Encrypted root partition:
400 ##### `ENABLE_CRYPTFS`=false
403 ##### `ENABLE_CRYPTFS`=false
401 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.
402
405
403 ##### `CRYPTFS_PASSWORD`=""
406 ##### `CRYPTFS_PASSWORD`=""
404 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.
405
408
406 ##### `CRYPTFS_MAPPING`="secure"
409 ##### `CRYPTFS_MAPPING`="secure"
407 Set name of dm-crypt managed device-mapper mapping.
410 Set name of dm-crypt managed device-mapper mapping.
408
411
409 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
412 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
410 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
413 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
411
414
412 ##### `CRYPTFS_XTSKEYSIZE`=512
415 ##### `CRYPTFS_XTSKEYSIZE`=512
413 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.
414
417
415 ##### `CRYPTFS_DROPBEAR`=false
418 ##### `CRYPTFS_DROPBEAR`=false
416 Enable Dropbear Initramfs support
419 Enable Dropbear Initramfs support
417
420
418 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
421 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
419 Provide path to dropbear Public RSA-OpenSSH Key
422 Provide path to dropbear Public RSA-OpenSSH Key
420
423
421 ---
424 ---
422
425
423 #### Build settings:
426 #### Build settings:
424 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
427 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
425 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.
426
429
427 ##### `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}
428 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.
429
432
430 ## Understanding the script
433 ## Understanding the script
431 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:
432
435
433 | Script | Description |
436 | Script | Description |
434 | --- | --- |
437 | --- | --- |
435 | `10-bootstrap.sh` | Debootstrap basic system |
438 | `10-bootstrap.sh` | Debootstrap basic system |
436 | `11-apt.sh` | Setup APT repositories |
439 | `11-apt.sh` | Setup APT repositories |
437 | `12-locale.sh` | Setup Locales and keyboard settings |
440 | `12-locale.sh` | Setup Locales and keyboard settings |
438 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
441 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
439 | `14-fstab.sh` | Setup fstab and initramfs |
442 | `14-fstab.sh` | Setup fstab and initramfs |
440 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
443 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
441 | `20-networking.sh` | Setup Networking |
444 | `20-networking.sh` | Setup Networking |
442 | `21-firewall.sh` | Setup Firewall |
445 | `21-firewall.sh` | Setup Firewall |
443 | `30-security.sh` | Setup Users and Security settings |
446 | `30-security.sh` | Setup Users and Security settings |
444 | `31-logging.sh` | Setup Logging |
447 | `31-logging.sh` | Setup Logging |
445 | `32-sshd.sh` | Setup SSH and public keys |
448 | `32-sshd.sh` | Setup SSH and public keys |
446 | `41-uboot.sh` | Build and Setup U-Boot |
449 | `41-uboot.sh` | Build and Setup U-Boot |
447 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
450 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
448 | `50-firstboot.sh` | First boot actions |
451 | `50-firstboot.sh` | First boot actions |
449 | `99-reduce.sh` | Reduce the disk space usage |
452 | `99-reduce.sh` | Reduce the disk space usage |
450
453
451 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.
452
455
453 | Directory | Description |
456 | Directory | Description |
454 | --- | --- |
457 | --- | --- |
455 | `apt` | APT management configuration files |
458 | `apt` | APT management configuration files |
456 | `boot` | Boot and RPi2/3 configuration files |
459 | `boot` | Boot and RPi2/3 configuration files |
457 | `dpkg` | Package Manager configuration |
460 | `dpkg` | Package Manager configuration |
458 | `etc` | Configuration files and rc scripts |
461 | `etc` | Configuration files and rc scripts |
459 | `firstboot` | Scripts that get executed on first boot |
462 | `firstboot` | Scripts that get executed on first boot |
460 | `initramfs` | Initramfs scripts |
463 | `initramfs` | Initramfs scripts |
461 | `iptables` | Firewall configuration files |
464 | `iptables` | Firewall configuration files |
462 | `locales` | Locales configuration |
465 | `locales` | Locales configuration |
463 | `modules` | Kernel Modules configuration |
466 | `modules` | Kernel Modules configuration |
464 | `mount` | Fstab configuration |
467 | `mount` | Fstab configuration |
465 | `network` | Networking configuration files |
468 | `network` | Networking configuration files |
466 | `sysctl.d` | Swapping and Network Hardening configuration |
469 | `sysctl.d` | Swapping and Network Hardening configuration |
467 | `xorg` | fbturbo Xorg driver configuration |
470 | `xorg` | fbturbo Xorg driver configuration |
468
471
469 ## Custom packages and scripts
472 ## Custom packages and scripts
470 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`.
471
474
472 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.
473
476
474 ## Logging of the bootstrapping process
477 ## Logging of the bootstrapping process
475 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:
476
479
477 ```shell
480 ```shell
478 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
479 ```
482 ```
480
483
481 ## Flashing the image file
484 ## Flashing the image file
482 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`.
483
486
484 ##### Flashing examples:
487 ##### Flashing examples:
485 ```shell
488 ```shell
486 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
487 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
488 ```
491 ```
489 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:
490 ```shell
493 ```shell
491 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
492 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
493 ```
496 ```
494
497
495 ## QEMU emulation
498 ## QEMU emulation
496 Start QEMU full system emulation:
499 Start QEMU full system emulation:
497 ```shell
500 ```shell
498 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"
499 ```
502 ```
500
503
501 Start QEMU full system emulation and output to console:
504 Start QEMU full system emulation and output to console:
502 ```shell
505 ```shell
503 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
504 ```
507 ```
505
508
506 Start QEMU full system emulation with SMP and output to console:
509 Start QEMU full system emulation with SMP and output to console:
507 ```shell
510 ```shell
508 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
509 ```
512 ```
510
513
511 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:
512 ```shell
515 ```shell
513 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
514 ```
517 ```
515
518
516 ## External links and references
519 ## External links and references
517 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
520 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
518 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
521 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
519 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
522 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
520 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
523 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
521 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
524 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
522 * [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)
523 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
526 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
524 * [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)
525 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
528 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,400 +1,432
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}"
91 cd "${KERNEL_DIR}"
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 ZPOOL y
95 set_kernel_config ZPOOL y
96 set_kernel_config ZSWAP y
96 set_kernel_config ZSWAP y
97 set_kernel_config ZBUD y
97 set_kernel_config ZBUD y
98 set_kernel_config Z3FOLD y
98 set_kernel_config Z3FOLD y
99 set_kernel_config ZSMALLOC y
99 set_kernel_config ZSMALLOC y
100 set_kernel_config PGTABLE_MAPPING y
100 set_kernel_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" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
104 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
105 set_kernel_config VIRTUALIZATION y
105 set_kernel_config VIRTUALIZATION y
106 set_kernel_config KVM y
106 set_kernel_config KVM y
107 set_kernel_config VHOST_NET m
107 set_kernel_config VHOST_NET m
108 set_kernel_config VHOST_CROSS_ENDIAN_LEGACY y
108 set_kernel_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_NETFILTER_XTABLES m
113 set_kernel_config CONFIG_NETFILTER_XTABLES m
114 set_kernel_config CONFIG_NF_DUP_NETDEV m
114 set_kernel_config CONFIG_NF_DUP_NETDEV m
115 set_kernel_config CONFIG_NF_NAT_SIP m
115 set_kernel_config CONFIG_NF_NAT_SIP m
116 set_kernel_config CONFIG_NF_TABLES_ARP m
116 set_kernel_config CONFIG_NF_TABLES_ARP m
117 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
117 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
118 set_kernel_config NF_TABLES m
118 set_kernel_config NF_TABLES m
119 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
119 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
120 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
120 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
121 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
121 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
122 set_kernel_config CONFIG_IP6_NF_IPTABLES m
122 set_kernel_config CONFIG_IP6_NF_IPTABLES m
123 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
123 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
124 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
124 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
125 set_kernel_config CONFIG_IP6_NF_NAT m
125 set_kernel_config CONFIG_IP6_NF_NAT m
126 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
126 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
127 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
127 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
128 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
128 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
129 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
129 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
130 set_kernel_config CONFIG_IP_SET_HASH_IP m
130 set_kernel_config CONFIG_IP_SET_HASH_IP m
131 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
131 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
132 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
132 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
133 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
133 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
134 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
134 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
135 set_kernel_config CONFIG_IP_SET_HASH_MAC m
135 set_kernel_config CONFIG_IP_SET_HASH_MAC m
136 set_kernel_config CONFIG_IP_SET_HASH_NET m
136 set_kernel_config CONFIG_IP_SET_HASH_NET m
137 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
137 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
138 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
138 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
139 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
139 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
140 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
140 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
141 set_kernel_config CONFIG_IP_SET_LIST_SET m
141 set_kernel_config CONFIG_IP_SET_LIST_SET m
142 set_kernel_config CONFIG_NFT_BRIDGE_META m
142 set_kernel_config CONFIG_NFT_BRIDGE_META m
143 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
143 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
144 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
144 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
145 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
145 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
146 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
146 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
147 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
147 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
148 set_kernel_config CONFIG_NFT_COMPAT m
148 set_kernel_config CONFIG_NFT_COMPAT m
149 set_kernel_config CONFIG_NFT_COUNTER m
149 set_kernel_config CONFIG_NFT_COUNTER m
150 set_kernel_config CONFIG_NFT_CT m
150 set_kernel_config CONFIG_NFT_CT m
151 set_kernel_config CONFIG_NFT_DUP_IPV4 m
151 set_kernel_config CONFIG_NFT_DUP_IPV4 m
152 set_kernel_config CONFIG_NFT_DUP_IPV6 m
152 set_kernel_config CONFIG_NFT_DUP_IPV6 m
153 set_kernel_config CONFIG_NFT_DUP_NETDEV m
153 set_kernel_config CONFIG_NFT_DUP_NETDEV m
154 set_kernel_config CONFIG_NFT_EXTHDR m
154 set_kernel_config CONFIG_NFT_EXTHDR m
155 set_kernel_config CONFIG_NFT_FWD_NETDEV m
155 set_kernel_config CONFIG_NFT_FWD_NETDEV m
156 set_kernel_config CONFIG_NFT_HASH m
156 set_kernel_config CONFIG_NFT_HASH m
157 set_kernel_config CONFIG_NFT_LIMIT m
157 set_kernel_config CONFIG_NFT_LIMIT m
158 set_kernel_config CONFIG_NFT_LOG m
158 set_kernel_config CONFIG_NFT_LOG m
159 set_kernel_config CONFIG_NFT_MASQ m
159 set_kernel_config CONFIG_NFT_MASQ m
160 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
160 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
161 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
161 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
162 set_kernel_config CONFIG_NFT_META m
162 set_kernel_config CONFIG_NFT_META m
163 set_kernel_config CONFIG_NFT_NAT m
163 set_kernel_config CONFIG_NFT_NAT m
164 set_kernel_config CONFIG_NFT_NUMGEN m
164 set_kernel_config CONFIG_NFT_NUMGEN m
165 set_kernel_config CONFIG_NFT_QUEUE m
165 set_kernel_config CONFIG_NFT_QUEUE m
166 set_kernel_config CONFIG_NFT_QUOTA m
166 set_kernel_config CONFIG_NFT_QUOTA m
167 set_kernel_config CONFIG_NFT_REDIR m
167 set_kernel_config CONFIG_NFT_REDIR m
168 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
168 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
169 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
169 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
170 set_kernel_config CONFIG_NFT_REJECT m
170 set_kernel_config CONFIG_NFT_REJECT m
171 set_kernel_config CONFIG_NFT_REJECT_INET m
171 set_kernel_config CONFIG_NFT_REJECT_INET m
172 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
172 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
173 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
173 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
174 set_kernel_config CONFIG_NFT_SET_HASH m
174 set_kernel_config CONFIG_NFT_SET_HASH m
175 set_kernel_config CONFIG_NFT_SET_RBTREE m
175 set_kernel_config CONFIG_NFT_SET_RBTREE m
176 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
176 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
177 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
177 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
178 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
178 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
179 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
179 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
180 set_kernel_config CONFIG_NF_DUP_IPV4 m
180 set_kernel_config CONFIG_NF_DUP_IPV4 m
181 set_kernel_config CONFIG_NF_DUP_IPV6 m
181 set_kernel_config CONFIG_NF_DUP_IPV6 m
182 set_kernel_config CONFIG_NF_LOG_BRIDGE m
182 set_kernel_config CONFIG_NF_LOG_BRIDGE m
183 set_kernel_config CONFIG_NF_LOG_IPV4 m
183 set_kernel_config CONFIG_NF_LOG_IPV4 m
184 set_kernel_config CONFIG_NF_LOG_IPV6 m
184 set_kernel_config CONFIG_NF_LOG_IPV6 m
185 set_kernel_config CONFIG_NF_NAT_IPV4 m
185 set_kernel_config CONFIG_NF_NAT_IPV4 m
186 set_kernel_config CONFIG_NF_NAT_IPV6 m
186 set_kernel_config CONFIG_NF_NAT_IPV6 m
187 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
187 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
188 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
188 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
189 set_kernel_config CONFIG_NF_NAT_PPTP m
189 set_kernel_config CONFIG_NF_NAT_PPTP m
190 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
190 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
191 set_kernel_config CONFIG_NF_NAT_REDIRECT m
191 set_kernel_config CONFIG_NF_NAT_REDIRECT m
192 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
192 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
193 set_kernel_config CONFIG_NF_NAT_TFTP m
193 set_kernel_config CONFIG_NF_NAT_TFTP m
194 set_kernel_config CONFIG_NF_REJECT_IPV4 m
194 set_kernel_config CONFIG_NF_REJECT_IPV4 m
195 set_kernel_config CONFIG_NF_REJECT_IPV6 m
195 set_kernel_config CONFIG_NF_REJECT_IPV6 m
196 set_kernel_config CONFIG_NF_TABLES_INET m
196 set_kernel_config CONFIG_NF_TABLES_INET m
197 set_kernel_config CONFIG_NF_TABLES_IPV4 m
197 set_kernel_config CONFIG_NF_TABLES_IPV4 m
198 set_kernel_config CONFIG_NF_TABLES_IPV6 m
198 set_kernel_config CONFIG_NF_TABLES_IPV6 m
199 set_kernel_config CONFIG_NF_TABLES_NETDEV m
199 set_kernel_config CONFIG_NF_TABLES_NETDEV m
200 set_kernel_config NETFILTER_XTABLES m
200 set_kernel_config NETFILTER_XTABLES m
201 fi
201 fi
202
202
203 # 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
203 # 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
204 if [ "$KERNEL_BPF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
204 if [ "$KERNEL_BPF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
205 set_kernel_config CONFIG_BPF_SYSCALL y
205 set_kernel_config CONFIG_BPF_SYSCALL y
206 set_kernel_config CONFIG_BPF_EVENTS y
206 set_kernel_config CONFIG_BPF_EVENTS y
207 set_kernel_config CONFIG_CGROUP_BPF y
207 set_kernel_config CONFIG_CGROUP_BPF y
208 fi
208 fi
209
209
210 # KERNEL_DEFAULT_GOV was set by user
211 if ! [ "$KERNEL_DEFAULT_GOV" = POWERSAVE ] && [ -n "$KERNEL_DEFAULT_GOV" ]; then
212 # unset default governor
213 unset_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
214
215 case "$KERNEL_DEFAULT_GOV" in
216 "PERFORMANCE")
217 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
218 ;;
219 "USERSPACE")
220 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE y
221 ;;
222 "ONDEMAND")
223 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND y
224 ;;
225 "CONSERVATIVE")
226 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE y
227 ;;
228 "CONSERVATIVE")
229 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL y
230 ;;
231 *)
232 echo "error: unsupported default cpu governor"
233 exit 1
234 ;;
235 esac
236 fi
237
238
239
210 #Revert to previous directory
240 #Revert to previous directory
211 cd "${WORKDIR}"
241 cd "${WORKDIR}"
212
242
213 # Set kernel configuration parameters to enable qemu emulation
243 # Set kernel configuration parameters to enable qemu emulation
214 if [ "$ENABLE_QEMU" = true ] ; then
244 if [ "$ENABLE_QEMU" = true ] ; then
215 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
245 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
216 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
246 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
217
247
218 if [ "$ENABLE_CRYPTFS" = true ] ; then
248 if [ "$ENABLE_CRYPTFS" = true ] ; then
219 {
249 {
220 echo "CONFIG_EMBEDDED=y"
250 echo "CONFIG_EMBEDDED=y"
221 echo "CONFIG_EXPERT=y"
251 echo "CONFIG_EXPERT=y"
222 echo "CONFIG_DAX=y"
252 echo "CONFIG_DAX=y"
223 echo "CONFIG_MD=y"
253 echo "CONFIG_MD=y"
224 echo "CONFIG_BLK_DEV_MD=y"
254 echo "CONFIG_BLK_DEV_MD=y"
225 echo "CONFIG_MD_AUTODETECT=y"
255 echo "CONFIG_MD_AUTODETECT=y"
226 echo "CONFIG_BLK_DEV_DM=y"
256 echo "CONFIG_BLK_DEV_DM=y"
227 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
257 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
228 echo "CONFIG_DM_CRYPT=y"
258 echo "CONFIG_DM_CRYPT=y"
229 echo "CONFIG_CRYPTO_BLKCIPHER=y"
259 echo "CONFIG_CRYPTO_BLKCIPHER=y"
230 echo "CONFIG_CRYPTO_CBC=y"
260 echo "CONFIG_CRYPTO_CBC=y"
231 echo "CONFIG_CRYPTO_XTS=y"
261 echo "CONFIG_CRYPTO_XTS=y"
232 echo "CONFIG_CRYPTO_SHA512=y"
262 echo "CONFIG_CRYPTO_SHA512=y"
233 echo "CONFIG_CRYPTO_MANAGER=y"
263 echo "CONFIG_CRYPTO_MANAGER=y"
234 } >> "${KERNEL_DIR}"/.config
264 } >> "${KERNEL_DIR}"/.config
235 fi
265 fi
236 fi
266 fi
237
267
238 # Copy custom kernel configuration file
268 # Copy custom kernel configuration file
239 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
269 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
240 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
270 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
241 fi
271 fi
242
272
243 # Set kernel configuration parameters to their default values
273 # Set kernel configuration parameters to their default values
244 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
274 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
245 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
275 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
246 fi
276 fi
247
277
248 # Start menu-driven kernel configuration (interactive)
278 # Start menu-driven kernel configuration (interactive)
249 if [ "$KERNEL_MENUCONFIG" = true ] ; then
279 if [ "$KERNEL_MENUCONFIG" = true ] ; then
250 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
280 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
251 fi
281 fi
282 # end if "$KERNELSRC_CONFIG" = true
252 fi
283 fi
253
284
254 # Use ccache to cross compile the kernel
285 # Use ccache to cross compile the kernel
255 if [ "$KERNEL_CCACHE" = true ] ; then
286 if [ "$KERNEL_CCACHE" = true ] ; then
256 cc="ccache ${CROSS_COMPILE}gcc"
287 cc="ccache ${CROSS_COMPILE}gcc"
257 else
288 else
258 cc="${CROSS_COMPILE}gcc"
289 cc="${CROSS_COMPILE}gcc"
259 fi
290 fi
260
291
261 # Cross compile kernel and dtbs
292 # Cross compile kernel and dtbs
262 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
293 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
263
294
264 # Cross compile kernel modules
295 # Cross compile kernel modules
265 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
296 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
266 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
297 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
267 fi
298 fi
299 # end if "$KERNELSRC_PREBUILT" = false
268 fi
300 fi
269
301
270 # Check if kernel compilation was successful
302 # Check if kernel compilation was successful
271 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
303 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
272 echo "error: kernel compilation failed! (kernel image not found)"
304 echo "error: kernel compilation failed! (kernel image not found)"
273 cleanup
305 cleanup
274 exit 1
306 exit 1
275 fi
307 fi
276
308
277 # Install kernel modules
309 # Install kernel modules
278 if [ "$ENABLE_REDUCE" = true ] ; then
310 if [ "$ENABLE_REDUCE" = true ] ; then
279 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
311 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
280 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
312 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
281 fi
313 fi
282 else
314 else
283 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
315 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
284 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
316 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
285 fi
317 fi
286
318
287 # Install kernel firmware
319 # Install kernel firmware
288 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
320 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
289 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
321 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
290 fi
322 fi
291 fi
323 fi
292
324
293 # Install kernel headers
325 # Install kernel headers
294 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
326 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
295 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
327 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
296 fi
328 fi
297 # make tar.gz kernel package - missing os bzw. modules
329 # make tar.gz kernel package - missing os bzw. modules
298 #** ** ** WARNING ** ** **
330 #** ** ** WARNING ** ** **
299 #Your architecture did not define any architecture-dependent files
331 #Your architecture did not define any architecture-dependent files
300 #to be placed into the tarball. Please add those to ./scripts/package/buildtar .
332 #to be placed into the tarball. Please add those to ./scripts/package/buildtar .
301 # make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" targz-pkg
333 # make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" targz-pkg
302
334
303 # Prepare boot (firmware) directory
335 # Prepare boot (firmware) directory
304 mkdir "${BOOT_DIR}"
336 mkdir "${BOOT_DIR}"
305
337
306 # Get kernel release version
338 # Get kernel release version
307 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
339 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
308
340
309 # Copy kernel configuration file to the boot directory
341 # Copy kernel configuration file to the boot directory
310 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
342 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
311
343
312 # Prepare device tree directory
344 # Prepare device tree directory
313 mkdir "${BOOT_DIR}/overlays"
345 mkdir "${BOOT_DIR}/overlays"
314
346
315 # Ensure the proper .dtb is located
347 # Ensure the proper .dtb is located
316 if [ "$KERNEL_ARCH" = "arm" ] ; then
348 if [ "$KERNEL_ARCH" = "arm" ] ; then
317 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
349 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
318 if [ -f "${dtb}" ] ; then
350 if [ -f "${dtb}" ] ; then
319 install_readonly "${dtb}" "${BOOT_DIR}/"
351 install_readonly "${dtb}" "${BOOT_DIR}/"
320 fi
352 fi
321 done
353 done
322 else
354 else
323 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
355 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
324 if [ -f "${dtb}" ] ; then
356 if [ -f "${dtb}" ] ; then
325 install_readonly "${dtb}" "${BOOT_DIR}/"
357 install_readonly "${dtb}" "${BOOT_DIR}/"
326 fi
358 fi
327 done
359 done
328 fi
360 fi
329
361
330 # Copy compiled dtb device tree files
362 # Copy compiled dtb device tree files
331 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
363 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
332 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
364 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
333 if [ -f "${dtb}" ] ; then
365 if [ -f "${dtb}" ] ; then
334 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
366 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
335 fi
367 fi
336 done
368 done
337
369
338 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
370 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
339 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
371 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
340 fi
372 fi
341 fi
373 fi
342
374
343 if [ "$ENABLE_UBOOT" = false ] ; then
375 if [ "$ENABLE_UBOOT" = false ] ; then
344 # Convert and copy kernel image to the boot directory
376 # Convert and copy kernel image to the boot directory
345 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
377 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
346 else
378 else
347 # Copy kernel image to the boot directory
379 # Copy kernel image to the boot directory
348 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
380 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
349 fi
381 fi
350
382
351 # Remove kernel sources
383 # Remove kernel sources
352 if [ "$KERNEL_REMOVESRC" = true ] ; then
384 if [ "$KERNEL_REMOVESRC" = true ] ; then
353 rm -fr "${KERNEL_DIR}"
385 rm -fr "${KERNEL_DIR}"
354 else
386 else
355 # Prepare compiled kernel modules
387 # Prepare compiled kernel modules
356 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
388 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
357 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
389 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
358 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
390 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
359 fi
391 fi
360
392
361 # Create symlinks for kernel modules
393 # Create symlinks for kernel modules
362 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
394 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
363 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
395 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
364 fi
396 fi
365 fi
397 fi
366
398
367 else # BUILD_KERNEL=false
399 else # BUILD_KERNEL=false
368 # echo Install precompiled kernel...
400 # echo Install precompiled kernel...
369 # echo error: not implemented
401 # echo error: not implemented
370 if [ "$KERNEL_ARCH" = arm64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
402 if [ "$KERNEL_ARCH" = arm64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
371 # Create temporary directory for dl
403 # Create temporary directory for dl
372 temp_dir=$(as_nobody mktemp -d)
404 temp_dir=$(as_nobody mktemp -d)
373
405
374 # Fetch kernel dl
406 # Fetch kernel dl
375 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
407 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
376 #extract download
408 #extract download
377 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
409 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
378
410
379 #move extracted kernel to /boot/firmware
411 #move extracted kernel to /boot/firmware
380 mkdir "${R}/boot/firmware"
412 mkdir "${R}/boot/firmware"
381 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
413 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
382 cp -r "${temp_dir}"/lib/* "${R}"/lib/
414 cp -r "${temp_dir}"/lib/* "${R}"/lib/
383
415
384 # Remove temporary directory for kernel sources
416 # Remove temporary directory for kernel sources
385 rm -fr "${temp_dir}"
417 rm -fr "${temp_dir}"
386 # Set permissions of the kernel sources
418 # Set permissions of the kernel sources
387 chown -R root:root "${R}/boot/firmware"
419 chown -R root:root "${R}/boot/firmware"
388 chown -R root:root "${R}/lib/modules"
420 chown -R root:root "${R}/lib/modules"
389 #Create cmdline.txt for 15-rpi-config.sh
421 #Create cmdline.txt for 15-rpi-config.sh
390 touch "${BOOT_DIR}/cmdline.txt"
422 touch "${BOOT_DIR}/cmdline.txt"
391 fi
423 fi
392
424
393 # Check if kernel installation was successful
425 # Check if kernel installation was successful
394 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
426 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
395 if [ -z "$KERNEL" ] ; then
427 if [ -z "$KERNEL" ] ; then
396 echo "error: kernel installation failed! (/boot/kernel* not found)"
428 echo "error: kernel installation failed! (/boot/kernel* not found)"
397 cleanup
429 cleanup
398 exit 1
430 exit 1
399 fi
431 fi
400 fi
432 fi
@@ -1,84 +1,84
1 #
1 #
2 # Build and Setup nexmon with monitor mode patch
2 # Build and Setup nexmon with monitor mode patch
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
8 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
9
9
10 # Create temporary directory for nexmon sources
10 # Create temporary directory for nexmon sources
11 temp_dir=$(as_nobody mktemp -d)
11 temp_dir=$(as_nobody mktemp -d)
12
12
13 # Fetch nexmon sources
13 # Fetch nexmon sources
14 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
14 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
15
15
16 # Copy downloaded nexmon sources
16 # Copy downloaded nexmon sources
17 mv "${temp_dir}/nexmon" "${R}"/tmp/
17 mv "${temp_dir}/nexmon" "${R}"/tmp/
18
18
19 # Set permissions of the nexmon sources
19 # Set permissions of the nexmon sources
20 chown -R root:root "${R}"/tmp/nexmon
20 chown -R root:root "${R}"/tmp/nexmon
21
21
22 # Set script Root
22 # Set script Root
23 NEXMON_ROOT="${R}"/tmp/nexmon
23 NEXMON_ROOT="${R}"/tmp/nexmon
24
24
25 # Remove temporary directory for nexmon sources
25 # Remove temporary directory for nexmon sources
26 rm -fr "${temp_dir}"
26 rm -fr "${temp_dir}"
27
27
28 # Build nexmon firmware outside the build system, if we can.
28 # Build nexmon firmware outside the build system, if we can.
29 cd "${NEXMON_ROOT}"
29 cd "${NEXMON_ROOT}"
30
30
31 # Disable statistics
31 # Disable statistics
32 touch DISABLE_STATISTICS
32 touch DISABLE_STATISTICS
33
33
34 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
34 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
35 #ARCH="${KERNEL_ARCH}"
35 #ARCH="${KERNEL_ARCH}"
36 #SUBARCH="${KERNEL_ARCH}"
36 #SUBARCH="${KERNEL_ARCH}"
37 #KERNEL="${KERNEL_IMAGE}"
37 #KERNEL="${KERNEL_IMAGE}"
38 #CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
38 #CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
39 #CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
39 #CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
40 #ZLIBFLATE="zlib-flate -compress"
40 #ZLIBFLATE="zlib-flate -compress"
41 #Q=@
41 #Q=@
42 #NEXMON_SETUP_ENV=1
42 #NEXMON_SETUP_ENV=1
43 . ./setup_env.sh
43 . ./setup_env.sh
44
44
45 # Make nexmon
45 # Make nexmon
46 make
46 make
47
47
48 # Make ancient isl build
48 # Make ancient isl build
49 cd buildtools/isl-0.10
49 cd buildtools/isl-0.10
50 CC=$CCgcc
50 CC="${CC}"gcc
51 ./configure
51 ./configure
52 make
52 make
53
53
54 # build patches
54 # build patches
55 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
55 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
56 cd ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon
56 cd ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon
57 make clean
57 make clean
58
58
59 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
59 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
60 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-
60 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-
61
61
62 # copy RPi0W & RPi3 firmware
62 # copy RPi0W & RPi3 firmware
63 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
63 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
64 cp ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
64 cp ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
65 cp -f ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
65 cp -f ${NEXMON_ROOT}/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
66 fi
66 fi
67
67
68 if [ "$RPI_MODEL" = 3P ] ; then
68 if [ "$RPI_MODEL" = 3P ] ; then
69 cd ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon
69 cd ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon
70 make clean
70 make clean
71
71
72 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
72 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
73 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-
73 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-
74
74
75 # RPi3B+ firmware
75 # RPi3B+ firmware
76 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
76 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
77 cp ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
77 cp ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
78 cp -f ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
78 cp -f ${NEXMON_ROOT}/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
79 fi
79 fi
80
80
81 #Revert to previous directory
81 #Revert to previous directory
82 cd "${WORKDIR}"
82 cd "${WORKDIR}"
83
83
84 fi
84 fi
@@ -1,842 +1,843
1 #!/bin/sh
1 #!/bin/sh
2 ########################################################################
2 ########################################################################
3 # rpi23-gen-image.sh 2015-2017
3 # rpi23-gen-image.sh 2015-2017
4 #
4 #
5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
6 #
6 #
7 # This program is free software; you can redistribute it and/or
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
10 # of the License, or (at your option) any later version.
11 #
11 #
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
13 #
13 #
14 # Big thanks for patches and enhancements by 20+ github contributors!
14 # Big thanks for patches and enhancements by 20+ github contributors!
15 ########################################################################
15 ########################################################################
16
16
17 # Are we running as root?
17 # Are we running as root?
18 if [ "$(id -u)" -ne "0" ] ; then
18 if [ "$(id -u)" -ne "0" ] ; then
19 echo "error: this script must be executed with root privileges!"
19 echo "error: this script must be executed with root privileges!"
20 exit 1
20 exit 1
21 fi
21 fi
22
22
23 # Check if ./functions.sh script exists
23 # Check if ./functions.sh script exists
24 if [ ! -r "./functions.sh" ] ; then
24 if [ ! -r "./functions.sh" ] ; then
25 echo "error: './functions.sh' required script not found!"
25 echo "error: './functions.sh' required script not found!"
26 exit 1
26 exit 1
27 fi
27 fi
28
28
29 # Load utility functions
29 # Load utility functions
30 . ./functions.sh
30 . ./functions.sh
31
31
32 # Load parameters from configuration template file
32 # Load parameters from configuration template file
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
34 use_template
34 use_template
35 fi
35 fi
36
36
37 # Introduce settings
37 # Introduce settings
38 set -e
38 set -e
39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
40 set -x
40 set -x
41
41
42 # Raspberry Pi model configuration
42 # Raspberry Pi model configuration
43 RPI_MODEL=${RPI_MODEL:=2}
43 RPI_MODEL=${RPI_MODEL:=2}
44
44
45 # Debian release
45 # Debian release
46 RELEASE=${RELEASE:=buster}
46 RELEASE=${RELEASE:=buster}
47
47
48 # Kernel Branch
48 # Kernel Branch
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
50
50
51 # URLs
51 # URLs
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
59 #BIS= Kernel has KVM and zswap enabled
59 #BIS= Kernel has KVM and zswap enabled
60 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.14.80.20181113/bcmrpi3-kernel-bis-4.14.80.20181113.tar.xz}
60 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.14.80.20181113/bcmrpi3-kernel-bis-4.14.80.20181113.tar.xz}
61 #default bcmrpi3_defconfig target kernel
61 #default bcmrpi3_defconfig target kernel
62 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.14.80.20181113/bcmrpi3-kernel-4.14.80.20181113.tar.xz}
62 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.14.80.20181113/bcmrpi3-kernel-4.14.80.20181113.tar.xz}
63 #enhanced kernel
63 #enhanced kernel
64 RPI3_64_KERNEL_URL=${RPI3_64_KERNEL_URL:=$RPI3_64_BIS_KERNEL_URL}
64 RPI3_64_KERNEL_URL=${RPI3_64_KERNEL_URL:=$RPI3_64_BIS_KERNEL_URL}
65 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
65 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
66 NEXMON_URL=${NEXMON_URL:=https://github.com/seemoo-lab/nexmon.git}
66 NEXMON_URL=${NEXMON_URL:=https://github.com/seemoo-lab/nexmon.git}
67
67
68 # Build directories
68 # Build directories
69 WORKDIR=$(pwd)
69 WORKDIR=$(pwd)
70 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
70 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
71 BUILDDIR="${BASEDIR}/build"
71 BUILDDIR="${BASEDIR}/build"
72
72
73 # Chroot directories
73 # Chroot directories
74 R="${BUILDDIR}/chroot"
74 R="${BUILDDIR}/chroot"
75 ETC_DIR="${R}/etc"
75 ETC_DIR="${R}/etc"
76 LIB_DIR="${R}/lib"
76 LIB_DIR="${R}/lib"
77 BOOT_DIR="${R}/boot/firmware"
77 BOOT_DIR="${R}/boot/firmware"
78 KERNEL_DIR="${R}/usr/src/linux"
78 KERNEL_DIR="${R}/usr/src/linux"
79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
80 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
80 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
81
81
82 # Firmware directory: Blank if download from github
82 # Firmware directory: Blank if download from github
83 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
83 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
84
84
85 # General settings
85 # General settings
86 SET_ARCH=${SET_ARCH:=32}
86 SET_ARCH=${SET_ARCH:=32}
87 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
87 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
88 PASSWORD=${PASSWORD:=raspberry}
88 PASSWORD=${PASSWORD:=raspberry}
89 USER_PASSWORD=${USER_PASSWORD:=raspberry}
89 USER_PASSWORD=${USER_PASSWORD:=raspberry}
90 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
90 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
91 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
91 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
92 EXPANDROOT=${EXPANDROOT:=true}
92 EXPANDROOT=${EXPANDROOT:=true}
93
93
94 # Keyboard settings
94 # Keyboard settings
95 XKB_MODEL=${XKB_MODEL:=""}
95 XKB_MODEL=${XKB_MODEL:=""}
96 XKB_LAYOUT=${XKB_LAYOUT:=""}
96 XKB_LAYOUT=${XKB_LAYOUT:=""}
97 XKB_VARIANT=${XKB_VARIANT:=""}
97 XKB_VARIANT=${XKB_VARIANT:=""}
98 XKB_OPTIONS=${XKB_OPTIONS:=""}
98 XKB_OPTIONS=${XKB_OPTIONS:=""}
99
99
100 # Network settings (DHCP)
100 # Network settings (DHCP)
101 ENABLE_DHCP=${ENABLE_DHCP:=true}
101 ENABLE_DHCP=${ENABLE_DHCP:=true}
102
102
103 # Network settings (static)
103 # Network settings (static)
104 NET_ADDRESS=${NET_ADDRESS:=""}
104 NET_ADDRESS=${NET_ADDRESS:=""}
105 NET_GATEWAY=${NET_GATEWAY:=""}
105 NET_GATEWAY=${NET_GATEWAY:=""}
106 NET_DNS_1=${NET_DNS_1:=""}
106 NET_DNS_1=${NET_DNS_1:=""}
107 NET_DNS_2=${NET_DNS_2:=""}
107 NET_DNS_2=${NET_DNS_2:=""}
108 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
108 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
109 NET_NTP_1=${NET_NTP_1:=""}
109 NET_NTP_1=${NET_NTP_1:=""}
110 NET_NTP_2=${NET_NTP_2:=""}
110 NET_NTP_2=${NET_NTP_2:=""}
111
111
112 # APT settings
112 # APT settings
113 APT_PROXY=${APT_PROXY:=""}
113 APT_PROXY=${APT_PROXY:=""}
114 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
114 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
115
115
116 # Feature settings
116 # Feature settings
117 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
117 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
118 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
118 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
119 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
119 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
120 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
120 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
121 ENABLE_I2C=${ENABLE_I2C:=false}
121 ENABLE_I2C=${ENABLE_I2C:=false}
122 ENABLE_SPI=${ENABLE_SPI:=false}
122 ENABLE_SPI=${ENABLE_SPI:=false}
123 ENABLE_IPV6=${ENABLE_IPV6:=true}
123 ENABLE_IPV6=${ENABLE_IPV6:=true}
124 ENABLE_SSHD=${ENABLE_SSHD:=true}
124 ENABLE_SSHD=${ENABLE_SSHD:=true}
125 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
125 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
126 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
126 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
127 ENABLE_SOUND=${ENABLE_SOUND:=true}
127 ENABLE_SOUND=${ENABLE_SOUND:=true}
128 ENABLE_DBUS=${ENABLE_DBUS:=true}
128 ENABLE_DBUS=${ENABLE_DBUS:=true}
129 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
129 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
130 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
130 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
131 ENABLE_XORG=${ENABLE_XORG:=false}
131 ENABLE_XORG=${ENABLE_XORG:=false}
132 ENABLE_WM=${ENABLE_WM:=""}
132 ENABLE_WM=${ENABLE_WM:=""}
133 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
133 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
134 ENABLE_USER=${ENABLE_USER:=true}
134 ENABLE_USER=${ENABLE_USER:=true}
135 USER_NAME=${USER_NAME:="pi"}
135 USER_NAME=${USER_NAME:="pi"}
136 ENABLE_ROOT=${ENABLE_ROOT:=false}
136 ENABLE_ROOT=${ENABLE_ROOT:=false}
137 ENABLE_QEMU=${ENABLE_QEMU:=false}
137 ENABLE_QEMU=${ENABLE_QEMU:=false}
138 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
138 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
139
139
140 # SSH settings
140 # SSH settings
141 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
141 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
142 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
142 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
143 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
143 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
144 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
144 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
145 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
145 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
146
146
147 # Advanced settings
147 # Advanced settings
148 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
148 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
149 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
149 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
150 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
150 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
151 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
151 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
152 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
152 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
153 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
153 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
154 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
154 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
155 ENABLE_NEXMON=${ENABLE_NEXMON:="false"}
155 ENABLE_NEXMON=${ENABLE_NEXMON:="false"}
156 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
156 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
157 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
157 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
158 NEXMON_DIR=${NEXMON_DIR:=""}
158 NEXMON_DIR=${NEXMON_DIR:=""}
159 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
159 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
160 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
160 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
161 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
161 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
162 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
162 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
163 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
163 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
164 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
164 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
165
165
166 # Kernel compilation settings
166 # Kernel compilation settings
167 BUILD_KERNEL=${BUILD_KERNEL:=true}
167 BUILD_KERNEL=${BUILD_KERNEL:=true}
168 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
168 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
169 KERNEL_THREADS=${KERNEL_THREADS:=1}
169 KERNEL_THREADS=${KERNEL_THREADS:=1}
170 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
170 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
171 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
171 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
172 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
172 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
173 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
173 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
174 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
174 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
175 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
175 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
176 KERNEL_VIRT=${KERNEL_VIRT:=false}
176 KERNEL_VIRT=${KERNEL_VIRT:=false}
177 KERNEL_BPF=${KERNEL_BPF:=false}
177 KERNEL_BPF=${KERNEL_BPF:=false}
178 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=POWERSAVE}
178
179
179 # Kernel compilation from source directory settings
180 # Kernel compilation from source directory settings
180 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
181 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
181 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
182 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
182 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
183 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
183 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
184 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
184
185
185 # Reduce disk usage settings
186 # Reduce disk usage settings
186 REDUCE_APT=${REDUCE_APT:=true}
187 REDUCE_APT=${REDUCE_APT:=true}
187 REDUCE_DOC=${REDUCE_DOC:=true}
188 REDUCE_DOC=${REDUCE_DOC:=true}
188 REDUCE_MAN=${REDUCE_MAN:=true}
189 REDUCE_MAN=${REDUCE_MAN:=true}
189 REDUCE_VIM=${REDUCE_VIM:=false}
190 REDUCE_VIM=${REDUCE_VIM:=false}
190 REDUCE_BASH=${REDUCE_BASH:=false}
191 REDUCE_BASH=${REDUCE_BASH:=false}
191 REDUCE_HWDB=${REDUCE_HWDB:=true}
192 REDUCE_HWDB=${REDUCE_HWDB:=true}
192 REDUCE_SSHD=${REDUCE_SSHD:=true}
193 REDUCE_SSHD=${REDUCE_SSHD:=true}
193 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
194 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
194
195
195 # Encrypted filesystem settings
196 # Encrypted filesystem settings
196 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
197 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
197 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
198 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
198 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
199 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
199 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
200 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
200 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
201 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
201 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
202 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
202 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
203 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
203 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
204 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
204 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
205 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
205
206
206 # Chroot scripts directory
207 # Chroot scripts directory
207 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
208 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
208
209
209 # Packages required in the chroot build environment
210 # Packages required in the chroot build environment
210 APT_INCLUDES=${APT_INCLUDES:=""}
211 APT_INCLUDES=${APT_INCLUDES:=""}
211 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup,libnss-systemd"
212 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup,libnss-systemd"
212
213
213 #Packages to exclude from chroot build environment
214 #Packages to exclude from chroot build environment
214 APT_EXCLUDES=${APT_EXCLUDES:=""}
215 APT_EXCLUDES=${APT_EXCLUDES:=""}
215
216
216 # Packages required for bootstrapping
217 # Packages required for bootstrapping
217 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo netselect-apt"
218 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo netselect-apt"
218 MISSING_PACKAGES=""
219 MISSING_PACKAGES=""
219
220
220 # Packages installed for c/c++ build environment in chroot (keep empty)
221 # Packages installed for c/c++ build environment in chroot (keep empty)
221 COMPILER_PACKAGES=""
222 COMPILER_PACKAGES=""
222
223
223 set +x
224 set +x
224
225
225 #Check if apt-cacher-ng has port 3142 open and set APT_PROXY
226 #Check if apt-cacher-ng has port 3142 open and set APT_PROXY
226 APT_CACHER_RUNNING=$(lsof -i :3142 | grep apt-cacher-ng | cut -d ' ' -f3 | uniq)
227 APT_CACHER_RUNNING=$(lsof -i :3142 | grep apt-cacher-ng | cut -d ' ' -f3 | uniq)
227 if [ -n "${APT_CACHER_RUNNING}" ] ; then
228 if [ -n "${APT_CACHER_RUNNING}" ] ; then
228 APT_PROXY=http://127.0.0.1:3142/
229 APT_PROXY=http://127.0.0.1:3142/
229 fi
230 fi
230
231
231 #netselect-apt does not know buster yet
232 #netselect-apt does not know buster yet
232 if [ "$RELEASE" = "buster" ] ; then
233 if [ "$RELEASE" = "buster" ] ; then
233 RLS=testing
234 RLS=testing
234 else
235 else
235 RLS="$RELEASE"
236 RLS="$RELEASE"
236 fi
237 fi
237
238
238 if [ -f "$(pwd)/files/apt/sources.list" ] ; then
239 if [ -f "$(pwd)/files/apt/sources.list" ] ; then
239 rm "$(pwd)/files/apt/sources.list"
240 rm "$(pwd)/files/apt/sources.list"
240 fi
241 fi
241
242
242 if [ "$ENABLE_NONFREE" = true ] ; then
243 if [ "$ENABLE_NONFREE" = true ] ; then
243 netselect-apt --arch "$RELEASE_ARCH" --tests 10 --sources --nonfree --outfile "$(pwd)/files/apt/sources.list" -d "$RLS"
244 netselect-apt --arch "$RELEASE_ARCH" --tests 10 --sources --nonfree --outfile "$(pwd)/files/apt/sources.list" -d "$RLS"
244 else
245 else
245 netselect-apt --arch "$RELEASE_ARCH" --tests 10 --sources --outfile "$(pwd)/files/apt/sources.list" -d "$RLS"
246 netselect-apt --arch "$RELEASE_ARCH" --tests 10 --sources --outfile "$(pwd)/files/apt/sources.list" -d "$RLS"
246 fi
247 fi
247
248
248 #sed and cut the result string so we can use it as APT_SERVER
249 #sed and cut the result string so we can use it as APT_SERVER
249 APT_SERVER=$(grep -m 1 http files/apt/sources.list | sed "s|http://| |g" | cut -d ' ' -f 3 | sed 's|/$|''|')
250 APT_SERVER=$(grep -m 1 http files/apt/sources.list | sed "s|http://| |g" | cut -d ' ' -f 3 | sed 's|/$|''|')
250
251
251 #make script easier and more stable to use with convenient setup switch. Just setup SET_ARCH and RPI_MODEL and your good to go!
252 #make script easier and more stable to use with convenient setup switch. Just setup SET_ARCH and RPI_MODEL and your good to go!
252 if [ -n "$SET_ARCH" ] ; then
253 if [ -n "$SET_ARCH" ] ; then
253 # 64 bit configuration
254 # 64 bit configuration
254 if [ "$SET_ARCH" = 64 ] ; then
255 if [ "$SET_ARCH" = 64 ] ; then
255 # General 64 bit depended settings
256 # General 64 bit depended settings
256 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
257 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
257 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
258 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
258 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
259 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
259
260
260 # Board specific settings
261 # Board specific settings
261 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
262 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
262 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
263 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
263 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
264 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
264 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
265 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
265 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
266 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
266 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
267 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
267 else
268 else
268 echo "error: Only Raspberry PI 3 and 3B+ support 64 bit"
269 echo "error: Only Raspberry PI 3 and 3B+ support 64 bit"
269 exit 1
270 exit 1
270 fi
271 fi
271 fi
272 fi
272
273
273 # 32 bit configuration
274 # 32 bit configuration
274 if [ "$SET_ARCH" = 32 ] ; then
275 if [ "$SET_ARCH" = 32 ] ; then
275 # General 32 bit dependend settings
276 # General 32 bit dependend settings
276 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
277 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
277 KERNEL_ARCH=${KERNEL_ARCH:=arm}
278 KERNEL_ARCH=${KERNEL_ARCH:=arm}
278 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
279 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
279
280
280 # Hardware specific settings
281 # Hardware specific settings
281 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
282 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
282 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
283 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
283 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
284 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
284 RELEASE_ARCH=${RELEASE_ARCH:=armel}
285 RELEASE_ARCH=${RELEASE_ARCH:=armel}
285 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
286 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
286 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
287 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
287 fi
288 fi
288
289
289 # Hardware specific settings
290 # Hardware specific settings
290 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
291 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
291 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
292 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
292 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
293 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
293 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
294 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
294 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
295 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
295 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
296 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
296 fi
297 fi
297 fi
298 fi
298 #SET_ARCH not set
299 #SET_ARCH not set
299 else
300 else
300 echo "error: Please set '32' or '64' as value for SET_ARCH"
301 echo "error: Please set '32' or '64' as value for SET_ARCH"
301 exit 1
302 exit 1
302 fi
303 fi
303 # Device specific configuration and U-Boot configuration
304 # Device specific configuration and U-Boot configuration
304 case "$RPI_MODEL" in
305 case "$RPI_MODEL" in
305 0)
306 0)
306 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
307 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
307 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
308 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
308 ;;
309 ;;
309 1)
310 1)
310 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
311 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
311 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
312 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
312 ;;
313 ;;
313 1P)
314 1P)
314 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
315 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
315 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
316 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
316 ;;
317 ;;
317 2)
318 2)
318 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
319 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
319 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
320 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
320 ;;
321 ;;
321 3)
322 3)
322 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
323 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
323 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
324 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
324 ;;
325 ;;
325 3P)
326 3P)
326 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
327 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
327 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
328 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
328 ;;
329 ;;
329 *)
330 *)
330 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
331 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
331 exit 1
332 exit 1
332 ;;
333 ;;
333 esac
334 esac
334
335
335 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
336 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
336 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
337 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
337 # Include bluetooth packages on supported boards
338 # Include bluetooth packages on supported boards
338 if [ "$ENABLE_BLUETOOTH" = true ] && [ "$ENABLE_CONSOLE" = false ]; then
339 if [ "$ENABLE_BLUETOOTH" = true ] && [ "$ENABLE_CONSOLE" = false ]; then
339 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
340 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
340 fi
341 fi
341 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
342 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
342 # Check if the internal wireless interface is not supported by the RPi model
343 # Check if the internal wireless interface is not supported by the RPi model
343 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
344 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
344 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
345 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
345 exit 1
346 exit 1
346 fi
347 fi
347 fi
348 fi
348
349
349 # Prepare date string for default image file name
350 # Prepare date string for default image file name
350 DATE="$(date +%Y-%m-%d)"
351 DATE="$(date +%Y-%m-%d)"
351 if [ -z "$KERNEL_BRANCH" ] ; then
352 if [ -z "$KERNEL_BRANCH" ] ; then
352 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
353 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
353 else
354 else
354 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
355 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
355 fi
356 fi
356
357
357 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
358 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
358 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
359 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
359 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
360 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
360 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
361 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
361 exit 1
362 exit 1
362 fi
363 fi
363 fi
364 fi
364
365
365 # Add cmake to compile videocore sources
366 # Add cmake to compile videocore sources
366 if [ "$ENABLE_VIDEOCORE" = true ] ; then
367 if [ "$ENABLE_VIDEOCORE" = true ] ; then
367 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
368 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
368 fi
369 fi
369
370
370 # Add libncurses5 to enable kernel menuconfig
371 # Add libncurses5 to enable kernel menuconfig
371 if [ "$KERNEL_MENUCONFIG" = true ] ; then
372 if [ "$KERNEL_MENUCONFIG" = true ] ; then
372 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
373 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
373 fi
374 fi
374
375
375 # Add ccache compiler cache for (faster) kernel cross (re)compilation
376 # Add ccache compiler cache for (faster) kernel cross (re)compilation
376 if [ "$KERNEL_CCACHE" = true ] ; then
377 if [ "$KERNEL_CCACHE" = true ] ; then
377 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
378 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
378 fi
379 fi
379
380
380 # Add cryptsetup package to enable filesystem encryption
381 # Add cryptsetup package to enable filesystem encryption
381 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
382 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
382 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
383 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
383 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
384 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
384
385
385 #If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
386 #If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
386 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
387 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
387 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
388 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
388 fi
389 fi
389
390
390 if [ -z "$CRYPTFS_PASSWORD" ] ; then
391 if [ -z "$CRYPTFS_PASSWORD" ] ; then
391 echo "error: no password defined (CRYPTFS_PASSWORD)!"
392 echo "error: no password defined (CRYPTFS_PASSWORD)!"
392 exit 1
393 exit 1
393 fi
394 fi
394 ENABLE_INITRAMFS=true
395 ENABLE_INITRAMFS=true
395 fi
396 fi
396
397
397 # Add initramfs generation tools
398 # Add initramfs generation tools
398 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
399 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
399 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
400 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
400 fi
401 fi
401
402
402 # Add device-tree-compiler required for building the U-Boot bootloader
403 # Add device-tree-compiler required for building the U-Boot bootloader
403 if [ "$ENABLE_UBOOT" = true ] ; then
404 if [ "$ENABLE_UBOOT" = true ] ; then
404 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
405 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
405 else
406 else
406 if [ "$ENABLE_UBOOTUSB" = true ] ; then
407 if [ "$ENABLE_UBOOTUSB" = true ] ; then
407 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
408 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
408 exit 1
409 exit 1
409 fi
410 fi
410 fi
411 fi
411
412
412 # Check if root SSH (v2) public key file exists
413 # Check if root SSH (v2) public key file exists
413 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
414 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
414 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
415 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
415 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
416 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
416 exit 1
417 exit 1
417 fi
418 fi
418 fi
419 fi
419
420
420 # Check if $USER_NAME SSH (v2) public key file exists
421 # Check if $USER_NAME SSH (v2) public key file exists
421 if [ -n "$SSH_USER_PUB_KEY" ] ; then
422 if [ -n "$SSH_USER_PUB_KEY" ] ; then
422 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
423 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
423 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
424 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
424 exit 1
425 exit 1
425 fi
426 fi
426 fi
427 fi
427
428
428 # Check if all required packages are installed on the build system
429 # Check if all required packages are installed on the build system
429 for package in $REQUIRED_PACKAGES ; do
430 for package in $REQUIRED_PACKAGES ; do
430 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
431 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
431 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
432 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
432 fi
433 fi
433 done
434 done
434
435
435 # If there are missing packages ask confirmation for install, or exit
436 # If there are missing packages ask confirmation for install, or exit
436 if [ -n "$MISSING_PACKAGES" ] ; then
437 if [ -n "$MISSING_PACKAGES" ] ; then
437 echo "the following packages needed by this script are not installed:"
438 echo "the following packages needed by this script are not installed:"
438 echo "$MISSING_PACKAGES"
439 echo "$MISSING_PACKAGES"
439
440
440 printf "\ndo you want to install the missing packages right now? [y/n] "
441 printf "\ndo you want to install the missing packages right now? [y/n] "
441 read -r confirm
442 read -r confirm
442 [ "$confirm" != "y" ] && exit 1
443 [ "$confirm" != "y" ] && exit 1
443
444
444 # Make sure all missing required packages are installed
445 # Make sure all missing required packages are installed
445 apt-get -qq -y install "${MISSING_PACKAGES}"
446 apt-get -qq -y install "${MISSING_PACKAGES}"
446 fi
447 fi
447
448
448 # Check if ./bootstrap.d directory exists
449 # Check if ./bootstrap.d directory exists
449 if [ ! -d "./bootstrap.d/" ] ; then
450 if [ ! -d "./bootstrap.d/" ] ; then
450 echo "error: './bootstrap.d' required directory not found!"
451 echo "error: './bootstrap.d' required directory not found!"
451 exit 1
452 exit 1
452 fi
453 fi
453
454
454 # Check if ./files directory exists
455 # Check if ./files directory exists
455 if [ ! -d "./files/" ] ; then
456 if [ ! -d "./files/" ] ; then
456 echo "error: './files' required directory not found!"
457 echo "error: './files' required directory not found!"
457 exit 1
458 exit 1
458 fi
459 fi
459
460
460 # Check if specified KERNELSRC_DIR directory exists
461 # Check if specified KERNELSRC_DIR directory exists
461 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
462 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
462 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
463 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
463 exit 1
464 exit 1
464 fi
465 fi
465
466
466 # Check if specified UBOOTSRC_DIR directory exists
467 # Check if specified UBOOTSRC_DIR directory exists
467 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
468 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
468 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
469 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
469 exit 1
470 exit 1
470 fi
471 fi
471
472
472 # Check if specified VIDEOCORESRC_DIR directory exists
473 # Check if specified VIDEOCORESRC_DIR directory exists
473 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
474 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
474 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
475 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
475 exit 1
476 exit 1
476 fi
477 fi
477
478
478 # Check if specified FBTURBOSRC_DIR directory exists
479 # Check if specified FBTURBOSRC_DIR directory exists
479 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
480 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
480 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
481 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
481 exit 1
482 exit 1
482 fi
483 fi
483
484
484 # Check if specified NEXMON_DIR directory exists
485 # Check if specified NEXMON_DIR directory exists
485 if [ -n "$NEXMON_DIR" ] && [ ! -d "$NEXMON_DIR" ] ; then
486 if [ -n "$NEXMON_DIR" ] && [ ! -d "$NEXMON_DIR" ] ; then
486 echo "error: '${NEXMON_DIR}' specified directory not found (NEXMON_DIR)!"
487 echo "error: '${NEXMON_DIR}' specified directory not found (NEXMON_DIR)!"
487 exit 1
488 exit 1
488 fi
489 fi
489
490
490 # Check if specified CHROOT_SCRIPTS directory exists
491 # Check if specified CHROOT_SCRIPTS directory exists
491 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
492 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
492 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
493 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
493 exit 1
494 exit 1
494 fi
495 fi
495
496
496 # Check if specified device mapping already exists (will be used by cryptsetup)
497 # Check if specified device mapping already exists (will be used by cryptsetup)
497 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
498 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
498 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
499 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
499 exit 1
500 exit 1
500 fi
501 fi
501
502
502 # Don't clobber an old build
503 # Don't clobber an old build
503 if [ -e "$BUILDDIR" ] ; then
504 if [ -e "$BUILDDIR" ] ; then
504 echo "error: directory ${BUILDDIR} already exists, not proceeding"
505 echo "error: directory ${BUILDDIR} already exists, not proceeding"
505 exit 1
506 exit 1
506 fi
507 fi
507
508
508 # Setup chroot directory
509 # Setup chroot directory
509 mkdir -p "${R}"
510 mkdir -p "${R}"
510
511
511 # Check if build directory has enough of free disk space >512MB
512 # Check if build directory has enough of free disk space >512MB
512 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
513 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
513 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
514 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
514 exit 1
515 exit 1
515 fi
516 fi
516
517
517 set -x
518 set -x
518
519
519 # Call "cleanup" function on various signals and errors
520 # Call "cleanup" function on various signals and errors
520 trap cleanup 0 1 2 3 6
521 trap cleanup 0 1 2 3 6
521
522
522 # Add required packages for the minbase installation
523 # Add required packages for the minbase installation
523 if [ "$ENABLE_MINBASE" = true ] ; then
524 if [ "$ENABLE_MINBASE" = true ] ; then
524 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
525 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
525 fi
526 fi
526
527
527 # Add parted package, required to get partprobe utility
528 # Add parted package, required to get partprobe utility
528 if [ "$EXPANDROOT" = true ] ; then
529 if [ "$EXPANDROOT" = true ] ; then
529 APT_INCLUDES="${APT_INCLUDES},parted"
530 APT_INCLUDES="${APT_INCLUDES},parted"
530 fi
531 fi
531
532
532 # Add dbus package, recommended if using systemd
533 # Add dbus package, recommended if using systemd
533 if [ "$ENABLE_DBUS" = true ] ; then
534 if [ "$ENABLE_DBUS" = true ] ; then
534 APT_INCLUDES="${APT_INCLUDES},dbus"
535 APT_INCLUDES="${APT_INCLUDES},dbus"
535 fi
536 fi
536
537
537 # Add iptables IPv4/IPv6 package
538 # Add iptables IPv4/IPv6 package
538 if [ "$ENABLE_IPTABLES" = true ] ; then
539 if [ "$ENABLE_IPTABLES" = true ] ; then
539 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
540 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
540 fi
541 fi
541
542
542 # Add openssh server package
543 # Add openssh server package
543 if [ "$ENABLE_SSHD" = true ] ; then
544 if [ "$ENABLE_SSHD" = true ] ; then
544 APT_INCLUDES="${APT_INCLUDES},openssh-server"
545 APT_INCLUDES="${APT_INCLUDES},openssh-server"
545 fi
546 fi
546
547
547 # Add alsa-utils package
548 # Add alsa-utils package
548 if [ "$ENABLE_SOUND" = true ] ; then
549 if [ "$ENABLE_SOUND" = true ] ; then
549 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
550 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
550 fi
551 fi
551
552
552 # Add rng-tools package
553 # Add rng-tools package
553 if [ "$ENABLE_HWRANDOM" = true ] ; then
554 if [ "$ENABLE_HWRANDOM" = true ] ; then
554 APT_INCLUDES="${APT_INCLUDES},rng-tools"
555 APT_INCLUDES="${APT_INCLUDES},rng-tools"
555 fi
556 fi
556
557
557 # Add fbturbo video driver
558 # Add fbturbo video driver
558 if [ "$ENABLE_FBTURBO" = true ] ; then
559 if [ "$ENABLE_FBTURBO" = true ] ; then
559 # Enable xorg package dependencies
560 # Enable xorg package dependencies
560 ENABLE_XORG=true
561 ENABLE_XORG=true
561 fi
562 fi
562
563
563 # Add user defined window manager package
564 # Add user defined window manager package
564 if [ -n "$ENABLE_WM" ] ; then
565 if [ -n "$ENABLE_WM" ] ; then
565 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
566 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
566
567
567 # Enable xorg package dependencies
568 # Enable xorg package dependencies
568 ENABLE_XORG=true
569 ENABLE_XORG=true
569 fi
570 fi
570
571
571 # Add xorg package
572 # Add xorg package
572 if [ "$ENABLE_XORG" = true ] ; then
573 if [ "$ENABLE_XORG" = true ] ; then
573 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
574 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
574 fi
575 fi
575
576
576 # Replace selected packages with smaller clones
577 # Replace selected packages with smaller clones
577 if [ "$ENABLE_REDUCE" = true ] ; then
578 if [ "$ENABLE_REDUCE" = true ] ; then
578 # Add levee package instead of vim-tiny
579 # Add levee package instead of vim-tiny
579 if [ "$REDUCE_VIM" = true ] ; then
580 if [ "$REDUCE_VIM" = true ] ; then
580 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
581 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
581 fi
582 fi
582
583
583 # Add dropbear package instead of openssh-server
584 # Add dropbear package instead of openssh-server
584 if [ "$REDUCE_SSHD" = true ] ; then
585 if [ "$REDUCE_SSHD" = true ] ; then
585 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
586 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
586 fi
587 fi
587 fi
588 fi
588
589
589 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
590 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
590 if [ "$ENABLE_SYSVINIT" = false ] ; then
591 if [ "$ENABLE_SYSVINIT" = false ] ; then
591 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
592 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
592 fi
593 fi
593
594
594 # Configure kernel sources if no KERNELSRC_DIR
595 # Configure kernel sources if no KERNELSRC_DIR
595 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
596 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
596 KERNELSRC_CONFIG=true
597 KERNELSRC_CONFIG=true
597 fi
598 fi
598
599
599 # Configure reduced kernel
600 # Configure reduced kernel
600 if [ "$KERNEL_REDUCE" = true ] ; then
601 if [ "$KERNEL_REDUCE" = true ] ; then
601 KERNELSRC_CONFIG=false
602 KERNELSRC_CONFIG=false
602 fi
603 fi
603
604
604 # Configure qemu compatible kernel
605 # Configure qemu compatible kernel
605 if [ "$ENABLE_QEMU" = true ] ; then
606 if [ "$ENABLE_QEMU" = true ] ; then
606 DTB_FILE=vexpress-v2p-ca15_a7.dtb
607 DTB_FILE=vexpress-v2p-ca15_a7.dtb
607 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
608 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
608 KERNEL_DEFCONFIG="vexpress_defconfig"
609 KERNEL_DEFCONFIG="vexpress_defconfig"
609 if [ "$KERNEL_MENUCONFIG" = false ] ; then
610 if [ "$KERNEL_MENUCONFIG" = false ] ; then
610 KERNEL_OLDDEFCONFIG=true
611 KERNEL_OLDDEFCONFIG=true
611 fi
612 fi
612 fi
613 fi
613
614
614 # Execute bootstrap scripts
615 # Execute bootstrap scripts
615 for SCRIPT in bootstrap.d/*.sh; do
616 for SCRIPT in bootstrap.d/*.sh; do
616 head -n 3 "$SCRIPT"
617 head -n 3 "$SCRIPT"
617 . "$SCRIPT"
618 . "$SCRIPT"
618 done
619 done
619
620
620 ## Execute custom bootstrap scripts
621 ## Execute custom bootstrap scripts
621 if [ -d "custom.d" ] ; then
622 if [ -d "custom.d" ] ; then
622 for SCRIPT in custom.d/*.sh; do
623 for SCRIPT in custom.d/*.sh; do
623 . "$SCRIPT"
624 . "$SCRIPT"
624 done
625 done
625 fi
626 fi
626
627
627 # Execute custom scripts inside the chroot
628 # Execute custom scripts inside the chroot
628 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
629 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
629 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
630 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
630 chroot_exec /bin/bash -x <<'EOF'
631 chroot_exec /bin/bash -x <<'EOF'
631 for SCRIPT in /chroot_scripts/* ; do
632 for SCRIPT in /chroot_scripts/* ; do
632 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
633 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
633 $SCRIPT
634 $SCRIPT
634 fi
635 fi
635 done
636 done
636 EOF
637 EOF
637 rm -rf "${R}/chroot_scripts"
638 rm -rf "${R}/chroot_scripts"
638 fi
639 fi
639
640
640 # Remove c/c++ build environment from the chroot
641 # Remove c/c++ build environment from the chroot
641 chroot_remove_cc
642 chroot_remove_cc
642
643
643 # Generate required machine-id
644 # Generate required machine-id
644 MACHINE_ID=$(dbus-uuidgen)
645 MACHINE_ID=$(dbus-uuidgen)
645 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
646 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
646 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
647 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
647
648
648 # APT Cleanup
649 # APT Cleanup
649 chroot_exec apt-get -y clean
650 chroot_exec apt-get -y clean
650 chroot_exec apt-get -y autoclean
651 chroot_exec apt-get -y autoclean
651 chroot_exec apt-get -y autoremove
652 chroot_exec apt-get -y autoremove
652
653
653 # Unmount mounted filesystems
654 # Unmount mounted filesystems
654 umount -l "${R}/proc"
655 umount -l "${R}/proc"
655 umount -l "${R}/sys"
656 umount -l "${R}/sys"
656
657
657 # Clean up directories
658 # Clean up directories
658 rm -rf "${R}/run/*"
659 rm -rf "${R}/run/*"
659 rm -rf "${R}/tmp/*"
660 rm -rf "${R}/tmp/*"
660
661
661 # Clean up files
662 # Clean up files
662 rm -f "${ETC_DIR}/ssh/ssh_host_*"
663 rm -f "${ETC_DIR}/ssh/ssh_host_*"
663 rm -f "${ETC_DIR}/dropbear/dropbear_*"
664 rm -f "${ETC_DIR}/dropbear/dropbear_*"
664 rm -f "${ETC_DIR}/apt/sources.list.save"
665 rm -f "${ETC_DIR}/apt/sources.list.save"
665 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
666 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
666 rm -f "${ETC_DIR}/*-"
667 rm -f "${ETC_DIR}/*-"
667 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
668 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
668 rm -f "${ETC_DIR}/resolv.conf"
669 rm -f "${ETC_DIR}/resolv.conf"
669 rm -f "${R}/root/.bash_history"
670 rm -f "${R}/root/.bash_history"
670 rm -f "${R}/var/lib/urandom/random-seed"
671 rm -f "${R}/var/lib/urandom/random-seed"
671 rm -f "${R}/initrd.img"
672 rm -f "${R}/initrd.img"
672 rm -f "${R}/vmlinuz"
673 rm -f "${R}/vmlinuz"
673 rm -f "${R}${QEMU_BINARY}"
674 rm -f "${R}${QEMU_BINARY}"
674
675
675 if [ "$ENABLE_QEMU" = true ] ; then
676 if [ "$ENABLE_QEMU" = true ] ; then
676 # Setup QEMU directory
677 # Setup QEMU directory
677 mkdir "${BASEDIR}/qemu"
678 mkdir "${BASEDIR}/qemu"
678
679
679 # Copy kernel image to QEMU directory
680 # Copy kernel image to QEMU directory
680 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
681 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
681
682
682 # Copy kernel config to QEMU directory
683 # Copy kernel config to QEMU directory
683 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
684 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
684
685
685 # Copy kernel dtbs to QEMU directory
686 # Copy kernel dtbs to QEMU directory
686 for dtb in "${BOOT_DIR}/"*.dtb ; do
687 for dtb in "${BOOT_DIR}/"*.dtb ; do
687 if [ -f "${dtb}" ] ; then
688 if [ -f "${dtb}" ] ; then
688 install_readonly "${dtb}" "${BASEDIR}/qemu/"
689 install_readonly "${dtb}" "${BASEDIR}/qemu/"
689 fi
690 fi
690 done
691 done
691
692
692 # Copy kernel overlays to QEMU directory
693 # Copy kernel overlays to QEMU directory
693 if [ -d "${BOOT_DIR}/overlays" ] ; then
694 if [ -d "${BOOT_DIR}/overlays" ] ; then
694 # Setup overlays dtbs directory
695 # Setup overlays dtbs directory
695 mkdir "${BASEDIR}/qemu/overlays"
696 mkdir "${BASEDIR}/qemu/overlays"
696
697
697 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
698 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
698 if [ -f "${dtb}" ] ; then
699 if [ -f "${dtb}" ] ; then
699 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
700 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
700 fi
701 fi
701 done
702 done
702 fi
703 fi
703
704
704 # Copy u-boot files to QEMU directory
705 # Copy u-boot files to QEMU directory
705 if [ "$ENABLE_UBOOT" = true ] ; then
706 if [ "$ENABLE_UBOOT" = true ] ; then
706 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
707 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
707 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
708 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
708 fi
709 fi
709 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
710 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
710 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
711 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
711 fi
712 fi
712 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
713 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
713 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
714 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
714 fi
715 fi
715 fi
716 fi
716
717
717 # Copy initramfs to QEMU directory
718 # Copy initramfs to QEMU directory
718 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
719 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
719 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
720 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
720 fi
721 fi
721 fi
722 fi
722
723
723 # Calculate size of the chroot directory in KB
724 # Calculate size of the chroot directory in KB
724 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
725 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
725
726
726 # Calculate the amount of needed 512 Byte sectors
727 # Calculate the amount of needed 512 Byte sectors
727 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
728 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
728 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
729 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
729 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
730 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
730
731
731 # The root partition is EXT4
732 # The root partition is EXT4
732 # This means more space than the actual used space of the chroot is used.
733 # This means more space than the actual used space of the chroot is used.
733 # As overhead for journaling and reserved blocks 35% are added.
734 # As overhead for journaling and reserved blocks 35% are added.
734 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
735 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
735
736
736 # Calculate required image size in 512 Byte sectors
737 # Calculate required image size in 512 Byte sectors
737 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
738 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
738
739
739 # Prepare image file
740 # Prepare image file
740 if [ "$ENABLE_SPLITFS" = true ] ; then
741 if [ "$ENABLE_SPLITFS" = true ] ; then
741 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
742 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
742 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
743 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
743 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
744 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
744 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
745 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
745
746
746 # Write firmware/boot partition tables
747 # Write firmware/boot partition tables
747 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
748 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
748 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
749 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
749 EOM
750 EOM
750
751
751 # Write root partition table
752 # Write root partition table
752 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
753 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
753 ${TABLE_SECTORS},${ROOT_SECTORS},83
754 ${TABLE_SECTORS},${ROOT_SECTORS},83
754 EOM
755 EOM
755
756
756 # Setup temporary loop devices
757 # Setup temporary loop devices
757 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
758 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
758 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
759 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
759 else # ENABLE_SPLITFS=false
760 else # ENABLE_SPLITFS=false
760 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
761 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
761 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
762 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
762
763
763 # Write partition table
764 # Write partition table
764 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
765 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
765 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
766 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
766 ${ROOT_OFFSET},${ROOT_SECTORS},83
767 ${ROOT_OFFSET},${ROOT_SECTORS},83
767 EOM
768 EOM
768
769
769 # Setup temporary loop devices
770 # Setup temporary loop devices
770 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
771 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
771 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
772 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
772 fi
773 fi
773
774
774 if [ "$ENABLE_CRYPTFS" = true ] ; then
775 if [ "$ENABLE_CRYPTFS" = true ] ; then
775 # Create dummy ext4 fs
776 # Create dummy ext4 fs
776 mkfs.ext4 "$ROOT_LOOP"
777 mkfs.ext4 "$ROOT_LOOP"
777
778
778 # Setup password keyfile
779 # Setup password keyfile
779 touch .password
780 touch .password
780 chmod 600 .password
781 chmod 600 .password
781 echo -n ${CRYPTFS_PASSWORD} > .password
782 echo -n ${CRYPTFS_PASSWORD} > .password
782
783
783 # Initialize encrypted partition
784 # Initialize encrypted partition
784 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
785 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
785
786
786 # Open encrypted partition and setup mapping
787 # Open encrypted partition and setup mapping
787 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
788 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
788
789
789 # Secure delete password keyfile
790 # Secure delete password keyfile
790 shred -zu .password
791 shred -zu .password
791
792
792 # Update temporary loop device
793 # Update temporary loop device
793 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
794 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
794
795
795 # Wipe encrypted partition (encryption cipher is used for randomness)
796 # Wipe encrypted partition (encryption cipher is used for randomness)
796 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
797 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
797 fi
798 fi
798
799
799 # Build filesystems
800 # Build filesystems
800 mkfs.vfat "$FRMW_LOOP"
801 mkfs.vfat "$FRMW_LOOP"
801 mkfs.ext4 "$ROOT_LOOP"
802 mkfs.ext4 "$ROOT_LOOP"
802
803
803 # Mount the temporary loop devices
804 # Mount the temporary loop devices
804 mkdir -p "$BUILDDIR/mount"
805 mkdir -p "$BUILDDIR/mount"
805 mount "$ROOT_LOOP" "$BUILDDIR/mount"
806 mount "$ROOT_LOOP" "$BUILDDIR/mount"
806
807
807 mkdir -p "$BUILDDIR/mount/boot/firmware"
808 mkdir -p "$BUILDDIR/mount/boot/firmware"
808 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
809 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
809
810
810 # Copy all files from the chroot to the loop device mount point directory
811 # Copy all files from the chroot to the loop device mount point directory
811 rsync -a "${R}/" "$BUILDDIR/mount/"
812 rsync -a "${R}/" "$BUILDDIR/mount/"
812
813
813 # Unmount all temporary loop devices and mount points
814 # Unmount all temporary loop devices and mount points
814 cleanup
815 cleanup
815
816
816 # Create block map file(s) of image(s)
817 # Create block map file(s) of image(s)
817 if [ "$ENABLE_SPLITFS" = true ] ; then
818 if [ "$ENABLE_SPLITFS" = true ] ; then
818 # Create block map files for "bmaptool"
819 # Create block map files for "bmaptool"
819 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
820 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
820 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
821 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
821
822
822 # Image was successfully created
823 # Image was successfully created
823 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
824 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
824 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
825 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
825 else
826 else
826 # Create block map file for "bmaptool"
827 # Create block map file for "bmaptool"
827 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
828 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
828
829
829 # Image was successfully created
830 # Image was successfully created
830 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
831 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
831
832
832 # Create qemu qcow2 image
833 # Create qemu qcow2 image
833 if [ "$ENABLE_QEMU" = true ] ; then
834 if [ "$ENABLE_QEMU" = true ] ; then
834 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
835 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
835 QEMU_SIZE=16G
836 QEMU_SIZE=16G
836
837
837 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
838 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
838 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
839 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
839
840
840 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
841 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
841 fi
842 fi
842 fi
843 fi
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant