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