##// END OF EJS Templates
Refactor...
Unknown -
r375:a90f6ad1a83f
parent child
Show More
@@ -1,499 +1,490
1 # rpi23-gen-image
1 # rpi23-gen-image
2 ## Introduction
2 ## Introduction
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `jessie`, `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.11.y```).
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.11.y```).
4
4
5 ## Build dependencies
5 ## Build dependencies
6 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
6 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
7
7
8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
9
9
10 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the RPi3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf) cross-compiler toolchain.
10 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the RPi3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf) cross-compiler toolchain.
11
11
12 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package on Debian Linux `jessie` and `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
12 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package on Debian Linux and `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
13
14 If a Debian Linux `jessie` build system is used it will be required to add the [Debian Cross-toolchains repository](http://emdebian.org/tools/debian/) first:
15
16 ```
17 echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/crosstools.list
18 sudo -u nobody wget -O - http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
19 dpkg --add-architecture armhf
20 apt-get update
21 ```
22
13
23 ## Command-line parameters
14 ## Command-line parameters
24 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.
25
16
26 ##### Command-line examples:
17 ##### Command-line examples:
27 ```shell
18 ```shell
28 ENABLE_UBOOT=true ./rpi23-gen-image.sh
19 ENABLE_UBOOT=true ./rpi23-gen-image.sh
29 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
20 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
30 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
31 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
22 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
32 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
33 ENABLE_MINBASE=true ./rpi23-gen-image.sh
24 ENABLE_MINBASE=true ./rpi23-gen-image.sh
34 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
35 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
26 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
36 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
37 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
38 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
29 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
39 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
40 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
41 ```
32 ```
42
33
43 ## Configuration template files
34 ## Configuration template files
44 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.
45
36
46 ##### Command-line examples:
37 ##### Command-line examples:
47 ```shell
38 ```shell
48 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
39 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
49 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
40 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
50 ```
41 ```
51
42
52 ## Supported parameters and settings
43 ## Supported parameters and settings
53 #### APT settings:
44 #### APT settings:
54 ##### `APT_SERVER`="ftp.debian.org"
45 ##### `APT_SERVER`="ftp.debian.org"
55 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.
56
47
57 ##### `APT_PROXY`=""
48 ##### `APT_PROXY`=""
58 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.
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.
59
50
60 ##### `APT_INCLUDES`=""
51 ##### `APT_INCLUDES`=""
61 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.
62
53
63 ##### `APT_INCLUDES_LATE`=""
54 ##### `APT_INCLUDES_LATE`=""
64 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.
65
56
66 ---
57 ---
67
58
68 #### General system settings:
59 #### General system settings:
69 ##### `RPI_MODEL`=2
60 ##### `RPI_MODEL`=2
70 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
61 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
71 `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
62 `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
72 `1` = Used for Pi 1 model A and B
63 `1` = Used for Pi 1 model A and B
73 `1P` = Used for Pi 1 model B+ and A+
64 `1P` = Used for Pi 1 model B+ and A+
74 `2` = Used for Pi 2 model B
65 `2` = Used for Pi 2 model B
75 `3` = Used for Pi 3 model B
66 `3` = Used for Pi 3 model B
76 `3P` = Used for Pi 3 model B+
67 `3P` = Used for Pi 3 model B+
77 `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
68 `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
78
69
79 ##### `RELEASE`="jessie"
70 ##### `RELEASE`="buster"
80 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases "jessie", "stretch" and "buster". `BUILD_KERNEL`=true will automatically be set if the Debian releases `stretch` or `buster` are used.
71 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases "stretch" and "buster". `BUILD_KERNEL`=true will automatically be set if the Debian releases `stretch` or `buster` are used.
81
72
82 ##### `RELEASE_ARCH`="armhf"
73 ##### `RELEASE_ARCH`="armhf"
83 Set the desired Debian release architecture.
74 Set the desired Debian release architecture.
84
75
85 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
76 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
86 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
77 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
87
78
88 ##### `PASSWORD`="raspberry"
79 ##### `PASSWORD`="raspberry"
89 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
80 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
90
81
91 ##### `USER_PASSWORD`="raspberry"
82 ##### `USER_PASSWORD`="raspberry"
92 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.
83 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.
93
84
94 ##### `DEFLOCAL`="en_US.UTF-8"
85 ##### `DEFLOCAL`="en_US.UTF-8"
95 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`.
86 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`.
96
87
97 ##### `TIMEZONE`="Europe/Berlin"
88 ##### `TIMEZONE`="Europe/Berlin"
98 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.
89 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.
99
90
100 ##### `EXPANDROOT`=true
91 ##### `EXPANDROOT`=true
101 Expand the root partition and filesystem automatically on first boot.
92 Expand the root partition and filesystem automatically on first boot.
102
93
103 ##### `ENABLE_QEMU`=false
94 ##### `ENABLE_QEMU`=false
104 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.
95 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.
105
96
106 ---
97 ---
107
98
108 #### Keyboard settings:
99 #### Keyboard settings:
109 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.
100 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.
110
101
111 ##### `XKB_MODEL`=""
102 ##### `XKB_MODEL`=""
112 Set the name of the model of your keyboard type.
103 Set the name of the model of your keyboard type.
113
104
114 ##### `XKB_LAYOUT`=""
105 ##### `XKB_LAYOUT`=""
115 Set the supported keyboard layout(s).
106 Set the supported keyboard layout(s).
116
107
117 ##### `XKB_VARIANT`=""
108 ##### `XKB_VARIANT`=""
118 Set the supported variant(s) of the keyboard layout(s).
109 Set the supported variant(s) of the keyboard layout(s).
119
110
120 ##### `XKB_OPTIONS`=""
111 ##### `XKB_OPTIONS`=""
121 Set extra xkb configuration options.
112 Set extra xkb configuration options.
122
113
123 ---
114 ---
124
115
125 #### Networking settings (DHCP):
116 #### Networking settings (DHCP):
126 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`.`
117 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`.`
127
118
128 ##### `ENABLE_DHCP`=true
119 ##### `ENABLE_DHCP`=true
129 Set the system to use DHCP. This requires an DHCP server.
120 Set the system to use DHCP. This requires an DHCP server.
130
121
131 ---
122 ---
132
123
133 #### Networking settings (static):
124 #### Networking settings (static):
134 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`.
125 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`.
135
126
136 ##### `NET_ADDRESS`=""
127 ##### `NET_ADDRESS`=""
137 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
128 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
138
129
139 ##### `NET_GATEWAY`=""
130 ##### `NET_GATEWAY`=""
140 Set the IP address for the default gateway.
131 Set the IP address for the default gateway.
141
132
142 ##### `NET_DNS_1`=""
133 ##### `NET_DNS_1`=""
143 Set the IP address for the first DNS server.
134 Set the IP address for the first DNS server.
144
135
145 ##### `NET_DNS_2`=""
136 ##### `NET_DNS_2`=""
146 Set the IP address for the second DNS server.
137 Set the IP address for the second DNS server.
147
138
148 ##### `NET_DNS_DOMAINS`=""
139 ##### `NET_DNS_DOMAINS`=""
149 Set the default DNS search domains to use for non fully qualified host names.
140 Set the default DNS search domains to use for non fully qualified host names.
150
141
151 ##### `NET_NTP_1`=""
142 ##### `NET_NTP_1`=""
152 Set the IP address for the first NTP server.
143 Set the IP address for the first NTP server.
153
144
154 ##### `NET_NTP_2`=""
145 ##### `NET_NTP_2`=""
155 Set the IP address for the second NTP server.
146 Set the IP address for the second NTP server.
156
147
157 ---
148 ---
158
149
159 #### Basic system features:
150 #### Basic system features:
160 ##### `ENABLE_CONSOLE`=true
151 ##### `ENABLE_CONSOLE`=true
161 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.
152 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.
162
153
163 ##### `ENABLE_I2C`=false
154 ##### `ENABLE_I2C`=false
164 Enable I2C interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
155 Enable I2C interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
165
156
166 ##### `ENABLE_SPI`=false
157 ##### `ENABLE_SPI`=false
167 Enable SPI interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
158 Enable SPI interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
168
159
169 ##### `ENABLE_IPV6`=true
160 ##### `ENABLE_IPV6`=true
170 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
161 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
171
162
172 ##### `ENABLE_SSHD`=true
163 ##### `ENABLE_SSHD`=true
173 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.
164 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.
174
165
175 ##### `ENABLE_NONFREE`=false
166 ##### `ENABLE_NONFREE`=false
176 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.
167 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.
177
168
178 ##### `ENABLE_WIRELESS`=false
169 ##### `ENABLE_WIRELESS`=false
179 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`.
170 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`.
180
171
181 ##### `ENABLE_RSYSLOG`=true
172 ##### `ENABLE_RSYSLOG`=true
182 If set to false, disable and uninstall rsyslog (so logs will be available only
173 If set to false, disable and uninstall rsyslog (so logs will be available only
183 in journal files)
174 in journal files)
184
175
185 ##### `ENABLE_SOUND`=true
176 ##### `ENABLE_SOUND`=true
186 Enable sound hardware and install Advanced Linux Sound Architecture.
177 Enable sound hardware and install Advanced Linux Sound Architecture.
187
178
188 ##### `ENABLE_HWRANDOM`=true
179 ##### `ENABLE_HWRANDOM`=true
189 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
180 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
190
181
191 ##### `ENABLE_MINGPU`=false
182 ##### `ENABLE_MINGPU`=false
192 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
183 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
193
184
194 ##### `ENABLE_DBUS`=true
185 ##### `ENABLE_DBUS`=true
195 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
186 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
196
187
197 ##### `ENABLE_XORG`=false
188 ##### `ENABLE_XORG`=false
198 Install Xorg open-source X Window System.
189 Install Xorg open-source X Window System.
199
190
200 ##### `ENABLE_WM`=""
191 ##### `ENABLE_WM`=""
201 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`.
192 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`.
202
193
203 ##### `ENABLE_SYSVINIT`=false
194 ##### `ENABLE_SYSVINIT`=false
204 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
195 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
205
196
206 ---
197 ---
207
198
208 #### Advanced system features:
199 #### Advanced system features:
209 ##### `ENABLE_MINBASE`=false
200 ##### `ENABLE_MINBASE`=false
210 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
201 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
211
202
212 ##### `ENABLE_REDUCE`=false
203 ##### `ENABLE_REDUCE`=false
213 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
204 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
214
205
215 ##### `ENABLE_UBOOT`=false
206 ##### `ENABLE_UBOOT`=false
216 Replace the default RPi2/3 second stage bootloader (bootcode.bin) with [U-Boot bootloader](https://git.denx.de/?p=u-boot.git;a=summary). U-Boot can boot images via the network using the BOOTP/TFTP protocol.
207 Replace the default RPi2/3 second stage bootloader (bootcode.bin) with [U-Boot bootloader](https://git.denx.de/?p=u-boot.git;a=summary). U-Boot can boot images via the network using the BOOTP/TFTP protocol.
217
208
218 ##### `UBOOTSRC_DIR`=""
209 ##### `UBOOTSRC_DIR`=""
219 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.
210 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.
220
211
221 ##### `ENABLE_FBTURBO`=false
212 ##### `ENABLE_FBTURBO`=false
222 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.
213 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.
223
214
224 ##### `FBTURBOSRC_DIR`=""
215 ##### `FBTURBOSRC_DIR`=""
225 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.
216 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.
226
217
227 ##### `ENABLE_VIDEOCORE`=false
218 ##### `ENABLE_VIDEOCORE`=false
228 Install and enable the [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) `vcgencmd`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
219 Install and enable the [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) `vcgencmd`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
229
220
230 ##### `VIDEOCORESRC_DIR`=""
221 ##### `VIDEOCORESRC_DIR`=""
231 Path to a directory (`userland`) 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.
222 Path to a directory (`userland`) 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.
232
223
233 ##### `ENABLE_IPTABLES`=false
224 ##### `ENABLE_IPTABLES`=false
234 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
225 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
235
226
236 ##### `ENABLE_USER`=true
227 ##### `ENABLE_USER`=true
237 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
228 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
238
229
239 ##### `USER_NAME`=pi
230 ##### `USER_NAME`=pi
240 Non-root user to create. Ignored if `ENABLE_USER`=false
231 Non-root user to create. Ignored if `ENABLE_USER`=false
241
232
242 ##### `ENABLE_ROOT`=false
233 ##### `ENABLE_ROOT`=false
243 Set root user password so root login will be enabled
234 Set root user password so root login will be enabled
244
235
245 ##### `ENABLE_HARDNET`=false
236 ##### `ENABLE_HARDNET`=false
246 Enable IPv4/IPv6 network stack hardening settings.
237 Enable IPv4/IPv6 network stack hardening settings.
247
238
248 ##### `ENABLE_SPLITFS`=false
239 ##### `ENABLE_SPLITFS`=false
249 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
240 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
250
241
251 ##### `CHROOT_SCRIPTS`=""
242 ##### `CHROOT_SCRIPTS`=""
252 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.
243 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.
253
244
254 ##### `ENABLE_INITRAMFS`=false
245 ##### `ENABLE_INITRAMFS`=false
255 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.
246 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.
256
247
257 ##### `ENABLE_IFNAMES`=true
248 ##### `ENABLE_IFNAMES`=true
258 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names. This parameter is only supported if the Debian releases `stretch` or `buster` are used.
249 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names. This parameter is only supported if the Debian releases `stretch` or `buster` are used.
259
250
260 ##### `DISABLE_UNDERVOLT_WARNINGS`=
251 ##### `DISABLE_UNDERVOLT_WARNINGS`=
261 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.
252 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.
262
253
263 ---
254 ---
264
255
265 #### SSH settings:
256 #### SSH settings:
266 ##### `SSH_ENABLE_ROOT`=false
257 ##### `SSH_ENABLE_ROOT`=false
267 Enable password root login via SSH. This may be a security risk with default password, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
258 Enable password root login via SSH. This may be a security risk with default password, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
268
259
269 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
260 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
270 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
261 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
271
262
272 ##### `SSH_LIMIT_USERS`=false
263 ##### `SSH_LIMIT_USERS`=false
273 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).
264 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).
274
265
275 ##### `SSH_ROOT_PUB_KEY`=""
266 ##### `SSH_ROOT_PUB_KEY`=""
276 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`.
267 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`.
277
268
278 ##### `SSH_USER_PUB_KEY`=""
269 ##### `SSH_USER_PUB_KEY`=""
279 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.
270 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.
280
271
281 ---
272 ---
282
273
283 #### Kernel compilation:
274 #### Kernel compilation:
284 ##### `BUILD_KERNEL`=false
275 ##### `BUILD_KERNEL`=false
285 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used. `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` is used.
276 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used. `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` is used.
286
277
287 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
278 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
288 This sets the cross compile enviornment for the compiler.
279 This sets the cross compile enviornment for the compiler.
289
280
290 ##### `KERNEL_ARCH`="arm"
281 ##### `KERNEL_ARCH`="arm"
291 This sets the kernel architecture for the compiler.
282 This sets the kernel architecture for the compiler.
292
283
293 ##### `KERNEL_IMAGE`="kernel7.img"
284 ##### `KERNEL_IMAGE`="kernel7.img"
294 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.
285 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.
295
286
296 ##### `KERNEL_BRANCH`=""
287 ##### `KERNEL_BRANCH`=""
297 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
288 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
298
289
299 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
290 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
300 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.
291 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.
301
292
302 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
293 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
303 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
294 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
304
295
305 ##### `KERNEL_REDUCE`=false
296 ##### `KERNEL_REDUCE`=false
306 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
297 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
307
298
308 ##### `KERNEL_THREADS`=1
299 ##### `KERNEL_THREADS`=1
309 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.
300 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.
310
301
311 ##### `KERNEL_HEADERS`=true
302 ##### `KERNEL_HEADERS`=true
312 Install kernel headers with built kernel.
303 Install kernel headers with built kernel.
313
304
314 ##### `KERNEL_MENUCONFIG`=false
305 ##### `KERNEL_MENUCONFIG`=false
315 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
306 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
316
307
317 ##### `KERNEL_OLDDEFCONFIG`=false
308 ##### `KERNEL_OLDDEFCONFIG`=false
318 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
309 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
319
310
320 ##### `KERNEL_CCACHE`=false
311 ##### `KERNEL_CCACHE`=false
321 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
312 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
322
313
323 ##### `KERNEL_REMOVESRC`=true
314 ##### `KERNEL_REMOVESRC`=true
324 Remove all kernel sources from the generated OS image after it was built and installed.
315 Remove all kernel sources from the generated OS image after it was built and installed.
325
316
326 ##### `KERNELSRC_DIR`=""
317 ##### `KERNELSRC_DIR`=""
327 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.
318 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.
328
319
329 ##### `KERNELSRC_CLEAN`=false
320 ##### `KERNELSRC_CLEAN`=false
330 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.
321 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.
331
322
332 ##### `KERNELSRC_CONFIG`=true
323 ##### `KERNELSRC_CONFIG`=true
333 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.
324 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.
334
325
335 ##### `KERNELSRC_USRCONFIG`=""
326 ##### `KERNELSRC_USRCONFIG`=""
336 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
327 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
337
328
338 ##### `KERNELSRC_PREBUILT`=false
329 ##### `KERNELSRC_PREBUILT`=false
339 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.
330 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.
340
331
341 ##### `RPI_FIRMWARE_DIR`=""
332 ##### `RPI_FIRMWARE_DIR`=""
342 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.
333 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.
343
334
344 ---
335 ---
345
336
346 #### Reduce disk usage:
337 #### Reduce disk usage:
347 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
338 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
348
339
349 ##### `REDUCE_APT`=true
340 ##### `REDUCE_APT`=true
350 Configure APT to use compressed package repository lists and no package caching files.
341 Configure APT to use compressed package repository lists and no package caching files.
351
342
352 ##### `REDUCE_DOC`=true
343 ##### `REDUCE_DOC`=true
353 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
344 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
354
345
355 ##### `REDUCE_MAN`=true
346 ##### `REDUCE_MAN`=true
356 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
347 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
357
348
358 ##### `REDUCE_VIM`=false
349 ##### `REDUCE_VIM`=false
359 Replace `vim-tiny` package by `levee` a tiny vim clone.
350 Replace `vim-tiny` package by `levee` a tiny vim clone.
360
351
361 ##### `REDUCE_BASH`=false
352 ##### `REDUCE_BASH`=false
362 Remove `bash` package and switch to `dash` shell (experimental).
353 Remove `bash` package and switch to `dash` shell (experimental).
363
354
364 ##### `REDUCE_HWDB`=true
355 ##### `REDUCE_HWDB`=true
365 Remove PCI related hwdb files (experimental).
356 Remove PCI related hwdb files (experimental).
366
357
367 ##### `REDUCE_SSHD`=true
358 ##### `REDUCE_SSHD`=true
368 Replace `openssh-server` with `dropbear`.
359 Replace `openssh-server` with `dropbear`.
369
360
370 ##### `REDUCE_LOCALE`=true
361 ##### `REDUCE_LOCALE`=true
371 Remove all `locale` translation files.
362 Remove all `locale` translation files.
372
363
373 ---
364 ---
374
365
375 #### Encrypted root partition:
366 #### Encrypted root partition:
376 ##### `ENABLE_CRYPTFS`=false
367 ##### `ENABLE_CRYPTFS`=false
377 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.
368 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.
378
369
379 ##### `CRYPTFS_PASSWORD`=""
370 ##### `CRYPTFS_PASSWORD`=""
380 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
371 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
381
372
382 ##### `CRYPTFS_MAPPING`="secure"
373 ##### `CRYPTFS_MAPPING`="secure"
383 Set name of dm-crypt managed device-mapper mapping.
374 Set name of dm-crypt managed device-mapper mapping.
384
375
385 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
376 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
386 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
377 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
387
378
388 ##### `CRYPTFS_XTSKEYSIZE`=512
379 ##### `CRYPTFS_XTSKEYSIZE`=512
389 Sets key size in bits. The argument has to be a multiple of 8.
380 Sets key size in bits. The argument has to be a multiple of 8.
390
381
391 ---
382 ---
392
383
393 #### Build settings:
384 #### Build settings:
394 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
385 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
395 Set a path to a working directory used by the script to generate an image.
386 Set a path to a working directory used by the script to generate an image.
396
387
397 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
388 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
398 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.
389 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.
399
390
400 ## Understanding the script
391 ## Understanding the script
401 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:
392 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:
402
393
403 | Script | Description |
394 | Script | Description |
404 | --- | --- |
395 | --- | --- |
405 | `10-bootstrap.sh` | Debootstrap basic system |
396 | `10-bootstrap.sh` | Debootstrap basic system |
406 | `11-apt.sh` | Setup APT repositories |
397 | `11-apt.sh` | Setup APT repositories |
407 | `12-locale.sh` | Setup Locales and keyboard settings |
398 | `12-locale.sh` | Setup Locales and keyboard settings |
408 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
399 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
409 | `14-fstab.sh` | Setup fstab and initramfs |
400 | `14-fstab.sh` | Setup fstab and initramfs |
410 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
401 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
411 | `20-networking.sh` | Setup Networking |
402 | `20-networking.sh` | Setup Networking |
412 | `21-firewall.sh` | Setup Firewall |
403 | `21-firewall.sh` | Setup Firewall |
413 | `30-security.sh` | Setup Users and Security settings |
404 | `30-security.sh` | Setup Users and Security settings |
414 | `31-logging.sh` | Setup Logging |
405 | `31-logging.sh` | Setup Logging |
415 | `32-sshd.sh` | Setup SSH and public keys |
406 | `32-sshd.sh` | Setup SSH and public keys |
416 | `41-uboot.sh` | Build and Setup U-Boot |
407 | `41-uboot.sh` | Build and Setup U-Boot |
417 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
408 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
418 | `50-firstboot.sh` | First boot actions |
409 | `50-firstboot.sh` | First boot actions |
419 | `99-reduce.sh` | Reduce the disk space usage |
410 | `99-reduce.sh` | Reduce the disk space usage |
420
411
421 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.
412 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.
422
413
423 | Directory | Description |
414 | Directory | Description |
424 | --- | --- |
415 | --- | --- |
425 | `apt` | APT management configuration files |
416 | `apt` | APT management configuration files |
426 | `boot` | Boot and RPi2/3 configuration files |
417 | `boot` | Boot and RPi2/3 configuration files |
427 | `dpkg` | Package Manager configuration |
418 | `dpkg` | Package Manager configuration |
428 | `etc` | Configuration files and rc scripts |
419 | `etc` | Configuration files and rc scripts |
429 | `firstboot` | Scripts that get executed on first boot |
420 | `firstboot` | Scripts that get executed on first boot |
430 | `initramfs` | Initramfs scripts |
421 | `initramfs` | Initramfs scripts |
431 | `iptables` | Firewall configuration files |
422 | `iptables` | Firewall configuration files |
432 | `locales` | Locales configuration |
423 | `locales` | Locales configuration |
433 | `modules` | Kernel Modules configuration |
424 | `modules` | Kernel Modules configuration |
434 | `mount` | Fstab configuration |
425 | `mount` | Fstab configuration |
435 | `network` | Networking configuration files |
426 | `network` | Networking configuration files |
436 | `sysctl.d` | Swapping and Network Hardening configuration |
427 | `sysctl.d` | Swapping and Network Hardening configuration |
437 | `xorg` | fbturbo Xorg driver configuration |
428 | `xorg` | fbturbo Xorg driver configuration |
438
429
439 ## Custom packages and scripts
430 ## Custom packages and scripts
440 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`.
431 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`.
441
432
442 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
433 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
443
434
444 ## Logging of the bootstrapping process
435 ## Logging of the bootstrapping process
445 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:
436 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:
446
437
447 ```shell
438 ```shell
448 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
439 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
449 ```
440 ```
450
441
451 ## Flashing the image file
442 ## Flashing the image file
452 After the image file was successfully created by the `rpi23-gen-image.sh` script it can be copied to the microSD card that will be used by the RPi2/3 computer. This can be performed by using the tools `bmaptool` or `dd`. Using `bmaptool` will probably speed-up the copy process because `bmaptool` copies more wisely than `dd`.
443 After the image file was successfully created by the `rpi23-gen-image.sh` script it can be copied to the microSD card that will be used by the RPi2/3 computer. This can be performed by using the tools `bmaptool` or `dd`. Using `bmaptool` will probably speed-up the copy process because `bmaptool` copies more wisely than `dd`.
453
444
454 ##### Flashing examples:
445 ##### Flashing examples:
455 ```shell
446 ```shell
456 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie.img /dev/mmcblk0
447 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie.img /dev/mmcblk0
457 dd bs=4M if=./images/jessie/2017-01-23-rpi3-jessie.img of=/dev/mmcblk0
448 dd bs=4M if=./images/jessie/2017-01-23-rpi3-jessie.img of=/dev/mmcblk0
458 ```
449 ```
459 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
450 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
460 ```shell
451 ```shell
461 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-frmw.img /dev/mmcblk0
452 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-frmw.img /dev/mmcblk0
462 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-root.img /dev/sdc
453 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-root.img /dev/sdc
463 ```
454 ```
464
455
465 ## QEMU emulation
456 ## QEMU emulation
466 Start QEMU full system emulation:
457 Start QEMU full system emulation:
467 ```shell
458 ```shell
468 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"
459 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"
469 ```
460 ```
470
461
471 Start QEMU full system emulation and output to console:
462 Start QEMU full system emulation and output to console:
472 ```shell
463 ```shell
473 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
464 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
474 ```
465 ```
475
466
476 Start QEMU full system emulation with SMP and output to console:
467 Start QEMU full system emulation with SMP and output to console:
477 ```shell
468 ```shell
478 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
469 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
479 ```
470 ```
480
471
481 Start QEMU full system emulation with cryptfs, initramfs and output to console:
472 Start QEMU full system emulation with cryptfs, initramfs and output to console:
482 ```shell
473 ```shell
483 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
474 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
484 ```
475 ```
485
476
486 ## Weekly image builds
477 ## Weekly image builds
487 The image files are provided by JRWR'S I/O PORT and are built once a Sunday at midnight UTC!
478 The image files are provided by JRWR'S I/O PORT and are built once a Sunday at midnight UTC!
488 * [Debian Stretch Raspberry Pi2/3 Weekly Image Builds](https://jrwr.io/doku.php?id=projects:debianpi)
479 * [Debian Stretch Raspberry Pi2/3 Weekly Image Builds](https://jrwr.io/doku.php?id=projects:debianpi)
489
480
490 ## External links and references
481 ## External links and references
491 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
482 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
492 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
483 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
493 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
484 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
494 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
485 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
495 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
486 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
496 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
487 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
497 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
488 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
498 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
489 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
499 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
490 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,41 +1,41
1 #
1 #
2 # Debootstrap basic system
2 # Debootstrap basic system
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 VARIANT=""
8 VARIANT=""
9 COMPONENTS="main"
9 COMPONENTS="main"
10
10
11 # Use non-free Debian packages if needed
11 # Use non-free Debian packages if needed
12 if [ "$ENABLE_NONFREE" = true ] ; then
12 if [ "$ENABLE_NONFREE" = true ] ; then
13 COMPONENTS="main,non-free,contrib"
13 COMPONENTS="main,non-free,contrib"
14 fi
14 fi
15
15
16 # Use minbase bootstrap variant which only includes essential packages
16 # Use minbase bootstrap variant which only includes essential packages
17 if [ "$ENABLE_MINBASE" = true ] ; then
17 if [ "$ENABLE_MINBASE" = true ] ; then
18 VARIANT="--variant=minbase"
18 VARIANT="--variant=minbase"
19 fi
19 fi
20
20
21 # Base debootstrap (unpack only)
21 # Base debootstrap (unpack only)
22 http_proxy=${APT_PROXY} debootstrap "${APT_EXCLUDES}" --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian"
22 http_proxy=${APT_PROXY} debootstrap ${APT_EXCLUDES} --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian"
23
23
24 # Copy qemu emulator binary to chroot
24 # Copy qemu emulator binary to chroot
25 install -m 755 -o root -g root "${QEMU_BINARY}" "${R}${QEMU_BINARY}"
25 install -m 755 -o root -g root "${QEMU_BINARY}" "${R}${QEMU_BINARY}"
26
26
27 # Copy debian-archive-keyring.pgp
27 # Copy debian-archive-keyring.pgp
28 mkdir -p "${R}/usr/share/keyrings"
28 mkdir -p "${R}/usr/share/keyrings"
29 install_readonly /usr/share/keyrings/debian-archive-keyring.gpg "${R}/usr/share/keyrings/debian-archive-keyring.gpg"
29 install_readonly /usr/share/keyrings/debian-archive-keyring.gpg "${R}/usr/share/keyrings/debian-archive-keyring.gpg"
30
30
31 # Complete the bootstrapping process
31 # Complete the bootstrapping process
32 chroot_exec /debootstrap/debootstrap --second-stage
32 chroot_exec /debootstrap/debootstrap --second-stage
33
33
34 # Mount required filesystems
34 # Mount required filesystems
35 mount -t proc none "${R}/proc"
35 mount -t proc none "${R}/proc"
36 mount -t sysfs none "${R}/sys"
36 mount -t sysfs none "${R}/sys"
37
37
38 # Mount pseudo terminal slave if supported by Debian release
38 # Mount pseudo terminal slave if supported by Debian release
39 if [ -d "${R}/dev/pts" ] ; then
39 if [ -d "${R}/dev/pts" ] ; then
40 mount --bind /dev/pts "${R}/dev/pts"
40 mount --bind /dev/pts "${R}/dev/pts"
41 fi
41 fi
@@ -1,55 +1,39
1 #
1 #
2 # Setup APT repositories
2 # Setup APT repositories
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup APT proxy configuration
8 # Install and setup APT proxy configuration
9 if [ -z "$APT_PROXY" ] ; then
9 if [ -z "$APT_PROXY" ] ; then
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
12 fi
12 fi
13
13
14 if [ "$BUILD_KERNEL" = false ] ; then
14 if [ "$BUILD_KERNEL" = false ] ; then
15 # Install APT pinning configuration for flash-kernel package
15 echo "Downloading precompiled kernel"
16 install_readonly files/apt/flash-kernel "${ETC_DIR}/apt/preferences.d/flash-kernel"
16 echo "error: not configured"
17
17 exit 1;
18 # Install APT sources.list
18 # BUILD_KERNEL=true
19 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
19 else
20 echo "deb ${COLLABORA_URL} ${RELEASE} rpi2" >> "${ETC_DIR}/apt/sources.list"
20 echo "No precompiled kernel repositories were added"
21
22 # Upgrade collabora package index and install collabora keyring
23 chroot_exec apt-get -qq -y update
24 chroot_exec apt-get -qq -y --allow-unauthenticated install collabora-obs-archive-keyring
25 else # BUILD_KERNEL=true
26 # Install APT sources.list
27 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
28
29 # Use specified APT server and release
30 sed -i "s/\/ftp.debian.org\//\/${APT_SERVER}\//" "${ETC_DIR}/apt/sources.list"
31 sed -i "s/ jessie/ ${RELEASE}/" "${ETC_DIR}/apt/sources.list"
32 fi
33
34 # Allow the installation of non-free Debian packages
35 if [ "$ENABLE_NONFREE" = true ] ; then
36 sed -i "s/ contrib/ contrib non-free/" "${ETC_DIR}/apt/sources.list"
37 fi
21 fi
38
22
39 # Upgrade package index and update all installed packages and changed dependencies
23 # Upgrade package index and update all installed packages and changed dependencies
40 chroot_exec apt-get -qq -y update
24 chroot_exec apt-get -qq -y update
41 chroot_exec apt-get -qq -y -u dist-upgrade
25 chroot_exec apt-get -qq -y -u dist-upgrade
42
26
43 if [ "$APT_INCLUDES_LATE" ] ; then
27 if [ "$APT_INCLUDES_LATE" ] ; then
44 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
28 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
45 fi
29 fi
46
30
47 if [ -d packages ] ; then
31 if [ -d packages ] ; then
48 for package in packages/*.deb ; do
32 for package in packages/*.deb ; do
49 cp "$package" "${R}"/tmp
33 cp "$package" "${R}"/tmp
50 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
34 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
51 done
35 done
52 fi
36 fi
53 chroot_exec apt-get -qq -y -f install
37 chroot_exec apt-get -qq -y -f install
54
38
55 chroot_exec apt-get -qq -y check
39 chroot_exec apt-get -qq -y check
@@ -1,796 +1,802
1 #!/bin/sh
1 #!/bin/bash
2
3 ########################################################################
2 ########################################################################
4 # rpi23-gen-image.sh 2015-2017
3 # rpi23-gen-image.sh 2015-2017
5 #
4 #
6 # Advanced Debian "jessie", "stretch" and "buster" bootstrap script for RPi2/3
5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
7 #
6 #
8 # This program is free software; you can redistribute it and/or
7 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License
8 # modify it under the terms of the GNU General Public License
10 # as published by the Free Software Foundation; either version 2
9 # as published by the Free Software Foundation; either version 2
11 # of the License, or (at your option) any later version.
10 # of the License, or (at your option) any later version.
12 #
11 #
13 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
14 #
13 #
15 # Big thanks for patches and enhancements by 20+ github contributors!
14 # Big thanks for patches and enhancements by 20+ github contributors!
16 ########################################################################
15 ########################################################################
17
16
18 # Are we running as root?
17 # Are we running as root?
19 if [ "$(id -u)" -ne "0" ] ; then
18 if [ "$(id -u)" -ne "0" ] ; then
20 echo "error: this script must be executed with root privileges!"
19 echo "error: this script must be executed with root privileges!"
21 exit 1
20 exit 1
22 fi
21 fi
23
22
24 # Check if ./functions.sh script exists
23 # Check if ./functions.sh script exists
25 if [ ! -r "./functions.sh" ] ; then
24 if [ ! -r "./functions.sh" ] ; then
26 echo "error: './functions.sh' required script not found!"
25 echo "error: './functions.sh' required script not found!"
27 exit 1
26 exit 1
28 fi
27 fi
29
28
30 # Load utility functions
29 # Load utility functions
31 . ./functions.sh
30 . ./functions.sh
32
31
33 # Load parameters from configuration template file
32 # Load parameters from configuration template file
34 if [ -n "$CONFIG_TEMPLATE" ] ; then
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
35 use_template
34 use_template
36 fi
35 fi
37
36
38 # Introduce settings
37 # Introduce settings
39 set -e
38 set -e
40 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
41 set -x
40 set -x
42
41
43 # Raspberry Pi model configuration
42 # Raspberry Pi model configuration
44 RPI_MODEL=${RPI_MODEL:=2}
43 RPI_MODEL=${RPI_MODEL:=2}
45
44
46 #bcm2708-rpi-0-w.dtb (Used for Pi 0 and PI 0W)
47 RPI0_DTB_FILE=${RPI0_DTB_FILE:=bcm2708-rpi-0-w.dtb}
48 RPI0_UBOOT_CONFIG=${RPI0_UBOOT_CONFIG:=rpi_defconfig}
49
50 #bcm2708-rpi-b.dtb (Used for Pi 1 model A and B)
51 RPI1_DTB_FILE=${RPI1_DTB_FILE:=bcm2708-rpi-b.dtb}
52 RPI1_UBOOT_CONFIG=${RPI1_UBOOT_CONFIG:=rpi_defconfig}
53
54 #bcm2708-rpi-b-plus.dtb (Used for Pi 1 model B+ and A+)
55 RPI1P_DTB_FILE=${RPI1P_DTB_FILE:=bcm2708-rpi-b-plus.dtb}
56 RPI1P_UBOOT_CONFIG=${RPI1P_UBOOT_CONFIG:=rpi_defconfig}
57
58 #bcm2709-rpi-2-b.dtb (Used for Pi 2 model B)
59 RPI2_DTB_FILE=${RPI2_DTB_FILE:=bcm2709-rpi-2-b.dtb}
60 RPI2_UBOOT_CONFIG=${RPI2_UBOOT_CONFIG:=rpi_2_defconfig}
61
62 #bcm2710-rpi-3-b.dtb (Used for Pi 3 model B)
63 RPI3_DTB_FILE=${RPI3_DTB_FILE:=bcm2710-rpi-3-b.dtb}
64 RPI3_UBOOT_CONFIG=${RPI3_UBOOT_CONFIG:=rpi_3_32b_defconfig}
65
66 #bcm2710-rpi-3-b-plus.dtb (Used for Pi 3 model B+)
67 RPI3P_DTB_FILE=${RPI3P_DTB_FILE:=bcm2710-rpi-3-b-plus.dtb}
68 RPI3P_UBOOT_CONFIG=${RPI3P_UBOOT_CONFIG:=rpi_3_32b_defconfig}
69
70 # Debian release
45 # Debian release
71 RELEASE=${RELEASE:=jessie}
46 RELEASE=${RELEASE:=buster}
72 KERNEL_ARCH=${KERNEL_ARCH:=arm}
73 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
74 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
75 COLLABORA_KERNEL=${COLLABORA_KERNEL:=3.18.0-trunk-rpi2}
76 if [ "$KERNEL_ARCH" = "arm64" ] ; then
77 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
78 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
79 fi
80
81 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
82 #RASPBERRY PI 1, PI ZERO, PI ZERO W, AND COMPUTE MODULE DEFAULT Kernel BUILD CONFIGURATION
83 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
84 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
85 else
86 #RASPBERRY PI 2, PI 3, PI 3+, AND COMPUTE MODULE 3 DEFAULT Kernel BUILD CONFIGURATION
87 #https://www.raspberrypi.org/documentation/linux/kernel/building.md
88 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
89 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
90 fi
91
47
92 if [ "$RELEASE_ARCH" = "arm64" ] ; then
48 #Kernel Branch
93 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
94 else
95 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
96 fi
97 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
98
50
99 # URLs
51 # URLs
100 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
101 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}
102 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}
103 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
104 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}
105 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
106 VIDEOCORE_URL=${VIDEOCORE_URL=https://github.com/raspberrypi/userland}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
107 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}
108
60
109 # Build directories
61 # Build directories
110 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
62 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
111 BUILDDIR="${BASEDIR}/build"
63 BUILDDIR="${BASEDIR}/build"
112
64
113 # Prepare date string for default image file name
65 # Prepare date string for default image file name
114 DATE="$(date +%Y-%m-%d)"
66 DATE="$(date +%Y-%m-%d)"
115 if [ -z "$KERNEL_BRANCH" ] ; then
67 if [ -z "$KERNEL_BRANCH" ] ; then
116 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
68 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
117 else
69 else
118 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
70 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
119 fi
71 fi
120
72
121 # Chroot directories
73 # Chroot directories
122 R="${BUILDDIR}/chroot"
74 R="${BUILDDIR}/chroot"
123 ETC_DIR="${R}/etc"
75 ETC_DIR="${R}/etc"
124 LIB_DIR="${R}/lib"
76 LIB_DIR="${R}/lib"
125 BOOT_DIR="${R}/boot/firmware"
77 BOOT_DIR="${R}/boot/firmware"
126 KERNEL_DIR="${R}/usr/src/linux"
78 KERNEL_DIR="${R}/usr/src/linux"
127 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
128
80
129 # Firmware directory: Blank if download from github
81 # Firmware directory: Blank if download from github
130 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
82 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
131
83
132 # General settings
84 # General settings
85 SET_ARCH=${SET_ARCH:=32}
133 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
86 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
134 PASSWORD=${PASSWORD:=raspberry}
87 PASSWORD=${PASSWORD:=raspberry}
135 USER_PASSWORD=${USER_PASSWORD:=raspberry}
88 USER_PASSWORD=${USER_PASSWORD:=raspberry}
136 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
89 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
137 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
90 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
138 EXPANDROOT=${EXPANDROOT:=true}
91 EXPANDROOT=${EXPANDROOT:=true}
139
92
140 # Keyboard settings
93 # Keyboard settings
141 XKB_MODEL=${XKB_MODEL:=""}
94 XKB_MODEL=${XKB_MODEL:=""}
142 XKB_LAYOUT=${XKB_LAYOUT:=""}
95 XKB_LAYOUT=${XKB_LAYOUT:=""}
143 XKB_VARIANT=${XKB_VARIANT:=""}
96 XKB_VARIANT=${XKB_VARIANT:=""}
144 XKB_OPTIONS=${XKB_OPTIONS:=""}
97 XKB_OPTIONS=${XKB_OPTIONS:=""}
145
98
146 # Network settings (DHCP)
99 # Network settings (DHCP)
147 ENABLE_DHCP=${ENABLE_DHCP:=true}
100 ENABLE_DHCP=${ENABLE_DHCP:=true}
148
101
149 # Network settings (static)
102 # Network settings (static)
150 NET_ADDRESS=${NET_ADDRESS:=""}
103 NET_ADDRESS=${NET_ADDRESS:=""}
151 NET_GATEWAY=${NET_GATEWAY:=""}
104 NET_GATEWAY=${NET_GATEWAY:=""}
152 NET_DNS_1=${NET_DNS_1:=""}
105 NET_DNS_1=${NET_DNS_1:=""}
153 NET_DNS_2=${NET_DNS_2:=""}
106 NET_DNS_2=${NET_DNS_2:=""}
154 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
107 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
155 NET_NTP_1=${NET_NTP_1:=""}
108 NET_NTP_1=${NET_NTP_1:=""}
156 NET_NTP_2=${NET_NTP_2:=""}
109 NET_NTP_2=${NET_NTP_2:=""}
157
110
158 # APT settings
111 # APT settings
159 APT_PROXY=${APT_PROXY:=""}
112 APT_PROXY=${APT_PROXY:=""}
160 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
113 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
161
114
162 # Feature settings
115 # Feature settings
163 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
116 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
164 ENABLE_I2C=${ENABLE_I2C:=false}
117 ENABLE_I2C=${ENABLE_I2C:=false}
165 ENABLE_SPI=${ENABLE_SPI:=false}
118 ENABLE_SPI=${ENABLE_SPI:=false}
166 ENABLE_IPV6=${ENABLE_IPV6:=true}
119 ENABLE_IPV6=${ENABLE_IPV6:=true}
167 ENABLE_SSHD=${ENABLE_SSHD:=true}
120 ENABLE_SSHD=${ENABLE_SSHD:=true}
168 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
121 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
169 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
122 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
170 ENABLE_SOUND=${ENABLE_SOUND:=true}
123 ENABLE_SOUND=${ENABLE_SOUND:=true}
171 ENABLE_DBUS=${ENABLE_DBUS:=true}
124 ENABLE_DBUS=${ENABLE_DBUS:=true}
172 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
125 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
173 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
126 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
174 ENABLE_XORG=${ENABLE_XORG:=false}
127 ENABLE_XORG=${ENABLE_XORG:=false}
175 ENABLE_WM=${ENABLE_WM:=""}
128 ENABLE_WM=${ENABLE_WM:=""}
176 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
129 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
177 ENABLE_USER=${ENABLE_USER:=true}
130 ENABLE_USER=${ENABLE_USER:=true}
178 USER_NAME=${USER_NAME:="pi"}
131 USER_NAME=${USER_NAME:="pi"}
179 ENABLE_ROOT=${ENABLE_ROOT:=false}
132 ENABLE_ROOT=${ENABLE_ROOT:=false}
180 ENABLE_QEMU=${ENABLE_QEMU:=false}
133 ENABLE_QEMU=${ENABLE_QEMU:=false}
181 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
134 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
182
135
183 # SSH settings
136 # SSH settings
184 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
137 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
185 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
138 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
186 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
139 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
187 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
140 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
188 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
141 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
189
142
190 # Advanced settings
143 # Advanced settings
191 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
144 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
192 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
145 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
193 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
146 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
194 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
147 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
195 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
148 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
196 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=true}
149 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=true}
197 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
150 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
198 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
151 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
199 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
152 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
200 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
153 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
201 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
154 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
202 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
155 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
203 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
156 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
204 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
157 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
205
158
206 # Kernel compilation settings
159 # Kernel compilation settings
207 BUILD_KERNEL=${BUILD_KERNEL:=false}
160 BUILD_KERNEL=${BUILD_KERNEL:=true}
208 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
161 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
209 KERNEL_THREADS=${KERNEL_THREADS:=1}
162 KERNEL_THREADS=${KERNEL_THREADS:=1}
210 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
163 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
211 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
164 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
212 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
165 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
213 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
166 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
214 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
167 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
215
168
216 if [ "$KERNEL_ARCH" = "arm64" ] ; then
217 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
218 else
219 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
220 fi
221
222 # Kernel compilation from source directory settings
169 # Kernel compilation from source directory settings
223 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
170 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
224 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
171 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
225 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
172 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
226 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
173 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
227
174
228 # Reduce disk usage settings
175 # Reduce disk usage settings
229 REDUCE_APT=${REDUCE_APT:=true}
176 REDUCE_APT=${REDUCE_APT:=true}
230 REDUCE_DOC=${REDUCE_DOC:=true}
177 REDUCE_DOC=${REDUCE_DOC:=true}
231 REDUCE_MAN=${REDUCE_MAN:=true}
178 REDUCE_MAN=${REDUCE_MAN:=true}
232 REDUCE_VIM=${REDUCE_VIM:=false}
179 REDUCE_VIM=${REDUCE_VIM:=false}
233 REDUCE_BASH=${REDUCE_BASH:=false}
180 REDUCE_BASH=${REDUCE_BASH:=false}
234 REDUCE_HWDB=${REDUCE_HWDB:=true}
181 REDUCE_HWDB=${REDUCE_HWDB:=true}
235 REDUCE_SSHD=${REDUCE_SSHD:=true}
182 REDUCE_SSHD=${REDUCE_SSHD:=true}
236 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
183 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
237
184
238 # Encrypted filesystem settings
185 # Encrypted filesystem settings
239 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
186 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
240 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
187 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
241 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
188 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
242 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
189 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
243 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
190 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
244
191
245 # Chroot scripts directory
192 # Chroot scripts directory
246 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
193 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
247
194
248 # Packages required in the chroot build environment
195 # Packages required in the chroot build environment
249 APT_INCLUDES=${APT_INCLUDES:=""}
196 APT_INCLUDES=${APT_INCLUDES:=""}
250 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup"
197 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup"
251
198
252 #Packages to exclude from chroot build environment
199 #Packages to exclude from chroot build environment
253 APT_EXCLUDES=${APT_EXCLUDES:=""}
200 APT_EXCLUDES=${APT_EXCLUDES:=""}
254
201
255 # Packages required for bootstrapping
202 # Packages required for bootstrapping
256 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
203 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
257 MISSING_PACKAGES=""
204 MISSING_PACKAGES=""
258
205
259 # Packages installed for c/c++ build environment in chroot (keep empty)
206 # Packages installed for c/c++ build environment in chroot (keep empty)
260 COMPILER_PACKAGES=""
207 COMPILER_PACKAGES=""
261
208
262 set +x
209 set +x
263
210
264 #If init and systemd-sysv are wanted e.g. halt/reboot/shutdown scripts
211 #If init and systemd-sysv are wanted e.g. halt/reboot/shutdown scripts
265 if [ "$ENABLE_SYSVINIT" = false ] ; then
212 if [ "$ENABLE_SYSVINIT" = false ] ; then
266 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
213 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
267 fi
214 fi
268
215
269 #Check if apt-cacher-ng has its default port open on and set APT_PROXY
216 #Check if apt-cacher-ng has its default port open on and set APT_PROXY
270 if [ -n "$(lsof -i :3142)" ] ; then
217 if [ -n "$(lsof -i :3142)" ] ; then
271 HTTP_PROXY=http://127.0.0.1:3142/
218 HTTP_PROXY=http://127.0.0.1:3142/
219 fi
220
221 #make script easier and more stable to use with convenient setup switch. Just setup SET_ARCH and RPI_MODEL and your good to go!
222 if [ -n "$SET_ARCH" ] ; then
223 echo "Setting Architecture specific settings"
224 ##################################
225 # 64 bit config
226 ##################################
227 if [ "$SET_ARCH" = 64 ] ; then
228 echo "64 bit mode selected - Setting up enviroment"
229 # 64 bit depended settings
230 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
231 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
232 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
233
234 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
235 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
236 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
237 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
238 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
239 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
240 else
241 echo "error: Only Raspberry PI 3 and 3B+ support 64bit"
242 exit 1
243 fi
244 fi
272
245
273 # Set Raspberry Pi model specific configuration
246 ##################################
274 if [ "$RPI_MODEL" = 0 ] ; then
247 # 32 bit config
275 DTB_FILE=${RPI0_DTB_FILE}
248 ##################################
276 UBOOT_CONFIG=${RPI0_UBOOT_CONFIG}
249 if [ "$SET_ARCH" = 32 ] ; then
277 elif [ "$RPI_MODEL" = 1 ] ; then
250 echo "32 bit mode selected - Setting up enviroment"
278 DTB_FILE=${RPI1_DTB_FILE}
251 #General 32bit configuration
279 UBOOT_CONFIG=${RPI1_UBOOT_CONFIG}
252 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
280 elif [ "$RPI_MODEL" = 1P ] ; then
253 KERNEL_ARCH=${KERNEL_ARCH:=arm}
281 DTB_FILE=${RPI1P_DTB_FILE}
254 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
282 UBOOT_CONFIG=${RPI1P_UBOOT_CONFIG}
255
283 elif [ "$RPI_MODEL" = 2 ] ; then
256 #Raspberry setting grouped by board compability
284 DTB_FILE=${RPI2_DTB_FILE}
257 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
285 UBOOT_CONFIG=${RPI2_UBOOT_CONFIG}
258 echo "Setting settings for bcm2835 Raspberry PI boards"
286 elif [ "$RPI_MODEL" = 3 ] ; then
259 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
287 DTB_FILE=${RPI3_DTB_FILE}
260 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
288 UBOOT_CONFIG=${RPI3_UBOOT_CONFIG}
261 RELEASE_ARCH=${RELEASE_ARCH:=armel}
289 elif [ "$RPI_MODEL" = 3P ] ; then
262 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
290 DTB_FILE=${RPI3P_DTB_FILE}
263 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
291 UBOOT_CONFIG=${RPI3P_UBOOT_CONFIG}
264 fi
265 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
266 echo "Setting settings for bcm2837 Raspberry PI boards"
267 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
268 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
269 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
270 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
271 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
272 fi
273 fi
274 #SET_ARCH not set
292 else
275 else
293 echo "error: Raspberry Pi model ${RPI_MODEL} is not supported!"
276 echo "error: Please set '32' or '64' as value for SET_ARCH"
294 exit 1
277 exit 1
295 fi
278 fi
296
279
297 # Check if the internal wireless interface is supported by the RPi model
280 #Device specific configuration and uboot-config
298 if [ "$ENABLE_WIRELESS" = true ] && ([ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ]); then
281 echo "Select DTB-File"
282 case "$RPI_MODEL" in
283 0)
284 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
285 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
286 ;;
287 1)
288 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
289 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
290 ;;
291 1P)
292 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
293 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
294 ;;
295 2)
296 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
297 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
298 ;;
299 3)
300 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
301 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
302 ;;
303 3P)
304 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
305 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
306 ;;
307 *)
308 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
309 exit 1
310 ;;
311 esac
312 echo "$DTB_FILE selected"
299
313
300 echo "error: The selected Raspberry Pi model has no internal wireless interface"
314 # Check if the internal wireless interface is supported by the RPi model
301 exit 1
315 if [ "$ENABLE_WIRELESS" = true ] ; then
302 fi
316 if [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ] ; then
317 echo "error: The selected Raspberry Pi model has no internal wireless interface"
318 exit 1
319 else
320 echo "Raspberry Pi $RPI_MODEL has WIFI support"
321 fi
322 fi
303
323
304 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
324 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
305 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
325 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
306 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
326 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
307 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
327 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
308 exit 1
328 exit 1
309 fi
329 fi
310 fi
330 fi
311
331
312 # Build RPi2/3 Linux kernel if required by Debian release
313 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
314 BUILD_KERNEL=true
315 fi
316
317 # Add packages required for kernel cross compilation
332 # Add packages required for kernel cross compilation
318 if [ "$BUILD_KERNEL" = true ] ; then
333 if [ "$BUILD_KERNEL" = true ] ; then
319 if [ "$KERNEL_ARCH" = "arm" ] ; then
334 if [ "$KERNEL_ARCH" = "arm" ] ; then
320 if [ "$RELEASE_ARCH" = "armel" ]; then
335 if [ "$RELEASE_ARCH" = "armel" ]; then
321 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
336 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
322 fi
337 fi
323 if [ "$RELEASE_ARCH" = "armhf" ]; then
338 if [ "$RELEASE_ARCH" = "armhf" ]; then
324 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
339 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
325 fi
340 fi
326 fi
341 fi
327 if [ "$RELEASE_ARCH" = "arm64" ]; then
342 if [ "$RELEASE_ARCH" = "arm64" ]; then
328 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
343 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
329 fi
344 fi
330 fi
345 fi
331
346
332 if [ "$ENABLE_VIDEOCORE" = true ] ; then
347 if [ "$ENABLE_VIDEOCORE" = true ] ; then
333 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
348 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
334 fi
349 fi
335
350
336 # Add libncurses5 to enable kernel menuconfig
351 # Add libncurses5 to enable kernel menuconfig
337 if [ "$KERNEL_MENUCONFIG" = true ] ; then
352 if [ "$KERNEL_MENUCONFIG" = true ] ; then
338 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
353 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
339 fi
354 fi
340
355
341 # Add ccache compiler cache for (faster) kernel cross (re)compilation
356 # Add ccache compiler cache for (faster) kernel cross (re)compilation
342 if [ "$KERNEL_CCACHE" = true ] ; then
357 if [ "$KERNEL_CCACHE" = true ] ; then
343 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
358 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
344 fi
359 fi
345
360
346 # Add cryptsetup package to enable filesystem encryption
361 # Add cryptsetup package to enable filesystem encryption
347 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
362 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
348 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
363 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
349 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
364 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
350
365
351 if [ -z "$CRYPTFS_PASSWORD" ] ; then
366 if [ -z "$CRYPTFS_PASSWORD" ] ; then
352 echo "error: no password defined (CRYPTFS_PASSWORD)!"
367 echo "error: no password defined (CRYPTFS_PASSWORD)!"
353 exit 1
368 exit 1
354 fi
369 fi
355 ENABLE_INITRAMFS=true
370 ENABLE_INITRAMFS=true
356 fi
371 fi
357
372
358 # Add initramfs generation tools
373 # Add initramfs generation tools
359 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
374 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
360 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
375 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
361 fi
376 fi
362
377
363 # Add device-tree-compiler required for building the U-Boot bootloader
378 # Add device-tree-compiler required for building the U-Boot bootloader
364 if [ "$ENABLE_UBOOT" = true ] ; then
379 if [ "$ENABLE_UBOOT" = true ] ; then
365 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
380 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
366 fi
381 fi
367
382
368 # Check if root SSH (v2) public key file exists
383 # Check if root SSH (v2) public key file exists
369 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
384 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
370 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
385 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
371 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
386 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
372 exit 1
387 exit 1
373 fi
388 fi
374 fi
389 fi
375
390
376 # Check if $USER_NAME SSH (v2) public key file exists
391 # Check if $USER_NAME SSH (v2) public key file exists
377 if [ -n "$SSH_USER_PUB_KEY" ] ; then
392 if [ -n "$SSH_USER_PUB_KEY" ] ; then
378 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
393 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
379 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
394 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
380 exit 1
395 exit 1
381 fi
396 fi
382 fi
397 fi
383
398
384 # Check if all required packages are installed on the build system
399 # Check if all required packages are installed on the build system
385 for package in $REQUIRED_PACKAGES ; do
400 for package in $REQUIRED_PACKAGES ; do
386 if [ "$(dpkg-query -W -f='${Status}' $package)" != "install ok installed" ] ; then
401 if [ "$(dpkg-query -W -f='${Status}' $package)" != "install ok installed" ] ; then
387 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
402 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
388 fi
403 fi
389 done
404 done
390
405
391 # If there are missing packages ask confirmation for install, or exit
406 # If there are missing packages ask confirmation for install, or exit
392 if [ -n "$MISSING_PACKAGES" ] ; then
407 if [ -n "$MISSING_PACKAGES" ] ; then
393 echo "the following packages needed by this script are not installed:"
408 echo "the following packages needed by this script are not installed:"
394 echo "$MISSING_PACKAGES"
409 echo "$MISSING_PACKAGES"
395
410
396 printf "\ndo you want to install the missing packages right now? [y/n] "
411 printf "\ndo you want to install the missing packages right now? [y/n] "
397 read -r confirm
412 read -r confirm
398 [ "$confirm" != "y" ] && exit 1
413 [ "$confirm" != "y" ] && exit 1
399
414
400 # Make sure all missing required packages are installed
415 # Make sure all missing required packages are installed
401 apt-get -qq -y install "${MISSING_PACKAGES}"
416 apt-get -qq -y install "${MISSING_PACKAGES}"
402 fi
417 fi
403
418
404 # Check if ./bootstrap.d directory exists
419 # Check if ./bootstrap.d directory exists
405 if [ ! -d "./bootstrap.d/" ] ; then
420 if [ ! -d "./bootstrap.d/" ] ; then
406 echo "error: './bootstrap.d' required directory not found!"
421 echo "error: './bootstrap.d' required directory not found!"
407 exit 1
422 exit 1
408 fi
423 fi
409
424
410 # Check if ./files directory exists
425 # Check if ./files directory exists
411 if [ ! -d "./files/" ] ; then
426 if [ ! -d "./files/" ] ; then
412 echo "error: './files' required directory not found!"
427 echo "error: './files' required directory not found!"
413 exit 1
428 exit 1
414 fi
429 fi
415
430
416 # Check if specified KERNELSRC_DIR directory exists
431 # Check if specified KERNELSRC_DIR directory exists
417 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
432 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
418 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
433 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
419 exit 1
434 exit 1
420 fi
435 fi
421
436
422 # Check if specified UBOOTSRC_DIR directory exists
437 # Check if specified UBOOTSRC_DIR directory exists
423 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
438 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
424 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
439 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
425 exit 1
440 exit 1
426 fi
441 fi
427
442
428 # Check if specified VIDEOCORESRC_DIR directory exists
443 # Check if specified VIDEOCORESRC_DIR directory exists
429 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
444 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
430 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
445 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
431 exit 1
446 exit 1
432 fi
447 fi
433
448
434 # Check if specified FBTURBOSRC_DIR directory exists
449 # Check if specified FBTURBOSRC_DIR directory exists
435 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
450 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
436 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
451 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
437 exit 1
452 exit 1
438 fi
453 fi
439
454
440 # Check if specified CHROOT_SCRIPTS directory exists
455 # Check if specified CHROOT_SCRIPTS directory exists
441 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
456 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
442 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
457 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
443 exit 1
458 exit 1
444 fi
459 fi
445
460
446 # Check if specified device mapping already exists (will be used by cryptsetup)
461 # Check if specified device mapping already exists (will be used by cryptsetup)
447 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
462 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
448 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
463 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
449 exit 1
464 exit 1
450 fi
465 fi
451
466
452 # Don't clobber an old build
467 # Don't clobber an old build
453 if [ -e "$BUILDDIR" ] ; then
468 if [ -e "$BUILDDIR" ] ; then
454 echo "error: directory ${BUILDDIR} already exists, not proceeding"
469 echo "error: directory ${BUILDDIR} already exists, not proceeding"
455 exit 1
470 exit 1
456 fi
471 fi
457
472
458 # Setup chroot directory
473 # Setup chroot directory
459 mkdir -p "${R}"
474 mkdir -p "${R}"
460
475
461 # Check if build directory has enough of free disk space >512MB
476 # Check if build directory has enough of free disk space >512MB
462 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
477 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
463 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
478 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
464 exit 1
479 exit 1
465 fi
480 fi
466
481
467 set -x
482 set -x
468
483
469 # Call "cleanup" function on various signals and errors
484 # Call "cleanup" function on various signals and errors
470 trap cleanup 0 1 2 3 6
485 trap cleanup 0 1 2 3 6
471
486
472 # Add required packages for the minbase installation
487 # Add required packages for the minbase installation
473 if [ "$ENABLE_MINBASE" = true ] ; then
488 if [ "$ENABLE_MINBASE" = true ] ; then
474 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
489 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
475 fi
490 fi
476
491
477 # Add parted package, required to get partprobe utility
492 # Add parted package, required to get partprobe utility
478 if [ "$EXPANDROOT" = true ] ; then
493 if [ "$EXPANDROOT" = true ] ; then
479 APT_INCLUDES="${APT_INCLUDES},parted"
494 APT_INCLUDES="${APT_INCLUDES},parted"
480 fi
495 fi
481
496
482 # Add dbus package, recommended if using systemd
497 # Add dbus package, recommended if using systemd
483 if [ "$ENABLE_DBUS" = true ] ; then
498 if [ "$ENABLE_DBUS" = true ] ; then
484 APT_INCLUDES="${APT_INCLUDES},dbus"
499 APT_INCLUDES="${APT_INCLUDES},dbus"
485 fi
500 fi
486
501
487 # Add iptables IPv4/IPv6 package
502 # Add iptables IPv4/IPv6 package
488 if [ "$ENABLE_IPTABLES" = true ] ; then
503 if [ "$ENABLE_IPTABLES" = true ] ; then
489 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
504 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
490 fi
505 fi
491
506
492 # Add openssh server package
507 # Add openssh server package
493 if [ "$ENABLE_SSHD" = true ] ; then
508 if [ "$ENABLE_SSHD" = true ] ; then
494 APT_INCLUDES="${APT_INCLUDES},openssh-server"
509 APT_INCLUDES="${APT_INCLUDES},openssh-server"
495 fi
510 fi
496
511
497 # Add alsa-utils package
512 # Add alsa-utils package
498 if [ "$ENABLE_SOUND" = true ] ; then
513 if [ "$ENABLE_SOUND" = true ] ; then
499 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
514 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
500 fi
515 fi
501
516
502 # Add rng-tools package
517 # Add rng-tools package
503 if [ "$ENABLE_HWRANDOM" = true ] ; then
518 if [ "$ENABLE_HWRANDOM" = true ] ; then
504 APT_INCLUDES="${APT_INCLUDES},rng-tools"
519 APT_INCLUDES="${APT_INCLUDES},rng-tools"
505 fi
520 fi
506
521
507 # Add fbturbo video driver
522 # Add fbturbo video driver
508 if [ "$ENABLE_FBTURBO" = true ] ; then
523 if [ "$ENABLE_FBTURBO" = true ] ; then
509 # Enable xorg package dependencies
524 # Enable xorg package dependencies
510 ENABLE_XORG=true
525 ENABLE_XORG=true
511 fi
526 fi
512
527
513 # Add user defined window manager package
528 # Add user defined window manager package
514 if [ -n "$ENABLE_WM" ] ; then
529 if [ -n "$ENABLE_WM" ] ; then
515 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
530 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
516
531
517 # Enable xorg package dependencies
532 # Enable xorg package dependencies
518 ENABLE_XORG=true
533 ENABLE_XORG=true
519 fi
534 fi
520
535
521 # Add xorg package
536 # Add xorg package
522 if [ "$ENABLE_XORG" = true ] ; then
537 if [ "$ENABLE_XORG" = true ] ; then
523 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
538 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
524 fi
539 fi
525
540
526 # Replace selected packages with smaller clones
541 # Replace selected packages with smaller clones
527 if [ "$ENABLE_REDUCE" = true ] ; then
542 if [ "$ENABLE_REDUCE" = true ] ; then
528 # Add levee package instead of vim-tiny
543 # Add levee package instead of vim-tiny
529 if [ "$REDUCE_VIM" = true ] ; then
544 if [ "$REDUCE_VIM" = true ] ; then
530 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
545 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
531 fi
546 fi
532
547
533 # Add dropbear package instead of openssh-server
548 # Add dropbear package instead of openssh-server
534 if [ "$REDUCE_SSHD" = true ] ; then
549 if [ "$REDUCE_SSHD" = true ] ; then
535 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
550 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
536 fi
551 fi
537 fi
552 fi
538
553
539 if [ "$RELEASE" != "jessie" ] ; then
540 APT_INCLUDES="${APT_INCLUDES},libnss-systemd"
541 fi
542
543 # Configure kernel sources if no KERNELSRC_DIR
554 # Configure kernel sources if no KERNELSRC_DIR
544 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
555 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
545 KERNELSRC_CONFIG=true
556 KERNELSRC_CONFIG=true
546 fi
557 fi
547
558
548 # Configure reduced kernel
559 # Configure reduced kernel
549 if [ "$KERNEL_REDUCE" = true ] ; then
560 if [ "$KERNEL_REDUCE" = true ] ; then
550 KERNELSRC_CONFIG=false
561 KERNELSRC_CONFIG=false
551 fi
562 fi
552
563
553 # Configure qemu compatible kernel
564 # Configure qemu compatible kernel
554 if [ "$ENABLE_QEMU" = true ] ; then
565 if [ "$ENABLE_QEMU" = true ] ; then
555 DTB_FILE=vexpress-v2p-ca15_a7.dtb
566 DTB_FILE=vexpress-v2p-ca15_a7.dtb
556 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
567 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
557 KERNEL_DEFCONFIG="vexpress_defconfig"
568 KERNEL_DEFCONFIG="vexpress_defconfig"
558 if [ "$KERNEL_MENUCONFIG" = false ] ; then
569 if [ "$KERNEL_MENUCONFIG" = false ] ; then
559 KERNEL_OLDDEFCONFIG=true
570 KERNEL_OLDDEFCONFIG=true
560 fi
571 fi
561 fi
572 fi
562
573
563 # Execute bootstrap scripts
574 # Execute bootstrap scripts
564 for SCRIPT in bootstrap.d/*.sh; do
575 for SCRIPT in bootstrap.d/*.sh; do
565 head -n 3 "$SCRIPT"
576 head -n 3 "$SCRIPT"
566 . "$SCRIPT"
577 . "$SCRIPT"
567 done
578 done
568
579
569 ## Execute custom bootstrap scripts
580 ## Execute custom bootstrap scripts
570 if [ -d "custom.d" ] ; then
581 if [ -d "custom.d" ] ; then
571 for SCRIPT in custom.d/*.sh; do
582 for SCRIPT in custom.d/*.sh; do
572 . "$SCRIPT"
583 . "$SCRIPT"
573 done
584 done
574 fi
585 fi
575
586
576 # Execute custom scripts inside the chroot
587 # Execute custom scripts inside the chroot
577 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
588 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
578 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
589 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
579 chroot_exec /bin/bash -x <<'EOF'
590 chroot_exec /bin/bash -x <<'EOF'
580 for SCRIPT in /chroot_scripts/* ; do
591 for SCRIPT in /chroot_scripts/* ; do
581 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
592 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
582 $SCRIPT
593 $SCRIPT
583 fi
594 fi
584 done
595 done
585 EOF
596 EOF
586 rm -rf "${R}/chroot_scripts"
597 rm -rf "${R}/chroot_scripts"
587 fi
598 fi
588
599
589 # Remove c/c++ build environment from the chroot
600 # Remove c/c++ build environment from the chroot
590 chroot_remove_cc
601 chroot_remove_cc
591
602
592 # Remove apt-utils
593 if [ "$RELEASE" = "jessie" ] ; then
594 chroot_exec apt-get purge -qq -y --force-yes apt-utils
595 fi
596
597 # Generate required machine-id
603 # Generate required machine-id
598 MACHINE_ID=$(dbus-uuidgen)
604 MACHINE_ID=$(dbus-uuidgen)
599 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
605 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
600 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
606 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
601
607
602 # APT Cleanup
608 # APT Cleanup
603 chroot_exec apt-get -y clean
609 chroot_exec apt-get -y clean
604 chroot_exec apt-get -y autoclean
610 chroot_exec apt-get -y autoclean
605 chroot_exec apt-get -y autoremove
611 chroot_exec apt-get -y autoremove
606
612
607 # Unmount mounted filesystems
613 # Unmount mounted filesystems
608 umount -l "${R}/proc"
614 umount -l "${R}/proc"
609 umount -l "${R}/sys"
615 umount -l "${R}/sys"
610
616
611 # Clean up directories
617 # Clean up directories
612 rm -rf "${R}/run/*"
618 rm -rf "${R}/run/*"
613 rm -rf "${R}/tmp/*"
619 rm -rf "${R}/tmp/*"
614
620
615 # Clean up files
621 # Clean up files
616 rm -f "${ETC_DIR}/ssh/ssh_host_*"
622 rm -f "${ETC_DIR}/ssh/ssh_host_*"
617 rm -f "${ETC_DIR}/dropbear/dropbear_*"
623 rm -f "${ETC_DIR}/dropbear/dropbear_*"
618 rm -f "${ETC_DIR}/apt/sources.list.save"
624 rm -f "${ETC_DIR}/apt/sources.list.save"
619 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
625 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
620 rm -f "${ETC_DIR}/*-"
626 rm -f "${ETC_DIR}/*-"
621 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
627 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
622 rm -f "${ETC_DIR}/resolv.conf"
628 rm -f "${ETC_DIR}/resolv.conf"
623 rm -f "${R}/root/.bash_history"
629 rm -f "${R}/root/.bash_history"
624 rm -f "${R}/var/lib/urandom/random-seed"
630 rm -f "${R}/var/lib/urandom/random-seed"
625 rm -f "${R}/initrd.img"
631 rm -f "${R}/initrd.img"
626 rm -f "${R}/vmlinuz"
632 rm -f "${R}/vmlinuz"
627 rm -f "${R}${QEMU_BINARY}"
633 rm -f "${R}${QEMU_BINARY}"
628
634
629 if [ "$ENABLE_QEMU" = true ] ; then
635 if [ "$ENABLE_QEMU" = true ] ; then
630 # Setup QEMU directory
636 # Setup QEMU directory
631 mkdir "${BASEDIR}/qemu"
637 mkdir "${BASEDIR}/qemu"
632
638
633 # Copy kernel image to QEMU directory
639 # Copy kernel image to QEMU directory
634 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
640 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
635
641
636 # Copy kernel config to QEMU directory
642 # Copy kernel config to QEMU directory
637 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
643 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
638
644
639 # Copy kernel dtbs to QEMU directory
645 # Copy kernel dtbs to QEMU directory
640 for dtb in "${BOOT_DIR}/"*.dtb ; do
646 for dtb in "${BOOT_DIR}/"*.dtb ; do
641 if [ -f "${dtb}" ] ; then
647 if [ -f "${dtb}" ] ; then
642 install_readonly "${dtb}" "${BASEDIR}/qemu/"
648 install_readonly "${dtb}" "${BASEDIR}/qemu/"
643 fi
649 fi
644 done
650 done
645
651
646 # Copy kernel overlays to QEMU directory
652 # Copy kernel overlays to QEMU directory
647 if [ -d "${BOOT_DIR}/overlays" ] ; then
653 if [ -d "${BOOT_DIR}/overlays" ] ; then
648 # Setup overlays dtbs directory
654 # Setup overlays dtbs directory
649 mkdir "${BASEDIR}/qemu/overlays"
655 mkdir "${BASEDIR}/qemu/overlays"
650
656
651 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
657 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
652 if [ -f "${dtb}" ] ; then
658 if [ -f "${dtb}" ] ; then
653 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
659 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
654 fi
660 fi
655 done
661 done
656 fi
662 fi
657
663
658 # Copy u-boot files to QEMU directory
664 # Copy u-boot files to QEMU directory
659 if [ "$ENABLE_UBOOT" = true ] ; then
665 if [ "$ENABLE_UBOOT" = true ] ; then
660 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
666 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
661 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
667 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
662 fi
668 fi
663 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
669 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
664 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
670 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
665 fi
671 fi
666 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
672 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
667 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
673 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
668 fi
674 fi
669 fi
675 fi
670
676
671 # Copy initramfs to QEMU directory
677 # Copy initramfs to QEMU directory
672 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
678 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
673 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
679 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
674 fi
680 fi
675 fi
681 fi
676
682
677 # Calculate size of the chroot directory in KB
683 # Calculate size of the chroot directory in KB
678 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
684 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
679
685
680 # Calculate the amount of needed 512 Byte sectors
686 # Calculate the amount of needed 512 Byte sectors
681 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
687 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
682 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
688 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
683 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
689 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
684
690
685 # The root partition is EXT4
691 # The root partition is EXT4
686 # This means more space than the actual used space of the chroot is used.
692 # This means more space than the actual used space of the chroot is used.
687 # As overhead for journaling and reserved blocks 35% are added.
693 # As overhead for journaling and reserved blocks 35% are added.
688 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
694 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
689
695
690 # Calculate required image size in 512 Byte sectors
696 # Calculate required image size in 512 Byte sectors
691 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
697 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
692
698
693 # Prepare image file
699 # Prepare image file
694 if [ "$ENABLE_SPLITFS" = true ] ; then
700 if [ "$ENABLE_SPLITFS" = true ] ; then
695 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
701 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
696 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
702 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
697 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
703 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
698 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
704 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
699
705
700 # Write firmware/boot partition tables
706 # Write firmware/boot partition tables
701 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
707 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
702 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
708 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
703 EOM
709 EOM
704
710
705 # Write root partition table
711 # Write root partition table
706 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
712 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
707 ${TABLE_SECTORS},${ROOT_SECTORS},83
713 ${TABLE_SECTORS},${ROOT_SECTORS},83
708 EOM
714 EOM
709
715
710 # Setup temporary loop devices
716 # Setup temporary loop devices
711 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
717 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
712 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
718 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
713 else # ENABLE_SPLITFS=false
719 else # ENABLE_SPLITFS=false
714 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
720 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
715 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
721 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
716
722
717 # Write partition table
723 # Write partition table
718 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
724 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
719 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
725 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
720 ${ROOT_OFFSET},${ROOT_SECTORS},83
726 ${ROOT_OFFSET},${ROOT_SECTORS},83
721 EOM
727 EOM
722
728
723 # Setup temporary loop devices
729 # Setup temporary loop devices
724 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
730 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
725 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
731 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
726 fi
732 fi
727
733
728 if [ "$ENABLE_CRYPTFS" = true ] ; then
734 if [ "$ENABLE_CRYPTFS" = true ] ; then
729 # Create dummy ext4 fs
735 # Create dummy ext4 fs
730 mkfs.ext4 "$ROOT_LOOP"
736 mkfs.ext4 "$ROOT_LOOP"
731
737
732 # Setup password keyfile
738 # Setup password keyfile
733 touch .password
739 touch .password
734 chmod 600 .password
740 chmod 600 .password
735 echo -n ${CRYPTFS_PASSWORD} > .password
741 echo -n ${CRYPTFS_PASSWORD} > .password
736
742
737 # Initialize encrypted partition
743 # Initialize encrypted partition
738 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
744 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
739
745
740 # Open encrypted partition and setup mapping
746 # Open encrypted partition and setup mapping
741 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
747 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
742
748
743 # Secure delete password keyfile
749 # Secure delete password keyfile
744 shred -zu .password
750 shred -zu .password
745
751
746 # Update temporary loop device
752 # Update temporary loop device
747 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
753 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
748
754
749 # Wipe encrypted partition (encryption cipher is used for randomness)
755 # Wipe encrypted partition (encryption cipher is used for randomness)
750 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
756 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
751 fi
757 fi
752
758
753 # Build filesystems
759 # Build filesystems
754 mkfs.vfat "$FRMW_LOOP"
760 mkfs.vfat "$FRMW_LOOP"
755 mkfs.ext4 "$ROOT_LOOP"
761 mkfs.ext4 "$ROOT_LOOP"
756
762
757 # Mount the temporary loop devices
763 # Mount the temporary loop devices
758 mkdir -p "$BUILDDIR/mount"
764 mkdir -p "$BUILDDIR/mount"
759 mount "$ROOT_LOOP" "$BUILDDIR/mount"
765 mount "$ROOT_LOOP" "$BUILDDIR/mount"
760
766
761 mkdir -p "$BUILDDIR/mount/boot/firmware"
767 mkdir -p "$BUILDDIR/mount/boot/firmware"
762 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
768 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
763
769
764 # Copy all files from the chroot to the loop device mount point directory
770 # Copy all files from the chroot to the loop device mount point directory
765 rsync -a "${R}/" "$BUILDDIR/mount/"
771 rsync -a "${R}/" "$BUILDDIR/mount/"
766
772
767 # Unmount all temporary loop devices and mount points
773 # Unmount all temporary loop devices and mount points
768 cleanup
774 cleanup
769
775
770 # Create block map file(s) of image(s)
776 # Create block map file(s) of image(s)
771 if [ "$ENABLE_SPLITFS" = true ] ; then
777 if [ "$ENABLE_SPLITFS" = true ] ; then
772 # Create block map files for "bmaptool"
778 # Create block map files for "bmaptool"
773 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
779 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
774 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
780 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
775
781
776 # Image was successfully created
782 # Image was successfully created
777 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
783 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
778 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
784 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
779 else
785 else
780 # Create block map file for "bmaptool"
786 # Create block map file for "bmaptool"
781 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
787 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
782
788
783 # Image was successfully created
789 # Image was successfully created
784 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
790 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
785
791
786 # Create qemu qcow2 image
792 # Create qemu qcow2 image
787 if [ "$ENABLE_QEMU" = true ] ; then
793 if [ "$ENABLE_QEMU" = true ] ; then
788 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
794 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
789 QEMU_SIZE=16G
795 QEMU_SIZE=16G
790
796
791 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
797 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
792 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
798 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
793
799
794 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
800 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
795 fi
801 fi
796 fi
802 fi
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant