@@ -149,6 +149,9 password, use only in trusted environments. | |||
|
149 | 149 | ##### `ENABLE_HARDNET`=false |
|
150 | 150 | Enable IPv4/IPv6 network stack hardening settings. |
|
151 | 151 | |
|
152 | ##### `ENABLE_SPLITFS`=false | |
|
153 | Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`. | |
|
154 | ||
|
152 | 155 | ##### `CHROOT_SCRIPTS`="" |
|
153 | 156 | Path to a directory with scripts that should be run in the chroot before the image is finally built. Every executable file in this direcory is run in lexicographical order. |
|
154 | 157 | |
@@ -167,3 +170,8 After the image file was successfully created by the `rpi2-gen-image.sh` script | |||
|
167 | 170 | bmaptool copy ./images/jessie/2015-12-13-debian-jessie.img /dev/mmcblk0 |
|
168 | 171 | dd bs=4M if=./images/jessie/2015-12-13-debian-jessie.img of=/dev/mmcblk0 |
|
169 | 172 | ``` |
|
173 | If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive: | |
|
174 | ```shell | |
|
175 | bmaptool copy ./images/jessie/2015-12-13-debian-jessie-frmw.img /dev/mmcblk0 | |
|
176 | bmaptool copy ./images/jessie/2015-12-13-debian-jessie-root.img /dev/sdc | |
|
177 | ``` |
@@ -25,8 +25,8 cleanup (){ | |||
|
25 | 25 | umount -l $R/dev/pts 2> /dev/null |
|
26 | 26 | umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null |
|
27 | 27 | umount "$BUILDDIR/mount" 2> /dev/null |
|
28 |
losetup -d "$ |
|
|
29 |
losetup -d "$ |
|
|
28 | losetup -d "$ROOT_LOOP" 2> /dev/null | |
|
29 | losetup -d "$FRMW_LOOP" 2> /dev/null | |
|
30 | 30 | trap - 0 1 2 3 6 |
|
31 | 31 | } |
|
32 | 32 | |
@@ -94,6 +94,7 ENABLE_UBOOT=${ENABLE_UBOOT:=false} | |||
|
94 | 94 | ENABLE_FBTURBO=${ENABLE_FBTURBO:=false} |
|
95 | 95 | ENABLE_HARDNET=${ENABLE_HARDNET:=false} |
|
96 | 96 | ENABLE_IPTABLES=${ENABLE_IPTABLES:=false} |
|
97 | ENABLE_SPLITFS=${ENABLE_SPLITFS:=false} | |
|
97 | 98 | |
|
98 | 99 | # Image chroot path |
|
99 | 100 | R=${BUILDDIR}/chroot |
@@ -408,7 +409,11 else | |||
|
408 | 409 | fi |
|
409 | 410 | |
|
410 | 411 | # Set up firmware boot cmdline |
|
411 | CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait net.ifnames=1 console=tty1" | |
|
412 | if [ "$ENABLE_SPLITFS" = true ] ; then | |
|
413 | CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait net.ifnames=1 console=tty1" | |
|
414 | else | |
|
415 | CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait net.ifnames=1 console=tty1" | |
|
416 | fi | |
|
412 | 417 | |
|
413 | 418 | # Set up serial console support (if requested) |
|
414 | 419 | if [ "$ENABLE_CONSOLE" = true ] ; then |
@@ -457,6 +462,9 install -o root -g root -m 644 files/modprobe.d/raspi-blacklist.conf $R/etc/modp | |||
|
457 | 462 | |
|
458 | 463 | # Create default fstab |
|
459 | 464 | install -o root -g root -m 644 files/fstab $R/etc/fstab |
|
465 | if [ "$ENABLE_SPLITFS" = true ] ; then | |
|
466 | sed -i '/mmcblk0p2/sda1/' $R/etc/fstab | |
|
467 | fi | |
|
460 | 468 | |
|
461 | 469 | # Avoid swapping and increase cache sizes |
|
462 | 470 | install -o root -g root -m 644 files/sysctl.d/81-rpi-vm.conf $R/etc/sysctl.d/81-rpi-vm.conf |
@@ -645,8 +653,8 CHROOT_SIZE=$(expr `du -s $R | awk '{ print $1 }'`) | |||
|
645 | 653 | |
|
646 | 654 | # Calculate the amount of needed 512 Byte sectors |
|
647 | 655 | TABLE_SECTORS=$(expr 1 \* 1024 \* 1024 \/ 512) |
|
648 |
|
|
|
649 |
ROOT_OFFSET=$(expr ${TABLE_SECTORS} + ${ |
|
|
656 | FRMW_SECTORS=$(expr 64 \* 1024 \* 1024 \/ 512) | |
|
657 | ROOT_OFFSET=$(expr ${TABLE_SECTORS} + ${FRMW_SECTORS}) | |
|
650 | 658 | |
|
651 | 659 | # The root partition is EXT4 |
|
652 | 660 | # This means more space than the actual used space of the chroot is used. |
@@ -654,37 +662,63 ROOT_OFFSET=$(expr ${TABLE_SECTORS} + ${BOOT_SECTORS}) | |||
|
654 | 662 | ROOT_SECTORS=$(expr $(expr ${CHROOT_SIZE} + ${CHROOT_SIZE} \/ 100 \* 20) \* 1024 \/ 512) |
|
655 | 663 | |
|
656 | 664 | # Calculate required image size in 512 Byte sectors |
|
657 |
IMAGE_SECTORS=$(expr ${TABLE_SECTORS} + ${ |
|
|
665 | IMAGE_SECTORS=$(expr ${TABLE_SECTORS} + ${FRMW_SECTORS} + ${ROOT_SECTORS}) | |
|
658 | 666 | |
|
659 | 667 | # Prepare date string for image file name |
|
660 | 668 | DATE="$(date +%Y-%m-%d)" |
|
661 | 669 | |
|
662 | 670 | # Prepare image file |
|
663 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}.img" bs=512 count=${TABLE_SECTORS} | |
|
664 |
dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}.img" bs=512 count= |
|
|
671 | if [ "$ENABLE_SPLITFS" = true ] ; then | |
|
672 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}-frmw.img" bs=512 count=${TABLE_SECTORS} | |
|
673 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}-frmw.img" bs=512 count=0 seek=${FRMW_SECTORS} | |
|
674 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}-root.img" bs=512 count=${TABLE_SECTORS} | |
|
675 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}-root.img" bs=512 count=0 seek=${ROOT_SECTORS} | |
|
676 | # Write partition tables | |
|
677 | sfdisk -q -L -f "$BASEDIR/${DATE}-debian-${RELEASE}-frmw.img" <<EOM | |
|
678 | unit: sectors | |
|
665 | 679 | |
|
666 | # Write partition table | |
|
667 | sfdisk -q -f "$BASEDIR/${DATE}-debian-${RELEASE}.img" <<EOM | |
|
680 | 1 : start= ${TABLE_SECTORS}, size= ${FRMW_SECTORS}, Id= c, bootable | |
|
681 | 2 : start= 0, size= 0, Id= 0 | |
|
682 | 3 : start= 0, size= 0, Id= 0 | |
|
683 | 4 : start= 0, size= 0, Id= 0 | |
|
684 | EOM | |
|
685 | sfdisk -q -L -f "$BASEDIR/${DATE}-debian-${RELEASE}-root.img" <<EOM | |
|
668 | 686 | unit: sectors |
|
669 | 687 | |
|
670 |
1 : start= ${TABLE_SECTORS}, size= ${ |
|
|
688 | 1 : start= ${TABLE_SECTORS}, size= ${ROOT_SECTORS}, Id=83 | |
|
689 | 2 : start= 0, size= 0, Id= 0 | |
|
690 | 3 : start= 0, size= 0, Id= 0 | |
|
691 | 4 : start= 0, size= 0, Id= 0 | |
|
692 | EOM | |
|
693 | # Set up temporary loop devices and build filesystems | |
|
694 | FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show $BASEDIR/${DATE}-debian-${RELEASE}-frmw.img)" | |
|
695 | ROOT_LOOP="$(losetup -o 1M -f --show $BASEDIR/${DATE}-debian-${RELEASE}-root.img)" | |
|
696 | else | |
|
697 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}.img" bs=512 count=${TABLE_SECTORS} | |
|
698 | dd if=/dev/zero of="$BASEDIR/${DATE}-debian-${RELEASE}.img" bs=512 count=0 seek=${IMAGE_SECTORS} | |
|
699 | # Write partition table | |
|
700 | sfdisk -q -f "$BASEDIR/${DATE}-debian-${RELEASE}.img" <<EOM | |
|
701 | unit: sectors | |
|
702 | ||
|
703 | 1 : start= ${TABLE_SECTORS}, size= ${FRMW_SECTORS}, Id= c, bootable | |
|
671 | 704 | 2 : start= ${ROOT_OFFSET}, size= ${ROOT_SECTORS}, Id=83 |
|
672 | 705 | 3 : start= 0, size= 0, Id= 0 |
|
673 | 706 | 4 : start= 0, size= 0, Id= 0 |
|
674 | 707 | EOM |
|
708 | # Set up temporary loop devices and build filesystems | |
|
709 | FRMW_LOOP="$(losetup -o 1M --sizelimit 64M -f --show $BASEDIR/${DATE}-debian-${RELEASE}.img)" | |
|
710 | ROOT_LOOP="$(losetup -o 65M -f --show $BASEDIR/${DATE}-debian-${RELEASE}.img)" | |
|
711 | fi | |
|
675 | 712 | |
|
676 | # Set up temporary loop devices and build filesystems | |
|
677 | VFAT_LOOP="$(losetup -o 1M --sizelimit 64M -f --show $BASEDIR/${DATE}-debian-${RELEASE}.img)" | |
|
678 | EXT4_LOOP="$(losetup -o 65M -f --show $BASEDIR/${DATE}-debian-${RELEASE}.img)" | |
|
679 | mkfs.vfat "$VFAT_LOOP" | |
|
680 | mkfs.ext4 "$EXT4_LOOP" | |
|
713 | mkfs.vfat "$FRMW_LOOP" | |
|
714 | mkfs.ext4 "$ROOT_LOOP" | |
|
681 | 715 | |
|
682 | 716 | # Mount the temporary loop devices |
|
683 | 717 | mkdir -p "$BUILDDIR/mount" |
|
684 |
mount "$ |
|
|
718 | mount "$ROOT_LOOP" "$BUILDDIR/mount" | |
|
685 | 719 | |
|
686 | 720 | mkdir -p "$BUILDDIR/mount/boot/firmware" |
|
687 |
mount "$ |
|
|
721 | mount "$FRMW_LOOP" "$BUILDDIR/mount/boot/firmware" | |
|
688 | 722 | |
|
689 | 723 | # Copy all files from the chroot to the loop device mount point directory |
|
690 | 724 | rsync -a "$R/" "$BUILDDIR/mount/" |
@@ -692,8 +726,18 rsync -a "$R/" "$BUILDDIR/mount/" | |||
|
692 | 726 | # Unmount all temporary loop devices and mount points |
|
693 | 727 | cleanup |
|
694 | 728 | |
|
695 | # (optinal) create block map file for "bmaptool" | |
|
696 | bmaptool create -o "$BASEDIR/${DATE}-debian-${RELEASE}.bmap" "$BASEDIR/${DATE}-debian-${RELEASE}.img" | |
|
729 | if [ "$ENABLE_SPLITFS" = true ] ; then | |
|
730 | # (optional) create block map file for "bmaptool" | |
|
731 | bmaptool create -o "$BASEDIR/${DATE}-debian-${RELEASE}-frmw.bmap" "$BASEDIR/${DATE}-debian-${RELEASE}-frmw.img" | |
|
732 | bmaptool create -o "$BASEDIR/${DATE}-debian-${RELEASE}-root.bmap" "$BASEDIR/${DATE}-debian-${RELEASE}-root.img" | |
|
733 | ||
|
734 | # Image was successfully created | |
|
735 | echo "$BASEDIR/${DATE}-debian-${RELEASE}-frmw.img ($(expr ${TABLE_SECTORS} + ${FRMW_SECTORS} \* 512 \/ 1024)M)" ": successfully created" | |
|
736 | echo "$BASEDIR/${DATE}-debian-${RELEASE}-root.img ($(expr ${TABLE_SECTORS} + ${ROOT_SECTORS} \* 512 \/ 1024)M)" ": successfully created" | |
|
737 | else | |
|
738 | # (optional) create block map file for "bmaptool" | |
|
739 | bmaptool create -o "$BASEDIR/${DATE}-debian-${RELEASE}.bmap" "$BASEDIR/${DATE}-debian-${RELEASE}.img" | |
|
697 | 740 | |
|
698 | # Image was successfully created | |
|
699 |
echo "$BASEDIR/${DATE}-debian-${RELEASE}.img (${ |
|
|
741 | # Image was successfully created | |
|
742 | echo "$BASEDIR/${DATE}-debian-${RELEASE}.img ($(expr ${TABLE_SECTORS} + ${FRMW_SECTORS} + ${ROOT_SECTORS} \* 512 \/ 1024)M)" ": successfully created" | |
|
743 | fi |
General Comments 0
Vous devez vous connecter pour laisser un commentaire.
Se connecter maintenant