| OLD | NEW |
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 # Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | 2 # Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE.md file. | 4 # BSD-style license that can be found in the LICENSE.md file. |
| 5 # | 5 # |
| 6 # Script for preparing the Raspberry Pi2 image with the fletch agent. | 6 # Script for preparing the Raspberry Pi2 image with the dartino agent. |
| 7 # | 7 # |
| 8 # You need | 8 # You need |
| 9 # $ sudo apt-get qemu qemu-user-static binfmt-support | 9 # $ sudo apt-get qemu qemu-user-static binfmt-support |
| 10 # to run this. | 10 # to run this. |
| 11 # | 11 # |
| 12 # This must run in the fletch directory. | 12 # This must run in the dartino directory. |
| 13 # | 13 # |
| 14 # The fletch-agent package must be build before running this, so to | 14 # The dartino-agent package must be build before running this, so to |
| 15 # create an image do the following: | 15 # create an image do the following: |
| 16 # | 16 # |
| 17 # $ tools/create_tarball.py | 17 # $ tools/create_tarball.py |
| 18 # $ tools/create_debian_packages.py | 18 # $ tools/create_debian_packages.py |
| 19 # $ tools/raspberry_pi2/raspberry-pi2/prepare-image.sh <version> | 19 # $ tools/raspberry_pi2/raspberry-pi2/prepare-image.sh <version> |
| 20 # | 20 # |
| 21 # Some errors are printed while running in the chroot, e.g. | 21 # Some errors are printed while running in the chroot, e.g. |
| 22 # | 22 # |
| 23 # Unsupported setsockopt level=1 optname=34 | 23 # Unsupported setsockopt level=1 optname=34 |
| 24 # sudo: unable to resolve host <your hostname> | 24 # sudo: unable to resolve host <your hostname> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 39 IMAGE_ZIP_FILE=${IMAGE_ROOT_NAME}.zip | 39 IMAGE_ZIP_FILE=${IMAGE_ROOT_NAME}.zip |
| 40 IMAGE_FILE=${IMAGE_ROOT_NAME}.img | 40 IMAGE_FILE=${IMAGE_ROOT_NAME}.img |
| 41 | 41 |
| 42 PI_USER_ID=1000 | 42 PI_USER_ID=1000 |
| 43 PI_GROUP_ID=1000 | 43 PI_GROUP_ID=1000 |
| 44 PI_HOME=/home/pi | 44 PI_HOME=/home/pi |
| 45 | 45 |
| 46 function usage { | 46 function usage { |
| 47 USAGE="Usage: $0 version\n | 47 USAGE="Usage: $0 version\n |
| 48 \n | 48 \n |
| 49 The first mandatory argument speciifies the version of the fletch-agent\n | 49 The first mandatory argument speciifies the version of the dartino-agent\n |
| 50 to install into the image." | 50 to install into the image." |
| 51 | 51 |
| 52 echo -e $USAGE | 52 echo -e $USAGE |
| 53 exit 1 | 53 exit 1 |
| 54 } | 54 } |
| 55 | 55 |
| 56 # Expect exactly one argument, the version. | 56 # Expect exactly one argument, the version. |
| 57 if [ $# -ne 1 ] | 57 if [ $# -ne 1 ] |
| 58 then | 58 then |
| 59 usage | 59 usage |
| 60 fi | 60 fi |
| 61 | 61 |
| 62 VERSION=$1 | 62 VERSION=$1 |
| 63 TARBALL_FILE=fletch-${VERSION}.tar.gz | 63 TARBALL_FILE=dartino-${VERSION}.tar.gz |
| 64 DEB_FILE=fletch-agent_${VERSION}-1_armhf.deb | 64 DEB_FILE=dartino-agent_${VERSION}-1_armhf.deb |
| 65 | 65 |
| 66 MOUNT_DIR=out/raspbian | 66 MOUNT_DIR=out/raspbian |
| 67 | 67 |
| 68 # Get and unzip the image. | 68 # Get and unzip the image. |
| 69 echo "Downloading image ZIP file" | 69 echo "Downloading image ZIP file" |
| 70 download_from_google_storage.py -c -b dart-dependencies-fletch \ | 70 download_from_google_storage.py -c -b dart-dependencies-fletch \ |
| 71 -o out/${IMAGE_ZIP_FILE} -s tools/raspberry-pi2/${IMAGE_SHA_FILE} | 71 -o out/${IMAGE_ZIP_FILE} -s tools/raspberry-pi2/${IMAGE_SHA_FILE} |
| 72 echo "Unzipping image file" | 72 echo "Unzipping image file" |
| 73 unzip -q -o -d out out/$IMAGE_ZIP_FILE | 73 unzip -q -o -d out out/$IMAGE_ZIP_FILE |
| 74 | 74 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 86 sudo cp out/$TARBALL_FILE $MOUNT_DIR/$PI_HOME | 86 sudo cp out/$TARBALL_FILE $MOUNT_DIR/$PI_HOME |
| 87 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/$PI_HOME/$TARBALL_FILE | 87 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/$PI_HOME/$TARBALL_FILE |
| 88 | 88 |
| 89 # Copy the QEMU user emulation binary the the chroot. | 89 # Copy the QEMU user emulation binary the the chroot. |
| 90 sudo cp /usr/bin/qemu-arm-static $MOUNT_DIR/usr/bin | 90 sudo cp /usr/bin/qemu-arm-static $MOUNT_DIR/usr/bin |
| 91 | 91 |
| 92 # Put /etc/ld.so.preload away. It links in code which does not run | 92 # Put /etc/ld.so.preload away. It links in code which does not run |
| 93 # through qemu-arm-static. | 93 # through qemu-arm-static. |
| 94 sudo mv $MOUNT_DIR/etc/ld.so.preload $MOUNT_DIR/tmp | 94 sudo mv $MOUNT_DIR/etc/ld.so.preload $MOUNT_DIR/tmp |
| 95 | 95 |
| 96 # Copy the fletch-agent .deb file to the chroot. | 96 # Copy the dartino-agent .deb file to the chroot. |
| 97 cp out/$DEB_FILE $MOUNT_DIR/tmp | 97 cp out/$DEB_FILE $MOUNT_DIR/tmp |
| 98 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/$DEB_FILE | 98 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/$DEB_FILE |
| 99 | 99 |
| 100 # Copy the fletch-configuration service script to the chroot. | 100 # Copy the dartino-configuration service script to the chroot. |
| 101 cp tools/raspberry-pi2/raspbian-scripts/fletch-configuration $MOUNT_DIR/tmp | 101 cp tools/raspberry-pi2/raspbian-scripts/dartino-configuration $MOUNT_DIR/tmp |
| 102 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/fletch-configuration | 102 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/dartino-configuration |
| 103 | 103 |
| 104 # Create /usr/sbin/policy-rc.d which return 101 to avoid starting the | 104 # Create /usr/sbin/policy-rc.d which return 101 to avoid starting the |
| 105 # fletch-agent when installing it, see: | 105 # dartino-agent when installing it, see: |
| 106 # https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt | 106 # https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt |
| 107 sudo sh -c 'cat << EOF > $0/usr/sbin/policy-rc.d | 107 sudo sh -c 'cat << EOF > $0/usr/sbin/policy-rc.d |
| 108 #!/bin/sh | 108 #!/bin/sh |
| 109 exit 101 | 109 exit 101 |
| 110 EOF' $MOUNT_DIR | 110 EOF' $MOUNT_DIR |
| 111 sudo chmod u+x $MOUNT_DIR/usr/sbin/policy-rc.d | 111 sudo chmod u+x $MOUNT_DIR/usr/sbin/policy-rc.d |
| 112 | 112 |
| 113 # Create trampoline script for running the initialization as user pi. | 113 # Create trampoline script for running the initialization as user pi. |
| 114 cat << EOF > $MOUNT_DIR/tmp/init_chroot_trampoline.sh | 114 cat << EOF > $MOUNT_DIR/tmp/init_chroot_trampoline.sh |
| 115 #!/bin/sh | 115 #!/bin/sh |
| 116 su -c /tmp/init_chroot.sh pi | 116 su -c /tmp/init_chroot.sh pi |
| 117 EOF | 117 EOF |
| 118 | 118 |
| 119 # Create the initialization script which installs the fletch-agent | 119 # Create the initialization script which installs the dartino-agent |
| 120 # package. | 120 # package. |
| 121 cat << EOF > $MOUNT_DIR/tmp/init_chroot.sh | 121 cat << EOF > $MOUNT_DIR/tmp/init_chroot.sh |
| 122 #!/bin/sh | 122 #!/bin/sh |
| 123 | 123 |
| 124 cd /tmp | 124 cd /tmp |
| 125 | 125 |
| 126 # Install the fletch-agent Debian package. | 126 # Install the dartino-agent Debian package. |
| 127 sudo dpkg -i $DEB_FILE | 127 sudo dpkg -i $DEB_FILE |
| 128 | 128 |
| 129 # Install the fletch-configuration service script. | 129 # Install the dartino-configuration service script. |
| 130 sudo cp /tmp/fletch-configuration /etc/init.d | 130 sudo cp /tmp/dartino-configuration /etc/init.d |
| 131 sudo chown root:root /etc/init.d/fletch-configuration | 131 sudo chown root:root /etc/init.d/dartino-configuration |
| 132 sudo chmod 755 /etc/init.d/fletch-configuration | 132 sudo chmod 755 /etc/init.d/dartino-configuration |
| 133 sudo insserv fletch-configuration | 133 sudo insserv dartino-configuration |
| 134 sudo update-rc.d fletch-configuration enable | 134 sudo update-rc.d dartino-configuration enable |
| 135 | 135 |
| 136 EOF | 136 EOF |
| 137 | 137 |
| 138 chmod u+x $MOUNT_DIR/tmp/init_chroot_trampoline.sh | 138 chmod u+x $MOUNT_DIR/tmp/init_chroot_trampoline.sh |
| 139 sudo chown 0:0 $MOUNT_DIR/tmp/init_chroot_trampoline.sh | 139 sudo chown 0:0 $MOUNT_DIR/tmp/init_chroot_trampoline.sh |
| 140 | 140 |
| 141 chmod u+x $MOUNT_DIR/tmp/init_chroot.sh | 141 chmod u+x $MOUNT_DIR/tmp/init_chroot.sh |
| 142 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/init_chroot.sh | 142 sudo chown $PI_USER_ID:$PI_GROUP_ID $MOUNT_DIR/tmp/init_chroot.sh |
| 143 | 143 |
| 144 # chroot into the Raspbian image and run the required commands. | 144 # chroot into the Raspbian image and run the required commands. |
| 145 echo "Running chroot" | 145 echo "Running chroot" |
| 146 sudo chroot $MOUNT_DIR /bin/sh /tmp/init_chroot_trampoline.sh | 146 sudo chroot $MOUNT_DIR /bin/sh /tmp/init_chroot_trampoline.sh |
| 147 | 147 |
| 148 echo "Cleanup" | 148 echo "Cleanup" |
| 149 | 149 |
| 150 # Restore /etc/ld.so.preload | 150 # Restore /etc/ld.so.preload |
| 151 sudo mv $MOUNT_DIR/tmp/ld.so.preload $MOUNT_DIR/etc | 151 sudo mv $MOUNT_DIR/tmp/ld.so.preload $MOUNT_DIR/etc |
| 152 | 152 |
| 153 # Clean up temporary files | 153 # Clean up temporary files |
| 154 sudo rm $MOUNT_DIR/usr/bin/qemu-arm-static | 154 sudo rm $MOUNT_DIR/usr/bin/qemu-arm-static |
| 155 sudo rm $MOUNT_DIR//usr/sbin/policy-rc.d | 155 sudo rm $MOUNT_DIR//usr/sbin/policy-rc.d |
| 156 sudo rm $MOUNT_DIR/tmp/* | 156 sudo rm $MOUNT_DIR/tmp/* |
| 157 | 157 |
| 158 sudo umount $MOUNT_DIR | 158 sudo umount $MOUNT_DIR |
| 159 rmdir $MOUNT_DIR | 159 rmdir $MOUNT_DIR |
| 160 | 160 |
| 161 # Rename and zip the resulting image file. | 161 # Rename and zip the resulting image file. |
| 162 RESULT_IMAGE_ROOT=${IMAGE_ROOT_NAME}-fletch-${VERSION} | 162 RESULT_IMAGE_ROOT=${IMAGE_ROOT_NAME}-dartino-${VERSION} |
| 163 RESULT_IMAGE_FILE=${RESULT_IMAGE_ROOT}.img | 163 RESULT_IMAGE_FILE=${RESULT_IMAGE_ROOT}.img |
| 164 RESULT_IMAGE_ZIP_FILE=${RESULT_IMAGE_ROOT}.zip | 164 RESULT_IMAGE_ZIP_FILE=${RESULT_IMAGE_ROOT}.zip |
| 165 mv out/$IMAGE_FILE out/$RESULT_IMAGE_FILE | 165 mv out/$IMAGE_FILE out/$RESULT_IMAGE_FILE |
| 166 zip --junk-paths out/$RESULT_IMAGE_ZIP_FILE out/$RESULT_IMAGE_FILE | 166 zip --junk-paths out/$RESULT_IMAGE_ZIP_FILE out/$RESULT_IMAGE_FILE |
| OLD | NEW |