##// END OF EJS Templates
Merge pull request #169 from burnbabyburn/dropbear...
drtyhlpr -
r531:f2b59207efa6 Fusion
parent child
Show More
@@ -0,0 +1,45
1 #!/bin/sh
2
3 PREREQ="dropbear"
4
5 prereqs() {
6 echo "$PREREQ"
7 }
8
9 case "$1" in
10 prereqs)
11 prereqs
12 exit 0
13 ;;
14 esac
15
16 . "${CONFDIR}/initramfs.conf"
17 . /usr/share/initramfs-tools/hook-functions
18
19 if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
20 cat > "${DESTDIR}/bin/unlock" << EOF
21 #!/bin/sh
22 if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
23 kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
24 # following line kill the remote shell right after the passphrase has
25 # been entered.
26 kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
27 exit 0
28 fi
29 exit 1
30 EOF
31
32 chmod 755 "${DESTDIR}/bin/unlock"
33
34 mkdir -p "${DESTDIR}/lib/unlock"
35 cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
36 #!/bin/sh
37 [ "\$1" == "--ping" ] && exit 1
38 /bin/plymouth "\$@"
39 EOF
40
41 chmod 755 "${DESTDIR}/lib/unlock/plymouth"
42
43 echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
44
45 fi No newline at end of file
@@ -1,526 +1,532
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 ##### `APT_INCLUDES`=""
51 ##### `APT_INCLUDES`=""
52 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
52 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
53
53
54 ##### `APT_INCLUDES_LATE`=""
54 ##### `APT_INCLUDES_LATE`=""
55 A comma-separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
55 A comma-separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
56
56
57 ---
57 ---
58
58
59 #### General system settings:
59 #### General system settings:
60 ##### `SET_ARCH`=32
60 ##### `SET_ARCH`=32
61 Set Architecture to default 32bit. If you want to 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.
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.
62
62
63 ##### `RPI_MODEL`=2
63 ##### `RPI_MODEL`=2
64 Specify the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
64 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
65 - `0` = Raspberry Pi 0 and Raspberry Pi 0 W
66 - `1` = Raspberry Pi 1 model A and B
66 - `1` = Raspberry Pi 1 model A and B
67 - `1P` = Raspberry Pi 1 model B+ and A+
67 - `1P` = Raspberry Pi 1 model B+ and A+
68 - `2` = Raspberry Pi 2 model B
68 - `2` = Raspberry Pi 2 model B
69 - `3` = Raspberry Pi 3 model B
69 - `3` = Raspberry Pi 3 model B
70 - `3P` = Raspberry Pi 3 model B+
70 - `3P` = Raspberry Pi 3 model B+
71
71
72 ##### `RELEASE`="buster"
72 ##### `RELEASE`="buster"
73 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
73 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
74
74
75 ##### `RELEASE_ARCH`="armhf"
75 ##### `RELEASE_ARCH`="armhf"
76 Set the desired Debian release architecture.
76 Set the desired Debian release architecture.
77
77
78 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
78 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
79 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
79 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
80
80
81 ##### `PASSWORD`="raspberry"
81 ##### `PASSWORD`="raspberry"
82 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
82 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
83
83
84 ##### `USER_PASSWORD`="raspberry"
84 ##### `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.
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.
86
86
87 ##### `DEFLOCAL`="en_US.UTF-8"
87 ##### `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`.
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`.
89
89
90 ##### `TIMEZONE`="Europe/Berlin"
90 ##### `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.
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.
92
92
93 ##### `EXPANDROOT`=true
93 ##### `EXPANDROOT`=true
94 Expand the root partition and filesystem automatically on first boot.
94 Expand the root partition and filesystem automatically on first boot.
95
95
96 ##### `ENABLE_QEMU`=false
96 ##### `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.
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.
98
98
99 ---
99 ---
100
100
101 #### Keyboard settings:
101 #### 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.
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.
103
103
104 ##### `XKB_MODEL`=""
104 ##### `XKB_MODEL`=""
105 Set the name of the model of your keyboard type.
105 Set the name of the model of your keyboard type.
106
106
107 ##### `XKB_LAYOUT`=""
107 ##### `XKB_LAYOUT`=""
108 Set the supported keyboard layout(s).
108 Set the supported keyboard layout(s).
109
109
110 ##### `XKB_VARIANT`=""
110 ##### `XKB_VARIANT`=""
111 Set the supported variant(s) of the keyboard layout(s).
111 Set the supported variant(s) of the keyboard layout(s).
112
112
113 ##### `XKB_OPTIONS`=""
113 ##### `XKB_OPTIONS`=""
114 Set extra xkb configuration options.
114 Set extra xkb configuration options.
115
115
116 ---
116 ---
117
117
118 #### Networking settings (DHCP):
118 #### 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`.`
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`.`
120
120
121 ##### `ENABLE_DHCP`=true
121 ##### `ENABLE_DHCP`=true
122 Set the system to use DHCP. This requires an DHCP server.
122 Set the system to use DHCP. This requires an DHCP server.
123
123
124 ---
124 ---
125
125
126 #### Networking settings (static):
126 #### 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`.
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`.
128
128
129 ##### `NET_ADDRESS`=""
129 ##### `NET_ADDRESS`=""
130 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
130 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
131
131
132 ##### `NET_GATEWAY`=""
132 ##### `NET_GATEWAY`=""
133 Set the IP address for the default gateway.
133 Set the IP address for the default gateway.
134
134
135 ##### `NET_DNS_1`=""
135 ##### `NET_DNS_1`=""
136 Set the IP address for the first DNS server.
136 Set the IP address for the first DNS server.
137
137
138 ##### `NET_DNS_2`=""
138 ##### `NET_DNS_2`=""
139 Set the IP address for the second DNS server.
139 Set the IP address for the second DNS server.
140
140
141 ##### `NET_DNS_DOMAINS`=""
141 ##### `NET_DNS_DOMAINS`=""
142 Set the default DNS search domains to use for non fully qualified hostnames.
142 Set the default DNS search domains to use for non fully qualified hostnames.
143
143
144 ##### `NET_NTP_1`=""
144 ##### `NET_NTP_1`=""
145 Set the IP address for the first NTP server.
145 Set the IP address for the first NTP server.
146
146
147 ##### `NET_NTP_2`=""
147 ##### `NET_NTP_2`=""
148 Set the IP address for the second NTP server.
148 Set the IP address for the second NTP server.
149
149
150 ---
150 ---
151
151
152 #### Basic system features:
152 #### Basic system features:
153 ##### `ENABLE_CONSOLE`=true
153 ##### `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.
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.
155
155
156 ##### `ENABLE_PRINTK`=false
156 ##### `ENABLE_PRINTK`=false
157 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
157 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
158
158
159 ##### `ENABLE_BLUETOOTH`=false
159 ##### `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/).
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/).
161
161
162 ##### `ENABLE_MINIUART_OVERLAY`=false
162 ##### `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.
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.
164
164
165 ##### `ENABLE_TURBO`=false
165 ##### `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.
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.
167
167
168 ##### `ENABLE_I2C`=false
168 ##### `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.
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.
170
170
171 ##### `ENABLE_SPI`=false
171 ##### `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.
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.
173
173
174 ##### `ENABLE_IPV6`=true
174 ##### `ENABLE_IPV6`=true
175 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
175 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
176
176
177 ##### `ENABLE_SSHD`=true
177 ##### `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.
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.
179
179
180 ##### `ENABLE_NONFREE`=false
180 ##### `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.
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.
182
182
183 ##### `ENABLE_WIRELESS`=false
183 ##### `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`.
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`.
185
185
186 ##### `ENABLE_RSYSLOG`=true
186 ##### `ENABLE_RSYSLOG`=true
187 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
187 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
188
188
189 ##### `ENABLE_SOUND`=true
189 ##### `ENABLE_SOUND`=true
190 Enable sound hardware and install Advanced Linux Sound Architecture.
190 Enable sound hardware and install Advanced Linux Sound Architecture.
191
191
192 ##### `ENABLE_HWRANDOM`=true
192 ##### `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.
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.
194
194
195 ##### `ENABLE_MINGPU`=false
195 ##### `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.
196 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
197
197
198 ##### `ENABLE_DBUS`=true
198 ##### `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.
199 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
200
200
201 ##### `ENABLE_XORG`=false
201 ##### `ENABLE_XORG`=false
202 Install Xorg open-source X Window System.
202 Install Xorg open-source X Window System.
203
203
204 ##### `ENABLE_WM`=""
204 ##### `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`.
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`.
206
206
207 ##### `ENABLE_SYSVINIT`=false
207 ##### `ENABLE_SYSVINIT`=false
208 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
208 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
209
209
210 ---
210 ---
211
211
212 #### Advanced system features:
212 #### Advanced system features:
213 ##### `ENABLE_SYSTEMDSWAP`=false
213 ##### `ENABLE_SYSTEMDSWAP`=false
214 Enables [Systemd-swap service](https://github.com/Nefelim4ag/systemd-swap). Usefull if `KERNEL_ZSWAP` is enabled.
214 Enables [Systemd-swap service](https://github.com/Nefelim4ag/systemd-swap). Usefull if `KERNEL_ZSWAP` is enabled.
215
215
216 ##### `ENABLE_MINBASE`=false
216 ##### `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.
217 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
218
218
219 ##### `ENABLE_REDUCE`=false
219 ##### `ENABLE_REDUCE`=false
220 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
220 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
221
221
222 ##### `ENABLE_UBOOT`=false
222 ##### `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.
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.
224
224
225 ##### `UBOOTSRC_DIR`=""
225 ##### `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.
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.
227
227
228 ##### `ENABLE_FBTURBO`=false
228 ##### `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.
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.
230
230
231 ##### `FBTURBOSRC_DIR`=""
231 ##### `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.
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.
233
233
234 ##### `ENABLE_VIDEOCORE`=false
234 ##### `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.
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.
236
236
237 ##### `VIDEOCORESRC_DIR`=""
237 ##### `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.
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.
239
239
240 ##### `ENABLE_NEXMON`=false
240 ##### `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).
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).
242
242
243 ##### `NEXMONSRC_DIR`=""
243 ##### `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.
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.
245
245
246 ##### `ENABLE_IPTABLES`=false
246 ##### `ENABLE_IPTABLES`=false
247 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
247 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
248
248
249 ##### `ENABLE_USER`=true
249 ##### `ENABLE_USER`=true
250 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
250 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
251
251
252 ##### `USER_NAME`=pi
252 ##### `USER_NAME`=pi
253 Non-root user to create. Ignored if `ENABLE_USER`=false
253 Non-root user to create. Ignored if `ENABLE_USER`=false
254
254
255 ##### `ENABLE_ROOT`=false
255 ##### `ENABLE_ROOT`=false
256 Set root user password so root login will be enabled
256 Set root user password so root login will be enabled
257
257
258 ##### `ENABLE_HARDNET`=false
258 ##### `ENABLE_HARDNET`=false
259 Enable IPv4/IPv6 network stack hardening settings.
259 Enable IPv4/IPv6 network stack hardening settings.
260
260
261 ##### `ENABLE_SPLITFS`=false
261 ##### `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 `/`.
262 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
263
263
264 ##### `CHROOT_SCRIPTS`=""
264 ##### `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.
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.
266
266
267 ##### `ENABLE_INITRAMFS`=false
267 ##### `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.
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.
269
269
270 ##### `ENABLE_IFNAMES`=true
270 ##### `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.
271 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
272
272
273 ##### `DISABLE_UNDERVOLT_WARNINGS`=
273 ##### `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.
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.
275
275
276 ---
276 ---
277
277
278 #### SSH settings:
278 #### SSH settings:
279 ##### `SSH_ENABLE_ROOT`=false
279 ##### `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`.
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`.
281
281
282 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
282 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
283 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
283 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
284
284
285 ##### `SSH_LIMIT_USERS`=false
285 ##### `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).
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).
287
287
288 ##### `SSH_ROOT_PUB_KEY`=""
288 ##### `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`.
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`.
290
290
291 ##### `SSH_USER_PUB_KEY`=""
291 ##### `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.
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.
293
293
294 ---
294 ---
295
295
296 #### Kernel compilation:
296 #### Kernel compilation:
297 ##### `BUILD_KERNEL`=true
297 ##### `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.
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.
299
299
300 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
300 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
301 This sets the cross-compile environment for the compiler.
301 This sets the cross-compile environment for the compiler.
302
302
303 ##### `KERNEL_ARCH`="arm"
303 ##### `KERNEL_ARCH`="arm"
304 This sets the kernel architecture for the compiler.
304 This sets the kernel architecture for the compiler.
305
305
306 ##### `KERNEL_IMAGE`="kernel7.img"
306 ##### `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.
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.
308
308
309 ##### `KERNEL_BRANCH`=""
309 ##### `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.
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.
311
311
312 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
312 ##### `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.
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.
314
314
315 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
315 ##### `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.
316 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
317
317
318 ##### `KERNEL_REDUCE`=false
318 ##### `KERNEL_REDUCE`=false
319 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
319 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
320
320
321 ##### `KERNEL_THREADS`=1
321 ##### `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.
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.
323
323
324 ##### `KERNEL_HEADERS`=true
324 ##### `KERNEL_HEADERS`=true
325 Install kernel headers with the built kernel.
325 Install kernel headers with the built kernel.
326
326
327 ##### `KERNEL_MENUCONFIG`=false
327 ##### `KERNEL_MENUCONFIG`=false
328 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
328 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
329
329
330 ##### `KERNEL_OLDDEFCONFIG`=false
330 ##### `KERNEL_OLDDEFCONFIG`=false
331 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
331 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
332
332
333 ##### `KERNEL_CCACHE`=false
333 ##### `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.
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.
335
335
336 ##### `KERNEL_REMOVESRC`=true
336 ##### `KERNEL_REMOVESRC`=true
337 Remove all kernel sources from the generated OS image after it was built and installed.
337 Remove all kernel sources from the generated OS image after it was built and installed.
338
338
339 ##### `KERNELSRC_DIR`=""
339 ##### `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.
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.
341
341
342 ##### `KERNELSRC_CLEAN`=false
342 ##### `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.
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.
344
344
345 ##### `KERNELSRC_CONFIG`=true
345 ##### `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.
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.
347
347
348 ##### `KERNELSRC_USRCONFIG`=""
348 ##### `KERNELSRC_USRCONFIG`=""
349 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
349 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
350
350
351 ##### `KERNELSRC_PREBUILT`=false
351 ##### `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.
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.
353
353
354 ##### `RPI_FIRMWARE_DIR`=""
354 ##### `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.
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.
356
356
357 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
357 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
358 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
358 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
359
359
360 ##### `KERNEL_NF`=false
360 ##### `KERNEL_NF`=false
361 Enable Netfilter modules as kernel modules
361 Enable Netfilter modules as kernel modules
362
362
363 ##### `KERNEL_VIRT`=false
363 ##### `KERNEL_VIRT`=false
364 Enable Kernel KVM support (/dev/kvm)
364 Enable Kernel KVM support (/dev/kvm)
365
365
366 ##### `KERNEL_ZSWAP`=false
366 ##### `KERNEL_ZSWAP`=false
367 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
367 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
368
368
369 ##### `KERNEL_BPF`=true
369 ##### `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]
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]
371
371
372 ##### `KERNEL_SECURITY`=false
372 ##### `KERNEL_SECURITY`=false
373 Enables Apparmor, integrity subsystem, auditing
373 Enables Apparmor, integrity subsystem, auditing
374 ---
374 ---
375
375
376 #### Reduce disk usage:
376 #### Reduce disk usage:
377 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
377 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
378
378
379 ##### `REDUCE_APT`=true
379 ##### `REDUCE_APT`=true
380 Configure APT to use compressed package repository lists and no package caching files.
380 Configure APT to use compressed package repository lists and no package caching files.
381
381
382 ##### `REDUCE_DOC`=true
382 ##### `REDUCE_DOC`=true
383 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
383 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
384
384
385 ##### `REDUCE_MAN`=true
385 ##### `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.
386 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
387
387
388 ##### `REDUCE_VIM`=false
388 ##### `REDUCE_VIM`=false
389 Replace `vim-tiny` package by `levee` a tiny vim clone.
389 Replace `vim-tiny` package by `levee` a tiny vim clone.
390
390
391 ##### `REDUCE_BASH`=false
391 ##### `REDUCE_BASH`=false
392 Remove `bash` package and switch to `dash` shell (experimental).
392 Remove `bash` package and switch to `dash` shell (experimental).
393
393
394 ##### `REDUCE_HWDB`=true
394 ##### `REDUCE_HWDB`=true
395 Remove PCI related hwdb files (experimental).
395 Remove PCI related hwdb files (experimental).
396
396
397 ##### `REDUCE_SSHD`=true
397 ##### `REDUCE_SSHD`=true
398 Replace `openssh-server` with `dropbear`.
398 Replace `openssh-server` with `dropbear`.
399
399
400 ##### `REDUCE_LOCALE`=true
400 ##### `REDUCE_LOCALE`=true
401 Remove all `locale` translation files.
401 Remove all `locale` translation files.
402
402
403 ---
403 ---
404
404
405 #### Encrypted root partition:
405 #### Encrypted root partition:
406 ##### `ENABLE_CRYPTFS`=false
406 ##### `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.
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.
408
408
409 ##### `CRYPTFS_PASSWORD`=""
409 ##### `CRYPTFS_PASSWORD`=""
410 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
410 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
411
411
412 ##### `CRYPTFS_MAPPING`="secure"
412 ##### `CRYPTFS_MAPPING`="secure"
413 Set name of dm-crypt managed device-mapper mapping.
413 Set name of dm-crypt managed device-mapper mapping.
414
414
415 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
415 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
416 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
416 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
417
417
418 ##### `CRYPTFS_XTSKEYSIZE`=512
418 ##### `CRYPTFS_XTSKEYSIZE`=512
419 Sets key size in bits. The argument has to be a multiple of 8.
419 Sets key size in bits. The argument has to be a multiple of 8.
420
420
421 ##### `CRYPTFS_DROPBEAR`=false
422 Enable Dropbear Initramfs support
423
424 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
425 Provide path to dropbear Public RSA-OpenSSH Key
426
421 ---
427 ---
422
428
423 #### Build settings:
429 #### Build settings:
424 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
430 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
425 Set a path to a working directory used by the script to generate an image.
431 Set a path to a working directory used by the script to generate an image.
426
432
427 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
433 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
428 Set a filename for the output file(s). Note: the script will create $IMAGE_NAME.img if `ENABLE_SPLITFS`=false or $IMAGE_NAME-frmw.img and $IMAGE_NAME-root.img if `ENABLE_SPLITFS`=true. Note 2: If the KERNEL_BRANCH is not set, the word "CURRENT" is used.
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.
429
435
430 ## Understanding the script
436 ## Understanding the script
431 The functions of this script that are required for the different stages of the bootstrapping are split up into single files located inside the `bootstrap.d` directory. During the bootstrapping every script in this directory gets executed in lexicographical order:
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:
432
438
433 | Script | Description |
439 | Script | Description |
434 | --- | --- |
440 | --- | --- |
435 | `10-bootstrap.sh` | Debootstrap basic system |
441 | `10-bootstrap.sh` | Debootstrap basic system |
436 | `11-apt.sh` | Setup APT repositories |
442 | `11-apt.sh` | Setup APT repositories |
437 | `12-locale.sh` | Setup Locales and keyboard settings |
443 | `12-locale.sh` | Setup Locales and keyboard settings |
438 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
444 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
439 | `14-fstab.sh` | Setup fstab and initramfs |
445 | `14-fstab.sh` | Setup fstab and initramfs |
440 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
446 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
441 | `20-networking.sh` | Setup Networking |
447 | `20-networking.sh` | Setup Networking |
442 | `21-firewall.sh` | Setup Firewall |
448 | `21-firewall.sh` | Setup Firewall |
443 | `30-security.sh` | Setup Users and Security settings |
449 | `30-security.sh` | Setup Users and Security settings |
444 | `31-logging.sh` | Setup Logging |
450 | `31-logging.sh` | Setup Logging |
445 | `32-sshd.sh` | Setup SSH and public keys |
451 | `32-sshd.sh` | Setup SSH and public keys |
446 | `41-uboot.sh` | Build and Setup U-Boot |
452 | `41-uboot.sh` | Build and Setup U-Boot |
447 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
453 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
448 | `43-videocore.sh` | Build and Setup videocore libraries |
454 | `43-videocore.sh` | Build and Setup videocore libraries |
449 | `50-firstboot.sh` | First boot actions |
455 | `50-firstboot.sh` | First boot actions |
450 | `99-reduce.sh` | Reduce the disk space usage |
456 | `99-reduce.sh` | Reduce the disk space usage |
451
457
452 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.
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.
453
459
454 | Directory | Description |
460 | Directory | Description |
455 | --- | --- |
461 | --- | --- |
456 | `apt` | APT management configuration files |
462 | `apt` | APT management configuration files |
457 | `boot` | Boot and RPi 0/1/2/3 configuration files |
463 | `boot` | Boot and RPi 0/1/2/3 configuration files |
458 | `dpkg` | Package Manager configuration |
464 | `dpkg` | Package Manager configuration |
459 | `etc` | Configuration files and rc scripts |
465 | `etc` | Configuration files and rc scripts |
460 | `firstboot` | Scripts that get executed on first boot |
466 | `firstboot` | Scripts that get executed on first boot |
461 | `initramfs` | Initramfs scripts |
467 | `initramfs` | Initramfs scripts |
462 | `iptables` | Firewall configuration files |
468 | `iptables` | Firewall configuration files |
463 | `locales` | Locales configuration |
469 | `locales` | Locales configuration |
464 | `modules` | Kernel Modules configuration |
470 | `modules` | Kernel Modules configuration |
465 | `mount` | Fstab configuration |
471 | `mount` | Fstab configuration |
466 | `network` | Networking configuration files |
472 | `network` | Networking configuration files |
467 | `sysctl.d` | Swapping and Network Hardening configuration |
473 | `sysctl.d` | Swapping and Network Hardening configuration |
468 | `xorg` | fbturbo Xorg driver configuration |
474 | `xorg` | fbturbo Xorg driver configuration |
469
475
470 ## Custom packages and scripts
476 ## Custom packages and scripts
471 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`.
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`.
472
478
473 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
479 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
474
480
475 ## Logging of the bootstrapping process
481 ## Logging of the bootstrapping process
476 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:
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:
477
483
478 ```shell
484 ```shell
479 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
485 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
480 ```
486 ```
481
487
482 ## Flashing the image file
488 ## Flashing the image file
483 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`.
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`.
484
490
485 ##### Flashing examples:
491 ##### Flashing examples:
486 ```shell
492 ```shell
487 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
493 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
488 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
494 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
489 ```
495 ```
490 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
496 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
491 ```shell
497 ```shell
492 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
498 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
493 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
499 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
494 ```
500 ```
495
501
496 ## QEMU emulation
502 ## QEMU emulation
497 Start QEMU full system emulation:
503 Start QEMU full system emulation:
498 ```shell
504 ```shell
499 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"
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"
500 ```
506 ```
501
507
502 Start QEMU full system emulation and output to console:
508 Start QEMU full system emulation and output to console:
503 ```shell
509 ```shell
504 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
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
505 ```
511 ```
506
512
507 Start QEMU full system emulation with SMP and output to console:
513 Start QEMU full system emulation with SMP and output to console:
508 ```shell
514 ```shell
509 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
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
510 ```
516 ```
511
517
512 Start QEMU full system emulation with cryptfs, initramfs and output to console:
518 Start QEMU full system emulation with cryptfs, initramfs and output to console:
513 ```shell
519 ```shell
514 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
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
515 ```
521 ```
516
522
517 ## External links and references
523 ## External links and references
518 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
524 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
519 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
525 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
520 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
526 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
521 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
527 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
522 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
528 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
523 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
529 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
524 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
530 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
525 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
531 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
526 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
532 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,64 +1,99
1 #
1 #
2 # Setup fstab and initramfs
2 # Setup fstab and initramfs
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup fstab
8 # Install and setup fstab
9 install_readonly files/mount/fstab "${ETC_DIR}/fstab"
9 install_readonly files/mount/fstab "${ETC_DIR}/fstab"
10
10
11 if [ "$ENABLE_UBOOTUSB" = true ] ; then
11 if [ "$ENABLE_UBOOTUSB" = true ] ; then
12 sed -i "s/mmcblk0p1/sda1/" "${ETC_DIR}/fstab"
12 sed -i "s/mmcblk0p1/sda1/" "${ETC_DIR}/fstab"
13 sed -i "s/mmcblk0p2/sda2/" "${ETC_DIR}/fstab"
13 sed -i "s/mmcblk0p2/sda2/" "${ETC_DIR}/fstab"
14 fi
14 fi
15
15
16 # Add usb/sda disk root partition to fstab
16 # Add usb/sda disk root partition to fstab
17 if [ "$ENABLE_SPLITFS" = true ] && [ "$ENABLE_CRYPTFS" = false ] ; then
17 if [ "$ENABLE_SPLITFS" = true ] && [ "$ENABLE_CRYPTFS" = false ] ; then
18 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/fstab"
18 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/fstab"
19 fi
19 fi
20
20
21 # Add encrypted root partition to fstab and crypttab
21 # Add encrypted root partition to fstab and crypttab
22 if [ "$ENABLE_CRYPTFS" = true ] ; then
22 if [ "$ENABLE_CRYPTFS" = true ] ; then
23 # Replace fstab root partition with encrypted partition mapping
23 # Replace fstab root partition with encrypted partition mapping
24 sed -i "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING}/" "${ETC_DIR}/fstab"
24 sed -i "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING}/" "${ETC_DIR}/fstab"
25
25
26 # Add encrypted partition to crypttab and fstab
26 # Add encrypted partition to crypttab and fstab
27 install_readonly files/mount/crypttab "${ETC_DIR}/crypttab"
27 install_readonly files/mount/crypttab "${ETC_DIR}/crypttab"
28 echo "${CRYPTFS_MAPPING} /dev/mmcblk0p2 none luks,initramfs" >> "${ETC_DIR}/crypttab"
28 echo "${CRYPTFS_MAPPING} /dev/mmcblk0p2 none luks,initramfs" >> "${ETC_DIR}/crypttab"
29
29
30 if [ "$ENABLE_SPLITFS" = true ] ; then
30 if [ "$ENABLE_SPLITFS" = true ] ; then
31 # Add usb/sda disk to crypttab
31 # Add usb/sda disk to crypttab
32 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/crypttab"
32 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/crypttab"
33 fi
33 fi
34 fi
34 fi
35
35
36 # Generate initramfs file
36 # Generate initramfs file
37 if [ "$ENABLE_INITRAMFS" = true ] ; then
37 if [ "$ENABLE_INITRAMFS" = true ] ; then
38 if [ "$ENABLE_CRYPTFS" = true ] ; then
38 if [ "$ENABLE_CRYPTFS" = true ] ; then
39 # Include initramfs scripts to auto expand encrypted root partition
39 # Include initramfs scripts to auto expand encrypted root partition
40 if [ "$EXPANDROOT" = true ] ; then
40 if [ "$EXPANDROOT" = true ] ; then
41 install_exec files/initramfs/expand_encrypted_rootfs "${ETC_DIR}/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs"
41 install_exec files/initramfs/expand_encrypted_rootfs "${ETC_DIR}/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs"
42 install_exec files/initramfs/expand-premount "${ETC_DIR}/initramfs-tools/scripts/local-premount/expand-premount"
42 install_exec files/initramfs/expand-premount "${ETC_DIR}/initramfs-tools/scripts/local-premount/expand-premount"
43 install_exec files/initramfs/expand-tools "${ETC_DIR}/initramfs-tools/hooks/expand-tools"
43 install_exec files/initramfs/expand-tools "${ETC_DIR}/initramfs-tools/hooks/expand-tools"
44 fi
44 fi
45
45
46 # Disable SSHD inside initramfs
46 if [ "$CRYPTFS_DROPBEAR" = true ]; then
47 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=n\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
47 if [ -n "$CRYPTFS_DROPBEAR_PUBKEY" ] && [ -f "$CRYPTFS_DROPBEAR_PUBKEY" ] ; then
48 install_readonly "${CRYPTFS_DROPBEAR_PUBKEY}" "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
49 cat "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub >> "${ETC_DIR}"/dropbear-initramfs/authorized_keys
50 else
51 # Create key
52 chroot_exec /usr/bin/dropbearkey -t rsa -f /etc/dropbear-initramfs/id_rsa.dropbear
53
54 # Convert dropbear key to openssh key
55 chroot_exec /usr/lib/dropbear/dropbearconvert dropbear openssh /etc/dropbear-initramfs/id_rsa.dropbear /etc/dropbear-initramfs/id_rsa
56
57 # Get Public Key Part
58 chroot_exec /usr/bin/dropbearkey -y -f /etc/dropbear-initramfs/id_rsa.dropbear | chroot_exec tee /etc/dropbear-initramfs/id_rsa.pub
59
60 # Delete unwanted lines
61 sed -i '/Public/d' "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
62 sed -i '/Fingerprint/d' "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub
63
64 # Trust the new key
65 cat "${ETC_DIR}"/dropbear-initramfs/id_rsa.pub > "${ETC_DIR}"/dropbear-initramfs/authorized_keys
66
67 # Save Keys - convert with putty from rsa/openssh to puttkey
68 cp -f "${ETC_DIR}"/dropbear-initramfs/id_rsa "${BASEDIR}"/dropbear_initramfs_key.rsa
69
70 # Get unlock script
71 install_exec files/initramfs/crypt_unlock.sh "${ETC_DIR}"/initramfs-tools/hooks/crypt_unlock.sh
72
73 # Enable Dropbear inside initramfs
74 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=y\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
75
76 # Enable Dropbear inside initramfs
77 sed -i "54 i sleep 5" "${R}"/usr/share/initramfs-tools/scripts/init-premount/dropbear
78 fi
79 else
80 # Disable SSHD inside initramfs
81 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=n\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
82 fi
48
83
49 # Add cryptsetup modules to initramfs
84 # Add cryptsetup modules to initramfs
50 printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
85 printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
51
86
52 # Dummy mapping required by mkinitramfs
87 # Dummy mapping required by mkinitramfs
53 echo "0 1 crypt $(echo "${CRYPTFS_CIPHER}" | cut -d ':' -f 1) ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
88 echo "0 1 crypt $(echo "${CRYPTFS_CIPHER}" | cut -d ':' -f 1) ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
54
89
55 # Generate initramfs with encrypted root partition support
90 # Generate initramfs with encrypted root partition support
56 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
91 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
57
92
58 # Remove dummy mapping
93 # Remove dummy mapping
59 chroot_exec cryptsetup close "${CRYPTFS_MAPPING}"
94 chroot_exec cryptsetup close "${CRYPTFS_MAPPING}"
60 else
95 else
61 # Generate initramfs without encrypted root partition support
96 # Generate initramfs without encrypted root partition support
62 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
97 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
63 fi
98 fi
64 fi
99 fi
@@ -1,270 +1,265
1 #
1 #
2 # Setup RPi2/3 config and cmdline
2 # Setup RPi2/3 config and cmdline
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
8 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
9 # Install boot binaries from local directory
9 # Install boot binaries from local directory
10 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
10 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
11 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
11 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
14 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
14 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
15 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
15 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
17 else
17 else
18 # Create temporary directory for boot binaries
18 # Create temporary directory for boot binaries
19 temp_dir=$(as_nobody mktemp -d)
19 temp_dir=$(as_nobody mktemp -d)
20
20
21 # Install latest boot binaries from raspberry/firmware github
21 # Install latest boot binaries from raspberry/firmware github
22 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
22 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
23 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
23 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
24 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
24 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
26 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
26 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
27 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
27 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
28 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
28 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
29
29
30 # Move downloaded boot binaries
30 # Move downloaded boot binaries
31 mv "${temp_dir}/"* "${BOOT_DIR}/"
31 mv "${temp_dir}/"* "${BOOT_DIR}/"
32
32
33 # Remove temporary directory for boot binaries
33 # Remove temporary directory for boot binaries
34 rm -fr "${temp_dir}"
34 rm -fr "${temp_dir}"
35
35
36 # Set permissions of the boot binaries
36 # Set permissions of the boot binaries
37 chown -R root:root "${BOOT_DIR}"
37 chown -R root:root "${BOOT_DIR}"
38 chmod -R 600 "${BOOT_DIR}"
38 chmod -R 600 "${BOOT_DIR}"
39 fi
39 fi
40
40
41 # Setup firmware boot cmdline
41 # Setup firmware boot cmdline
42 if [ "$ENABLE_SPLITFS" = true ] ; then
42 if [ "$ENABLE_SPLITFS" = true ] ; then
43 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
43 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
44 else
44 else
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
46 fi
46 fi
47
47
48 # Add encrypted root partition to cmdline.txt
48 # Add encrypted root partition to cmdline.txt
49 if [ "$ENABLE_CRYPTFS" = true ] ; then
49 if [ "$ENABLE_CRYPTFS" = true ] ; then
50 if [ "$ENABLE_SPLITFS" = true ] ; then
50 if [ "$ENABLE_SPLITFS" = true ] ; then
51 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
51 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
52 else
52 else
53 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
53 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
54 fi
54 fi
55 fi
55 fi
56
56
57 # Enable Kernel messages on standard output
57 # Enable Kernel messages on standard output
58 if [ "$ENABLE_PRINTK" = true ] ; then
58 if [ "$ENABLE_PRINTK" = true ] ; then
59 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
59 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
60 fi
60 fi
61
61
62 # Install udev rule for serial alias - serial0 = console serial1=bluetooth
62 # Install udev rule for serial alias - serial0 = console serial1=bluetooth
63 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
63 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
64
64
65 # Remove IPv6 networking support
65 # Remove IPv6 networking support
66 if [ "$ENABLE_IPV6" = false ] ; then
66 if [ "$ENABLE_IPV6" = false ] ; then
67 CMDLINE="${CMDLINE} ipv6.disable=1"
67 CMDLINE="${CMDLINE} ipv6.disable=1"
68 fi
68 fi
69
69
70 # Automatically assign predictable network interface names
70 # Automatically assign predictable network interface names
71 if [ "$ENABLE_IFNAMES" = false ] ; then
71 if [ "$ENABLE_IFNAMES" = false ] ; then
72 CMDLINE="${CMDLINE} net.ifnames=0"
72 CMDLINE="${CMDLINE} net.ifnames=0"
73 else
73 else
74 CMDLINE="${CMDLINE} net.ifnames=1"
74 CMDLINE="${CMDLINE} net.ifnames=1"
75 fi
75 fi
76
76
77 # Install firmware config
77 # Install firmware config
78 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
78 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
79
79
80 # Locks CPU frequency at maximum
80 # Locks CPU frequency at maximum
81 if [ "$ENABLE_TURBO" = true ] ; then
81 if [ "$ENABLE_TURBO" = true ] ; then
82 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
82 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
83 # helps to avoid sdcard corruption when force_turbo is enabled.
83 # helps to avoid sdcard corruption when force_turbo is enabled.
84 echo "boot_delay=1" >> "${BOOT_DIR}/config.txt"
84 echo "boot_delay=1" >> "${BOOT_DIR}/config.txt"
85 fi
85 fi
86
86
87 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
87 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
88
88
89 # RPI0,3,3P Use default ttyS0 (mini-UART)as serial interface
90 SET_SERIAL="ttyS0"
91
92 # Bluetooth enabled
89 # Bluetooth enabled
93 if [ "$ENABLE_BLUETOOTH" = true ] ; then
90 if [ "$ENABLE_BLUETOOTH" = true ] ; then
94 # Create temporary directory for Bluetooth sources
91 # Create temporary directory for Bluetooth sources
95 temp_dir=$(as_nobody mktemp -d)
92 temp_dir=$(as_nobody mktemp -d)
96
93
97 # Fetch Bluetooth sources
94 # Fetch Bluetooth sources
98 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
95 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
99
96
100 # Copy downloaded sources
97 # Copy downloaded sources
101 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
98 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
102
99
103 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
100 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
104 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
101 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
105 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
102 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
106
103
107 # Set permissions
104 # Set permissions
108 chown -R root:root "${R}/tmp/pi-bluetooth"
105 chown -R root:root "${R}/tmp/pi-bluetooth"
109
106
110 # Install tools
107 # Install tools
111 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
108 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
112 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
109 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
113
110
111 # make scripts executable
112 chmod +x "${R}/usr/bin/bthelper"
113 chmod +x "${R}/usr/bin/btuart"
114
114 # Install bluetooth udev rule
115 # Install bluetooth udev rule
115 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
116 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
116
117
117 # Install Firmware Flash file and apropiate licence
118 # Install Firmware Flash file and apropiate licence
118 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
119 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
119 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
120 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
120 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
121 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
121 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
122 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
122 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
123 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
123
124
124 # Remove temporary directory
125 # Remove temporary directories
125 rm -fr "${temp_dir}"
126 rm -fr "${temp_dir}"
126
127 rm -fr "${R}"/tmp/pi-bluetooth
128
127 # Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15. Slow Bluetooth and slow cpu. Use /dev/ttyS0 instead of /dev/ttyAMA0
129 # Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15. Slow Bluetooth and slow cpu. Use /dev/ttyS0 instead of /dev/ttyAMA0
128 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
130 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
129 SET_SERIAL="ttyAMA0"
130
131
131 # set overlay to swap ttyAMA0 and ttyS0
132 # set overlay to swap ttyAMA0 and ttyS0
132 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
133 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
133
134
134 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
135 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
135 if [ "$ENABLE_TURBO" = false ] ; then
136 if [ "$ENABLE_TURBO" = false ] ; then
136 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
137 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
137 fi
138 fi
138
139 # Activate services
140 chroot_exec systemctl enable pi-bluetooth.hciuart.service
141 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
142 else
143 chroot_exec systemctl enable pi-bluetooth.hciuart.service
144 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
145 fi
139 fi
146
140
141 # Activate services
142 chroot_exec systemctl enable pi-bluetooth.hciuart.service
143
147 else # if ENABLE_BLUETOOTH = false
144 else # if ENABLE_BLUETOOTH = false
148 # set overlay to disable bluetooth
145 # set overlay to disable bluetooth
149 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
146 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
150 fi # ENABLE_BLUETOOTH end
147 fi # ENABLE_BLUETOOTH end
151
152 else
153 # RPI1,1P,2 Use default ttyAMA0 (full UART) as serial interface
154 SET_SERIAL="ttyAMA0"
155 fi
148 fi
156
149
157 # may need sudo systemctl disable hciuart
150 # may need sudo systemctl disable hciuart
158 if [ "$ENABLE_CONSOLE" = true ] ; then
151 if [ "$ENABLE_CONSOLE" = true ] ; then
159 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
152 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
160 # add string to cmdline
153 # add string to cmdline
161 CMDLINE="${CMDLINE} console=serial0,115200"
154 CMDLINE="${CMDLINE} console=serial0,115200"
162
155
163 # Enable serial console systemd style
156 # Enable serial console systemd style
164 chroot_exec systemctl enable serial-getty\@"$SET_SERIAL".service
157 chroot_exec systemctl enable serial-getty\@serial0.service
165 else
158 else
166 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
159 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
160
167 # disable serial console systemd style
161 # disable serial console systemd style
168 chroot_exec systemctl disable serial-getty\@"$SET_SERIAL".service
162 chroot_exec systemctl disable serial-getty\@"$SET_SERIAL".service
169 fi
163 fi
170
164
171 if [ "$ENABLE_SYSTEMDSWAP" = true ] ; then
165 if [ "$ENABLE_SYSTEMDSWAP" = true ] ; then
172 # Create temporary directory for systemd-swap sources
166 # Create temporary directory for systemd-swap sources
173 temp_dir=$(as_nobody mktemp -d)
167 temp_dir=$(as_nobody mktemp -d)
174
168
175 # Fetch systemd-swap sources
169 # Fetch systemd-swap sources
176 as_nobody git -C "${temp_dir}" clone "${SYSTEMDSWAP_URL}"
170 as_nobody git -C "${temp_dir}" clone "${SYSTEMDSWAP_URL}"
177
171
178 # Copy downloaded systemd-swap sources
172 # Copy downloaded systemd-swap sources
179 mv "${temp_dir}/systemd-swap" "${R}/tmp/"
173 mv "${temp_dir}/systemd-swap" "${R}/tmp/"
180
174
181 # Set permissions of the systemd-swap sources
175 # Set permissions of the systemd-swap sources
182 chown -R root:root "${R}/tmp/systemd-swap"
176 chown -R root:root "${R}/tmp/systemd-swap"
183
177
184 # Remove temporary directory for systemd-swap sources
178 # Remove temporary directory for systemd-swap sources
185 rm -fr "${temp_dir}"
179 rm -fr "${temp_dir}"
186
180
187 # Change into downloaded src dir
181 # Change into downloaded src dir
188 cd "${R}/tmp/systemd-swap" || exit
182 cd "${R}/tmp/systemd-swap" || exit
189
183
190 # Build package
184 # Build package
191 . ./package.sh debian
185 . ./package.sh debian
192
186
193 # Install package
187 # Install package
194 chroot_exec dpkg -i /tmp/systemd-swap/systemd-swap-*any.deb
188 chroot_exec dpkg -i /tmp/systemd-swap/systemd-swap-*any.deb
195
189
196 # Enable service
190 # Enable service
197 chroot_exec systemctl enable systemd-swap
191 chroot_exec systemctl enable systemd-swap
198
192
199 # Change back into script root dir
193 # Change back into script root dir
200 cd "${WORKDIR}" || exit
194 cd "${WORKDIR}" || exit
201 else
195 else
202 # Enable ZSWAP in cmdline if systemd-swap is not used
196 # Enable ZSWAP in cmdline if systemd-swap is not used
203 if [ "$KERNEL_ZSWAP" = true ] ; then
197 if [ "$KERNEL_ZSWAP" = true ] ; then
204 CMDLINE="${CMDLINE} zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lz4"
198 CMDLINE="${CMDLINE} zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lz4"
205 fi
199 fi
206 fi
200 fi
207 if [ "$KERNEL_SECURITY" = true ] ; then
201
208 CMDLINE="${CMDLINE} apparmor=1 security=apparmor"
202 if [ "$KERNEL_SECURITY" = true ] ; then
209 fi
203 CMDLINE="${CMDLINE} apparmor=1 security=apparmor"
204 fi
210
205
211 # Install firmware boot cmdline
206 # Install firmware boot cmdline
212 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
207 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
213
208
214 # Setup minimal GPU memory allocation size: 16MB (no X)
209 # Setup minimal GPU memory allocation size: 16MB (no X)
215 if [ "$ENABLE_MINGPU" = true ] ; then
210 if [ "$ENABLE_MINGPU" = true ] ; then
216 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
211 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
217 fi
212 fi
218
213
219 # Setup boot with initramfs
214 # Setup boot with initramfs
220 if [ "$ENABLE_INITRAMFS" = true ] ; then
215 if [ "$ENABLE_INITRAMFS" = true ] ; then
221 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
216 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
222 fi
217 fi
223
218
224 # Create firmware configuration and cmdline symlinks
219 # Create firmware configuration and cmdline symlinks
225 ln -sf firmware/config.txt "${R}/boot/config.txt"
220 ln -sf firmware/config.txt "${R}/boot/config.txt"
226 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
221 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
227
222
228 # Install and setup kernel modules to load at boot
223 # Install and setup kernel modules to load at boot
229 mkdir -p "${LIB_DIR}/modules-load.d/"
224 mkdir -p "${LIB_DIR}/modules-load.d/"
230 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
225 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
231
226
232 # Load hardware random module at boot
227 # Load hardware random module at boot
233 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
228 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
234 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
229 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
235 fi
230 fi
236
231
237 # Load sound module at boot
232 # Load sound module at boot
238 if [ "$ENABLE_SOUND" = true ] ; then
233 if [ "$ENABLE_SOUND" = true ] ; then
239 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
234 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
240 else
235 else
241 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
236 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
242 fi
237 fi
243
238
244 # Enable I2C interface
239 # Enable I2C interface
245 if [ "$ENABLE_I2C" = true ] ; then
240 if [ "$ENABLE_I2C" = true ] ; then
246 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
241 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
247 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
242 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
248 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
243 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
249 fi
244 fi
250
245
251 # Enable SPI interface
246 # Enable SPI interface
252 if [ "$ENABLE_SPI" = true ] ; then
247 if [ "$ENABLE_SPI" = true ] ; then
253 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
248 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
254 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
249 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
255 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
250 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
256 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
251 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
257 fi
252 fi
258 fi
253 fi
259
254
260 # Disable RPi2/3 under-voltage warnings
255 # Disable RPi2/3 under-voltage warnings
261 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
256 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
262 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
257 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
263 fi
258 fi
264
259
265 # Install kernel modules blacklist
260 # Install kernel modules blacklist
266 mkdir -p "${ETC_DIR}/modprobe.d/"
261 mkdir -p "${ETC_DIR}/modprobe.d/"
267 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
262 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
268
263
269 # Install sysctl.d configuration files
264 # Install sysctl.d configuration files
270 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
265 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,132 +1,146
1 #
1 #
2 # Setup Networking
2 # Setup Networking
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup hostname
8 # Install and setup hostname
9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
11
11
12 # Install and setup hosts
12 # Install and setup hosts
13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
15
15
16 # Setup hostname entry with static IP
16 # Setup hostname entry with static IP
17 if [ "$NET_ADDRESS" != "" ] ; then
17 if [ "$NET_ADDRESS" != "" ] ; then
18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
20 fi
20 fi
21
21
22 # Remove IPv6 hosts
22 # Remove IPv6 hosts
23 if [ "$ENABLE_IPV6" = false ] ; then
23 if [ "$ENABLE_IPV6" = false ] ; then
24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
25 fi
25 fi
26
26
27 # Install hint about network configuration
27 # Install hint about network configuration
28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
29
29
30 # Install configuration for interface eth0
30 # Install configuration for interface eth0
31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
32
32
33 # Install configuration for interface wl*
33 # Install configuration for interface wl*
34 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
34 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
35
35
36 #always with dhcp since wpa_supplicant integration is missing
36 #always with dhcp since wpa_supplicant integration is missing
37 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
37 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
38
38
39 if [ "$ENABLE_DHCP" = true ] ; then
39 if [ "$ENABLE_DHCP" = true ] ; then
40 # Enable DHCP configuration for interface eth0
40 # Enable DHCP configuration for interface eth0
41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
42
42
43 # Set DHCP configuration to IPv4 only
43 # Set DHCP configuration to IPv4 only
44 if [ "$ENABLE_IPV6" = false ] ; then
44 if [ "$ENABLE_IPV6" = false ] ; then
45 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
45 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
46 fi
46 fi
47
47
48 else # ENABLE_DHCP=false
48 else # ENABLE_DHCP=false
49 # Set static network configuration for interface eth0
49 # Set static network configuration for interface eth0
50 sed -i\
50 sed -i\
51 -e "s|DHCP=.*|DHCP=no|"\
51 -e "s|DHCP=.*|DHCP=no|"\
52 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
52 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
53 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
53 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
54 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
54 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
55 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
55 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
56 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
56 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
57 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
57 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
58 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
58 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
59 "${ETC_DIR}/systemd/network/eth.network"
59 "${ETC_DIR}/systemd/network/eth.network"
60
61 if [ "$CRYPTFS_DROPBEAR" = true ] ; then
62 # Get cdir from NET_ADDRESS e.g. 24
63 cdir=$(${NET_ADDRESS} | cut -d '/' -f2)
64
65 # Convert cdir ro netmask e.g. 24 to 255.255.255.0
66 NET_MASK=$(cdr2mask "$cdir")
67
68 # Write static ip settings to "${ETC_DIR}"/initramfs-tools/initramfs.conf
69 sed -i "\$aIP=${NET_ADDRESS}::${NET_GATEWAY}:${NET_MASK}:${HOSTNAME}:" "${ETC_DIR}"/initramfs-tools/initramfs.conf
70
71 # Regenerate initramfs
72 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
73 fi
60 fi
74 fi
61
75
62 # Remove empty settings from network configuration
76 # Remove empty settings from network configuration
63 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
77 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
64 # Remove empty settings from wlan configuration
78 # Remove empty settings from wlan configuration
65 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
79 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
66
80
67 # Move systemd network configuration if required by Debian release
81 # Move systemd network configuration if required by Debian release
68 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
82 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
69 # If WLAN is enabled copy wlan configuration too
83 # If WLAN is enabled copy wlan configuration too
70 if [ "$ENABLE_WIRELESS" = true ] ; then
84 if [ "$ENABLE_WIRELESS" = true ] ; then
71 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
85 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
72 fi
86 fi
73 rm -fr "${ETC_DIR}/systemd/network"
87 rm -fr "${ETC_DIR}/systemd/network"
74
88
75 # Enable systemd-networkd service
89 # Enable systemd-networkd service
76 chroot_exec systemctl enable systemd-networkd
90 chroot_exec systemctl enable systemd-networkd
77
91
78 # Install host.conf resolver configuration
92 # Install host.conf resolver configuration
79 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
93 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
80
94
81 # Enable network stack hardening
95 # Enable network stack hardening
82 if [ "$ENABLE_HARDNET" = true ] ; then
96 if [ "$ENABLE_HARDNET" = true ] ; then
83 # Install sysctl.d configuration files
97 # Install sysctl.d configuration files
84 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
98 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
85
99
86 # Setup resolver warnings about spoofed addresses
100 # Setup resolver warnings about spoofed addresses
87 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
101 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
88 fi
102 fi
89
103
90 # Enable time sync
104 # Enable time sync
91 if [ "$NET_NTP_1" != "" ] ; then
105 if [ "$NET_NTP_1" != "" ] ; then
92 chroot_exec systemctl enable systemd-timesyncd.service
106 chroot_exec systemctl enable systemd-timesyncd.service
93 fi
107 fi
94
108
95 # Download the firmware binary blob required to use the RPi3 wireless interface
109 # Download the firmware binary blob required to use the RPi3 wireless interface
96 if [ "$ENABLE_WIRELESS" = true ] ; then
110 if [ "$ENABLE_WIRELESS" = true ] ; then
97 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
111 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
112 mkdir -p "${WLAN_FIRMWARE_DIR}"
99 fi
113 fi
100
114
101 # Create temporary directory for firmware binary blob
115 # Create temporary directory for firmware binary blob
102 temp_dir=$(as_nobody mktemp -d)
116 temp_dir=$(as_nobody mktemp -d)
103
117
104 # Fetch firmware binary blob for RPI3B+
118 # Fetch firmware binary blob for RPI3B+
105 if [ "$RPI_MODEL" = 3P ] ; then
119 if [ "$RPI_MODEL" = 3P ] ; then
106 # Fetch firmware binary blob for RPi3P
120 # Fetch firmware binary blob for RPi3P
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
121 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
122 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
109 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
123 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
110
124
111 # Move downloaded firmware binary blob
125 # Move downloaded firmware binary blob
112 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
126 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
113
127
114 # Set permissions of the firmware binary blob
128 # Set permissions of the firmware binary blob
115 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
116 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
130 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
117 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
131 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
118 # Fetch firmware binary blob for RPi3
132 # Fetch firmware binary blob for RPi3
119 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
133 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
120 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
134 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
121
135
122 # Move downloaded firmware binary blob
136 # Move downloaded firmware binary blob
123 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
137 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
124
138
125 # Set permissions of the firmware binary blob
139 # Set permissions of the firmware binary blob
126 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
140 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
127 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
141 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
128 fi
142 fi
129
143
130 # Remove temporary directory for firmware binary blob
144 # Remove temporary directory for firmware binary blob
131 rm -fr "${temp_dir}"
145 rm -fr "${temp_dir}"
132 fi
146 fi
@@ -1,53 +1,54
1 #
1 #
2 # Setup Firewall
2 # Setup Firewall
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_IPTABLES" = true ] ; then
8 if [ "$ENABLE_IPTABLES" = true ] ; then
9 # Create iptables configuration directory
9 # Create iptables configuration directory
10 mkdir -p "${ETC_DIR}/iptables"
10 mkdir -p "${ETC_DIR}/iptables"
11
11
12 if [ "$KERNEL_NF" = false ] ; then
12 if [ "$KERNEL_NF" = false ] ; then
13 #iptables-save and -restore are slaves of iptables and thus are set accordingly
13 #iptables-save and -restore are slaves of iptables and thus are set accordingly
14 chroot_exec update-alternatives --verbose --set iptables /usr/sbin/iptables-legacy
14 chroot_exec update-alternatives --verbose --set iptables /usr/sbin/iptables-legacy
15 fi
15 fi
16
16
17 # Install iptables systemd service
17 # Install iptables systemd service
18 install_readonly files/iptables/iptables.service "${ETC_DIR}/systemd/system/iptables.service"
18 install_readonly files/iptables/iptables.service "${ETC_DIR}/systemd/system/iptables.service"
19
19
20 # Install flush-table script called by iptables service
20 # Install flush-table script called by iptables service
21 install_exec files/iptables/flush-iptables.sh "${ETC_DIR}/iptables/flush-iptables.sh"
21 install_exec files/iptables/flush-iptables.sh "${ETC_DIR}/iptables/flush-iptables.sh"
22
22
23 # Install iptables rule file
23 # Install iptables rule file
24 install_readonly files/iptables/iptables.rules "${ETC_DIR}/iptables/iptables.rules"
24 install_readonly files/iptables/iptables.rules "${ETC_DIR}/iptables/iptables.rules"
25
25
26 # Reload systemd configuration and enable iptables service
26 # Reload systemd configuration and enable iptables service
27 chroot_exec systemctl daemon-reload
27 chroot_exec systemctl daemon-reload
28 chroot_exec systemctl enable iptables.service
28 chroot_exec systemctl enable iptables.service
29
29
30 if [ "$ENABLE_IPV6" = true ] ; then
30 if [ "$ENABLE_IPV6" = true ] ; then
31 if [ "$KERNEL_NF" = false ] ; then
31 if [ "$KERNEL_NF" = false ] ; then
32 #iptables-save and -restore are slaves of iptables and thus are set accordingly
32 #iptables-save and -restore are slaves of iptables and thus are set accordingly
33 chroot_exec update-alternatives --verbose --set ip6tables /usr/sbin/ip6tables-legacy
33 chroot_exec update-alternatives --verbose --set ip6tables /usr/sbin/ip6tables-legacy
34 fi
34 fi
35
35 # Install ip6tables systemd service
36 # Install ip6tables systemd service
36 install_readonly files/iptables/ip6tables.service "${ETC_DIR}/systemd/system/ip6tables.service"
37 install_readonly files/iptables/ip6tables.service "${ETC_DIR}/systemd/system/ip6tables.service"
37
38
38 # Install ip6tables file
39 # Install ip6tables file
39 install_exec files/iptables/flush-ip6tables.sh "${ETC_DIR}/iptables/flush-ip6tables.sh"
40 install_exec files/iptables/flush-ip6tables.sh "${ETC_DIR}/iptables/flush-ip6tables.sh"
40
41
41 install_readonly files/iptables/ip6tables.rules "${ETC_DIR}/iptables/ip6tables.rules"
42 install_readonly files/iptables/ip6tables.rules "${ETC_DIR}/iptables/ip6tables.rules"
42
43
43 # Reload systemd configuration and enable iptables service
44 # Reload systemd configuration and enable iptables service
44 chroot_exec systemctl daemon-reload
45 chroot_exec systemctl daemon-reload
45 chroot_exec systemctl enable ip6tables.service
46 chroot_exec systemctl enable ip6tables.service
46 fi
47 fi
47
48
48 if [ "$ENABLE_SSHD" = false ] ; then
49 if [ "$ENABLE_SSHD" = false ] ; then
49 # Remove SSHD related iptables rules
50 # Remove SSHD related iptables rules
50 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/iptables.rules" 2> /dev/null
51 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/iptables.rules" 2> /dev/null
51 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/ip6tables.rules" 2> /dev/null
52 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/ip6tables.rules" 2> /dev/null
52 fi
53 fi
53 fi
54 fi
@@ -1,29 +1,24
1 #
1 #
2 # Setup users and security settings
2 # Setup users and security settings
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Generate crypt(3) password string
8 # Generate crypt(3) password string
9 ENCRYPTED_PASSWORD=$(mkpasswd -m sha-512 "${PASSWORD}")
9 ENCRYPTED_PASSWORD=$(mkpasswd -m sha-512 "${PASSWORD}")
10 ENCRYPTED_USER_PASSWORD=$(mkpasswd -m sha-512 "${USER_PASSWORD}")
10 ENCRYPTED_USER_PASSWORD=$(mkpasswd -m sha-512 "${USER_PASSWORD}")
11
11
12 # Setup default user
12 # Setup default user
13 if [ "$ENABLE_USER" = true ] ; then
13 if [ "$ENABLE_USER" = true ] ; then
14 chroot_exec adduser --gecos "$USER_NAME" --add_extra_groups --disabled-password "$USER_NAME"
14 chroot_exec adduser --gecos "$USER_NAME" --add_extra_groups --disabled-password "$USER_NAME"
15 chroot_exec usermod -a -G sudo -p "${ENCRYPTED_USER_PASSWORD}" "$USER_NAME"
15 chroot_exec usermod -a -G sudo -p "${ENCRYPTED_USER_PASSWORD}" "$USER_NAME"
16 fi
16 fi
17
17
18 # Setup root password or not
18 # Setup root password or not
19 if [ "$ENABLE_ROOT" = true ] ; then
19 if [ "$ENABLE_ROOT" = true ] ; then
20 chroot_exec usermod -p "${ENCRYPTED_PASSWORD}" root
20 chroot_exec usermod -p "${ENCRYPTED_PASSWORD}" root
21 else
21 else
22 # Set no root password to disable root login
22 # Set no root password to disable root login
23 chroot_exec usermod -p \'!\' root
23 chroot_exec usermod -p \'!\' root
24 fi
24 fi
25
26 # Enable serial console systemd style
27 if [ "$ENABLE_CONSOLE" = true ] ; then
28 chroot_exec systemctl enable serial-getty\@ttyAMA0.service
29 fi
@@ -1,53 +1,56
1 #
1 #
2 # Setup videocore - Raspberry Userland
2 # Setup videocore - Raspberry Userland
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
9 # Copy existing videocore sources into chroot directory
9 # Copy existing videocore sources into chroot directory
10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
11 # Copy local videocore sources
11 # Copy local videocore sources
12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
13 else
13 else
14 # Create temporary directory for videocore sources
14 # Create temporary directory for videocore sources
15 temp_dir=$(as_nobody mktemp -d)
15 temp_dir=$(as_nobody mktemp -d)
16
16
17 # Fetch videocore sources
17 # Fetch videocore sources
18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
19
19
20 # Copy downloaded videocore sources
20 # Copy downloaded videocore sources
21 mv "${temp_dir}/userland" "${R}/tmp/"
21 mv "${temp_dir}/userland" "${R}/tmp/"
22
22
23 # Set permissions of the U-Boot sources
23 # Set permissions of the U-Boot sources
24 chown -R root:root "${R}/tmp/userland"
24 chown -R root:root "${R}/tmp/userland"
25
25
26 # Remove temporary directory for U-Boot sources
26 # Remove temporary directory for U-Boot sources
27 rm -fr "${temp_dir}"
27 rm -fr "${temp_dir}"
28 fi
28 fi
29
29
30 # Create build dir
30 # Create build dir
31 mkdir "${R}"/tmp/userland/build
31 mkdir "${R}"/tmp/userland/build
32
32
33 # push us to build directory
33 # push us to build directory
34 cd "${R}"/tmp/userland/build
34 cd "${R}"/tmp/userland/build
35
35
36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
37 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
37 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
38 fi
38 fi
39
39
40 if [ "$RELEASE_ARCH" = "armel" ] ; then
40 if [ "$RELEASE_ARCH" = "armel" ] ; then
41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
42 fi
42 fi
43
43
44 if [ "$RELEASE_ARCH" = "armhf" ] ; then
44 if [ "$RELEASE_ARCH" = "armhf" ] ; then
45 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
45 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
46 fi
46 fi
47
47
48 #build userland
48 #build userland
49 make -j "$(nproc)"
49 make -j "$(nproc)"
50
50
51 #back to root of scriptdir
51 #back to root of scriptdir
52 cd "${WORKDIR}"
52 cd "${WORKDIR}"
53
54 # Remove videocore sources
55 rm -fr "${R}"/tmp/userland/
53 fi
56 fi
@@ -1,31 +1,32
1 logger -t "rc.firstboot" "Regenerating initramfs to remove encrypted root partition auto-expand"
1 logger -t "rc.firstboot" "Regenerating initramfs to remove encrypted root partition auto-expand"
2
2
3 KERNEL_VERSION=$(uname -r)
3 KERNEL_VERSION=$(uname -r)
4 KERNEL_ARCH=$(uname -m)
4 KERNEL_ARCH=$(uname -m)
5 INITRAMFS="/boot/firmware/initramfs-${KERNEL_VERSION}"
5 INITRAMFS="/boot/firmware/initramfs-${KERNEL_VERSION}"
6 INITRAMFS_UBOOT="${INITRAMFS}.uboot"
6 INITRAMFS_UBOOT="${INITRAMFS}.uboot"
7
7
8 # Extract kernel arch
8 # Extract kernel arch
9 case "${KERNEL_ARCH}" in
9 case "${KERNEL_ARCH}" in
10 arm*) KERNEL_ARCH=arm ;;
10 arm*) KERNEL_ARCH=arm ;;
11 aarch64) KERNEL_ARCH=arm64 ;;
11 esac
12 esac
12
13
13 # Regenerate initramfs
14 # Regenerate initramfs
14 if [ -r "${INITRAMFS}" ] ; then
15 if [ -r "${INITRAMFS}" ] ; then
15 rm -f /etc/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs
16 rm -f /etc/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs
16 rm -f /etc/initramfs-tools/scripts/local-premount/expand-premount
17 rm -f /etc/initramfs-tools/scripts/local-premount/expand-premount
17 rm -f /etc/initramfs-tools/hooks/expand-tools
18 rm -f /etc/initramfs-tools/hooks/expand-tools
18 rm -f "${INITRAMFS}"
19 rm -f "${INITRAMFS}"
19 mkinitramfs -o "${INITRAMFS}" "${KERNEL_VERSION}"
20 mkinitramfs -o "${INITRAMFS}" "${KERNEL_VERSION}"
20 fi
21 fi
21
22
22 # Convert generated initramfs for U-Boot using mkimage
23 # Convert generated initramfs for U-Boot using mkimage
23 if [ -r "${INITRAMFS_UBOOT}" ] ; then
24 if [ -r "${INITRAMFS_UBOOT}" ] ; then
24 rm -f /etc/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs
25 rm -f /etc/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs
25 rm -f /etc/initramfs-tools/scripts/local-premount/expand-premount
26 rm -f /etc/initramfs-tools/scripts/local-premount/expand-premount
26 rm -f /etc/initramfs-tools/hooks/expand-tools
27 rm -f /etc/initramfs-tools/hooks/expand-tools
27 rm -f "${INITRAMFS_UBOOT}"
28 rm -f "${INITRAMFS_UBOOT}"
28 mkinitramfs -o "${INITRAMFS}" "${KERNEL_VERSION}"
29 mkinitramfs -o "${INITRAMFS}" "${KERNEL_VERSION}"
29 mkimage -A "${KERNEL_ARCH}" -T ramdisk -C none -n "initramfs-${KERNEL_VERSION}" -d "${INITRAMFS}" "${INITRAMFS_UBOOT}"
30 mkimage -A "${KERNEL_ARCH}" -T ramdisk -C none -n "initramfs-${KERNEL_VERSION}" -d "${INITRAMFS}" "${INITRAMFS_UBOOT}"
30 rm -f "${INITRAMFS}"
31 rm -f "${INITRAMFS}"
31 fi
32 fi
@@ -1,105 +1,116
1 # This file contains utility functions used by rpi23-gen-image.sh
1 # This file contains utility functions used by rpi23-gen-image.sh
2
2
3 cleanup (){
3 cleanup (){
4 set +x
4 set +x
5 set +e
5 set +e
6
6
7 # Remove exports from nexmon
7 # Remove exports from nexmon
8 unset KERNEL
8 unset KERNEL
9 unset ARCH
9 unset ARCH
10 unset SUBARCH
10 unset SUBARCH
11 unset CCPLUGIN
11 unset CCPLUGIN
12 unset ZLIBFLATE
12 unset ZLIBFLATE
13 unset Q
13 unset Q
14 unset NEXMON_SETUP_ENV
14 unset NEXMON_SETUP_ENV
15 unset HOSTUNAME
15 unset HOSTUNAME
16 unset PLATFORMUNAME
16 unset PLATFORMUNAME
17
17
18 # Identify and kill all processes still using files
18 # Identify and kill all processes still using files
19 echo "killing processes using mount point ..."
19 echo "killing processes using mount point ..."
20 fuser -k "${R}"
20 fuser -k "${R}"
21 sleep 3
21 sleep 3
22 fuser -9 -k -v "${R}"
22 fuser -9 -k -v "${R}"
23
23
24 # Clean up temporary .password file
24 # Clean up temporary .password file
25 if [ -r ".password" ] ; then
25 if [ -r ".password" ] ; then
26 shred -zu .password
26 shred -zu .password
27 fi
27 fi
28
28
29 # Clean up all temporary mount points
29 # Clean up all temporary mount points
30 echo "removing temporary mount points ..."
30 echo "removing temporary mount points ..."
31 umount -l "${R}/proc" 2> /dev/null
31 umount -l "${R}/proc" 2> /dev/null
32 umount -l "${R}/sys" 2> /dev/null
32 umount -l "${R}/sys" 2> /dev/null
33 umount -l "${R}/dev/pts" 2> /dev/null
33 umount -l "${R}/dev/pts" 2> /dev/null
34 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
34 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
35 umount "$BUILDDIR/mount" 2> /dev/null
35 umount "$BUILDDIR/mount" 2> /dev/null
36 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
36 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
37 losetup -d "$ROOT_LOOP" 2> /dev/null
37 losetup -d "$ROOT_LOOP" 2> /dev/null
38 losetup -d "$FRMW_LOOP" 2> /dev/null
38 losetup -d "$FRMW_LOOP" 2> /dev/null
39 trap - 0 1 2 3 6
39 trap - 0 1 2 3 6
40 }
40 }
41
41
42 chroot_exec() {
42 chroot_exec() {
43 # Exec command in chroot
43 # Exec command in chroot
44 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
44 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
45 }
45 }
46
46
47 as_nobody() {
47 as_nobody() {
48 # Exec command as user nobody
48 # Exec command as user nobody
49 sudo -E -u nobody LANG=C LC_ALL=C "$@"
49 sudo -E -u nobody LANG=C LC_ALL=C "$@"
50 }
50 }
51
51
52 install_readonly() {
52 install_readonly() {
53 # Install file with user read-only permissions
53 # Install file with user read-only permissions
54 install -o root -g root -m 644 "$@"
54 install -o root -g root -m 644 "$@"
55 }
55 }
56
56
57 install_exec() {
57 install_exec() {
58 # Install file with root exec permissions
58 # Install file with root exec permissions
59 install -o root -g root -m 744 "$@"
59 install -o root -g root -m 744 "$@"
60 }
60 }
61
61
62 use_template () {
62 use_template () {
63 # Test if configuration template file exists
63 # Test if configuration template file exists
64 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
64 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
65 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
65 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
66 exit 1
66 exit 1
67 fi
67 fi
68
68
69 # Load template configuration parameters
69 # Load template configuration parameters
70 . "./templates/${CONFIG_TEMPLATE}"
70 . "./templates/${CONFIG_TEMPLATE}"
71 }
71 }
72
72
73 chroot_install_cc() {
73 chroot_install_cc() {
74 # Install c/c++ build environment inside the chroot
74 # Install c/c++ build environment inside the chroot
75 if [ -z "${COMPILER_PACKAGES}" ] ; then
75 if [ -z "${COMPILER_PACKAGES}" ] ; then
76 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
76 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
77 # Install COMPILER_PACKAGES in chroot
77 # Install COMPILER_PACKAGES in chroot - NEVER do "${COMPILER_PACKAGES}" -> breaks uboot
78 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install "${COMPILER_PACKAGES}"
78 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install ${COMPILER_PACKAGES}
79 fi
79 fi
80 }
80 }
81
81
82 chroot_remove_cc() {
82 chroot_remove_cc() {
83 # Remove c/c++ build environment from the chroot
83 # Remove c/c++ build environment from the chroot
84 if [ -n "${COMPILER_PACKAGES}" ] ; then
84 if [ -n "${COMPILER_PACKAGES}" ] ; then
85 chroot_exec apt-get -qq -y --auto-remove purge "${COMPILER_PACKAGES}"
85 chroot_exec apt-get -qq -y --auto-remove purge ${COMPILER_PACKAGES}
86 COMPILER_PACKAGES=""
86 COMPILER_PACKAGES=""
87 fi
87 fi
88 }
88 }
89
90 # https://serverfault.com/a/682849 - converts e.g. /24 to 255.255.255.0
91 cdr2mask ()
92 {
93 # Number of args to shift, 255..255, first non-255 byte, zeroes
94 set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
95 [ $1 -gt 1 ] && shift $1 || shift
96 echo ${1-0}.${2-0}.${3-0}.${4-0}
97 }
98
89 # GPL v2.0 - #https://github.com/sakaki-/bcmrpi3-kernel-bis/blob/master/conform_config.sh
99 # GPL v2.0 - #https://github.com/sakaki-/bcmrpi3-kernel-bis/blob/master/conform_config.sh
90 set_kernel_config() {
100 set_kernel_config() {
91 # flag as $1, value to set as $2, config must exist at "./.config"
101 # flag as $1, value to set as $2, config must exist at "./.config"
92 TGT="CONFIG_${1#CONFIG_}"
102 TGT="CONFIG_${1#CONFIG_}"
93 REP="${2}"
103 REP="${2}"
94 if grep -q "^${TGT}[^_]" .config; then
104 if grep -q "^${TGT}[^_]" .config; then
95 sed -i "s/^\(${TGT}=.*\|# ${TGT} is not set\)/${TGT}=${REP}/" .config
105 sed -i "s/^\(${TGT}=.*\|# ${TGT} is not set\)/${TGT}=${REP}/" .config
96 else
106 else
97 echo "${TGT}"="${2}" >> .config
107 echo "${TGT}"="${2}" >> .config
98 fi
108 fi
99 }
109 }
110
100 # unset kernel config parameter
111 # unset kernel config parameter
101 unset_kernel_config() {
112 unset_kernel_config() {
102 # unsets flag with the value of $1, config must exist at "./.config"
113 # unsets flag with the value of $1, config must exist at "./.config"
103 TGT="CONFIG_${1#CONFIG_}"
114 TGT="CONFIG_${1#CONFIG_}"
104 sed -i "s/^${TGT}=.*/# ${TGT} is not set/" .config
115 sed -i "s/^${TGT}=.*/# ${TGT} is not set/" .config
105 } No newline at end of file
116 }
@@ -1,852 +1,859
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
122
123 # Feature settings
123 # Feature settings
124 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
124 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
125 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
125 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
126 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
126 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
127 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
127 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
128 ENABLE_I2C=${ENABLE_I2C:=false}
128 ENABLE_I2C=${ENABLE_I2C:=false}
129 ENABLE_SPI=${ENABLE_SPI:=false}
129 ENABLE_SPI=${ENABLE_SPI:=false}
130 ENABLE_IPV6=${ENABLE_IPV6:=true}
130 ENABLE_IPV6=${ENABLE_IPV6:=true}
131 ENABLE_SSHD=${ENABLE_SSHD:=true}
131 ENABLE_SSHD=${ENABLE_SSHD:=true}
132 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
132 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
133 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
133 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
134 ENABLE_SOUND=${ENABLE_SOUND:=true}
134 ENABLE_SOUND=${ENABLE_SOUND:=true}
135 ENABLE_DBUS=${ENABLE_DBUS:=true}
135 ENABLE_DBUS=${ENABLE_DBUS:=true}
136 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
136 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
137 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
137 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
138 ENABLE_XORG=${ENABLE_XORG:=false}
138 ENABLE_XORG=${ENABLE_XORG:=false}
139 ENABLE_WM=${ENABLE_WM:=""}
139 ENABLE_WM=${ENABLE_WM:=""}
140 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
140 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
141 ENABLE_USER=${ENABLE_USER:=true}
141 ENABLE_USER=${ENABLE_USER:=true}
142 USER_NAME=${USER_NAME:="pi"}
142 USER_NAME=${USER_NAME:="pi"}
143 ENABLE_ROOT=${ENABLE_ROOT:=false}
143 ENABLE_ROOT=${ENABLE_ROOT:=false}
144 ENABLE_QEMU=${ENABLE_QEMU:=false}
144 ENABLE_QEMU=${ENABLE_QEMU:=false}
145 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
145 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
146
146
147 # SSH settings
147 # SSH settings
148 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
148 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
149 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
149 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
150 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
150 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
151 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
151 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
152 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
152 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
153
153
154 # Advanced settings
154 # Advanced settings
155 ENABLE_SYSTEMDSWAP=${ENABLE_SYSTEMDSWAP:=false}
155 ENABLE_SYSTEMDSWAP=${ENABLE_SYSTEMDSWAP:=false}
156 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
156 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
157 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
157 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
158 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
158 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
159 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
159 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
160 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
160 ENABLE_UBOOTUSB=${ENABLE_UBOOTUSB=false}
161 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
161 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
162 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
162 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
163 ENABLE_NEXMON=${ENABLE_NEXMON:=false}
163 ENABLE_NEXMON=${ENABLE_NEXMON:=false}
164 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
164 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
165 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
165 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
166 NEXMONSRC_DIR=${NEXMONSRC_DIR:=""}
166 NEXMONSRC_DIR=${NEXMONSRC_DIR:=""}
167 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
167 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
168 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
168 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
169 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
169 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
170 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
170 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
171 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
171 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
172 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
172 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
173
173
174 # Kernel compilation settings
174 # Kernel compilation settings
175 BUILD_KERNEL=${BUILD_KERNEL:=true}
175 BUILD_KERNEL=${BUILD_KERNEL:=true}
176 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
176 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
177 KERNEL_THREADS=${KERNEL_THREADS:=1}
177 KERNEL_THREADS=${KERNEL_THREADS:=1}
178 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
178 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
179 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
179 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
180 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
180 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
181 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
181 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
182 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
182 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
183 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
183 KERNEL_ZSWAP=${KERNEL_ZSWAP:=false}
184 KERNEL_VIRT=${KERNEL_VIRT:=false}
184 KERNEL_VIRT=${KERNEL_VIRT:=false}
185 KERNEL_BPF=${KERNEL_BPF:=false}
185 KERNEL_BPF=${KERNEL_BPF:=false}
186 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=powersave}
186 KERNEL_DEFAULT_GOV=${KERNEL_DEFAULT_GOV:=powersave}
187 KERNEL_SECURITY=${KERNEL_SECURITY:=false}
187 KERNEL_SECURITY=${KERNEL_SECURITY:=false}
188 KERNEL_NF=${KERNEL_NF:=false}
188 KERNEL_NF=${KERNEL_NF:=false}
189
189
190 # Kernel compilation from source directory settings
190 # Kernel compilation from source directory settings
191 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
191 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
192 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
192 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
193 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
193 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
194 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
194 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
195
195
196 # Reduce disk usage settings
196 # Reduce disk usage settings
197 REDUCE_APT=${REDUCE_APT:=true}
197 REDUCE_APT=${REDUCE_APT:=true}
198 REDUCE_DOC=${REDUCE_DOC:=true}
198 REDUCE_DOC=${REDUCE_DOC:=true}
199 REDUCE_MAN=${REDUCE_MAN:=true}
199 REDUCE_MAN=${REDUCE_MAN:=true}
200 REDUCE_VIM=${REDUCE_VIM:=false}
200 REDUCE_VIM=${REDUCE_VIM:=false}
201 REDUCE_BASH=${REDUCE_BASH:=false}
201 REDUCE_BASH=${REDUCE_BASH:=false}
202 REDUCE_HWDB=${REDUCE_HWDB:=true}
202 REDUCE_HWDB=${REDUCE_HWDB:=true}
203 REDUCE_SSHD=${REDUCE_SSHD:=true}
203 REDUCE_SSHD=${REDUCE_SSHD:=true}
204 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
204 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
205
205
206 # Encrypted filesystem settings
206 # Encrypted filesystem settings
207 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
207 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
208 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
208 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
209 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
209 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
210 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
210 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
211 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
211 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
212 #Dropbear-initramfs supports unlocking encrypted filesystem via SSH on bootup
213 CRYPTFS_DROPBEAR=${CRYPTFS_DROPBEAR:=false}
214 #Provide your own Dropbear Public RSA-OpenSSH Key otherwise it will be generated
215 CRYPTFS_DROPBEAR_PUBKEY=${CRYPTFS_DROPBEAR_PUBKEY:=""}
212
216
213 # Chroot scripts directory
217 # Chroot scripts directory
214 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
218 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
215
219
216 # Packages required in the chroot build environment
220 # Packages required in the chroot build environment
217 APT_INCLUDES=${APT_INCLUDES:=""}
221 APT_INCLUDES=${APT_INCLUDES:=""}
218 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"
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"
219
223
220 # Packages to exclude from chroot build environment
224 # Packages to exclude from chroot build environment
221 APT_EXCLUDES=${APT_EXCLUDES:=""}
225 APT_EXCLUDES=${APT_EXCLUDES:=""}
222
226
223 # Packages required for bootstrapping
227 # Packages required for bootstrapping
224 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
228 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
225 MISSING_PACKAGES=""
229 MISSING_PACKAGES=""
226
230
227 # Packages installed for c/c++ build environment in chroot (keep empty)
231 # Packages installed for c/c++ build environment in chroot (keep empty)
228 COMPILER_PACKAGES=""
232 COMPILER_PACKAGES=""
229
233
230 set +x
234 # Check if apt-cacher-ng has port 3142 open and set APT_PROXY
231
235 APT_CACHER_RUNNING=$(lsof -i :3142 | cut -d ' ' -f3 | uniq | sed '/^\s*$/d')
232 #Check if apt-cacher-ng has port 3142 open and set APT_PROXY
236 if [ "${APT_CACHER_RUNNING}" = "apt-cacher-ng" ] ; then
233 APT_CACHER_RUNNING=$(lsof -i :3142 | grep apt-cacher-ng | cut -d ' ' -f3 | uniq)
234 if [ -n "${APT_CACHER_RUNNING}" ] ; then
235 APT_PROXY=http://127.0.0.1:3142/
237 APT_PROXY=http://127.0.0.1:3142/
236 fi
238 fi
237
239
238 # Setup architecture specific settings
240 # Setup architecture specific settings
239 if [ -n "$SET_ARCH" ] ; then
241 if [ -n "$SET_ARCH" ] ; then
240 # 64-bit configuration
242 # 64-bit configuration
241 if [ "$SET_ARCH" = 64 ] ; then
243 if [ "$SET_ARCH" = 64 ] ; then
242 # General 64-bit depended settings
244 # General 64-bit depended settings
243 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
245 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
244 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
246 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
245 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
247 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
246
248
247 # Raspberry Pi model specific settings
249 # Raspberry Pi model specific settings
248 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
250 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
249 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
251 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
250 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
252 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
251 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
253 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
252 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
254 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
253 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
255 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
254 else
256 else
255 echo "error: Only Raspberry PI 3 and 3B+ support 64-bit"
257 echo "error: Only Raspberry PI 3 and 3B+ support 64-bit"
256 exit 1
258 exit 1
257 fi
259 fi
258 fi
260 fi
259
261
260 # 32-bit configuration
262 # 32-bit configuration
261 if [ "$SET_ARCH" = 32 ] ; then
263 if [ "$SET_ARCH" = 32 ] ; then
262 # General 32-bit dependend settings
264 # General 32-bit dependend settings
263 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
265 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
264 KERNEL_ARCH=${KERNEL_ARCH:=arm}
266 KERNEL_ARCH=${KERNEL_ARCH:=arm}
265 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
267 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
266
268
267 # Raspberry Pi model specific settings
269 # Raspberry Pi model specific settings
268 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
270 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
269 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
271 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
270 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
272 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
271 RELEASE_ARCH=${RELEASE_ARCH:=armel}
273 RELEASE_ARCH=${RELEASE_ARCH:=armel}
272 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
274 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
273 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
275 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
274 fi
276 fi
275
277
276 # Raspberry Pi model specific settings
278 # Raspberry Pi model specific settings
277 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
279 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
278 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
280 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
279 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
281 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
280 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
282 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
281 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
283 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
282 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
284 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
283 fi
285 fi
284 fi
286 fi
285 # SET_ARCH not set
287 # SET_ARCH not set
286 else
288 else
287 echo "error: Please set '32' or '64' as value for SET_ARCH"
289 echo "error: Please set '32' or '64' as value for SET_ARCH"
288 exit 1
290 exit 1
289 fi
291 fi
290 # Device specific configuration and U-Boot configuration
292 # Device specific configuration and U-Boot configuration
291 case "$RPI_MODEL" in
293 case "$RPI_MODEL" in
292 0)
294 0)
293 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
295 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
294 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
296 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
295 ;;
297 ;;
296 1)
298 1)
297 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
299 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
298 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
300 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
299 ;;
301 ;;
300 1P)
302 1P)
301 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
303 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
302 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
304 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
303 ;;
305 ;;
304 2)
306 2)
305 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
307 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
306 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
308 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
307 ;;
309 ;;
308 3)
310 3)
309 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
311 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
310 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
312 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
311 ;;
313 ;;
312 3P)
314 3P)
313 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
315 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
314 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
316 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
315 ;;
317 ;;
316 *)
318 *)
317 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
319 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
318 exit 1
320 exit 1
319 ;;
321 ;;
320 esac
322 esac
321
323
322 if [ "$ENABLE_UBOOTUSB" = true ] ; then
324 if [ "$ENABLE_UBOOTUSB" = true ] ; then
323 if [ "$ENABLE_UBOOT" = false ] ; then
325 if [ "$ENABLE_UBOOT" = false ] ; then
324 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
326 echo "error: Enabling UBOOTUSB requires u-boot to be enabled"
325 exit 1
327 exit 1
326 fi
328 fi
327 if [ "$RPI_MODEL" != 3 ] || [ "$RPI_MODEL" != 3P ] ; then
329 if [ "$RPI_MODEL" != 3 ] || [ "$RPI_MODEL" != 3P ] ; then
328 echo "error: Enabling UBOOTUSB requires Raspberry 3"
330 echo "error: Enabling UBOOTUSB requires Raspberry 3"
329 exit 1
331 exit 1
330 fi
332 fi
331 fi
333 fi
332
334
333 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
335 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
334 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
336 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
335 # Include bluetooth packages on supported boards
337 # Include bluetooth packages on supported boards
336 if [ "$ENABLE_BLUETOOTH" = true ] ; then
338 if [ "$ENABLE_BLUETOOTH" = true ] ; then
337 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
339 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
338 fi
340 fi
339 if [ "$ENABLE_WIRELESS" = true ] ; then
341 if [ "$ENABLE_WIRELESS" = true ] ; then
340 APT_INCLUDES="${APT_INCLUDES},wireless-tools,crda,wireless-regdb"
342 APT_INCLUDES="${APT_INCLUDES},wireless-tools,crda,wireless-regdb"
341 fi
343 fi
342 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
344 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
343 # Check if the internal wireless interface is not supported by the RPi model
345 # Check if the internal wireless interface is not supported by the RPi model
344 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
346 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
345 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
347 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
346 exit 1
348 exit 1
347 fi
349 fi
348 fi
350 fi
349
351
350 if [ "$BUILD_KERNEL" = false ] && [ "$ENABLE_NEXMON" = true ]; then
352 if [ "$BUILD_KERNEL" = false ] && [ "$ENABLE_NEXMON" = true ]; then
351 echo "error: You have to compile kernel sources, if you want to enable nexmon"
353 echo "error: You have to compile kernel sources, if you want to enable nexmon"
352 exit 1
354 exit 1
353 fi
355 fi
354
356
355 # Prepare date string for default image file name
357 # Prepare date string for default image file name
356 DATE="$(date +%Y-%m-%d)"
358 DATE="$(date +%Y-%m-%d)"
357 if [ -z "$KERNEL_BRANCH" ] ; then
359 if [ -z "$KERNEL_BRANCH" ] ; then
358 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
360 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
359 else
361 else
360 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
362 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
361 fi
363 fi
362
364
363 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
365 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
364 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
366 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
365 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
367 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
366 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
368 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
367 exit 1
369 exit 1
368 fi
370 fi
369 fi
371 fi
370
372
371 # Add cmake to compile videocore sources
373 # Add cmake to compile videocore sources
372 if [ "$ENABLE_VIDEOCORE" = true ] ; then
374 if [ "$ENABLE_VIDEOCORE" = true ] ; then
373 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
375 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
374 fi
376 fi
375
377
376 # Add deps for nexmon
378 # Add deps for nexmon
377 if [ "$ENABLE_NEXMON" = true ] ; then
379 if [ "$ENABLE_NEXMON" = true ] ; then
378 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf bison flex make autoconf automake build-essential libtool"
380 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libgmp3-dev gawk qpdf bison flex make autoconf automake build-essential libtool"
379 fi
381 fi
380
382
381 # Add libncurses5 to enable kernel menuconfig
383 # Add libncurses5 to enable kernel menuconfig
382 if [ "$KERNEL_MENUCONFIG" = true ] ; then
384 if [ "$KERNEL_MENUCONFIG" = true ] ; then
383 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
385 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
384 fi
386 fi
385
387
386 # Add ccache compiler cache for (faster) kernel cross (re)compilation
388 # Add ccache compiler cache for (faster) kernel cross (re)compilation
387 if [ "$KERNEL_CCACHE" = true ] ; then
389 if [ "$KERNEL_CCACHE" = true ] ; then
388 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
390 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
389 fi
391 fi
390
392
391 # Add cryptsetup package to enable filesystem encryption
393 # Add cryptsetup package to enable filesystem encryption
392 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
394 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
393 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
395 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
394 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
396 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
395
397
398 # If cryptfs,dropbear and initramfs are enabled include dropbear-initramfs package
399 if [ "$CRYPTFS_DROPBEAR" = true ] && [ "$ENABLE_INITRAMFS" = true ]; then
400 APT_INCLUDES="${APT_INCLUDES},dropbear-initramfs"
401 fi
402
396 if [ -z "$CRYPTFS_PASSWORD" ] ; then
403 if [ -z "$CRYPTFS_PASSWORD" ] ; then
397 echo "error: no password defined (CRYPTFS_PASSWORD)!"
404 echo "error: no password defined (CRYPTFS_PASSWORD)!"
398 exit 1
405 exit 1
399 fi
406 fi
400 ENABLE_INITRAMFS=true
407 ENABLE_INITRAMFS=true
401 fi
408 fi
402
409
403 # Add initramfs generation tools
410 # Add initramfs generation tools
404 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
411 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
405 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
412 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
406 fi
413 fi
407
414
408 # Add device-tree-compiler required for building the U-Boot bootloader
415 # Add device-tree-compiler required for building the U-Boot bootloader
409 if [ "$ENABLE_UBOOT" = true ] ; then
416 if [ "$ENABLE_UBOOT" = true ] ; then
410 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
417 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
411 fi
418 fi
412
419
413 # Check if root SSH (v2) public key file exists
420 # Check if root SSH (v2) public key file exists
414 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
421 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
415 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
422 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
416 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
423 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
417 exit 1
424 exit 1
418 fi
425 fi
419 fi
426 fi
420
427
421 # Check if $USER_NAME SSH (v2) public key file exists
428 # Check if $USER_NAME SSH (v2) public key file exists
422 if [ -n "$SSH_USER_PUB_KEY" ] ; then
429 if [ -n "$SSH_USER_PUB_KEY" ] ; then
423 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
430 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
424 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
431 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
425 exit 1
432 exit 1
426 fi
433 fi
427 fi
434 fi
428
435
429 if [ "$ENABLE_NEXMON" = true ] && [ -n "$KERNEL_BRANCH" ] ; then
436 if [ "$ENABLE_NEXMON" = true ] && [ -n "$KERNEL_BRANCH" ] ; then
430 echo "error: Please unset KERNEL_BRANCH if using ENABLE_NEXMON"
437 echo "error: Please unset KERNEL_BRANCH if using ENABLE_NEXMON"
431 exit 1
438 exit 1
432 fi
439 fi
433
440
434 # Check if all required packages are installed on the build system
441 # Check if all required packages are installed on the build system
435 for package in $REQUIRED_PACKAGES ; do
442 for package in $REQUIRED_PACKAGES ; do
436 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
443 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
437 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
444 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
438 fi
445 fi
439 done
446 done
440
447
441 # If there are missing packages ask confirmation for install, or exit
448 # If there are missing packages ask confirmation for install, or exit
442 if [ -n "$MISSING_PACKAGES" ] ; then
449 if [ -n "$MISSING_PACKAGES" ] ; then
443 echo "the following packages needed by this script are not installed:"
450 echo "the following packages needed by this script are not installed:"
444 echo "$MISSING_PACKAGES"
451 echo "$MISSING_PACKAGES"
445
452
446 printf "\ndo you want to install the missing packages right now? [y/n] "
453 printf "\ndo you want to install the missing packages right now? [y/n] "
447 read -r confirm
454 read -r confirm
448 [ "$confirm" != "y" ] && exit 1
455 [ "$confirm" != "y" ] && exit 1
449
456
450 # Make sure all missing required packages are installed
457 # Make sure all missing required packages are installed
451 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
458 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
452 fi
459 fi
453
460
454 # Check if ./bootstrap.d directory exists
461 # Check if ./bootstrap.d directory exists
455 if [ ! -d "./bootstrap.d/" ] ; then
462 if [ ! -d "./bootstrap.d/" ] ; then
456 echo "error: './bootstrap.d' required directory not found!"
463 echo "error: './bootstrap.d' required directory not found!"
457 exit 1
464 exit 1
458 fi
465 fi
459
466
460 # Check if ./files directory exists
467 # Check if ./files directory exists
461 if [ ! -d "./files/" ] ; then
468 if [ ! -d "./files/" ] ; then
462 echo "error: './files' required directory not found!"
469 echo "error: './files' required directory not found!"
463 exit 1
470 exit 1
464 fi
471 fi
465
472
466 # Check if specified KERNELSRC_DIR directory exists
473 # Check if specified KERNELSRC_DIR directory exists
467 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
474 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
468 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
475 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
469 exit 1
476 exit 1
470 fi
477 fi
471
478
472 # Check if specified UBOOTSRC_DIR directory exists
479 # Check if specified UBOOTSRC_DIR directory exists
473 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
480 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
474 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
481 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
475 exit 1
482 exit 1
476 fi
483 fi
477
484
478 # Check if specified VIDEOCORESRC_DIR directory exists
485 # Check if specified VIDEOCORESRC_DIR directory exists
479 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
486 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
480 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
487 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
481 exit 1
488 exit 1
482 fi
489 fi
483
490
484 # Check if specified FBTURBOSRC_DIR directory exists
491 # Check if specified FBTURBOSRC_DIR directory exists
485 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
492 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
486 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
493 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
487 exit 1
494 exit 1
488 fi
495 fi
489
496
490 # Check if specified NEXMONSRC_DIR directory exists
497 # Check if specified NEXMONSRC_DIR directory exists
491 if [ -n "$NEXMONSRC_DIR" ] && [ ! -d "$NEXMONSRC_DIR" ] ; then
498 if [ -n "$NEXMONSRC_DIR" ] && [ ! -d "$NEXMONSRC_DIR" ] ; then
492 echo "error: '${NEXMONSRC_DIR}' specified directory not found (NEXMONSRC_DIR)!"
499 echo "error: '${NEXMONSRC_DIR}' specified directory not found (NEXMONSRC_DIR)!"
493 exit 1
500 exit 1
494 fi
501 fi
495
502
496 # Check if specified CHROOT_SCRIPTS directory exists
503 # Check if specified CHROOT_SCRIPTS directory exists
497 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
504 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
498 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
505 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
499 exit 1
506 exit 1
500 fi
507 fi
501
508
502 # Check if specified device mapping already exists (will be used by cryptsetup)
509 # Check if specified device mapping already exists (will be used by cryptsetup)
503 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
510 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
504 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
511 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
505 exit 1
512 exit 1
506 fi
513 fi
507
514
508 # Don't clobber an old build
515 # Don't clobber an old build
509 if [ -e "$BUILDDIR" ] ; then
516 if [ -e "$BUILDDIR" ] ; then
510 echo "error: directory ${BUILDDIR} already exists, not proceeding"
517 echo "error: directory ${BUILDDIR} already exists, not proceeding"
511 exit 1
518 exit 1
512 fi
519 fi
513
520
514 # Setup chroot directory
521 # Setup chroot directory
515 mkdir -p "${R}"
522 mkdir -p "${R}"
516
523
517 # Check if build directory has enough of free disk space >512MB
524 # Check if build directory has enough of free disk space >512MB
518 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
525 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
519 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
526 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
520 exit 1
527 exit 1
521 fi
528 fi
522
529
523 set -x
530 set -x
524
531
525 # Call "cleanup" function on various signals and errors
532 # Call "cleanup" function on various signals and errors
526 trap cleanup 0 1 2 3 6
533 trap cleanup 0 1 2 3 6
527
534
528 # Add required packages for the minbase installation
535 # Add required packages for the minbase installation
529 if [ "$ENABLE_MINBASE" = true ] ; then
536 if [ "$ENABLE_MINBASE" = true ] ; then
530 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
537 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
531 fi
538 fi
532
539
533 # Add parted package, required to get partprobe utility
540 # Add parted package, required to get partprobe utility
534 if [ "$EXPANDROOT" = true ] ; then
541 if [ "$EXPANDROOT" = true ] ; then
535 APT_INCLUDES="${APT_INCLUDES},parted"
542 APT_INCLUDES="${APT_INCLUDES},parted"
536 fi
543 fi
537
544
538 # Add dbus package, recommended if using systemd
545 # Add dbus package, recommended if using systemd
539 if [ "$ENABLE_DBUS" = true ] ; then
546 if [ "$ENABLE_DBUS" = true ] ; then
540 APT_INCLUDES="${APT_INCLUDES},dbus"
547 APT_INCLUDES="${APT_INCLUDES},dbus"
541 fi
548 fi
542
549
543 # Add iptables IPv4/IPv6 package
550 # Add iptables IPv4/IPv6 package
544 if [ "$ENABLE_IPTABLES" = true ] ; then
551 if [ "$ENABLE_IPTABLES" = true ] ; then
545 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
552 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
546 fi
553 fi
547 # Add apparmor for KERNEL_SECURITY
554 # Add apparmor for KERNEL_SECURITY
548 if [ "$KERNEL_SECURITY" = true ] ; then
555 if [ "$KERNEL_SECURITY" = true ] ; then
549 APT_INCLUDES="${APT_INCLUDES},apparmor,apparmor-utils,apparmor-profiles,apparmor-profiles-extra,libapparmor-perl"
556 APT_INCLUDES="${APT_INCLUDES},apparmor,apparmor-utils,apparmor-profiles,apparmor-profiles-extra,libapparmor-perl"
550 fi
557 fi
551
558
552 # Add openssh server package
559 # Add openssh server package
553 if [ "$ENABLE_SSHD" = true ] ; then
560 if [ "$ENABLE_SSHD" = true ] ; then
554 APT_INCLUDES="${APT_INCLUDES},openssh-server"
561 APT_INCLUDES="${APT_INCLUDES},openssh-server"
555 fi
562 fi
556
563
557 # Add alsa-utils package
564 # Add alsa-utils package
558 if [ "$ENABLE_SOUND" = true ] ; then
565 if [ "$ENABLE_SOUND" = true ] ; then
559 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
566 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
560 fi
567 fi
561
568
562 # Add rng-tools package
569 # Add rng-tools package
563 if [ "$ENABLE_HWRANDOM" = true ] ; then
570 if [ "$ENABLE_HWRANDOM" = true ] ; then
564 APT_INCLUDES="${APT_INCLUDES},rng-tools"
571 APT_INCLUDES="${APT_INCLUDES},rng-tools"
565 fi
572 fi
566
573
567 # Add fbturbo video driver
574 # Add fbturbo video driver
568 if [ "$ENABLE_FBTURBO" = true ] ; then
575 if [ "$ENABLE_FBTURBO" = true ] ; then
569 # Enable xorg package dependencies
576 # Enable xorg package dependencies
570 ENABLE_XORG=true
577 ENABLE_XORG=true
571 fi
578 fi
572
579
573 # Add user defined window manager package
580 # Add user defined window manager package
574 if [ -n "$ENABLE_WM" ] ; then
581 if [ -n "$ENABLE_WM" ] ; then
575 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
582 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
576
583
577 # Enable xorg package dependencies
584 # Enable xorg package dependencies
578 ENABLE_XORG=true
585 ENABLE_XORG=true
579 fi
586 fi
580
587
581 # Add xorg package
588 # Add xorg package
582 if [ "$ENABLE_XORG" = true ] ; then
589 if [ "$ENABLE_XORG" = true ] ; then
583 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
590 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
584 fi
591 fi
585
592
586 # Replace selected packages with smaller clones
593 # Replace selected packages with smaller clones
587 if [ "$ENABLE_REDUCE" = true ] ; then
594 if [ "$ENABLE_REDUCE" = true ] ; then
588 # Add levee package instead of vim-tiny
595 # Add levee package instead of vim-tiny
589 if [ "$REDUCE_VIM" = true ] ; then
596 if [ "$REDUCE_VIM" = true ] ; then
590 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
597 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
591 fi
598 fi
592
599
593 # Add dropbear package instead of openssh-server
600 # Add dropbear package instead of openssh-server
594 if [ "$REDUCE_SSHD" = true ] ; then
601 if [ "$REDUCE_SSHD" = true ] ; then
595 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
602 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
596 fi
603 fi
597 fi
604 fi
598
605
599 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
606 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
600 if [ "$ENABLE_SYSVINIT" = false ] ; then
607 if [ "$ENABLE_SYSVINIT" = false ] ; then
601 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
608 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
602 fi
609 fi
603
610
604 # Configure kernel sources if no KERNELSRC_DIR
611 # Configure kernel sources if no KERNELSRC_DIR
605 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
612 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
606 KERNELSRC_CONFIG=true
613 KERNELSRC_CONFIG=true
607 fi
614 fi
608
615
609 # Configure reduced kernel
616 # Configure reduced kernel
610 if [ "$KERNEL_REDUCE" = true ] ; then
617 if [ "$KERNEL_REDUCE" = true ] ; then
611 KERNELSRC_CONFIG=false
618 KERNELSRC_CONFIG=false
612 fi
619 fi
613
620
614 # Configure qemu compatible kernel
621 # Configure qemu compatible kernel
615 if [ "$ENABLE_QEMU" = true ] ; then
622 if [ "$ENABLE_QEMU" = true ] ; then
616 DTB_FILE=vexpress-v2p-ca15_a7.dtb
623 DTB_FILE=vexpress-v2p-ca15_a7.dtb
617 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
624 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
618 KERNEL_DEFCONFIG="vexpress_defconfig"
625 KERNEL_DEFCONFIG="vexpress_defconfig"
619 if [ "$KERNEL_MENUCONFIG" = false ] ; then
626 if [ "$KERNEL_MENUCONFIG" = false ] ; then
620 KERNEL_OLDDEFCONFIG=true
627 KERNEL_OLDDEFCONFIG=true
621 fi
628 fi
622 fi
629 fi
623
630
624 # Execute bootstrap scripts
631 # Execute bootstrap scripts
625 for SCRIPT in bootstrap.d/*.sh; do
632 for SCRIPT in bootstrap.d/*.sh; do
626 head -n 3 "$SCRIPT"
633 head -n 3 "$SCRIPT"
627 . "$SCRIPT"
634 . "$SCRIPT"
628 done
635 done
629
636
630 ## Execute custom bootstrap scripts
637 ## Execute custom bootstrap scripts
631 if [ -d "custom.d" ] ; then
638 if [ -d "custom.d" ] ; then
632 for SCRIPT in custom.d/*.sh; do
639 for SCRIPT in custom.d/*.sh; do
633 . "$SCRIPT"
640 . "$SCRIPT"
634 done
641 done
635 fi
642 fi
636
643
637 # Execute custom scripts inside the chroot
644 # Execute custom scripts inside the chroot
638 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
645 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
639 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
646 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
640 chroot_exec /bin/bash -x <<'EOF'
647 chroot_exec /bin/bash -x <<'EOF'
641 for SCRIPT in /chroot_scripts/* ; do
648 for SCRIPT in /chroot_scripts/* ; do
642 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
649 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
643 $SCRIPT
650 $SCRIPT
644 fi
651 fi
645 done
652 done
646 EOF
653 EOF
647 rm -rf "${R}/chroot_scripts"
654 rm -rf "${R}/chroot_scripts"
648 fi
655 fi
649
656
650 # Remove c/c++ build environment from the chroot
657 # Remove c/c++ build environment from the chroot
651 chroot_remove_cc
658 chroot_remove_cc
652
659
653 # Generate required machine-id
660 # Generate required machine-id
654 MACHINE_ID=$(dbus-uuidgen)
661 MACHINE_ID=$(dbus-uuidgen)
655 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
662 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
656 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
663 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
657
664
658 # APT Cleanup
665 # APT Cleanup
659 chroot_exec apt-get -y clean
666 chroot_exec apt-get -y clean
660 chroot_exec apt-get -y autoclean
667 chroot_exec apt-get -y autoclean
661 chroot_exec apt-get -y autoremove
668 chroot_exec apt-get -y autoremove
662
669
663 # Unmount mounted filesystems
670 # Unmount mounted filesystems
664 umount -l "${R}/proc"
671 umount -l "${R}/proc"
665 umount -l "${R}/sys"
672 umount -l "${R}/sys"
666
673
667 # Clean up directories
674 # Clean up directories
668 rm -rf "${R}/run/*"
675 rm -rf "${R}/run/*"
669 rm -rf "${R}/tmp/*"
676 rm -rf "${R}/tmp/*"
670
677
671 # Clean up files
678 # Clean up files
672 rm -f "${ETC_DIR}/ssh/ssh_host_*"
679 rm -f "${ETC_DIR}/ssh/ssh_host_*"
673 rm -f "${ETC_DIR}/dropbear/dropbear_*"
680 rm -f "${ETC_DIR}/dropbear/dropbear_*"
674 rm -f "${ETC_DIR}/apt/sources.list.save"
681 rm -f "${ETC_DIR}/apt/sources.list.save"
675 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
682 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
676 rm -f "${ETC_DIR}/*-"
683 rm -f "${ETC_DIR}/*-"
677 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
684 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
678 rm -f "${ETC_DIR}/resolv.conf"
685 rm -f "${ETC_DIR}/resolv.conf"
679 rm -f "${R}/root/.bash_history"
686 rm -f "${R}/root/.bash_history"
680 rm -f "${R}/var/lib/urandom/random-seed"
687 rm -f "${R}/var/lib/urandom/random-seed"
681 rm -f "${R}/initrd.img"
688 rm -f "${R}/initrd.img"
682 rm -f "${R}/vmlinuz"
689 rm -f "${R}/vmlinuz"
683 rm -f "${R}${QEMU_BINARY}"
690 rm -f "${R}${QEMU_BINARY}"
684
691
685 if [ "$ENABLE_QEMU" = true ] ; then
692 if [ "$ENABLE_QEMU" = true ] ; then
686 # Setup QEMU directory
693 # Setup QEMU directory
687 mkdir "${BASEDIR}/qemu"
694 mkdir "${BASEDIR}/qemu"
688
695
689 # Copy kernel image to QEMU directory
696 # Copy kernel image to QEMU directory
690 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
697 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
691
698
692 # Copy kernel config to QEMU directory
699 # Copy kernel config to QEMU directory
693 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
700 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
694
701
695 # Copy kernel dtbs to QEMU directory
702 # Copy kernel dtbs to QEMU directory
696 for dtb in "${BOOT_DIR}/"*.dtb ; do
703 for dtb in "${BOOT_DIR}/"*.dtb ; do
697 if [ -f "${dtb}" ] ; then
704 if [ -f "${dtb}" ] ; then
698 install_readonly "${dtb}" "${BASEDIR}/qemu/"
705 install_readonly "${dtb}" "${BASEDIR}/qemu/"
699 fi
706 fi
700 done
707 done
701
708
702 # Copy kernel overlays to QEMU directory
709 # Copy kernel overlays to QEMU directory
703 if [ -d "${BOOT_DIR}/overlays" ] ; then
710 if [ -d "${BOOT_DIR}/overlays" ] ; then
704 # Setup overlays dtbs directory
711 # Setup overlays dtbs directory
705 mkdir "${BASEDIR}/qemu/overlays"
712 mkdir "${BASEDIR}/qemu/overlays"
706
713
707 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
714 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
708 if [ -f "${dtb}" ] ; then
715 if [ -f "${dtb}" ] ; then
709 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
716 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
710 fi
717 fi
711 done
718 done
712 fi
719 fi
713
720
714 # Copy u-boot files to QEMU directory
721 # Copy u-boot files to QEMU directory
715 if [ "$ENABLE_UBOOT" = true ] ; then
722 if [ "$ENABLE_UBOOT" = true ] ; then
716 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
723 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
717 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
724 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
718 fi
725 fi
719 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
726 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
720 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
727 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
721 fi
728 fi
722 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
729 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
723 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
730 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
724 fi
731 fi
725 fi
732 fi
726
733
727 # Copy initramfs to QEMU directory
734 # Copy initramfs to QEMU directory
728 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
735 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
729 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
736 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
730 fi
737 fi
731 fi
738 fi
732
739
733 # Calculate size of the chroot directory in KB
740 # Calculate size of the chroot directory in KB
734 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
741 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
735
742
736 # Calculate the amount of needed 512 Byte sectors
743 # Calculate the amount of needed 512 Byte sectors
737 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
744 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
738 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
745 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
739 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
746 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
740
747
741 # The root partition is EXT4
748 # The root partition is EXT4
742 # This means more space than the actual used space of the chroot is used.
749 # This means more space than the actual used space of the chroot is used.
743 # As overhead for journaling and reserved blocks 35% are added.
750 # As overhead for journaling and reserved blocks 35% are added.
744 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
751 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
745
752
746 # Calculate required image size in 512 Byte sectors
753 # Calculate required image size in 512 Byte sectors
747 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
754 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
748
755
749 # Prepare image file
756 # Prepare image file
750 if [ "$ENABLE_SPLITFS" = true ] ; then
757 if [ "$ENABLE_SPLITFS" = true ] ; then
751 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
758 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
752 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
759 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
753 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
760 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
754 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
761 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
755
762
756 # Write firmware/boot partition tables
763 # Write firmware/boot partition tables
757 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
764 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
758 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
765 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
759 EOM
766 EOM
760
767
761 # Write root partition table
768 # Write root partition table
762 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
769 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
763 ${TABLE_SECTORS},${ROOT_SECTORS},83
770 ${TABLE_SECTORS},${ROOT_SECTORS},83
764 EOM
771 EOM
765
772
766 # Setup temporary loop devices
773 # Setup temporary loop devices
767 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
774 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
768 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
775 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
769 else # ENABLE_SPLITFS=false
776 else # ENABLE_SPLITFS=false
770 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
777 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
771 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
778 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
772
779
773 # Write partition table
780 # Write partition table
774 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
781 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
775 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
782 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
776 ${ROOT_OFFSET},${ROOT_SECTORS},83
783 ${ROOT_OFFSET},${ROOT_SECTORS},83
777 EOM
784 EOM
778
785
779 # Setup temporary loop devices
786 # Setup temporary loop devices
780 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
787 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
781 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
788 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
782 fi
789 fi
783
790
784 if [ "$ENABLE_CRYPTFS" = true ] ; then
791 if [ "$ENABLE_CRYPTFS" = true ] ; then
785 # Create dummy ext4 fs
792 # Create dummy ext4 fs
786 mkfs.ext4 "$ROOT_LOOP"
793 mkfs.ext4 "$ROOT_LOOP"
787
794
788 # Setup password keyfile
795 # Setup password keyfile
789 touch .password
796 touch .password
790 chmod 600 .password
797 chmod 600 .password
791 echo -n ${CRYPTFS_PASSWORD} > .password
798 echo -n ${CRYPTFS_PASSWORD} > .password
792
799
793 # Initialize encrypted partition
800 # Initialize encrypted partition
794 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
801 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
795
802
796 # Open encrypted partition and setup mapping
803 # Open encrypted partition and setup mapping
797 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
804 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
798
805
799 # Secure delete password keyfile
806 # Secure delete password keyfile
800 shred -zu .password
807 shred -zu .password
801
808
802 # Update temporary loop device
809 # Update temporary loop device
803 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
810 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
804
811
805 # Wipe encrypted partition (encryption cipher is used for randomness)
812 # Wipe encrypted partition (encryption cipher is used for randomness)
806 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
813 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
807 fi
814 fi
808
815
809 # Build filesystems
816 # Build filesystems
810 mkfs.vfat "$FRMW_LOOP"
817 mkfs.vfat "$FRMW_LOOP"
811 mkfs.ext4 "$ROOT_LOOP"
818 mkfs.ext4 "$ROOT_LOOP"
812
819
813 # Mount the temporary loop devices
820 # Mount the temporary loop devices
814 mkdir -p "$BUILDDIR/mount"
821 mkdir -p "$BUILDDIR/mount"
815 mount "$ROOT_LOOP" "$BUILDDIR/mount"
822 mount "$ROOT_LOOP" "$BUILDDIR/mount"
816
823
817 mkdir -p "$BUILDDIR/mount/boot/firmware"
824 mkdir -p "$BUILDDIR/mount/boot/firmware"
818 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
825 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
819
826
820 # Copy all files from the chroot to the loop device mount point directory
827 # Copy all files from the chroot to the loop device mount point directory
821 rsync -a "${R}/" "$BUILDDIR/mount/"
828 rsync -a "${R}/" "$BUILDDIR/mount/"
822
829
823 # Unmount all temporary loop devices and mount points
830 # Unmount all temporary loop devices and mount points
824 cleanup
831 cleanup
825
832
826 # Create block map file(s) of image(s)
833 # Create block map file(s) of image(s)
827 if [ "$ENABLE_SPLITFS" = true ] ; then
834 if [ "$ENABLE_SPLITFS" = true ] ; then
828 # Create block map files for "bmaptool"
835 # Create block map files for "bmaptool"
829 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
836 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
830 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
837 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
831
838
832 # Image was successfully created
839 # Image was successfully created
833 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
840 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
834 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
841 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
835 else
842 else
836 # Create block map file for "bmaptool"
843 # Create block map file for "bmaptool"
837 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
844 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
838
845
839 # Image was successfully created
846 # Image was successfully created
840 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
847 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
841
848
842 # Create qemu qcow2 image
849 # Create qemu qcow2 image
843 if [ "$ENABLE_QEMU" = true ] ; then
850 if [ "$ENABLE_QEMU" = true ] ; then
844 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
851 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
845 QEMU_SIZE=16G
852 QEMU_SIZE=16G
846
853
847 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
854 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
848 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
855 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
849
856
850 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
857 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
851 fi
858 fi
852 fi
859 fi
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant