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