##// END OF EJS Templates
Added: KEEP_APT_PROXY
drtyhlpr -
r538:782219f11ef8
parent child
Show More
@@ -1,532 +1,535
1 # rpi23-gen-image
1 # rpi23-gen-image
2 ## Introduction
2 ## Introduction
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for all Raspberry Pi computers. The script at this time supports the bootstrapping of the Debian (armhf/armel) releases `stretch` and `buster`. Raspberry Pi 0/1/2/3 images are generated for 32-bit mode only. Raspberry Pi 3 supports 64-bit images that can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for all Raspberry Pi computers. The script at this time supports the bootstrapping of the Debian (armhf/armel) releases `stretch` and `buster`. Raspberry Pi 0/1/2/3 images are generated for 32-bit mode only. Raspberry Pi 3 supports 64-bit images that can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
4
4
5 ## Build dependencies
5 ## Build dependencies
6 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
6 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
7
7
8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
9
9
10 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the Raspberry 3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf/armel) cross-compiler toolchain.
10 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the Raspberry 3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf/armel) cross-compiler toolchain.
11
11
12 The script has been tested using the default `crossbuild-essential-armhf` and `crossbuild-essential-armel` toolchain meta packages on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
12 The script has been tested using the default `crossbuild-essential-armhf` and `crossbuild-essential-armel` toolchain meta packages on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
13
13
14 ## Command-line parameters
14 ## Command-line parameters
15 The script accepts certain command-line parameters to enable or disable specific OS features, services and configuration settings. These parameters are passed to the `rpi23-gen-image.sh` script via (simple) shell-variables. Unlike environment shell-variables (simple) shell-variables are defined at the beginning of the command-line call of the `rpi23-gen-image.sh` script.
15 The script accepts certain command-line parameters to enable or disable specific OS features, services and configuration settings. These parameters are passed to the `rpi23-gen-image.sh` script via (simple) shell-variables. Unlike environment shell-variables (simple) shell-variables are defined at the beginning of the command-line call of the `rpi23-gen-image.sh` script.
16
16
17 ##### Command-line examples:
17 ##### Command-line examples:
18 ```shell
18 ```shell
19 ENABLE_UBOOT=true ./rpi23-gen-image.sh
19 ENABLE_UBOOT=true ./rpi23-gen-image.sh
20 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
20 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
21 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
21 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
22 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
22 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
23 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
23 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
24 ENABLE_MINBASE=true ./rpi23-gen-image.sh
24 ENABLE_MINBASE=true ./rpi23-gen-image.sh
25 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
25 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
26 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
26 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
27 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
27 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
28 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
28 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
29 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
29 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
30 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
30 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
31 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
31 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
32 ```
32 ```
33
33
34 ## Configuration template files
34 ## Configuration template files
35 To avoid long lists of command-line parameters and to help to store the favourite parameter configurations the `rpi23-gen-image.sh` script supports so called configuration template files (`CONFIG_TEMPLATE`=template). These are simple text files located in the `./templates` directory that contain the list of configuration parameters that will be used. New configuration template files can be added to the `./templates` directory.
35 To avoid long lists of command-line parameters and to help to store the favourite parameter configurations the `rpi23-gen-image.sh` script supports so called configuration template files (`CONFIG_TEMPLATE`=template). These are simple text files located in the `./templates` directory that contain the list of configuration parameters that will be used. New configuration template files can be added to the `./templates` directory.
36
36
37 ##### Command-line examples:
37 ##### Command-line examples:
38 ```shell
38 ```shell
39 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
39 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
40 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
40 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
41 ```
41 ```
42
42
43 ## Supported parameters and settings
43 ## Supported parameters and settings
44 #### APT settings:
44 #### APT settings:
45 ##### `APT_SERVER`="ftp.debian.org"
45 ##### `APT_SERVER`="ftp.debian.org"
46 Set Debian packages server address. Choose a server from the list of Debian worldwide [mirror sites](https://www.debian.org/mirror/list). Using a nearby server will probably speed-up all required downloads within the bootstrapping process.
46 Set Debian packages server address. Choose a server from the list of Debian worldwide [mirror sites](https://www.debian.org/mirror/list). Using a nearby server will probably speed-up all required downloads within the bootstrapping process.
47
47
48 ##### `APT_PROXY`=""
48 ##### `APT_PROXY`=""
49 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will speed-up the bootstrapping process because all required Debian packages will only be downloaded from the Debian mirror site once. If `apt-cacher-ng` is running on default `http://127.0.0.1:3142` it is autodetected and you don't need to set this.
49 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will speed-up the bootstrapping process because all required Debian packages will only be downloaded from the Debian mirror site once. If `apt-cacher-ng` is running on default `http://127.0.0.1:3142` it is autodetected and you don't need to set this.
50
50
51 ##### `KEEP_APT_PROXY`=false
52 Keep the APT_PROXY settings used in the bootsrapping process in the generated image.
53
51 ##### `APT_INCLUDES`=""
54 ##### `APT_INCLUDES`=""
52 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
55 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
53
56
54 ##### `APT_INCLUDES_LATE`=""
57 ##### `APT_INCLUDES_LATE`=""
55 A comma-separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
58 A comma-separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
56
59
57 ---
60 ---
58
61
59 #### General system settings:
62 #### General system settings:
60 ##### `SET_ARCH`=32
63 ##### `SET_ARCH`=32
61 Set Architecture to default 32bit. If you want to compile 64-bit (RPI3 or RPI3+) set it to `64`. This option will set every needed cross-compiler or board specific option for a successful build.
64 Set Architecture to default 32bit. If you want to compile 64-bit (RPI3 or RPI3+) set it to `64`. This option will set every needed cross-compiler or board specific option for a successful build.
62
65
63 ##### `RPI_MODEL`=2
66 ##### `RPI_MODEL`=2
64 Specify the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
67 Specify the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
65 - `0` = Raspberry Pi 0 and Raspberry Pi 0 W
68 - `0` = Raspberry Pi 0 and Raspberry Pi 0 W
66 - `1` = Raspberry Pi 1 model A and B
69 - `1` = Raspberry Pi 1 model A and B
67 - `1P` = Raspberry Pi 1 model B+ and A+
70 - `1P` = Raspberry Pi 1 model B+ and A+
68 - `2` = Raspberry Pi 2 model B
71 - `2` = Raspberry Pi 2 model B
69 - `3` = Raspberry Pi 3 model B
72 - `3` = Raspberry Pi 3 model B
70 - `3P` = Raspberry Pi 3 model B+
73 - `3P` = Raspberry Pi 3 model B+
71
74
72 ##### `RELEASE`="buster"
75 ##### `RELEASE`="buster"
73 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
76 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
74
77
75 ##### `RELEASE_ARCH`="armhf"
78 ##### `RELEASE_ARCH`="armhf"
76 Set the desired Debian release architecture.
79 Set the desired Debian release architecture.
77
80
78 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
81 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
79 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
82 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
80
83
81 ##### `PASSWORD`="raspberry"
84 ##### `PASSWORD`="raspberry"
82 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
85 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
83
86
84 ##### `USER_PASSWORD`="raspberry"
87 ##### `USER_PASSWORD`="raspberry"
85 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
88 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
86
89
87 ##### `DEFLOCAL`="en_US.UTF-8"
90 ##### `DEFLOCAL`="en_US.UTF-8"
88 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
91 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
89
92
90 ##### `TIMEZONE`="Europe/Berlin"
93 ##### `TIMEZONE`="Europe/Berlin"
91 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
94 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
92
95
93 ##### `EXPANDROOT`=true
96 ##### `EXPANDROOT`=true
94 Expand the root partition and filesystem automatically on first boot.
97 Expand the root partition and filesystem automatically on first boot.
95
98
96 ##### `ENABLE_QEMU`=false
99 ##### `ENABLE_QEMU`=false
97 Generate kernel (`vexpress_defconfig`), file system image (`qcow2`) and DTB files that can be used for QEMU full system emulation (`vexpress-A15`). The output files are stored in the `$(pwd)/images/qemu` directory. You can find more information about running the generated image in the QEMU section of this readme file.
100 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.
98
101
99 ---
102 ---
100
103
101 #### Keyboard settings:
104 #### Keyboard settings:
102 These options are used to configure keyboard layout in `/etc/default/keyboard` for console and Xorg. These settings can also be changed inside the running OS using the `dpkg-reconfigure keyboard-configuration` command.
105 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.
103
106
104 ##### `XKB_MODEL`=""
107 ##### `XKB_MODEL`=""
105 Set the name of the model of your keyboard type.
108 Set the name of the model of your keyboard type.
106
109
107 ##### `XKB_LAYOUT`=""
110 ##### `XKB_LAYOUT`=""
108 Set the supported keyboard layout(s).
111 Set the supported keyboard layout(s).
109
112
110 ##### `XKB_VARIANT`=""
113 ##### `XKB_VARIANT`=""
111 Set the supported variant(s) of the keyboard layout(s).
114 Set the supported variant(s) of the keyboard layout(s).
112
115
113 ##### `XKB_OPTIONS`=""
116 ##### `XKB_OPTIONS`=""
114 Set extra xkb configuration options.
117 Set extra xkb configuration options.
115
118
116 ---
119 ---
117
120
118 #### Networking settings (DHCP):
121 #### Networking settings (DHCP):
119 This parameter is used to set up networking auto-configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
122 This parameter is used to set up networking auto-configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
120
123
121 ##### `ENABLE_DHCP`=true
124 ##### `ENABLE_DHCP`=true
122 Set the system to use DHCP. This requires an DHCP server.
125 Set the system to use DHCP. This requires an DHCP server.
123
126
124 ---
127 ---
125
128
126 #### Networking settings (static):
129 #### Networking settings (static):
127 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
130 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
128
131
129 ##### `NET_ADDRESS`=""
132 ##### `NET_ADDRESS`=""
130 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
133 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
131
134
132 ##### `NET_GATEWAY`=""
135 ##### `NET_GATEWAY`=""
133 Set the IP address for the default gateway.
136 Set the IP address for the default gateway.
134
137
135 ##### `NET_DNS_1`=""
138 ##### `NET_DNS_1`=""
136 Set the IP address for the first DNS server.
139 Set the IP address for the first DNS server.
137
140
138 ##### `NET_DNS_2`=""
141 ##### `NET_DNS_2`=""
139 Set the IP address for the second DNS server.
142 Set the IP address for the second DNS server.
140
143
141 ##### `NET_DNS_DOMAINS`=""
144 ##### `NET_DNS_DOMAINS`=""
142 Set the default DNS search domains to use for non fully qualified hostnames.
145 Set the default DNS search domains to use for non fully qualified hostnames.
143
146
144 ##### `NET_NTP_1`=""
147 ##### `NET_NTP_1`=""
145 Set the IP address for the first NTP server.
148 Set the IP address for the first NTP server.
146
149
147 ##### `NET_NTP_2`=""
150 ##### `NET_NTP_2`=""
148 Set the IP address for the second NTP server.
151 Set the IP address for the second NTP server.
149
152
150 ---
153 ---
151
154
152 #### Basic system features:
155 #### Basic system features:
153 ##### `ENABLE_CONSOLE`=true
156 ##### `ENABLE_CONSOLE`=true
154 Enable serial console interface. Recommended if no monitor or keyboard is connected to the RPi2/3. In case of problems fe. if the network (auto) configuration failed - the serial console can be used to access the system. On RPI `0` `3` `3P` the CPU speed is locked at lowest speed.
157 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.
155
158
156 ##### `ENABLE_PRINTK`=false
159 ##### `ENABLE_PRINTK`=false
157 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
160 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
158
161
159 ##### `ENABLE_BLUETOOTH`=false
162 ##### `ENABLE_BLUETOOTH`=false
160 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/).
163 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/).
161
164
162 ##### `ENABLE_MINIUART_OVERLAY`=false
165 ##### `ENABLE_MINIUART_OVERLAY`=false
163 Enable Bluetooth to use this. Adds overlay to swap UART0 with UART1. Enabling (slower) Bluetooth and full speed serial console. - RPI `0` `3` `3P` have a fast `hardware UART0` (ttyAMA0) and a `mini UART1` (ttyS0)! RPI `1` `1P` `2` only have a `hardware UART0`. `UART0` is considered better, because is faster and more stable than `mini UART1`. By default the Bluetooth modem is mapped to the `hardware UART0` and `mini UART` is used for console. The `mini UART` is a problem for the serial console, because its baudrate depends on the CPU frequency, which is changing on runtime. Resulting in a volatile baudrate and thus in an unusable serial console.
166 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.
164
167
165 ##### `ENABLE_TURBO`=false
168 ##### `ENABLE_TURBO`=false
166 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.
169 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.
167
170
168 ##### `ENABLE_I2C`=false
171 ##### `ENABLE_I2C`=false
169 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.
172 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.
170
173
171 ##### `ENABLE_SPI`=false
174 ##### `ENABLE_SPI`=false
172 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 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.
173
176
174 ##### `ENABLE_IPV6`=true
177 ##### `ENABLE_IPV6`=true
175 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
178 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
176
179
177 ##### `ENABLE_SSHD`=true
180 ##### `ENABLE_SSHD`=true
178 Install and enable OpenSSH service. The default configuration of the service doesn't allow `root` to login. Please use the user `pi` instead and `su -` or `sudo` to execute commands as root.
181 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.
179
182
180 ##### `ENABLE_NONFREE`=false
183 ##### `ENABLE_NONFREE`=false
181 Allow the installation of non-free Debian packages that do not comply with the DFSG. This is required to install closed-source firmware binary blobs.
184 Allow the installation of non-free Debian packages that do not comply with the DFSG. This is required to install closed-source firmware binary blobs.
182
185
183 ##### `ENABLE_WIRELESS`=false
186 ##### `ENABLE_WIRELESS`=false
184 Download and install the [closed-source firmware binary blob](https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm) that is required to run the internal wireless interface of the Raspberry Pi model `3`. This parameter is ignored if the specified `RPI_MODEL` is not `3`.
187 Download and install the [closed-source firmware binary blob](https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm) that is required to run the internal wireless interface of the Raspberry Pi model `3`. This parameter is ignored if the specified `RPI_MODEL` is not `3`.
185
188
186 ##### `ENABLE_RSYSLOG`=true
189 ##### `ENABLE_RSYSLOG`=true
187 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
190 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
188
191
189 ##### `ENABLE_SOUND`=true
192 ##### `ENABLE_SOUND`=true
190 Enable sound hardware and install Advanced Linux Sound Architecture.
193 Enable sound hardware and install Advanced Linux Sound Architecture.
191
194
192 ##### `ENABLE_HWRANDOM`=true
195 ##### `ENABLE_HWRANDOM`=true
193 Enable Hardware Random Number Generator. Strong random numbers are important for most network-based communications that use encryption. It's recommended to be enabled.
196 Enable Hardware Random Number Generator. Strong random numbers are important for most network-based communications that use encryption. It's recommended to be enabled.
194
197
195 ##### `ENABLE_MINGPU`=false
198 ##### `ENABLE_MINGPU`=false
196 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
199 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
197
200
198 ##### `ENABLE_DBUS`=true
201 ##### `ENABLE_DBUS`=true
199 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
202 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
200
203
201 ##### `ENABLE_XORG`=false
204 ##### `ENABLE_XORG`=false
202 Install Xorg open-source X Window System.
205 Install Xorg open-source X Window System.
203
206
204 ##### `ENABLE_WM`=""
207 ##### `ENABLE_WM`=""
205 Install a user-defined window manager for the X Window System. To make sure all X related package dependencies are getting installed `ENABLE_XORG` will automatically get enabled if `ENABLE_WM` is used. The `rpi23-gen-image.sh` script has been tested with the following list of window managers: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
208 Install a user-defined window manager for the X Window System. To make sure all X related package dependencies are getting installed `ENABLE_XORG` will automatically get enabled if `ENABLE_WM` is used. The `rpi23-gen-image.sh` script has been tested with the following list of window managers: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
206
209
207 ##### `ENABLE_SYSVINIT`=false
210 ##### `ENABLE_SYSVINIT`=false
208 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
211 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
209
212
210 ---
213 ---
211
214
212 #### Advanced system features:
215 #### Advanced system features:
213 ##### `ENABLE_SYSTEMDSWAP`=false
216 ##### `ENABLE_SYSTEMDSWAP`=false
214 Enables [Systemd-swap service](https://github.com/Nefelim4ag/systemd-swap). Usefull if `KERNEL_ZSWAP` is enabled.
217 Enables [Systemd-swap service](https://github.com/Nefelim4ag/systemd-swap). Usefull if `KERNEL_ZSWAP` is enabled.
215
218
216 ##### `ENABLE_MINBASE`=false
219 ##### `ENABLE_MINBASE`=false
217 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
220 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
218
221
219 ##### `ENABLE_REDUCE`=false
222 ##### `ENABLE_REDUCE`=false
220 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
223 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
221
224
222 ##### `ENABLE_UBOOT`=false
225 ##### `ENABLE_UBOOT`=false
223 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.
226 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.
224
227
225 ##### `UBOOTSRC_DIR`=""
228 ##### `UBOOTSRC_DIR`=""
226 Path to a directory (`u-boot`) of [U-Boot bootloader sources](https://git.denx.de/?p=u-boot.git;a=summary) that will be copied, configured, build and installed inside the chroot.
229 Path to a directory (`u-boot`) of [U-Boot bootloader sources](https://git.denx.de/?p=u-boot.git;a=summary) that will be copied, configured, build and installed inside the chroot.
227
230
228 ##### `ENABLE_FBTURBO`=false
231 ##### `ENABLE_FBTURBO`=false
229 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.
232 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.
230
233
231 ##### `FBTURBOSRC_DIR`=""
234 ##### `FBTURBOSRC_DIR`=""
232 Path to a directory (`xf86-video-fbturbo`) of [hardware accelerated Xorg video driver sources](https://github.com/ssvb/xf86-video-fbturbo) that will be copied, configured, build and installed inside the chroot.
235 Path to a directory (`xf86-video-fbturbo`) of [hardware accelerated Xorg video driver sources](https://github.com/ssvb/xf86-video-fbturbo) that will be copied, configured, build and installed inside the chroot.
233
236
234 ##### `ENABLE_VIDEOCORE`=false
237 ##### `ENABLE_VIDEOCORE`=false
235 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.
238 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.
236
239
237 ##### `VIDEOCORESRC_DIR`=""
240 ##### `VIDEOCORESRC_DIR`=""
238 Path to a directory (`userland`) of [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
241 Path to a directory (`userland`) of [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
239
242
240 ##### `ENABLE_NEXMON`=false
243 ##### `ENABLE_NEXMON`=false
241 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).
244 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).
242
245
243 ##### `NEXMONSRC_DIR`=""
246 ##### `NEXMONSRC_DIR`=""
244 Path to a directory (`nexmon`) of [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
247 Path to a directory (`nexmon`) of [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
245
248
246 ##### `ENABLE_IPTABLES`=false
249 ##### `ENABLE_IPTABLES`=false
247 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
250 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
248
251
249 ##### `ENABLE_USER`=true
252 ##### `ENABLE_USER`=true
250 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
253 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
251
254
252 ##### `USER_NAME`=pi
255 ##### `USER_NAME`=pi
253 Non-root user to create. Ignored if `ENABLE_USER`=false
256 Non-root user to create. Ignored if `ENABLE_USER`=false
254
257
255 ##### `ENABLE_ROOT`=false
258 ##### `ENABLE_ROOT`=false
256 Set root user password so root login will be enabled
259 Set root user password so root login will be enabled
257
260
258 ##### `ENABLE_HARDNET`=false
261 ##### `ENABLE_HARDNET`=false
259 Enable IPv4/IPv6 network stack hardening settings.
262 Enable IPv4/IPv6 network stack hardening settings.
260
263
261 ##### `ENABLE_SPLITFS`=false
264 ##### `ENABLE_SPLITFS`=false
262 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
265 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
263
266
264 ##### `CHROOT_SCRIPTS`=""
267 ##### `CHROOT_SCRIPTS`=""
265 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.
268 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.
266
269
267 ##### `ENABLE_INITRAMFS`=false
270 ##### `ENABLE_INITRAMFS`=false
268 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.
271 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.
269
272
270 ##### `ENABLE_IFNAMES`=true
273 ##### `ENABLE_IFNAMES`=true
271 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
274 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
272
275
273 ##### `DISABLE_UNDERVOLT_WARNINGS`=
276 ##### `DISABLE_UNDERVOLT_WARNINGS`=
274 Disable RPi2/3 under-voltage warnings and overlays. Setting the parameter to `1` will disable the warning overlay. Setting it to `2` will additionally allow RPi2/3 turbo mode when low-voltage is present.
277 Disable RPi2/3 under-voltage warnings and overlays. Setting the parameter to `1` will disable the warning overlay. Setting it to `2` will additionally allow RPi2/3 turbo mode when low-voltage is present.
275
278
276 ---
279 ---
277
280
278 #### SSH settings:
281 #### SSH settings:
279 ##### `SSH_ENABLE_ROOT`=false
282 ##### `SSH_ENABLE_ROOT`=false
280 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`.
283 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`.
281
284
282 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
285 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
283 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
286 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
284
287
285 ##### `SSH_LIMIT_USERS`=false
288 ##### `SSH_LIMIT_USERS`=false
286 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).
289 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).
287
290
288 ##### `SSH_ROOT_PUB_KEY`=""
291 ##### `SSH_ROOT_PUB_KEY`=""
289 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`.
292 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`.
290
293
291 ##### `SSH_USER_PUB_KEY`=""
294 ##### `SSH_USER_PUB_KEY`=""
292 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.
295 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.
293
296
294 ---
297 ---
295
298
296 #### Kernel compilation:
299 #### Kernel compilation:
297 ##### `BUILD_KERNEL`=true
300 ##### `BUILD_KERNEL`=true
298 Build and install the latest RPi 0/1/2/3 Linux kernel. Currently only the default RPi 0/1/2/3 kernel configuration is used.
301 Build and install the latest RPi 0/1/2/3 Linux kernel. Currently only the default RPi 0/1/2/3 kernel configuration is used.
299
302
300 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
303 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
301 This sets the cross-compile environment for the compiler.
304 This sets the cross-compile environment for the compiler.
302
305
303 ##### `KERNEL_ARCH`="arm"
306 ##### `KERNEL_ARCH`="arm"
304 This sets the kernel architecture for the compiler.
307 This sets the kernel architecture for the compiler.
305
308
306 ##### `KERNEL_IMAGE`="kernel7.img"
309 ##### `KERNEL_IMAGE`="kernel7.img"
307 Name of the image file in the boot partition. If not set, `KERNEL_IMAGE` will be set to "kernel8.img" automatically if building for arm64.
310 Name of the image file in the boot partition. If not set, `KERNEL_IMAGE` will be set to "kernel8.img" automatically if building for arm64.
308
311
309 ##### `KERNEL_BRANCH`=""
312 ##### `KERNEL_BRANCH`=""
310 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
313 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
311
314
312 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
315 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
313 Sets the QEMU enviornment for the Debian archive. If not set, `QEMU_BINARY` will be set to "/usr/bin/qemu-aarch64-static" automatically if building for arm64.
316 Sets the QEMU enviornment for the Debian archive. If not set, `QEMU_BINARY` will be set to "/usr/bin/qemu-aarch64-static" automatically if building for arm64.
314
317
315 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
318 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
316 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
319 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
317
320
318 ##### `KERNEL_REDUCE`=false
321 ##### `KERNEL_REDUCE`=false
319 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
322 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
320
323
321 ##### `KERNEL_THREADS`=1
324 ##### `KERNEL_THREADS`=1
322 Number of parallel kernel building threads. If the parameter is left untouched the script will automatically determine the number of CPU cores to set the number of parallel threads to speed the kernel compilation.
325 Number of parallel kernel building threads. If the parameter is left untouched the script will automatically determine the number of CPU cores to set the number of parallel threads to speed the kernel compilation.
323
326
324 ##### `KERNEL_HEADERS`=true
327 ##### `KERNEL_HEADERS`=true
325 Install kernel headers with the built kernel.
328 Install kernel headers with the built kernel.
326
329
327 ##### `KERNEL_MENUCONFIG`=false
330 ##### `KERNEL_MENUCONFIG`=false
328 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
331 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
329
332
330 ##### `KERNEL_OLDDEFCONFIG`=false
333 ##### `KERNEL_OLDDEFCONFIG`=false
331 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
334 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
332
335
333 ##### `KERNEL_CCACHE`=false
336 ##### `KERNEL_CCACHE`=false
334 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
337 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
335
338
336 ##### `KERNEL_REMOVESRC`=true
339 ##### `KERNEL_REMOVESRC`=true
337 Remove all kernel sources from the generated OS image after it was built and installed.
340 Remove all kernel sources from the generated OS image after it was built and installed.
338
341
339 ##### `KERNELSRC_DIR`=""
342 ##### `KERNELSRC_DIR`=""
340 Path to a directory (`linux`) of [RaspberryPi Linux kernel sources](https://github.com/raspberrypi/linux) that will be copied, configured, build and installed inside the chroot.
343 Path to a directory (`linux`) of [RaspberryPi Linux kernel sources](https://github.com/raspberrypi/linux) that will be copied, configured, build and installed inside the chroot.
341
344
342 ##### `KERNELSRC_CLEAN`=false
345 ##### `KERNELSRC_CLEAN`=false
343 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.
346 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.
344
347
345 ##### `KERNELSRC_CONFIG`=true
348 ##### `KERNELSRC_CONFIG`=true
346 Run `make bcm2709_defconfig` (and optional `make menuconfig`) to configure the kernel sources before building. This parameter is automatically set to `true` if no existing kernel sources directory was specified using `KERNELSRC_DIR`. This parameter is ignored if `KERNELSRC_PREBUILT`=true.
349 Run `make bcm2709_defconfig` (and optional `make menuconfig`) to configure the kernel sources before building. This parameter is automatically set to `true` if no existing kernel sources directory was specified using `KERNELSRC_DIR`. This parameter is ignored if `KERNELSRC_PREBUILT`=true.
347
350
348 ##### `KERNELSRC_USRCONFIG`=""
351 ##### `KERNELSRC_USRCONFIG`=""
349 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
352 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
350
353
351 ##### `KERNELSRC_PREBUILT`=false
354 ##### `KERNELSRC_PREBUILT`=false
352 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.
355 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.
353
356
354 ##### `RPI_FIRMWARE_DIR`=""
357 ##### `RPI_FIRMWARE_DIR`=""
355 The directory (`firmware`) containing a local copy of the firmware from the [RaspberryPi firmware project](https://github.com/raspberrypi/firmware). Default is to download the latest firmware directly from the project.
358 The directory (`firmware`) containing a local copy of the firmware from the [RaspberryPi firmware project](https://github.com/raspberrypi/firmware). Default is to download the latest firmware directly from the project.
356
359
357 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
360 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
358 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
361 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
359
362
360 ##### `KERNEL_NF`=false
363 ##### `KERNEL_NF`=false
361 Enable Netfilter modules as kernel modules
364 Enable Netfilter modules as kernel modules
362
365
363 ##### `KERNEL_VIRT`=false
366 ##### `KERNEL_VIRT`=false
364 Enable Kernel KVM support (/dev/kvm)
367 Enable Kernel KVM support (/dev/kvm)
365
368
366 ##### `KERNEL_ZSWAP`=false
369 ##### `KERNEL_ZSWAP`=false
367 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
370 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
368
371
369 ##### `KERNEL_BPF`=true
372 ##### `KERNEL_BPF`=true
370 Allow attaching eBPF programs to a cgroup using the bpf syscall (CONFIG_BPF_SYSCALL CONFIG_CGROUP_BPF) [systemd compilations about it - File /lib/systemd/system/systemd-journald.server:36 configures an IP firewall (IPAddressDeny=all), but the local system does not support BPF/cgroup based firewalls]
373 Allow attaching eBPF programs to a cgroup using the bpf syscall (CONFIG_BPF_SYSCALL CONFIG_CGROUP_BPF) [systemd compilations about it - File /lib/systemd/system/systemd-journald.server:36 configures an IP firewall (IPAddressDeny=all), but the local system does not support BPF/cgroup based firewalls]
371
374
372 ##### `KERNEL_SECURITY`=false
375 ##### `KERNEL_SECURITY`=false
373 Enables Apparmor, integrity subsystem, auditing
376 Enables Apparmor, integrity subsystem, auditing
374 ---
377 ---
375
378
376 #### Reduce disk usage:
379 #### Reduce disk usage:
377 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
380 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
378
381
379 ##### `REDUCE_APT`=true
382 ##### `REDUCE_APT`=true
380 Configure APT to use compressed package repository lists and no package caching files.
383 Configure APT to use compressed package repository lists and no package caching files.
381
384
382 ##### `REDUCE_DOC`=true
385 ##### `REDUCE_DOC`=true
383 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
386 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
384
387
385 ##### `REDUCE_MAN`=true
388 ##### `REDUCE_MAN`=true
386 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
389 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
387
390
388 ##### `REDUCE_VIM`=false
391 ##### `REDUCE_VIM`=false
389 Replace `vim-tiny` package by `levee` a tiny vim clone.
392 Replace `vim-tiny` package by `levee` a tiny vim clone.
390
393
391 ##### `REDUCE_BASH`=false
394 ##### `REDUCE_BASH`=false
392 Remove `bash` package and switch to `dash` shell (experimental).
395 Remove `bash` package and switch to `dash` shell (experimental).
393
396
394 ##### `REDUCE_HWDB`=true
397 ##### `REDUCE_HWDB`=true
395 Remove PCI related hwdb files (experimental).
398 Remove PCI related hwdb files (experimental).
396
399
397 ##### `REDUCE_SSHD`=true
400 ##### `REDUCE_SSHD`=true
398 Replace `openssh-server` with `dropbear`.
401 Replace `openssh-server` with `dropbear`.
399
402
400 ##### `REDUCE_LOCALE`=true
403 ##### `REDUCE_LOCALE`=true
401 Remove all `locale` translation files.
404 Remove all `locale` translation files.
402
405
403 ---
406 ---
404
407
405 #### Encrypted root partition:
408 #### Encrypted root partition:
406 ##### `ENABLE_CRYPTFS`=false
409 ##### `ENABLE_CRYPTFS`=false
407 Enable full system encryption with dm-crypt. Setup a fully LUKS encrypted root partition (aes-xts-plain64:sha512) and generate required initramfs. The /boot directory will not be encrypted. This parameter will be ignored if `BUILD_KERNEL`=false. `ENABLE_CRYPTFS` is experimental. SSH-to-initramfs is currently not supported but will be soon - feel free to help.
410 Enable full system encryption with dm-crypt. Setup a fully LUKS encrypted root partition (aes-xts-plain64:sha512) and generate required initramfs. The /boot directory will not be encrypted. This parameter will be ignored if `BUILD_KERNEL`=false. `ENABLE_CRYPTFS` is experimental. SSH-to-initramfs is currently not supported but will be soon - feel free to help.
408
411
409 ##### `CRYPTFS_PASSWORD`=""
412 ##### `CRYPTFS_PASSWORD`=""
410 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
413 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
411
414
412 ##### `CRYPTFS_MAPPING`="secure"
415 ##### `CRYPTFS_MAPPING`="secure"
413 Set name of dm-crypt managed device-mapper mapping.
416 Set name of dm-crypt managed device-mapper mapping.
414
417
415 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
418 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
416 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
419 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
417
420
418 ##### `CRYPTFS_XTSKEYSIZE`=512
421 ##### `CRYPTFS_XTSKEYSIZE`=512
419 Sets key size in bits. The argument has to be a multiple of 8.
422 Sets key size in bits. The argument has to be a multiple of 8.
420
423
421 ##### `CRYPTFS_DROPBEAR`=false
424 ##### `CRYPTFS_DROPBEAR`=false
422 Enable Dropbear Initramfs support
425 Enable Dropbear Initramfs support
423
426
424 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
427 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
425 Provide path to dropbear Public RSA-OpenSSH Key
428 Provide path to dropbear Public RSA-OpenSSH Key
426
429
427 ---
430 ---
428
431
429 #### Build settings:
432 #### Build settings:
430 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
433 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
431 Set a path to a working directory used by the script to generate an image.
434 Set a path to a working directory used by the script to generate an image.
432
435
433 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
436 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
434 Set a filename for the output file(s). Note: the script will create $IMAGE_NAME.img if `ENABLE_SPLITFS`=false or $IMAGE_NAME-frmw.img and $IMAGE_NAME-root.img if `ENABLE_SPLITFS`=true. Note 2: If the KERNEL_BRANCH is not set, the word "CURRENT" is used.
437 Set a filename for the output file(s). Note: the script will create $IMAGE_NAME.img if `ENABLE_SPLITFS`=false or $IMAGE_NAME-frmw.img and $IMAGE_NAME-root.img if `ENABLE_SPLITFS`=true. Note 2: If the KERNEL_BRANCH is not set, the word "CURRENT" is used.
435
438
436 ## Understanding the script
439 ## Understanding the script
437 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:
440 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:
438
441
439 | Script | Description |
442 | Script | Description |
440 | --- | --- |
443 | --- | --- |
441 | `10-bootstrap.sh` | Debootstrap basic system |
444 | `10-bootstrap.sh` | Debootstrap basic system |
442 | `11-apt.sh` | Setup APT repositories |
445 | `11-apt.sh` | Setup APT repositories |
443 | `12-locale.sh` | Setup Locales and keyboard settings |
446 | `12-locale.sh` | Setup Locales and keyboard settings |
444 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
447 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
445 | `14-fstab.sh` | Setup fstab and initramfs |
448 | `14-fstab.sh` | Setup fstab and initramfs |
446 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
449 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
447 | `20-networking.sh` | Setup Networking |
450 | `20-networking.sh` | Setup Networking |
448 | `21-firewall.sh` | Setup Firewall |
451 | `21-firewall.sh` | Setup Firewall |
449 | `30-security.sh` | Setup Users and Security settings |
452 | `30-security.sh` | Setup Users and Security settings |
450 | `31-logging.sh` | Setup Logging |
453 | `31-logging.sh` | Setup Logging |
451 | `32-sshd.sh` | Setup SSH and public keys |
454 | `32-sshd.sh` | Setup SSH and public keys |
452 | `41-uboot.sh` | Build and Setup U-Boot |
455 | `41-uboot.sh` | Build and Setup U-Boot |
453 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
456 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
454 | `43-videocore.sh` | Build and Setup videocore libraries |
457 | `43-videocore.sh` | Build and Setup videocore libraries |
455 | `50-firstboot.sh` | First boot actions |
458 | `50-firstboot.sh` | First boot actions |
456 | `99-reduce.sh` | Reduce the disk space usage |
459 | `99-reduce.sh` | Reduce the disk space usage |
457
460
458 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.
461 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.
459
462
460 | Directory | Description |
463 | Directory | Description |
461 | --- | --- |
464 | --- | --- |
462 | `apt` | APT management configuration files |
465 | `apt` | APT management configuration files |
463 | `boot` | Boot and RPi 0/1/2/3 configuration files |
466 | `boot` | Boot and RPi 0/1/2/3 configuration files |
464 | `dpkg` | Package Manager configuration |
467 | `dpkg` | Package Manager configuration |
465 | `etc` | Configuration files and rc scripts |
468 | `etc` | Configuration files and rc scripts |
466 | `firstboot` | Scripts that get executed on first boot |
469 | `firstboot` | Scripts that get executed on first boot |
467 | `initramfs` | Initramfs scripts |
470 | `initramfs` | Initramfs scripts |
468 | `iptables` | Firewall configuration files |
471 | `iptables` | Firewall configuration files |
469 | `locales` | Locales configuration |
472 | `locales` | Locales configuration |
470 | `modules` | Kernel Modules configuration |
473 | `modules` | Kernel Modules configuration |
471 | `mount` | Fstab configuration |
474 | `mount` | Fstab configuration |
472 | `network` | Networking configuration files |
475 | `network` | Networking configuration files |
473 | `sysctl.d` | Swapping and Network Hardening configuration |
476 | `sysctl.d` | Swapping and Network Hardening configuration |
474 | `xorg` | fbturbo Xorg driver configuration |
477 | `xorg` | fbturbo Xorg driver configuration |
475
478
476 ## Custom packages and scripts
479 ## Custom packages and scripts
477 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`.
480 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`.
478
481
479 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
482 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
480
483
481 ## Logging of the bootstrapping process
484 ## Logging of the bootstrapping process
482 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:
485 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:
483
486
484 ```shell
487 ```shell
485 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
488 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
486 ```
489 ```
487
490
488 ## Flashing the image file
491 ## Flashing the image file
489 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`.
492 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`.
490
493
491 ##### Flashing examples:
494 ##### Flashing examples:
492 ```shell
495 ```shell
493 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
496 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
494 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
497 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
495 ```
498 ```
496 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
499 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
497 ```shell
500 ```shell
498 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
501 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
499 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
502 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
500 ```
503 ```
501
504
502 ## QEMU emulation
505 ## QEMU emulation
503 Start QEMU full system emulation:
506 Start QEMU full system emulation:
504 ```shell
507 ```shell
505 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"
508 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"
506 ```
509 ```
507
510
508 Start QEMU full system emulation and output to console:
511 Start QEMU full system emulation and output to console:
509 ```shell
512 ```shell
510 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
513 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
511 ```
514 ```
512
515
513 Start QEMU full system emulation with SMP and output to console:
516 Start QEMU full system emulation with SMP and output to console:
514 ```shell
517 ```shell
515 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
518 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
516 ```
519 ```
517
520
518 Start QEMU full system emulation with cryptfs, initramfs and output to console:
521 Start QEMU full system emulation with cryptfs, initramfs and output to console:
519 ```shell
522 ```shell
520 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
523 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
521 ```
524 ```
522
525
523 ## External links and references
526 ## External links and references
524 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
527 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
525 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
528 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
526 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
529 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
527 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
530 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
528 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
531 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
529 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
532 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
530 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
533 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
531 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
534 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
532 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
535 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,40 +1,40
1 #
1 #
2 # Setup APT repositories
2 # Setup APT repositories
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup APT proxy configuration
8 # Install and setup APT proxy configuration
9 if [ -z "$APT_PROXY" ] ; then
9 if [ -z "$APT_PROXY" ] ; then
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
12 fi
12 fi
13
13
14 # Install APT sources.list
14 # Install APT sources.list
15 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
15 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
16
16
17 # Use specified APT server and release
17 # Use specified APT server and release
18 sed -i "s/\/ftp.debian.org\//\/${APT_SERVER}\//" "${ETC_DIR}/apt/sources.list"
18 sed -i "s/\/ftp.debian.org\//\/${APT_SERVER}\//" "${ETC_DIR}/apt/sources.list"
19 sed -i "s/ jessie/ ${RELEASE}/" "${ETC_DIR}/apt/sources.list"
19 sed -i "s/ stretch/ ${RELEASE}/" "${ETC_DIR}/apt/sources.list"
20
20
21 # Upgrade package index and update all installed packages and changed dependencies
21 # Upgrade package index and update all installed packages and changed dependencies
22 chroot_exec apt-get -qq -y update
22 chroot_exec apt-get -qq -y update
23 chroot_exec apt-get -qq -y -u dist-upgrade
23 chroot_exec apt-get -qq -y -u dist-upgrade
24
24
25 # Install additional packages
25 # Install additional packages
26 if [ "$APT_INCLUDES_LATE" ] ; then
26 if [ "$APT_INCLUDES_LATE" ] ; then
27 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
27 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
28 fi
28 fi
29
29
30 # Install Debian custom packages
30 # Install Debian custom packages
31 if [ -d packages ] ; then
31 if [ -d packages ] ; then
32 for package in packages/*.deb ; do
32 for package in packages/*.deb ; do
33 cp "$package" "${R}"/tmp
33 cp "$package" "${R}"/tmp
34 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
34 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
35 done
35 done
36 fi
36 fi
37
37
38 chroot_exec apt-get -qq -y -f install
38 chroot_exec apt-get -qq -y -f install
39
39
40 chroot_exec apt-get -qq -y check
40 chroot_exec apt-get -qq -y check
@@ -1,8 +1,8
1 deb http://ftp.debian.org/debian jessie main contrib
1 deb http://ftp.debian.org/debian stretch main contrib
2 #deb-src http://ftp.debian.org/debian jessie main contrib
2 #deb-src http://ftp.debian.org/debian stretch main contrib
3
3
4 deb http://ftp.debian.org/debian/ jessie-updates main contrib
4 deb http://ftp.debian.org/debian/ stretch-updates main contrib
5 #deb-src http://ftp.debian.org/debian/ jessie-updates main contrib
5 #deb-src http://ftp.debian.org/debian/ stretch-updates main contrib
6
6
7 deb http://security.debian.org/ jessie/updates main contrib
7 deb http://security.debian.org/ stretch/updates main contrib
8 #deb-src http://security.debian.org/ jessie/updates main contrib
8 #deb-src http://security.debian.org/ stretch/updates main contrib
@@ -1,859 +1,864
1 #!/bin/sh
1 #!/bin/sh
2 ########################################################################
2 ########################################################################
3 # rpi23-gen-image.sh 2015-2017
3 # rpi23-gen-image.sh 2015-2017
4 #
4 #
5 # Advanced Debian "stretch" and "buster" bootstrap script for Raspberry Pi
5 # Advanced Debian "stretch" and "buster" bootstrap script for Raspberry Pi
6 #
6 #
7 # This program is free software; you can redistribute it and/or
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
10 # of the License, or (at your option) any later version.
11 #
11 #
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
13 #
13 #
14 # Big thanks for patches and enhancements by 20+ github contributors!
14 # Big thanks for patches and enhancements by 20+ github contributors!
15 ########################################################################
15 ########################################################################
16
16
17 # Are we running as root?
17 # Are we running as root?
18 if [ "$(id -u)" -ne "0" ] ; then
18 if [ "$(id -u)" -ne "0" ] ; then
19 echo "error: this script must be executed with root privileges!"
19 echo "error: this script must be executed with root privileges!"
20 exit 1
20 exit 1
21 fi
21 fi
22
22
23 # Check if ./functions.sh script exists
23 # Check if ./functions.sh script exists
24 if [ ! -r "./functions.sh" ] ; then
24 if [ ! -r "./functions.sh" ] ; then
25 echo "error: './functions.sh' required script not found!"
25 echo "error: './functions.sh' required script not found!"
26 exit 1
26 exit 1
27 fi
27 fi
28
28
29 # Load utility functions
29 # Load utility functions
30 . ./functions.sh
30 . ./functions.sh
31
31
32 # Load parameters from configuration template file
32 # Load parameters from configuration template file
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
34 use_template
34 use_template
35 fi
35 fi
36
36
37 # Introduce settings
37 # Introduce settings
38 set -e
38 set -e
39 echo -n -e "\n#\n# RPi 0/1/2/3 Bootstrap Settings\n#\n"
39 echo -n -e "\n#\n# RPi 0/1/2/3 Bootstrap Settings\n#\n"
40 set -x
40 set -x
41
41
42 # Raspberry Pi model configuration
42 # Raspberry Pi model configuration
43 RPI_MODEL=${RPI_MODEL:=2}
43 RPI_MODEL=${RPI_MODEL:=2}
44
44
45 # Debian release
45 # Debian release
46 RELEASE=${RELEASE:=buster}
46 RELEASE=${RELEASE:=buster}
47
47
48 # Kernel Branch
48 # Kernel Branch
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
50
50
51 # URLs
51 # URLs
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
60 NEXMON_URL=${NEXMON_URL:=https://github.com/seemoo-lab/nexmon.git}
60 NEXMON_URL=${NEXMON_URL:=https://github.com/seemoo-lab/nexmon.git}
61 SYSTEMDSWAP_URL=${SYSTEMDSWAP_URL:=https://github.com/Nefelim4ag/systemd-swap.git}
61 SYSTEMDSWAP_URL=${SYSTEMDSWAP_URL:=https://github.com/Nefelim4ag/systemd-swap.git}
62
62
63 # Kernel deb packages for 32bit kernel
63 # Kernel deb packages for 32bit kernel
64 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}
64 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}
65 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}
65 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}
66 # Kernel has KVM and zswap enabled - use if KERNEL_* parameters and precompiled kernel are used
66 # Kernel has KVM and zswap enabled - use if KERNEL_* parameters and precompiled kernel are used
67 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.14.80.20181113/bcmrpi3-kernel-bis-4.14.80.20181113.tar.xz}
67 RPI3_64_BIS_KERNEL_URL=${RPI3_64_BIS_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel-bis/releases/download/4.14.80.20181113/bcmrpi3-kernel-bis-4.14.80.20181113.tar.xz}
68 # Default precompiled 64bit kernel
68 # Default precompiled 64bit kernel
69 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.14.80.20181113/bcmrpi3-kernel-4.14.80.20181113.tar.xz}
69 RPI3_64_DEF_KERNEL_URL=${RPI3_64_DEF_KERNEL_URL:=https://github.com/sakaki-/bcmrpi3-kernel/releases/download/4.14.80.20181113/bcmrpi3-kernel-4.14.80.20181113.tar.xz}
70 # Generic
70 # Generic
71 RPI3_64_KERNEL_URL=${RPI3_64_KERNEL_URL:=$RPI3_64_DEF_KERNEL_URL}
71 RPI3_64_KERNEL_URL=${RPI3_64_KERNEL_URL:=$RPI3_64_DEF_KERNEL_URL}
72 # Kali kernel src - used if ENABLE_NEXMON=true (they patch the wlan kernel modul)
72 # Kali kernel src - used if ENABLE_NEXMON=true (they patch the wlan kernel modul)
73 KALI_KERNEL_URL=${KALI_KERNEL_URL:=https://github.com/Re4son/re4son-raspberrypi-linux.git}
73 KALI_KERNEL_URL=${KALI_KERNEL_URL:=https://github.com/Re4son/re4son-raspberrypi-linux.git}
74
74
75 # Build directories
75 # Build directories
76 WORKDIR=$(pwd)
76 WORKDIR=$(pwd)
77 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
77 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
78 BUILDDIR="${BASEDIR}/build"
78 BUILDDIR="${BASEDIR}/build"
79
79
80 # Chroot directories
80 # Chroot directories
81 R="${BUILDDIR}/chroot"
81 R="${BUILDDIR}/chroot"
82 ETC_DIR="${R}/etc"
82 ETC_DIR="${R}/etc"
83 LIB_DIR="${R}/lib"
83 LIB_DIR="${R}/lib"
84 BOOT_DIR="${R}/boot/firmware"
84 BOOT_DIR="${R}/boot/firmware"
85 KERNEL_DIR="${R}/usr/src/linux"
85 KERNEL_DIR="${R}/usr/src/linux"
86 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
86 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
87 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
87 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
88
88
89 # Firmware directory: Blank if download from github
89 # Firmware directory: Blank if download from github
90 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
90 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
91
91
92 # General settings
92 # General settings
93 SET_ARCH=${SET_ARCH:=32}
93 SET_ARCH=${SET_ARCH:=32}
94 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
94 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
95 PASSWORD=${PASSWORD:=raspberry}
95 PASSWORD=${PASSWORD:=raspberry}
96 USER_PASSWORD=${USER_PASSWORD:=raspberry}
96 USER_PASSWORD=${USER_PASSWORD:=raspberry}
97 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
97 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
98 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
98 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
99 EXPANDROOT=${EXPANDROOT:=true}
99 EXPANDROOT=${EXPANDROOT:=true}
100
100
101 # Keyboard settings
101 # Keyboard settings
102 XKB_MODEL=${XKB_MODEL:=""}
102 XKB_MODEL=${XKB_MODEL:=""}
103 XKB_LAYOUT=${XKB_LAYOUT:=""}
103 XKB_LAYOUT=${XKB_LAYOUT:=""}
104 XKB_VARIANT=${XKB_VARIANT:=""}
104 XKB_VARIANT=${XKB_VARIANT:=""}
105 XKB_OPTIONS=${XKB_OPTIONS:=""}
105 XKB_OPTIONS=${XKB_OPTIONS:=""}
106
106
107 # Network settings (DHCP)
107 # Network settings (DHCP)
108 ENABLE_DHCP=${ENABLE_DHCP:=true}
108 ENABLE_DHCP=${ENABLE_DHCP:=true}
109
109
110 # Network settings (static)
110 # Network settings (static)
111 NET_ADDRESS=${NET_ADDRESS:=""}
111 NET_ADDRESS=${NET_ADDRESS:=""}
112 NET_GATEWAY=${NET_GATEWAY:=""}
112 NET_GATEWAY=${NET_GATEWAY:=""}
113 NET_DNS_1=${NET_DNS_1:=""}
113 NET_DNS_1=${NET_DNS_1:=""}
114 NET_DNS_2=${NET_DNS_2:=""}
114 NET_DNS_2=${NET_DNS_2:=""}
115 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
115 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
116 NET_NTP_1=${NET_NTP_1:=""}
116 NET_NTP_1=${NET_NTP_1:=""}
117 NET_NTP_2=${NET_NTP_2:=""}
117 NET_NTP_2=${NET_NTP_2:=""}
118
118
119 # APT settings
119 # APT settings
120 APT_PROXY=${APT_PROXY:=""}
120 APT_PROXY=${APT_PROXY:=""}
121 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
121 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
122 KEEP_APT_PROXY=${KEEP_APT_PROXY:=false}
122
123
123 # Feature settings
124 # Feature settings
124 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
125 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
125 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
126 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
126 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
127 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
127 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
128 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
128 ENABLE_I2C=${ENABLE_I2C:=false}
129 ENABLE_I2C=${ENABLE_I2C:=false}
129 ENABLE_SPI=${ENABLE_SPI:=false}
130 ENABLE_SPI=${ENABLE_SPI:=false}
130 ENABLE_IPV6=${ENABLE_IPV6:=true}
131 ENABLE_IPV6=${ENABLE_IPV6:=true}
131 ENABLE_SSHD=${ENABLE_SSHD:=true}
132 ENABLE_SSHD=${ENABLE_SSHD:=true}
132 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
133 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
133 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
134 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
134 ENABLE_SOUND=${ENABLE_SOUND:=true}
135 ENABLE_SOUND=${ENABLE_SOUND:=true}
135 ENABLE_DBUS=${ENABLE_DBUS:=true}
136 ENABLE_DBUS=${ENABLE_DBUS:=true}
136 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
137 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
137 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
138 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
138 ENABLE_XORG=${ENABLE_XORG:=false}
139 ENABLE_XORG=${ENABLE_XORG:=false}
139 ENABLE_WM=${ENABLE_WM:=""}
140 ENABLE_WM=${ENABLE_WM:=""}
140 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
141 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
141 ENABLE_USER=${ENABLE_USER:=true}
142 ENABLE_USER=${ENABLE_USER:=true}
142 USER_NAME=${USER_NAME:="pi"}
143 USER_NAME=${USER_NAME:="pi"}
143 ENABLE_ROOT=${ENABLE_ROOT:=false}
144 ENABLE_ROOT=${ENABLE_ROOT:=false}
144 ENABLE_QEMU=${ENABLE_QEMU:=false}
145 ENABLE_QEMU=${ENABLE_QEMU:=false}
145 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
146 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
146
147
147 # SSH settings
148 # SSH settings
148 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
149 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
149 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
150 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
150 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
151 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
151 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
152 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
152 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
153 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
153
154
154 # Advanced settings
155 # Advanced settings
155 ENABLE_SYSTEMDSWAP=${ENABLE_SYSTEMDSWAP:=false}
156 ENABLE_SYSTEMDSWAP=${ENABLE_SYSTEMDSWAP:=false}
156 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
157 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
157 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
158 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
158 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
159 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
159 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
160 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
160 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
161 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
161 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
162 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
162 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
163 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
163 ENABLE_NEXMON=${ENABLE_NEXMON:=false}
164 ENABLE_NEXMON=${ENABLE_NEXMON:=false}
164 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
165 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
165 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
166 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
166 NEXMONSRC_DIR=${NEXMONSRC_DIR:=""}
167 NEXMONSRC_DIR=${NEXMONSRC_DIR:=""}
167 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
168 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
168 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
169 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
169 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
170 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
170 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
171 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
171 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
172 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
172 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
173 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
173
174
174 # Kernel compilation settings
175 # Kernel compilation settings
175 BUILD_KERNEL=${BUILD_KERNEL:=true}
176 BUILD_KERNEL=${BUILD_KERNEL:=true}
176 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
177 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
177 KERNEL_THREADS=${KERNEL_THREADS:=1}
178 KERNEL_THREADS=${KERNEL_THREADS:=1}
178 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
179 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
179 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
180 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
180 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
181 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
181 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
182 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
182 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
183 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
183 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
184 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
184 KERNEL_VIRT=${KERNEL_VIRT:=false}
185 KERNEL_VIRT=${KERNEL_VIRT:=false}
185 KERNEL_BPF=${KERNEL_BPF:=false}
186 KERNEL_BPF=${KERNEL_BPF:=false}
186 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=powersave}
187 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=powersave}
187 KERNEL_SECURITY=${KERNEL_SECURITY:=false}
188 KERNEL_SECURITY=${KERNEL_SECURITY:=false}
188 KERNEL_NF=${KERNEL_NF:=false}
189 KERNEL_NF=${KERNEL_NF:=false}
189
190
190 # Kernel compilation from source directory settings
191 # Kernel compilation from source directory settings
191 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
192 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
192 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
193 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
193 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
194 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
194 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
195 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
195
196
196 # Reduce disk usage settings
197 # Reduce disk usage settings
197 REDUCE_APT=${REDUCE_APT:=true}
198 REDUCE_APT=${REDUCE_APT:=true}
198 REDUCE_DOC=${REDUCE_DOC:=true}
199 REDUCE_DOC=${REDUCE_DOC:=true}
199 REDUCE_MAN=${REDUCE_MAN:=true}
200 REDUCE_MAN=${REDUCE_MAN:=true}
200 REDUCE_VIM=${REDUCE_VIM:=false}
201 REDUCE_VIM=${REDUCE_VIM:=false}
201 REDUCE_BASH=${REDUCE_BASH:=false}
202 REDUCE_BASH=${REDUCE_BASH:=false}
202 REDUCE_HWDB=${REDUCE_HWDB:=true}
203 REDUCE_HWDB=${REDUCE_HWDB:=true}
203 REDUCE_SSHD=${REDUCE_SSHD:=true}
204 REDUCE_SSHD=${REDUCE_SSHD:=true}
204 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
205 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
205
206
206 # Encrypted filesystem settings
207 # Encrypted filesystem settings
207 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
208 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
208 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
209 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
209 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
210 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
210 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
211 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
211 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
212 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
212 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
213 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
213 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
214 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
214 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
215 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
215 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
216 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
216
217
217 # Chroot scripts directory
218 # Chroot scripts directory
218 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
219 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
219
220
220 # Packages required in the chroot build environment
221 # Packages required in the chroot build environment
221 APT_INCLUDES=${APT_INCLUDES:=""}
222 APT_INCLUDES=${APT_INCLUDES:=""}
222 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"
223 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"
223
224
224 # Packages to exclude from chroot build environment
225 # Packages to exclude from chroot build environment
225 APT_EXCLUDES=${APT_EXCLUDES:=""}
226 APT_EXCLUDES=${APT_EXCLUDES:=""}
226
227
227 # Packages required for bootstrapping
228 # Packages required for bootstrapping
228 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
229 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
229 MISSING_PACKAGES=""
230 MISSING_PACKAGES=""
230
231
231 # Packages installed for c/c++ build environment in chroot (keep empty)
232 # Packages installed for c/c++ build environment in chroot (keep empty)
232 COMPILER_PACKAGES=""
233 COMPILER_PACKAGES=""
233
234
234 # Check if apt-cacher-ng has port 3142 open and set APT_PROXY
235 # Check if apt-cacher-ng has port 3142 open and set APT_PROXY
235 APT_CACHER_RUNNING=$(lsof -i :3142 | cut -d ' ' -f3 | uniq | sed '/^\s*$/d')
236 APT_CACHER_RUNNING=$(lsof -i :3142 | cut -d ' ' -f3 | uniq | sed '/^\s*$/d')
236 if [ "${APT_CACHER_RUNNING}" = "apt-cacher-ng" ] ; then
237 if [ "${APT_CACHER_RUNNING}" = "apt-cacher-ng" ] ; then
237 APT_PROXY=http://127.0.0.1:3142/
238 APT_PROXY=http://127.0.0.1:3142/
238 fi
239 fi
239
240
240 # Setup architecture specific settings
241 # Setup architecture specific settings
241 if [ -n "$SET_ARCH" ] ; then
242 if [ -n "$SET_ARCH" ] ; then
242 # 64-bit configuration
243 # 64-bit configuration
243 if [ "$SET_ARCH" = 64 ] ; then
244 if [ "$SET_ARCH" = 64 ] ; then
244 # General 64-bit depended settings
245 # General 64-bit depended settings
245 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
246 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
246 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
247 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
247 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
248 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
248
249
249 # Raspberry Pi model specific settings
250 # Raspberry Pi model specific settings
250 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
251 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
251 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
252 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
252 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
253 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
253 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
254 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
254 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
255 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
255 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
256 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
256 else
257 else
257 echo "error: Only Raspberry PI 3 and 3B+ support 64-bit"
258 echo "error: Only Raspberry PI 3 and 3B+ support 64-bit"
258 exit 1
259 exit 1
259 fi
260 fi
260 fi
261 fi
261
262
262 # 32-bit configuration
263 # 32-bit configuration
263 if [ "$SET_ARCH" = 32 ] ; then
264 if [ "$SET_ARCH" = 32 ] ; then
264 # General 32-bit dependend settings
265 # General 32-bit dependend settings
265 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
266 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
266 KERNEL_ARCH=${KERNEL_ARCH:=arm}
267 KERNEL_ARCH=${KERNEL_ARCH:=arm}
267 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
268 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
268
269
269 # Raspberry Pi model specific settings
270 # Raspberry Pi model specific settings
270 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
271 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
271 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
272 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
272 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
273 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
273 RELEASE_ARCH=${RELEASE_ARCH:=armel}
274 RELEASE_ARCH=${RELEASE_ARCH:=armel}
274 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
275 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
275 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
276 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
276 fi
277 fi
277
278
278 # Raspberry Pi model specific settings
279 # Raspberry Pi model specific settings
279 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
280 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
280 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
281 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
281 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
282 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
282 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
283 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
283 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
284 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
284 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
285 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
285 fi
286 fi
286 fi
287 fi
287 # SET_ARCH not set
288 # SET_ARCH not set
288 else
289 else
289 echo "error: Please set '32' or '64' as value for SET_ARCH"
290 echo "error: Please set '32' or '64' as value for SET_ARCH"
290 exit 1
291 exit 1
291 fi
292 fi
292 # Device specific configuration and U-Boot configuration
293 # Device specific configuration and U-Boot configuration
293 case "$RPI_MODEL" in
294 case "$RPI_MODEL" in
294 0)
295 0)
295 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
296 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
296 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
297 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
297 ;;
298 ;;
298 1)
299 1)
299 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
300 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
300 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
301 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
301 ;;
302 ;;
302 1P)
303 1P)
303 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
304 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
304 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
305 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
305 ;;
306 ;;
306 2)
307 2)
307 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
308 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
308 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
309 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
309 ;;
310 ;;
310 3)
311 3)
311 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
312 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
312 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
313 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
313 ;;
314 ;;
314 3P)
315 3P)
315 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
316 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
316 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
317 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
317 ;;
318 ;;
318 *)
319 *)
319 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
320 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
320 exit 1
321 exit 1
321 ;;
322 ;;
322 esac
323 esac
323
324
324 if [ "$ENABLE_UBOOTUSB" = true ] ; then
325 if [ "$ENABLE_UBOOTUSB" = true ] ; then
325 if [ "$ENABLE_UBOOT" = false ] ; then
326 if [ "$ENABLE_UBOOT" = false ] ; then
326 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
327 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
327 exit 1
328 exit 1
328 fi
329 fi
329 if [ "$RPI_MODEL" != 3 ] || [ "$RPI_MODEL" != 3P ] ; then
330 if [ "$RPI_MODEL" != 3 ] || [ "$RPI_MODEL" != 3P ] ; then
330 echo "error: Enabling UBOOTUSB requires Raspberry 3"
331 echo "error: Enabling UBOOTUSB requires Raspberry 3"
331 exit 1
332 exit 1
332 fi
333 fi
333 fi
334 fi
334
335
335 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
336 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
336 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
337 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
337 # Include bluetooth packages on supported boards
338 # Include bluetooth packages on supported boards
338 if [ "$ENABLE_BLUETOOTH" = true ] ; then
339 if [ "$ENABLE_BLUETOOTH" = true ] ; then
339 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
340 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
340 fi
341 fi
341 if [ "$ENABLE_WIRELESS" = true ] ; then
342 if [ "$ENABLE_WIRELESS" = true ] ; then
342 APT_INCLUDES="${APT_INCLUDES},wireless-tools,crda,wireless-regdb"
343 APT_INCLUDES="${APT_INCLUDES},wireless-tools,crda,wireless-regdb"
343 fi
344 fi
344 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
345 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
345 # Check if the internal wireless interface is not supported by the RPi model
346 # Check if the internal wireless interface is not supported by the RPi model
346 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
347 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
347 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
348 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
348 exit 1
349 exit 1
349 fi
350 fi
350 fi
351 fi
351
352
352 if [ "$BUILD_KERNEL" = false ] && [ "$ENABLE_NEXMON" = true ]; then
353 if [ "$BUILD_KERNEL" = false ] && [ "$ENABLE_NEXMON" = true ]; then
353 echo "error: You have to compile kernel sources, if you want to enable nexmon"
354 echo "error: You have to compile kernel sources, if you want to enable nexmon"
354 exit 1
355 exit 1
355 fi
356 fi
356
357
357 # Prepare date string for default image file name
358 # Prepare date string for default image file name
358 DATE="$(date +%Y-%m-%d)"
359 DATE="$(date +%Y-%m-%d)"
359 if [ -z "$KERNEL_BRANCH" ] ; then
360 if [ -z "$KERNEL_BRANCH" ] ; then
360 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
361 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
361 else
362 else
362 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
363 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
363 fi
364 fi
364
365
365 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
366 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
366 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
367 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
367 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
368 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
368 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
369 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
369 exit 1
370 exit 1
370 fi
371 fi
371 fi
372 fi
372
373
373 # Add cmake to compile videocore sources
374 # Add cmake to compile videocore sources
374 if [ "$ENABLE_VIDEOCORE" = true ] ; then
375 if [ "$ENABLE_VIDEOCORE" = true ] ; then
375 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
376 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
376 fi
377 fi
377
378
378 # Add deps for nexmon
379 # Add deps for nexmon
379 if [ "$ENABLE_NEXMON" = true ] ; then
380 if [ "$ENABLE_NEXMON" = true ] ; then
380 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf bison flex make autoconf automake build-essential libtool"
381 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf bison flex make autoconf automake build-essential libtool"
381 fi
382 fi
382
383
383 # Add libncurses5 to enable kernel menuconfig
384 # Add libncurses5 to enable kernel menuconfig
384 if [ "$KERNEL_MENUCONFIG" = true ] ; then
385 if [ "$KERNEL_MENUCONFIG" = true ] ; then
385 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
386 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
386 fi
387 fi
387
388
388 # Add ccache compiler cache for (faster) kernel cross (re)compilation
389 # Add ccache compiler cache for (faster) kernel cross (re)compilation
389 if [ "$KERNEL_CCACHE" = true ] ; then
390 if [ "$KERNEL_CCACHE" = true ] ; then
390 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
391 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
391 fi
392 fi
392
393
393 # Add cryptsetup package to enable filesystem encryption
394 # Add cryptsetup package to enable filesystem encryption
394 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
395 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
395 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
396 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
396 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
397 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
397
398
398 # If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
399 # If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
399 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
400 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
400 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
401 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
401 fi
402 fi
402
403
403 if [ -z "$CRYPTFS_PASSWORD" ] ; then
404 if [ -z "$CRYPTFS_PASSWORD" ] ; then
404 echo "error: no password defined (CRYPTFS_PASSWORD)!"
405 echo "error: no password defined (CRYPTFS_PASSWORD)!"
405 exit 1
406 exit 1
406 fi
407 fi
407 ENABLE_INITRAMFS=true
408 ENABLE_INITRAMFS=true
408 fi
409 fi
409
410
410 # Add initramfs generation tools
411 # Add initramfs generation tools
411 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
412 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
412 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
413 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
413 fi
414 fi
414
415
415 # Add device-tree-compiler required for building the U-Boot bootloader
416 # Add device-tree-compiler required for building the U-Boot bootloader
416 if [ "$ENABLE_UBOOT" = true ] ; then
417 if [ "$ENABLE_UBOOT" = true ] ; then
417 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
418 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
418 fi
419 fi
419
420
420 # Check if root SSH (v2) public key file exists
421 # Check if root SSH (v2) public key file exists
421 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
422 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
422 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
423 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
423 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
424 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
424 exit 1
425 exit 1
425 fi
426 fi
426 fi
427 fi
427
428
428 # Check if $USER_NAME SSH (v2) public key file exists
429 # Check if $USER_NAME SSH (v2) public key file exists
429 if [ -n "$SSH_USER_PUB_KEY" ] ; then
430 if [ -n "$SSH_USER_PUB_KEY" ] ; then
430 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
431 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
431 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
432 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
432 exit 1
433 exit 1
433 fi
434 fi
434 fi
435 fi
435
436
436 if [ "$ENABLE_NEXMON" = true ] && [ -n "$KERNEL_BRANCH" ] ; then
437 if [ "$ENABLE_NEXMON" = true ] && [ -n "$KERNEL_BRANCH" ] ; then
437 echo "error: Please unset KERNEL_BRANCH if using ENABLE_NEXMON"
438 echo "error: Please unset KERNEL_BRANCH if using ENABLE_NEXMON"
438 exit 1
439 exit 1
439 fi
440 fi
440
441
441 # Check if all required packages are installed on the build system
442 # Check if all required packages are installed on the build system
442 for package in $REQUIRED_PACKAGES ; do
443 for package in $REQUIRED_PACKAGES ; do
443 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
444 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
444 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
445 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
445 fi
446 fi
446 done
447 done
447
448
448 # If there are missing packages ask confirmation for install, or exit
449 # If there are missing packages ask confirmation for install, or exit
449 if [ -n "$MISSING_PACKAGES" ] ; then
450 if [ -n "$MISSING_PACKAGES" ] ; then
450 echo "the following packages needed by this script are not installed:"
451 echo "the following packages needed by this script are not installed:"
451 echo "$MISSING_PACKAGES"
452 echo "$MISSING_PACKAGES"
452
453
453 printf "\ndo you want to install the missing packages right now? [y/n] "
454 printf "\ndo you want to install the missing packages right now? [y/n] "
454 read -r confirm
455 read -r confirm
455 [ "$confirm" != "y" ] && exit 1
456 [ "$confirm" != "y" ] && exit 1
456
457
457 # Make sure all missing required packages are installed
458 # Make sure all missing required packages are installed
458 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
459 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
459 fi
460 fi
460
461
461 # Check if ./bootstrap.d directory exists
462 # Check if ./bootstrap.d directory exists
462 if [ ! -d "./bootstrap.d/" ] ; then
463 if [ ! -d "./bootstrap.d/" ] ; then
463 echo "error: './bootstrap.d' required directory not found!"
464 echo "error: './bootstrap.d' required directory not found!"
464 exit 1
465 exit 1
465 fi
466 fi
466
467
467 # Check if ./files directory exists
468 # Check if ./files directory exists
468 if [ ! -d "./files/" ] ; then
469 if [ ! -d "./files/" ] ; then
469 echo "error: './files' required directory not found!"
470 echo "error: './files' required directory not found!"
470 exit 1
471 exit 1
471 fi
472 fi
472
473
473 # Check if specified KERNELSRC_DIR directory exists
474 # Check if specified KERNELSRC_DIR directory exists
474 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
475 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
475 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
476 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
476 exit 1
477 exit 1
477 fi
478 fi
478
479
479 # Check if specified UBOOTSRC_DIR directory exists
480 # Check if specified UBOOTSRC_DIR directory exists
480 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
481 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
481 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
482 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
482 exit 1
483 exit 1
483 fi
484 fi
484
485
485 # Check if specified VIDEOCORESRC_DIR directory exists
486 # Check if specified VIDEOCORESRC_DIR directory exists
486 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
487 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
487 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
488 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
488 exit 1
489 exit 1
489 fi
490 fi
490
491
491 # Check if specified FBTURBOSRC_DIR directory exists
492 # Check if specified FBTURBOSRC_DIR directory exists
492 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
493 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
493 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
494 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
494 exit 1
495 exit 1
495 fi
496 fi
496
497
497 # Check if specified NEXMONSRC_DIR directory exists
498 # Check if specified NEXMONSRC_DIR directory exists
498 if [ -n "$NEXMONSRC_DIR" ] && [ ! -d "$NEXMONSRC_DIR" ] ; then
499 if [ -n "$NEXMONSRC_DIR" ] && [ ! -d "$NEXMONSRC_DIR" ] ; then
499 echo "error: '${NEXMONSRC_DIR}' specified directory not found (NEXMONSRC_DIR)!"
500 echo "error: '${NEXMONSRC_DIR}' specified directory not found (NEXMONSRC_DIR)!"
500 exit 1
501 exit 1
501 fi
502 fi
502
503
503 # Check if specified CHROOT_SCRIPTS directory exists
504 # Check if specified CHROOT_SCRIPTS directory exists
504 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
505 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
505 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
506 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
506 exit 1
507 exit 1
507 fi
508 fi
508
509
509 # Check if specified device mapping already exists (will be used by cryptsetup)
510 # Check if specified device mapping already exists (will be used by cryptsetup)
510 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
511 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
511 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
512 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
512 exit 1
513 exit 1
513 fi
514 fi
514
515
515 # Don't clobber an old build
516 # Don't clobber an old build
516 if [ -e "$BUILDDIR" ] ; then
517 if [ -e "$BUILDDIR" ] ; then
517 echo "error: directory ${BUILDDIR} already exists, not proceeding"
518 echo "error: directory ${BUILDDIR} already exists, not proceeding"
518 exit 1
519 exit 1
519 fi
520 fi
520
521
521 # Setup chroot directory
522 # Setup chroot directory
522 mkdir -p "${R}"
523 mkdir -p "${R}"
523
524
524 # Check if build directory has enough of free disk space >512MB
525 # Check if build directory has enough of free disk space >512MB
525 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
526 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
526 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
527 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
527 exit 1
528 exit 1
528 fi
529 fi
529
530
530 set -x
531 set -x
531
532
532 # Call "cleanup" function on various signals and errors
533 # Call "cleanup" function on various signals and errors
533 trap cleanup 0 1 2 3 6
534 trap cleanup 0 1 2 3 6
534
535
535 # Add required packages for the minbase installation
536 # Add required packages for the minbase installation
536 if [ "$ENABLE_MINBASE" = true ] ; then
537 if [ "$ENABLE_MINBASE" = true ] ; then
537 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
538 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
538 fi
539 fi
539
540
540 # Add parted package, required to get partprobe utility
541 # Add parted package, required to get partprobe utility
541 if [ "$EXPANDROOT" = true ] ; then
542 if [ "$EXPANDROOT" = true ] ; then
542 APT_INCLUDES="${APT_INCLUDES},parted"
543 APT_INCLUDES="${APT_INCLUDES},parted"
543 fi
544 fi
544
545
545 # Add dbus package, recommended if using systemd
546 # Add dbus package, recommended if using systemd
546 if [ "$ENABLE_DBUS" = true ] ; then
547 if [ "$ENABLE_DBUS" = true ] ; then
547 APT_INCLUDES="${APT_INCLUDES},dbus"
548 APT_INCLUDES="${APT_INCLUDES},dbus"
548 fi
549 fi
549
550
550 # Add iptables IPv4/IPv6 package
551 # Add iptables IPv4/IPv6 package
551 if [ "$ENABLE_IPTABLES" = true ] ; then
552 if [ "$ENABLE_IPTABLES" = true ] ; then
552 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
553 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
553 fi
554 fi
554 # Add apparmor for KERNEL_SECURITY
555 # Add apparmor for KERNEL_SECURITY
555 if [ "$KERNEL_SECURITY" = true ] ; then
556 if [ "$KERNEL_SECURITY" = true ] ; then
556 APT_INCLUDES="${APT_INCLUDES},apparmor,apparmor-utils,apparmor-profiles,apparmor-profiles-extra,libapparmor-perl"
557 APT_INCLUDES="${APT_INCLUDES},apparmor,apparmor-utils,apparmor-profiles,apparmor-profiles-extra,libapparmor-perl"
557 fi
558 fi
558
559
559 # Add openssh server package
560 # Add openssh server package
560 if [ "$ENABLE_SSHD" = true ] ; then
561 if [ "$ENABLE_SSHD" = true ] ; then
561 APT_INCLUDES="${APT_INCLUDES},openssh-server"
562 APT_INCLUDES="${APT_INCLUDES},openssh-server"
562 fi
563 fi
563
564
564 # Add alsa-utils package
565 # Add alsa-utils package
565 if [ "$ENABLE_SOUND" = true ] ; then
566 if [ "$ENABLE_SOUND" = true ] ; then
566 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
567 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
567 fi
568 fi
568
569
569 # Add rng-tools package
570 # Add rng-tools package
570 if [ "$ENABLE_HWRANDOM" = true ] ; then
571 if [ "$ENABLE_HWRANDOM" = true ] ; then
571 APT_INCLUDES="${APT_INCLUDES},rng-tools"
572 APT_INCLUDES="${APT_INCLUDES},rng-tools"
572 fi
573 fi
573
574
574 # Add fbturbo video driver
575 # Add fbturbo video driver
575 if [ "$ENABLE_FBTURBO" = true ] ; then
576 if [ "$ENABLE_FBTURBO" = true ] ; then
576 # Enable xorg package dependencies
577 # Enable xorg package dependencies
577 ENABLE_XORG=true
578 ENABLE_XORG=true
578 fi
579 fi
579
580
580 # Add user defined window manager package
581 # Add user defined window manager package
581 if [ -n "$ENABLE_WM" ] ; then
582 if [ -n "$ENABLE_WM" ] ; then
582 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
583 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
583
584
584 # Enable xorg package dependencies
585 # Enable xorg package dependencies
585 ENABLE_XORG=true
586 ENABLE_XORG=true
586 fi
587 fi
587
588
588 # Add xorg package
589 # Add xorg package
589 if [ "$ENABLE_XORG" = true ] ; then
590 if [ "$ENABLE_XORG" = true ] ; then
590 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
591 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
591 fi
592 fi
592
593
593 # Replace selected packages with smaller clones
594 # Replace selected packages with smaller clones
594 if [ "$ENABLE_REDUCE" = true ] ; then
595 if [ "$ENABLE_REDUCE" = true ] ; then
595 # Add levee package instead of vim-tiny
596 # Add levee package instead of vim-tiny
596 if [ "$REDUCE_VIM" = true ] ; then
597 if [ "$REDUCE_VIM" = true ] ; then
597 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
598 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
598 fi
599 fi
599
600
600 # Add dropbear package instead of openssh-server
601 # Add dropbear package instead of openssh-server
601 if [ "$REDUCE_SSHD" = true ] ; then
602 if [ "$REDUCE_SSHD" = true ] ; then
602 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
603 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
603 fi
604 fi
604 fi
605 fi
605
606
606 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
607 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
607 if [ "$ENABLE_SYSVINIT" = false ] ; then
608 if [ "$ENABLE_SYSVINIT" = false ] ; then
608 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
609 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
609 fi
610 fi
610
611
611 # Configure kernel sources if no KERNELSRC_DIR
612 # Configure kernel sources if no KERNELSRC_DIR
612 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
613 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
613 KERNELSRC_CONFIG=true
614 KERNELSRC_CONFIG=true
614 fi
615 fi
615
616
616 # Configure reduced kernel
617 # Configure reduced kernel
617 if [ "$KERNEL_REDUCE" = true ] ; then
618 if [ "$KERNEL_REDUCE" = true ] ; then
618 KERNELSRC_CONFIG=false
619 KERNELSRC_CONFIG=false
619 fi
620 fi
620
621
621 # Configure qemu compatible kernel
622 # Configure qemu compatible kernel
622 if [ "$ENABLE_QEMU" = true ] ; then
623 if [ "$ENABLE_QEMU" = true ] ; then
623 DTB_FILE=vexpress-v2p-ca15_a7.dtb
624 DTB_FILE=vexpress-v2p-ca15_a7.dtb
624 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
625 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
625 KERNEL_DEFCONFIG="vexpress_defconfig"
626 KERNEL_DEFCONFIG="vexpress_defconfig"
626 if [ "$KERNEL_MENUCONFIG" = false ] ; then
627 if [ "$KERNEL_MENUCONFIG" = false ] ; then
627 KERNEL_OLDDEFCONFIG=true
628 KERNEL_OLDDEFCONFIG=true
628 fi
629 fi
629 fi
630 fi
630
631
631 # Execute bootstrap scripts
632 # Execute bootstrap scripts
632 for SCRIPT in bootstrap.d/*.sh; do
633 for SCRIPT in bootstrap.d/*.sh; do
633 head -n 3 "$SCRIPT"
634 head -n 3 "$SCRIPT"
634 . "$SCRIPT"
635 . "$SCRIPT"
635 done
636 done
636
637
637 ## Execute custom bootstrap scripts
638 ## Execute custom bootstrap scripts
638 if [ -d "custom.d" ] ; then
639 if [ -d "custom.d" ] ; then
639 for SCRIPT in custom.d/*.sh; do
640 for SCRIPT in custom.d/*.sh; do
640 . "$SCRIPT"
641 . "$SCRIPT"
641 done
642 done
642 fi
643 fi
643
644
644 # Execute custom scripts inside the chroot
645 # Execute custom scripts inside the chroot
645 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
646 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
646 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
647 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
647 chroot_exec /bin/bash -x <<'EOF'
648 chroot_exec /bin/bash -x <<'EOF'
648 for SCRIPT in /chroot_scripts/* ; do
649 for SCRIPT in /chroot_scripts/* ; do
649 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
650 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
650 $SCRIPT
651 $SCRIPT
651 fi
652 fi
652 done
653 done
653 EOF
654 EOF
654 rm -rf "${R}/chroot_scripts"
655 rm -rf "${R}/chroot_scripts"
655 fi
656 fi
656
657
657 # Remove c/c++ build environment from the chroot
658 # Remove c/c++ build environment from the chroot
658 chroot_remove_cc
659 chroot_remove_cc
659
660
660 # Generate required machine-id
661 # Generate required machine-id
661 MACHINE_ID=$(dbus-uuidgen)
662 MACHINE_ID=$(dbus-uuidgen)
662 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
663 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
663 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
664 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
664
665
665 # APT Cleanup
666 # APT Cleanup
666 chroot_exec apt-get -y clean
667 chroot_exec apt-get -y clean
667 chroot_exec apt-get -y autoclean
668 chroot_exec apt-get -y autoclean
668 chroot_exec apt-get -y autoremove
669 chroot_exec apt-get -y autoremove
669
670
670 # Unmount mounted filesystems
671 # Unmount mounted filesystems
671 umount -l "${R}/proc"
672 umount -l "${R}/proc"
672 umount -l "${R}/sys"
673 umount -l "${R}/sys"
673
674
674 # Clean up directories
675 # Clean up directories
675 rm -rf "${R}/run/*"
676 rm -rf "${R}/run/*"
676 rm -rf "${R}/tmp/*"
677 rm -rf "${R}/tmp/*"
677
678
679 # Clean up APT proxy settings
680 if [ "$KEEP_APT_PROXY" = false ] ; then
681 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
682 fi
683
678 # Clean up files
684 # Clean up files
679 rm -f "${ETC_DIR}/ssh/ssh_host_*"
685 rm -f "${ETC_DIR}/ssh/ssh_host_*"
680 rm -f "${ETC_DIR}/dropbear/dropbear_*"
686 rm -f "${ETC_DIR}/dropbear/dropbear_*"
681 rm -f "${ETC_DIR}/apt/sources.list.save"
687 rm -f "${ETC_DIR}/apt/sources.list.save"
682 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
688 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
683 rm -f "${ETC_DIR}/*-"
689 rm -f "${ETC_DIR}/*-"
684 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
685 rm -f "${ETC_DIR}/resolv.conf"
690 rm -f "${ETC_DIR}/resolv.conf"
686 rm -f "${R}/root/.bash_history"
691 rm -f "${R}/root/.bash_history"
687 rm -f "${R}/var/lib/urandom/random-seed"
692 rm -f "${R}/var/lib/urandom/random-seed"
688 rm -f "${R}/initrd.img"
693 rm -f "${R}/initrd.img"
689 rm -f "${R}/vmlinuz"
694 rm -f "${R}/vmlinuz"
690 rm -f "${R}${QEMU_BINARY}"
695 rm -f "${R}${QEMU_BINARY}"
691
696
692 if [ "$ENABLE_QEMU" = true ] ; then
697 if [ "$ENABLE_QEMU" = true ] ; then
693 # Setup QEMU directory
698 # Setup QEMU directory
694 mkdir "${BASEDIR}/qemu"
699 mkdir "${BASEDIR}/qemu"
695
700
696 # Copy kernel image to QEMU directory
701 # Copy kernel image to QEMU directory
697 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
702 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
698
703
699 # Copy kernel config to QEMU directory
704 # Copy kernel config to QEMU directory
700 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
705 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
701
706
702 # Copy kernel dtbs to QEMU directory
707 # Copy kernel dtbs to QEMU directory
703 for dtb in "${BOOT_DIR}/"*.dtb ; do
708 for dtb in "${BOOT_DIR}/"*.dtb ; do
704 if [ -f "${dtb}" ] ; then
709 if [ -f "${dtb}" ] ; then
705 install_readonly "${dtb}" "${BASEDIR}/qemu/"
710 install_readonly "${dtb}" "${BASEDIR}/qemu/"
706 fi
711 fi
707 done
712 done
708
713
709 # Copy kernel overlays to QEMU directory
714 # Copy kernel overlays to QEMU directory
710 if [ -d "${BOOT_DIR}/overlays" ] ; then
715 if [ -d "${BOOT_DIR}/overlays" ] ; then
711 # Setup overlays dtbs directory
716 # Setup overlays dtbs directory
712 mkdir "${BASEDIR}/qemu/overlays"
717 mkdir "${BASEDIR}/qemu/overlays"
713
718
714 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
719 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
715 if [ -f "${dtb}" ] ; then
720 if [ -f "${dtb}" ] ; then
716 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
721 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
717 fi
722 fi
718 done
723 done
719 fi
724 fi
720
725
721 # Copy u-boot files to QEMU directory
726 # Copy u-boot files to QEMU directory
722 if [ "$ENABLE_UBOOT" = true ] ; then
727 if [ "$ENABLE_UBOOT" = true ] ; then
723 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
728 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
724 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
729 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
725 fi
730 fi
726 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
731 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
727 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
732 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
728 fi
733 fi
729 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
734 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
730 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
735 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
731 fi
736 fi
732 fi
737 fi
733
738
734 # Copy initramfs to QEMU directory
739 # Copy initramfs to QEMU directory
735 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
740 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
736 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
741 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
737 fi
742 fi
738 fi
743 fi
739
744
740 # Calculate size of the chroot directory in KB
745 # Calculate size of the chroot directory in KB
741 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
746 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
742
747
743 # Calculate the amount of needed 512 Byte sectors
748 # Calculate the amount of needed 512 Byte sectors
744 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
749 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
745 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
750 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
746 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
751 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
747
752
748 # The root partition is EXT4
753 # The root partition is EXT4
749 # This means more space than the actual used space of the chroot is used.
754 # This means more space than the actual used space of the chroot is used.
750 # As overhead for journaling and reserved blocks 35% are added.
755 # As overhead for journaling and reserved blocks 35% are added.
751 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
756 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
752
757
753 # Calculate required image size in 512 Byte sectors
758 # Calculate required image size in 512 Byte sectors
754 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
759 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
755
760
756 # Prepare image file
761 # Prepare image file
757 if [ "$ENABLE_SPLITFS" = true ] ; then
762 if [ "$ENABLE_SPLITFS" = true ] ; then
758 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
763 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
759 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
764 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
760 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
765 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
761 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
766 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
762
767
763 # Write firmware/boot partition tables
768 # Write firmware/boot partition tables
764 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
769 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
765 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
770 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
766 EOM
771 EOM
767
772
768 # Write root partition table
773 # Write root partition table
769 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
774 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
770 ${TABLE_SECTORS},${ROOT_SECTORS},83
775 ${TABLE_SECTORS},${ROOT_SECTORS},83
771 EOM
776 EOM
772
777
773 # Setup temporary loop devices
778 # Setup temporary loop devices
774 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
779 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
775 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
780 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
776 else # ENABLE_SPLITFS=false
781 else # ENABLE_SPLITFS=false
777 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
782 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
778 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
783 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
779
784
780 # Write partition table
785 # Write partition table
781 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
786 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
782 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
787 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
783 ${ROOT_OFFSET},${ROOT_SECTORS},83
788 ${ROOT_OFFSET},${ROOT_SECTORS},83
784 EOM
789 EOM
785
790
786 # Setup temporary loop devices
791 # Setup temporary loop devices
787 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
792 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
788 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
793 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
789 fi
794 fi
790
795
791 if [ "$ENABLE_CRYPTFS" = true ] ; then
796 if [ "$ENABLE_CRYPTFS" = true ] ; then
792 # Create dummy ext4 fs
797 # Create dummy ext4 fs
793 mkfs.ext4 "$ROOT_LOOP"
798 mkfs.ext4 "$ROOT_LOOP"
794
799
795 # Setup password keyfile
800 # Setup password keyfile
796 touch .password
801 touch .password
797 chmod 600 .password
802 chmod 600 .password
798 echo -n ${CRYPTFS_PASSWORD} > .password
803 echo -n ${CRYPTFS_PASSWORD} > .password
799
804
800 # Initialize encrypted partition
805 # Initialize encrypted partition
801 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
806 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
802
807
803 # Open encrypted partition and setup mapping
808 # Open encrypted partition and setup mapping
804 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
809 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
805
810
806 # Secure delete password keyfile
811 # Secure delete password keyfile
807 shred -zu .password
812 shred -zu .password
808
813
809 # Update temporary loop device
814 # Update temporary loop device
810 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
815 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
811
816
812 # Wipe encrypted partition (encryption cipher is used for randomness)
817 # Wipe encrypted partition (encryption cipher is used for randomness)
813 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
818 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
814 fi
819 fi
815
820
816 # Build filesystems
821 # Build filesystems
817 mkfs.vfat "$FRMW_LOOP"
822 mkfs.vfat "$FRMW_LOOP"
818 mkfs.ext4 "$ROOT_LOOP"
823 mkfs.ext4 "$ROOT_LOOP"
819
824
820 # Mount the temporary loop devices
825 # Mount the temporary loop devices
821 mkdir -p "$BUILDDIR/mount"
826 mkdir -p "$BUILDDIR/mount"
822 mount "$ROOT_LOOP" "$BUILDDIR/mount"
827 mount "$ROOT_LOOP" "$BUILDDIR/mount"
823
828
824 mkdir -p "$BUILDDIR/mount/boot/firmware"
829 mkdir -p "$BUILDDIR/mount/boot/firmware"
825 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
830 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
826
831
827 # Copy all files from the chroot to the loop device mount point directory
832 # Copy all files from the chroot to the loop device mount point directory
828 rsync -a "${R}/" "$BUILDDIR/mount/"
833 rsync -a "${R}/" "$BUILDDIR/mount/"
829
834
830 # Unmount all temporary loop devices and mount points
835 # Unmount all temporary loop devices and mount points
831 cleanup
836 cleanup
832
837
833 # Create block map file(s) of image(s)
838 # Create block map file(s) of image(s)
834 if [ "$ENABLE_SPLITFS" = true ] ; then
839 if [ "$ENABLE_SPLITFS" = true ] ; then
835 # Create block map files for "bmaptool"
840 # Create block map files for "bmaptool"
836 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
841 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
837 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
842 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
838
843
839 # Image was successfully created
844 # Image was successfully created
840 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
845 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
841 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
846 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
842 else
847 else
843 # Create block map file for "bmaptool"
848 # Create block map file for "bmaptool"
844 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
849 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
845
850
846 # Image was successfully created
851 # Image was successfully created
847 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
852 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
848
853
849 # Create qemu qcow2 image
854 # Create qemu qcow2 image
850 if [ "$ENABLE_QEMU" = true ] ; then
855 if [ "$ENABLE_QEMU" = true ] ; then
851 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
856 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
852 QEMU_SIZE=16G
857 QEMU_SIZE=16G
853
858
854 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
859 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
855 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
860 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
856
861
857 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
862 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
858 fi
863 fi
859 fi
864 fi
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant