##// END OF EJS Templates
Merge pull request #7 from drtyhlpr/master...
burnbabyburn -
r402:5e0c21732fc8 Fusion
parent child
Show More
@@ -0,0 +1,21
1 add table ip filter
2 add chain ip filter INPUT { type filter hook input priority 0; }
3 add chain ip filter FORWARD { type filter hook forward priority 0; }
4 add chain ip filter OUTPUT { type filter hook output priority 0; }
5 add chain ip filter TCP
6 add chain ip filter UDP
7 add chain ip filter SSH
8 add rule ip filter INPUT icmp type echo-request limit rate 30/minute burst 8 packets counter accept
9 add rule ip filter INPUT icmp type echo-request counter drop
10 add rule ip filter INPUT ct state related,established counter accept
11 add rule ip filter INPUT iifname lo counter accept
12 add rule ip filter INPUT ct state invalid counter drop
13 add rule ip filter INPUT tcp dport 22 ct state new counter jump SSH
14 # -t filter -A SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP
15 # -t filter -A SSH -m recent --name sshbf --rttl --rcheck --hitcount 20 --seconds 1800 -j DROP
16 # -t filter -A SSH -m recent --name sshbf --set -j ACCEPT
17 add rule ip filter INPUT ip protocol udp ct state new counter jump UDP
18 add rule ip filter INPUT tcp flags & fin|syn|rst|ack == syn ct state new counter jump TCP
19 add rule ip filter INPUT ip protocol udp counter reject
20 add rule ip filter INPUT ip protocol tcp counter reject with tcp reset
21 add rule ip filter INPUT counter reject with icmp type prot-unreachable
@@ -0,0 +1,24
1 add table ip6 filter
2 add chain ip6 filter INPUT { type filter hook input priority 0; }
3 add chain ip6 filter FORWARD { type filter hook forward priority 0; }
4 add chain ip6 filter OUTPUT { type filter hook output priority 0; }
5 add chain ip6 filter TCP
6 add chain ip6 filter UDP
7 add chain ip6 filter SSH
8 add rule ip6 filter INPUT rt type 0 counter drop
9 add rule ip6 filter OUTPUT rt type 0 counter drop
10 add rule ip6 filter FORWARD rt type 0 counter drop
11 add rule ip6 filter INPUT meta l4proto ipv6-icmp icmpv6 type echo-request limit rate 30/minute burst 8 packets counter accept
12 add rule ip6 filter INPUT meta l4proto ipv6-icmp icmpv6 type echo-request counter drop
13 add rule ip6 filter INPUT ct state related,established counter accept
14 add rule ip6 filter INPUT iifname lo counter accept
15 add rule ip6 filter INPUT ct state invalid counter drop
16 add rule ip6 filter INPUT tcp dport 22 ct state new counter jump SSH
17 # -t filter -A SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP
18 # -t filter -A SSH -m recent --name sshbf --rttl --rcheck --hitcount 20 --seconds 1800 -j DROP
19 # -t filter -A SSH -m recent --name sshbf --set -j ACCEPT
20 add rule ip6 filter INPUT meta l4proto udp ct state new counter jump UDP
21 add rule ip6 filter INPUT tcp flags & fin|syn|rst|ack == syn ct state new counter jump TCP
22 add rule ip6 filter INPUT meta l4proto udp counter reject with icmpv6 type admin-prohibited
23 add rule ip6 filter INPUT meta l4proto tcp counter reject with icmpv6 type admin-prohibited
24 add rule ip6 filter INPUT counter reject with icmpv6 type admin-prohibited
@@ -1,450 +1,450
1 1 ## 介绍
2 `rpi23-gen-image.sh` 是一个自动生成树莓派2/3系统镜像的脚本工具, 当前支持自动生成32位 armhf 架构的Debian, 发行版本`jessie`, `stretch``buster`. 树莓派3 64位镜像需要使用特定的配置参数 (```templates/rpi3-stretch-arm64-4.11.y```).
2 `rpi23-gen-image.sh` 是一个自动生成树莓派2/3系统镜像的脚本工具, 当前支持自动生成32位 armhf 架构的Debian, 发行版本`jessie`, `stretch``buster`. 树莓派3 64位镜像需要使用特定的配置参数 (```templates/rpi3-stretch-arm64-4.14.y```).
3 3
4 4 ## 构建环境所依赖的包
5 5 一定要安装好下列deb包, 他们是构建过程需要的核心包. 脚本会自动检查, 如果缺少,经用户确认后会自动安装.
6 6
7 7 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
8 8
9 9 推荐通过配置 `rpi23-gen-image.sh` 脚本编译安装最新的树莓派 Linux 内核, 对于树莓派3, 只能如此. 在构建系统上使用 ARM (armhf) 交叉编译工具链编译内核.
10 10
11 11 脚本已经在Debian Liux `jessie` 和`stretch` 构建系统下使用默认的 `crossbuild-essential-armhf` 工具链进行过测试. 获取更多信息请查看 [Debian 交叉工具链 Wiki](https://wiki.debian.org/CrossToolchains) .
12 12
13 13 如果使用Debian Linux `jessie` 构建系统, 先要添加交叉编译工具链的源 [Debian 交叉工具链仓库](http://emdebian.org/tools/debian/):
14 14
15 15 ```
16 16 echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/crosstools.list
17 17 sudo -u nobody wget -O - http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
18 18 dpkg --add-architecture armhf
19 19 apt-get update
20 20 ```
21 21
22 22 ## 命令行参数
23 23 脚本可以使用特定的命令行参数来允许或禁止操作系统的某些特性、服务和配置信息. 这些参数通过(简单)脚本变量传递给 `rpi23-gen-image.sh`. 不同于环境变量, (简单)脚本变量在调用`rpi23-gen-image.sh`的命令行前面定义.
24 24
25 25 ##### 命令行示例:
26 26 ```shell
27 27 ENABLE_UBOOT=true ./rpi23-gen-image.sh
28 28 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
29 29 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
30 30 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
31 31 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
32 32 ENABLE_MINBASE=true ./rpi23-gen-image.sh
33 33 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
34 34 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
35 35 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
36 36 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
37 37 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
38 38 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
39 39 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
40 40 ```
41 41
42 42 ## 参数模板文件
43 43 为了避免冗长的命令行参数以及存储感兴趣的参数配置, `rpi23-gen-image.sh` 支持所谓的参数模板文件 (`CONFIG_TEMPLATE`=template). 这些文本文件位于 `./templates` 目录, 文件中含有将会使用的配置参数. 新的配置模板文件会被添加到 `./templates` 目录.
44 44
45 45 ##### 命令行示例:
46 46 ```shell
47 47 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
48 48 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
49 49 ```
50 50
51 51 ## 支持的参数和设置
52 52 #### APT 设置:
53 53 ##### `APT_SERVER`="ftp.debian.org"
54 54 设置 Debian 仓库地址. 选择一个 [镜像站点](https://www.debian.org/mirror/list). 选一个近的镜像站点会加快镜像生成过程中所需文件的下载速度.
55 55
56 56 ##### `APT_PROXY`=""
57 57 设置代理服务器地址. 使用本地缓存代理, 比如 `apt-cacher-ng` 可以缩短镜像生成时间, 因为所需要的 Debian 包文件只需下载一次.
58 58
59 59 ##### `APT_INCLUDES`=""
60 60 生成镜像过程中最先由debootstrap程序自动安装的附加包, 逗号分隔.
61 61
62 62 ##### `APT_INCLUDES_LATE`=""
63 63 生成镜像过程中最初的debootstrap完成后, 需要的使用apt命令安装的附加包, 逗号分隔. 特别用在含有 pre-depend 依赖关系的包的, 其依赖关系在打包过程中debootstrap程序中无法正确处理.
64 64
65 65 ---
66 66
67 67 #### 通用系统设置:
68 68 ##### `RPI_MODEL`=2
69 69 指定树莓派型号. 当前支持树莓派 `2``3`. 设为 `3``BUILD_KERNEL` 自动设为true .
70 70
71 71 ##### `RELEASE`="jessie"
72 72 设置 Debian 发行版. 脚本当前支持 Debian 发行版 "jessie", "stretch" 和 "buster" 的自动生成. 设为`stretch` 或 `buster``BUILD_KERNEL` 自动设为true.
73 73
74 74 ##### `RELEASE_ARCH`="armhf"
75 75 设置期望的 Debian 发行架构.
76 76
77 77 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
78 78 设置主机名称. 建议所在的子网中主机名称是唯一的.
79 79
80 80 ##### `PASSWORD`="raspberry"
81 81 设置系统的 `root` 用户密码. **强烈**建议选择一个自定义密码 .
82 82
83 83 ##### `USER_PASSWORD`="raspberry"
84 84 设置由 `USER_NAME`=pi 参数创建的普通用户的密码. 如果 `ENABLE_USER`=false 则忽略. **强烈**建议选择一个自定义密码.
85 85
86 86 ##### `DEFLOCAL`="en_US.UTF-8"
87 87 设置系统默认 locale. 将来可以在运行的系统中执行 `dpkg-reconfigure locales` 命令更改此项设置. 设置这项脚本会自动安装 `locales`, `keyboard-configuration``console-setup` 三个包.
88 88
89 89 ##### `TIMEZONE`="Europe/Berlin"
90 90 设置系统默认时区. 可以在`/usr/share/zoneinfo/` 目录中找到全部可用时区. 将来可以在运行的系统中执行 `dpkg-reconfigure tzdata` 命令更改此项设置.
91 91
92 92 ##### `EXPANDROOT`=true
93 93 第一次运行时自动扩展根分区和文件系统.
94 94
95 95 ---
96 96
97 97 #### 键盘设置:
98 98 这些选项用来配置键盘布局文件 `/etc/default/keyboard` 影响控制台和X窗口. 将来可以在运行的系统中执行 `dpkg-reconfigure keyboard-configuration` 命令更改此项设置.
99 99
100 100 ##### `XKB_MODEL`=""
101 101 设置键盘类型, 大陆常见pc104.
102 102
103 103 ##### `XKB_LAYOUT`=""
104 104 设置键盘布局, 大陆常见us.
105 105
106 106 ##### `XKB_VARIANT`=""
107 107 设置键盘布局变种.
108 108
109 109 ##### `XKB_OPTIONS`=""
110 110 设置其它 XKB 配置选项.
111 111
112 112 ---
113 113
114 114 #### 网络设置 (动态):
115 115 设置网络为自动获取IP地址. 配置文件位于 `/etc/systemd/network/eth.network`. 在Debian `stretch`中, 默认位置更改为 `/lib/systemd/network`.
116 116
117 117 ##### `ENABLE_DHCP`=true
118 118 设置系统使用 DHCP 获取动态IP. 需要有一个 DHCP 服务器.
119 119
120 120 ---
121 121
122 122 #### 网络设置 (静态):
123 123 设置系统为手动配置IP地址. 配置文件位于 `/etc/systemd/network/eth.network`. 在Debian `stretch` 中, 默认位置更改为 `/lib/systemd/network`.
124 124 `ENABLE_DHCP`=false 时下面这些静态IP设置才起作用.
125 125
126 126 ##### `NET_ADDRESS`=""
127 127 设置静态 IPv4 或 IPv6, 使用CIDR "/"形式, 如 "192.169.0.3/24".
128 128
129 129 ##### `NET_GATEWAY`=""
130 130 设置默认网关的地址.
131 131
132 132 ##### `NET_DNS_1`=""
133 133 设置主域名服务器地址.
134 134
135 135 ##### `NET_DNS_2`=""
136 136 设置辅域名服务器地址.
137 137
138 138 ##### `NET_DNS_DOMAINS`=""
139 139 设置默认的域名搜索后缀, 当主机名称不是一个完整域名(FQDN)时使用.
140 140
141 141 ##### `NET_NTP_1`=""
142 142 设置主时间服务器地址.
143 143
144 144 ##### `NET_NTP_2`=""
145 145 设置辅时间服务器地址.
146 146
147 147 ---
148 148
149 149 #### 基本系统特性:
150 150 ##### `ENABLE_CONSOLE`=true
151 151 允许串行控制台接口. 没有连接显示器键盘的树莓派推荐打开, 此时如果网络无法连接至树莓派, 可以使用串行控制台连至系统.
152 152
153 153 ##### `ENABLE_I2C`=false
154 154 允许树莓派2/3的 I2C 接口. 请对照 [树莓派2/3 引脚示意图](https://elinux.org/RPi_Low-level_peripherals) 正确连接 GPIO 引脚.
155 155
156 156 ##### `ENABLE_SPI`=false
157 157 允许树莓派2/3的 SPI 接口. 请对照 [树莓派2/3 引脚示意图](https://elinux.org/RPi_Low-level_peripherals) 正确连接 GPIO 引脚.
158 158
159 159 ##### `ENABLE_IPV6`=true
160 160 允许 IPv6 . 通过 systemd-networkd 配置管理网络接口.
161 161
162 162 ##### `ENABLE_SSHD`=true
163 163 安装并且允许 OpenSSH 服务. 此服务默认禁止 `root` 用户远程登录. 使用普通用户 `pi` 远程登录然后使用 `su -``sudo` 来取得root权限.
164 164
165 165 ##### `ENABLE_NONFREE`=false
166 166 允许安装仓库中的 non-free 类的软件包. 需要安装闭源的固件, 二进制大对象 blob.
167 167
168 168 ##### `ENABLE_WIRELESS`=false
169 169 下载安装树莓派3无线接口所需要的闭源固件 二进制blob [树莓派3无线接口固件](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm). 如果 `RPI_MODEL` 不是 `3` 则忽略.
170 170
171 171 ##### `ENABLE_RSYSLOG`=true
172 172 如果设置为 false, 禁用并卸载 rsyslog, 则只能通过日志文件查看logs.
173 173
174 174 ##### `ENABLE_SOUND`=true
175 175 允许声卡并且安装 ALSA.
176 176
177 177 ##### `ENABLE_HWRANDOM`=true
178 178 允许硬件随机数发生器. 强随机数对大多数使用加密的网络通信是非常重要的. 推荐允许此设置.
179 179
180 180 ##### `ENABLE_MINGPU`=false
181 181 最小化显存 (16MB, no X), 目前无法完全禁用GPU.
182 182
183 183 ##### `ENABLE_DBUS`=true
184 184 安装并允许 D-Bus 消息总线. 虽然 systemd 可以在没有 D-bus的情况下工作, 但是推荐允许D-Bus.
185 185
186 186 ##### `ENABLE_XORG`=false
187 187 是否安装 Xorg, 开源 X11 系统.
188 188
189 189 ##### `ENABLE_WM`=""
190 190 安装用户指定的X Window 窗口管理器. 如果设置了`ENABLE_WM`, 系统确定所有被依赖的X11相关软件包都安装好了以后`ENABLE_XORG`会自动设置为true, `rpi23-gen-image.sh` 脚本已经通过下列窗口管理器的测试: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
191 191
192 192 ---
193 193
194 194 #### 高级系统特性:
195 195 ##### `ENABLE_MINBASE`=false
196 196 使用 debootstrap 脚本变量 `minbase`, 只含有必不可少的核心包和apt. 体积大约 65 MB.
197 197
198 198 ##### `ENABLE_REDUCE`=false
199 199 卸载包、删除文件以减小体积 详情查看 `REDUCE_*` 参数.
200 200
201 201 ##### `ENABLE_UBOOT`=false
202 202 使用 [U-Boot 引导器](https://git.denx.de/?p=u-boot.git;a=summary) 替代树莓派2/3 默认的第二阶段引导器(bootcode.bin). U-Boot 可以通过网络使用 BOOTP/TFTP 协议引导镜像文件.
203 203
204 204 ##### `UBOOTSRC_DIR`=""
205 205 存放已下载 [U-Boot 引导器源文件](https://git.denx.de/?p=u-boot.git;a=summary) 的目录(`u-boot`).
206 206
207 207 ##### `ENABLE_FBTURBO`=false
208 208 安装并且允许 [硬件加速的 Xorg 显卡驱动](https://github.com/ssvb/xf86-video-fbturbo) `fbturbo`. 当前仅支持窗口的移动和滚动的硬件加速.
209 209
210 210 ##### `FBTURBOSRC_DIR`=""
211 211 设置存放已下载的 [硬件加速的 Xorg 显卡驱动](https://github.com/ssvb/xf86-video-fbturbo) 的目录 (`xf86-video-fbturbo`) , 可以复制到chroot内配置、构建和安装.
212 212
213 213 ##### `ENABLE_IPTABLES`=false
214 214 允许 iptables 防火墙. 使用最简单的规则集: 允许所有出站连接;禁止除OpenSSH外的所有入站连接.
215 215
216 216 ##### `ENABLE_USER`=true
217 217 创建普通用户, 默认用户名`pi`, 默认密码raspberry. 可以使用 `USER_NAME`=user 更改默认用户名;使用 `USER_PASSWORD`=raspberry 更改默认密码.
218 218
219 219 ##### `USER_NAME`=pi
220 220 创建普通用户pi. 如果`ENABLE_USER`=false 此参数被忽略.
221 221
222 222 ##### `ENABLE_ROOT`=false
223 223 允许root用户登录, 需要设置 root 用户密码.
224 224
225 225 ##### `ENABLE_HARDNET`=false
226 226 允许加固 IPv4/IPv6 协议栈, 防止DoS攻击.
227 227
228 228 ##### `ENABLE_SPLITFS`=false
229 229 允许将根分区放在USB驱动器中. 将会生成两个镜像文件, 一个挂载为 `/boot/firmware` , 另一个挂载为 `/`.
230 230
231 231 ##### `CHROOT_SCRIPTS`=""
232 232 设置自定义脚本目录的路径, 该目录中的脚本在镜像文件构建完成之前在chroot中运行. 这个目录里的可执行文件按着字典序运行.
233 233
234 234 ##### `ENABLE_INITRAMFS`=false
235 235 创建 Linux 启动时加载的 initramfs .如果 `ENABLE_CRYPTFS`=true 那么 `ENABLE_INITRAMFS` 自动设为true . 如果 `BUILD_KERNEL`=false 此参数被忽略.
236 236
237 237 ##### `ENABLE_IFNAMES`=true
238 238 允许一致/可预测网络接口命名, 支持 Debian 发行版 `stretch``buster` .
239 239
240 240 ##### `DISABLE_UNDERVOLT_WARNINGS`=
241 241 禁止树莓派2/3 的低电压警告. 设为 `1` 禁止警告. 设为 `2` 额外允许低电压下的turbo增强模式.
242 242
243 243 ---
244 244
245 245 #### SSH 设置:
246 246 ##### `SSH_ENABLE_ROOT`=false
247 247 允许root通过密码验证方式远程登录系统. 如果没有修改默认密码, 这将是个巨大的安全隐患. `ENABLE_ROOT` 必须设为 `true`.
248 248
249 249 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
250 250 禁用SSH的密码验证方式, 只支持SSH (v2)的公钥认证.
251 251
252 252 ##### `SSH_LIMIT_USERS`=false
253 253 限制通过SSH远程登录的用户. 只允许由 `USER_NAME`=pi 参数创建的普通用户, 以及当 `SSH_ENABLE_ROOT`=true 时 root 用户远程登录. 如果使用的守护程序是 `dropbear` (通过 `REDUCE_SSHD`=true 设置) 则忽略此参数.
254 254
255 255 ##### `SSH_ROOT_PUB_KEY`=""
256 256 从指定文件(可包含多个公钥)添加 SSH (v2) 公钥到 `authorized_keys` 文件, 使得 `root` 用户可以使用SSH (v2)的公钥验证方式远程登录, 不支持SSH (v1). `ENABLE_ROOT` **和** `SSH_ENABLE_ROOT` 必须同时设为 `true`.
257 257
258 258 ##### `SSH_USER_PUB_KEY`=""
259 259 从指定文件(可包含多个公钥)添加 SSH (v2) 公钥到 `authorized_keys` 文件, 使得由 `USER_NAME`=pi 参数创建的普通用户可以使用SSH (v2)的公钥验证方式远程登录, 不支持SSH (v1).
260 260
261 261 ---
262 262
263 263 #### 内核编译:
264 264 ##### `BUILD_KERNEL`=false
265 265 构建安装最新的树莓派 2/3 Linux 内核, 当前只支持默认内核配置. 如果设置为树莓派`3`那么自动设置`BUILD_KERNEL`=true .
266 266
267 267 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
268 268 设置交叉编译器.
269 269
270 270 ##### `KERNEL_ARCH`="arm"
271 271 设置内核架构.
272 272
273 273 ##### `KERNEL_IMAGE`="kernel7.img"
274 274 内核镜像名称, 如果没有设置, 编译32位内核默认“kernel7.img” 64位内核默认 "kernel8.img".
275 275
276 276 ##### `KERNEL_BRANCH`=""
277 277 GIT里的树莓派内核源代码分支名称, 默认使用当前默认分支.
278 278
279 279 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
280 280 设置构建系统中的QEMU程序位置. 如果没有设置, 32位内核默认 “/usr/bin/qemu-arm-static” 64位内核默认 "/usr/bin/qemu-aarch64-static".
281 281
282 282 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
283 283 设置编译内核的默认配置. 如果没有设置, 32位内核默认"bcm2709_defconfig" 64位内核默认"bcmrpi3\_defconfig".
284 284
285 285 ##### `KERNEL_REDUCE`=false
286 286 缩小内核体积, 移除不想要的设备驱动、网络驱动和文件系统驱动 (实验性质).
287 287
288 288 ##### `KERNEL_THREADS`=1
289 289 编译内核时的并发线程数量. 如果使用默认设置, 系统会自动检测CPU的内核数量, 设置线程数量, 加速内核编译.
290 290
291 291 ##### `KERNEL_HEADERS`=true
292 292 安装内核相应的头文件.
293 293
294 294 ##### `KERNEL_MENUCONFIG`=false
295 295 运行`make menuconfig`使用菜单界面配置内核. 退出配置菜单后脚本继续运行.
296 296
297 297 ##### `KERNEL_REMOVESRC`=true
298 298 编译安装完成后, 删掉内核源代码, 产生的镜像不含内核源代码.
299 299
300 300 ##### `KERNELSRC_DIR`=""
301 301 已下载好的 [Github上的树莓派官方内核](https://github.com/raspberrypi/linux) 源码所在目录 (`linux`) 的路径, 可以复制到chroot内配置、构建和安装.
302 302
303 303 ##### `KERNELSRC_CLEAN`=false
304 304 当`KERNELSRC_DIR`被复制到 chroot 之后开始编译之前(使用 `make mrproper`)清理内核源代码. 如果 `KERNELSRC_DIR` 没有设置或者 `KERNELSRC_PREBUILT`=true时忽略此设置.
305 305
306 306 ##### `KERNELSRC_CONFIG`=true
307 307 在编译前使用 `make bcm2709_defconfig` (也可以选择 `make menuconfig`) 配置内核源代码. 如果`KERNELSRC_DIR`指定的源码存放目录不存在,这个参数自动设为 `true`. 如果 `KERNELSRC_PREBUILT`=true 忽略此参数.
308 308
309 309 ##### `KERNELSRC_USRCONFIG`=""
310 310 复制自己的配置文件到内核的 `.config`. 如果 `KERNEL_MENUCONFIG`=true 拷贝完成后自动运行 make menuconfig.
311 311
312 312 ##### `KERNELSRC_PREBUILT`=false
313 313 如果这个参数设为true 表示内核源代码目录中包含成功交叉编译好的内核. 忽略 `KERNELSRC_CLEAN`, `KERNELSRC_CONFIG`, `KERNELSRC_USRCONFIG` and `KERNEL_MENUCONFIG` 这四个参数,不再执行交叉编译操作.
314 314
315 315 ##### `RPI_FIRMWARE_DIR`=""
316 316 指定目录 (`firmware`) 含有已经从 [Github上的树莓派官方固件](https://github.com/raspberrypi/firmware)下载到本地的固件. 默认直接从网上下载最新的固件.
317 317
318 318 ---
319 319
320 320 #### 缩小体积:
321 321 如果 `ENABLE_REDUCE`=false 则忽略下列参数.
322 322
323 323 ##### `REDUCE_APT`=true
324 324 配置 APT,压缩仓库文件列表,不缓存下载的包文件.
325 325
326 326 ##### `REDUCE_DOC`=true
327 327 移除所有的doc文档文件(harsh). 配置 APT, 将来使用`apt-get`安装deb包时不包括doc文件.
328 328
329 329 ##### `REDUCE_MAN`=true
330 330 移除所有的man手册页和info文件 (harsh). 配置 APT, 将来使用`apt-get`安装deb包时不包括man手册页.
331 331
332 332 ##### `REDUCE_VIM`=false
333 333 使用vim的小型克隆 `levee` 替代 `vim-tiny`.
334 334
335 335 ##### `REDUCE_BASH`=false
336 336 使用 `dash` 代替 `bash` (实验性质).
337 337
338 338 ##### `REDUCE_HWDB`=true
339 339 移除与 PCI 相关的 hwdb 文件 (实验性质).
340 340
341 341 ##### `REDUCE_SSHD`=true
342 342 使用`dropbear`代替 `openssh-server`.
343 343
344 344 ##### `REDUCE_LOCALE`=true
345 345 移除所有的 `locale` 本地化文件.
346 346
347 347 ---
348 348
349 349 #### 加密根分区:
350 350 ##### `ENABLE_CRYPTFS`=false
351 351 使用dm-crypt进行全盘加密. 创建一个 LUKS 加密根分区 (加密方法 aes-xts-plain64:sha512) 并生成所需要的 initramfs. /boot 目录不会被加密. 当`BUILD_KERNEL`=false时忽略此参数. `ENABLE_CRYPTFS` 这个参数当前是实验性质的. SSH-to-initramfs 当前不支持,正在进行中.
352 352
353 353 ##### `CRYPTFS_PASSWORD`=""
354 354 设置根分区的加密密码. 如果 `ENABLE_CRYPTFS`=true,请务必设置此参数.
355 355
356 356 ##### `CRYPTFS_MAPPING`="secure"
357 357 设置device-mapper映射名称.
358 358
359 359 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
360 360 加密算法. 推荐 `aes-xts*`加密法.
361 361
362 362 ##### `CRYPTFS_XTSKEYSIZE`=512
363 363 设置密钥长度,8的倍数,以bit为单位.
364 364
365 365 ---
366 366
367 367 #### Build settings构建设置:
368 368 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
369 369 设置产生镜像的目录.
370 370
371 371 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
372 372 设置镜像文件名. 如果`ENABLE_SPLITFS`=false则文件名$IMAGE_NAME.img 如果`ENABLE_SPLITFS`=true则文件名$IMAGE_NAME-frmw.img 和 $IMAGE_NAME-root.img. 如果没有设置 `KERNEL_BRANCH` 则使用 "CURRENT" .
373 373
374 374 ## 理解脚本
375 375 制作镜像的每个阶段所实现的功能都由各自的脚本完成, 位于 `bootstrap.d` 目录. 按着字典序执行:
376 376
377 377 | 脚本 | 说明 |
378 378 | --- | --- |
379 379 | `10-bootstrap.sh` | 生成基本系统 |
380 380 | `11-apt.sh` | 设置 APT 仓库源 |
381 381 | `12-locale.sh` | 设置 Locales 和 keyboard |
382 382 | `13-kernel.sh` | 编译安装树莓派 2/3 内核 |
383 383 | `14-fstab.sh` | 设置 fstab 和 initramfs |
384 384 | `15-rpi-config.sh` | 设置 RPi2/3 config and cmdline |
385 385 | `20-networking.sh` | 设置网络 |
386 386 | `21-firewall.sh` | 设置防火墙 |
387 387 | `30-security.sh` | 设置用户以及安全相关 |
388 388 | `31-logging.sh` | 设置日志 |
389 389 | `32-sshd.sh` | 设置 SSH 和公钥 |
390 390 | `41-uboot.sh` | 编译设置 U-Boot |
391 391 | `42-fbturbo.sh` | 编译设置 fbturbo Xorg 驱动 |
392 392 | `50-firstboot.sh` | 首次启动执行的任务 |
393 393 | `99-reduce.sh` | 缩小体积 |
394 394
395 395 所有需要拷贝到镜像文件的配置文件都位于 `files` 目录. 最好不要手动更改这些配置文件.
396 396
397 397 | 目录 | 说明 |
398 398 | --- | --- |
399 399 | `apt` | APT 管理配置文件 |
400 400 | `boot` | 引导文件 树莓派2/3配置文件 |
401 401 | `dpkg` | 包管理配置文件 |
402 402 | `etc` | 配置文件以及 rc 启动脚本 |
403 403 | `firstboot` | 首次引导执行的脚本 |
404 404 | `initramfs` | Initramfs 脚本 |
405 405 | `iptables` | 防火墙配置文件 |
406 406 | `locales` | Locales 配置 |
407 407 | `modules` | 内核模块配置 |
408 408 | `mount` | Fstab 配置 |
409 409 | `network` | 网络配置文件 |
410 410 | `sysctl.d` | 交换文件以及IP协议加固配置文件 |
411 411 | `xorg` | fbturbo Xorg 驱动配置 |
412 412
413 413 ## 自定义包和脚本
414 414 `packages` 目录里放置自定义deb包, 比如系统仓库里没有的软件.在安装完系统仓库中的包之后安装. 自定义包所依赖的deb包会自动从系统仓库下载. 不要把自定义包添加到 `APT_INCLUDES` 参数中.
415 415 `custom.d` 目录中的脚本会在其它安装都完成后, 创建镜像文件之前执行.
416 416
417 417 ## 记录镜像产生过程的信息
418 418 所有镜像产生过程的信息、`rpi23-gen-image.sh` 脚本执行的命令都可以通过shell的 `script` 命令保存到日志文件中:
419 419
420 420 ```shell
421 421 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
422 422 ```
423 423
424 424 ## 烧录镜像文件
425 425 `rpi23-gen-image.sh` 所生成的镜像文件需要使用 `bmaptool``dd` 烧录到 microSD 卡. `bmaptool` 速度快比 `dd` 聪明.
426 426
427 427 ##### 烧录示例:
428 428 ```shell
429 429 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie.img /dev/mmcblk0
430 430 dd bs=4M if=./images/jessie/2017-01-23-rpi3-jessie.img of=/dev/mmcblk0
431 431 ```
432 432 如果设置过 `ENABLE_SPLITFS`, 烧录 `-frmw` 文件到 microSD 卡, 烧录 `-root` 文件到 USB 驱动器:
433 433 ```shell
434 434 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-frmw.img /dev/mmcblk0
435 435 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-root.img /dev/sdc
436 436 ```
437 437 ## 每周镜像
438 438 这些镜像由JRWR'S I/O PORT提供, 每周日午夜UTC 0点编译!
439 439 * [Debian Stretch Raspberry Pi2/3 周构建镜像](https://jrwr.io/doku.php?id=projects:debianpi)
440 440
441 441 ## External links and references外部链接, 各种资源
442 442 * [Debian 全世界镜像列表](https://www.debian.org/mirror/list)
443 443 * [Debian 树莓派 2 Wiki](https://wiki.debian.org/RaspberryPi2)
444 444 * [Debian 交叉工具链 Wiki](https://wiki.debian.org/CrossToolchains)
445 445 * [Github上的树莓派官方固件](https://github.com/raspberrypi/firmware)
446 446 * [Github上的树莓派官方内核](https://github.com/raspberrypi/linux)
447 447 * [U-BOOT git 仓库](https://git.denx.de/?p=u-boot.git;a=summary)
448 448 * [Xorg DDX fbturbo驱动](https://github.com/ssvb/xf86-video-fbturbo)
449 449 * [树莓派3无线接口固件](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
450 450 * [Collabora 树莓派2预编译内核](https://repositories.collabora.co.uk/debian/)
@@ -1,490 +1,490
1 1 # rpi23-gen-image
2 2 ## Introduction
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.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.14.y```).
4 4
5 5 ## Build dependencies
6 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 8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
9 9
10 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 12 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
13 13
14 14 ## Command-line parameters
15 15 The script accepts certain command-line parameters to enable or disable specific OS features, services and configuration settings. These parameters are passed to the `rpi23-gen-image.sh` script via (simple) shell-variables. Unlike environment shell-variables (simple) shell-variables are defined at the beginning of the command-line call of the `rpi23-gen-image.sh` script.
16 16
17 17 ##### Command-line examples:
18 18 ```shell
19 19 ENABLE_UBOOT=true ./rpi23-gen-image.sh
20 20 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
21 21 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
22 22 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
23 23 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
24 24 ENABLE_MINBASE=true ./rpi23-gen-image.sh
25 25 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
26 26 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
27 27 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
28 28 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
29 29 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
30 30 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
31 31 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
32 32 ```
33 33
34 34 ## Configuration template files
35 35 To avoid long lists of command-line parameters and to help to store the favourite parameter configurations the `rpi23-gen-image.sh` script supports so called configuration template files (`CONFIG_TEMPLATE`=template). These are simple text files located in the `./templates` directory that contain the list of configuration parameters that will be used. New configuration template files can be added to the `./templates` directory.
36 36
37 37 ##### Command-line examples:
38 38 ```shell
39 39 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
40 40 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
41 41 ```
42 42
43 43 ## Supported parameters and settings
44 44 #### APT settings:
45 45 ##### `APT_SERVER`="ftp.debian.org"
46 46 Set Debian packages server address. Choose a server from the list of Debian worldwide [mirror sites](https://www.debian.org/mirror/list). Using a nearby server will probably speed-up all required downloads within the bootstrapping process.
47 47
48 48 ##### `APT_PROXY`=""
49 49 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will speed-up the bootstrapping process because all required Debian packages will only be downloaded from the Debian mirror site once. If `apt-cacher-ng` is running on default `http://127.0.0.1:3142` it is autodetected and you don't need to set this.
50 50
51 51 ##### `APT_INCLUDES`=""
52 52 A comma separated list of additional packages to be installed by debootstrap during bootstrapping.
53 53
54 54 ##### `APT_INCLUDES_LATE`=""
55 55 A comma separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
56 56
57 57 ---
58 58
59 59 #### General system settings:
60 60 ##### `SET_ARCH`=32
61 61 Set Architecture to default 32bit. If you want to to compile 64bit (RPI3 or RPI3+) set it to `64`. This option will set every needed crosscompiler or boeard specific option for a successful build.
62 62 If you want to change e.g. cross-compiler -> Templates always override defaults
63 63
64 64 ##### `RPI_MODEL`=2
65 65 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
66 66 `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
67 67 `1` = Used for Pi 1 model A and B
68 68 `1P` = Used for Pi 1 model B+ and A+
69 69 `2` = Used for Pi 2 model B
70 70 `3` = Used for Pi 3 model B
71 71 `3P` = Used for Pi 3 model B+
72 72 `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
73 73
74 74 ##### `RELEASE`="buster"
75 75 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
76 76
77 77 ##### `RELEASE_ARCH`="armhf"
78 78 Set the desired Debian release architecture.
79 79
80 80 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
81 81 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
82 82
83 83 ##### `PASSWORD`="raspberry"
84 84 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
85 85
86 86 ##### `USER_PASSWORD`="raspberry"
87 87 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
88 88
89 89 ##### `DEFLOCAL`="en_US.UTF-8"
90 90 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
91 91
92 92 ##### `TIMEZONE`="Europe/Berlin"
93 93 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
94 94
95 95 ##### `EXPANDROOT`=true
96 96 Expand the root partition and filesystem automatically on first boot.
97 97
98 98 ##### `ENABLE_QEMU`=false
99 99 Generate kernel (`vexpress_defconfig`), file system image (`qcow2`) and DTB files that can be used for QEMU full system emulation (`vexpress-A15`). The output files are stored in the `$(pwd)/images/qemu` directory. You can find more information about running the generated image in the QEMU section of this readme file.
100 100
101 101 ---
102 102
103 103 #### Keyboard settings:
104 104 These options are used to configure keyboard layout in `/etc/default/keyboard` for console and Xorg. These settings can also be changed inside the running OS using the `dpkg-reconfigure keyboard-configuration` command.
105 105
106 106 ##### `XKB_MODEL`=""
107 107 Set the name of the model of your keyboard type.
108 108
109 109 ##### `XKB_LAYOUT`=""
110 110 Set the supported keyboard layout(s).
111 111
112 112 ##### `XKB_VARIANT`=""
113 113 Set the supported variant(s) of the keyboard layout(s).
114 114
115 115 ##### `XKB_OPTIONS`=""
116 116 Set extra xkb configuration options.
117 117
118 118 ---
119 119
120 120 #### Networking settings (DHCP):
121 121 This parameter is used to set up networking auto configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
122 122
123 123 ##### `ENABLE_DHCP`=true
124 124 Set the system to use DHCP. This requires an DHCP server.
125 125
126 126 ---
127 127
128 128 #### Networking settings (static):
129 129 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
130 130
131 131 ##### `NET_ADDRESS`=""
132 132 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
133 133
134 134 ##### `NET_GATEWAY`=""
135 135 Set the IP address for the default gateway.
136 136
137 137 ##### `NET_DNS_1`=""
138 138 Set the IP address for the first DNS server.
139 139
140 140 ##### `NET_DNS_2`=""
141 141 Set the IP address for the second DNS server.
142 142
143 143 ##### `NET_DNS_DOMAINS`=""
144 144 Set the default DNS search domains to use for non fully qualified host names.
145 145
146 146 ##### `NET_NTP_1`=""
147 147 Set the IP address for the first NTP server.
148 148
149 149 ##### `NET_NTP_2`=""
150 150 Set the IP address for the second NTP server.
151 151
152 152 ---
153 153
154 154 #### Basic system features:
155 155 ##### `ENABLE_CONSOLE`=true
156 156 Enable serial console interface. Recommended if no monitor or keyboard is connected to the RPi2/3. In case of problems fe. if the network (auto) configuration failed - the serial console can be used to access the system.
157 157
158 158 ##### `ENABLE_I2C`=false
159 159 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.
160 160
161 161 ##### `ENABLE_SPI`=false
162 162 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.
163 163
164 164 ##### `ENABLE_IPV6`=true
165 165 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
166 166
167 167 ##### `ENABLE_SSHD`=true
168 168 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.
169 169
170 170 ##### `ENABLE_NONFREE`=false
171 171 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.
172 172
173 173 ##### `ENABLE_WIRELESS`=false
174 174 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`.
175 175
176 176 ##### `ENABLE_RSYSLOG`=true
177 177 If set to false, disable and uninstall rsyslog (so logs will be available only
178 178 in journal files)
179 179
180 180 ##### `ENABLE_SOUND`=true
181 181 Enable sound hardware and install Advanced Linux Sound Architecture.
182 182
183 183 ##### `ENABLE_HWRANDOM`=true
184 184 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
185 185
186 186 ##### `ENABLE_MINGPU`=false
187 187 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
188 188
189 189 ##### `ENABLE_DBUS`=true
190 190 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
191 191
192 192 ##### `ENABLE_XORG`=false
193 193 Install Xorg open-source X Window System.
194 194
195 195 ##### `ENABLE_WM`=""
196 196 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`.
197 197
198 198 ##### `ENABLE_SYSVINIT`=false
199 199 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
200 200
201 201 ---
202 202
203 203 #### Advanced system features:
204 204 ##### `ENABLE_MINBASE`=false
205 205 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
206 206
207 207 ##### `ENABLE_REDUCE`=false
208 208 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
209 209
210 210 ##### `ENABLE_UBOOT`=false
211 211 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.
212 212
213 213 ##### `UBOOTSRC_DIR`=""
214 214 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.
215 215
216 216 ##### `ENABLE_FBTURBO`=false
217 217 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.
218 218
219 219 ##### `FBTURBOSRC_DIR`=""
220 220 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.
221 221
222 222 ##### `ENABLE_VIDEOCORE`=false
223 223 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.
224 224
225 225 ##### `VIDEOCORESRC_DIR`=""
226 226 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.
227 227
228 228 ##### `ENABLE_IPTABLES`=false
229 229 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
230 230
231 231 ##### `ENABLE_USER`=true
232 232 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
233 233
234 234 ##### `USER_NAME`=pi
235 235 Non-root user to create. Ignored if `ENABLE_USER`=false
236 236
237 237 ##### `ENABLE_ROOT`=false
238 238 Set root user password so root login will be enabled
239 239
240 240 ##### `ENABLE_HARDNET`=false
241 241 Enable IPv4/IPv6 network stack hardening settings.
242 242
243 243 ##### `ENABLE_SPLITFS`=false
244 244 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
245 245
246 246 ##### `CHROOT_SCRIPTS`=""
247 247 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.
248 248
249 249 ##### `ENABLE_INITRAMFS`=false
250 250 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.
251 251
252 252 ##### `ENABLE_IFNAMES`=true
253 253 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
254 254
255 255 ##### `DISABLE_UNDERVOLT_WARNINGS`=
256 256 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.
257 257
258 258 ---
259 259
260 260 #### SSH settings:
261 261 ##### `SSH_ENABLE_ROOT`=false
262 262 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`.
263 263
264 264 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
265 265 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
266 266
267 267 ##### `SSH_LIMIT_USERS`=false
268 268 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).
269 269
270 270 ##### `SSH_ROOT_PUB_KEY`=""
271 271 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`.
272 272
273 273 ##### `SSH_USER_PUB_KEY`=""
274 274 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.
275 275
276 276 ---
277 277
278 278 #### Kernel compilation:
279 279 ##### `BUILD_KERNEL`=true
280 280 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used.
281 281
282 282 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
283 283 This sets the cross compile enviornment for the compiler.
284 284
285 285 ##### `KERNEL_ARCH`="arm"
286 286 This sets the kernel architecture for the compiler.
287 287
288 288 ##### `KERNEL_IMAGE`="kernel7.img"
289 289 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.
290 290
291 291 ##### `KERNEL_BRANCH`=""
292 292 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
293 293
294 294 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
295 295 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.
296 296
297 297 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
298 298 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
299 299
300 300 ##### `KERNEL_REDUCE`=false
301 301 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
302 302
303 303 ##### `KERNEL_THREADS`=1
304 304 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.
305 305
306 306 ##### `KERNEL_HEADERS`=true
307 307 Install kernel headers with built kernel.
308 308
309 309 ##### `KERNEL_MENUCONFIG`=false
310 310 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
311 311
312 312 ##### `KERNEL_OLDDEFCONFIG`=false
313 313 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
314 314
315 315 ##### `KERNEL_CCACHE`=false
316 316 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
317 317
318 318 ##### `KERNEL_REMOVESRC`=true
319 319 Remove all kernel sources from the generated OS image after it was built and installed.
320 320
321 321 ##### `KERNELSRC_DIR`=""
322 322 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.
323 323
324 324 ##### `KERNELSRC_CLEAN`=false
325 325 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.
326 326
327 327 ##### `KERNELSRC_CONFIG`=true
328 328 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.
329 329
330 330 ##### `KERNELSRC_USRCONFIG`=""
331 331 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
332 332
333 333 ##### `KERNELSRC_PREBUILT`=false
334 334 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.
335 335
336 336 ##### `RPI_FIRMWARE_DIR`=""
337 337 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.
338 338
339 339 ---
340 340
341 341 #### Reduce disk usage:
342 342 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
343 343
344 344 ##### `REDUCE_APT`=true
345 345 Configure APT to use compressed package repository lists and no package caching files.
346 346
347 347 ##### `REDUCE_DOC`=true
348 348 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
349 349
350 350 ##### `REDUCE_MAN`=true
351 351 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
352 352
353 353 ##### `REDUCE_VIM`=false
354 354 Replace `vim-tiny` package by `levee` a tiny vim clone.
355 355
356 356 ##### `REDUCE_BASH`=false
357 357 Remove `bash` package and switch to `dash` shell (experimental).
358 358
359 359 ##### `REDUCE_HWDB`=true
360 360 Remove PCI related hwdb files (experimental).
361 361
362 362 ##### `REDUCE_SSHD`=true
363 363 Replace `openssh-server` with `dropbear`.
364 364
365 365 ##### `REDUCE_LOCALE`=true
366 366 Remove all `locale` translation files.
367 367
368 368 ---
369 369
370 370 #### Encrypted root partition:
371 371 ##### `ENABLE_CRYPTFS`=false
372 372 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.
373 373
374 374 ##### `CRYPTFS_PASSWORD`=""
375 375 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
376 376
377 377 ##### `CRYPTFS_MAPPING`="secure"
378 378 Set name of dm-crypt managed device-mapper mapping.
379 379
380 380 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
381 381 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
382 382
383 383 ##### `CRYPTFS_XTSKEYSIZE`=512
384 384 Sets key size in bits. The argument has to be a multiple of 8.
385 385
386 386 ---
387 387
388 388 #### Build settings:
389 389 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
390 390 Set a path to a working directory used by the script to generate an image.
391 391
392 392 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
393 393 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.
394 394
395 395 ## Understanding the script
396 396 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:
397 397
398 398 | Script | Description |
399 399 | --- | --- |
400 400 | `10-bootstrap.sh` | Debootstrap basic system |
401 401 | `11-apt.sh` | Setup APT repositories |
402 402 | `12-locale.sh` | Setup Locales and keyboard settings |
403 403 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
404 404 | `14-fstab.sh` | Setup fstab and initramfs |
405 405 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
406 406 | `20-networking.sh` | Setup Networking |
407 407 | `21-firewall.sh` | Setup Firewall |
408 408 | `30-security.sh` | Setup Users and Security settings |
409 409 | `31-logging.sh` | Setup Logging |
410 410 | `32-sshd.sh` | Setup SSH and public keys |
411 411 | `41-uboot.sh` | Build and Setup U-Boot |
412 412 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
413 413 | `50-firstboot.sh` | First boot actions |
414 414 | `99-reduce.sh` | Reduce the disk space usage |
415 415
416 416 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.
417 417
418 418 | Directory | Description |
419 419 | --- | --- |
420 420 | `apt` | APT management configuration files |
421 421 | `boot` | Boot and RPi2/3 configuration files |
422 422 | `dpkg` | Package Manager configuration |
423 423 | `etc` | Configuration files and rc scripts |
424 424 | `firstboot` | Scripts that get executed on first boot |
425 425 | `initramfs` | Initramfs scripts |
426 426 | `iptables` | Firewall configuration files |
427 427 | `locales` | Locales configuration |
428 428 | `modules` | Kernel Modules configuration |
429 429 | `mount` | Fstab configuration |
430 430 | `network` | Networking configuration files |
431 431 | `sysctl.d` | Swapping and Network Hardening configuration |
432 432 | `xorg` | fbturbo Xorg driver configuration |
433 433
434 434 ## Custom packages and scripts
435 435 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`.
436 436
437 437 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
438 438
439 439 ## Logging of the bootstrapping process
440 440 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:
441 441
442 442 ```shell
443 443 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
444 444 ```
445 445
446 446 ## Flashing the image file
447 447 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`.
448 448
449 449 ##### Flashing examples:
450 450 ```shell
451 451 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
452 452 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
453 453 ```
454 454 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
455 455 ```shell
456 456 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
457 457 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
458 458 ```
459 459
460 460 ## QEMU emulation
461 461 Start QEMU full system emulation:
462 462 ```shell
463 463 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"
464 464 ```
465 465
466 466 Start QEMU full system emulation and output to console:
467 467 ```shell
468 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=ttyAMA0,115200 init=/bin/systemd" -serial stdio
469 469 ```
470 470
471 471 Start QEMU full system emulation with SMP and output to console:
472 472 ```shell
473 473 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
474 474 ```
475 475
476 476 Start QEMU full system emulation with cryptfs, initramfs and output to console:
477 477 ```shell
478 478 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
479 479 ```
480 480
481 481 ## External links and references
482 482 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
483 483 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
484 484 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
485 485 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
486 486 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
487 487 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
488 488 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
489 489 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
490 490 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,39 +1,33
1 1 #
2 2 # Setup APT repositories
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Install and setup APT proxy configuration
9 9 if [ -z "$APT_PROXY" ] ; then
10 10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
12 12 fi
13 13
14 if [ "$BUILD_KERNEL" = false ] ; then
15 echo "Downloading precompiled kernel"
16 echo "error: not configured"
17 exit 1;
18 # BUILD_KERNEL=true
19 else
20 echo "No precompiled kernel repositories were added"
21 fi
22
23 14 # Upgrade package index and update all installed packages and changed dependencies
24 15 chroot_exec apt-get -qq -y update
25 16 chroot_exec apt-get -qq -y -u dist-upgrade
26 17
18 # Install additional packages
27 19 if [ "$APT_INCLUDES_LATE" ] ; then
28 20 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
29 21 fi
30 22
23 # Install Debian custom packages
31 24 if [ -d packages ] ; then
32 25 for package in packages/*.deb ; do
33 26 cp "$package" "${R}"/tmp
34 27 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
35 28 done
36 29 fi
30
37 31 chroot_exec apt-get -qq -y -f install
38 32
39 33 chroot_exec apt-get -qq -y check
@@ -1,189 +1,174
1 1 #
2 2 # Setup RPi2/3 config and cmdline
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 if [ "$BUILD_KERNEL" = true ] ; then
9 9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
10 10 # Install boot binaries from local directory
11 11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
12 12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
13 13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
14 14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
15 15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
16 16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
17 17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
18 18 else
19 19 # Create temporary directory for boot binaries
20 20 temp_dir=$(as_nobody mktemp -d)
21 21
22 22 # Install latest boot binaries from raspberry/firmware github
23 23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
24 24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
25 25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
26 26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
27 27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
28 28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
29 29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
30 30
31 31 # Move downloaded boot binaries
32 32 mv "${temp_dir}/"* "${BOOT_DIR}/"
33 33
34 34 # Remove temporary directory for boot binaries
35 35 rm -fr "${temp_dir}"
36 36
37 37 # Set permissions of the boot binaries
38 38 chown -R root:root "${BOOT_DIR}"
39 39 chmod -R 600 "${BOOT_DIR}"
40 40 fi
41 41 fi
42 42
43 43 # Setup firmware boot cmdline
44 44 if [ "$ENABLE_SPLITFS" = true ] ; then
45 45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
46 46 else
47 47 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
48 48 fi
49 49
50 50 # Add encrypted root partition to cmdline.txt
51 51 if [ "$ENABLE_CRYPTFS" = true ] ; then
52 52 if [ "$ENABLE_SPLITFS" = true ] ; then
53 53 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
54 54 else
55 55 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
56 56 fi
57 57 fi
58 58
59 59 # Add serial console support
60 60 if [ "$ENABLE_CONSOLE" = true ] ; then
61 61 CMDLINE="${CMDLINE} console=ttyAMA0,115200 kgdboc=ttyAMA0,115200"
62 62 fi
63 63
64 64 # Remove IPv6 networking support
65 65 if [ "$ENABLE_IPV6" = false ] ; then
66 66 CMDLINE="${CMDLINE} ipv6.disable=1"
67 67 fi
68 68
69 69 # Automatically assign predictable network interface names
70 70 if [ "$ENABLE_IFNAMES" = false ] ; then
71 71 CMDLINE="${CMDLINE} net.ifnames=0"
72 72 else
73 73 CMDLINE="${CMDLINE} net.ifnames=1"
74 74 fi
75 75
76 76 # Install firmware boot cmdline
77 77 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
78 78
79 79 # Install firmware config
80 80 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
81 81
82 82 # Setup minimal GPU memory allocation size: 16MB (no X)
83 83 if [ "$ENABLE_MINGPU" = true ] ; then
84 84 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
85 85 fi
86 86
87 87 # Setup boot with initramfs
88 88 if [ "$ENABLE_INITRAMFS" = true ] ; then
89 89 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
90 90 fi
91 91
92 92 # Disable RPi3 Bluetooth and restore ttyAMA0 serial device
93 93 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
94 94 if [ "$ENABLE_CONSOLE" = true ] && [ "$ENABLE_UBOOT" = false ] ; then
95 95 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
96 96 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
97 97 else
98 98 # Create temporary directory for Bluetooth sources
99 99 temp_dir=$(as_nobody mktemp -d)
100 100
101 101 # Fetch Bluetooth sources
102 102 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
103 103
104 104 # Copy downloaded sources
105 105 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
106 106
107 107 # Set permissions
108 108 chown -R root:root "${R}/tmp/pi-bluetooth"
109 109
110 # Install files to chroot
111 110 # Install tools
112 111 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
113 112 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
114 113
115 114 # Install bluetooth udev rule
116 115 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
117 #aur
118 #install_readonly "${R}/tmp/pi-bluetooth/50-bluetooth-hci-auto-poweron.rules" "${ETC_DIR}/udev/rules.d/50-bluetooth-hci-auto-poweron.rules"
119 116
120 117 # Install Firmware Flash file and apropiate licence
121 118 mkdir "${ETC_DIR}/firmware/"
122 119
123 #aur https://aur.archlinux.org/packages/pi-bluetooth/
124 #install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${ETC_DIR}/firmware/LICENCE.broadcom_bcm43xx"
125 #install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${ETC_DIR}/firmware/BCM43430A1.hcd"
126
127 120 wget -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
128 121 wget -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
129 122
130 # Install systemd service for bluetooth
131 #install_readonly "${R}/tmp/pi-bluetooth/brcm43438.service" "${ETC_DIR}/systemd/system/brcm43438.service"
132
133 # Remove temporary directory
134 #rm -fr "${temp_dir}"
135
136 123 # Get /dev/serial back for compability
137 # Raspberry-sys-mod package
138 124 wget -O "${ETC_DIR}/udev/rules.d/99-com.rules" https://raw.githubusercontent.com/RPi-Distro/raspberrypi-sys-mods/master/etc.armhf/udev/rules.d/99-com.rules
139
140 125 fi
141 126 fi
142 127
143 128 # Create firmware configuration and cmdline symlinks
144 129 ln -sf firmware/config.txt "${R}/boot/config.txt"
145 130 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
146 131
147 132 # Install and setup kernel modules to load at boot
148 133 mkdir -p "${LIB_DIR}/modules-load.d/"
149 134 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
150 135
151 136 # Load hardware random module at boot
152 137 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
153 138 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
154 139 fi
155 140
156 141 # Load sound module at boot
157 142 if [ "$ENABLE_SOUND" = true ] ; then
158 143 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
159 144 else
160 145 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
161 146 fi
162 147
163 148 # Enable I2C interface
164 149 if [ "$ENABLE_I2C" = true ] ; then
165 150 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
166 151 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
167 152 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
168 153 fi
169 154
170 155 # Enable SPI interface
171 156 if [ "$ENABLE_SPI" = true ] ; then
172 157 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
173 158 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
174 159 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
175 160 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
176 161 fi
177 162 fi
178 163
179 164 # Disable RPi2/3 under-voltage warnings
180 165 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
181 166 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
182 167 fi
183 168
184 169 # Install kernel modules blacklist
185 170 mkdir -p "${ETC_DIR}/modprobe.d/"
186 171 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
187 172
188 173 # Install sysctl.d configuration files
189 174 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,133 +1,134
1 1 #
2 2 # Setup Networking
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Install and setup hostname
9 9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
10 10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
11 11
12 12 # Install and setup hosts
13 13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
14 14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
15 15
16 16 # Setup hostname entry with static IP
17 17 if [ "$NET_ADDRESS" != "" ] ; then
18 18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
19 19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
20 20 fi
21 21
22 22 # Remove IPv6 hosts
23 23 if [ "$ENABLE_IPV6" = false ] ; then
24 24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
25 25 fi
26 26
27 27 # Install hint about network configuration
28 28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
29 29
30 30 # Install configuration for interface eth0
31 31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
32 32
33 33 # Install configuration for interface wl*
34 34 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
35 35
36 36 #always with dhcp since wpa_supplicant integration is missing
37 37 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
38 38
39 39 if [ "$ENABLE_DHCP" = true ] ; then
40 40 # Enable DHCP configuration for interface eth0
41 41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
42 42
43 43 # Set DHCP configuration to IPv4 only
44 44 if [ "$ENABLE_IPV6" = false ] ; then
45 45 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
46 46 fi
47 47
48 48 else # ENABLE_DHCP=false
49 49 # Set static network configuration for interface eth0
50 50 sed -i\
51 51 -e "s|DHCP=.*|DHCP=no|"\
52 52 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
53 53 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
54 54 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
55 55 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
56 56 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
57 57 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
58 58 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
59 59 "${ETC_DIR}/systemd/network/eth.network"
60 60 fi
61 61
62 62 # Remove empty settings from network configuration
63 63 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
64 64 # Remove empty settings from wlan configuration
65 65 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
66 66
67 67 # Move systemd network configuration if required by Debian release
68 68 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
69 69 # If WLAN is enabled copy wlan configuration too
70 70 if [ "$ENABLE_WIRELESS" = true ] ; then
71 71 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
72 72 fi
73 73 rm -fr "${ETC_DIR}/systemd/network"
74 74
75 75 # Enable systemd-networkd service
76 76 chroot_exec systemctl enable systemd-networkd
77 77
78 78 # Install host.conf resolver configuration
79 79 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
80 80
81 81 # Enable network stack hardening
82 82 if [ "$ENABLE_HARDNET" = true ] ; then
83 83 # Install sysctl.d configuration files
84 84 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
85 85
86 86 # Setup resolver warnings about spoofed addresses
87 87 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
88 88 fi
89 89
90 90 # Enable time sync
91 91 if [ "$NET_NTP_1" != "" ] ; then
92 92 chroot_exec systemctl enable systemd-timesyncd.service
93 93 fi
94 94
95 95 # Download the firmware binary blob required to use the RPi3 wireless interface
96 96 if [ "$ENABLE_WIRELESS" = true ] ; then
97 97 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
99 99 fi
100 100
101 101 # Create temporary directory for firmware binary blob
102 102 temp_dir=$(as_nobody mktemp -d)
103 103
104 104 # Fetch firmware binary blob for RPI3B+
105 105 if [ "$RPI_MODEL" = 3P ] ; then
106 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
106 # Fetch firmware binary blob for RPi3P
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
109 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
109 110 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
110 # Fetch firmware binary blob for RPI3
111 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
112 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
111 # Fetch firmware binary blob for RPi3
112 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
113 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
113 114 fi
114 115
115 116 # Move downloaded firmware binary blob
116 117 if [ "$RPI_MODEL" = 3P ] ; then
117 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
118 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
118 119 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
119 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
120 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
120 121 fi
121 122
122 123 # Remove temporary directory for firmware binary blob
123 124 rm -fr "${temp_dir}"
124 125
125 126 # Set permissions of the firmware binary blob
126 127 if [ "$RPI_MODEL" = 3P ] ; then
127 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
128 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
128 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 130 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
130 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
131 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
131 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 133 fi
133 134 fi
@@ -1,98 +1,98
1 1 #
2 2 # Build and Setup U-Boot
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Fetch and build U-Boot bootloader
9 9 if [ "$ENABLE_UBOOT" = true ] ; then
10 10 # Install c/c++ build environment inside the chroot
11 11 chroot_install_cc
12 12
13 13 # Copy existing U-Boot sources into chroot directory
14 14 if [ -n "$UBOOTSRC_DIR" ] && [ -d "$UBOOTSRC_DIR" ] ; then
15 15 # Copy local U-Boot sources
16 16 cp -r "${UBOOTSRC_DIR}" "${R}/tmp"
17 17 else
18 18 # Create temporary directory for U-Boot sources
19 19 temp_dir=$(as_nobody mktemp -d)
20 20
21 21 # Fetch U-Boot sources
22 22 as_nobody git -C "${temp_dir}" clone "${UBOOT_URL}"
23 23
24 24 # Copy downloaded U-Boot sources
25 25 mv "${temp_dir}/u-boot" "${R}/tmp/"
26 26
27 27 # Set permissions of the U-Boot sources
28 28 chown -R root:root "${R}/tmp/u-boot"
29 29
30 30 # Remove temporary directory for U-Boot sources
31 31 rm -fr "${temp_dir}"
32 32 fi
33 33
34 34 # Build and install U-Boot inside chroot
35 35 chroot_exec make -j"${KERNEL_THREADS}" -C /tmp/u-boot/ "${UBOOT_CONFIG}" all
36 36
37 37 # Copy compiled bootloader binary and set config.txt to load it
38 38 install_exec "${R}/tmp/u-boot/tools/mkimage" "${R}/usr/sbin/mkimage"
39 39 install_readonly "${R}/tmp/u-boot/u-boot.bin" "${BOOT_DIR}/u-boot.bin"
40 40 printf "\n# boot u-boot kernel\nkernel=u-boot.bin\n" >> "${BOOT_DIR}/config.txt"
41 41
42 42 # Install and setup U-Boot command file
43 43 install_readonly files/boot/uboot.mkimage "${BOOT_DIR}/uboot.mkimage"
44 44 printf "# Set the kernel boot command line\nsetenv bootargs \"earlyprintk ${CMDLINE}\"\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
45 45
46 46 if [ "$ENABLE_INITRAMFS" = true ] ; then
47 47 # Convert generated initramfs for U-Boot using mkimage
48 48 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -T ramdisk -C none -n "initramfs-${KERNEL_VERSION}" -d "/boot/firmware/initramfs-${KERNEL_VERSION}" "/boot/firmware/initramfs-${KERNEL_VERSION}.uboot"
49 49
50 50 # Remove original initramfs file
51 51 rm -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}"
52 52
53 53 # Configure U-Boot to load generated initramfs
54 54 printf "# Set initramfs file\nsetenv initramfs initramfs-${KERNEL_VERSION}.uboot\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
55 55 printf "\nbootz \${kernel_addr_r} \${ramdisk_addr_r} \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
56 56 else # ENABLE_INITRAMFS=false
57 57 # Remove initramfs from U-Boot mkfile
58 58 sed -i '/.*initramfs.*/d' "${BOOT_DIR}/uboot.mkimage"
59 59
60 60 if [ "$BUILD_KERNEL" = false ] ; then
61 61 # Remove dtbfile from U-Boot mkfile
62 62 sed -i '/.*dtbfile.*/d' "${BOOT_DIR}/uboot.mkimage"
63 63 printf "\nbootz \${kernel_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
64 64 else
65 65 printf "\nbootz \${kernel_addr_r} - \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
66 66 fi
67 67 fi
68 68
69 69 if [ "$KERNEL_ARCH" = "arm64" ] ; then
70 70 echo "Setting up config.txt to boot 64bit uboot"
71 71
72 72 printf "\n# 64bit-mode" >> "${BOOT_DIR}/config.txt"
73 73 printf "\n# arm_control=0x200 is deprecated https://www.raspberrypi.org/documentation/configuration/config-txt/misc.md" >> "${BOOT_DIR}/config.txt"
74 74 printf "\narm_64bit=1" >> "${BOOT_DIR}/config.txt"
75 #in 64bit uboot booti is used instead of bootz [like in KERNEL_BIN_IMAGE=zImage (armv7)|| Image(armv8)]
75
76 76 sed -i "s|bootz|booti|g" "${BOOT_DIR}/uboot.mkimage"
77 77 fi
78 78
79 79 # Set mkfile to use the correct dtb file
80 80 sed -i "s/^\(setenv dtbfile \).*/\1${DTB_FILE}/" "${BOOT_DIR}/uboot.mkimage"
81 81
82 82 # Set mkfile to use the correct mach id
83 83 if [ "$ENABLE_QEMU" = true ] ; then
84 84 sed -i "s/^\(setenv machid \).*/\10x000008e0/" "${BOOT_DIR}/uboot.mkimage"
85 85 fi
86 86
87 87 # Set mkfile to use kernel image
88 88 sed -i "s/^\(fatload mmc 0:1 \${kernel_addr_r} \).*/\1${KERNEL_IMAGE}/" "${BOOT_DIR}/uboot.mkimage"
89 89
90 90 # Remove all leading blank lines
91 91 sed -i "/./,\$!d" "${BOOT_DIR}/uboot.mkimage"
92 92
93 93 # Generate U-Boot bootloader image
94 94 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n "RPi${RPI_MODEL}" -d /boot/firmware/uboot.mkimage /boot/firmware/boot.scr
95 95
96 96 # Remove U-Boot sources
97 97 rm -fr "${R}/tmp/u-boot"
98 98 fi
@@ -1,51 +1,53
1 1 #
2 2 # Setup videocore - Raspberry Userland
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
9 9 # Copy existing videocore sources into chroot directory
10 10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
11 11 # Copy local U-Boot sources
12 12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
13 13 else
14 14 # Create temporary directory for U-Boot sources
15 15 temp_dir=$(as_nobody mktemp -d)
16 16
17 17 # Fetch U-Boot sources
18 18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
19 19
20 20 # Copy downloaded U-Boot sources
21 21 mv "${temp_dir}/userland" "${R}/tmp/"
22 22
23 23 # Set permissions of the U-Boot sources
24 24 chown -R root:root "${R}/tmp/userland"
25 25
26 26 # Remove temporary directory for U-Boot sources
27 27 rm -fr "${temp_dir}"
28 28 fi
29 29
30 30 # Create build dir
31 31 mkdir "${R}"/tmp/userland/build
32
32 33 # push us to build directory
33 34 pushd "${R}"/tmp/userland/build
34 35
35 36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
36 37 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
37 38 fi
38 39
39 40 if [ "$RELEASE_ARCH" = "armel" ] ; then
40 41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
41 42 fi
42 43
43 44 if [ "$RELEASE_ARCH" = "armhf" ] ; then
44 45 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
45 46 fi
46 47
47 48 #build userland
48 49 make -j "$(nproc)"
50
49 51 #pop us out of build dir
50 52 popd
51 53 fi
@@ -1,787 +1,786
1 1 #!/bin/sh
2 2 ########################################################################
3 3 # rpi23-gen-image.sh 2015-2017
4 4 #
5 5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
6 6 #
7 7 # This program is free software; you can redistribute it and/or
8 8 # modify it under the terms of the GNU General Public License
9 9 # as published by the Free Software Foundation; either version 2
10 10 # of the License, or (at your option) any later version.
11 11 #
12 12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
13 13 #
14 14 # Big thanks for patches and enhancements by 20+ github contributors!
15 15 ########################################################################
16 16
17 17 # Are we running as root?
18 18 if [ "$(id -u)" -ne "0" ] ; then
19 19 echo "error: this script must be executed with root privileges!"
20 20 exit 1
21 21 fi
22 22
23 23 # Check if ./functions.sh script exists
24 24 if [ ! -r "./functions.sh" ] ; then
25 25 echo "error: './functions.sh' required script not found!"
26 26 exit 1
27 27 fi
28 28
29 29 # Load utility functions
30 30 . ./functions.sh
31 31
32 32 # Load parameters from configuration template file
33 33 if [ -n "$CONFIG_TEMPLATE" ] ; then
34 34 use_template
35 35 fi
36 36
37 37 # Introduce settings
38 38 set -e
39 39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
40 40 set -x
41 41
42 42 # Raspberry Pi model configuration
43 43 RPI_MODEL=${RPI_MODEL:=2}
44 44
45 45 # Debian release
46 46 RELEASE=${RELEASE:=buster}
47 47
48 #Kernel Branch
48 # Kernel Branch
49 49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
50 50
51 51 # URLs
52 52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
53 53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
54 54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
55 55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
56 56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
57 57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
58 58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
59 59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
60 60
61 61 # Build directories
62 62 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
63 63 BUILDDIR="${BASEDIR}/build"
64 64
65 65 # Prepare date string for default image file name
66 66 DATE="$(date +%Y-%m-%d)"
67 67 if [ -z "$KERNEL_BRANCH" ] ; then
68 68 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
69 69 else
70 70 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
71 71 fi
72 72
73 73 # Chroot directories
74 74 R="${BUILDDIR}/chroot"
75 75 ETC_DIR="${R}/etc"
76 76 LIB_DIR="${R}/lib"
77 77 BOOT_DIR="${R}/boot/firmware"
78 78 KERNEL_DIR="${R}/usr/src/linux"
79 79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
80 80
81 81 # Firmware directory: Blank if download from github
82 82 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
83 83
84 84 # General settings
85 85 SET_ARCH=${SET_ARCH:=32}
86 86 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
87 87 PASSWORD=${PASSWORD:=raspberry}
88 88 USER_PASSWORD=${USER_PASSWORD:=raspberry}
89 89 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
90 90 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
91 91 EXPANDROOT=${EXPANDROOT:=true}
92 92
93 93 # Keyboard settings
94 94 XKB_MODEL=${XKB_MODEL:=""}
95 95 XKB_LAYOUT=${XKB_LAYOUT:=""}
96 96 XKB_VARIANT=${XKB_VARIANT:=""}
97 97 XKB_OPTIONS=${XKB_OPTIONS:=""}
98 98
99 99 # Network settings (DHCP)
100 100 ENABLE_DHCP=${ENABLE_DHCP:=true}
101 101
102 102 # Network settings (static)
103 103 NET_ADDRESS=${NET_ADDRESS:=""}
104 104 NET_GATEWAY=${NET_GATEWAY:=""}
105 105 NET_DNS_1=${NET_DNS_1:=""}
106 106 NET_DNS_2=${NET_DNS_2:=""}
107 107 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
108 108 NET_NTP_1=${NET_NTP_1:=""}
109 109 NET_NTP_2=${NET_NTP_2:=""}
110 110
111 111 # APT settings
112 112 APT_PROXY=${APT_PROXY:=""}
113 113 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
114 114
115 115 # Feature settings
116 116 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
117 117 ENABLE_I2C=${ENABLE_I2C:=false}
118 118 ENABLE_SPI=${ENABLE_SPI:=false}
119 119 ENABLE_IPV6=${ENABLE_IPV6:=true}
120 120 ENABLE_SSHD=${ENABLE_SSHD:=true}
121 121 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
122 122 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
123 123 ENABLE_SOUND=${ENABLE_SOUND:=true}
124 124 ENABLE_DBUS=${ENABLE_DBUS:=true}
125 125 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
126 126 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
127 127 ENABLE_XORG=${ENABLE_XORG:=false}
128 128 ENABLE_WM=${ENABLE_WM:=""}
129 129 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
130 130 ENABLE_USER=${ENABLE_USER:=true}
131 131 USER_NAME=${USER_NAME:="pi"}
132 132 ENABLE_ROOT=${ENABLE_ROOT:=false}
133 133 ENABLE_QEMU=${ENABLE_QEMU:=false}
134 134 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
135 135
136 136 # SSH settings
137 137 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
138 138 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
139 139 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
140 140 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
141 141 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
142 142
143 143 # Advanced settings
144 144 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
145 145 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
146 146 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
147 147 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
148 148 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
149 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=true}
149 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
150 150 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
151 151 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
152 152 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
153 153 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
154 154 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
155 155 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
156 156 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
157 157 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
158 158
159 159 # Kernel compilation settings
160 160 BUILD_KERNEL=${BUILD_KERNEL:=true}
161 161 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
162 162 KERNEL_THREADS=${KERNEL_THREADS:=1}
163 163 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
164 164 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
165 165 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
166 166 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
167 167 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
168 168
169 169 # Kernel compilation from source directory settings
170 170 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
171 171 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
172 172 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
173 173 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
174 174
175 175 # Reduce disk usage settings
176 176 REDUCE_APT=${REDUCE_APT:=true}
177 177 REDUCE_DOC=${REDUCE_DOC:=true}
178 178 REDUCE_MAN=${REDUCE_MAN:=true}
179 179 REDUCE_VIM=${REDUCE_VIM:=false}
180 180 REDUCE_BASH=${REDUCE_BASH:=false}
181 181 REDUCE_HWDB=${REDUCE_HWDB:=true}
182 182 REDUCE_SSHD=${REDUCE_SSHD:=true}
183 183 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
184 184
185 185 # Encrypted filesystem settings
186 186 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
187 187 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
188 188 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
189 189 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
190 190 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
191 191
192 192 # Chroot scripts directory
193 193 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
194 194
195 195 # Packages required in the chroot build environment
196 196 APT_INCLUDES=${APT_INCLUDES:=""}
197 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"
198 198
199 #Packages to exclude from chroot build environment
199 # Packages to exclude from chroot build environment
200 200 APT_EXCLUDES=${APT_EXCLUDES:=""}
201 201
202 202 # Packages required for bootstrapping
203 203 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
204 204 MISSING_PACKAGES=""
205 205
206 206 # Packages installed for c/c++ build environment in chroot (keep empty)
207 207 COMPILER_PACKAGES=""
208 208
209 209 set +x
210 210
211 #If init and systemd-sysv are wanted e.g. halt/reboot/shutdown scripts
212 if [ "$ENABLE_SYSVINIT" = false ] ; then
213 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
214 fi
215
216 #Check if apt-cacher-ng has its default port open on and set APT_PROXY
217 if [ -n "$(lsof -i :3142)" ] ; then
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!
211 # Setup architecture specific settings
222 212 if [ -n "$SET_ARCH" ] ; then
223 echo "Setting Architecture specific settings"
224 ##################################
225 # 64 bit config
226 ##################################
213
214 # 64 bit configuration
227 215 if [ "$SET_ARCH" = 64 ] ; then
228 echo "64 bit mode selected - Setting up enviroment"
229 # 64 bit depended settings
216 # General 64 bit depended settings
230 217 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
231 218 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
232 219 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
233 220
221 # Board specific settings
234 222 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
235 223 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
236 224 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
237 225 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
238 226 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
239 227 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
240 228 else
241 echo "error: Only Raspberry PI 3 and 3B+ support 64bit"
229 echo "error: Only Raspberry PI 3 and 3B+ support 64 bit"
242 230 exit 1
243 231 fi
244 232 fi
245 233
246 ##################################
247 # 32 bit config
248 ##################################
234 # 32 bit configuration
249 235 if [ "$SET_ARCH" = 32 ] ; then
250 echo "32 bit mode selected - Setting up enviroment"
251 #General 32bit configuration
236 # General 32 bit dependend settings
252 237 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
253 238 KERNEL_ARCH=${KERNEL_ARCH:=arm}
254 239 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
255 240
256 #Raspberry setting grouped by board compability
241 # Hardware specific settings
257 242 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
258 echo "Setting settings for bcm2835 Raspberry PI boards"
259 243 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
260 244 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
261 245 RELEASE_ARCH=${RELEASE_ARCH:=armel}
262 246 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
263 247 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
264 248 fi
249
250 # Hardware specific settings
265 251 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
266 echo "Setting settings for bcm2837 Raspberry PI boards"
267 252 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
268 253 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
269 254 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
270 255 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
271 256 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
272 257 fi
273 258 fi
274 259 #SET_ARCH not set
275 260 else
276 261 echo "error: Please set '32' or '64' as value for SET_ARCH"
277 262 exit 1
278 263 fi
279
280 #Device specific configuration and uboot-config
281 echo "Select DTB-File"
264 # Device specific configuration and U-Boot configuration
282 265 case "$RPI_MODEL" in
283 266 0)
284 267 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
285 268 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
286 269 ;;
287 270 1)
288 271 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
289 272 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
290 273 ;;
291 274 1P)
292 275 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
293 276 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
294 277 ;;
295 278 2)
296 279 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
297 280 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
298 281 ;;
299 282 3)
300 283 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
301 284 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
302 285 ;;
303 286 3P)
304 287 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
305 288 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
306 289 ;;
307 290 *)
308 291 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
309 292 exit 1
310 293 ;;
311 294 esac
312 295 echo "$DTB_FILE selected"
313 296
314 297 # Check if the internal wireless interface is supported by the RPi model
315 298 if [ "$ENABLE_WIRELESS" = true ] ; then
316 299 if [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ] ; then
317 300 echo "error: The selected Raspberry Pi model has no internal wireless interface"
318 301 exit 1
319 302 else
320 303 echo "Raspberry Pi $RPI_MODEL has WIFI support"
321 304 fi
322 305 fi
323 306
324 307 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
325 308 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
326 309 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
327 310 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
328 311 exit 1
329 312 fi
330 313 fi
331 314
315 # Add cmake to compile videocore sources
332 316 if [ "$ENABLE_VIDEOCORE" = true ] ; then
333 317 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
334 318 fi
335 319
336 320 # Add libncurses5 to enable kernel menuconfig
337 321 if [ "$KERNEL_MENUCONFIG" = true ] ; then
338 322 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
339 323 fi
340 324
341 325 # Add ccache compiler cache for (faster) kernel cross (re)compilation
342 326 if [ "$KERNEL_CCACHE" = true ] ; then
343 327 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
344 328 fi
345 329
346 330 # Add cryptsetup package to enable filesystem encryption
347 331 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
348 332 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
349 333 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
350 334
351 335 if [ -z "$CRYPTFS_PASSWORD" ] ; then
352 336 echo "error: no password defined (CRYPTFS_PASSWORD)!"
353 337 exit 1
354 338 fi
355 339 ENABLE_INITRAMFS=true
356 340 fi
357 341
358 342 # Add initramfs generation tools
359 343 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
360 344 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
361 345 fi
362 346
363 347 # Add device-tree-compiler required for building the U-Boot bootloader
364 348 if [ "$ENABLE_UBOOT" = true ] ; then
365 349 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
366 350 fi
367 351
368 352 # Check if root SSH (v2) public key file exists
369 353 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
370 354 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
371 355 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
372 356 exit 1
373 357 fi
374 358 fi
375 359
376 360 # Check if $USER_NAME SSH (v2) public key file exists
377 361 if [ -n "$SSH_USER_PUB_KEY" ] ; then
378 362 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
379 363 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
380 364 exit 1
381 365 fi
382 366 fi
383 367
384 368 # Check if all required packages are installed on the build system
385 369 for package in $REQUIRED_PACKAGES ; do
386 370 if [ "$(dpkg-query -W -f='${Status}' $package)" != "install ok installed" ] ; then
387 371 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
388 372 fi
389 373 done
390 374
391 375 # If there are missing packages ask confirmation for install, or exit
392 376 if [ -n "$MISSING_PACKAGES" ] ; then
393 377 echo "the following packages needed by this script are not installed:"
394 378 echo "$MISSING_PACKAGES"
395 379
396 380 printf "\ndo you want to install the missing packages right now? [y/n] "
397 381 read -r confirm
398 382 [ "$confirm" != "y" ] && exit 1
399 383
400 384 # Make sure all missing required packages are installed
401 385 apt-get -qq -y install "${MISSING_PACKAGES}"
402 386 fi
403 387
404 388 # Check if ./bootstrap.d directory exists
405 389 if [ ! -d "./bootstrap.d/" ] ; then
406 390 echo "error: './bootstrap.d' required directory not found!"
407 391 exit 1
408 392 fi
409 393
410 394 # Check if ./files directory exists
411 395 if [ ! -d "./files/" ] ; then
412 396 echo "error: './files' required directory not found!"
413 397 exit 1
414 398 fi
415 399
416 400 # Check if specified KERNELSRC_DIR directory exists
417 401 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
418 402 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
419 403 exit 1
420 404 fi
421 405
422 406 # Check if specified UBOOTSRC_DIR directory exists
423 407 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
424 408 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
425 409 exit 1
426 410 fi
427 411
428 412 # Check if specified VIDEOCORESRC_DIR directory exists
429 413 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
430 414 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
431 415 exit 1
432 416 fi
433 417
434 418 # Check if specified FBTURBOSRC_DIR directory exists
435 419 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
436 420 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
437 421 exit 1
438 422 fi
439 423
440 424 # Check if specified CHROOT_SCRIPTS directory exists
441 425 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
442 426 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
443 427 exit 1
444 428 fi
445 429
446 430 # Check if specified device mapping already exists (will be used by cryptsetup)
447 431 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
448 432 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
449 433 exit 1
450 434 fi
451 435
452 436 # Don't clobber an old build
453 437 if [ -e "$BUILDDIR" ] ; then
454 438 echo "error: directory ${BUILDDIR} already exists, not proceeding"
455 439 exit 1
456 440 fi
457 441
458 442 # Setup chroot directory
459 443 mkdir -p "${R}"
460 444
461 445 # Check if build directory has enough of free disk space >512MB
462 446 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
463 447 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
464 448 exit 1
465 449 fi
466 450
467 451 set -x
468 452
469 453 # Call "cleanup" function on various signals and errors
470 454 trap cleanup 0 1 2 3 6
471 455
472 456 # Add required packages for the minbase installation
473 457 if [ "$ENABLE_MINBASE" = true ] ; then
474 458 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
475 459 fi
476 460
477 461 # Add parted package, required to get partprobe utility
478 462 if [ "$EXPANDROOT" = true ] ; then
479 463 APT_INCLUDES="${APT_INCLUDES},parted"
480 464 fi
481 465
482 466 # Add dbus package, recommended if using systemd
483 467 if [ "$ENABLE_DBUS" = true ] ; then
484 468 APT_INCLUDES="${APT_INCLUDES},dbus"
485 469 fi
486 470
487 471 # Add iptables IPv4/IPv6 package
488 472 if [ "$ENABLE_IPTABLES" = true ] ; then
489 473 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
490 474 fi
491 475
492 476 # Add openssh server package
493 477 if [ "$ENABLE_SSHD" = true ] ; then
494 478 APT_INCLUDES="${APT_INCLUDES},openssh-server"
495 479 fi
496 480
497 481 # Add alsa-utils package
498 482 if [ "$ENABLE_SOUND" = true ] ; then
499 483 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
500 484 fi
501 485
502 486 # Add rng-tools package
503 487 if [ "$ENABLE_HWRANDOM" = true ] ; then
504 488 APT_INCLUDES="${APT_INCLUDES},rng-tools"
505 489 fi
506 490
507 491 # Add fbturbo video driver
508 492 if [ "$ENABLE_FBTURBO" = true ] ; then
509 493 # Enable xorg package dependencies
510 494 ENABLE_XORG=true
511 495 fi
512 496
513 497 # Add user defined window manager package
514 498 if [ -n "$ENABLE_WM" ] ; then
515 499 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
516 500
517 501 # Enable xorg package dependencies
518 502 ENABLE_XORG=true
519 503 fi
520 504
521 505 # Add xorg package
522 506 if [ "$ENABLE_XORG" = true ] ; then
523 507 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
524 508 fi
525 509
526 510 # Replace selected packages with smaller clones
527 511 if [ "$ENABLE_REDUCE" = true ] ; then
528 512 # Add levee package instead of vim-tiny
529 513 if [ "$REDUCE_VIM" = true ] ; then
530 514 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
531 515 fi
532 516
533 517 # Add dropbear package instead of openssh-server
534 518 if [ "$REDUCE_SSHD" = true ] ; then
535 519 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
536 520 fi
537 521 fi
538 522
523 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
524 if [ "$ENABLE_SYSVINIT" = false ] ; then
525 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
526 fi
527
528 # Check if kernel is getting compiled
529 if [ "$BUILD_KERNEL" = false ] ; then
530 echo "Downloading precompiled kernel"
531 echo "error: not configured"
532 exit 1;
533 # BUILD_KERNEL=true
534 else
535 echo "No precompiled kernel repositories were added"
536 fi
537
539 538 # Configure kernel sources if no KERNELSRC_DIR
540 539 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
541 540 KERNELSRC_CONFIG=true
542 541 fi
543 542
544 543 # Configure reduced kernel
545 544 if [ "$KERNEL_REDUCE" = true ] ; then
546 545 KERNELSRC_CONFIG=false
547 546 fi
548 547
549 548 # Configure qemu compatible kernel
550 549 if [ "$ENABLE_QEMU" = true ] ; then
551 550 DTB_FILE=vexpress-v2p-ca15_a7.dtb
552 551 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
553 552 KERNEL_DEFCONFIG="vexpress_defconfig"
554 553 if [ "$KERNEL_MENUCONFIG" = false ] ; then
555 554 KERNEL_OLDDEFCONFIG=true
556 555 fi
557 556 fi
558 557
559 558 # Execute bootstrap scripts
560 559 for SCRIPT in bootstrap.d/*.sh; do
561 560 head -n 3 "$SCRIPT"
562 561 . "$SCRIPT"
563 562 done
564 563
565 564 ## Execute custom bootstrap scripts
566 565 if [ -d "custom.d" ] ; then
567 566 for SCRIPT in custom.d/*.sh; do
568 567 . "$SCRIPT"
569 568 done
570 569 fi
571 570
572 571 # Execute custom scripts inside the chroot
573 572 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
574 573 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
575 574 chroot_exec /bin/bash -x <<'EOF'
576 575 for SCRIPT in /chroot_scripts/* ; do
577 576 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
578 577 $SCRIPT
579 578 fi
580 579 done
581 580 EOF
582 581 rm -rf "${R}/chroot_scripts"
583 582 fi
584 583
585 584 # Remove c/c++ build environment from the chroot
586 585 chroot_remove_cc
587 586
588 587 # Generate required machine-id
589 588 MACHINE_ID=$(dbus-uuidgen)
590 589 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
591 590 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
592 591
593 592 # APT Cleanup
594 593 chroot_exec apt-get -y clean
595 594 chroot_exec apt-get -y autoclean
596 595 chroot_exec apt-get -y autoremove
597 596
598 597 # Unmount mounted filesystems
599 598 umount -l "${R}/proc"
600 599 umount -l "${R}/sys"
601 600
602 601 # Clean up directories
603 602 rm -rf "${R}/run/*"
604 603 rm -rf "${R}/tmp/*"
605 604
606 605 # Clean up files
607 606 rm -f "${ETC_DIR}/ssh/ssh_host_*"
608 607 rm -f "${ETC_DIR}/dropbear/dropbear_*"
609 608 rm -f "${ETC_DIR}/apt/sources.list.save"
610 609 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
611 610 rm -f "${ETC_DIR}/*-"
612 611 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
613 612 rm -f "${ETC_DIR}/resolv.conf"
614 613 rm -f "${R}/root/.bash_history"
615 614 rm -f "${R}/var/lib/urandom/random-seed"
616 615 rm -f "${R}/initrd.img"
617 616 rm -f "${R}/vmlinuz"
618 617 rm -f "${R}${QEMU_BINARY}"
619 618
620 619 if [ "$ENABLE_QEMU" = true ] ; then
621 620 # Setup QEMU directory
622 621 mkdir "${BASEDIR}/qemu"
623 622
624 623 # Copy kernel image to QEMU directory
625 624 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
626 625
627 626 # Copy kernel config to QEMU directory
628 627 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
629 628
630 629 # Copy kernel dtbs to QEMU directory
631 630 for dtb in "${BOOT_DIR}/"*.dtb ; do
632 631 if [ -f "${dtb}" ] ; then
633 632 install_readonly "${dtb}" "${BASEDIR}/qemu/"
634 633 fi
635 634 done
636 635
637 636 # Copy kernel overlays to QEMU directory
638 637 if [ -d "${BOOT_DIR}/overlays" ] ; then
639 638 # Setup overlays dtbs directory
640 639 mkdir "${BASEDIR}/qemu/overlays"
641 640
642 641 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
643 642 if [ -f "${dtb}" ] ; then
644 643 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
645 644 fi
646 645 done
647 646 fi
648 647
649 648 # Copy u-boot files to QEMU directory
650 649 if [ "$ENABLE_UBOOT" = true ] ; then
651 650 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
652 651 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
653 652 fi
654 653 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
655 654 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
656 655 fi
657 656 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
658 657 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
659 658 fi
660 659 fi
661 660
662 661 # Copy initramfs to QEMU directory
663 662 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
664 663 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
665 664 fi
666 665 fi
667 666
668 667 # Calculate size of the chroot directory in KB
669 668 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
670 669
671 670 # Calculate the amount of needed 512 Byte sectors
672 671 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
673 672 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
674 673 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
675 674
676 675 # The root partition is EXT4
677 676 # This means more space than the actual used space of the chroot is used.
678 677 # As overhead for journaling and reserved blocks 35% are added.
679 678 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
680 679
681 680 # Calculate required image size in 512 Byte sectors
682 681 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
683 682
684 683 # Prepare image file
685 684 if [ "$ENABLE_SPLITFS" = true ] ; then
686 685 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
687 686 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
688 687 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
689 688 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
690 689
691 690 # Write firmware/boot partition tables
692 691 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
693 692 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
694 693 EOM
695 694
696 695 # Write root partition table
697 696 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
698 697 ${TABLE_SECTORS},${ROOT_SECTORS},83
699 698 EOM
700 699
701 700 # Setup temporary loop devices
702 701 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
703 702 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
704 703 else # ENABLE_SPLITFS=false
705 704 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
706 705 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
707 706
708 707 # Write partition table
709 708 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
710 709 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
711 710 ${ROOT_OFFSET},${ROOT_SECTORS},83
712 711 EOM
713 712
714 713 # Setup temporary loop devices
715 714 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
716 715 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
717 716 fi
718 717
719 718 if [ "$ENABLE_CRYPTFS" = true ] ; then
720 719 # Create dummy ext4 fs
721 720 mkfs.ext4 "$ROOT_LOOP"
722 721
723 722 # Setup password keyfile
724 723 touch .password
725 724 chmod 600 .password
726 725 echo -n ${CRYPTFS_PASSWORD} > .password
727 726
728 727 # Initialize encrypted partition
729 728 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
730 729
731 730 # Open encrypted partition and setup mapping
732 731 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
733 732
734 733 # Secure delete password keyfile
735 734 shred -zu .password
736 735
737 736 # Update temporary loop device
738 737 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
739 738
740 739 # Wipe encrypted partition (encryption cipher is used for randomness)
741 740 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
742 741 fi
743 742
744 743 # Build filesystems
745 744 mkfs.vfat "$FRMW_LOOP"
746 745 mkfs.ext4 "$ROOT_LOOP"
747 746
748 747 # Mount the temporary loop devices
749 748 mkdir -p "$BUILDDIR/mount"
750 749 mount "$ROOT_LOOP" "$BUILDDIR/mount"
751 750
752 751 mkdir -p "$BUILDDIR/mount/boot/firmware"
753 752 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
754 753
755 754 # Copy all files from the chroot to the loop device mount point directory
756 755 rsync -a "${R}/" "$BUILDDIR/mount/"
757 756
758 757 # Unmount all temporary loop devices and mount points
759 758 cleanup
760 759
761 760 # Create block map file(s) of image(s)
762 761 if [ "$ENABLE_SPLITFS" = true ] ; then
763 762 # Create block map files for "bmaptool"
764 763 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
765 764 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
766 765
767 766 # Image was successfully created
768 767 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
769 768 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
770 769 else
771 770 # Create block map file for "bmaptool"
772 771 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
773 772
774 773 # Image was successfully created
775 774 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
776 775
777 776 # Create qemu qcow2 image
778 777 if [ "$ENABLE_QEMU" = true ] ; then
779 778 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
780 779 QEMU_SIZE=16G
781 780
782 781 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
783 782 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
784 783
785 784 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
786 785 fi
787 786 fi
@@ -1,15 +1,15
1 1 # Configuration template file used by rpi23-gen-image.sh
2 2 # Debian Stretch using the Arm64 for kernel compilation and Debian distribution.
3 3
4 4 RPI_MODEL=3
5 5 RELEASE=stretch
6 6 BUILD_KERNEL=true
7 7 KERNEL_ARCH=arm64
8 8 RELEASE_ARCH=arm64
9 9 CROSS_COMPILE=aarch64-linux-gnu-
10 10 QEMU_BINARY=/usr/bin/qemu-aarch64-static
11 11 KERNEL_DEFCONFIG=bcmrpi3_defconfig
12 12 KERNEL_BIN_IMAGE=Image
13 13 KERNEL_IMAGE=kernel8.img
14 KERNEL_BRANCH=rpi-4.11.y
14 KERNEL_BRANCH=rpi-4.14.y
15 15 ENABLE_WIRELESS=true
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant