##// END OF EJS Templates
fix: various fixes
drtyhlpr -
r398:1d7e96e7b66f
parent child
Show More
@@ -1,39 +1,34
1 #
1 #
2 # Setup APT repositories
2 # Setup APT repositories
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup APT proxy configuration
8 # Install and setup APT proxy configuration
9 if [ -z "$APT_PROXY" ] ; then
9 if [ -z "$APT_PROXY" ] ; then
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
10 install_readonly files/apt/10proxy "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
11 sed -i "s/\"\"/\"${APT_PROXY}\"/" "${ETC_DIR}/apt/apt.conf.d/10proxy"
12 fi
12 fi
13
13
14 if [ "$BUILD_KERNEL" = false ] ; then
15 echo "Downloading precompiled kernel"
16 echo "error: not configured"
17 exit 1;
18 # BUILD_KERNEL=true
19 else
20 echo "No precompiled kernel repositories were added"
21 fi
22
14
23 # Upgrade package index and update all installed packages and changed dependencies
15 # Upgrade package index and update all installed packages and changed dependencies
24 chroot_exec apt-get -qq -y update
16 chroot_exec apt-get -qq -y update
25 chroot_exec apt-get -qq -y -u dist-upgrade
17 chroot_exec apt-get -qq -y -u dist-upgrade
26
18
19 # Install additional packages
27 if [ "$APT_INCLUDES_LATE" ] ; then
20 if [ "$APT_INCLUDES_LATE" ] ; then
28 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
21 chroot_exec apt-get -qq -y install "$(echo "$APT_INCLUDES_LATE" |tr , ' ')"
29 fi
22 fi
30
23
24 # Install Debian custom packages
31 if [ -d packages ] ; then
25 if [ -d packages ] ; then
32 for package in packages/*.deb ; do
26 for package in packages/*.deb ; do
33 cp "$package" "${R}"/tmp
27 cp "$package" "${R}"/tmp
34 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
28 chroot_exec dpkg --unpack /tmp/"$(basename "$package")"
35 done
29 done
36 fi
30 fi
31
37 chroot_exec apt-get -qq -y -f install
32 chroot_exec apt-get -qq -y -f install
38
33
39 chroot_exec apt-get -qq -y check
34 chroot_exec apt-get -qq -y check
@@ -1,189 +1,174
1 #
1 #
2 # Setup RPi2/3 config and cmdline
2 # Setup RPi2/3 config and cmdline
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$BUILD_KERNEL" = true ] ; then
8 if [ "$BUILD_KERNEL" = true ] ; then
9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
10 # Install boot binaries from local directory
10 # Install boot binaries from local directory
11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
18 else
18 else
19 # Create temporary directory for boot binaries
19 # Create temporary directory for boot binaries
20 temp_dir=$(as_nobody mktemp -d)
20 temp_dir=$(as_nobody mktemp -d)
21
21
22 # Install latest boot binaries from raspberry/firmware github
22 # Install latest boot binaries from raspberry/firmware github
23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
30
30
31 # Move downloaded boot binaries
31 # Move downloaded boot binaries
32 mv "${temp_dir}/"* "${BOOT_DIR}/"
32 mv "${temp_dir}/"* "${BOOT_DIR}/"
33
33
34 # Remove temporary directory for boot binaries
34 # Remove temporary directory for boot binaries
35 rm -fr "${temp_dir}"
35 rm -fr "${temp_dir}"
36
36
37 # Set permissions of the boot binaries
37 # Set permissions of the boot binaries
38 chown -R root:root "${BOOT_DIR}"
38 chown -R root:root "${BOOT_DIR}"
39 chmod -R 600 "${BOOT_DIR}"
39 chmod -R 600 "${BOOT_DIR}"
40 fi
40 fi
41 fi
41 fi
42
42
43 # Setup firmware boot cmdline
43 # Setup firmware boot cmdline
44 if [ "$ENABLE_SPLITFS" = true ] ; then
44 if [ "$ENABLE_SPLITFS" = true ] ; then
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
46 else
46 else
47 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
47 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
48 fi
48 fi
49
49
50 # Add encrypted root partition to cmdline.txt
50 # Add encrypted root partition to cmdline.txt
51 if [ "$ENABLE_CRYPTFS" = true ] ; then
51 if [ "$ENABLE_CRYPTFS" = true ] ; then
52 if [ "$ENABLE_SPLITFS" = true ] ; then
52 if [ "$ENABLE_SPLITFS" = true ] ; then
53 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
53 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
54 else
54 else
55 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
55 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
56 fi
56 fi
57 fi
57 fi
58
58
59 # Add serial console support
59 # Add serial console support
60 if [ "$ENABLE_CONSOLE" = true ] ; then
60 if [ "$ENABLE_CONSOLE" = true ] ; then
61 CMDLINE="${CMDLINE} console=ttyAMA0,115200 kgdboc=ttyAMA0,115200"
61 CMDLINE="${CMDLINE} console=ttyAMA0,115200 kgdboc=ttyAMA0,115200"
62 fi
62 fi
63
63
64 # Remove IPv6 networking support
64 # Remove IPv6 networking support
65 if [ "$ENABLE_IPV6" = false ] ; then
65 if [ "$ENABLE_IPV6" = false ] ; then
66 CMDLINE="${CMDLINE} ipv6.disable=1"
66 CMDLINE="${CMDLINE} ipv6.disable=1"
67 fi
67 fi
68
68
69 # Automatically assign predictable network interface names
69 # Automatically assign predictable network interface names
70 if [ "$ENABLE_IFNAMES" = false ] ; then
70 if [ "$ENABLE_IFNAMES" = false ] ; then
71 CMDLINE="${CMDLINE} net.ifnames=0"
71 CMDLINE="${CMDLINE} net.ifnames=0"
72 else
72 else
73 CMDLINE="${CMDLINE} net.ifnames=1"
73 CMDLINE="${CMDLINE} net.ifnames=1"
74 fi
74 fi
75
75
76 # Install firmware boot cmdline
76 # Install firmware boot cmdline
77 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
77 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
78
78
79 # Install firmware config
79 # Install firmware config
80 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
80 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
81
81
82 # Setup minimal GPU memory allocation size: 16MB (no X)
82 # Setup minimal GPU memory allocation size: 16MB (no X)
83 if [ "$ENABLE_MINGPU" = true ] ; then
83 if [ "$ENABLE_MINGPU" = true ] ; then
84 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
84 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
85 fi
85 fi
86
86
87 # Setup boot with initramfs
87 # Setup boot with initramfs
88 if [ "$ENABLE_INITRAMFS" = true ] ; then
88 if [ "$ENABLE_INITRAMFS" = true ] ; then
89 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
89 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
90 fi
90 fi
91
91
92 # Disable RPi3 Bluetooth and restore ttyAMA0 serial device
92 # Disable RPi3 Bluetooth and restore ttyAMA0 serial device
93 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
93 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
94 if [ "$ENABLE_CONSOLE" = true ] && [ "$ENABLE_UBOOT" = false ] ; then
94 if [ "$ENABLE_CONSOLE" = true ] && [ "$ENABLE_UBOOT" = false ] ; then
95 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
95 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
96 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
96 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
97 else
97 else
98 # Create temporary directory for Bluetooth sources
98 # Create temporary directory for Bluetooth sources
99 temp_dir=$(as_nobody mktemp -d)
99 temp_dir=$(as_nobody mktemp -d)
100
100
101 # Fetch Bluetooth sources
101 # Fetch Bluetooth sources
102 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
102 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
103
103
104 # Copy downloaded sources
104 # Copy downloaded sources
105 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
105 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
106
106
107 # Set permissions
107 # Set permissions
108 chown -R root:root "${R}/tmp/pi-bluetooth"
108 chown -R root:root "${R}/tmp/pi-bluetooth"
109
109
110 # Install files to chroot
111 # Install tools
110 # Install tools
112 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
111 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
113 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
112 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
114
113
115 # Install bluetooth udev rule
114 # Install bluetooth udev rule
116 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
115 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
117 #aur
118 #install_readonly "${R}/tmp/pi-bluetooth/50-bluetooth-hci-auto-poweron.rules" "${ETC_DIR}/udev/rules.d/50-bluetooth-hci-auto-poweron.rules"
119
116
120 # Install Firmware Flash file and apropiate licence
117 # Install Firmware Flash file and apropiate licence
121 mkdir "${ETC_DIR}/firmware/"
118 mkdir "${ETC_DIR}/firmware/"
122
119
123 #aur https://aur.archlinux.org/packages/pi-bluetooth/
124 #install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${ETC_DIR}/firmware/LICENCE.broadcom_bcm43xx"
125 #install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${ETC_DIR}/firmware/BCM43430A1.hcd"
126
127 wget -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
120 wget -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
128 wget -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
121 wget -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
129
122
130 # Install systemd service for bluetooth
131 #install_readonly "${R}/tmp/pi-bluetooth/brcm43438.service" "${ETC_DIR}/systemd/system/brcm43438.service"
132
133 # Remove temporary directory
134 #rm -fr "${temp_dir}"
135
136 # Get /dev/serial back for compability
123 # Get /dev/serial back for compability
137 # Raspberry-sys-mod package
138 wget -O "${ETC_DIR}/udev/rules.d/99-com.rules" https://raw.githubusercontent.com/RPi-Distro/raspberrypi-sys-mods/master/etc.armhf/udev/rules.d/99-com.rules
124 wget -O "${ETC_DIR}/udev/rules.d/99-com.rules" https://raw.githubusercontent.com/RPi-Distro/raspberrypi-sys-mods/master/etc.armhf/udev/rules.d/99-com.rules
139
140 fi
125 fi
141 fi
126 fi
142
127
143 # Create firmware configuration and cmdline symlinks
128 # Create firmware configuration and cmdline symlinks
144 ln -sf firmware/config.txt "${R}/boot/config.txt"
129 ln -sf firmware/config.txt "${R}/boot/config.txt"
145 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
130 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
146
131
147 # Install and setup kernel modules to load at boot
132 # Install and setup kernel modules to load at boot
148 mkdir -p "${LIB_DIR}/modules-load.d/"
133 mkdir -p "${LIB_DIR}/modules-load.d/"
149 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
134 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
150
135
151 # Load hardware random module at boot
136 # Load hardware random module at boot
152 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
137 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
153 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
138 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
154 fi
139 fi
155
140
156 # Load sound module at boot
141 # Load sound module at boot
157 if [ "$ENABLE_SOUND" = true ] ; then
142 if [ "$ENABLE_SOUND" = true ] ; then
158 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
143 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
159 else
144 else
160 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
145 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
161 fi
146 fi
162
147
163 # Enable I2C interface
148 # Enable I2C interface
164 if [ "$ENABLE_I2C" = true ] ; then
149 if [ "$ENABLE_I2C" = true ] ; then
165 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
150 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
166 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
151 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
167 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
152 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
168 fi
153 fi
169
154
170 # Enable SPI interface
155 # Enable SPI interface
171 if [ "$ENABLE_SPI" = true ] ; then
156 if [ "$ENABLE_SPI" = true ] ; then
172 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
157 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
173 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
158 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
174 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
159 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
175 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
160 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
176 fi
161 fi
177 fi
162 fi
178
163
179 # Disable RPi2/3 under-voltage warnings
164 # Disable RPi2/3 under-voltage warnings
180 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
165 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
181 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
166 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
182 fi
167 fi
183
168
184 # Install kernel modules blacklist
169 # Install kernel modules blacklist
185 mkdir -p "${ETC_DIR}/modprobe.d/"
170 mkdir -p "${ETC_DIR}/modprobe.d/"
186 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
171 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
187
172
188 # Install sysctl.d configuration files
173 # Install sysctl.d configuration files
189 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
174 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,133 +1,134
1 #
1 #
2 # Setup Networking
2 # Setup Networking
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Install and setup hostname
8 # Install and setup hostname
9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
9 install_readonly files/network/hostname "${ETC_DIR}/hostname"
10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
10 sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname"
11
11
12 # Install and setup hosts
12 # Install and setup hosts
13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
13 install_readonly files/network/hosts "${ETC_DIR}/hosts"
14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
14 sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts"
15
15
16 # Setup hostname entry with static IP
16 # Setup hostname entry with static IP
17 if [ "$NET_ADDRESS" != "" ] ; then
17 if [ "$NET_ADDRESS" != "" ] ; then
18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
18 NET_IP=$(echo "${NET_ADDRESS}" | cut -f 1 -d'/')
19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
19 sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts"
20 fi
20 fi
21
21
22 # Remove IPv6 hosts
22 # Remove IPv6 hosts
23 if [ "$ENABLE_IPV6" = false ] ; then
23 if [ "$ENABLE_IPV6" = false ] ; then
24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
24 sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts"
25 fi
25 fi
26
26
27 # Install hint about network configuration
27 # Install hint about network configuration
28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
28 install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces"
29
29
30 # Install configuration for interface eth0
30 # Install configuration for interface eth0
31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
31 install_readonly files/network/eth.network "${ETC_DIR}/systemd/network/eth.network"
32
32
33 # Install configuration for interface wl*
33 # Install configuration for interface wl*
34 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
34 install_readonly files/network/wlan.network "${ETC_DIR}/systemd/network/wlan.network"
35
35
36 #always with dhcp since wpa_supplicant integration is missing
36 #always with dhcp since wpa_supplicant integration is missing
37 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
37 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan.network"
38
38
39 if [ "$ENABLE_DHCP" = true ] ; then
39 if [ "$ENABLE_DHCP" = true ] ; then
40 # Enable DHCP configuration for interface eth0
40 # Enable DHCP configuration for interface eth0
41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
41 sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth.network"
42
42
43 # Set DHCP configuration to IPv4 only
43 # Set DHCP configuration to IPv4 only
44 if [ "$ENABLE_IPV6" = false ] ; then
44 if [ "$ENABLE_IPV6" = false ] ; then
45 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
45 sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth.network"
46 fi
46 fi
47
47
48 else # ENABLE_DHCP=false
48 else # ENABLE_DHCP=false
49 # Set static network configuration for interface eth0
49 # Set static network configuration for interface eth0
50 sed -i\
50 sed -i\
51 -e "s|DHCP=.*|DHCP=no|"\
51 -e "s|DHCP=.*|DHCP=no|"\
52 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
52 -e "s|Address=\$|Address=${NET_ADDRESS}|"\
53 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
53 -e "s|Gateway=\$|Gateway=${NET_GATEWAY}|"\
54 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
54 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_1}|"\
55 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
55 -e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_DNS_2}|"\
56 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
56 -e "s|Domains=\$|Domains=${NET_DNS_DOMAINS}|"\
57 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
57 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_1}|"\
58 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
58 -e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_NTP_2}|"\
59 "${ETC_DIR}/systemd/network/eth.network"
59 "${ETC_DIR}/systemd/network/eth.network"
60 fi
60 fi
61
61
62 # Remove empty settings from network configuration
62 # Remove empty settings from network configuration
63 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
63 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth.network"
64 # Remove empty settings from wlan configuration
64 # Remove empty settings from wlan configuration
65 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
65 sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan.network"
66
66
67 # Move systemd network configuration if required by Debian release
67 # Move systemd network configuration if required by Debian release
68 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
68 mv -v "${ETC_DIR}/systemd/network/eth.network" "${LIB_DIR}/systemd/network/10-eth.network"
69 # If WLAN is enabled copy wlan configuration too
69 # If WLAN is enabled copy wlan configuration too
70 if [ "$ENABLE_WIRELESS" = true ] ; then
70 if [ "$ENABLE_WIRELESS" = true ] ; then
71 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
71 mv -v "${ETC_DIR}/systemd/network/wlan.network" "${LIB_DIR}/systemd/network/11-wlan.network"
72 fi
72 fi
73 rm -fr "${ETC_DIR}/systemd/network"
73 rm -fr "${ETC_DIR}/systemd/network"
74
74
75 # Enable systemd-networkd service
75 # Enable systemd-networkd service
76 chroot_exec systemctl enable systemd-networkd
76 chroot_exec systemctl enable systemd-networkd
77
77
78 # Install host.conf resolver configuration
78 # Install host.conf resolver configuration
79 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
79 install_readonly files/network/host.conf "${ETC_DIR}/host.conf"
80
80
81 # Enable network stack hardening
81 # Enable network stack hardening
82 if [ "$ENABLE_HARDNET" = true ] ; then
82 if [ "$ENABLE_HARDNET" = true ] ; then
83 # Install sysctl.d configuration files
83 # Install sysctl.d configuration files
84 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
84 install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf"
85
85
86 # Setup resolver warnings about spoofed addresses
86 # Setup resolver warnings about spoofed addresses
87 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
87 sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf"
88 fi
88 fi
89
89
90 # Enable time sync
90 # Enable time sync
91 if [ "$NET_NTP_1" != "" ] ; then
91 if [ "$NET_NTP_1" != "" ] ; then
92 chroot_exec systemctl enable systemd-timesyncd.service
92 chroot_exec systemctl enable systemd-timesyncd.service
93 fi
93 fi
94
94
95 # Download the firmware binary blob required to use the RPi3 wireless interface
95 # Download the firmware binary blob required to use the RPi3 wireless interface
96 if [ "$ENABLE_WIRELESS" = true ] ; then
96 if [ "$ENABLE_WIRELESS" = true ] ; then
97 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
97 if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
98 mkdir -p "${WLAN_FIRMWARE_DIR}"
99 fi
99 fi
100
100
101 # Create temporary directory for firmware binary blob
101 # Create temporary directory for firmware binary blob
102 temp_dir=$(as_nobody mktemp -d)
102 temp_dir=$(as_nobody mktemp -d)
103
103
104 # Fetch firmware binary blob for RPI3B+
104 # Fetch firmware binary blob for RPI3B+
105 if [ "$RPI_MODEL" = 3P ] ; then
105 if [ "$RPI_MODEL" = 3P ] ; then
106 # Fetch firmware binary blob for RPi3P
106 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin"
107 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt"
108 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
109 as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob"
109 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
110 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
110 # Fetch firmware binary blob for RPI3
111 # Fetch firmware binary blob for RPi3
111 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
112 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin"
112 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
113 as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt"
113 fi
114 fi
114
115
115 # Move downloaded firmware binary blob
116 # Move downloaded firmware binary blob
116 if [ "$RPI_MODEL" = 3P ] ; then
117 if [ "$RPI_MODEL" = 3P ] ; then
117 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
118 mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/"
118 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
119 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
119 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
120 mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/"
120 fi
121 fi
121
122
122 # Remove temporary directory for firmware binary blob
123 # Remove temporary directory for firmware binary blob
123 rm -fr "${temp_dir}"
124 rm -fr "${temp_dir}"
124
125
125 # Set permissions of the firmware binary blob
126 # Set permissions of the firmware binary blob
126 if [ "$RPI_MODEL" = 3P ] ; then
127 if [ "$RPI_MODEL" = 3P ] ; then
127 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
128 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
128 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."*
129 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
130 elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then
130 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
131 chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
131 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."*
132 fi
133 fi
133 fi
134 fi
@@ -1,98 +1,98
1 #
1 #
2 # Build and Setup U-Boot
2 # Build and Setup U-Boot
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 # Fetch and build U-Boot bootloader
8 # Fetch and build U-Boot bootloader
9 if [ "$ENABLE_UBOOT" = true ] ; then
9 if [ "$ENABLE_UBOOT" = true ] ; then
10 # Install c/c++ build environment inside the chroot
10 # Install c/c++ build environment inside the chroot
11 chroot_install_cc
11 chroot_install_cc
12
12
13 # Copy existing U-Boot sources into chroot directory
13 # Copy existing U-Boot sources into chroot directory
14 if [ -n "$UBOOTSRC_DIR" ] && [ -d "$UBOOTSRC_DIR" ] ; then
14 if [ -n "$UBOOTSRC_DIR" ] && [ -d "$UBOOTSRC_DIR" ] ; then
15 # Copy local U-Boot sources
15 # Copy local U-Boot sources
16 cp -r "${UBOOTSRC_DIR}" "${R}/tmp"
16 cp -r "${UBOOTSRC_DIR}" "${R}/tmp"
17 else
17 else
18 # Create temporary directory for U-Boot sources
18 # Create temporary directory for U-Boot sources
19 temp_dir=$(as_nobody mktemp -d)
19 temp_dir=$(as_nobody mktemp -d)
20
20
21 # Fetch U-Boot sources
21 # Fetch U-Boot sources
22 as_nobody git -C "${temp_dir}" clone "${UBOOT_URL}"
22 as_nobody git -C "${temp_dir}" clone "${UBOOT_URL}"
23
23
24 # Copy downloaded U-Boot sources
24 # Copy downloaded U-Boot sources
25 mv "${temp_dir}/u-boot" "${R}/tmp/"
25 mv "${temp_dir}/u-boot" "${R}/tmp/"
26
26
27 # Set permissions of the U-Boot sources
27 # Set permissions of the U-Boot sources
28 chown -R root:root "${R}/tmp/u-boot"
28 chown -R root:root "${R}/tmp/u-boot"
29
29
30 # Remove temporary directory for U-Boot sources
30 # Remove temporary directory for U-Boot sources
31 rm -fr "${temp_dir}"
31 rm -fr "${temp_dir}"
32 fi
32 fi
33
33
34 # Build and install U-Boot inside chroot
34 # Build and install U-Boot inside chroot
35 chroot_exec make -j"${KERNEL_THREADS}" -C /tmp/u-boot/ "${UBOOT_CONFIG}" all
35 chroot_exec make -j"${KERNEL_THREADS}" -C /tmp/u-boot/ "${UBOOT_CONFIG}" all
36
36
37 # Copy compiled bootloader binary and set config.txt to load it
37 # Copy compiled bootloader binary and set config.txt to load it
38 install_exec "${R}/tmp/u-boot/tools/mkimage" "${R}/usr/sbin/mkimage"
38 install_exec "${R}/tmp/u-boot/tools/mkimage" "${R}/usr/sbin/mkimage"
39 install_readonly "${R}/tmp/u-boot/u-boot.bin" "${BOOT_DIR}/u-boot.bin"
39 install_readonly "${R}/tmp/u-boot/u-boot.bin" "${BOOT_DIR}/u-boot.bin"
40 printf "\n# boot u-boot kernel\nkernel=u-boot.bin\n" >> "${BOOT_DIR}/config.txt"
40 printf "\n# boot u-boot kernel\nkernel=u-boot.bin\n" >> "${BOOT_DIR}/config.txt"
41
41
42 # Install and setup U-Boot command file
42 # Install and setup U-Boot command file
43 install_readonly files/boot/uboot.mkimage "${BOOT_DIR}/uboot.mkimage"
43 install_readonly files/boot/uboot.mkimage "${BOOT_DIR}/uboot.mkimage"
44 printf "# Set the kernel boot command line\nsetenv bootargs \"earlyprintk ${CMDLINE}\"\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
44 printf "# Set the kernel boot command line\nsetenv bootargs \"earlyprintk ${CMDLINE}\"\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
45
45
46 if [ "$ENABLE_INITRAMFS" = true ] ; then
46 if [ "$ENABLE_INITRAMFS" = true ] ; then
47 # Convert generated initramfs for U-Boot using mkimage
47 # Convert generated initramfs for U-Boot using mkimage
48 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -T ramdisk -C none -n "initramfs-${KERNEL_VERSION}" -d "/boot/firmware/initramfs-${KERNEL_VERSION}" "/boot/firmware/initramfs-${KERNEL_VERSION}.uboot"
48 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -T ramdisk -C none -n "initramfs-${KERNEL_VERSION}" -d "/boot/firmware/initramfs-${KERNEL_VERSION}" "/boot/firmware/initramfs-${KERNEL_VERSION}.uboot"
49
49
50 # Remove original initramfs file
50 # Remove original initramfs file
51 rm -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}"
51 rm -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}"
52
52
53 # Configure U-Boot to load generated initramfs
53 # Configure U-Boot to load generated initramfs
54 printf "# Set initramfs file\nsetenv initramfs initramfs-${KERNEL_VERSION}.uboot\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
54 printf "# Set initramfs file\nsetenv initramfs initramfs-${KERNEL_VERSION}.uboot\n\n$(cat ${BOOT_DIR}/uboot.mkimage)" > "${BOOT_DIR}/uboot.mkimage"
55 printf "\nbootz \${kernel_addr_r} \${ramdisk_addr_r} \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
55 printf "\nbootz \${kernel_addr_r} \${ramdisk_addr_r} \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
56 else # ENABLE_INITRAMFS=false
56 else # ENABLE_INITRAMFS=false
57 # Remove initramfs from U-Boot mkfile
57 # Remove initramfs from U-Boot mkfile
58 sed -i '/.*initramfs.*/d' "${BOOT_DIR}/uboot.mkimage"
58 sed -i '/.*initramfs.*/d' "${BOOT_DIR}/uboot.mkimage"
59
59
60 if [ "$BUILD_KERNEL" = false ] ; then
60 if [ "$BUILD_KERNEL" = false ] ; then
61 # Remove dtbfile from U-Boot mkfile
61 # Remove dtbfile from U-Boot mkfile
62 sed -i '/.*dtbfile.*/d' "${BOOT_DIR}/uboot.mkimage"
62 sed -i '/.*dtbfile.*/d' "${BOOT_DIR}/uboot.mkimage"
63 printf "\nbootz \${kernel_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
63 printf "\nbootz \${kernel_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
64 else
64 else
65 printf "\nbootz \${kernel_addr_r} - \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
65 printf "\nbootz \${kernel_addr_r} - \${fdt_addr_r}" >> "${BOOT_DIR}/uboot.mkimage"
66 fi
66 fi
67 fi
67 fi
68
68
69 if [ "$KERNEL_ARCH" = "arm64" ] ; then
69 if [ "$KERNEL_ARCH" = "arm64" ] ; then
70 echo "Setting up config.txt to boot 64bit uboot"
70 echo "Setting up config.txt to boot 64bit uboot"
71
71
72 printf "\n# 64bit-mode" >> "${BOOT_DIR}/config.txt"
72 printf "\n# 64bit-mode" >> "${BOOT_DIR}/config.txt"
73 printf "\n# arm_control=0x200 is deprecated https://www.raspberrypi.org/documentation/configuration/config-txt/misc.md" >> "${BOOT_DIR}/config.txt"
73 printf "\n# arm_control=0x200 is deprecated https://www.raspberrypi.org/documentation/configuration/config-txt/misc.md" >> "${BOOT_DIR}/config.txt"
74 printf "\narm_64bit=1" >> "${BOOT_DIR}/config.txt"
74 printf "\narm_64bit=1" >> "${BOOT_DIR}/config.txt"
75 #in 64bit uboot booti is used instead of bootz [like in KERNEL_BIN_IMAGE=zImage (armv7)|| Image(armv8)]
75
76 sed -i "s|bootz|booti|g" "${BOOT_DIR}/uboot.mkimage"
76 sed -i "s|bootz|booti|g" "${BOOT_DIR}/uboot.mkimage"
77 fi
77 fi
78
78
79 # Set mkfile to use the correct dtb file
79 # Set mkfile to use the correct dtb file
80 sed -i "s/^\(setenv dtbfile \).*/\1${DTB_FILE}/" "${BOOT_DIR}/uboot.mkimage"
80 sed -i "s/^\(setenv dtbfile \).*/\1${DTB_FILE}/" "${BOOT_DIR}/uboot.mkimage"
81
81
82 # Set mkfile to use the correct mach id
82 # Set mkfile to use the correct mach id
83 if [ "$ENABLE_QEMU" = true ] ; then
83 if [ "$ENABLE_QEMU" = true ] ; then
84 sed -i "s/^\(setenv machid \).*/\10x000008e0/" "${BOOT_DIR}/uboot.mkimage"
84 sed -i "s/^\(setenv machid \).*/\10x000008e0/" "${BOOT_DIR}/uboot.mkimage"
85 fi
85 fi
86
86
87 # Set mkfile to use kernel image
87 # Set mkfile to use kernel image
88 sed -i "s/^\(fatload mmc 0:1 \${kernel_addr_r} \).*/\1${KERNEL_IMAGE}/" "${BOOT_DIR}/uboot.mkimage"
88 sed -i "s/^\(fatload mmc 0:1 \${kernel_addr_r} \).*/\1${KERNEL_IMAGE}/" "${BOOT_DIR}/uboot.mkimage"
89
89
90 # Remove all leading blank lines
90 # Remove all leading blank lines
91 sed -i "/./,\$!d" "${BOOT_DIR}/uboot.mkimage"
91 sed -i "/./,\$!d" "${BOOT_DIR}/uboot.mkimage"
92
92
93 # Generate U-Boot bootloader image
93 # Generate U-Boot bootloader image
94 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n "RPi${RPI_MODEL}" -d /boot/firmware/uboot.mkimage /boot/firmware/boot.scr
94 chroot_exec /usr/sbin/mkimage -A "${KERNEL_ARCH}" -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n "RPi${RPI_MODEL}" -d /boot/firmware/uboot.mkimage /boot/firmware/boot.scr
95
95
96 # Remove U-Boot sources
96 # Remove U-Boot sources
97 rm -fr "${R}/tmp/u-boot"
97 rm -fr "${R}/tmp/u-boot"
98 fi
98 fi
@@ -1,51 +1,53
1 #
1 #
2 # Setup videocore - Raspberry Userland
2 # Setup videocore - Raspberry Userland
3 #
3 #
4
4
5 # Load utility functions
5 # Load utility functions
6 . ./functions.sh
6 . ./functions.sh
7
7
8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
8 if [ "$ENABLE_VIDEOCORE" = true ] ; then
9 # Copy existing videocore sources into chroot directory
9 # Copy existing videocore sources into chroot directory
10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
10 if [ -n "$VIDEOCORESRC_DIR" ] && [ -d "$VIDEOCORESRC_DIR" ] ; then
11 # Copy local U-Boot sources
11 # Copy local U-Boot sources
12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
12 cp -r "${VIDEOCORESRC_DIR}" "${R}/tmp/userland"
13 else
13 else
14 # Create temporary directory for U-Boot sources
14 # Create temporary directory for U-Boot sources
15 temp_dir=$(as_nobody mktemp -d)
15 temp_dir=$(as_nobody mktemp -d)
16
16
17 # Fetch U-Boot sources
17 # Fetch U-Boot sources
18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
18 as_nobody git -C "${temp_dir}" clone "${VIDEOCORE_URL}"
19
19
20 # Copy downloaded U-Boot sources
20 # Copy downloaded U-Boot sources
21 mv "${temp_dir}/userland" "${R}/tmp/"
21 mv "${temp_dir}/userland" "${R}/tmp/"
22
22
23 # Set permissions of the U-Boot sources
23 # Set permissions of the U-Boot sources
24 chown -R root:root "${R}/tmp/userland"
24 chown -R root:root "${R}/tmp/userland"
25
25
26 # Remove temporary directory for U-Boot sources
26 # Remove temporary directory for U-Boot sources
27 rm -fr "${temp_dir}"
27 rm -fr "${temp_dir}"
28 fi
28 fi
29
29
30 # Create build dir
30 # Create build dir
31 mkdir "${R}"/tmp/userland/build
31 mkdir "${R}"/tmp/userland/build
32
32 # push us to build directory
33 # push us to build directory
33 pushd "${R}"/tmp/userland/build
34 pushd "${R}"/tmp/userland/build
34
35
35 if [ "$RELEASE_ARCH" = "arm64" ] ; then
36 if [ "$RELEASE_ARCH" = "arm64" ] ; then
36 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
37 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DARM64=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
37 fi
38 fi
38
39
39 if [ "$RELEASE_ARCH" = "armel" ] ; then
40 if [ "$RELEASE_ARCH" = "armel" ] ; then
40 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
41 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ -DCMAKE_ASM_COMPILER=arm-linux-gnueabi-gcc -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE" -DCMAKE_ASM_FLAGS="${CMAKE_ASM_FLAGS} -c" -DCMAKE_SYSTEM_PROCESSOR="arm" -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
41 fi
42 fi
42
43
43 if [ "$RELEASE_ARCH" = "armhf" ] ; then
44 if [ "$RELEASE_ARCH" = "armhf" ] ; then
44 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
45 cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE="${R}"/tmp/userland/makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DVIDEOCORE_BUILD_DIR="${R}" "${R}/tmp/userland"
45 fi
46 fi
46
47
47 #build userland
48 #build userland
48 make -j "$(nproc)"
49 make -j "$(nproc)"
50
49 #pop us out of build dir
51 #pop us out of build dir
50 popd
52 popd
51 fi
53 fi
@@ -1,787 +1,786
1 #!/bin/sh
1 #!/bin/sh
2 ########################################################################
2 ########################################################################
3 # rpi23-gen-image.sh 2015-2017
3 # rpi23-gen-image.sh 2015-2017
4 #
4 #
5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
5 # Advanced Debian "stretch" and "buster" bootstrap script for RPi2/3
6 #
6 #
7 # This program is free software; you can redistribute it and/or
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
10 # of the License, or (at your option) any later version.
11 #
11 #
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
12 # Copyright (C) 2015 Jan Wagner <mail@jwagner.eu>
13 #
13 #
14 # Big thanks for patches and enhancements by 20+ github contributors!
14 # Big thanks for patches and enhancements by 20+ github contributors!
15 ########################################################################
15 ########################################################################
16
16
17 # Are we running as root?
17 # Are we running as root?
18 if [ "$(id -u)" -ne "0" ] ; then
18 if [ "$(id -u)" -ne "0" ] ; then
19 echo "error: this script must be executed with root privileges!"
19 echo "error: this script must be executed with root privileges!"
20 exit 1
20 exit 1
21 fi
21 fi
22
22
23 # Check if ./functions.sh script exists
23 # Check if ./functions.sh script exists
24 if [ ! -r "./functions.sh" ] ; then
24 if [ ! -r "./functions.sh" ] ; then
25 echo "error: './functions.sh' required script not found!"
25 echo "error: './functions.sh' required script not found!"
26 exit 1
26 exit 1
27 fi
27 fi
28
28
29 # Load utility functions
29 # Load utility functions
30 . ./functions.sh
30 . ./functions.sh
31
31
32 # Load parameters from configuration template file
32 # Load parameters from configuration template file
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
33 if [ -n "$CONFIG_TEMPLATE" ] ; then
34 use_template
34 use_template
35 fi
35 fi
36
36
37 # Introduce settings
37 # Introduce settings
38 set -e
38 set -e
39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
39 echo -n -e "\n#\n# RPi2/3 Bootstrap Settings\n#\n"
40 set -x
40 set -x
41
41
42 # Raspberry Pi model configuration
42 # Raspberry Pi model configuration
43 RPI_MODEL=${RPI_MODEL:=2}
43 RPI_MODEL=${RPI_MODEL:=2}
44
44
45 # Debian release
45 # Debian release
46 RELEASE=${RELEASE:=buster}
46 RELEASE=${RELEASE:=buster}
47
47
48 #Kernel Branch
48 # Kernel Branch
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
49 KERNEL_BRANCH=${KERNEL_BRANCH:=""}
50
50
51 # URLs
51 # URLs
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
52 KERNEL_URL=${KERNEL_URL:=https://github.com/raspberrypi/linux}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
53 FIRMWARE_URL=${FIRMWARE_URL:=https://github.com/raspberrypi/firmware/raw/master/boot}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
54 WLAN_FIRMWARE_URL=${WLAN_FIRMWARE_URL:=https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
55 COLLABORA_URL=${COLLABORA_URL:=https://repositories.collabora.co.uk/debian}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
56 FBTURBO_URL=${FBTURBO_URL:=https://github.com/ssvb/xf86-video-fbturbo.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
57 UBOOT_URL=${UBOOT_URL:=https://git.denx.de/u-boot.git}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
58 VIDEOCORE_URL=${VIDEOCORE_URL:=https://github.com/raspberrypi/userland}
59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
59 BLUETOOTH_URL=${BLUETOOTH_URL:=https://github.com/RPi-Distro/pi-bluetooth.git}
60
60
61 # Build directories
61 # Build directories
62 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
62 BASEDIR=${BASEDIR:=$(pwd)/images/${RELEASE}}
63 BUILDDIR="${BASEDIR}/build"
63 BUILDDIR="${BASEDIR}/build"
64
64
65 # Prepare date string for default image file name
65 # Prepare date string for default image file name
66 DATE="$(date +%Y-%m-%d)"
66 DATE="$(date +%Y-%m-%d)"
67 if [ -z "$KERNEL_BRANCH" ] ; then
67 if [ -z "$KERNEL_BRANCH" ] ; then
68 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
68 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
69 else
69 else
70 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
70 IMAGE_NAME=${IMAGE_NAME:=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
71 fi
71 fi
72
72
73 # Chroot directories
73 # Chroot directories
74 R="${BUILDDIR}/chroot"
74 R="${BUILDDIR}/chroot"
75 ETC_DIR="${R}/etc"
75 ETC_DIR="${R}/etc"
76 LIB_DIR="${R}/lib"
76 LIB_DIR="${R}/lib"
77 BOOT_DIR="${R}/boot/firmware"
77 BOOT_DIR="${R}/boot/firmware"
78 KERNEL_DIR="${R}/usr/src/linux"
78 KERNEL_DIR="${R}/usr/src/linux"
79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
79 WLAN_FIRMWARE_DIR="${LIB_DIR}/firmware/brcm"
80
80
81 # Firmware directory: Blank if download from github
81 # Firmware directory: Blank if download from github
82 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
82 RPI_FIRMWARE_DIR=${RPI_FIRMWARE_DIR:=""}
83
83
84 # General settings
84 # General settings
85 SET_ARCH=${SET_ARCH:=32}
85 SET_ARCH=${SET_ARCH:=32}
86 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
86 HOSTNAME=${HOSTNAME:=rpi${RPI_MODEL}-${RELEASE}}
87 PASSWORD=${PASSWORD:=raspberry}
87 PASSWORD=${PASSWORD:=raspberry}
88 USER_PASSWORD=${USER_PASSWORD:=raspberry}
88 USER_PASSWORD=${USER_PASSWORD:=raspberry}
89 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
89 DEFLOCAL=${DEFLOCAL:="en_US.UTF-8"}
90 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
90 TIMEZONE=${TIMEZONE:="Europe/Berlin"}
91 EXPANDROOT=${EXPANDROOT:=true}
91 EXPANDROOT=${EXPANDROOT:=true}
92
92
93 # Keyboard settings
93 # Keyboard settings
94 XKB_MODEL=${XKB_MODEL:=""}
94 XKB_MODEL=${XKB_MODEL:=""}
95 XKB_LAYOUT=${XKB_LAYOUT:=""}
95 XKB_LAYOUT=${XKB_LAYOUT:=""}
96 XKB_VARIANT=${XKB_VARIANT:=""}
96 XKB_VARIANT=${XKB_VARIANT:=""}
97 XKB_OPTIONS=${XKB_OPTIONS:=""}
97 XKB_OPTIONS=${XKB_OPTIONS:=""}
98
98
99 # Network settings (DHCP)
99 # Network settings (DHCP)
100 ENABLE_DHCP=${ENABLE_DHCP:=true}
100 ENABLE_DHCP=${ENABLE_DHCP:=true}
101
101
102 # Network settings (static)
102 # Network settings (static)
103 NET_ADDRESS=${NET_ADDRESS:=""}
103 NET_ADDRESS=${NET_ADDRESS:=""}
104 NET_GATEWAY=${NET_GATEWAY:=""}
104 NET_GATEWAY=${NET_GATEWAY:=""}
105 NET_DNS_1=${NET_DNS_1:=""}
105 NET_DNS_1=${NET_DNS_1:=""}
106 NET_DNS_2=${NET_DNS_2:=""}
106 NET_DNS_2=${NET_DNS_2:=""}
107 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
107 NET_DNS_DOMAINS=${NET_DNS_DOMAINS:=""}
108 NET_NTP_1=${NET_NTP_1:=""}
108 NET_NTP_1=${NET_NTP_1:=""}
109 NET_NTP_2=${NET_NTP_2:=""}
109 NET_NTP_2=${NET_NTP_2:=""}
110
110
111 # APT settings
111 # APT settings
112 APT_PROXY=${APT_PROXY:=""}
112 APT_PROXY=${APT_PROXY:=""}
113 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
113 APT_SERVER=${APT_SERVER:="ftp.debian.org"}
114
114
115 # Feature settings
115 # Feature settings
116 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
116 ENABLE_CONSOLE=${ENABLE_CONSOLE:=true}
117 ENABLE_I2C=${ENABLE_I2C:=false}
117 ENABLE_I2C=${ENABLE_I2C:=false}
118 ENABLE_SPI=${ENABLE_SPI:=false}
118 ENABLE_SPI=${ENABLE_SPI:=false}
119 ENABLE_IPV6=${ENABLE_IPV6:=true}
119 ENABLE_IPV6=${ENABLE_IPV6:=true}
120 ENABLE_SSHD=${ENABLE_SSHD:=true}
120 ENABLE_SSHD=${ENABLE_SSHD:=true}
121 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
121 ENABLE_NONFREE=${ENABLE_NONFREE:=false}
122 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
122 ENABLE_WIRELESS=${ENABLE_WIRELESS:=false}
123 ENABLE_SOUND=${ENABLE_SOUND:=true}
123 ENABLE_SOUND=${ENABLE_SOUND:=true}
124 ENABLE_DBUS=${ENABLE_DBUS:=true}
124 ENABLE_DBUS=${ENABLE_DBUS:=true}
125 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
125 ENABLE_HWRANDOM=${ENABLE_HWRANDOM:=true}
126 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
126 ENABLE_MINGPU=${ENABLE_MINGPU:=false}
127 ENABLE_XORG=${ENABLE_XORG:=false}
127 ENABLE_XORG=${ENABLE_XORG:=false}
128 ENABLE_WM=${ENABLE_WM:=""}
128 ENABLE_WM=${ENABLE_WM:=""}
129 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
129 ENABLE_RSYSLOG=${ENABLE_RSYSLOG:=true}
130 ENABLE_USER=${ENABLE_USER:=true}
130 ENABLE_USER=${ENABLE_USER:=true}
131 USER_NAME=${USER_NAME:="pi"}
131 USER_NAME=${USER_NAME:="pi"}
132 ENABLE_ROOT=${ENABLE_ROOT:=false}
132 ENABLE_ROOT=${ENABLE_ROOT:=false}
133 ENABLE_QEMU=${ENABLE_QEMU:=false}
133 ENABLE_QEMU=${ENABLE_QEMU:=false}
134 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
134 ENABLE_SYSVINIT=${ENABLE_SYSVINIT:=false}
135
135
136 # SSH settings
136 # SSH settings
137 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
137 SSH_ENABLE_ROOT=${SSH_ENABLE_ROOT:=false}
138 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
138 SSH_DISABLE_PASSWORD_AUTH=${SSH_DISABLE_PASSWORD_AUTH:=false}
139 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
139 SSH_LIMIT_USERS=${SSH_LIMIT_USERS:=false}
140 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
140 SSH_ROOT_PUB_KEY=${SSH_ROOT_PUB_KEY:=""}
141 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
141 SSH_USER_PUB_KEY=${SSH_USER_PUB_KEY:=""}
142
142
143 # Advanced settings
143 # Advanced settings
144 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
144 ENABLE_MINBASE=${ENABLE_MINBASE:=false}
145 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
145 ENABLE_REDUCE=${ENABLE_REDUCE:=false}
146 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
146 ENABLE_UBOOT=${ENABLE_UBOOT:=false}
147 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
147 UBOOTSRC_DIR=${UBOOTSRC_DIR:=""}
148 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
148 ENABLE_FBTURBO=${ENABLE_FBTURBO:=false}
149 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=true}
149 ENABLE_VIDEOCORE=${ENABLE_VIDEOCORE:=true}
150 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
150 VIDEOCORESRC_DIR=${VIDEOCORESRC_DIR:=""}
151 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
151 FBTURBOSRC_DIR=${FBTURBOSRC_DIR:=""}
152 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
152 ENABLE_HARDNET=${ENABLE_HARDNET:=false}
153 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
153 ENABLE_IPTABLES=${ENABLE_IPTABLES:=false}
154 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
154 ENABLE_SPLITFS=${ENABLE_SPLITFS:=false}
155 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
155 ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false}
156 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
156 ENABLE_IFNAMES=${ENABLE_IFNAMES:=true}
157 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
157 DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS:=}
158
158
159 # Kernel compilation settings
159 # Kernel compilation settings
160 BUILD_KERNEL=${BUILD_KERNEL:=true}
160 BUILD_KERNEL=${BUILD_KERNEL:=true}
161 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
161 KERNEL_REDUCE=${KERNEL_REDUCE:=false}
162 KERNEL_THREADS=${KERNEL_THREADS:=1}
162 KERNEL_THREADS=${KERNEL_THREADS:=1}
163 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
163 KERNEL_HEADERS=${KERNEL_HEADERS:=true}
164 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
164 KERNEL_MENUCONFIG=${KERNEL_MENUCONFIG:=false}
165 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
165 KERNEL_REMOVESRC=${KERNEL_REMOVESRC:=true}
166 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
166 KERNEL_OLDDEFCONFIG=${KERNEL_OLDDEFCONFIG:=false}
167 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
167 KERNEL_CCACHE=${KERNEL_CCACHE:=false}
168
168
169 # Kernel compilation from source directory settings
169 # Kernel compilation from source directory settings
170 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
170 KERNELSRC_DIR=${KERNELSRC_DIR:=""}
171 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
171 KERNELSRC_CLEAN=${KERNELSRC_CLEAN:=false}
172 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
172 KERNELSRC_CONFIG=${KERNELSRC_CONFIG:=true}
173 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
173 KERNELSRC_PREBUILT=${KERNELSRC_PREBUILT:=false}
174
174
175 # Reduce disk usage settings
175 # Reduce disk usage settings
176 REDUCE_APT=${REDUCE_APT:=true}
176 REDUCE_APT=${REDUCE_APT:=true}
177 REDUCE_DOC=${REDUCE_DOC:=true}
177 REDUCE_DOC=${REDUCE_DOC:=true}
178 REDUCE_MAN=${REDUCE_MAN:=true}
178 REDUCE_MAN=${REDUCE_MAN:=true}
179 REDUCE_VIM=${REDUCE_VIM:=false}
179 REDUCE_VIM=${REDUCE_VIM:=false}
180 REDUCE_BASH=${REDUCE_BASH:=false}
180 REDUCE_BASH=${REDUCE_BASH:=false}
181 REDUCE_HWDB=${REDUCE_HWDB:=true}
181 REDUCE_HWDB=${REDUCE_HWDB:=true}
182 REDUCE_SSHD=${REDUCE_SSHD:=true}
182 REDUCE_SSHD=${REDUCE_SSHD:=true}
183 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
183 REDUCE_LOCALE=${REDUCE_LOCALE:=true}
184
184
185 # Encrypted filesystem settings
185 # Encrypted filesystem settings
186 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
186 ENABLE_CRYPTFS=${ENABLE_CRYPTFS:=false}
187 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
187 CRYPTFS_PASSWORD=${CRYPTFS_PASSWORD:=""}
188 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
188 CRYPTFS_MAPPING=${CRYPTFS_MAPPING:="secure"}
189 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
189 CRYPTFS_CIPHER=${CRYPTFS_CIPHER:="aes-xts-plain64:sha512"}
190 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
190 CRYPTFS_XTSKEYSIZE=${CRYPTFS_XTSKEYSIZE:=512}
191
191
192 # Chroot scripts directory
192 # Chroot scripts directory
193 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
193 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""}
194
194
195 # Packages required in the chroot build environment
195 # Packages required in the chroot build environment
196 APT_INCLUDES=${APT_INCLUDES:=""}
196 APT_INCLUDES=${APT_INCLUDES:=""}
197 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup"
197 APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils,locales,keyboard-configuration,console-setup"
198
198
199 #Packages to exclude from chroot build environment
199 # Packages to exclude from chroot build environment
200 APT_EXCLUDES=${APT_EXCLUDES:=""}
200 APT_EXCLUDES=${APT_EXCLUDES:=""}
201
201
202 # Packages required for bootstrapping
202 # Packages required for bootstrapping
203 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
203 REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo"
204 MISSING_PACKAGES=""
204 MISSING_PACKAGES=""
205
205
206 # Packages installed for c/c++ build environment in chroot (keep empty)
206 # Packages installed for c/c++ build environment in chroot (keep empty)
207 COMPILER_PACKAGES=""
207 COMPILER_PACKAGES=""
208
208
209 set +x
209 set +x
210
210
211 #If init and systemd-sysv are wanted e.g. halt/reboot/shutdown scripts
211 # Setup architecture specific settings
212 if [ "$ENABLE_SYSVINIT" = false ] ; then
213 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
214 fi
215
216 #Check if apt-cacher-ng has its default port open on and set APT_PROXY
217 if [ -n "$(lsof -i :3142)" ] ; then
218 HTTP_PROXY=http://127.0.0.1:3142/
219 fi
220
221 #make script easier and more stable to use with convenient setup switch. Just setup SET_ARCH and RPI_MODEL and your good to go!
222 if [ -n "$SET_ARCH" ] ; then
212 if [ -n "$SET_ARCH" ] ; then
223 echo "Setting Architecture specific settings"
213
224 ##################################
214 # 64 bit configuration
225 # 64 bit config
226 ##################################
227 if [ "$SET_ARCH" = 64 ] ; then
215 if [ "$SET_ARCH" = 64 ] ; then
228 echo "64 bit mode selected - Setting up enviroment"
216 # General 64 bit depended settings
229 # 64 bit depended settings
230 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
217 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-aarch64-static}
231 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
218 KERNEL_ARCH=${KERNEL_ARCH:=arm64}
232 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
219 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="Image"}
233
220
221 # Board specific settings
234 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
222 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
235 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
223 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-arm64"
236 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
224 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi3_defconfig}
237 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
225 RELEASE_ARCH=${RELEASE_ARCH:=arm64}
238 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
226 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel8.img}
239 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
227 CROSS_COMPILE=${CROSS_COMPILE:=aarch64-linux-gnu-}
240 else
228 else
241 echo "error: Only Raspberry PI 3 and 3B+ support 64bit"
229 echo "error: Only Raspberry PI 3 and 3B+ support 64 bit"
242 exit 1
230 exit 1
243 fi
231 fi
244 fi
232 fi
245
233
246 ##################################
234 # 32 bit configuration
247 # 32 bit config
248 ##################################
249 if [ "$SET_ARCH" = 32 ] ; then
235 if [ "$SET_ARCH" = 32 ] ; then
250 echo "32 bit mode selected - Setting up enviroment"
236 # General 32 bit dependend settings
251 #General 32bit configuration
252 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
237 QEMU_BINARY=${QEMU_BINARY:=/usr/bin/qemu-arm-static}
253 KERNEL_ARCH=${KERNEL_ARCH:=arm}
238 KERNEL_ARCH=${KERNEL_ARCH:=arm}
254 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
239 KERNEL_BIN_IMAGE=${KERNEL_BIN_IMAGE:="zImage"}
255
240
256 #Raspberry setting grouped by board compability
241 # Hardware specific settings
257 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
242 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] ; then
258 echo "Setting settings for bcm2835 Raspberry PI boards"
259 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
243 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armel"
260 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
244 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcmrpi_defconfig}
261 RELEASE_ARCH=${RELEASE_ARCH:=armel}
245 RELEASE_ARCH=${RELEASE_ARCH:=armel}
262 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
246 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel.img}
263 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
247 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabi-}
264 fi
248 fi
249
250 # Hardware specific settings
265 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
251 if [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
266 echo "Setting settings for bcm2837 Raspberry PI boards"
267 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
252 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf"
268 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
253 KERNEL_DEFCONFIG=${KERNEL_DEFCONFIG:=bcm2709_defconfig}
269 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
254 RELEASE_ARCH=${RELEASE_ARCH:=armhf}
270 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
255 KERNEL_IMAGE=${KERNEL_IMAGE:=kernel7.img}
271 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
256 CROSS_COMPILE=${CROSS_COMPILE:=arm-linux-gnueabihf-}
272 fi
257 fi
273 fi
258 fi
274 #SET_ARCH not set
259 #SET_ARCH not set
275 else
260 else
276 echo "error: Please set '32' or '64' as value for SET_ARCH"
261 echo "error: Please set '32' or '64' as value for SET_ARCH"
277 exit 1
262 exit 1
278 fi
263 fi
279
264 # Device specific configuration and U-Boot configuration
280 #Device specific configuration and uboot-config
281 echo "Select DTB-File"
282 case "$RPI_MODEL" in
265 case "$RPI_MODEL" in
283 0)
266 0)
284 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
267 DTB_FILE=${DTB_FILE:=bcm2708-rpi-0-w.dtb}
285 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
268 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
286 ;;
269 ;;
287 1)
270 1)
288 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
271 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b.dtb}
289 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
272 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
290 ;;
273 ;;
291 1P)
274 1P)
292 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
275 DTB_FILE=${DTB_FILE:=bcm2708-rpi-b-plus.dtb}
293 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
276 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_defconfig}
294 ;;
277 ;;
295 2)
278 2)
296 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
279 DTB_FILE=${DTB_FILE:=bcm2709-rpi-2-b.dtb}
297 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
280 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_2_defconfig}
298 ;;
281 ;;
299 3)
282 3)
300 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
283 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
301 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
284 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
302 ;;
285 ;;
303 3P)
286 3P)
304 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
287 DTB_FILE=${DTB_FILE:=bcm2710-rpi-3-b.dtb}
305 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
288 UBOOT_CONFIG=${UBOOT_CONFIG:=rpi_3_defconfig}
306 ;;
289 ;;
307 *)
290 *)
308 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
291 echo "error: Raspberry Pi model $RPI_MODEL is not supported!"
309 exit 1
292 exit 1
310 ;;
293 ;;
311 esac
294 esac
312 echo "$DTB_FILE selected"
295 echo "$DTB_FILE selected"
313
296
314 # Check if the internal wireless interface is supported by the RPi model
297 # Check if the internal wireless interface is supported by the RPi model
315 if [ "$ENABLE_WIRELESS" = true ] ; then
298 if [ "$ENABLE_WIRELESS" = true ] ; then
316 if [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ] ; then
299 if [ "$RPI_MODEL" = 1 ] || [ "$RPI_MODEL" = 1P ] || [ "$RPI_MODEL" = 2 ] ; then
317 echo "error: The selected Raspberry Pi model has no internal wireless interface"
300 echo "error: The selected Raspberry Pi model has no internal wireless interface"
318 exit 1
301 exit 1
319 else
302 else
320 echo "Raspberry Pi $RPI_MODEL has WIFI support"
303 echo "Raspberry Pi $RPI_MODEL has WIFI support"
321 fi
304 fi
322 fi
305 fi
323
306
324 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
307 # Check if DISABLE_UNDERVOLT_WARNINGS parameter value is supported
325 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
308 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
326 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
309 if [ "$DISABLE_UNDERVOLT_WARNINGS" != 1 ] && [ "$DISABLE_UNDERVOLT_WARNINGS" != 2 ] ; then
327 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
310 echo "error: DISABLE_UNDERVOLT_WARNINGS=${DISABLE_UNDERVOLT_WARNINGS} is not supported"
328 exit 1
311 exit 1
329 fi
312 fi
330 fi
313 fi
331
314
315 # Add cmake to compile videocore sources
332 if [ "$ENABLE_VIDEOCORE" = true ] ; then
316 if [ "$ENABLE_VIDEOCORE" = true ] ; then
333 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
317 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cmake"
334 fi
318 fi
335
319
336 # Add libncurses5 to enable kernel menuconfig
320 # Add libncurses5 to enable kernel menuconfig
337 if [ "$KERNEL_MENUCONFIG" = true ] ; then
321 if [ "$KERNEL_MENUCONFIG" = true ] ; then
338 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
322 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} libncurses-dev"
339 fi
323 fi
340
324
341 # Add ccache compiler cache for (faster) kernel cross (re)compilation
325 # Add ccache compiler cache for (faster) kernel cross (re)compilation
342 if [ "$KERNEL_CCACHE" = true ] ; then
326 if [ "$KERNEL_CCACHE" = true ] ; then
343 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
327 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} ccache"
344 fi
328 fi
345
329
346 # Add cryptsetup package to enable filesystem encryption
330 # Add cryptsetup package to enable filesystem encryption
347 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
331 if [ "$ENABLE_CRYPTFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
348 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
332 REQUIRED_PACKAGES="${REQUIRED_PACKAGES} cryptsetup"
349 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
333 APT_INCLUDES="${APT_INCLUDES},cryptsetup,busybox,console-setup"
350
334
351 if [ -z "$CRYPTFS_PASSWORD" ] ; then
335 if [ -z "$CRYPTFS_PASSWORD" ] ; then
352 echo "error: no password defined (CRYPTFS_PASSWORD)!"
336 echo "error: no password defined (CRYPTFS_PASSWORD)!"
353 exit 1
337 exit 1
354 fi
338 fi
355 ENABLE_INITRAMFS=true
339 ENABLE_INITRAMFS=true
356 fi
340 fi
357
341
358 # Add initramfs generation tools
342 # Add initramfs generation tools
359 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
343 if [ "$ENABLE_INITRAMFS" = true ] && [ "$BUILD_KERNEL" = true ] ; then
360 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
344 APT_INCLUDES="${APT_INCLUDES},initramfs-tools"
361 fi
345 fi
362
346
363 # Add device-tree-compiler required for building the U-Boot bootloader
347 # Add device-tree-compiler required for building the U-Boot bootloader
364 if [ "$ENABLE_UBOOT" = true ] ; then
348 if [ "$ENABLE_UBOOT" = true ] ; then
365 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
349 APT_INCLUDES="${APT_INCLUDES},device-tree-compiler,bison,flex,bc"
366 fi
350 fi
367
351
368 # Check if root SSH (v2) public key file exists
352 # Check if root SSH (v2) public key file exists
369 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
353 if [ -n "$SSH_ROOT_PUB_KEY" ] ; then
370 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
354 if [ ! -f "$SSH_ROOT_PUB_KEY" ] ; then
371 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
355 echo "error: '$SSH_ROOT_PUB_KEY' specified SSH public key file not found (SSH_ROOT_PUB_KEY)!"
372 exit 1
356 exit 1
373 fi
357 fi
374 fi
358 fi
375
359
376 # Check if $USER_NAME SSH (v2) public key file exists
360 # Check if $USER_NAME SSH (v2) public key file exists
377 if [ -n "$SSH_USER_PUB_KEY" ] ; then
361 if [ -n "$SSH_USER_PUB_KEY" ] ; then
378 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
362 if [ ! -f "$SSH_USER_PUB_KEY" ] ; then
379 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
363 echo "error: '$SSH_USER_PUB_KEY' specified SSH public key file not found (SSH_USER_PUB_KEY)!"
380 exit 1
364 exit 1
381 fi
365 fi
382 fi
366 fi
383
367
384 # Check if all required packages are installed on the build system
368 # Check if all required packages are installed on the build system
385 for package in $REQUIRED_PACKAGES ; do
369 for package in $REQUIRED_PACKAGES ; do
386 if [ "$(dpkg-query -W -f='${Status}' $package)" != "install ok installed" ] ; then
370 if [ "$(dpkg-query -W -f='${Status}' $package)" != "install ok installed" ] ; then
387 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
371 MISSING_PACKAGES="${MISSING_PACKAGES} $package"
388 fi
372 fi
389 done
373 done
390
374
391 # If there are missing packages ask confirmation for install, or exit
375 # If there are missing packages ask confirmation for install, or exit
392 if [ -n "$MISSING_PACKAGES" ] ; then
376 if [ -n "$MISSING_PACKAGES" ] ; then
393 echo "the following packages needed by this script are not installed:"
377 echo "the following packages needed by this script are not installed:"
394 echo "$MISSING_PACKAGES"
378 echo "$MISSING_PACKAGES"
395
379
396 printf "\ndo you want to install the missing packages right now? [y/n] "
380 printf "\ndo you want to install the missing packages right now? [y/n] "
397 read -r confirm
381 read -r confirm
398 [ "$confirm" != "y" ] && exit 1
382 [ "$confirm" != "y" ] && exit 1
399
383
400 # Make sure all missing required packages are installed
384 # Make sure all missing required packages are installed
401 apt-get -qq -y install "${MISSING_PACKAGES}"
385 apt-get -qq -y install "${MISSING_PACKAGES}"
402 fi
386 fi
403
387
404 # Check if ./bootstrap.d directory exists
388 # Check if ./bootstrap.d directory exists
405 if [ ! -d "./bootstrap.d/" ] ; then
389 if [ ! -d "./bootstrap.d/" ] ; then
406 echo "error: './bootstrap.d' required directory not found!"
390 echo "error: './bootstrap.d' required directory not found!"
407 exit 1
391 exit 1
408 fi
392 fi
409
393
410 # Check if ./files directory exists
394 # Check if ./files directory exists
411 if [ ! -d "./files/" ] ; then
395 if [ ! -d "./files/" ] ; then
412 echo "error: './files' required directory not found!"
396 echo "error: './files' required directory not found!"
413 exit 1
397 exit 1
414 fi
398 fi
415
399
416 # Check if specified KERNELSRC_DIR directory exists
400 # Check if specified KERNELSRC_DIR directory exists
417 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
401 if [ -n "$KERNELSRC_DIR" ] && [ ! -d "$KERNELSRC_DIR" ] ; then
418 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
402 echo "error: '${KERNELSRC_DIR}' specified directory not found (KERNELSRC_DIR)!"
419 exit 1
403 exit 1
420 fi
404 fi
421
405
422 # Check if specified UBOOTSRC_DIR directory exists
406 # Check if specified UBOOTSRC_DIR directory exists
423 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
407 if [ -n "$UBOOTSRC_DIR" ] && [ ! -d "$UBOOTSRC_DIR" ] ; then
424 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
408 echo "error: '${UBOOTSRC_DIR}' specified directory not found (UBOOTSRC_DIR)!"
425 exit 1
409 exit 1
426 fi
410 fi
427
411
428 # Check if specified VIDEOCORESRC_DIR directory exists
412 # Check if specified VIDEOCORESRC_DIR directory exists
429 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
413 if [ -n "$VIDEOCORESRC_DIR" ] && [ ! -d "$VIDEOCORESRC_DIR" ] ; then
430 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
414 echo "error: '${VIDEOCORESRC_DIR}' specified directory not found (VIDEOCORESRC_DIR)!"
431 exit 1
415 exit 1
432 fi
416 fi
433
417
434 # Check if specified FBTURBOSRC_DIR directory exists
418 # Check if specified FBTURBOSRC_DIR directory exists
435 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
419 if [ -n "$FBTURBOSRC_DIR" ] && [ ! -d "$FBTURBOSRC_DIR" ] ; then
436 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
420 echo "error: '${FBTURBOSRC_DIR}' specified directory not found (FBTURBOSRC_DIR)!"
437 exit 1
421 exit 1
438 fi
422 fi
439
423
440 # Check if specified CHROOT_SCRIPTS directory exists
424 # Check if specified CHROOT_SCRIPTS directory exists
441 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
425 if [ -n "$CHROOT_SCRIPTS" ] && [ ! -d "$CHROOT_SCRIPTS" ] ; then
442 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
426 echo "error: ${CHROOT_SCRIPTS} specified directory not found (CHROOT_SCRIPTS)!"
443 exit 1
427 exit 1
444 fi
428 fi
445
429
446 # Check if specified device mapping already exists (will be used by cryptsetup)
430 # Check if specified device mapping already exists (will be used by cryptsetup)
447 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
431 if [ -r "/dev/mapping/${CRYPTFS_MAPPING}" ] ; then
448 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
432 echo "error: mapping /dev/mapping/${CRYPTFS_MAPPING} already exists, not proceeding"
449 exit 1
433 exit 1
450 fi
434 fi
451
435
452 # Don't clobber an old build
436 # Don't clobber an old build
453 if [ -e "$BUILDDIR" ] ; then
437 if [ -e "$BUILDDIR" ] ; then
454 echo "error: directory ${BUILDDIR} already exists, not proceeding"
438 echo "error: directory ${BUILDDIR} already exists, not proceeding"
455 exit 1
439 exit 1
456 fi
440 fi
457
441
458 # Setup chroot directory
442 # Setup chroot directory
459 mkdir -p "${R}"
443 mkdir -p "${R}"
460
444
461 # Check if build directory has enough of free disk space >512MB
445 # Check if build directory has enough of free disk space >512MB
462 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
446 if [ "$(df --output=avail "${BUILDDIR}" | sed "1d")" -le "524288" ] ; then
463 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
447 echo "error: ${BUILDDIR} not enough space left to generate the output image!"
464 exit 1
448 exit 1
465 fi
449 fi
466
450
467 set -x
451 set -x
468
452
469 # Call "cleanup" function on various signals and errors
453 # Call "cleanup" function on various signals and errors
470 trap cleanup 0 1 2 3 6
454 trap cleanup 0 1 2 3 6
471
455
472 # Add required packages for the minbase installation
456 # Add required packages for the minbase installation
473 if [ "$ENABLE_MINBASE" = true ] ; then
457 if [ "$ENABLE_MINBASE" = true ] ; then
474 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
458 APT_INCLUDES="${APT_INCLUDES},vim-tiny,netbase,net-tools,ifupdown"
475 fi
459 fi
476
460
477 # Add parted package, required to get partprobe utility
461 # Add parted package, required to get partprobe utility
478 if [ "$EXPANDROOT" = true ] ; then
462 if [ "$EXPANDROOT" = true ] ; then
479 APT_INCLUDES="${APT_INCLUDES},parted"
463 APT_INCLUDES="${APT_INCLUDES},parted"
480 fi
464 fi
481
465
482 # Add dbus package, recommended if using systemd
466 # Add dbus package, recommended if using systemd
483 if [ "$ENABLE_DBUS" = true ] ; then
467 if [ "$ENABLE_DBUS" = true ] ; then
484 APT_INCLUDES="${APT_INCLUDES},dbus"
468 APT_INCLUDES="${APT_INCLUDES},dbus"
485 fi
469 fi
486
470
487 # Add iptables IPv4/IPv6 package
471 # Add iptables IPv4/IPv6 package
488 if [ "$ENABLE_IPTABLES" = true ] ; then
472 if [ "$ENABLE_IPTABLES" = true ] ; then
489 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
473 APT_INCLUDES="${APT_INCLUDES},iptables,iptables-persistent"
490 fi
474 fi
491
475
492 # Add openssh server package
476 # Add openssh server package
493 if [ "$ENABLE_SSHD" = true ] ; then
477 if [ "$ENABLE_SSHD" = true ] ; then
494 APT_INCLUDES="${APT_INCLUDES},openssh-server"
478 APT_INCLUDES="${APT_INCLUDES},openssh-server"
495 fi
479 fi
496
480
497 # Add alsa-utils package
481 # Add alsa-utils package
498 if [ "$ENABLE_SOUND" = true ] ; then
482 if [ "$ENABLE_SOUND" = true ] ; then
499 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
483 APT_INCLUDES="${APT_INCLUDES},alsa-utils"
500 fi
484 fi
501
485
502 # Add rng-tools package
486 # Add rng-tools package
503 if [ "$ENABLE_HWRANDOM" = true ] ; then
487 if [ "$ENABLE_HWRANDOM" = true ] ; then
504 APT_INCLUDES="${APT_INCLUDES},rng-tools"
488 APT_INCLUDES="${APT_INCLUDES},rng-tools"
505 fi
489 fi
506
490
507 # Add fbturbo video driver
491 # Add fbturbo video driver
508 if [ "$ENABLE_FBTURBO" = true ] ; then
492 if [ "$ENABLE_FBTURBO" = true ] ; then
509 # Enable xorg package dependencies
493 # Enable xorg package dependencies
510 ENABLE_XORG=true
494 ENABLE_XORG=true
511 fi
495 fi
512
496
513 # Add user defined window manager package
497 # Add user defined window manager package
514 if [ -n "$ENABLE_WM" ] ; then
498 if [ -n "$ENABLE_WM" ] ; then
515 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
499 APT_INCLUDES="${APT_INCLUDES},${ENABLE_WM}"
516
500
517 # Enable xorg package dependencies
501 # Enable xorg package dependencies
518 ENABLE_XORG=true
502 ENABLE_XORG=true
519 fi
503 fi
520
504
521 # Add xorg package
505 # Add xorg package
522 if [ "$ENABLE_XORG" = true ] ; then
506 if [ "$ENABLE_XORG" = true ] ; then
523 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
507 APT_INCLUDES="${APT_INCLUDES},xorg,dbus-x11"
524 fi
508 fi
525
509
526 # Replace selected packages with smaller clones
510 # Replace selected packages with smaller clones
527 if [ "$ENABLE_REDUCE" = true ] ; then
511 if [ "$ENABLE_REDUCE" = true ] ; then
528 # Add levee package instead of vim-tiny
512 # Add levee package instead of vim-tiny
529 if [ "$REDUCE_VIM" = true ] ; then
513 if [ "$REDUCE_VIM" = true ] ; then
530 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
514 APT_INCLUDES="$(echo ${APT_INCLUDES} | sed "s/vim-tiny/levee/")"
531 fi
515 fi
532
516
533 # Add dropbear package instead of openssh-server
517 # Add dropbear package instead of openssh-server
534 if [ "$REDUCE_SSHD" = true ] ; then
518 if [ "$REDUCE_SSHD" = true ] ; then
535 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
519 APT_INCLUDES="$(echo "${APT_INCLUDES}" | sed "s/openssh-server/dropbear/")"
536 fi
520 fi
537 fi
521 fi
538
522
523 # Configure systemd-sysv exclude to make halt/reboot/shutdown scripts available
524 if [ "$ENABLE_SYSVINIT" = false ] ; then
525 APT_EXCLUDES="--exclude=${APT_EXCLUDES},init,systemd-sysv"
526 fi
527
528 # Check if kernel is getting compiled
529 if [ "$BUILD_KERNEL" = false ] ; then
530 echo "Downloading precompiled kernel"
531 echo "error: not configured"
532 exit 1;
533 # BUILD_KERNEL=true
534 else
535 echo "No precompiled kernel repositories were added"
536 fi
537
539 # Configure kernel sources if no KERNELSRC_DIR
538 # Configure kernel sources if no KERNELSRC_DIR
540 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
539 if [ "$BUILD_KERNEL" = true ] && [ -z "$KERNELSRC_DIR" ] ; then
541 KERNELSRC_CONFIG=true
540 KERNELSRC_CONFIG=true
542 fi
541 fi
543
542
544 # Configure reduced kernel
543 # Configure reduced kernel
545 if [ "$KERNEL_REDUCE" = true ] ; then
544 if [ "$KERNEL_REDUCE" = true ] ; then
546 KERNELSRC_CONFIG=false
545 KERNELSRC_CONFIG=false
547 fi
546 fi
548
547
549 # Configure qemu compatible kernel
548 # Configure qemu compatible kernel
550 if [ "$ENABLE_QEMU" = true ] ; then
549 if [ "$ENABLE_QEMU" = true ] ; then
551 DTB_FILE=vexpress-v2p-ca15_a7.dtb
550 DTB_FILE=vexpress-v2p-ca15_a7.dtb
552 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
551 UBOOT_CONFIG=vexpress_ca15_tc2_defconfig
553 KERNEL_DEFCONFIG="vexpress_defconfig"
552 KERNEL_DEFCONFIG="vexpress_defconfig"
554 if [ "$KERNEL_MENUCONFIG" = false ] ; then
553 if [ "$KERNEL_MENUCONFIG" = false ] ; then
555 KERNEL_OLDDEFCONFIG=true
554 KERNEL_OLDDEFCONFIG=true
556 fi
555 fi
557 fi
556 fi
558
557
559 # Execute bootstrap scripts
558 # Execute bootstrap scripts
560 for SCRIPT in bootstrap.d/*.sh; do
559 for SCRIPT in bootstrap.d/*.sh; do
561 head -n 3 "$SCRIPT"
560 head -n 3 "$SCRIPT"
562 . "$SCRIPT"
561 . "$SCRIPT"
563 done
562 done
564
563
565 ## Execute custom bootstrap scripts
564 ## Execute custom bootstrap scripts
566 if [ -d "custom.d" ] ; then
565 if [ -d "custom.d" ] ; then
567 for SCRIPT in custom.d/*.sh; do
566 for SCRIPT in custom.d/*.sh; do
568 . "$SCRIPT"
567 . "$SCRIPT"
569 done
568 done
570 fi
569 fi
571
570
572 # Execute custom scripts inside the chroot
571 # Execute custom scripts inside the chroot
573 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
572 if [ -n "$CHROOT_SCRIPTS" ] && [ -d "$CHROOT_SCRIPTS" ] ; then
574 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
573 cp -r "${CHROOT_SCRIPTS}" "${R}/chroot_scripts"
575 chroot_exec /bin/bash -x <<'EOF'
574 chroot_exec /bin/bash -x <<'EOF'
576 for SCRIPT in /chroot_scripts/* ; do
575 for SCRIPT in /chroot_scripts/* ; do
577 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
576 if [ -f $SCRIPT -a -x $SCRIPT ] ; then
578 $SCRIPT
577 $SCRIPT
579 fi
578 fi
580 done
579 done
581 EOF
580 EOF
582 rm -rf "${R}/chroot_scripts"
581 rm -rf "${R}/chroot_scripts"
583 fi
582 fi
584
583
585 # Remove c/c++ build environment from the chroot
584 # Remove c/c++ build environment from the chroot
586 chroot_remove_cc
585 chroot_remove_cc
587
586
588 # Generate required machine-id
587 # Generate required machine-id
589 MACHINE_ID=$(dbus-uuidgen)
588 MACHINE_ID=$(dbus-uuidgen)
590 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
589 echo -n "${MACHINE_ID}" > "${R}/var/lib/dbus/machine-id"
591 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
590 echo -n "${MACHINE_ID}" > "${ETC_DIR}/machine-id"
592
591
593 # APT Cleanup
592 # APT Cleanup
594 chroot_exec apt-get -y clean
593 chroot_exec apt-get -y clean
595 chroot_exec apt-get -y autoclean
594 chroot_exec apt-get -y autoclean
596 chroot_exec apt-get -y autoremove
595 chroot_exec apt-get -y autoremove
597
596
598 # Unmount mounted filesystems
597 # Unmount mounted filesystems
599 umount -l "${R}/proc"
598 umount -l "${R}/proc"
600 umount -l "${R}/sys"
599 umount -l "${R}/sys"
601
600
602 # Clean up directories
601 # Clean up directories
603 rm -rf "${R}/run/*"
602 rm -rf "${R}/run/*"
604 rm -rf "${R}/tmp/*"
603 rm -rf "${R}/tmp/*"
605
604
606 # Clean up files
605 # Clean up files
607 rm -f "${ETC_DIR}/ssh/ssh_host_*"
606 rm -f "${ETC_DIR}/ssh/ssh_host_*"
608 rm -f "${ETC_DIR}/dropbear/dropbear_*"
607 rm -f "${ETC_DIR}/dropbear/dropbear_*"
609 rm -f "${ETC_DIR}/apt/sources.list.save"
608 rm -f "${ETC_DIR}/apt/sources.list.save"
610 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
609 rm -f "${ETC_DIR}/resolvconf/resolv.conf.d/original"
611 rm -f "${ETC_DIR}/*-"
610 rm -f "${ETC_DIR}/*-"
612 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
611 rm -f "${ETC_DIR}/apt/apt.conf.d/10proxy"
613 rm -f "${ETC_DIR}/resolv.conf"
612 rm -f "${ETC_DIR}/resolv.conf"
614 rm -f "${R}/root/.bash_history"
613 rm -f "${R}/root/.bash_history"
615 rm -f "${R}/var/lib/urandom/random-seed"
614 rm -f "${R}/var/lib/urandom/random-seed"
616 rm -f "${R}/initrd.img"
615 rm -f "${R}/initrd.img"
617 rm -f "${R}/vmlinuz"
616 rm -f "${R}/vmlinuz"
618 rm -f "${R}${QEMU_BINARY}"
617 rm -f "${R}${QEMU_BINARY}"
619
618
620 if [ "$ENABLE_QEMU" = true ] ; then
619 if [ "$ENABLE_QEMU" = true ] ; then
621 # Setup QEMU directory
620 # Setup QEMU directory
622 mkdir "${BASEDIR}/qemu"
621 mkdir "${BASEDIR}/qemu"
623
622
624 # Copy kernel image to QEMU directory
623 # Copy kernel image to QEMU directory
625 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
624 install_readonly "${BOOT_DIR}/${KERNEL_IMAGE}" "${BASEDIR}/qemu/${KERNEL_IMAGE}"
626
625
627 # Copy kernel config to QEMU directory
626 # Copy kernel config to QEMU directory
628 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
627 install_readonly "${R}/boot/config-${KERNEL_VERSION}" "${BASEDIR}/qemu/config-${KERNEL_VERSION}"
629
628
630 # Copy kernel dtbs to QEMU directory
629 # Copy kernel dtbs to QEMU directory
631 for dtb in "${BOOT_DIR}/"*.dtb ; do
630 for dtb in "${BOOT_DIR}/"*.dtb ; do
632 if [ -f "${dtb}" ] ; then
631 if [ -f "${dtb}" ] ; then
633 install_readonly "${dtb}" "${BASEDIR}/qemu/"
632 install_readonly "${dtb}" "${BASEDIR}/qemu/"
634 fi
633 fi
635 done
634 done
636
635
637 # Copy kernel overlays to QEMU directory
636 # Copy kernel overlays to QEMU directory
638 if [ -d "${BOOT_DIR}/overlays" ] ; then
637 if [ -d "${BOOT_DIR}/overlays" ] ; then
639 # Setup overlays dtbs directory
638 # Setup overlays dtbs directory
640 mkdir "${BASEDIR}/qemu/overlays"
639 mkdir "${BASEDIR}/qemu/overlays"
641
640
642 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
641 for dtb in "${BOOT_DIR}/overlays/"*.dtb ; do
643 if [ -f "${dtb}" ] ; then
642 if [ -f "${dtb}" ] ; then
644 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
643 install_readonly "${dtb}" "${BASEDIR}/qemu/overlays/"
645 fi
644 fi
646 done
645 done
647 fi
646 fi
648
647
649 # Copy u-boot files to QEMU directory
648 # Copy u-boot files to QEMU directory
650 if [ "$ENABLE_UBOOT" = true ] ; then
649 if [ "$ENABLE_UBOOT" = true ] ; then
651 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
650 if [ -f "${BOOT_DIR}/u-boot.bin" ] ; then
652 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
651 install_readonly "${BOOT_DIR}/u-boot.bin" "${BASEDIR}/qemu/u-boot.bin"
653 fi
652 fi
654 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
653 if [ -f "${BOOT_DIR}/uboot.mkimage" ] ; then
655 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
654 install_readonly "${BOOT_DIR}/uboot.mkimage" "${BASEDIR}/qemu/uboot.mkimage"
656 fi
655 fi
657 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
656 if [ -f "${BOOT_DIR}/boot.scr" ] ; then
658 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
657 install_readonly "${BOOT_DIR}/boot.scr" "${BASEDIR}/qemu/boot.scr"
659 fi
658 fi
660 fi
659 fi
661
660
662 # Copy initramfs to QEMU directory
661 # Copy initramfs to QEMU directory
663 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
662 if [ -f "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" ] ; then
664 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
663 install_readonly "${BOOT_DIR}/initramfs-${KERNEL_VERSION}" "${BASEDIR}/qemu/initramfs-${KERNEL_VERSION}"
665 fi
664 fi
666 fi
665 fi
667
666
668 # Calculate size of the chroot directory in KB
667 # Calculate size of the chroot directory in KB
669 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
668 CHROOT_SIZE=$(expr "$(du -s "${R}" | awk '{ print $1 }')")
670
669
671 # Calculate the amount of needed 512 Byte sectors
670 # Calculate the amount of needed 512 Byte sectors
672 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
671 TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512)
673 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
672 FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512)
674 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
673 ROOT_OFFSET=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}")
675
674
676 # The root partition is EXT4
675 # The root partition is EXT4
677 # This means more space than the actual used space of the chroot is used.
676 # This means more space than the actual used space of the chroot is used.
678 # As overhead for journaling and reserved blocks 35% are added.
677 # As overhead for journaling and reserved blocks 35% are added.
679 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
678 ROOT_SECTORS=$(expr "$(expr "${CHROOT_SIZE}" + "${CHROOT_SIZE}" \/ 100 \* 35)" \* 1024 \/ 512)
680
679
681 # Calculate required image size in 512 Byte sectors
680 # Calculate required image size in 512 Byte sectors
682 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
681 IMAGE_SECTORS=$(expr "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}")
683
682
684 # Prepare image file
683 # Prepare image file
685 if [ "$ENABLE_SPLITFS" = true ] ; then
684 if [ "$ENABLE_SPLITFS" = true ] ; then
686 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
685 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count="${TABLE_SECTORS}"
687 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
686 dd if=/dev/zero of="$IMAGE_NAME-frmw.img" bs=512 count=0 seek="${FRMW_SECTORS}"
688 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
687 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count="${TABLE_SECTORS}"
689 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
688 dd if=/dev/zero of="$IMAGE_NAME-root.img" bs=512 count=0 seek="${ROOT_SECTORS}"
690
689
691 # Write firmware/boot partition tables
690 # Write firmware/boot partition tables
692 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
691 sfdisk -q -L -uS -f "$IMAGE_NAME-frmw.img" 2> /dev/null <<EOM
693 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
692 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
694 EOM
693 EOM
695
694
696 # Write root partition table
695 # Write root partition table
697 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
696 sfdisk -q -L -uS -f "$IMAGE_NAME-root.img" 2> /dev/null <<EOM
698 ${TABLE_SECTORS},${ROOT_SECTORS},83
697 ${TABLE_SECTORS},${ROOT_SECTORS},83
699 EOM
698 EOM
700
699
701 # Setup temporary loop devices
700 # Setup temporary loop devices
702 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
701 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME"-frmw.img)"
703 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
702 ROOT_LOOP="$(losetup -o 1M -f --show "$IMAGE_NAME"-root.img)"
704 else # ENABLE_SPLITFS=false
703 else # ENABLE_SPLITFS=false
705 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
704 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count="${TABLE_SECTORS}"
706 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
705 dd if=/dev/zero of="$IMAGE_NAME.img" bs=512 count=0 seek="${IMAGE_SECTORS}"
707
706
708 # Write partition table
707 # Write partition table
709 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
708 sfdisk -q -L -uS -f "$IMAGE_NAME.img" 2> /dev/null <<EOM
710 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
709 ${TABLE_SECTORS},${FRMW_SECTORS},c,*
711 ${ROOT_OFFSET},${ROOT_SECTORS},83
710 ${ROOT_OFFSET},${ROOT_SECTORS},83
712 EOM
711 EOM
713
712
714 # Setup temporary loop devices
713 # Setup temporary loop devices
715 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
714 FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show "$IMAGE_NAME".img)"
716 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
715 ROOT_LOOP="$(losetup -o 65M -f --show "$IMAGE_NAME".img)"
717 fi
716 fi
718
717
719 if [ "$ENABLE_CRYPTFS" = true ] ; then
718 if [ "$ENABLE_CRYPTFS" = true ] ; then
720 # Create dummy ext4 fs
719 # Create dummy ext4 fs
721 mkfs.ext4 "$ROOT_LOOP"
720 mkfs.ext4 "$ROOT_LOOP"
722
721
723 # Setup password keyfile
722 # Setup password keyfile
724 touch .password
723 touch .password
725 chmod 600 .password
724 chmod 600 .password
726 echo -n ${CRYPTFS_PASSWORD} > .password
725 echo -n ${CRYPTFS_PASSWORD} > .password
727
726
728 # Initialize encrypted partition
727 # Initialize encrypted partition
729 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
728 echo "YES" | cryptsetup luksFormat "${ROOT_LOOP}" -c "${CRYPTFS_CIPHER}" -s "${CRYPTFS_XTSKEYSIZE}" .password
730
729
731 # Open encrypted partition and setup mapping
730 # Open encrypted partition and setup mapping
732 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
731 cryptsetup luksOpen "${ROOT_LOOP}" -d .password "${CRYPTFS_MAPPING}"
733
732
734 # Secure delete password keyfile
733 # Secure delete password keyfile
735 shred -zu .password
734 shred -zu .password
736
735
737 # Update temporary loop device
736 # Update temporary loop device
738 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
737 ROOT_LOOP="/dev/mapper/${CRYPTFS_MAPPING}"
739
738
740 # Wipe encrypted partition (encryption cipher is used for randomness)
739 # Wipe encrypted partition (encryption cipher is used for randomness)
741 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
740 dd if=/dev/zero of="${ROOT_LOOP}" bs=512 count="$(blockdev --getsz "${ROOT_LOOP}")"
742 fi
741 fi
743
742
744 # Build filesystems
743 # Build filesystems
745 mkfs.vfat "$FRMW_LOOP"
744 mkfs.vfat "$FRMW_LOOP"
746 mkfs.ext4 "$ROOT_LOOP"
745 mkfs.ext4 "$ROOT_LOOP"
747
746
748 # Mount the temporary loop devices
747 # Mount the temporary loop devices
749 mkdir -p "$BUILDDIR/mount"
748 mkdir -p "$BUILDDIR/mount"
750 mount "$ROOT_LOOP" "$BUILDDIR/mount"
749 mount "$ROOT_LOOP" "$BUILDDIR/mount"
751
750
752 mkdir -p "$BUILDDIR/mount/boot/firmware"
751 mkdir -p "$BUILDDIR/mount/boot/firmware"
753 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
752 mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware"
754
753
755 # Copy all files from the chroot to the loop device mount point directory
754 # Copy all files from the chroot to the loop device mount point directory
756 rsync -a "${R}/" "$BUILDDIR/mount/"
755 rsync -a "${R}/" "$BUILDDIR/mount/"
757
756
758 # Unmount all temporary loop devices and mount points
757 # Unmount all temporary loop devices and mount points
759 cleanup
758 cleanup
760
759
761 # Create block map file(s) of image(s)
760 # Create block map file(s) of image(s)
762 if [ "$ENABLE_SPLITFS" = true ] ; then
761 if [ "$ENABLE_SPLITFS" = true ] ; then
763 # Create block map files for "bmaptool"
762 # Create block map files for "bmaptool"
764 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
763 bmaptool create -o "$IMAGE_NAME-frmw.bmap" "$IMAGE_NAME-frmw.img"
765 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
764 bmaptool create -o "$IMAGE_NAME-root.bmap" "$IMAGE_NAME-root.img"
766
765
767 # Image was successfully created
766 # Image was successfully created
768 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
767 echo "$IMAGE_NAME-frmw.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
769 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
768 echo "$IMAGE_NAME-root.img ($(expr \( "${TABLE_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
770 else
769 else
771 # Create block map file for "bmaptool"
770 # Create block map file for "bmaptool"
772 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
771 bmaptool create -o "$IMAGE_NAME.bmap" "$IMAGE_NAME.img"
773
772
774 # Image was successfully created
773 # Image was successfully created
775 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
774 echo "$IMAGE_NAME.img ($(expr \( "${TABLE_SECTORS}" + "${FRMW_SECTORS}" + "${ROOT_SECTORS}" \) \* 512 \/ 1024 \/ 1024)M)" ": successfully created"
776
775
777 # Create qemu qcow2 image
776 # Create qemu qcow2 image
778 if [ "$ENABLE_QEMU" = true ] ; then
777 if [ "$ENABLE_QEMU" = true ] ; then
779 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
778 QEMU_IMAGE=${QEMU_IMAGE:=${BASEDIR}/qemu/${DATE}-${KERNEL_ARCH}-CURRENT-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}}
780 QEMU_SIZE=16G
779 QEMU_SIZE=16G
781
780
782 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
781 qemu-img convert -f raw -O qcow2 "$IMAGE_NAME".img "$QEMU_IMAGE".qcow2
783 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
782 qemu-img resize "$QEMU_IMAGE".qcow2 $QEMU_SIZE
784
783
785 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
784 echo "$QEMU_IMAGE.qcow2 ($QEMU_SIZE)" ": successfully created"
786 fi
785 fi
787 fi
786 fi
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant