##// END OF EJS Templates
Merge branch 'master' of git://github.com/drtyhlpr/rpi23-gen-image into drtyhlpr-master
vidal -
r580:74c2ebe5476a Fusion
parent child
Show More
@@ -0,0 +1,53
1 #
2 # Setup videocore - Raspberry Userland
3 #
4
5 # Load utility functions
6 . ./functions.sh
7
8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
9 # Copy existing videocore sources into chroot directory
10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
11 # Copy local videocore sources
12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
13 else
14 # Create temporary directory for videocore sources
15 temp_dir=$(as_nobody mktemp -d)
16
17 # Fetch videocore sources
18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
19
20 # Copy downloaded videocore sources
21 mv "${temp_dir}/userland" "${R}/tmp/"
22
23 # Set permissions of the U-Boot sources
24 chown -R root:root "${R}/tmp/userland"
25
26 # Remove temporary directory for U-Boot sources
27 rm -fr "${temp_dir}"
28 fi
29
30 # Create build dir
31 mkdir "${R}"/tmp/userland/build
32
33 # push us to build directory
34 cd "${R}"/tmp/userland/build
35
36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
37 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
38 fi
39
40 if [ "$RELEASE_ARCH" = "armel" ] ; then
41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
42 fi
43
44 if [ "$RELEASE_ARCH" = "armhf" ] ; then
45 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
46 fi
47
48 #build userland
49 make -j "$(nproc)"
50
51 #back to root of scriptdir
52 cd "${WORKDIR}"
53 fi
@@ -0,0 +1,33
1 SUBSYSTEM=="input", GROUP="input", MODE="0660"
2 SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
3 SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
4 SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"
5
6 SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
7 SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
8 chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
9 chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
10 chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
11 '"
12
13 KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
14 ALIASES=/proc/device-tree/aliases; \
15 if cmp -s $ALIASES/uart0 $ALIASES/serial0; then \
16 echo 0;\
17 elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then \
18 echo 1; \
19 else \
20 exit 1; \
21 fi\
22 '", SYMLINK+="serial%c"
23
24 KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
25 ALIASES=/proc/device-tree/aliases; \
26 if cmp -s $ALIASES/uart1 $ALIASES/serial0; then \
27 echo 0; \
28 elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then \
29 echo 1; \
30 else \
31 exit 1; \
32 fi \
33 '", SYMLINK+="serial%c"
@@ -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
@@ -0,0 +1,1
1 kernel.printk = 3 4 1 3 No newline at end of file
@@ -0,0 +1,5
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=0
3 RELEASE=buster
4 BUILD_KERNEL=true
5 # ENABLE_BLUETOOTH=false
@@ -0,0 +1,5
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=0
3 RELEASE=stretch
4 BUILD_KERNEL=true
5 # ENABLE_BLUETOOTH=false
@@ -0,0 +1,4
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=1P
3 RELEASE=buster
4 BUILD_KERNEL=true
@@ -0,0 +1,4
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=1P
3 RELEASE=stretch
4 BUILD_KERNEL=true
@@ -0,0 +1,4
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=2
3 RELEASE=stretch
4 BUILD_KERNEL=true
@@ -0,0 +1,6
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=3P
3 RELEASE=buster
4 BUILD_KERNEL=true
5 # ENABLE_WIRELESS=false
6 # ENABLE_BLUETOOTH=false
@@ -0,0 +1,6
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=3P
3 RELEASE=stretch
4 BUILD_KERNEL=true
5 # ENABLE_WIRELESS=false
6 # ENABLE_BLUETOOTH=false
@@ -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,491 +1,501
1 # rpi23-gen-image
1 # rpi23-gen-image
2 ## Introduction
2 ## Introduction
3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for all Raspberry Pi computers. The script at this time supports the bootstrapping of the Debian (armhf/armel) releases `stretch` and `buster`. Raspberry Pi 0/1/2/3 images are generated for 32-bit mode only. Raspberry Pi 3 supports 64-bit images that can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
3
4
4 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `jessie`, `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.11.y```).
5
5
6 ## Build dependencies
6 ## Build dependencies
7 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 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.
8
8
9 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
9 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
10
10
11 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 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the Raspberry 3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf/armel) cross-compiler toolchain.
12
12
13 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package on Debian Linux `jessie` and `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
13 The script has been tested using the default `crossbuild-essential-armhf` and `crossbuild-essential-armel` toolchain meta packages on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
14
15 If a Debian Linux `jessie` build system is used it will be required to add the [Debian Cross-toolchains repository](http://emdebian.org/tools/debian/) first:
16
17 ```
18 echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/crosstools.list
19 sudo -u nobody wget -O - http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
20 dpkg --add-architecture armhf
21 apt-get update
22 ```
23
14
24 ## Command-line parameters
15 ## Command-line parameters
25 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 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.
26
17
27 ##### Command-line examples:
18 ##### Command-line examples:
28 ```shell
19 ```shell
29 ENABLE_UBOOT=true ./rpi23-gen-image.sh
20 ENABLE_UBOOT=true ./rpi23-gen-image.sh
30 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
21 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
31 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
22 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
32 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
23 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
33 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
24 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
34 ENABLE_MINBASE=true ./rpi23-gen-image.sh
25 ENABLE_MINBASE=true ./rpi23-gen-image.sh
35 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
26 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
36 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
27 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
37 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
28 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
38 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 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
39 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
30 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
40 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
31 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
41 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
32 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
42 ```
33 ```
43
34
44 ## Configuration template files
35 ## Configuration template files
45 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 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.
46
37
47 ##### Command-line examples:
38 ##### Command-line examples:
48 ```shell
39 ```shell
49 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
40 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
50 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
41 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
51 ```
42 ```
52
43
53 ## Supported parameters and settings
44 ## Supported parameters and settings
54 #### APT settings:
45 #### APT settings:
55 ##### `APT_SERVER`="ftp.debian.org"
46 ##### `APT_SERVER`="ftp.debian.org"
56 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 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.
57
48
58 ##### `APT_PROXY`=""
49 ##### `APT_PROXY`=""
59 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.
50 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.
60
51
61 ##### `APT_INCLUDES`=""
52 ##### `APT_INCLUDES`=""
62 A comma separated list of additional packages to be installed by debootstrap during bootstrapping.
53 A comma-separated list of additional packages to be installed by debootstrap during bootstrapping.
63
54
64 ##### `APT_INCLUDES_LATE`=""
55 ##### `APT_INCLUDES_LATE`=""
65 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 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.
66
57
67 ---
58 ---
68
59
69 #### General system settings:
60 #### General system settings:
61 ##### `SET_ARCH`=32
62 Set Architecture to default 32bit. If you want to compile 64-bit (RPI3 or RPI3+) set it to `64`. This option will set every needed cross-compiler or board specific option for a successful build.
63
70 ##### `RPI_MODEL`=2
64 ##### `RPI_MODEL`=2
71 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
65 Specify the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
72 `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
66 - `0` = Raspberry Pi 0 and Raspberry Pi 0 W
73 `1` = Used for Pi 1 model A and B
67 - `1` = Raspberry Pi 1 model A and B
74 `1P` = Used for Pi 1 model B+ and A+
68 - `1P` = Raspberry Pi 1 model B+ and A+
75 `2` = Used for Pi 2 model B
69 - `2` = Raspberry Pi 2 model B
76 `3` = Used for Pi 3 model B
70 - `3` = Raspberry Pi 3 model B
77 `3P` = Used for Pi 3 model B+
71 - `3P` = Raspberry Pi 3 model B+
78 `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
72
79
73 ##### `RELEASE`="buster"
80 ##### `RELEASE`="jessie"
74 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
81 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases "jessie", "stretch" and "buster". `BUILD_KERNEL`=true will automatically be set if the Debian releases `stretch` or `buster` are used.
82
75
83 ##### `RELEASE_ARCH`="armhf"
76 ##### `RELEASE_ARCH`="armhf"
84 Set the desired Debian release architecture.
77 Set the desired Debian release architecture.
85
78
86 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
79 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
87 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
80 Set system hostname. It's recommended that the hostname is unique in the corresponding subnet.
88
81
89 ##### `PASSWORD`="raspberry"
82 ##### `PASSWORD`="raspberry"
90 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
83 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
91
84
92 ##### `USER_PASSWORD`="raspberry"
85 ##### `USER_PASSWORD`="raspberry"
93 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
86 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.
94
87
95 ##### `DEFLOCAL`="en_US.UTF-8"
88 ##### `DEFLOCAL`="en_US.UTF-8"
96 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
89 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`.
97
90
98 ##### `TIMEZONE`="Europe/Berlin"
91 ##### `TIMEZONE`="Europe/Berlin"
99 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
92 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.
100
93
101 ##### `EXPANDROOT`=true
94 ##### `EXPANDROOT`=true
102 Expand the root partition and filesystem automatically on first boot.
95 Expand the root partition and filesystem automatically on first boot.
103
96
104 ##### `ENABLE_QEMU`=false
97 ##### `ENABLE_QEMU`=false
105 Generate kernel (`vexpress_defconfig`), file system image (`qcow2`) and DTB files that can be used for QEMU full system emulation (`vexpress-A15`). The output files are stored in the `$(pwd)/images/qemu` directory. You can find more information about running the generated image in the QEMU section of this readme file.
98 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.
106
99
107 ---
100 ---
108
101
109 #### Keyboard settings:
102 #### Keyboard settings:
110 These options are used to configure keyboard layout in `/etc/default/keyboard` for console and Xorg. These settings can also be changed inside the running OS using the `dpkg-reconfigure keyboard-configuration` command.
103 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.
111
104
112 ##### `XKB_MODEL`=""
105 ##### `XKB_MODEL`=""
113 Set the name of the model of your keyboard type.
106 Set the name of the model of your keyboard type.
114
107
115 ##### `XKB_LAYOUT`=""
108 ##### `XKB_LAYOUT`=""
116 Set the supported keyboard layout(s).
109 Set the supported keyboard layout(s).
117
110
118 ##### `XKB_VARIANT`=""
111 ##### `XKB_VARIANT`=""
119 Set the supported variant(s) of the keyboard layout(s).
112 Set the supported variant(s) of the keyboard layout(s).
120
113
121 ##### `XKB_OPTIONS`=""
114 ##### `XKB_OPTIONS`=""
122 Set extra xkb configuration options.
115 Set extra xkb configuration options.
123
116
124 ---
117 ---
125
118
126 #### Networking settings (DHCP):
119 #### Networking settings (DHCP):
127 This parameter is used to set up networking auto configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
120 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`.`
128
121
129 ##### `ENABLE_DHCP`=true
122 ##### `ENABLE_DHCP`=true
130 Set the system to use DHCP. This requires an DHCP server.
123 Set the system to use DHCP. This requires an DHCP server.
131
124
132 ---
125 ---
133
126
134 #### Networking settings (static):
127 #### Networking settings (static):
135 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
128 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`.
136
129
137 ##### `NET_ADDRESS`=""
130 ##### `NET_ADDRESS`=""
138 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
131 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
139
132
140 ##### `NET_GATEWAY`=""
133 ##### `NET_GATEWAY`=""
141 Set the IP address for the default gateway.
134 Set the IP address for the default gateway.
142
135
143 ##### `NET_DNS_1`=""
136 ##### `NET_DNS_1`=""
144 Set the IP address for the first DNS server.
137 Set the IP address for the first DNS server.
145
138
146 ##### `NET_DNS_2`=""
139 ##### `NET_DNS_2`=""
147 Set the IP address for the second DNS server.
140 Set the IP address for the second DNS server.
148
141
149 ##### `NET_DNS_DOMAINS`=""
142 ##### `NET_DNS_DOMAINS`=""
150 Set the default DNS search domains to use for non fully qualified host names.
143 Set the default DNS search domains to use for non fully qualified hostnames.
151
144
152 ##### `NET_NTP_1`=""
145 ##### `NET_NTP_1`=""
153 Set the IP address for the first NTP server.
146 Set the IP address for the first NTP server.
154
147
155 ##### `NET_NTP_2`=""
148 ##### `NET_NTP_2`=""
156 Set the IP address for the second NTP server.
149 Set the IP address for the second NTP server.
157
150
158 ---
151 ---
159
152
160 #### Basic system features:
153 #### Basic system features:
161 ##### `ENABLE_CONSOLE`=true
154 ##### `ENABLE_CONSOLE`=true
162 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.
155 Enable serial console interface. Recommended if no monitor or keyboard is connected to the RPi2/3. In case of problems fe. if the network (auto) configuration failed - the serial console can be used to access the system. On RPI `0` `3` `3P` the CPU speed is locked at lowest speed.
156
157 ##### `ENABLE_PRINTK`=false
158 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
159
160 ##### `ENABLE_BLUETOOTH`=false
161 Enable onboard Bluetooth interface on the RPi0/3/3P. See: [Configuring the GPIO serial port on Raspbian jessie and stretch](https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/).
162
163 ##### `ENABLE_MINIUART_OVERLAY`=false
164 Enable Bluetooth to use this. Adds overlay to swap UART0 with UART1. Enabling (slower) Bluetooth and full speed serial console. - RPI `0` `3` `3P` have a fast `hardware UART0` (ttyAMA0) and a `mini UART1` (ttyS0)! RPI `1` `1P` `2` only have a `hardware UART0`. `UART0` is considered better, because is faster and more stable than `mini UART1`. By default the Bluetooth modem is mapped to the `hardware UART0` and `mini UART` is used for console. The `mini UART` is a problem for the serial console, because its baudrate depends on the CPU frequency, which is changing on runtime. Resulting in a volatile baudrate and thus in an unusable serial console.
165
166 ##### `ENABLE_TURBO`=false
167 Enable Turbo mode. This setting locks cpu at the highest frequency. As setting ENABLE_CONSOLE=true locks RPI to lowest CPU speed, this is can be used additionally to lock cpu hat max speed. Need a good power supply and probably cooling for the Raspberry PI.
163
168
164 ##### `ENABLE_I2C`=false
169 ##### `ENABLE_I2C`=false
165 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.
170 Enable I2C interface on the RPi 0/1/2/3. Please check the [RPi 0/1/2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
166
171
167 ##### `ENABLE_SPI`=false
172 ##### `ENABLE_SPI`=false
168 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.
173 Enable SPI interface on the RPi 0/1/2/3. Please check the [RPi 0/1/2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
169
174
170 ##### `ENABLE_IPV6`=true
175 ##### `ENABLE_IPV6`=true
171 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
176 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
172
177
173 ##### `ENABLE_SSHD`=true
178 ##### `ENABLE_SSHD`=true
174 Install and enable OpenSSH service. The default configuration of the service doesn't allow `root` to login. Please use the user `pi` instead and `su -` or `sudo` to execute commands as root.
179 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.
175
180
176 ##### `ENABLE_NONFREE`=false
181 ##### `ENABLE_NONFREE`=false
177 Allow the installation of non-free Debian packages that do not comply with the DFSG. This is required to install closed-source firmware binary blobs.
182 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.
178
183
179 ##### `ENABLE_WIRELESS`=false
184 ##### `ENABLE_WIRELESS`=false
180 Download and install the [closed-source firmware binary blob](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm) that is required to run the internal wireless interface of the Raspberry Pi model `3`. This parameter is ignored if the specified `RPI_MODEL` is not `3`.
185 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`.
181
186
182 ##### `ENABLE_RSYSLOG`=true
187 ##### `ENABLE_RSYSLOG`=true
183 If set to false, disable and uninstall rsyslog (so logs will be available only
188 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
184 in journal files)
185
189
186 ##### `ENABLE_SOUND`=true
190 ##### `ENABLE_SOUND`=true
187 Enable sound hardware and install Advanced Linux Sound Architecture.
191 Enable sound hardware and install Advanced Linux Sound Architecture.
188
192
189 ##### `ENABLE_HWRANDOM`=true
193 ##### `ENABLE_HWRANDOM`=true
190 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
194 Enable Hardware Random Number Generator. Strong random numbers are important for most network-based communications that use encryption. It's recommended to be enabled.
191
195
192 ##### `ENABLE_MINGPU`=false
196 ##### `ENABLE_MINGPU`=false
193 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
197 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
194
198
195 ##### `ENABLE_DBUS`=true
199 ##### `ENABLE_DBUS`=true
196 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
200 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
197
201
198 ##### `ENABLE_XORG`=false
202 ##### `ENABLE_XORG`=false
199 Install Xorg open-source X Window System.
203 Install Xorg open-source X Window System.
200
204
201 ##### `ENABLE_WM`=""
205 ##### `ENABLE_WM`=""
202 Install a user defined window manager for the X Window System. To make sure all X related package dependencies are getting installed `ENABLE_XORG` will automatically get enabled if `ENABLE_WM` is used. The `rpi23-gen-image.sh` script has been tested with the following list of window managers: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
206 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`.
207
208 ##### `ENABLE_SYSVINIT`=false
209 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
203
210
204 ---
211 ---
205
212
206 #### Advanced system features:
213 #### Advanced system features:
207 ##### `ENABLE_MINBASE`=false
214 ##### `ENABLE_MINBASE`=false
208 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
215 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
209
216
210 ##### `ENABLE_REDUCE`=false
217 ##### `ENABLE_REDUCE`=false
211 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
218 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
212
219
213 ##### `ENABLE_UBOOT`=false
220 ##### `ENABLE_UBOOT`=false
214 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.
221 Replace the default RPi 0/1/2/3 second stage bootloader (bootcode.bin) with [U-Boot bootloader](https://git.denx.de/?p=u-boot.git;a=summary). U-Boot can boot images via the network using the BOOTP/TFTP protocol.
215
222
216 ##### `UBOOTSRC_DIR`=""
223 ##### `UBOOTSRC_DIR`=""
217 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.
224 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.
218
225
219 ##### `ENABLE_FBTURBO`=false
226 ##### `ENABLE_FBTURBO`=false
220 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.
227 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.
221
228
222 ##### `FBTURBOSRC_DIR`=""
229 ##### `FBTURBOSRC_DIR`=""
223 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.
230 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.
224
231
232 ##### `ENABLE_VIDEOCORE`=false
233 Install and enable the [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) `vcgencmd`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
234
235 ##### `VIDEOCORESRC_DIR`=""
236 Path to a directory (`userland`) of [ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
237
225 ##### `ENABLE_IPTABLES`=false
238 ##### `ENABLE_IPTABLES`=false
226 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
239 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
227
240
228 ##### `ENABLE_USER`=true
241 ##### `ENABLE_USER`=true
229 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
242 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, the username will be `pi`.
230
243
231 ##### `USER_NAME`=pi
244 ##### `USER_NAME`=pi
232 Non-root user to create. Ignored if `ENABLE_USER`=false
245 Non-root user to create. Ignored if `ENABLE_USER`=false
233
246
234 ##### `ENABLE_ROOT`=false
247 ##### `ENABLE_ROOT`=false
235 Set root user password so root login will be enabled
248 Set root user password so root login will be enabled
236
249
237 ##### `ENABLE_HARDNET`=false
250 ##### `ENABLE_HARDNET`=false
238 Enable IPv4/IPv6 network stack hardening settings.
251 Enable IPv4/IPv6 network stack hardening settings.
239
252
240 ##### `ENABLE_SPLITFS`=false
253 ##### `ENABLE_SPLITFS`=false
241 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
254 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
242
255
243 ##### `CHROOT_SCRIPTS`=""
256 ##### `CHROOT_SCRIPTS`=""
244 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.
257 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.
245
258
246 ##### `ENABLE_INITRAMFS`=false
259 ##### `ENABLE_INITRAMFS`=false
247 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.
260 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.
248
261
249 ##### `ENABLE_IFNAMES`=true
262 ##### `ENABLE_IFNAMES`=true
250 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names. This parameter is only supported if the Debian releases `stretch` or `buster` are used.
263 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
251
264
252 ##### `DISABLE_UNDERVOLT_WARNINGS`=
265 ##### `DISABLE_UNDERVOLT_WARNINGS`=
253 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.
266 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.
254
267
255 ---
268 ---
256
269
257 #### SSH settings:
270 #### SSH settings:
258 ##### `SSH_ENABLE_ROOT`=false
271 ##### `SSH_ENABLE_ROOT`=false
259 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`.
272 Enable password-based root login via SSH. This may be a security risk with the default password set, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
260
273
261 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
274 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
262 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
275 Disable password-based SSH authentication. Only public key based SSH (v2) authentication will be supported.
263
276
264 ##### `SSH_LIMIT_USERS`=false
277 ##### `SSH_LIMIT_USERS`=false
265 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).
278 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).
266
279
267 ##### `SSH_ROOT_PUB_KEY`=""
280 ##### `SSH_ROOT_PUB_KEY`=""
268 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`.
281 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`.
269
282
270 ##### `SSH_USER_PUB_KEY`=""
283 ##### `SSH_USER_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 `USER_NAME`=pi. The specified file can also contain multiple SSH (v2) public keys. SSH protocol version 1 is not supported.
284 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.
272
285
273 ---
286 ---
274
287
275 #### Kernel compilation:
288 #### Kernel compilation:
276 ##### `BUILD_KERNEL`=false
289 ##### `BUILD_KERNEL`=true
277 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used. `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` is used.
290 Build and install the latest RPi 0/1/2/3 Linux kernel. Currently only the default RPi 0/1/2/3 kernel configuration is used.
278
291
279 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
292 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
280 This sets the cross compile enviornment for the compiler.
293 This sets the cross-compile environment for the compiler.
281
294
282 ##### `KERNEL_ARCH`="arm"
295 ##### `KERNEL_ARCH`="arm"
283 This sets the kernel architecture for the compiler.
296 This sets the kernel architecture for the compiler.
284
297
285 ##### `KERNEL_IMAGE`="kernel7.img"
298 ##### `KERNEL_IMAGE`="kernel7.img"
286 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.
299 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.
287
300
288 ##### `KERNEL_BRANCH`=""
301 ##### `KERNEL_BRANCH`=""
289 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
302 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
290
303
291 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
304 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
292 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.
305 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.
293
306
294 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
307 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
295 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
308 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
296
309
297 ##### `KERNEL_REDUCE`=false
310 ##### `KERNEL_REDUCE`=false
298 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
311 Reduce the size of the generated kernel by removing unwanted devices, network and filesystem drivers (experimental).
299
312
300 ##### `KERNEL_THREADS`=1
313 ##### `KERNEL_THREADS`=1
301 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.
314 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.
302
315
303 ##### `KERNEL_HEADERS`=true
316 ##### `KERNEL_HEADERS`=true
304 Install kernel headers with built kernel.
317 Install kernel headers with the built kernel.
305
318
306 ##### `KERNEL_MENUCONFIG`=false
319 ##### `KERNEL_MENUCONFIG`=false
307 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
320 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
308
321
309 ##### `KERNEL_OLDDEFCONFIG`=false
322 ##### `KERNEL_OLDDEFCONFIG`=false
310 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
323 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
311
324
312 ##### `KERNEL_CCACHE`=false
325 ##### `KERNEL_CCACHE`=false
313 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
326 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
314
327
315 ##### `KERNEL_REMOVESRC`=true
328 ##### `KERNEL_REMOVESRC`=true
316 Remove all kernel sources from the generated OS image after it was built and installed.
329 Remove all kernel sources from the generated OS image after it was built and installed.
317
330
318 ##### `KERNELSRC_DIR`=""
331 ##### `KERNELSRC_DIR`=""
319 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.
332 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.
320
333
321 ##### `KERNELSRC_CLEAN`=false
334 ##### `KERNELSRC_CLEAN`=false
322 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.
335 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.
323
336
324 ##### `KERNELSRC_CONFIG`=true
337 ##### `KERNELSRC_CONFIG`=true
325 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.
338 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.
326
339
327 ##### `KERNELSRC_USRCONFIG`=""
340 ##### `KERNELSRC_USRCONFIG`=""
328 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
341 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
329
342
330 ##### `KERNELSRC_PREBUILT`=false
343 ##### `KERNELSRC_PREBUILT`=false
331 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.
344 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.
332
345
333 ##### `RPI_FIRMWARE_DIR`=""
346 ##### `RPI_FIRMWARE_DIR`=""
334 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.
347 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.
335
348
336 ---
349 ---
337
350
338 #### Reduce disk usage:
351 #### Reduce disk usage:
339 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
352 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
340
353
341 ##### `REDUCE_APT`=true
354 ##### `REDUCE_APT`=true
342 Configure APT to use compressed package repository lists and no package caching files.
355 Configure APT to use compressed package repository lists and no package caching files.
343
356
344 ##### `REDUCE_DOC`=true
357 ##### `REDUCE_DOC`=true
345 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
358 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
346
359
347 ##### `REDUCE_MAN`=true
360 ##### `REDUCE_MAN`=true
348 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
361 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
349
362
350 ##### `REDUCE_VIM`=false
363 ##### `REDUCE_VIM`=false
351 Replace `vim-tiny` package by `levee` a tiny vim clone.
364 Replace `vim-tiny` package by `levee` a tiny vim clone.
352
365
353 ##### `REDUCE_BASH`=false
366 ##### `REDUCE_BASH`=false
354 Remove `bash` package and switch to `dash` shell (experimental).
367 Remove `bash` package and switch to `dash` shell (experimental).
355
368
356 ##### `REDUCE_HWDB`=true
369 ##### `REDUCE_HWDB`=true
357 Remove PCI related hwdb files (experimental).
370 Remove PCI related hwdb files (experimental).
358
371
359 ##### `REDUCE_SSHD`=true
372 ##### `REDUCE_SSHD`=true
360 Replace `openssh-server` with `dropbear`.
373 Replace `openssh-server` with `dropbear`.
361
374
362 ##### `REDUCE_LOCALE`=true
375 ##### `REDUCE_LOCALE`=true
363 Remove all `locale` translation files.
376 Remove all `locale` translation files.
364
377
365 ---
378 ---
366
379
367 #### Encrypted root partition:
380 #### Encrypted root partition:
368 ##### `ENABLE_CRYPTFS`=false
381 ##### `ENABLE_CRYPTFS`=false
369 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.
382 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.
370
383
371 ##### `CRYPTFS_PASSWORD`=""
384 ##### `CRYPTFS_PASSWORD`=""
372 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
385 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
373
386
374 ##### `CRYPTFS_MAPPING`="secure"
387 ##### `CRYPTFS_MAPPING`="secure"
375 Set name of dm-crypt managed device-mapper mapping.
388 Set name of dm-crypt managed device-mapper mapping.
376
389
377 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
390 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
378 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
391 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
379
392
380 ##### `CRYPTFS_XTSKEYSIZE`=512
393 ##### `CRYPTFS_XTSKEYSIZE`=512
381 Sets key size in bits. The argument has to be a multiple of 8.
394 Sets key size in bits. The argument has to be a multiple of 8.
382
395
383 ---
396 ---
384
397
385 #### Build settings:
398 #### Build settings:
386 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
399 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
387 Set a path to a working directory used by the script to generate an image.
400 Set a path to a working directory used by the script to generate an image.
388
401
389 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
402 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
390 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.
403 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.
391
404
392 ## Understanding the script
405 ## Understanding the script
393 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:
406 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:
394
407
395 | Script | Description |
408 | Script | Description |
396 | --- | --- |
409 | --- | --- |
397 | `10-bootstrap.sh` | Debootstrap basic system |
410 | `10-bootstrap.sh` | Debootstrap basic system |
398 | `11-apt.sh` | Setup APT repositories |
411 | `11-apt.sh` | Setup APT repositories |
399 | `12-locale.sh` | Setup Locales and keyboard settings |
412 | `12-locale.sh` | Setup Locales and keyboard settings |
400 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
413 | `13-kernel.sh` | Build and install RPi 0/1/2/3 Kernel |
401 | `14-fstab.sh` | Setup fstab and initramfs |
414 | `14-fstab.sh` | Setup fstab and initramfs |
402 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
415 | `15-rpi-config.sh` | Setup RPi 0/1/2/3 config and cmdline |
403 | `20-networking.sh` | Setup Networking |
416 | `20-networking.sh` | Setup Networking |
404 | `21-firewall.sh` | Setup Firewall |
417 | `21-firewall.sh` | Setup Firewall |
405 | `30-security.sh` | Setup Users and Security settings |
418 | `30-security.sh` | Setup Users and Security settings |
406 | `31-logging.sh` | Setup Logging |
419 | `31-logging.sh` | Setup Logging |
407 | `32-sshd.sh` | Setup SSH and public keys |
420 | `32-sshd.sh` | Setup SSH and public keys |
408 | `41-uboot.sh` | Build and Setup U-Boot |
421 | `41-uboot.sh` | Build and Setup U-Boot |
409 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
422 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
423 | `43-videocore.sh` | Build and Setup videocore libraries |
410 | `50-firstboot.sh` | First boot actions |
424 | `50-firstboot.sh` | First boot actions |
411 | `99-reduce.sh` | Reduce the disk space usage |
425 | `99-reduce.sh` | Reduce the disk space usage |
412
426
413 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.
427 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.
414
428
415 | Directory | Description |
429 | Directory | Description |
416 | --- | --- |
430 | --- | --- |
417 | `apt` | APT management configuration files |
431 | `apt` | APT management configuration files |
418 | `boot` | Boot and RPi2/3 configuration files |
432 | `boot` | Boot and RPi 0/1/2/3 configuration files |
419 | `dpkg` | Package Manager configuration |
433 | `dpkg` | Package Manager configuration |
420 | `etc` | Configuration files and rc scripts |
434 | `etc` | Configuration files and rc scripts |
421 | `firstboot` | Scripts that get executed on first boot |
435 | `firstboot` | Scripts that get executed on first boot |
422 | `initramfs` | Initramfs scripts |
436 | `initramfs` | Initramfs scripts |
423 | `iptables` | Firewall configuration files |
437 | `iptables` | Firewall configuration files |
424 | `locales` | Locales configuration |
438 | `locales` | Locales configuration |
425 | `modules` | Kernel Modules configuration |
439 | `modules` | Kernel Modules configuration |
426 | `mount` | Fstab configuration |
440 | `mount` | Fstab configuration |
427 | `network` | Networking configuration files |
441 | `network` | Networking configuration files |
428 | `sysctl.d` | Swapping and Network Hardening configuration |
442 | `sysctl.d` | Swapping and Network Hardening configuration |
429 | `xorg` | fbturbo Xorg driver configuration |
443 | `xorg` | fbturbo Xorg driver configuration |
430
444
431 ## Custom packages and scripts
445 ## Custom packages and scripts
432 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`.
446 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`.
433
447
434 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
448 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
435
449
436 ## Logging of the bootstrapping process
450 ## Logging of the bootstrapping process
437 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:
451 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:
438
452
439 ```shell
453 ```shell
440 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
454 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
441 ```
455 ```
442
456
443 ## Flashing the image file
457 ## Flashing the image file
444 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`.
458 After the image file was successfully created by the `rpi23-gen-image.sh` script it can be copied to the microSD card that will be used by the RPi 0/1/2/3 computer. This can be performed by using the tools `bmaptool` or `dd`. Using `bmaptool` will probably speed-up the copy process because `bmaptool` copies more wisely than `dd`.
445
459
446 ##### Flashing examples:
460 ##### Flashing examples:
447 ```shell
461 ```shell
448 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie.img /dev/mmcblk0
462 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
449 dd bs=4M if=./images/jessie/2017-01-23-rpi3-jessie.img of=/dev/mmcblk0
463 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
450 ```
464 ```
451 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
465 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
452 ```shell
466 ```shell
453 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-frmw.img /dev/mmcblk0
467 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
454 bmaptool copy ./images/jessie/2017-01-23-rpi3-jessie-root.img /dev/sdc
468 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
455 ```
469 ```
456
470
457 ## QEMU emulation
471 ## QEMU emulation
458 Start QEMU full system emulation:
472 Start QEMU full system emulation:
459 ```shell
473 ```shell
460 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"
474 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=tty1"
461 ```
475 ```
462
476
463 Start QEMU full system emulation and output to console:
477 Start QEMU full system emulation and output to console:
464 ```shell
478 ```shell
465 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
479 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
466 ```
480 ```
467
481
468 Start QEMU full system emulation with SMP and output to console:
482 Start QEMU full system emulation with SMP and output to console:
469 ```shell
483 ```shell
470 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
484 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
471 ```
485 ```
472
486
473 Start QEMU full system emulation with cryptfs, initramfs and output to console:
487 Start QEMU full system emulation with cryptfs, initramfs and output to console:
474 ```shell
488 ```shell
475 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
489 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
476 ```
490 ```
477
491
478 ## Weekly image builds
479 The image files are provided by JRWR'S I/O PORT and are built once a Sunday at midnight UTC!
480 * [Debian Stretch Raspberry Pi2/3 Weekly Image Builds](https://jrwr.io/doku.php?id=projects:debianpi)
481
482 ## External links and references
492 ## External links and references
483 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
493 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
484 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
494 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
485 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
495 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
486 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
496 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
487 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
497 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
488 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
498 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
489 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
499 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
490 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
500 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
491 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
501 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,47 +1,41
1 #
1 #
2 # Debootstrap basic system
2 # Debootstrap basic system
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 VARIANT=""
8 VARIANT=""
9 COMPONENTS="main"
9 COMPONENTS="main"
10 EXCLUDES=""
11
10
12 # Use non-free Debian packages if needed
11 # Use non-free Debian packages if needed
13 if [ "$ENABLE_NONFREE" = true ] ; then
12 if [ "$ENABLE_NONFREE" = true ] ; then
14 COMPONENTS="main,non-free,contrib"
13 COMPONENTS="main,non-free,contrib"
15 fi
14 fi
16
15
17 # Use minbase bootstrap variant which only includes essential packages
16 # Use minbase bootstrap variant which only includes essential packages
18 if [ "$ENABLE_MINBASE" = true ] ; then
17 if [ "$ENABLE_MINBASE" = true ] ; then
19 VARIANT="--variant=minbase"
18 VARIANT="--variant=minbase"
20 fi
19 fi
21
20
22 # Exclude packages if required by Debian release
23 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
24 EXCLUDES="--exclude=init,systemd-sysv"
25 fi
26
27 # Base debootstrap (unpack only)
21 # Base debootstrap (unpack only)
28 http_proxy=${APT_PROXY} debootstrap ${EXCLUDES} --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian"
22 http_proxy=${APT_PROXY} debootstrap ${APT_EXCLUDES} --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian"
29
23
30 # Copy qemu emulator binary to chroot
24 # Copy qemu emulator binary to chroot
31 install -m 755 -o root -g root "${QEMU_BINARY}" "${R}${QEMU_BINARY}"
25 install -m 755 -o root -g root "${QEMU_BINARY}" "${R}${QEMU_BINARY}"
32
26
33 # Copy debian-archive-keyring.pgp
27 # Copy debian-archive-keyring.pgp
34 mkdir -p "${R}/usr/share/keyrings"
28 mkdir -p "${R}/usr/share/keyrings"
35 install_readonly /usr/share/keyrings/debian-archive-keyring.gpg "${R}/usr/share/keyrings/debian-archive-keyring.gpg"
29 install_readonly /usr/share/keyrings/debian-archive-keyring.gpg "${R}/usr/share/keyrings/debian-archive-keyring.gpg"
36
30
37 # Complete the bootstrapping process
31 # Complete the bootstrapping process
38 chroot_exec /debootstrap/debootstrap --second-stage
32 chroot_exec /debootstrap/debootstrap --second-stage
39
33
40 # Mount required filesystems
34 # Mount required filesystems
41 mount -t proc none "${R}/proc"
35 mount -t proc none "${R}/proc"
42 mount -t sysfs none "${R}/sys"
36 mount -t sysfs none "${R}/sys"
43
37
44 # Mount pseudo terminal slave if supported by Debian release
38 # Mount pseudo terminal slave if supported by Debian release
45 if [ -d "${R}/dev/pts" ] ; then
39 if [ -d "${R}/dev/pts" ] ; then
46 mount --bind /dev/pts "${R}/dev/pts"
40 mount --bind /dev/pts "${R}/dev/pts"
47 fi
41 fi
@@ -1,56 +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 # Install APT pinning configuration for flash-kernel package
16 install_readonly files/apt/flash-kernel "${ETC_DIR}/apt/preferences.d/flash-kernel"
17
18 # Install APT sources.list
19 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
20 echo "deb ${COLLABORA_URL} ${RELEASE} rpi2" >> "${ETC_DIR}/apt/sources.list"
21
22 # Upgrade collabora package index and install collabora keyring
23 chroot_exec apt-get -qq -y update
24 # Removed --allow-unauthenticated as suggested after modification on _apt privileges
25 chroot_exec apt-get -qq -y install collabora-obs-archive-keyring
26 else # BUILD_KERNEL=true
27 # Install APT sources.list
28 install_readonly files/apt/sources.list "${ETC_DIR}/apt/sources.list"
29
30 # Use specified APT server and release
31 sed -i "s/\/ftp.debian.org\//\/${APT_SERVER}\//" "${ETC_DIR}/apt/sources.list"
32 sed -i "s/ jessie/ ${RELEASE}/" "${ETC_DIR}/apt/sources.list"
33 fi
34
35 # Allow the installation of non-free Debian packages
36 if [ "$ENABLE_NONFREE" = true ] ; then
37 sed -i "s/ contrib/ contrib non-free/" "${ETC_DIR}/apt/sources.list"
38 fi
39
40 # Upgrade package index and update all installed packages and changed dependencies
14 # Upgrade package index and update all installed packages and changed dependencies
41 chroot_exec apt-get -qq -y update
15 chroot_exec apt-get -qq -y update
42 chroot_exec apt-get -qq -y -u dist-upgrade
16 chroot_exec apt-get -qq -y -u dist-upgrade
43
17
18 # Install additional packages
44 if [ "$APT_INCLUDES_LATE" ] ; then
19 if [ "$APT_INCLUDES_LATE" ] ; then
45 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 , ' ')"
46 fi
21 fi
47
22
23 # Install Debian custom packages
48 if [ -d packages ] ; then
24 if [ -d packages ] ; then
49 for package in packages/*.deb ; do
25 for package in packages/*.deb ; do
50 cp $package ${R}/tmp
26 cp "$package" "${R}"/tmp
51 chroot_exec dpkg --unpack /tmp/$(basename $package)
27 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
52 done
28 done
53 fi
29 fi
30
54 chroot_exec apt-get -qq -y -f install
31 chroot_exec apt-get -qq -y -f install
55
32
56 chroot_exec apt-get -qq -y check
33 chroot_exec apt-get -qq -y check
@@ -1,58 +1,58
1 #
1 #
2 # Setup Locales and keyboard settings
2 # Setup Locales and keyboard settings
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup timezone
8 # Install and setup timezone
9 echo ${TIMEZONE} > "${ETC_DIR}/timezone"
9 echo "${TIMEZONE}" > "${ETC_DIR}/timezone"
10 chroot_exec dpkg-reconfigure -f noninteractive tzdata
10 chroot_exec dpkg-reconfigure -f noninteractive tzdata
11
11
12 # Install and setup default locale and keyboard configuration
12 # Install and setup default locale and keyboard configuration
13 if [ $(echo "$APT_INCLUDES" | grep ",locales") ] ; then
13 if [ "$(echo "$APT_INCLUDES" | grep ",locales")" ] ; then
14 # Set locale choice in debconf db, even though dpkg-reconfigure ignores and overwrites them due to some bug
14 # Set locale choice in debconf db, even though dpkg-reconfigure ignores and overwrites them due to some bug
15 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=684134 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685957
15 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=684134 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685957
16 # ... so we have to set locales manually
16 # ... so we have to set locales manually
17 if [ "$DEFLOCAL" = "en_US.UTF-8" ] ; then
17 if [ "$DEFLOCAL" = "en_US.UTF-8" ] ; then
18 chroot_exec echo "locales locales/locales_to_be_generated multiselect ${DEFLOCAL} UTF-8" | debconf-set-selections
18 chroot_exec echo "locales locales/locales_to_be_generated multiselect ${DEFLOCAL} UTF-8" | debconf-set-selections
19 else
19 else
20 # en_US.UTF-8 should be available anyway : https://www.debian.org/doc/manuals/debian-reference/ch08.en.html#_the_reconfiguration_of_the_locale
20 # en_US.UTF-8 should be available anyway : https://www.debian.org/doc/manuals/debian-reference/ch08.en.html#_the_reconfiguration_of_the_locale
21 chroot_exec echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8, ${DEFLOCAL} UTF-8" | debconf-set-selections
21 chroot_exec echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8, ${DEFLOCAL} UTF-8" | debconf-set-selections
22 sed -i "/en_US.UTF-8/s/^#//" "${ETC_DIR}/locale.gen"
22 sed -i "/en_US.UTF-8/s/^#//" "${ETC_DIR}/locale.gen"
23 fi
23 fi
24
24
25 sed -i "/${DEFLOCAL}/s/^#//" "${ETC_DIR}/locale.gen"
25 sed -i "/${DEFLOCAL}/s/^#//" "${ETC_DIR}/locale.gen"
26 chroot_exec echo "locales locales/default_environment_locale select ${DEFLOCAL}" | debconf-set-selections
26 chroot_exec echo "locales locales/default_environment_locale select ${DEFLOCAL}" | debconf-set-selections
27 chroot_exec locale-gen
27 chroot_exec locale-gen
28 chroot_exec update-locale LANG="${DEFLOCAL}"
28 chroot_exec update-locale LANG="${DEFLOCAL}"
29
29
30 # Install and setup default keyboard configuration
30 # Install and setup default keyboard configuration
31 if [ "$XKB_MODEL" != "" ] ; then
31 if [ "$XKB_MODEL" != "" ] ; then
32 sed -i "s/^XKBMODEL.*/XKBMODEL=\"${XKB_MODEL}\"/" "${ETC_DIR}/default/keyboard"
32 sed -i "s/^XKBMODEL.*/XKBMODEL=\"${XKB_MODEL}\"/" "${ETC_DIR}/default/keyboard"
33 fi
33 fi
34 if [ "$XKB_LAYOUT" != "" ] ; then
34 if [ "$XKB_LAYOUT" != "" ] ; then
35 sed -i "s/^XKBLAYOUT.*/XKBLAYOUT=\"${XKB_LAYOUT}\"/" "${ETC_DIR}/default/keyboard"
35 sed -i "s/^XKBLAYOUT.*/XKBLAYOUT=\"${XKB_LAYOUT}\"/" "${ETC_DIR}/default/keyboard"
36 fi
36 fi
37 if [ "$XKB_VARIANT" != "" ] ; then
37 if [ "$XKB_VARIANT" != "" ] ; then
38 sed -i "s/^XKBVARIANT.*/XKBVARIANT=\"${XKB_VARIANT}\"/" "${ETC_DIR}/default/keyboard"
38 sed -i "s/^XKBVARIANT.*/XKBVARIANT=\"${XKB_VARIANT}\"/" "${ETC_DIR}/default/keyboard"
39 fi
39 fi
40 if [ "$XKB_OPTIONS" != "" ] ; then
40 if [ "$XKB_OPTIONS" != "" ] ; then
41 sed -i "s/^XKBOPTIONS.*/XKBOPTIONS=\"${XKB_OPTIONS}\"/" "${ETC_DIR}/default/keyboard"
41 sed -i "s/^XKBOPTIONS.*/XKBOPTIONS=\"${XKB_OPTIONS}\"/" "${ETC_DIR}/default/keyboard"
42 fi
42 fi
43 chroot_exec dpkg-reconfigure -f noninteractive keyboard-configuration
43 chroot_exec dpkg-reconfigure -f noninteractive keyboard-configuration
44
44
45 # Install and setup font console
45 # Install and setup font console
46 case "${DEFLOCAL}" in
46 case "${DEFLOCAL}" in
47 *UTF-8)
47 *UTF-8)
48 sed -i 's/^CHARMAP.*/CHARMAP="UTF-8"/' "${ETC_DIR}/default/console-setup"
48 sed -i 's/^CHARMAP.*/CHARMAP="UTF-8"/' "${ETC_DIR}/default/console-setup"
49 ;;
49 ;;
50 *)
50 *)
51 sed -i 's/^CHARMAP.*/CHARMAP="guess"/' "${ETC_DIR}/default/console-setup"
51 sed -i 's/^CHARMAP.*/CHARMAP="guess"/' "${ETC_DIR}/default/console-setup"
52 ;;
52 ;;
53 esac
53 esac
54 chroot_exec dpkg-reconfigure -f noninteractive console-setup
54 chroot_exec dpkg-reconfigure -f noninteractive console-setup
55 else # (no locales were installed)
55 else # (no locales were installed)
56 # Install POSIX default locale
56 # Install POSIX default locale
57 install_readonly files/locales/locale "${ETC_DIR}/default/locale"
57 install_readonly files/locales/locale "${ETC_DIR}/default/locale"
58 fi
58 fi
@@ -1,253 +1,255
1 #
1 #
2 # Build and Setup RPi2/3 Kernel
2 # Build and Setup RPi2/3 Kernel
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Fetch and build latest raspberry kernel
8 # Fetch and build latest raspberry kernel
9 if [ "$BUILD_KERNEL" = true ] ; then
9 if [ "$BUILD_KERNEL" = true ] ; then
10 # Setup source directory
10 # Setup source directory
11 mkdir -p "${R}/usr/src/linux"
11 mkdir -p "${KERNEL_DIR}"
12
12
13 # Copy existing kernel sources into chroot directory
13 # Copy existing kernel sources into chroot directory
14 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
14 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
15 # Copy kernel sources and include hidden files
15 # Copy kernel sources and include hidden files
16 cp -r "${KERNELSRC_DIR}/". "${R}/usr/src/linux"
16 cp -r "${KERNELSRC_DIR}/". "${KERNEL_DIR}"
17
17
18 # Clean the kernel sources
18 # Clean the kernel sources
19 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
19 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
20 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
20 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
21 fi
21 fi
22 else # KERNELSRC_DIR=""
22 else # KERNELSRC_DIR=""
23 # Create temporary directory for kernel sources
23 # Create temporary directory for kernel sources
24 temp_dir=$(as_nobody mktemp -d)
24 temp_dir=$(as_nobody mktemp -d)
25
25
26 # Fetch current RPi2/3 kernel sources
26 # Fetch current RPi2/3 kernel sources
27 if [ -z "${KERNEL_BRANCH}" ] ; then
27 if [ -z "${KERNEL_BRANCH}" ] ; then
28 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
28 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
29 else
29 else
30 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
30 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
31 fi
31 fi
32
32
33 # Copy downloaded kernel sources
33 # Copy downloaded kernel sources
34 cp -r "${temp_dir}/linux/"* "${R}/usr/src/linux/"
34 cp -r "${temp_dir}/linux/"* "${KERNEL_DIR}"
35
35
36 # Remove temporary directory for kernel sources
36 # Remove temporary directory for kernel sources
37 rm -fr "${temp_dir}"
37 rm -fr "${temp_dir}"
38
38
39 # Set permissions of the kernel sources
39 # Set permissions of the kernel sources
40 chown -R root:root "${R}/usr/src"
40 chown -R root:root "${R}/usr/src"
41 fi
41 fi
42
42
43 # Calculate optimal number of kernel building threads
43 # Calculate optimal number of kernel building threads
44 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
44 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
45 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
45 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
46 fi
46 fi
47
47
48 # Configure and build kernel
48 # Configure and build kernel
49 if [ "$KERNELSRC_PREBUILT" = false ] ; then
49 if [ "$KERNELSRC_PREBUILT" = false ] ; then
50 # Remove device, network and filesystem drivers from kernel configuration
50 # Remove device, network and filesystem drivers from kernel configuration
51 if [ "$KERNEL_REDUCE" = true ] ; then
51 if [ "$KERNEL_REDUCE" = true ] ; then
52 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
52 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
53 sed -i\
53 sed -i\
54 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
54 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
55 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
55 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
56 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
56 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
57 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
57 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
58 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
58 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
59 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
59 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
60 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
60 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
61 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
61 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
62 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
62 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
63 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
63 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
64 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
64 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
65 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
65 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
66 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
66 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
67 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
67 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
68 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
68 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
69 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
69 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
70 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
70 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
71 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
71 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
72 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
72 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
73 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
73 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
74 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
74 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
75 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
75 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
76 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
76 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
77 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
77 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
78 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
78 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
79 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
79 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
80 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
80 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
81 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
81 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
82 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
82 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
83 "${KERNEL_DIR}/.config"
83 "${KERNEL_DIR}/.config"
84 fi
84 fi
85
85
86 if [ "$KERNELSRC_CONFIG" = true ] ; then
86 if [ "$KERNELSRC_CONFIG" = true ] ; then
87 # Load default raspberry kernel configuration
87 # Load default raspberry kernel configuration
88 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
88 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
89
89
90 # Set kernel configuration parameters to enable qemu emulation
90 # Set kernel configuration parameters to enable qemu emulation
91 if [ "$ENABLE_QEMU" = true ] ; then
91 if [ "$ENABLE_QEMU" = true ] ; then
92 echo "CONFIG_FHANDLE=y" >> ${KERNEL_DIR}/.config
92 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
93 echo "CONFIG_LBDAF=y" >> ${KERNEL_DIR}/.config
93 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
94
94
95 if [ "$ENABLE_CRYPTFS" = true ] ; then
95 if [ "$ENABLE_CRYPTFS" = true ] ; then
96 echo "CONFIG_EMBEDDED=y" >> ${KERNEL_DIR}/.config
96 {
97 echo "CONFIG_EXPERT=y" >> ${KERNEL_DIR}/.config
97 echo "CONFIG_EMBEDDED=y"
98 echo "CONFIG_DAX=y" >> ${KERNEL_DIR}/.config
98 echo "CONFIG_EXPERT=y"
99 echo "CONFIG_MD=y" >> ${KERNEL_DIR}/.config
99 echo "CONFIG_DAX=y"
100 echo "CONFIG_BLK_DEV_MD=y" >> ${KERNEL_DIR}/.config
100 echo "CONFIG_MD=y"
101 echo "CONFIG_MD_AUTODETECT=y" >> ${KERNEL_DIR}/.config
101 echo "CONFIG_BLK_DEV_MD=y"
102 echo "CONFIG_BLK_DEV_DM=y" >> ${KERNEL_DIR}/.config
102 echo "CONFIG_MD_AUTODETECT=y"
103 echo "CONFIG_BLK_DEV_DM_BUILTIN=y" >> ${KERNEL_DIR}/.config
103 echo "CONFIG_BLK_DEV_DM=y"
104 echo "CONFIG_DM_CRYPT=y" >> ${KERNEL_DIR}/.config
104 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
105 echo "CONFIG_CRYPTO_BLKCIPHER=y" >> ${KERNEL_DIR}/.config
105 echo "CONFIG_DM_CRYPT=y"
106 echo "CONFIG_CRYPTO_CBC=y" >> ${KERNEL_DIR}/.config
106 echo "CONFIG_CRYPTO_BLKCIPHER=y"
107 echo "CONFIG_CRYPTO_XTS=y" >> ${KERNEL_DIR}/.config
107 echo "CONFIG_CRYPTO_CBC=y"
108 echo "CONFIG_CRYPTO_SHA512=y" >> ${KERNEL_DIR}/.config
108 echo "CONFIG_CRYPTO_XTS=y"
109 echo "CONFIG_CRYPTO_MANAGER=y" >> ${KERNEL_DIR}/.config
109 echo "CONFIG_CRYPTO_SHA512=y"
110 fi
110 echo "CONFIG_CRYPTO_MANAGER=y"
111 } >> "${KERNEL_DIR}"/.config
112 fi
111 fi
113 fi
112
114
113 # Copy custom kernel configuration file
115 # Copy custom kernel configuration file
114 if [ ! -z "$KERNELSRC_USRCONFIG" ] ; then
116 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
115 cp $KERNELSRC_USRCONFIG ${KERNEL_DIR}/.config
117 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
116 fi
118 fi
117
119
118 # Set kernel configuration parameters to their default values
120 # Set kernel configuration parameters to their default values
119 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
121 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
120 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
122 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
121 fi
123 fi
122
124
123 # Start menu-driven kernel configuration (interactive)
125 # Start menu-driven kernel configuration (interactive)
124 if [ "$KERNEL_MENUCONFIG" = true ] ; then
126 if [ "$KERNEL_MENUCONFIG" = true ] ; then
125 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
127 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
126 fi
128 fi
127 fi
129 fi
128
130
129 # Use ccache to cross compile the kernel
131 # Use ccache to cross compile the kernel
130 if [ "$KERNEL_CCACHE" = true ] ; then
132 if [ "$KERNEL_CCACHE" = true ] ; then
131 cc="ccache ${CROSS_COMPILE}gcc"
133 cc="ccache ${CROSS_COMPILE}gcc"
132 else
134 else
133 cc="${CROSS_COMPILE}gcc"
135 cc="${CROSS_COMPILE}gcc"
134 fi
136 fi
135
137
136 # Cross compile kernel and dtbs
138 # Cross compile kernel and dtbs
137 make -C "${KERNEL_DIR}" -j${KERNEL_THREADS} ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
139 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
138
140
139 # Cross compile kernel modules
141 # Cross compile kernel modules
140 if [ $(grep "CONFIG_MODULES=y" "${KERNEL_DIR}/.config") ] ; then
142 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
141 make -C "${KERNEL_DIR}" -j${KERNEL_THREADS} ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
143 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
142 fi
144 fi
143 fi
145 fi
144
146
145 # Check if kernel compilation was successful
147 # Check if kernel compilation was successful
146 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
148 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
147 echo "error: kernel compilation failed! (kernel image not found)"
149 echo "error: kernel compilation failed! (kernel image not found)"
148 cleanup
150 cleanup
149 exit 1
151 exit 1
150 fi
152 fi
151
153
152 # Install kernel modules
154 # Install kernel modules
153 if [ "$ENABLE_REDUCE" = true ] ; then
155 if [ "$ENABLE_REDUCE" = true ] ; then
154 if [ $(grep "CONFIG_MODULES=y" "${KERNEL_DIR}/.config") ] ; then
156 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
155 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
157 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
156 fi
158 fi
157 else
159 else
158 if [ $(grep "CONFIG_MODULES=y" "${KERNEL_DIR}/.config") ] ; then
160 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
159 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
161 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
160 fi
162 fi
161
163
162 # Install kernel firmware
164 # Install kernel firmware
163 if [ $(grep "^firmware_install:" "${KERNEL_DIR}/Makefile") ] ; then
165 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
164 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
166 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
165 fi
167 fi
166 fi
168 fi
167
169
168 # Install kernel headers
170 # Install kernel headers
169 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
171 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
170 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
172 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
171 fi
173 fi
172
174
173 # Prepare boot (firmware) directory
175 # Prepare boot (firmware) directory
174 mkdir "${BOOT_DIR}"
176 mkdir "${BOOT_DIR}"
175
177
176 # Get kernel release version
178 # Get kernel release version
177 KERNEL_VERSION=`cat "${KERNEL_DIR}/include/config/kernel.release"`
179 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
178
180
179 # Copy kernel configuration file to the boot directory
181 # Copy kernel configuration file to the boot directory
180 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
182 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
181
183
182 # Prepare device tree directory
184 # Prepare device tree directory
183 mkdir "${BOOT_DIR}/overlays"
185 mkdir "${BOOT_DIR}/overlays"
184
186
185 # Ensure the proper .dtb is located
187 # Ensure the proper .dtb is located
186 if [ "$KERNEL_ARCH" = "arm" ] ; then
188 if [ "$KERNEL_ARCH" = "arm" ] ; then
187 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
189 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
188 if [ -f "${dtb}" ] ; then
190 if [ -f "${dtb}" ] ; then
189 install_readonly "${dtb}" "${BOOT_DIR}/"
191 install_readonly "${dtb}" "${BOOT_DIR}/"
190 fi
192 fi
191 done
193 done
192 else
194 else
193 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
195 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
194 if [ -f "${dtb}" ] ; then
196 if [ -f "${dtb}" ] ; then
195 install_readonly "${dtb}" "${BOOT_DIR}/"
197 install_readonly "${dtb}" "${BOOT_DIR}/"
196 fi
198 fi
197 done
199 done
198 fi
200 fi
199
201
200 # Copy compiled dtb device tree files
202 # Copy compiled dtb device tree files
201 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
203 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
202 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
204 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
203 if [ -f "${dtb}" ] ; then
205 if [ -f "${dtb}" ] ; then
204 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
206 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
205 fi
207 fi
206 done
208 done
207
209
208 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
210 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
209 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
211 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
210 fi
212 fi
211 fi
213 fi
212
214
213 if [ "$ENABLE_UBOOT" = false ] ; then
215 if [ "$ENABLE_UBOOT" = false ] ; then
214 # Convert and copy kernel image to the boot directory
216 # Convert and copy kernel image to the boot directory
215 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
217 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
216 else
218 else
217 # Copy kernel image to the boot directory
219 # Copy kernel image to the boot directory
218 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
220 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
219 fi
221 fi
220
222
221 # Remove kernel sources
223 # Remove kernel sources
222 if [ "$KERNEL_REMOVESRC" = true ] ; then
224 if [ "$KERNEL_REMOVESRC" = true ] ; then
223 rm -fr "${KERNEL_DIR}"
225 rm -fr "${KERNEL_DIR}"
224 else
226 else
225 # Prepare compiled kernel modules
227 # Prepare compiled kernel modules
226 if [ $(grep "CONFIG_MODULES=y" "${KERNEL_DIR}/.config") ] ; then
228 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
227 if [ $(grep "^modules_prepare:" "${KERNEL_DIR}/Makefile") ] ; then
229 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
228 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
230 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
229 fi
231 fi
230
232
231 # Create symlinks for kernel modules
233 # Create symlinks for kernel modules
232 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
234 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
233 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
235 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
234 fi
236 fi
235 fi
237 fi
236
238
237 else # BUILD_KERNEL=false
239 else # BUILD_KERNEL=false
238 # Kernel installation
240 # Kernel installation
239 chroot_exec apt-get -qq -y --no-install-recommends install linux-image-"${COLLABORA_KERNEL}" raspberrypi-bootloader-nokernel
241 chroot_exec apt-get -qq -y --no-install-recommends install linux-image-"${COLLABORA_KERNEL}" raspberrypi-bootloader-nokernel
240
242
241 # Install flash-kernel last so it doesn't try (and fail) to detect the platform in the chroot
243 # Install flash-kernel last so it doesn't try (and fail) to detect the platform in the chroot
242 chroot_exec apt-get -qq -y install flash-kernel
244 chroot_exec apt-get -qq -y install flash-kernel
243
245
244 # Check if kernel installation was successful
246 # Check if kernel installation was successful
245 VMLINUZ="$(ls -1 ${R}/boot/vmlinuz-* | sort | tail -n 1)"
247 VMLINUZ="$(ls -1 "${R}"/boot/vmlinuz-* | sort | tail -n 1)"
246 if [ -z "$VMLINUZ" ] ; then
248 if [ -z "$VMLINUZ" ] ; then
247 echo "error: kernel installation failed! (/boot/vmlinuz-* not found)"
249 echo "error: kernel installation failed! (/boot/vmlinuz-* not found)"
248 cleanup
250 cleanup
249 exit 1
251 exit 1
250 fi
252 fi
251 # Copy vmlinuz kernel to the boot directory
253 # Copy vmlinuz kernel to the boot directory
252 install_readonly "${VMLINUZ}" "${BOOT_DIR}/${KERNEL_IMAGE}"
254 install_readonly "${VMLINUZ}" "${BOOT_DIR}/${KERNEL_IMAGE}"
253 fi
255 fi
@@ -1,59 +1,59
1 #
1 #
2 # Setup fstab and initramfs
2 # Setup fstab and initramfs
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup fstab
8 # Install and setup fstab
9 install_readonly files/mount/fstab "${ETC_DIR}/fstab"
9 install_readonly files/mount/fstab "${ETC_DIR}/fstab"
10
10
11 # Add usb/sda disk root partition to fstab
11 # Add usb/sda disk root partition to fstab
12 if [ "$ENABLE_SPLITFS" = true ] && [ "$ENABLE_CRYPTFS" = false ] ; then
12 if [ "$ENABLE_SPLITFS" = true ] && [ "$ENABLE_CRYPTFS" = false ] ; then
13 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/fstab"
13 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/fstab"
14 fi
14 fi
15
15
16 # Add encrypted root partition to fstab and crypttab
16 # Add encrypted root partition to fstab and crypttab
17 if [ "$ENABLE_CRYPTFS" = true ] ; then
17 if [ "$ENABLE_CRYPTFS" = true ] ; then
18 # Replace fstab root partition with encrypted partition mapping
18 # Replace fstab root partition with encrypted partition mapping
19 sed -i "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING}/" "${ETC_DIR}/fstab"
19 sed -i "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING}/" "${ETC_DIR}/fstab"
20
20
21 # Add encrypted partition to crypttab and fstab
21 # Add encrypted partition to crypttab and fstab
22 install_readonly files/mount/crypttab "${ETC_DIR}/crypttab"
22 install_readonly files/mount/crypttab "${ETC_DIR}/crypttab"
23 echo "${CRYPTFS_MAPPING} /dev/mmcblk0p2 none luks,initramfs" >> "${ETC_DIR}/crypttab"
23 echo "${CRYPTFS_MAPPING} /dev/mmcblk0p2 none luks,initramfs" >> "${ETC_DIR}/crypttab"
24
24
25 if [ "$ENABLE_SPLITFS" = true ] ; then
25 if [ "$ENABLE_SPLITFS" = true ] ; then
26 # Add usb/sda disk to crypttab
26 # Add usb/sda disk to crypttab
27 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/crypttab"
27 sed -i "s/mmcblk0p2/sda1/" "${ETC_DIR}/crypttab"
28 fi
28 fi
29 fi
29 fi
30
30
31 # Generate initramfs file
31 # Generate initramfs file
32 if [ "$BUILD_KERNEL" = true ] && [ "$ENABLE_INITRAMFS" = true ] ; then
32 if [ "$BUILD_KERNEL" = true ] && [ "$ENABLE_INITRAMFS" = true ] ; then
33 if [ "$ENABLE_CRYPTFS" = true ] ; then
33 if [ "$ENABLE_CRYPTFS" = true ] ; then
34 # Include initramfs scripts to auto expand encrypted root partition
34 # Include initramfs scripts to auto expand encrypted root partition
35 if [ "$EXPANDROOT" = true ] ; then
35 if [ "$EXPANDROOT" = true ] ; then
36 install_exec files/initramfs/expand_encrypted_rootfs "${ETC_DIR}/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs"
36 install_exec files/initramfs/expand_encrypted_rootfs "${ETC_DIR}/initramfs-tools/scripts/init-premount/expand_encrypted_rootfs"
37 install_exec files/initramfs/expand-premount "${ETC_DIR}/initramfs-tools/scripts/local-premount/expand-premount"
37 install_exec files/initramfs/expand-premount "${ETC_DIR}/initramfs-tools/scripts/local-premount/expand-premount"
38 install_exec files/initramfs/expand-tools "${ETC_DIR}/initramfs-tools/hooks/expand-tools"
38 install_exec files/initramfs/expand-tools "${ETC_DIR}/initramfs-tools/hooks/expand-tools"
39 fi
39 fi
40
40
41 # Disable SSHD inside initramfs
41 # Disable SSHD inside initramfs
42 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=n\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
42 printf "#\n# DROPBEAR: [ y | n ]\n#\n\nDROPBEAR=n\n" >> "${ETC_DIR}/initramfs-tools/initramfs.conf"
43
43
44 # Add cryptsetup modules to initramfs
44 # Add cryptsetup modules to initramfs
45 printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
45 printf "#\n# CRYPTSETUP: [ y | n ]\n#\n\nCRYPTSETUP=y\n" >> "${ETC_DIR}/initramfs-tools/conf-hook"
46
46
47 # Dummy mapping required by mkinitramfs
47 # Dummy mapping required by mkinitramfs
48 echo "0 1 crypt $(echo ${CRYPTFS_CIPHER} | cut -d ':' -f 1) ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
48 echo "0 1 crypt $(echo "${CRYPTFS_CIPHER}" | cut -d ':' -f 1) ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0 7:0 4096" | chroot_exec dmsetup create "${CRYPTFS_MAPPING}"
49
49
50 # Generate initramfs with encrypted root partition support
50 # Generate initramfs with encrypted root partition support
51 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
51 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
52
52
53 # Remove dummy mapping
53 # Remove dummy mapping
54 chroot_exec cryptsetup close "${CRYPTFS_MAPPING}"
54 chroot_exec cryptsetup close "${CRYPTFS_MAPPING}"
55 else
55 else
56 # Generate initramfs without encrypted root partition support
56 # Generate initramfs without encrypted root partition support
57 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
57 chroot_exec mkinitramfs -o "/boot/firmware/initramfs-${KERNEL_VERSION}" "${KERNEL_VERSION}"
58 fi
58 fi
59 fi
59 fi
@@ -1,151 +1,229
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"
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"
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 #locks cpu at max frequency
60 if [ "$ENABLE_TURBO" = true ] ; then
61 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
62 fi
63
64 if [ "$ENABLE_PRINTK" = true ] ; then
65 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
66 fi
67
68 # Install udev rule for serial alias
69 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
70
71 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
72
73 # RPI0,3,3P Use default ttyS0 (mini-UART)as serial interface
74 SET_SERIAL="ttyS0"
75
76 # Bluetooth enabled
77 if [ "$ENABLE_BLUETOOTH" = true ] ; then
78 # Create temporary directory for Bluetooth sources
79 temp_dir=$(as_nobody mktemp -d)
80
81 # Fetch Bluetooth sources
82 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
83
84 # Copy downloaded sources
85 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
86
87 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
88 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
89 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
90
91 # Set permissions
92 chown -R root:root "${R}/tmp/pi-bluetooth"
93
94 # Install tools
95 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
96 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
97
98 # Install bluetooth udev rule
99 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
100
101 # Install Firmware Flash file and apropiate licence
102 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
103 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
104 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
105 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
106 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
107
108 # Remove temporary directory
109 rm -fr "${temp_dir}"
110
111 # Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15. Slow Bluetooth and slow cpu. Use /dev/ttyS0 instead of /dev/ttyAMA0
112 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
113 SET_SERIAL="ttyAMA0"
114
115 # set overlay to swap ttyAMA0 and ttyS0
116 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
117
118 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
119 if [ "$ENABLE_TURBO" = false ] ; then
120 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
121 fi
122
123 # Activate services
124 chroot_exec systemctl enable pi-bluetooth.hciuart.service
125 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
126 else
127 chroot_exec systemctl enable pi-bluetooth.hciuart.service
128 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
129 fi
130
131 else # if ENABLE_BLUETOOTH = false
132 # set overlay to disable bluetooth
133 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
134 fi # ENABLE_BLUETOOTH end
135
136 else
137 # RPI1,1P,2 Use default ttyAMA0 (full UART) as serial interface
138 SET_SERIAL="ttyAMA0"
139 fi
140
141 # may need sudo systemctl disable hciuart
60 if [ "$ENABLE_CONSOLE" = true ] ; then
142 if [ "$ENABLE_CONSOLE" = true ] ; then
61 CMDLINE="${CMDLINE} console=ttyAMA0,115200 kgdboc=ttyAMA0,115200"
143 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
144 # add string to cmdline
145 CMDLINE="${CMDLINE} console=serial0,115200"
146
147 # Enable serial console systemd style
148 chroot_exec systemctl enable serial-getty\@"$SET_SERIAL".service
149 else
150 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
151 # disable serial console systemd style
152 chroot_exec systemctl disable serial-getty\@"$SET_SERIAL".service
62 fi
153 fi
63
154
64 # Remove IPv6 networking support
155 # Remove IPv6 networking support
65 if [ "$ENABLE_IPV6" = false ] ; then
156 if [ "$ENABLE_IPV6" = false ] ; then
66 CMDLINE="${CMDLINE} ipv6.disable=1"
157 CMDLINE="${CMDLINE} ipv6.disable=1"
67 fi
158 fi
68
159
69 # Automatically assign predictable network interface names
160 # Automatically assign predictable network interface names
70 if [ "$ENABLE_IFNAMES" = false ] ; then
161 if [ "$ENABLE_IFNAMES" = false ] ; then
71 CMDLINE="${CMDLINE} net.ifnames=0"
162 CMDLINE="${CMDLINE} net.ifnames=0"
72 else
163 else
73 CMDLINE="${CMDLINE} net.ifnames=1"
164 CMDLINE="${CMDLINE} net.ifnames=1"
74 fi
165 fi
75
166
76 # Set init to systemd if required by Debian release
77 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
78 CMDLINE="${CMDLINE} init=/bin/systemd"
79 fi
80
81 # Install firmware boot cmdline
167 # Install firmware boot cmdline
82 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
168 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
83
169
84 # Install firmware config
170 # Install firmware config
85 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
171 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
86
172
87 # Setup minimal GPU memory allocation size: 16MB (no X)
173 # Setup minimal GPU memory allocation size: 16MB (no X)
88 if [ "$ENABLE_MINGPU" = true ] ; then
174 if [ "$ENABLE_MINGPU" = true ] ; then
89 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
175 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
90 fi
176 fi
91
177
92 # Setup boot with initramfs
178 # Setup boot with initramfs
93 if [ "$ENABLE_INITRAMFS" = true ] ; then
179 if [ "$ENABLE_INITRAMFS" = true ] ; then
94 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
180 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
95 fi
181 fi
96
182
97 # Disable RPi3 Bluetooth and restore ttyAMA0 serial device
98 if [ "$RPI_MODEL" = 3 ] ; then
99 if [ "$ENABLE_CONSOLE" = true ] && [ "$ENABLE_UBOOT" = false ] ; then
100 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
101 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
102 fi
103 fi
104
105 # Create firmware configuration and cmdline symlinks
183 # Create firmware configuration and cmdline symlinks
106 ln -sf firmware/config.txt "${R}/boot/config.txt"
184 ln -sf firmware/config.txt "${R}/boot/config.txt"
107 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
185 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
108
186
109 # Install and setup kernel modules to load at boot
187 # Install and setup kernel modules to load at boot
110 mkdir -p "${R}/lib/modules-load.d/"
188 mkdir -p "${LIB_DIR}/modules-load.d/"
111 install_readonly files/modules/rpi2.conf "${R}/lib/modules-load.d/rpi2.conf"
189 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
112
190
113 # Load hardware random module at boot
191 # Load hardware random module at boot
114 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
192 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
115 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${R}/lib/modules-load.d/rpi2.conf"
193 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
116 fi
194 fi
117
195
118 # Load sound module at boot
196 # Load sound module at boot
119 if [ "$ENABLE_SOUND" = true ] ; then
197 if [ "$ENABLE_SOUND" = true ] ; then
120 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${R}/lib/modules-load.d/rpi2.conf"
198 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
121 else
199 else
122 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
200 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
123 fi
201 fi
124
202
125 # Enable I2C interface
203 # Enable I2C interface
126 if [ "$ENABLE_I2C" = true ] ; then
204 if [ "$ENABLE_I2C" = true ] ; then
127 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
205 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
128 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${R}/lib/modules-load.d/rpi2.conf"
206 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
129 sed -i "s/^# i2c-dev/i2c-dev/" "${R}/lib/modules-load.d/rpi2.conf"
207 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
130 fi
208 fi
131
209
132 # Enable SPI interface
210 # Enable SPI interface
133 if [ "$ENABLE_SPI" = true ] ; then
211 if [ "$ENABLE_SPI" = true ] ; then
134 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
212 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
135 echo "spi-bcm2708" >> "${R}/lib/modules-load.d/rpi2.conf"
213 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
136 if [ "$RPI_MODEL" = 3 ] ; then
214 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
137 sed -i "s/spi-bcm2708/spi-bcm2835/" "${R}/lib/modules-load.d/rpi2.conf"
215 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
138 fi
216 fi
139 fi
217 fi
140
218
141 # Disable RPi2/3 under-voltage warnings
219 # Disable RPi2/3 under-voltage warnings
142 if [ ! -z "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
220 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
143 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
221 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
144 fi
222 fi
145
223
146 # Install kernel modules blacklist
224 # Install kernel modules blacklist
147 mkdir -p "${ETC_DIR}/modprobe.d/"
225 mkdir -p "${ETC_DIR}/modprobe.d/"
148 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
226 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
149
227
150 # Install sysctl.d configuration files
228 # Install sysctl.d configuration files
151 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
229 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,134 +1,132
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/^rpi2-jessie/${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/rpi2-jessie/${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 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
68 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
69 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
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
73 rm -fr "${ETC_DIR}/systemd/network"
74 fi
72 fi
73 rm -fr "${ETC_DIR}/systemd/network"
75
74
76 # Enable systemd-networkd service
75 # Enable systemd-networkd service
77 chroot_exec systemctl enable systemd-networkd
76 chroot_exec systemctl enable systemd-networkd
78
77
79 # Install host.conf resolver configuration
78 # Install host.conf resolver configuration
80 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
79 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
81
80
82 # Enable network stack hardening
81 # Enable network stack hardening
83 if [ "$ENABLE_HARDNET" = true ] ; then
82 if [ "$ENABLE_HARDNET" = true ] ; then
84 # Install sysctl.d configuration files
83 # Install sysctl.d configuration files
85 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"
86
85
87 # Setup resolver warnings about spoofed addresses
86 # Setup resolver warnings about spoofed addresses
88 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
87 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
89 fi
88 fi
90
89
91 # Enable time sync
90 # Enable time sync
92 if [ "NET_NTP_1" != "" ] ; then
91 if [ "$NET_NTP_1" != "" ] ; then
93 chroot_exec systemctl enable systemd-timesyncd.service
92 chroot_exec systemctl enable systemd-timesyncd.service
94 fi
93 fi
95
94
96 # 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
97 if [ "$ENABLE_WIRELESS" = true ] ; then
96 if [ "$ENABLE_WIRELESS" = true ] ; then
98 if [ ! -d ${WLAN_FIRMWARE_DIR} ] ; then
97 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
99 mkdir -p ${WLAN_FIRMWARE_DIR}
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
100 fi
99 fi
101
100
102 # Create temporary directory for firmware binary blob
101 # Create temporary directory for firmware binary blob
103 temp_dir=$(as_nobody mktemp -d)
102 temp_dir=$(as_nobody mktemp -d)
104
103
105 # Fetch firmware binary blob for RPI3B+
104 # Fetch firmware binary blob for RPI3B+
106 if [ "$RPI_MODEL" = 3P ] ; then
105 if [ "$RPI_MODEL" = 3P ] ; then
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
106 # Fetch firmware binary blob for RPi3P
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
109 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
110 else
109 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
111 # Fetch firmware binary blob for RPI3
110
112 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
111 # Move downloaded firmware binary blob
113 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
112 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
114 fi
113
115
114 # Set permissions of the firmware binary blob
116 # Move downloaded firmware binary blob
115 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
117 if [ "$RPI_MODEL" = 3P ] ; then
116 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
118 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
117 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
119 else
118 # Fetch firmware binary blob for RPi3
120 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
119 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
120 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
121
122 # Move downloaded firmware binary blob
123 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
124
125 # Set permissions of the firmware binary blob
126 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
127 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
121 fi
128 fi
122
129
123 # Remove temporary directory for firmware binary blob
130 # Remove temporary directory for firmware binary blob
124 rm -fr "${temp_dir}"
131 rm -fr "${temp_dir}"
125
126 # Set permissions of the firmware binary blob
127 if [ "$RPI_MODEL" = 3P ] ; then
128 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
130 else
131 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
133 fi
134 fi
132 fi
@@ -1,44 +1,48
1 #
1 #
2 # Setup Firewall
2 # Setup Firewall
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_IPTABLES" = true ] ; then
8 if [ "$ENABLE_IPTABLES" = true ] ; then
9 # Create iptables configuration directory
9 # Create iptables configuration directory
10 mkdir -p "${ETC_DIR}/iptables"
10 mkdir -p "${ETC_DIR}/iptables"
11
11
12 # make sure iptables-legacy is the used alternatives
13 #iptables-save and -restore are slaves of iptables and thus are set accordingly
14 chroot_exec update-alternatives --verbose --set iptables /usr/sbin/iptables-legacy
15
12 # Install iptables systemd service
16 # Install iptables systemd service
13 install_readonly files/iptables/iptables.service "${ETC_DIR}/systemd/system/iptables.service"
17 install_readonly files/iptables/iptables.service "${ETC_DIR}/systemd/system/iptables.service"
14
18
15 # Install flush-table script called by iptables service
19 # Install flush-table script called by iptables service
16 install_exec files/iptables/flush-iptables.sh "${ETC_DIR}/iptables/flush-iptables.sh"
20 install_exec files/iptables/flush-iptables.sh "${ETC_DIR}/iptables/flush-iptables.sh"
17
21
18 # Install iptables rule file
22 # Install iptables rule file
19 install_readonly files/iptables/iptables.rules "${ETC_DIR}/iptables/iptables.rules"
23 install_readonly files/iptables/iptables.rules "${ETC_DIR}/iptables/iptables.rules"
20
24
21 # Reload systemd configuration and enable iptables service
25 # Reload systemd configuration and enable iptables service
22 chroot_exec systemctl daemon-reload
26 chroot_exec systemctl daemon-reload
23 chroot_exec systemctl enable iptables.service
27 chroot_exec systemctl enable iptables.service
24
28
25 if [ "$ENABLE_IPV6" = true ] ; then
29 if [ "$ENABLE_IPV6" = true ] ; then
26 # Install ip6tables systemd service
30 # Install ip6tables systemd service
27 install_readonly files/iptables/ip6tables.service "${ETC_DIR}/systemd/system/ip6tables.service"
31 install_readonly files/iptables/ip6tables.service "${ETC_DIR}/systemd/system/ip6tables.service"
28
32
29 # Install ip6tables file
33 # Install ip6tables file
30 install_exec files/iptables/flush-ip6tables.sh "${ETC_DIR}/iptables/flush-ip6tables.sh"
34 install_exec files/iptables/flush-ip6tables.sh "${ETC_DIR}/iptables/flush-ip6tables.sh"
31
35
32 install_readonly files/iptables/ip6tables.rules "${ETC_DIR}/iptables/ip6tables.rules"
36 install_readonly files/iptables/ip6tables.rules "${ETC_DIR}/iptables/ip6tables.rules"
33
37
34 # Reload systemd configuration and enable iptables service
38 # Reload systemd configuration and enable iptables service
35 chroot_exec systemctl daemon-reload
39 chroot_exec systemctl daemon-reload
36 chroot_exec systemctl enable ip6tables.service
40 chroot_exec systemctl enable ip6tables.service
37 fi
41 fi
38
42
39 if [ "$ENABLE_SSHD" = false ] ; then
43 if [ "$ENABLE_SSHD" = false ] ; then
40 # Remove SSHD related iptables rules
44 # Remove SSHD related iptables rules
41 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/iptables.rules" 2> /dev/null
45 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/iptables.rules" 2> /dev/null
42 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/ip6tables.rules" 2> /dev/null
46 sed -i "/^#/! {/SSH/ s/^/# /}" "${ETC_DIR}/iptables/ip6tables.rules" 2> /dev/null
43 fi
47 fi
44 fi
48 fi
@@ -1,29 +1,29
1 #
1 #
2 # Setup users and security settings
2 # Setup users and security settings
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Generate crypt(3) password string
8 # Generate crypt(3) password string
9 ENCRYPTED_PASSWORD=`mkpasswd -m sha-512 "${PASSWORD}"`
9 ENCRYPTED_PASSWORD=$(mkpasswd -m sha-512 "${PASSWORD}")
10 ENCRYPTED_USER_PASSWORD=`mkpasswd -m sha-512 "${USER_PASSWORD}"`
10 ENCRYPTED_USER_PASSWORD=$(mkpasswd -m sha-512 "${USER_PASSWORD}")
11
11
12 # Setup default user
12 # Setup default user
13 if [ "$ENABLE_USER" = true ] ; then
13 if [ "$ENABLE_USER" = true ] ; then
14 chroot_exec adduser --gecos $USER_NAME --add_extra_groups --disabled-password $USER_NAME
14 chroot_exec adduser --gecos "$USER_NAME" --add_extra_groups --disabled-password "$USER_NAME"
15 chroot_exec usermod -a -G sudo -p "${ENCRYPTED_USER_PASSWORD}" $USER_NAME
15 chroot_exec usermod -a -G sudo -p "${ENCRYPTED_USER_PASSWORD}" "$USER_NAME"
16 fi
16 fi
17
17
18 # Setup root password or not
18 # Setup root password or not
19 if [ "$ENABLE_ROOT" = true ] ; then
19 if [ "$ENABLE_ROOT" = true ] ; then
20 chroot_exec usermod -p "${ENCRYPTED_PASSWORD}" root
20 chroot_exec usermod -p "${ENCRYPTED_PASSWORD}" root
21 else
21 else
22 # Set no root password to disable root login
22 # Set no root password to disable root login
23 chroot_exec usermod -p \'!\' root
23 chroot_exec usermod -p \'!\' root
24 fi
24 fi
25
25
26 # Enable serial console systemd style
26 # Enable serial console systemd style
27 if [ "$ENABLE_CONSOLE" = true ] ; then
27 if [ "$ENABLE_CONSOLE" = true ] ; then
28 chroot_exec systemctl enable serial-getty\@ttyAMA0.service
28 chroot_exec systemctl enable serial-getty\@ttyAMA0.service
29 fi
29 fi
@@ -1,116 +1,116
1 #
1 #
2 # Setup SSH settings and public keys
2 # Setup SSH settings and public keys
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_SSHD" = true ] ; then
8 if [ "$ENABLE_SSHD" = true ] ; then
9 DROPBEAR_ARGS=""
9 DROPBEAR_ARGS=""
10
10
11 if [ "$SSH_ENABLE_ROOT" = false ] ; then
11 if [ "$SSH_ENABLE_ROOT" = false ] ; then
12 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
12 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
13 # User root is not allowed to log in
13 # User root is not allowed to log in
14 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin no|g" "${ETC_DIR}/ssh/sshd_config"
14 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin no|g" "${ETC_DIR}/ssh/sshd_config"
15 else
15 else
16 # User root is not allowed to log in
16 # User root is not allowed to log in
17 DROPBEAR_ARGS="-w"
17 DROPBEAR_ARGS="-w"
18 fi
18 fi
19 fi
19 fi
20
20
21 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
21 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
22 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
22 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
23 # Permit SSH root login
23 # Permit SSH root login
24 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin yes|g" "${ETC_DIR}/ssh/sshd_config"
24 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin yes|g" "${ETC_DIR}/ssh/sshd_config"
25 else
25 else
26 # Permit SSH root login
26 # Permit SSH root login
27 DROPBEAR_ARGS=""
27 DROPBEAR_ARGS=""
28 fi
28 fi
29
29
30 # Add SSH (v2) public key for user root
30 # Add SSH (v2) public key for user root
31 if [ ! -z "$SSH_ROOT_PUB_KEY" ] ; then
31 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
32 # Create root SSH config directory
32 # Create root SSH config directory
33 mkdir -p "${R}/root/.ssh"
33 mkdir -p "${R}/root/.ssh"
34
34
35 # Set permissions of root SSH config directory
35 # Set permissions of root SSH config directory
36 chroot_exec chmod 700 "/root/.ssh"
36 chroot_exec chmod 700 "/root/.ssh"
37 chroot_exec chown root:root "/root/.ssh"
37 chroot_exec chown root:root "/root/.ssh"
38
38
39 # Add SSH (v2) public key(s) to authorized_keys file
39 # Add SSH (v2) public key(s) to authorized_keys file
40 cat "$SSH_ROOT_PUB_KEY" >> "${R}/root/.ssh/authorized_keys"
40 cat "$SSH_ROOT_PUB_KEY" >> "${R}/root/.ssh/authorized_keys"
41
41
42 # Set permissions of root SSH authorized_keys file
42 # Set permissions of root SSH authorized_keys file
43 chroot_exec chmod 600 "/root/.ssh/authorized_keys"
43 chroot_exec chmod 600 "/root/.ssh/authorized_keys"
44 chroot_exec chown root:root "/root/.ssh/authorized_keys"
44 chroot_exec chown root:root "/root/.ssh/authorized_keys"
45
45
46 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
46 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
47 # Allow SSH public key authentication
47 # Allow SSH public key authentication
48 sed -i "s|[#]*PubkeyAuthentication.*|PubkeyAuthentication yes|g" "${ETC_DIR}/ssh/sshd_config"
48 sed -i "s|[#]*PubkeyAuthentication.*|PubkeyAuthentication yes|g" "${ETC_DIR}/ssh/sshd_config"
49 fi
49 fi
50 fi
50 fi
51 fi
51 fi
52
52
53 if [ "$ENABLE_USER" = true ] ; then
53 if [ "$ENABLE_USER" = true ] ; then
54 # Add SSH (v2) public key for user $USER_NAME
54 # Add SSH (v2) public key for user $USER_NAME
55 if [ ! -z "$SSH_USER_PUB_KEY" ] ; then
55 if [ -n "$SSH_USER_PUB_KEY" ] ; then
56 # Create $USER_NAME SSH config directory
56 # Create $USER_NAME SSH config directory
57 mkdir -p "${R}/home/${USER_NAME}/.ssh"
57 mkdir -p "${R}/home/${USER_NAME}/.ssh"
58
58
59 # Set permissions of $USER_NAME SSH config directory
59 # Set permissions of $USER_NAME SSH config directory
60 chroot_exec chmod 700 "/home/${USER_NAME}/.ssh"
60 chroot_exec chmod 700 "/home/${USER_NAME}/.ssh"
61 chroot_exec chown ${USER_NAME}:${USER_NAME} "/home/${USER_NAME}/.ssh"
61 chroot_exec chown "${USER_NAME}":"${USER_NAME}" "/home/${USER_NAME}/.ssh"
62
62
63 # Add SSH (v2) public key(s) to authorized_keys file
63 # Add SSH (v2) public key(s) to authorized_keys file
64 cat "$SSH_USER_PUB_KEY" >> "${R}/home/${USER_NAME}/.ssh/authorized_keys"
64 cat "$SSH_USER_PUB_KEY" >> "${R}/home/${USER_NAME}/.ssh/authorized_keys"
65
65
66 # Set permissions of $USER_NAME SSH config directory
66 # Set permissions of $USER_NAME SSH config directory
67 chroot_exec chmod 600 "/home/${USER_NAME}/.ssh/authorized_keys"
67 chroot_exec chmod 600 "/home/${USER_NAME}/.ssh/authorized_keys"
68 chroot_exec chown ${USER_NAME}:${USER_NAME} "/home/${USER_NAME}/.ssh/authorized_keys"
68 chroot_exec chown "${USER_NAME}":"${USER_NAME}" "/home/${USER_NAME}/.ssh/authorized_keys"
69
69
70 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
70 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
71 # Allow SSH public key authentication
71 # Allow SSH public key authentication
72 sed -i "s|[#]*PubkeyAuthentication.*|PubkeyAuthentication yes|g" "${ETC_DIR}/ssh/sshd_config"
72 sed -i "s|[#]*PubkeyAuthentication.*|PubkeyAuthentication yes|g" "${ETC_DIR}/ssh/sshd_config"
73 fi
73 fi
74 fi
74 fi
75 fi
75 fi
76
76
77 # Limit the users that are allowed to login via SSH
77 # Limit the users that are allowed to login via SSH
78 if [ "$SSH_LIMIT_USERS" = true ] && [ "$ENABLE_REDUCE" = false ] ; then
78 if [ "$SSH_LIMIT_USERS" = true ] && [ "$ENABLE_REDUCE" = false ] ; then
79 allowed_users=""
79 allowed_users=""
80 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
80 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
81 allowed_users="root"
81 allowed_users="root"
82 fi
82 fi
83
83
84 if [ "$ENABLE_USER" = true ] ; then
84 if [ "$ENABLE_USER" = true ] ; then
85 allowed_users="${allowed_users} ${USER_NAME}"
85 allowed_users="${allowed_users} ${USER_NAME}"
86 fi
86 fi
87
87
88 if [ ! -z "$allowed_users" ] ; then
88 if [ -n "$allowed_users" ] ; then
89 echo "AllowUsers ${allowed_users}" >> "${ETC_DIR}/ssh/sshd_config"
89 echo "AllowUsers ${allowed_users}" >> "${ETC_DIR}/ssh/sshd_config"
90 fi
90 fi
91 fi
91 fi
92
92
93 # Disable password-based authentication
93 # Disable password-based authentication
94 if [ "$SSH_DISABLE_PASSWORD_AUTH" = true ] ; then
94 if [ "$SSH_DISABLE_PASSWORD_AUTH" = true ] ; then
95 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
95 if [ "$ENABLE_ROOT" = true ] && [ "$SSH_ENABLE_ROOT" = true ] ; then
96 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
96 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
97 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin without-password|g" "${ETC_DIR}/ssh/sshd_config"
97 sed -i "s|[#]*PermitRootLogin.*|PermitRootLogin without-password|g" "${ETC_DIR}/ssh/sshd_config"
98 else
98 else
99 DROPBEAR_ARGS="-g"
99 DROPBEAR_ARGS="-g"
100 fi
100 fi
101 fi
101 fi
102
102
103 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
103 if [ "$ENABLE_REDUCE" = false ] || [ "$REDUCE_SSHD" = false ] ; then
104 sed -i "s|[#]*PasswordAuthentication.*|PasswordAuthentication no|g" "${ETC_DIR}/ssh/sshd_config"
104 sed -i "s|[#]*PasswordAuthentication.*|PasswordAuthentication no|g" "${ETC_DIR}/ssh/sshd_config"
105 sed -i "s|[#]*ChallengeResponseAuthentication no.*|ChallengeResponseAuthentication no|g" "${ETC_DIR}/ssh/sshd_config"
105 sed -i "s|[#]*ChallengeResponseAuthentication no.*|ChallengeResponseAuthentication no|g" "${ETC_DIR}/ssh/sshd_config"
106 sed -i "s|[#]*UsePAM.*|UsePAM no|g" "${ETC_DIR}/ssh/sshd_config"
106 sed -i "s|[#]*UsePAM.*|UsePAM no|g" "${ETC_DIR}/ssh/sshd_config"
107 else
107 else
108 DROPBEAR_ARGS="${DROPBEAR_ARGS} -s"
108 DROPBEAR_ARGS="${DROPBEAR_ARGS} -s"
109 fi
109 fi
110 fi
110 fi
111
111
112 # Update dropbear SSH configuration
112 # Update dropbear SSH configuration
113 if [ "$ENABLE_REDUCE" = true ] && [ "$REDUCE_SSHD" = true ] ; then
113 if [ "$ENABLE_REDUCE" = true ] && [ "$REDUCE_SSHD" = true ] ; then
114 sed "s|^DROPBEAR_EXTRA_ARGS=.*|DROPBEAR_EXTRA_ARGS=\"${DROPBEAR_ARGS}\"|g" "${ETC_DIR}/default/dropbear"
114 sed "s|^DROPBEAR_EXTRA_ARGS=.*|DROPBEAR_EXTRA_ARGS=\"${DROPBEAR_ARGS}\"|g" "${ETC_DIR}/default/dropbear"
115 fi
115 fi
116 fi
116 fi No newline at end of file
@@ -1,88 +1,100
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 [ "$SET_ARCH" = 64 ] ; then
70 echo "Setting up config.txt to boot 64bit uboot"
71 {
72 printf "\n# 64bit-mode"
73 printf "\n# arm_control=0x200 is deprecated https://www.raspberrypi.org/documentation/configuration/config-txt/misc.md"
74 printf "\narm_64bit=1"
75 } >> "${BOOT_DIR}/config.txt"
76
77 #in 64bit uboot booti is used instead of bootz [like in KERNEL_BIN_IMAGE=zImage (armv7)|| Image(armv8)]
78 sed -i "s|bootz|booti|g" "${BOOT_DIR}/uboot.mkimage"
79 fi
80
69 # Set mkfile to use the correct dtb file
81 # Set mkfile to use the correct dtb file
70 sed -i "s/^\(setenv dtbfile \).*/\1${DTB_FILE}/" "${BOOT_DIR}/uboot.mkimage"
82 sed -i "s|bcm2709-rpi-2-b.dtb|${DTB_FILE}|" "${BOOT_DIR}/uboot.mkimage"
71
83
72 # Set mkfile to use the correct mach id
84 # Set mkfile to use the correct mach id
73 if [ "$ENABLE_QEMU" = true ] ; then
85 if [ "$ENABLE_QEMU" = true ] ; then
74 sed -i "s/^\(setenv machid \).*/\10x000008e0/" "${BOOT_DIR}/uboot.mkimage"
86 sed -i "s/^\(setenv machid \).*/\10x000008e0/" "${BOOT_DIR}/uboot.mkimage"
75 fi
87 fi
76
88
77 # Set mkfile to use kernel image
89 # Set mkfile to use kernel image
78 sed -i "s/^\(fatload mmc 0:1 \${kernel_addr_r} \).*/\1${KERNEL_IMAGE}/" "${BOOT_DIR}/uboot.mkimage"
90 sed -i "s|kernel7.img|${KERNEL_IMAGE}|" "${BOOT_DIR}/uboot.mkimage"
79
91
80 # Remove all leading blank lines
92 # Remove all leading blank lines
81 sed -i "/./,\$!d" "${BOOT_DIR}/uboot.mkimage"
93 sed -i "/./,\$!d" "${BOOT_DIR}/uboot.mkimage"
82
94
83 # Generate U-Boot bootloader image
95 # Generate U-Boot bootloader image
84 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
96 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
85
97
86 # Remove U-Boot sources
98 # Remove U-Boot sources
87 rm -fr "${R}/tmp/u-boot"
99 rm -fr "${R}/tmp/u-boot"
88 fi
100 fi
@@ -1,51 +1,47
1 #
1 #
2 # Build and Setup fbturbo Xorg driver
2 # Build and Setup fbturbo Xorg driver
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_FBTURBO" = true ] ; then
8 if [ "$ENABLE_FBTURBO" = true ] ; then
9 # Install c/c++ build environment inside the chroot
9 # Install c/c++ build environment inside the chroot
10 chroot_install_cc
10 chroot_install_cc
11
11
12 # Copy existing fbturbo sources into chroot directory
12 # Copy existing fbturbo sources into chroot directory
13 if [ -n "$FBTURBOSRC_DIR" ] && [ -d "$FBTURBOSRC_DIR" ] ; then
13 if [ -n "$FBTURBOSRC_DIR" ] && [ -d "$FBTURBOSRC_DIR" ] ; then
14 # Copy local fbturbo sources
14 # Copy local fbturbo sources
15 cp -r "${FBTURBOSRC_DIR}" "${R}/tmp"
15 cp -r "${FBTURBOSRC_DIR}" "${R}/tmp"
16 else
16 else
17 # Create temporary directory for fbturbo sources
17 # Create temporary directory for fbturbo sources
18 temp_dir=$(as_nobody mktemp -d)
18 temp_dir=$(as_nobody mktemp -d)
19
19
20 # Fetch fbturbo sources
20 # Fetch fbturbo sources
21 as_nobody git -C "${temp_dir}" clone "${FBTURBO_URL}"
21 as_nobody git -C "${temp_dir}" clone "${FBTURBO_URL}"
22
22
23 # Move downloaded fbturbo sources
23 # Move downloaded fbturbo sources
24 mv "${temp_dir}/xf86-video-fbturbo" "${R}/tmp/"
24 mv "${temp_dir}/xf86-video-fbturbo" "${R}/tmp/"
25
25
26 # Remove temporary directory for fbturbo sources
26 # Remove temporary directory for fbturbo sources
27 rm -fr "${temp_dir}"
27 rm -fr "${temp_dir}"
28 fi
28 fi
29
29
30 # Install Xorg build dependencies
30 # Install Xorg build dependencies
31 if [ "$RELEASE" = "jessie" ] || [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
31 chroot_exec apt-get -q -y --no-install-recommends --allow-unauthenticated install xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake libdrm-dev
32 chroot_exec apt-get -q -y --no-install-recommends install xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake libdrm-dev
33 elif [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
34 chroot_exec apt-get -q -y --no-install-recommends --allow-unauthenticated install xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake libdrm-dev
35 fi
36
32
37 # Build and install fbturbo driver inside chroot
33 # Build and install fbturbo driver inside chroot
38 chroot_exec /bin/bash -x <<'EOF'
34 chroot_exec /bin/bash -x <<'EOF'
39 cd /tmp/xf86-video-fbturbo
35 cd /tmp/xf86-video-fbturbo
40 autoreconf -vi
36 autoreconf -vi
41 ./configure --prefix=/usr
37 ./configure --prefix=/usr
42 make
38 make
43 make install
39 make install
44 EOF
40 EOF
45
41
46 # Install fbturbo driver Xorg configuration
42 # Install fbturbo driver Xorg configuration
47 install_readonly files/xorg/99-fbturbo.conf "${R}/usr/share/X11/xorg.conf.d/99-fbturbo.conf"
43 install_readonly files/xorg/99-fbturbo.conf "${R}/usr/share/X11/xorg.conf.d/99-fbturbo.conf"
48
44
49 # Remove Xorg build dependencies
45 # Remove Xorg build dependencies
50 chroot_exec apt-get -qq -y --auto-remove purge xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake libdrm-dev
46 chroot_exec apt-get -qq -y --auto-remove purge xorg-dev xutils-dev x11proto-dri2-dev libltdl-dev libtool automake libdrm-dev
51 fi
47 fi
@@ -1,85 +1,76
1 #
1 #
2 # Reduce system disk usage
2 # Reduce system disk usage
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Reduce the image size by various operations
8 # Reduce the image size by various operations
9 if [ "$ENABLE_REDUCE" = true ] ; then
9 if [ "$ENABLE_REDUCE" = true ] ; then
10 if [ "$REDUCE_APT" = true ] ; then
10 if [ "$REDUCE_APT" = true ] ; then
11 # Install dpkg configuration file
11 # Install dpkg configuration file
12 if [ "$REDUCE_DOC" = true ] || [ "$REDUCE_MAN" = true ] ; then
12 if [ "$REDUCE_DOC" = true ] || [ "$REDUCE_MAN" = true ] ; then
13 install_readonly files/dpkg/01nodoc "${ETC_DIR}/dpkg/dpkg.cfg.d/01nodoc"
13 install_readonly files/dpkg/01nodoc "${ETC_DIR}/dpkg/dpkg.cfg.d/01nodoc"
14 fi
14 fi
15
15
16 # Install APT configuration files
16 # Install APT configuration files
17 install_readonly files/apt/02nocache "${ETC_DIR}/apt/apt.conf.d/02nocache"
17 install_readonly files/apt/02nocache "${ETC_DIR}/apt/apt.conf.d/02nocache"
18 install_readonly files/apt/03compress "${ETC_DIR}/apt/apt.conf.d/03compress"
18 install_readonly files/apt/03compress "${ETC_DIR}/apt/apt.conf.d/03compress"
19 install_readonly files/apt/04norecommends "${ETC_DIR}/apt/apt.conf.d/04norecommends"
19 install_readonly files/apt/04norecommends "${ETC_DIR}/apt/apt.conf.d/04norecommends"
20
20
21 # Remove APT cache files
21 # Remove APT cache files
22 rm -fr "${R}/var/cache/apt/pkgcache.bin"
22 rm -fr "${R}/var/cache/apt/pkgcache.bin"
23 rm -fr "${R}/var/cache/apt/srcpkgcache.bin"
23 rm -fr "${R}/var/cache/apt/srcpkgcache.bin"
24 fi
24 fi
25
25
26 # Remove all doc files
26 # Remove all doc files
27 if [ "$REDUCE_DOC" = true ] ; then
27 if [ "$REDUCE_DOC" = true ] ; then
28 find "${R}/usr/share/doc" -depth -type f ! -name copyright | xargs rm || true
28 find "${R}/usr/share/doc" -depth -type f ! -name copyright -print0 | xargs -0 rm || true
29 find "${R}/usr/share/doc" -empty | xargs rmdir || true
29 find "${R}/usr/share/doc" -empty -print0 | xargs -0 rmdir || true
30 fi
30 fi
31
31
32 # Remove all man pages and info files
32 # Remove all man pages and info files
33 if [ "$REDUCE_MAN" = true ] ; then
33 if [ "$REDUCE_MAN" = true ] ; then
34 rm -rf "${R}/usr/share/man" "${R}/usr/share/groff" "${R}/usr/share/info" "${R}/usr/share/lintian" "${R}/usr/share/linda" "${R}/var/cache/man"
34 rm -rf "${R}/usr/share/man" "${R}/usr/share/groff" "${R}/usr/share/info" "${R}/usr/share/lintian" "${R}/usr/share/linda" "${R}/var/cache/man"
35 fi
35 fi
36
36
37 # Remove all locale translation files
37 # Remove all locale translation files
38 if [ "$REDUCE_LOCALE" = true ] ; then
38 if [ "$REDUCE_LOCALE" = true ] ; then
39 find "${R}/usr/share/locale" -mindepth 1 -maxdepth 1 ! -name 'en' | xargs rm -r
39 find "${R}/usr/share/locale" -mindepth 1 -maxdepth 1 ! -name 'en' -print0 | xargs -0 rm -r
40 fi
40 fi
41
41
42 # Remove hwdb PCI device classes (experimental)
42 # Remove hwdb PCI device classes (experimental)
43 if [ "$REDUCE_HWDB" = true ] ; then
43 if [ "$REDUCE_HWDB" = true ] ; then
44 rm -fr "/lib/udev/hwdb.d/20-pci-*"
44 rm -fr "/lib/udev/hwdb.d/20-pci-*"
45 fi
45 fi
46
46
47 # Replace bash shell by dash shell (experimental)
47 # Replace bash shell by dash shell (experimental)
48 if [ "$REDUCE_BASH" = true ] ; then
48 if [ "$REDUCE_BASH" = true ] ; then
49 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
49 # Purge bash and update alternatives
50 echo "Yes, do as I say!" | chroot_exec apt-get purge -qq -y --allow-remove-essential bash
50 echo "Yes, do as I say!" | chroot_exec apt-get purge -qq -y --allow-remove-essential bash
51 else
52 echo "Yes, do as I say!" | chroot_exec apt-get purge -qq -y --force-yes bash
53 fi
54
55 chroot_exec update-alternatives --install /bin/bash bash /bin/dash 100
51 chroot_exec update-alternatives --install /bin/bash bash /bin/dash 100
56 fi
52 fi
57
53
58 # Remove sound utils and libraries
54 # Remove sound utils and libraries
59 if [ "$ENABLE_SOUND" = false ] ; then
55 if [ "$ENABLE_SOUND" = false ] ; then
60 chroot_exec apt-get -qq -y purge alsa-utils libsamplerate0 libasound2 libasound2-data
56 chroot_exec apt-get -qq -y purge alsa-utils libsamplerate0 libasound2 libasound2-data
61 fi
57 fi
62
58
63 # Re-install tools for managing kernel modules
64 if [ "$RELEASE" = "jessie" ] ; then
65 chroot_exec apt-get -qq -y install module-init-tools
66 fi
67
68 # Remove GPU kernels
59 # Remove GPU kernels
69 if [ "$ENABLE_MINGPU" = true ] ; then
60 if [ "$ENABLE_MINGPU" = true ] ; then
70 rm -f "${BOOT_DIR}/start.elf"
61 rm -f "${BOOT_DIR}/start.elf"
71 rm -f "${BOOT_DIR}/fixup.dat"
62 rm -f "${BOOT_DIR}/fixup.dat"
72 rm -f "${BOOT_DIR}/start_x.elf"
63 rm -f "${BOOT_DIR}/start_x.elf"
73 rm -f "${BOOT_DIR}/fixup_x.dat"
64 rm -f "${BOOT_DIR}/fixup_x.dat"
74 fi
65 fi
75
66
76 # Remove kernel and initrd from /boot (already in /boot/firmware)
67 # Remove kernel and initrd from /boot (already in /boot/firmware)
77 if [ "$BUILD_KERNEL" = false ] ; then
68 if [ "$BUILD_KERNEL" = false ] ; then
78 rm -f "${R}/boot/vmlinuz-*"
69 rm -f "${R}/boot/vmlinuz-*"
79 rm -f "${R}/boot/initrd.img-*"
70 rm -f "${R}/boot/initrd.img-*"
80 fi
71 fi
81
72
82 # Clean APT list of repositories
73 # Clean APT list of repositories
83 rm -fr "${R}/var/lib/apt/lists/*"
74 rm -fr "${R}/var/lib/apt/lists/*"
84 chroot_exec apt-get -qq -y update
75 chroot_exec apt-get -qq -y update
85 fi
76 fi
@@ -1,15 +1,16
1 # Set device tree fdtfile
1 # Set device tree fdtfile
2 setenv dtbfile bcm2709-rpi-2-b.dtb
2 setenv dtbfile bcm2709-rpi-2-b.dtb
3
3
4 # Tell Linux that it is booting on a Raspberry Pi2/3
4 # Tell Linux that it is booting on a Raspberry Pi2/3
5 setenv machid 0x00000c42
5 setenv machid 0x00000c42
6
6
7 # Save these changes to u-boot's environment
7 # Save these changes to u-boot's environment
8 saveenv
8 saveenv
9
9
10 # Load the existing Linux kernel into RAM
10 # Load the existing Linux kernel into RAM
11 mmc dev 0
11 fatload mmc 0:1 ${kernel_addr_r} kernel7.img
12 fatload mmc 0:1 ${kernel_addr_r} kernel7.img
12 fatload mmc 0:1 ${fdt_addr_r} ${dtbfile}
13 fatload mmc 0:1 ${fdt_addr_r} ${dtbfile}
13 fatload mmc 0:1 ${ramdisk_addr_r} ${initramfs}
14 fatload mmc 0:1 ${ramdisk_addr_r} ${initramfs}
14
15
15 # Boot the kernel we have just loaded
16 # Boot the kernel we have just loaded
@@ -1,15 +1,15
1 [Unit]
1 [Unit]
2 Description=Packet Filtering Framework
2 Description=Packet Filtering Framework
3 DefaultDependencies=no
3 DefaultDependencies=no
4 After=systemd-sysctl.service
4 After=systemd-sysctl.service
5 Before=sysinit.target
5 Before=sysinit.target
6
6
7 [Service]
7 [Service]
8 Type=oneshot
8 Type=oneshot
9 ExecStart=/sbin/ip6tables-restore /etc/iptables/ip6tables.rules
9 ExecStart=/sbin/ip6tables-restore -w 5 /etc/iptables/ip6tables.rules
10 ExecReload=/sbin/ip6tables-restore /etc/iptables/ip6tables.rules
10 ExecReload=/sbin/ip6tables-restore /etc/iptables/ip6tables.rules
11 ExecStop=/etc/iptables/flush-ip6tables.sh
11 ExecStop=/etc/iptables/flush-ip6tables.sh
12 RemainAfterExit=yes
12 RemainAfterExit=yes
13
13
14 [Install]
14 [Install]
15 WantedBy=multi-user.target
15 WantedBy=multi-user.target
@@ -1,15 +1,15
1 [Unit]
1 [Unit]
2 Description=Packet Filtering Framework
2 Description=Packet Filtering Framework
3 DefaultDependencies=no
3 DefaultDependencies=no
4 After=systemd-sysctl.service
4 After=systemd-sysctl.service
5 Before=sysinit.target
5 Before=sysinit.target
6
6
7 [Service]
7 [Service]
8 Type=oneshot
8 Type=oneshot
9 ExecStart=/sbin/iptables-restore /etc/iptables/iptables.rules
9 ExecStart=/sbin/iptables-restore -w 5 /etc/iptables/iptables.rules
10 ExecReload=/sbin/iptables-restore /etc/iptables/iptables.rules
10 ExecReload=/sbin/iptables-restore /etc/iptables/iptables.rules
11 ExecStop=/etc/iptables/flush-iptables.sh
11 ExecStop=/etc/iptables/flush-iptables.sh
12 RemainAfterExit=yes
12 RemainAfterExit=yes
13
13
14 [Install]
14 [Install]
15 WantedBy=multi-user.target
15 WantedBy=multi-user.target
@@ -1,1 +1,1
1 rpi2-jessie
1 RaspberryPI
@@ -1,6 +1,6
1 127.0.0.1 localhost
1 127.0.0.1 localhost
2 127.0.1.1 rpi2-jessie
2 127.0.1.1 RaspberryPI
3
3
4 ::1 localhost ip6-localhost ip6-loopback
4 ::1 localhost ip6-localhost ip6-loopback
5 ff02::1 ip6-allnodes
5 ff02::1 ip6-allnodes
6 ff02::2 ip6-allrouters
6 ff02::2 ip6-allrouters
@@ -1,81 +1,77
1 # This file contains utility functions used by rpi23-gen-image.sh
1 # This file contains utility functions used by rpi23-gen-image.sh
2
2
3 cleanup (){
3 cleanup (){
4 set +x
4 set +x
5 set +e
5 set +e
6
6
7 # Identify and kill all processes still using files
7 # Identify and kill all processes still using files
8 echo "killing processes using mount point ..."
8 echo "killing processes using mount point ..."
9 fuser -k "${R}"
9 fuser -k "${R}"
10 sleep 3
10 sleep 3
11 fuser -9 -k -v "${R}"
11 fuser -9 -k -v "${R}"
12
12
13 # Clean up temporary .password file
13 # Clean up temporary .password file
14 if [ -r ".password" ] ; then
14 if [ -r ".password" ] ; then
15 shred -zu .password
15 shred -zu .password
16 fi
16 fi
17
17
18 # Clean up all temporary mount points
18 # Clean up all temporary mount points
19 echo "removing temporary mount points ..."
19 echo "removing temporary mount points ..."
20 umount -l "${R}/proc" 2> /dev/null
20 umount -l "${R}/proc" 2> /dev/null
21 umount -l "${R}/sys" 2> /dev/null
21 umount -l "${R}/sys" 2> /dev/null
22 umount -l "${R}/dev/pts" 2> /dev/null
22 umount -l "${R}/dev/pts" 2> /dev/null
23 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
23 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
24 umount "$BUILDDIR/mount" 2> /dev/null
24 umount "$BUILDDIR/mount" 2> /dev/null
25 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
25 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
26 losetup -d "$ROOT_LOOP" 2> /dev/null
26 losetup -d "$ROOT_LOOP" 2> /dev/null
27 losetup -d "$FRMW_LOOP" 2> /dev/null
27 losetup -d "$FRMW_LOOP" 2> /dev/null
28 trap - 0 1 2 3 6
28 trap - 0 1 2 3 6
29 }
29 }
30
30
31 chroot_exec() {
31 chroot_exec() {
32 # Exec command in chroot
32 # Exec command in chroot
33 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot ${R} $*
33 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
34 }
34 }
35
35
36 as_nobody() {
36 as_nobody() {
37 # Exec command as user nobody
37 # Exec command as user nobody
38 sudo -E -u nobody LANG=C LC_ALL=C $*
38 sudo -E -u nobody LANG=C LC_ALL=C "$@"
39 }
39 }
40
40
41 install_readonly() {
41 install_readonly() {
42 # Install file with user read-only permissions
42 # Install file with user read-only permissions
43 install -o root -g root -m 644 $*
43 install -o root -g root -m 644 "$@"
44 }
44 }
45
45
46 install_exec() {
46 install_exec() {
47 # Install file with root exec permissions
47 # Install file with root exec permissions
48 install -o root -g root -m 744 $*
48 install -o root -g root -m 744 "$@"
49 }
49 }
50
50
51 use_template () {
51 use_template () {
52 # Test if configuration template file exists
52 # Test if configuration template file exists
53 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
53 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
54 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
54 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
55 exit 1
55 exit 1
56 fi
56 fi
57
57
58 # Load template configuration parameters
58 # Load template configuration parameters
59 . "./templates/${CONFIG_TEMPLATE}"
59 . "./templates/${CONFIG_TEMPLATE}"
60 }
60 }
61
61
62 chroot_install_cc() {
62 chroot_install_cc() {
63 # Install c/c++ build environment inside the chroot
63 # Install c/c++ build environment inside the chroot
64 if [ -z "${COMPILER_PACKAGES}" ] ; then
64 if [ -z "${COMPILER_PACKAGES}" ] ; then
65 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
65 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
66
66 # Install COMPILER_PACKAGES in chroot
67 if [ "$RELEASE" = "jessie" ] || [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
67 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install "${COMPILER_PACKAGES}"
68 chroot_exec apt-get -q -y --no-install-recommends install ${COMPILER_PACKAGES}
69 elif [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
70 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install ${COMPILER_PACKAGES}
71 fi
72 fi
68 fi
73 }
69 }
74
70
75 chroot_remove_cc() {
71 chroot_remove_cc() {
76 # Remove c/c++ build environment from the chroot
72 # Remove c/c++ build environment from the chroot
77 if [ ! -z "${COMPILER_PACKAGES}" ] ; then
73 if [ -n "${COMPILER_PACKAGES}" ] ; then
78 chroot_exec apt-get -qq -y --auto-remove purge ${COMPILER_PACKAGES}
74 chroot_exec apt-get -qq -y --auto-remove purge "${COMPILER_PACKAGES}"
79 COMPILER_PACKAGES=""
75 COMPILER_PACKAGES=""
80 fi
76 fi
81 }
77 }
@@ -1,774 +1,807
1 #!/bin/sh
1 #!/bin/sh
2
3 ########################################################################
2 ########################################################################
4 # rpi23-gen-image.sh 2015-2017
3 # rpi23-gen-image.sh 2015-2017
5 #
4 #
6 # Advanced Debian "jessie", "stretch" and "buster" bootstrap script for RPi2/3
5 # Advanced Debian "stretch" and "buster" bootstrap script for Raspberry Pi
7 #
6 #
8 # This program is free software; you can redistribute it and/or
7 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License
8 # modify it under the terms of the GNU General Public License
10 # as published by the Free Software Foundation; either version 2
9 # as published by the Free Software Foundation; either version 2
11 # of the License, or (at your option) any later version.
10 # of the License, or (at your option) any later version.
12 #
11 #
13 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
14 #
13 #
15 # Big thanks for patches and enhancements by 20+ github contributors!
14 # Big thanks for patches and enhancements by 20+ github contributors!
16 ########################################################################
15 ########################################################################
17
16
18 # Are we running as root?
17 # Are we running as root?
19 if [ "$(id -u)" -ne "0" ] ; then
18 if [ "$(id -u)" -ne "0" ] ; then
20 echo "error: this script must be executed with root privileges!"
19 echo "error: this script must be executed with root privileges!"
21 exit 1
20 exit 1
22 fi
21 fi
23
22
24 # Check if ./functions.sh script exists
23 # Check if ./functions.sh script exists
25 if [ ! -r "./functions.sh" ] ; then
24 if [ ! -r "./functions.sh" ] ; then
26 echo "error: './functions.sh' required script not found!"
25 echo "error: './functions.sh' required script not found!"
27 exit 1
26 exit 1
28 fi
27 fi
29
28
30 # Load utility functions
29 # Load utility functions
31 . ./functions.sh
30 . ./functions.sh
32
31
33 # Load parameters from configuration template file
32 # Load parameters from configuration template file
34 if [ ! -z "$CONFIG_TEMPLATE" ] ; then
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
35 use_template
34 use_template
36 fi
35 fi
37
36
38 # Introduce settings
37 # Introduce settings
39 set -e
38 set -e
40 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
39 echo -n -e "\n#\n# RPi 0/1/2/3 Bootstrap Settings\n#\n"
41 set -x
40 set -x
42
41
43 # Raspberry Pi model configuration
42 # Raspberry Pi model configuration
44 RPI_MODEL=${RPI_MODEL:=2}
43 RPI_MODEL=${RPI_MODEL:=2}
45
44
46 #bcm2708-rpi-0-w.dtb (Used for Pi 0 and PI 0W)
47 RPI0_DTB_FILE=${RPI0_DTB_FILE:=bcm2708-rpi-0-w.dtb}
48 RPI0_UBOOT_CONFIG=${RPI0_UBOOT_CONFIG:=rpi_defconfig}
49
50 #bcm2708-rpi-b.dtb (Used for Pi 1 model A and B)
51 RPI1_DTB_FILE=${RPI1_DTB_FILE:=bcm2708-rpi-b.dtb}
52 RPI1_UBOOT_CONFIG=${RPI1_UBOOT_CONFIG:=rpi_defconfig}
53
54 #bcm2708-rpi-b-plus.dtb (Used for Pi 1 model B+ and A+)
55 RPI1P_DTB_FILE=${RPI1P_DTB_FILE:=bcm2708-rpi-b-plus.dtb}
56 RPI1P_UBOOT_CONFIG=${RPI1P_UBOOT_CONFIG:=rpi_defconfig}
57
58 #bcm2709-rpi-2-b.dtb (Used for Pi 2 model B)
59 RPI2_DTB_FILE=${RPI2_DTB_FILE:=bcm2709-rpi-2-b.dtb}
60 RPI2_UBOOT_CONFIG=${RPI2_UBOOT_CONFIG:=rpi_2_defconfig}
61
62 #bcm2710-rpi-3-b.dtb (Used for Pi 3 model B)
63 RPI3_DTB_FILE=${RPI3_DTB_FILE:=bcm2710-rpi-3-b.dtb}
64 RPI3_UBOOT_CONFIG=${RPI3_UBOOT_CONFIG:=rpi_3_32b_defconfig}
65
66 #bcm2710-rpi-3-b-plus.dtb (Used for Pi 3 model B+)
67 RPI3P_DTB_FILE=${RPI3P_DTB_FILE:=bcm2710-rpi-3-b-plus.dtb}
68 RPI3P_UBOOT_CONFIG=${RPI3P_UBOOT_CONFIG:=rpi_3_32b_defconfig}
69
70 # Debian release
45 # Debian release
71 RELEASE=${RELEASE:=jessie}
46 RELEASE=${RELEASE:=buster}
72 KERNEL_ARCH=${KERNEL_ARCH:=arm}
73 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
74 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
75 COLLABORA_KERNEL=${COLLABORA_KERNEL:=3.18.0-trunk-rpi2}
76 if [ "$KERNEL_ARCH" = "arm64" ] ; then
77 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
78 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
79 fi
80
81 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
82 #RASPBERRY PI 1, PI ZERO, PI ZERO W, AND COMPUTE MODULE DEFAULT Kernel BUILD CONFIGURATION
83 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
84 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
85 else
86 #RASPBERRY PI 2, PI 3, PI 3+, AND COMPUTE MODULE 3 DEFAULT Kernel BUILD CONFIGURATION
87 #https://www.raspberrypi.org/documentation/linux/kernel/building.md
88 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
89 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
90 fi
91
47
92 if [ "$RELEASE_ARCH" = "arm64" ] ; then
48 # Kernel Branch
93 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
94 else
95 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
96 fi
97 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
98
50
99 # URLs
51 # URLs
100 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
101 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
102 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
103 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
104 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
105 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
106
60
107 # Build directories
61 # Build directories
108 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
62 WORKDIR=$(pwd)
63 BASEDIR=${BASEDIR:=${WORKDIR}/images/${RELEASE}}
109 BUILDDIR="${BASEDIR}/build"
64 BUILDDIR="${BASEDIR}/build"
110
65
111 # Prepare date string for default image file name
112 DATE="$(date +%Y-%m-%d)"
113 if [ -z "$KERNEL_BRANCH" ] ; then
114 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
115 else
116 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
117 fi
118
119 # Chroot directories
66 # Chroot directories
120 R="${BUILDDIR}/chroot"
67 R="${BUILDDIR}/chroot"
121 ETC_DIR="${R}/etc"
68 ETC_DIR="${R}/etc"
122 LIB_DIR="${R}/lib"
69 LIB_DIR="${R}/lib"
123 BOOT_DIR="${R}/boot/firmware"
70 BOOT_DIR="${R}/boot/firmware"
124 KERNEL_DIR="${R}/usr/src/linux"
71 KERNEL_DIR="${R}/usr/src/linux"
125 WLAN_FIRMWARE_DIR="${R}/lib/firmware/brcm"
72 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
73 BLUETOOTH_FIRMWARE_DIR="${ETC_DIR}/firmware/bt"
126
74
127 # Firmware directory: Blank if download from github
75 # Firmware directory: Blank if download from github
128 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
76 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
129
77
130 # General settings
78 # General settings
79 SET_ARCH=${SET_ARCH:=32}
131 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
80 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
132 PASSWORD=${PASSWORD:=raspberry}
81 PASSWORD=${PASSWORD:=raspberry}
133 USER_PASSWORD=${USER_PASSWORD:=raspberry}
82 USER_PASSWORD=${USER_PASSWORD:=raspberry}
134 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
83 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
135 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
84 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
136 EXPANDROOT=${EXPANDROOT:=true}
85 EXPANDROOT=${EXPANDROOT:=true}
137
86
138 # Keyboard settings
87 # Keyboard settings
139 XKB_MODEL=${XKB_MODEL:=""}
88 XKB_MODEL=${XKB_MODEL:=""}
140 XKB_LAYOUT=${XKB_LAYOUT:=""}
89 XKB_LAYOUT=${XKB_LAYOUT:=""}
141 XKB_VARIANT=${XKB_VARIANT:=""}
90 XKB_VARIANT=${XKB_VARIANT:=""}
142 XKB_OPTIONS=${XKB_OPTIONS:=""}
91 XKB_OPTIONS=${XKB_OPTIONS:=""}
143
92
144 # Network settings (DHCP)
93 # Network settings (DHCP)
145 ENABLE_DHCP=${ENABLE_DHCP:=true}
94 ENABLE_DHCP=${ENABLE_DHCP:=true}
146
95
147 # Network settings (static)
96 # Network settings (static)
148 NET_ADDRESS=${NET_ADDRESS:=""}
97 NET_ADDRESS=${NET_ADDRESS:=""}
149 NET_GATEWAY=${NET_GATEWAY:=""}
98 NET_GATEWAY=${NET_GATEWAY:=""}
150 NET_DNS_1=${NET_DNS_1:=""}
99 NET_DNS_1=${NET_DNS_1:=""}
151 NET_DNS_2=${NET_DNS_2:=""}
100 NET_DNS_2=${NET_DNS_2:=""}
152 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
101 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
153 NET_NTP_1=${NET_NTP_1:=""}
102 NET_NTP_1=${NET_NTP_1:=""}
154 NET_NTP_2=${NET_NTP_2:=""}
103 NET_NTP_2=${NET_NTP_2:=""}
155
104
156 # APT settings
105 # APT settings
157 APT_PROXY=${APT_PROXY:=""}
106 APT_PROXY=${APT_PROXY:=""}
158 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
107 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
159
108
160 # Feature settings
109 # Feature settings
110 ENABLE_PRINTK=${ENABLE_PRINTK:=false}
111 ENABLE_BLUETOOTH=${ENABLE_BLUETOOTH:=false}
112 ENABLE_MINIUART_OVERLAY=${ENABLE_MINIUART_OVERLAY:=false}
161 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
113 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
162 ENABLE_I2C=${ENABLE_I2C:=false}
114 ENABLE_I2C=${ENABLE_I2C:=false}
163 ENABLE_SPI=${ENABLE_SPI:=false}
115 ENABLE_SPI=${ENABLE_SPI:=false}
164 ENABLE_IPV6=${ENABLE_IPV6:=true}
116 ENABLE_IPV6=${ENABLE_IPV6:=true}
165 ENABLE_SSHD=${ENABLE_SSHD:=true}
117 ENABLE_SSHD=${ENABLE_SSHD:=true}
166 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
118 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
167 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
119 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
168 ENABLE_SOUND=${ENABLE_SOUND:=true}
120 ENABLE_SOUND=${ENABLE_SOUND:=true}
169 ENABLE_DBUS=${ENABLE_DBUS:=true}
121 ENABLE_DBUS=${ENABLE_DBUS:=true}
170 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
122 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
171 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
123 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
172 ENABLE_XORG=${ENABLE_XORG:=false}
124 ENABLE_XORG=${ENABLE_XORG:=false}
173 ENABLE_WM=${ENABLE_WM:=""}
125 ENABLE_WM=${ENABLE_WM:=""}
174 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
126 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
175 ENABLE_USER=${ENABLE_USER:=true}
127 ENABLE_USER=${ENABLE_USER:=true}
176 USER_NAME=${USER_NAME:="pi"}
128 USER_NAME=${USER_NAME:="pi"}
177 ENABLE_ROOT=${ENABLE_ROOT:=false}
129 ENABLE_ROOT=${ENABLE_ROOT:=false}
178 ENABLE_QEMU=${ENABLE_QEMU:=false}
130 ENABLE_QEMU=${ENABLE_QEMU:=false}
131 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
179
132
180 # SSH settings
133 # SSH settings
181 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
134 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
182 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
135 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
183 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
136 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
184 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
137 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
185 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
138 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
186
139
187 # Advanced settings
140 # Advanced settings
188 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
141 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
189 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
142 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
190 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
143 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
191 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
144 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
192 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
145 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
146 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=false}
147 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
193 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
148 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
194 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
149 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
195 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
150 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
196 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
151 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
197 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
152 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
198 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
153 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
199 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
154 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
200
155
201 # Kernel compilation settings
156 # Kernel compilation settings
202 BUILD_KERNEL=${BUILD_KERNEL:=false}
157 BUILD_KERNEL=${BUILD_KERNEL:=true}
203 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
158 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
204 KERNEL_THREADS=${KERNEL_THREADS:=1}
159 KERNEL_THREADS=${KERNEL_THREADS:=1}
205 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
160 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
206 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
161 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
207 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
162 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
208 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
163 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
209 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
164 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
210
165
211 if [ "$KERNEL_ARCH" = "arm64" ] ; then
212 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
213 else
214 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
215 fi
216
217 # Kernel compilation from source directory settings
166 # Kernel compilation from source directory settings
218 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
167 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
219 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
168 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
220 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
169 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
221 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
170 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
222
171
223 # Reduce disk usage settings
172 # Reduce disk usage settings
224 REDUCE_APT=${REDUCE_APT:=true}
173 REDUCE_APT=${REDUCE_APT:=true}
225 REDUCE_DOC=${REDUCE_DOC:=true}
174 REDUCE_DOC=${REDUCE_DOC:=true}
226 REDUCE_MAN=${REDUCE_MAN:=true}
175 REDUCE_MAN=${REDUCE_MAN:=true}
227 REDUCE_VIM=${REDUCE_VIM:=false}
176 REDUCE_VIM=${REDUCE_VIM:=false}
228 REDUCE_BASH=${REDUCE_BASH:=false}
177 REDUCE_BASH=${REDUCE_BASH:=false}
229 REDUCE_HWDB=${REDUCE_HWDB:=true}
178 REDUCE_HWDB=${REDUCE_HWDB:=true}
230 REDUCE_SSHD=${REDUCE_SSHD:=true}
179 REDUCE_SSHD=${REDUCE_SSHD:=true}
231 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
180 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
232
181
233 # Encrypted filesystem settings
182 # Encrypted filesystem settings
234 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
183 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
235 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
184 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
236 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
185 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
237 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
186 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
238 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
187 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
239
188
240 # Chroot scripts directory
189 # Chroot scripts directory
241 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
190 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
242
191
243 # Packages required in the chroot build environment
192 # Packages required in the chroot build environment
244 APT_INCLUDES=${APT_INCLUDES:=""}
193 APT_INCLUDES=${APT_INCLUDES:=""}
245 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils"
194 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup,libnss-systemd"
195
196 # Packages to exclude from chroot build environment
197 APT_EXCLUDES=${APT_EXCLUDES:=""}
246
198
247 # Packages required for bootstrapping
199 # Packages required for bootstrapping
248 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
200 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
249 MISSING_PACKAGES=""
201 MISSING_PACKAGES=""
250
202
251 # Packages installed for c/c++ build environment in chroot (keep empty)
203 # Packages installed for c/c++ build environment in chroot (keep empty)
252 COMPILER_PACKAGES=""
204 COMPILER_PACKAGES=""
253
205
254 set +x
206 set +x
255
207
256 # Set Raspberry Pi model specific configuration
208 #Check if apt-cacher-ng has port 3142 open and set APT_PROXY
257 if [ "$RPI_MODEL" = 0 ] ; then
209 APT_CACHER_RUNNING=$(lsof -i :3142 | grep apt-cacher-ng | cut -d ' ' -f3 | uniq)
258 DTB_FILE=${RPI0_DTB_FILE}
210 if [ -n "${APT_CACHER_RUNNING}" ] ; then
259 UBOOT_CONFIG=${RPI0_UBOOT_CONFIG}
211 APT_PROXY=http://127.0.0.1:3142/
260 elif [ "$RPI_MODEL" = 1 ] ; then
261 DTB_FILE=${RPI1_DTB_FILE}
262 UBOOT_CONFIG=${RPI1_UBOOT_CONFIG}
263 elif [ "$RPI_MODEL" = 1P ] ; then
264 DTB_FILE=${RPI1P_DTB_FILE}
265 UBOOT_CONFIG=${RPI1P_UBOOT_CONFIG}
266 elif [ "$RPI_MODEL" = 2 ] ; then
267 DTB_FILE=${RPI2_DTB_FILE}
268 UBOOT_CONFIG=${RPI2_UBOOT_CONFIG}
269 elif [ "$RPI_MODEL" = 3 ] ; then
270 DTB_FILE=${RPI3_DTB_FILE}
271 UBOOT_CONFIG=${RPI3_UBOOT_CONFIG}
272 elif [ "$RPI_MODEL" = 3P ] ; then
273 DTB_FILE=${RPI3P_DTB_FILE}
274 UBOOT_CONFIG=${RPI3P_UBOOT_CONFIG}
275 else
276 echo "error: Raspberry Pi model ${RPI_MODEL} is not supported!"
277 exit 1
278 fi
212 fi
279
213
280 # Check if the internal wireless interface is supported by the RPi model
214 # Setup architecture specific settings
281 if [ "$ENABLE_WIRELESS" = true ] && ([ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ]); then
215 if [ -n "$SET_ARCH" ] ; then
216 # 64-bit configuration
217 if [ "$SET_ARCH" = 64 ] ; then
218 # General 64-bit depended settings
219 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
220 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
221 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
222
223 # Raspberry Pi model specific settings
224 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
225 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
226 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
227 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
228 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
229 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
230 else
231 echo "error: Only Raspberry PI 3 and 3B+ support 64-bit"
232 exit 1
233 fi
234 fi
235
236 # 32-bit configuration
237 if [ "$SET_ARCH" = 32 ] ; then
238 # General 32-bit dependend settings
239 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
240 KERNEL_ARCH=${KERNEL_ARCH:=arm}
241 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
242
243 # Raspberry Pi model specific settings
244 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
245 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
246 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
247 RELEASE_ARCH=${RELEASE_ARCH:=armel}
248 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
249 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
250 fi
282
251
283 echo "error: The selected Raspberry Pi model has no internal wireless interface"
252 # Raspberry Pi model specific settings
253 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
254 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
255 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
256 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
257 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
258 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
259 fi
260 fi
261 #SET_ARCH not set
262 else
263 echo "error: Please set '32' or '64' as value for SET_ARCH"
284 exit 1
264 exit 1
285 fi
265 fi
266 # Device specific configuration and U-Boot configuration
267 case "$RPI_MODEL" in
268 0)
269 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
270 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
271 ;;
272 1)
273 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
274 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
275 ;;
276 1P)
277 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
278 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
279 ;;
280 2)
281 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
282 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
283 ;;
284 3)
285 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
286 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
287 ;;
288 3P)
289 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
290 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
291 ;;
292 *)
293 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
294 exit 1
295 ;;
296 esac
297
298 # Raspberry PI 0,3,3P with Bluetooth and Wifi onboard
299 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
300 # Include bluetooth packages on supported boards
301 if [ "$ENABLE_BLUETOOTH" = true ] && [ "$ENABLE_CONSOLE" = false ]; then
302 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
303 fi
304 else # Raspberry PI 1,1P,2 without Wifi and bluetooth onboard
305 # Check if the internal wireless interface is not supported by the RPi model
306 if [ "$ENABLE_WIRELESS" = true ] || [ "$ENABLE_BLUETOOTH" = true ]; then
307 echo "error: The selected Raspberry Pi model has no integrated interface for wireless or bluetooth"
308 exit 1
309 fi
310 fi
311
312 # Prepare date string for default image file name
313 DATE="$(date +%Y-%m-%d)"
314 if [ -z "$KERNEL_BRANCH" ] ; then
315 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
316 else
317 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
318 fi
286
319
287 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
320 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
288 if [ ! -z "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
321 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
289 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
322 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
290 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
323 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
291 exit 1
324 exit 1
292 fi
325 fi
293 fi
326 fi
294
327
295 # Build RPi2/3 Linux kernel if required by Debian release
328 # Add cmake to compile videocore sources
296 if [ "$RELEASE" = "stretch" ] || [ "$RELEASE" = "buster" ] ; then
329 if [ "$ENABLE_VIDEOCORE" = true ] ; then
297 BUILD_KERNEL=true
330 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
298 fi
299
300 # Add packages required for kernel cross compilation
301 if [ "$BUILD_KERNEL" = true ] ; then
302 if [ "$KERNEL_ARCH" = "arm" ] ; then
303 if [ "$RELEASE_ARCH" = "armel" ]; then
304 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
305 fi
306 if [ "$RELEASE_ARCH" = "armhf" ]; then
307 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
308 fi
309 if [ "$RELEASE_ARCH" = "arm64" ]; then
310 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
311 fi
312 fi
313 fi
331 fi
314
332
315 # Add libncurses5 to enable kernel menuconfig
333 # Add libncurses5 to enable kernel menuconfig
316 if [ "$KERNEL_MENUCONFIG" = true ] ; then
334 if [ "$KERNEL_MENUCONFIG" = true ] ; then
317 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses5-dev"
335 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
318 fi
336 fi
319
337
320 # Add ccache compiler cache for (faster) kernel cross (re)compilation
338 # Add ccache compiler cache for (faster) kernel cross (re)compilation
321 if [ "$KERNEL_CCACHE" = true ] ; then
339 if [ "$KERNEL_CCACHE" = true ] ; then
322 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
340 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
323 fi
341 fi
324
342
325 # Add cryptsetup package to enable filesystem encryption
343 # Add cryptsetup package to enable filesystem encryption
326 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
344 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
327 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
345 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
328 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
346 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
329
347
330 if [ -z "$CRYPTFS_PASSWORD" ] ; then
348 if [ -z "$CRYPTFS_PASSWORD" ] ; then
331 echo "error: no password defined (CRYPTFS_PASSWORD)!"
349 echo "error: no password defined (CRYPTFS_PASSWORD)!"
332 exit 1
350 exit 1
333 fi
351 fi
334 ENABLE_INITRAMFS=true
352 ENABLE_INITRAMFS=true
335 fi
353 fi
336
354
337 # Add initramfs generation tools
355 # Add initramfs generation tools
338 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
356 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
339 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
357 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
340 fi
358 fi
341
359
342 # Add device-tree-compiler required for building the U-Boot bootloader
360 # Add device-tree-compiler required for building the U-Boot bootloader
343 if [ "$ENABLE_UBOOT" = true ] ; then
361 if [ "$ENABLE_UBOOT" = true ] ; then
344 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex"
362 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
363 fi
364
365 if [ "$ENABLE_BLUETOOTH" = true ] ; then
366 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
367 if [ "$ENABLE_CONSOLE" = false ] ; then
368 APT_INCLUDES="${APT_INCLUDES},bluetooth,bluez"
369 fi
370 fi
345 fi
371 fi
346
372
347 # Check if root SSH (v2) public key file exists
373 # Check if root SSH (v2) public key file exists
348 if [ ! -z "$SSH_ROOT_PUB_KEY" ] ; then
374 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
349 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
375 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
350 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
376 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
351 exit 1
377 exit 1
352 fi
378 fi
353 fi
379 fi
354
380
355 # Check if $USER_NAME SSH (v2) public key file exists
381 # Check if $USER_NAME SSH (v2) public key file exists
356 if [ ! -z "$SSH_USER_PUB_KEY" ] ; then
382 if [ -n "$SSH_USER_PUB_KEY" ] ; then
357 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
383 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
358 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
384 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
359 exit 1
385 exit 1
360 fi
386 fi
361 fi
387 fi
362
388
363 # Check if all required packages are installed on the build system
389 # Check if all required packages are installed on the build system
364 for package in $REQUIRED_PACKAGES ; do
390 for package in $REQUIRED_PACKAGES ; do
365 if [ "`dpkg-query -W -f='${Status}' $package`" != "install ok installed" ] ; then
391 if [ "$(dpkg-query -W -f='${Status}' "$package")" != "install ok installed" ] ; then
366 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
392 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
367 fi
393 fi
368 done
394 done
369
395
370 # If there are missing packages ask confirmation for install, or exit
396 # If there are missing packages ask confirmation for install, or exit
371 if [ -n "$MISSING_PACKAGES" ] ; then
397 if [ -n "$MISSING_PACKAGES" ] ; then
372 echo "the following packages needed by this script are not installed:"
398 echo "the following packages needed by this script are not installed:"
373 echo "$MISSING_PACKAGES"
399 echo "$MISSING_PACKAGES"
374
400
375 echo -n "\ndo you want to install the missing packages right now? [y/n] "
401 printf "\ndo you want to install the missing packages right now? [y/n] "
376 read confirm
402 read -r confirm
377 [ "$confirm" != "y" ] && exit 1
403 [ "$confirm" != "y" ] && exit 1
378
404
379 # Make sure all missing required packages are installed
405 # Make sure all missing required packages are installed
380 apt-get -qq -y install ${MISSING_PACKAGES}
406 apt-get -qq -y install `echo "${MISSING_PACKAGES}" | sed "s/ //"`
381 fi
407 fi
382
408
383 # Check if ./bootstrap.d directory exists
409 # Check if ./bootstrap.d directory exists
384 if [ ! -d "./bootstrap.d/" ] ; then
410 if [ ! -d "./bootstrap.d/" ] ; then
385 echo "error: './bootstrap.d' required directory not found!"
411 echo "error: './bootstrap.d' required directory not found!"
386 exit 1
412 exit 1
387 fi
413 fi
388
414
389 # Check if ./files directory exists
415 # Check if ./files directory exists
390 if [ ! -d "./files/" ] ; then
416 if [ ! -d "./files/" ] ; then
391 echo "error: './files' required directory not found!"
417 echo "error: './files' required directory not found!"
392 exit 1
418 exit 1
393 fi
419 fi
394
420
395 # Check if specified KERNELSRC_DIR directory exists
421 # Check if specified KERNELSRC_DIR directory exists
396 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
422 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
397 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
423 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
398 exit 1
424 exit 1
399 fi
425 fi
400
426
401 # Check if specified UBOOTSRC_DIR directory exists
427 # Check if specified UBOOTSRC_DIR directory exists
402 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
428 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
403 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
429 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
404 exit 1
430 exit 1
405 fi
431 fi
406
432
433 # Check if specified VIDEOCORESRC_DIR directory exists
434 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
435 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
436 exit 1
437 fi
438
407 # Check if specified FBTURBOSRC_DIR directory exists
439 # Check if specified FBTURBOSRC_DIR directory exists
408 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
440 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
409 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
441 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
410 exit 1
442 exit 1
411 fi
443 fi
412
444
413 # Check if specified CHROOT_SCRIPTS directory exists
445 # Check if specified CHROOT_SCRIPTS directory exists
414 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
446 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
415 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
447 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
416 exit 1
448 exit 1
417 fi
449 fi
418
450
419 # Check if specified device mapping already exists (will be used by cryptsetup)
451 # Check if specified device mapping already exists (will be used by cryptsetup)
420 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
452 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
421 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
453 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
422 exit 1
454 exit 1
423 fi
455 fi
424
456
425 # Don't clobber an old build
457 # Don't clobber an old build
426 if [ -e "$BUILDDIR" ] ; then
458 if [ -e "$BUILDDIR" ] ; then
427 echo "error: directory ${BUILDDIR} already exists, not proceeding"
459 echo "error: directory ${BUILDDIR} already exists, not proceeding"
428 exit 1
460 exit 1
429 fi
461 fi
430
462
431 # Setup chroot directory
463 # Setup chroot directory
432 mkdir -p "${R}"
464 mkdir -p "${R}"
433
465
434 # Check if build directory has enough of free disk space >512MB
466 # Check if build directory has enough of free disk space >512MB
435 if [ "$(df --output=avail ${BUILDDIR} | sed "1d")" -le "524288" ] ; then
467 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
436 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
468 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
437 exit 1
469 exit 1
438 fi
470 fi
439
471
440 set -x
472 set -x
441
473
442 # Call "cleanup" function on various signals and errors
474 # Call "cleanup" function on various signals and errors
443 trap cleanup 0 1 2 3 6
475 trap cleanup 0 1 2 3 6
444
476
445 # Add required packages for the minbase installation
477 # Add required packages for the minbase installation
446 if [ "$ENABLE_MINBASE" = true ] ; then
478 if [ "$ENABLE_MINBASE" = true ] ; then
447 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
479 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
448 fi
480 fi
449
481
450 # Add required locales packages
451 if [ "$DEFLOCAL" != "en_US.UTF-8" ] ; then
452 APT_INCLUDES="${APT_INCLUDES},locales,keyboard-configuration,console-setup"
453 fi
454
455 # Add parted package, required to get partprobe utility
482 # Add parted package, required to get partprobe utility
456 if [ "$EXPANDROOT" = true ] ; then
483 if [ "$EXPANDROOT" = true ] ; then
457 APT_INCLUDES="${APT_INCLUDES},parted"
484 APT_INCLUDES="${APT_INCLUDES},parted"
458 fi
485 fi
459
486
460 # Add dbus package, recommended if using systemd
487 # Add dbus package, recommended if using systemd
461 if [ "$ENABLE_DBUS" = true ] ; then
488 if [ "$ENABLE_DBUS" = true ] ; then
462 APT_INCLUDES="${APT_INCLUDES},dbus"
489 APT_INCLUDES="${APT_INCLUDES},dbus"
463 fi
490 fi
464
491
465 # Add iptables IPv4/IPv6 package
492 # Add iptables IPv4/IPv6 package
466 if [ "$ENABLE_IPTABLES" = true ] ; then
493 if [ "$ENABLE_IPTABLES" = true ] ; then
467 APT_INCLUDES="${APT_INCLUDES},iptables"
494 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
468 fi
495 fi
469
496
470 # Add openssh server package
497 # Add openssh server package
471 if [ "$ENABLE_SSHD" = true ] ; then
498 if [ "$ENABLE_SSHD" = true ] ; then
472 APT_INCLUDES="${APT_INCLUDES},openssh-server"
499 APT_INCLUDES="${APT_INCLUDES},openssh-server"
473 fi
500 fi
474
501
475 # Add alsa-utils package
502 # Add alsa-utils package
476 if [ "$ENABLE_SOUND" = true ] ; then
503 if [ "$ENABLE_SOUND" = true ] ; then
477 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
504 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
478 fi
505 fi
479
506
480 # Add rng-tools package
507 # Add rng-tools package
481 if [ "$ENABLE_HWRANDOM" = true ] ; then
508 if [ "$ENABLE_HWRANDOM" = true ] ; then
482 APT_INCLUDES="${APT_INCLUDES},rng-tools"
509 APT_INCLUDES="${APT_INCLUDES},rng-tools"
483 fi
510 fi
484
511
485 # Add fbturbo video driver
512 # Add fbturbo video driver
486 if [ "$ENABLE_FBTURBO" = true ] ; then
513 if [ "$ENABLE_FBTURBO" = true ] ; then
487 # Enable xorg package dependencies
514 # Enable xorg package dependencies
488 ENABLE_XORG=true
515 ENABLE_XORG=true
489 fi
516 fi
490
517
491 # Add user defined window manager package
518 # Add user defined window manager package
492 if [ -n "$ENABLE_WM" ] ; then
519 if [ -n "$ENABLE_WM" ] ; then
493 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
520 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
494
521
495 # Enable xorg package dependencies
522 # Enable xorg package dependencies
496 ENABLE_XORG=true
523 ENABLE_XORG=true
497 fi
524 fi
498
525
499 # Add xorg package
526 # Add xorg package
500 if [ "$ENABLE_XORG" = true ] ; then
527 if [ "$ENABLE_XORG" = true ] ; then
501 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
528 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
502 fi
529 fi
503
530
504 # Replace selected packages with smaller clones
531 # Replace selected packages with smaller clones
505 if [ "$ENABLE_REDUCE" = true ] ; then
532 if [ "$ENABLE_REDUCE" = true ] ; then
506 # Add levee package instead of vim-tiny
533 # Add levee package instead of vim-tiny
507 if [ "$REDUCE_VIM" = true ] ; then
534 if [ "$REDUCE_VIM" = true ] ; then
508 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
535 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
509 fi
536 fi
510
537
511 # Add dropbear package instead of openssh-server
538 # Add dropbear package instead of openssh-server
512 if [ "$REDUCE_SSHD" = true ] ; then
539 if [ "$REDUCE_SSHD" = true ] ; then
513 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/openssh-server/dropbear/")"
540 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
514 fi
541 fi
515 fi
542 fi
516
543
517 if [ "$RELEASE" != "jessie" ] ; then
544 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
518 APT_INCLUDES="${APT_INCLUDES},libnss-systemd"
545 if [ "$ENABLE_SYSVINIT" = false ] ; then
546 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
547 fi
548
549 # Check if kernel is getting compiled
550 if [ "$BUILD_KERNEL" = false ] ; then
551 echo "Downloading precompiled kernel"
552 echo "error: not configured"
553 exit 1;
554 # BUILD_KERNEL=true
555 else
556 echo "No precompiled kernel repositories were added"
519 fi
557 fi
520
558
521 # Configure kernel sources if no KERNELSRC_DIR
559 # Configure kernel sources if no KERNELSRC_DIR
522 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
560 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
523 KERNELSRC_CONFIG=true
561 KERNELSRC_CONFIG=true
524 fi
562 fi
525
563
526 # Configure reduced kernel
564 # Configure reduced kernel
527 if [ "$KERNEL_REDUCE" = true ] ; then
565 if [ "$KERNEL_REDUCE" = true ] ; then
528 KERNELSRC_CONFIG=false
566 KERNELSRC_CONFIG=false
529 fi
567 fi
530
568
531 # Configure qemu compatible kernel
569 # Configure qemu compatible kernel
532 if [ "$ENABLE_QEMU" = true ] ; then
570 if [ "$ENABLE_QEMU" = true ] ; then
533 DTB_FILE=vexpress-v2p-ca15_a7.dtb
571 DTB_FILE=vexpress-v2p-ca15_a7.dtb
534 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
572 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
535 KERNEL_DEFCONFIG="vexpress_defconfig"
573 KERNEL_DEFCONFIG="vexpress_defconfig"
536 if [ "$KERNEL_MENUCONFIG" = false ] ; then
574 if [ "$KERNEL_MENUCONFIG" = false ] ; then
537 KERNEL_OLDDEFCONFIG=true
575 KERNEL_OLDDEFCONFIG=true
538 fi
576 fi
539 fi
577 fi
540
578
541 # Execute bootstrap scripts
579 # Execute bootstrap scripts
542 for SCRIPT in bootstrap.d/*.sh; do
580 for SCRIPT in bootstrap.d/*.sh; do
543 head -n 3 "$SCRIPT"
581 head -n 3 "$SCRIPT"
544 . "$SCRIPT"
582 . "$SCRIPT"
545 done
583 done
546
584
547 ## Execute custom bootstrap scripts
585 ## Execute custom bootstrap scripts
548 if [ -d "custom.d" ] ; then
586 if [ -d "custom.d" ] ; then
549 for SCRIPT in custom.d/*.sh; do
587 for SCRIPT in custom.d/*.sh; do
550 . "$SCRIPT"
588 . "$SCRIPT"
551 done
589 done
552 fi
590 fi
553
591
554 # Execute custom scripts inside the chroot
592 # Execute custom scripts inside the chroot
555 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
593 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
556 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
594 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
557 chroot_exec /bin/bash -x <<'EOF'
595 chroot_exec /bin/bash -x <<'EOF'
558 for SCRIPT in /chroot_scripts/* ; do
596 for SCRIPT in /chroot_scripts/* ; do
559 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
597 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
560 $SCRIPT
598 $SCRIPT
561 fi
599 fi
562 done
600 done
563 EOF
601 EOF
564 rm -rf "${R}/chroot_scripts"
602 rm -rf "${R}/chroot_scripts"
565 fi
603 fi
566
604
567 # Remove c/c++ build environment from the chroot
605 # Remove c/c++ build environment from the chroot
568 chroot_remove_cc
606 chroot_remove_cc
569
607
570 # Remove apt-utils
571 if [ "$RELEASE" = "jessie" ] ; then
572 chroot_exec apt-get purge -qq -y --force-yes apt-utils
573 fi
574
575 # Generate required machine-id
608 # Generate required machine-id
576 MACHINE_ID=$(dbus-uuidgen)
609 MACHINE_ID=$(dbus-uuidgen)
577 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
610 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
578 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
611 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
579
612
580 # APT Cleanup
613 # APT Cleanup
581 chroot_exec apt-get -y clean
614 chroot_exec apt-get -y clean
582 chroot_exec apt-get -y autoclean
615 chroot_exec apt-get -y autoclean
583 chroot_exec apt-get -y autoremove
616 chroot_exec apt-get -y autoremove
584
617
585 # Unmount mounted filesystems
618 # Unmount mounted filesystems
586 umount -l "${R}/proc"
619 umount -l "${R}/proc"
587 umount -l "${R}/sys"
620 umount -l "${R}/sys"
588
621
589 # Clean up directories
622 # Clean up directories
590 rm -rf "${R}/run/*"
623 rm -rf "${R}/run/*"
591 rm -rf "${R}/tmp/*"
624 rm -rf "${R}/tmp/*"
592
625
593 # Clean up files
626 # Clean up files
594 rm -f "${ETC_DIR}/ssh/ssh_host_*"
627 rm -f "${ETC_DIR}/ssh/ssh_host_*"
595 rm -f "${ETC_DIR}/dropbear/dropbear_*"
628 rm -f "${ETC_DIR}/dropbear/dropbear_*"
596 rm -f "${ETC_DIR}/apt/sources.list.save"
629 rm -f "${ETC_DIR}/apt/sources.list.save"
597 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
630 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
598 rm -f "${ETC_DIR}/*-"
631 rm -f "${ETC_DIR}/*-"
599 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
632 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
600 rm -f "${ETC_DIR}/resolv.conf"
633 rm -f "${ETC_DIR}/resolv.conf"
601 rm -f "${R}/root/.bash_history"
634 rm -f "${R}/root/.bash_history"
602 rm -f "${R}/var/lib/urandom/random-seed"
635 rm -f "${R}/var/lib/urandom/random-seed"
603 rm -f "${R}/initrd.img"
636 rm -f "${R}/initrd.img"
604 rm -f "${R}/vmlinuz"
637 rm -f "${R}/vmlinuz"
605 rm -f "${R}${QEMU_BINARY}"
638 rm -f "${R}${QEMU_BINARY}"
606
639
607 if [ "$ENABLE_QEMU" = true ] ; then
640 if [ "$ENABLE_QEMU" = true ] ; then
608 # Setup QEMU directory
641 # Setup QEMU directory
609 mkdir "${BASEDIR}/qemu"
642 mkdir "${BASEDIR}/qemu"
610
643
611 # Copy kernel image to QEMU directory
644 # Copy kernel image to QEMU directory
612 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
645 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
613
646
614 # Copy kernel config to QEMU directory
647 # Copy kernel config to QEMU directory
615 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
648 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
616
649
617 # Copy kernel dtbs to QEMU directory
650 # Copy kernel dtbs to QEMU directory
618 for dtb in "${BOOT_DIR}/"*.dtb ; do
651 for dtb in "${BOOT_DIR}/"*.dtb ; do
619 if [ -f "${dtb}" ] ; then
652 if [ -f "${dtb}" ] ; then
620 install_readonly "${dtb}" "${BASEDIR}/qemu/"
653 install_readonly "${dtb}" "${BASEDIR}/qemu/"
621 fi
654 fi
622 done
655 done
623
656
624 # Copy kernel overlays to QEMU directory
657 # Copy kernel overlays to QEMU directory
625 if [ -d "${BOOT_DIR}/overlays" ] ; then
658 if [ -d "${BOOT_DIR}/overlays" ] ; then
626 # Setup overlays dtbs directory
659 # Setup overlays dtbs directory
627 mkdir "${BASEDIR}/qemu/overlays"
660 mkdir "${BASEDIR}/qemu/overlays"
628
661
629 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
662 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
630 if [ -f "${dtb}" ] ; then
663 if [ -f "${dtb}" ] ; then
631 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
664 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
632 fi
665 fi
633 done
666 done
634 fi
667 fi
635
668
636 # Copy u-boot files to QEMU directory
669 # Copy u-boot files to QEMU directory
637 if [ "$ENABLE_UBOOT" = true ] ; then
670 if [ "$ENABLE_UBOOT" = true ] ; then
638 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
671 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
639 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
672 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
640 fi
673 fi
641 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
674 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
642 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
675 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
643 fi
676 fi
644 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
677 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
645 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
678 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
646 fi
679 fi
647 fi
680 fi
648
681
649 # Copy initramfs to QEMU directory
682 # Copy initramfs to QEMU directory
650 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
683 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
651 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
684 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
652 fi
685 fi
653 fi
686 fi
654
687
655 # Calculate size of the chroot directory in KB
688 # Calculate size of the chroot directory in KB
656 CHROOT_SIZE=$(expr `du -s "${R}" | awk '{ print $1 }'`)
689 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
657
690
658 # Calculate the amount of needed 512 Byte sectors
691 # Calculate the amount of needed 512 Byte sectors
659 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
692 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
660 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
693 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
661 ROOT_OFFSET=$(expr ${TABLE_SECTORS} + ${FRMW_SECTORS})
694 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
662
695
663 # The root partition is EXT4
696 # The root partition is EXT4
664 # This means more space than the actual used space of the chroot is used.
697 # This means more space than the actual used space of the chroot is used.
665 # As overhead for journaling and reserved blocks 35% are added.
698 # As overhead for journaling and reserved blocks 35% are added.
666 ROOT_SECTORS=$(expr $(expr ${CHROOT_SIZE} + ${CHROOT_SIZE} \/ 100 \* 35) \* 1024 \/ 512)
699 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
667
700
668 # Calculate required image size in 512 Byte sectors
701 # Calculate required image size in 512 Byte sectors
669 IMAGE_SECTORS=$(expr ${TABLE_SECTORS} + ${FRMW_SECTORS} + ${ROOT_SECTORS})
702 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
670
703
671 # Prepare image file
704 # Prepare image file
672 if [ "$ENABLE_SPLITFS" = true ] ; then
705 if [ "$ENABLE_SPLITFS" = true ] ; then
673 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=${TABLE_SECTORS}
706 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
674 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek=${FRMW_SECTORS}
707 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
675 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=${TABLE_SECTORS}
708 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
676 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek=${ROOT_SECTORS}
709 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
677
710
678 # Write firmware/boot partition tables
711 # Write firmware/boot partition tables
679 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
712 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
680 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
713 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
681 EOM
714 EOM
682
715
683 # Write root partition table
716 # Write root partition table
684 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
717 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
685 ${TABLE_SECTORS},${ROOT_SECTORS},83
718 ${TABLE_SECTORS},${ROOT_SECTORS},83
686 EOM
719 EOM
687
720
688 # Setup temporary loop devices
721 # Setup temporary loop devices
689 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show $IMAGE_NAME-frmw.img)"
722 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
690 ROOT_LOOP="$(losetup -o 1M -f --show $IMAGE_NAME-root.img)"
723 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
691 else # ENABLE_SPLITFS=false
724 else # ENABLE_SPLITFS=false
692 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=${TABLE_SECTORS}
725 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
693 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek=${IMAGE_SECTORS}
726 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
694
727
695 # Write partition table
728 # Write partition table
696 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
729 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
697 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
730 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
698 ${ROOT_OFFSET},${ROOT_SECTORS},83
731 ${ROOT_OFFSET},${ROOT_SECTORS},83
699 EOM
732 EOM
700
733
701 # Setup temporary loop devices
734 # Setup temporary loop devices
702 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show $IMAGE_NAME.img)"
735 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
703 ROOT_LOOP="$(losetup -o 65M -f --show $IMAGE_NAME.img)"
736 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
704 fi
737 fi
705
738
706 if [ "$ENABLE_CRYPTFS" = true ] ; then
739 if [ "$ENABLE_CRYPTFS" = true ] ; then
707 # Create dummy ext4 fs
740 # Create dummy ext4 fs
708 mkfs.ext4 "$ROOT_LOOP"
741 mkfs.ext4 "$ROOT_LOOP"
709
742
710 # Setup password keyfile
743 # Setup password keyfile
711 touch .password
744 touch .password
712 chmod 600 .password
745 chmod 600 .password
713 echo -n ${CRYPTFS_PASSWORD} > .password
746 echo -n ${CRYPTFS_PASSWORD} > .password
714
747
715 # Initialize encrypted partition
748 # Initialize encrypted partition
716 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
749 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
717
750
718 # Open encrypted partition and setup mapping
751 # Open encrypted partition and setup mapping
719 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
752 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
720
753
721 # Secure delete password keyfile
754 # Secure delete password keyfile
722 shred -zu .password
755 shred -zu .password
723
756
724 # Update temporary loop device
757 # Update temporary loop device
725 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
758 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
726
759
727 # Wipe encrypted partition (encryption cipher is used for randomness)
760 # Wipe encrypted partition (encryption cipher is used for randomness)
728 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count=$(blockdev --getsz "${ROOT_LOOP}")
761 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
729 fi
762 fi
730
763
731 # Build filesystems
764 # Build filesystems
732 mkfs.vfat "$FRMW_LOOP"
765 mkfs.vfat "$FRMW_LOOP"
733 mkfs.ext4 "$ROOT_LOOP"
766 mkfs.ext4 "$ROOT_LOOP"
734
767
735 # Mount the temporary loop devices
768 # Mount the temporary loop devices
736 mkdir -p "$BUILDDIR/mount"
769 mkdir -p "$BUILDDIR/mount"
737 mount "$ROOT_LOOP" "$BUILDDIR/mount"
770 mount "$ROOT_LOOP" "$BUILDDIR/mount"
738
771
739 mkdir -p "$BUILDDIR/mount/boot/firmware"
772 mkdir -p "$BUILDDIR/mount/boot/firmware"
740 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
773 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
741
774
742 # Copy all files from the chroot to the loop device mount point directory
775 # Copy all files from the chroot to the loop device mount point directory
743 rsync -a "${R}/" "$BUILDDIR/mount/"
776 rsync -a "${R}/" "$BUILDDIR/mount/"
744
777
745 # Unmount all temporary loop devices and mount points
778 # Unmount all temporary loop devices and mount points
746 cleanup
779 cleanup
747
780
748 # Create block map file(s) of image(s)
781 # Create block map file(s) of image(s)
749 if [ "$ENABLE_SPLITFS" = true ] ; then
782 if [ "$ENABLE_SPLITFS" = true ] ; then
750 # Create block map files for "bmaptool"
783 # Create block map files for "bmaptool"
751 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
784 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
752 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
785 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
753
786
754 # Image was successfully created
787 # Image was successfully created
755 echo "$IMAGE_NAME-frmw.img ($(expr \( ${TABLE_SECTORS} + ${FRMW_SECTORS} \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
788 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
756 echo "$IMAGE_NAME-root.img ($(expr \( ${TABLE_SECTORS} + ${ROOT_SECTORS} \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
789 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
757 else
790 else
758 # Create block map file for "bmaptool"
791 # Create block map file for "bmaptool"
759 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
792 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
760
793
761 # Image was successfully created
794 # Image was successfully created
762 echo "$IMAGE_NAME.img ($(expr \( ${TABLE_SECTORS} + ${FRMW_SECTORS} + ${ROOT_SECTORS} \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
795 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
763
796
764 # Create qemu qcow2 image
797 # Create qemu qcow2 image
765 if [ "$ENABLE_QEMU" = true ] ; then
798 if [ "$ENABLE_QEMU" = true ] ; then
766 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
799 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
767 QEMU_SIZE=16G
800 QEMU_SIZE=16G
768
801
769 qemu-img convert -f raw -O qcow2 $IMAGE_NAME.img $QEMU_IMAGE.qcow2
802 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
770 qemu-img resize $QEMU_IMAGE.qcow2 $QEMU_SIZE
803 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
771
804
772 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
805 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
773 fi
806 fi
774 fi
807 fi
@@ -1,4 +1,4
1 # Configuration template file used by rpi23-gen-image.sh
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=3
2 RPI_MODEL=3
3 RELEASE=jessie
3 RELEASE=buster
4 BUILD_KERNEL=true
4 BUILD_KERNEL=true
@@ -1,3 +1,4
1 # Configuration template file used by rpi23-gen-image.sh
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=2
2 RELEASE=stretch
3 RELEASE=stretch
3 BUILD_KERNEL=true
4 BUILD_KERNEL=true
@@ -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,4 +1,6
1 # Configuration template file used by rpi23-gen-image.sh
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=3
2 RPI_MODEL=3
3 RELEASE=buster
3 RELEASE=buster
4 BUILD_KERNEL=true
4 BUILD_KERNEL=true
5 # ENABLE_WIRELESS=false
6 # ENABLE_BLUETOOTH=false
@@ -1,4 +1,6
1 # Configuration template file used by rpi23-gen-image.sh
1 # Configuration template file used by rpi23-gen-image.sh
2 RPI_MODEL=3
2 RPI_MODEL=3
3 RELEASE=stretch
3 RELEASE=stretch
4 BUILD_KERNEL=true
4 BUILD_KERNEL=true
5 # ENABLE_WIRELESS=false
6 # ENABLE_BLUETOOTH=false
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