@@ -0,0 +1,14 | |||||
|
1 | #!/bin/sh -e | |||
|
2 | # | |||
|
3 | # rc.local | |||
|
4 | # | |||
|
5 | # This script is executed at the end of each multiuser runlevel. | |||
|
6 | # Make sure that the script will "exit 0" on success or any other | |||
|
7 | # value on error. | |||
|
8 | # | |||
|
9 | # In order to enable or disable this script just change the execution | |||
|
10 | # bits. | |||
|
11 | # | |||
|
12 | # By default this script does nothing. | |||
|
13 | ||||
|
14 | exit 0 |
@@ -0,0 +1,13 | |||||
|
1 | logger -t "rc.firstboot" "Configuring network interface name" | |||
|
2 | ||||
|
3 | INTERFACE_NAME=$(dmesg | grep "renamed from eth0" | awk -F ":| " '{ print $9 }') | |||
|
4 | ||||
|
5 | if [ ! -z INTERFACE_NAME ] ; then | |||
|
6 | if [ -r "/etc/systemd/network/eth.network" ] ; then | |||
|
7 | sed -i "s/eth0/${INTERFACE_NAME}/" /etc/systemd/network/eth.network | |||
|
8 | fi | |||
|
9 | ||||
|
10 | if [ -r "/lib/systemd/network/10-eth.network" ] ; then | |||
|
11 | sed -i "s/eth0/${INTERFACE_NAME}/" /lib/systemd/network/10-eth.network | |||
|
12 | fi | |||
|
13 | fi |
@@ -1,6 +1,6 | |||||
1 | # rpi2-gen-image |
|
1 | # rpi2-gen-image | |
2 | ## Introduction |
|
2 | ## Introduction | |
3 |
`rpi2-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for the Raspberry 2 (RPi2) computer. The script at this time |
|
3 | `rpi2-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for the Raspberry 2 (RPi2) computer. The script at this time supports the bootstrapping of the Debian releases "jessie" and "stretch". | |
4 |
|
4 | |||
5 | ## Build dependencies |
|
5 | ## Build dependencies | |
6 | The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user. |
|
6 | The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user. | |
@@ -22,6 +22,7 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi2-gen-image.sh | |||||
22 | BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi2-gen-image.sh |
|
22 | BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi2-gen-image.sh | |
23 | ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi2-gen-image.sh |
|
23 | ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi2-gen-image.sh | |
24 | ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi2-gen-image.sh |
|
24 | ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi2-gen-image.sh | |
|
25 | RELEASE=stretch BUILD_KERNEL=true ./rpi2-gen-image.sh | |||
25 | ``` |
|
26 | ``` | |
26 |
|
27 | |||
27 | #### APT settings: |
|
28 | #### APT settings: | |
@@ -35,6 +36,9 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will sp | |||||
35 | A comma separated list of additional packages to be installed during bootstrapping. |
|
36 | A comma separated list of additional packages to be installed during bootstrapping. | |
36 |
|
37 | |||
37 | #### General system settings: |
|
38 | #### General system settings: | |
|
39 | ##### `RELEASE`="jessie" | |||
|
40 | Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases "jessie" and "stretch". `BUILD_KERNEL`=true will automatically be set if the Debian release `stretch` is used. | |||
|
41 | ||||
38 | ##### `HOSTNAME`="rpi2-jessie" |
|
42 | ##### `HOSTNAME`="rpi2-jessie" | |
39 | Set system host name. It's recommended that the host name is unique in the corresponding subnet. |
|
43 | Set system host name. It's recommended that the host name is unique in the corresponding subnet. | |
40 |
|
44 | |||
@@ -171,6 +175,9 Path to a directory with scripts that should be run in the chroot before the ima | |||||
171 | ##### `ENABLE_INITRAMFS`=false |
|
175 | ##### `ENABLE_INITRAMFS`=false | |
172 | Create an initramfs that that will be loaded during the Linux startup process. `ENABLE_INITRAMFS` will automatically get enabled if `ENABLE_CRYPTFS`=true. This parameter will be ignored if `BUILD_KERNEL`=false. |
|
176 | Create an initramfs that that will be loaded during the Linux startup process. `ENABLE_INITRAMFS` will automatically get enabled if `ENABLE_CRYPTFS`=true. This parameter will be ignored if `BUILD_KERNEL`=false. | |
173 |
|
177 | |||
|
178 | ##### `ENABLE_IFNAMES`=true | |||
|
179 | Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names. This parameter is only supported if the Debian release `stretch` is used. | |||
|
180 | ||||
174 | #### Kernel compilation: |
|
181 | #### Kernel compilation: | |
175 | ##### `BUILD_KERNEL`=false |
|
182 | ##### `BUILD_KERNEL`=false | |
176 | Build and install the latest RPi2 Linux kernel. Currently only the default RPi2 kernel configuration is used. |
|
183 | Build and install the latest RPi2 Linux kernel. Currently only the default RPi2 kernel configuration is used. |
@@ -7,6 +7,7 | |||||
7 |
|
7 | |||
8 | VARIANT="" |
|
8 | VARIANT="" | |
9 | COMPONENTS="main" |
|
9 | COMPONENTS="main" | |
|
10 | EXCLUDES="" | |||
10 |
|
11 | |||
11 | # Use non-free Debian packages if needed |
|
12 | # Use non-free Debian packages if needed | |
12 | if [ "$ENABLE_NONFREE" = true ] ; then |
|
13 | if [ "$ENABLE_NONFREE" = true ] ; then | |
@@ -18,8 +19,13 if [ "$ENABLE_MINBASE" = true ] ; then | |||||
18 | VARIANT="--variant=minbase" |
|
19 | VARIANT="--variant=minbase" | |
19 | fi |
|
20 | fi | |
20 |
|
21 | |||
|
22 | # Exclude packages if required by Debian release | |||
|
23 | if [ "$RELEASE" = "stretch" ] ; then | |||
|
24 | EXCLUDES="--exclude=init,systemd-sysv" | |||
|
25 | fi | |||
|
26 | ||||
21 | # Base debootstrap (unpack only) |
|
27 | # Base debootstrap (unpack only) | |
22 | http_proxy=${APT_PROXY} debootstrap --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian" |
|
28 | http_proxy=${APT_PROXY} debootstrap ${EXCLUDES} --arch="${RELEASE_ARCH}" --foreign ${VARIANT} --components="${COMPONENTS}" --include="${APT_INCLUDES}" "${RELEASE}" "${R}" "http://${APT_SERVER}/debian" | |
23 |
|
29 | |||
24 | # Copy qemu emulator binary to chroot |
|
30 | # Copy qemu emulator binary to chroot | |
25 | install_exec "${QEMU_BINARY}" "${R}${QEMU_BINARY}" |
|
31 | install_exec "${QEMU_BINARY}" "${R}${QEMU_BINARY}" | |
@@ -34,4 +40,8 chroot_exec /debootstrap/debootstrap --second-stage | |||||
34 | # Mount required filesystems |
|
40 | # Mount required filesystems | |
35 | mount -t proc none "${R}/proc" |
|
41 | mount -t proc none "${R}/proc" | |
36 | mount -t sysfs none "${R}/sys" |
|
42 | mount -t sysfs none "${R}/sys" | |
|
43 | ||||
|
44 | # Mount pseudo terminal slave if supported by Debian release | |||
|
45 | if [ -d "${R}/dev/pts" ] ; then | |||
37 | mount --bind /dev/pts "${R}/dev/pts" |
|
46 | mount --bind /dev/pts "${R}/dev/pts" | |
|
47 | fi |
@@ -171,9 +171,9 fi | |||||
171 |
|
171 | |||
172 | # Setup firmware boot cmdline |
|
172 | # Setup firmware boot cmdline | |
173 | if [ "$ENABLE_SPLITFS" = true ] ; then |
|
173 | if [ "$ENABLE_SPLITFS" = true ] ; then | |
174 |
CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait |
|
174 | CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1" | |
175 | else |
|
175 | else | |
176 |
CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait |
|
176 | CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1" | |
177 | fi |
|
177 | fi | |
178 |
|
178 | |||
179 | # Add encrypted root partition to cmdline.txt |
|
179 | # Add encrypted root partition to cmdline.txt | |
@@ -195,6 +195,18 if [ "$ENABLE_IPV6" = false ] ; then | |||||
195 | CMDLINE="${CMDLINE} ipv6.disable=1" |
|
195 | CMDLINE="${CMDLINE} ipv6.disable=1" | |
196 | fi |
|
196 | fi | |
197 |
|
197 | |||
|
198 | # Automatically assign predictable network interface names | |||
|
199 | if [ "$ENABLE_IFNAMES" = false ] ; then | |||
|
200 | CMDLINE="${CMDLINE} net.ifnames=0" | |||
|
201 | else | |||
|
202 | CMDLINE="${CMDLINE} net.ifnames=1" | |||
|
203 | fi | |||
|
204 | ||||
|
205 | # Set init to systemd if required by Debian release | |||
|
206 | if [ "$RELEASE" = "stretch" ] ; then | |||
|
207 | CMDLINE="${CMDLINE} init=/bin/systemd" | |||
|
208 | fi | |||
|
209 | ||||
198 | # Install firmware boot cmdline |
|
210 | # Install firmware boot cmdline | |
199 | echo "${CMDLINE}" > "${BOOTDIR}/cmdline.txt" |
|
211 | echo "${CMDLINE}" > "${BOOTDIR}/cmdline.txt" | |
200 |
|
212 |
@@ -56,6 +56,12 fi | |||||
56 | # Remove empty settings from network configuration |
|
56 | # Remove empty settings from network configuration | |
57 | sed -i "/.*=\$/d" "${ETCDIR}/systemd/network/eth.network" |
|
57 | sed -i "/.*=\$/d" "${ETCDIR}/systemd/network/eth.network" | |
58 |
|
58 | |||
|
59 | # Move systemd network configuration if required by Debian release | |||
|
60 | if [ "$RELEASE" = "stretch" ] ; then | |||
|
61 | mv -v "${ETCDIR}/systemd/network/eth.network" "${LIBDIR}/systemd/network/10-eth.network" | |||
|
62 | rm -fr "${ETCDIR}/systemd/network" | |||
|
63 | fi | |||
|
64 | ||||
59 | # Enable systemd-networkd service |
|
65 | # Enable systemd-networkd service | |
60 | chroot_exec systemctl enable systemd-networkd |
|
66 | chroot_exec systemctl enable systemd-networkd | |
61 |
|
67 |
@@ -29,10 +29,20 cat files/firstboot/24-generate-machineid.sh >> "${ETCDIR}/rc.firstboot" | |||||
29 | # Create /etc/resolv.conf symlink |
|
29 | # Create /etc/resolv.conf symlink | |
30 | cat files/firstboot/25-create-resolv-symlink.sh >> "${ETCDIR}/rc.firstboot" |
|
30 | cat files/firstboot/25-create-resolv-symlink.sh >> "${ETCDIR}/rc.firstboot" | |
31 |
|
31 | |||
|
32 | # Configure automatic network interface names | |||
|
33 | if [ "$ENABLE_IFNAMES" = true ] ; then | |||
|
34 | cat files/firstboot/26-config-ifnames.sh >> "${ETCDIR}/rc.firstboot" | |||
|
35 | fi | |||
|
36 | ||||
32 | # Finalize rc.firstboot script |
|
37 | # Finalize rc.firstboot script | |
33 | cat files/firstboot/99-finish.sh >> "${ETCDIR}/rc.firstboot" |
|
38 | cat files/firstboot/99-finish.sh >> "${ETCDIR}/rc.firstboot" | |
34 | chmod +x "${ETCDIR}/rc.firstboot" |
|
39 | chmod +x "${ETCDIR}/rc.firstboot" | |
35 |
|
40 | |||
|
41 | # Install default rc.local if it does not exist | |||
|
42 | if [ ! -f "${ETCDIR}/rc.local" ] ; then | |||
|
43 | install_exec files/etc/rc.local "${ETCDIR}/rc.local" | |||
|
44 | fi | |||
|
45 | ||||
36 | # Add rc.firstboot script to rc.local |
|
46 | # Add rc.firstboot script to rc.local | |
37 | sed -i '/exit 0/d' "${ETCDIR}/rc.local" |
|
47 | sed -i '/exit 0/d' "${ETCDIR}/rc.local" | |
38 | echo /etc/rc.firstboot >> "${ETCDIR}/rc.local" |
|
48 | echo /etc/rc.firstboot >> "${ETCDIR}/rc.local" |
@@ -1,3 +1,7 | |||||
|
1 | logger -t "rc.firstboot" "Reload systemd manager configuration" | |||
|
2 | systemctl daemon-reload | |||
|
3 | systemctl restart networking.service | |||
|
4 | systemctl restart systemd-networkd.service | |||
1 | logger -t "rc.firstboot" "First boot actions finished" |
|
5 | logger -t "rc.firstboot" "First boot actions finished" | |
2 | rm -f /etc/rc.firstboot |
|
6 | rm -f /etc/rc.firstboot | |
3 | sed -i '/.*rc.firstboot/d' /etc/rc.local |
|
7 | sed -i '/.*rc.firstboot/d' /etc/rc.local |
@@ -3,7 +3,7 | |||||
3 | ######################################################################## |
|
3 | ######################################################################## | |
4 | # rpi2-gen-image.sh 2015-2016 |
|
4 | # rpi2-gen-image.sh 2015-2016 | |
5 | # |
|
5 | # | |
6 |
# Advanced |
|
6 | # Advanced Debian "jessie" and "stretch" bootstrap script for RPi2 | |
7 | # |
|
7 | # | |
8 | # This program is free software; you can redistribute it and/or |
|
8 | # This program is free software; you can redistribute it and/or | |
9 | # modify it under the terms of the GNU General Public License |
|
9 | # modify it under the terms of the GNU General Public License | |
@@ -61,6 +61,7 BUILDDIR="${BASEDIR}/build" | |||||
61 | # Chroot directories |
|
61 | # Chroot directories | |
62 | R="${BUILDDIR}/chroot" |
|
62 | R="${BUILDDIR}/chroot" | |
63 | ETCDIR="${R}/etc" |
|
63 | ETCDIR="${R}/etc" | |
|
64 | LIBDIR="${R}/lib" | |||
64 | BOOTDIR="${R}/boot/firmware" |
|
65 | BOOTDIR="${R}/boot/firmware" | |
65 | KERNELDIR="${R}/usr/src/linux" |
|
66 | KERNELDIR="${R}/usr/src/linux" | |
66 |
|
67 | |||
@@ -122,6 +123,7 ENABLE_HARDNET=${ENABLE_HARDNET:=false} | |||||
122 | ENABLE_IPTABLES=${ENABLE_IPTABLES:=false} |
|
123 | ENABLE_IPTABLES=${ENABLE_IPTABLES:=false} | |
123 | ENABLE_SPLITFS=${ENABLE_SPLITFS:=false} |
|
124 | ENABLE_SPLITFS=${ENABLE_SPLITFS:=false} | |
124 | ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false} |
|
125 | ENABLE_INITRAMFS=${ENABLE_INITRAMFS:=false} | |
|
126 | ENABLE_IFNAMES=${ENABLE_IFNAMES:=true} | |||
125 |
|
127 | |||
126 | # Kernel compilation settings |
|
128 | # Kernel compilation settings | |
127 | BUILD_KERNEL=${BUILD_KERNEL:=false} |
|
129 | BUILD_KERNEL=${BUILD_KERNEL:=false} | |
@@ -162,7 +164,7 CHROOT_SCRIPTS=${CHROOT_SCRIPTS:=""} | |||||
162 |
|
164 | |||
163 | # Packages required in the chroot build environment |
|
165 | # Packages required in the chroot build environment | |
164 | APT_INCLUDES=${APT_INCLUDES:=""} |
|
166 | APT_INCLUDES=${APT_INCLUDES:=""} | |
165 | APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo" |
|
167 | APT_INCLUDES="${APT_INCLUDES},apt-transport-https,apt-utils,ca-certificates,debian-archive-keyring,dialog,sudo,systemd,sysvinit-utils" | |
166 |
|
168 | |||
167 | # Packages required for bootstrapping |
|
169 | # Packages required for bootstrapping | |
168 | REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git" |
|
170 | REQUIRED_PACKAGES="debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git" | |
@@ -170,6 +172,11 MISSING_PACKAGES="" | |||||
170 |
|
172 | |||
171 | set +x |
|
173 | set +x | |
172 |
|
174 | |||
|
175 | # Build latest RPi2 Linux kernel if required by Debian release | |||
|
176 | if [ "$RELEASE" = "stretch" ] ; then | |||
|
177 | BUILD_KERNEL=true | |||
|
178 | fi | |||
|
179 | ||||
173 | # Add packages required for kernel cross compilation |
|
180 | # Add packages required for kernel cross compilation | |
174 | if [ "$BUILD_KERNEL" = true ] ; then |
|
181 | if [ "$BUILD_KERNEL" = true ] ; then | |
175 | REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf" |
|
182 | REQUIRED_PACKAGES="${REQUIRED_PACKAGES} crossbuild-essential-armhf" |
General Comments 0
Vous devez vous connecter pour laisser un commentaire.
Se connecter maintenant