diff options
author | Guy Sheffer <guysoft@gmail.com> | 2015-03-02 16:36:58 +0300 |
---|---|---|
committer | Guy Sheffer <guysoft@gmail.com> | 2015-03-02 16:36:58 +0300 |
commit | bd870c3a2339d7f8623a524d61e1918e2a5f8593 (patch) | |
tree | d8bf1a510124a674d056ea9b8fb0445864eb4548 | |
parent | c9bc2ebdd3eba589d9203eb3729272c4235efac7 (diff) | |
parent | 7797955900eed9f99bacb298f726e7f32686bf0d (diff) |
Merge variantsandflavors from mrbeam
-rwxr-xr-x | src/build | 27 | ||||
-rwxr-xr-x | src/chroot_script | 59 | ||||
-rwxr-xr-x | src/common.sh | 49 | ||||
-rwxr-xr-x | src/config | 2 | ||||
-rwxr-xr-x | src/octopi | 46 | ||||
-rwxr-xr-x | src/variants/example/chroot_script | 15 | ||||
-rwxr-xr-x | src/variants/example/config | 9 | ||||
-rwxr-xr-x | src/variants/example/config.nightly | 4 | ||||
-rw-r--r-- | src/variants/example/filesystem/root/etc/dhclient.conf | 0 |
9 files changed, 154 insertions, 57 deletions
@@ -1,4 +1,31 @@ #!/usr/bin/env bash + +source ./common.sh + OCTOPI_PATH=$(dirname $(realpath -s $0)) + +BUILD_VARIANT=default +BUILD_FLAVOR=default + +if [ "$#" -gt 0 ]; then + BUILD_VARIANT=$1 +fi +if [ "$#" -gt 1 ]; then + BUILD_FLAVOR=$2 +fi + +if [ $BUILD_VARIANT != 'default' ]; then + export VARIANT_BASE="$OCTOPI_PATH/variants/$BUILD_VARIANT" + [ -d $VARIANT_BASE ] || die "Could not find Variant $BUILD_VARIANT" + if [ $BUILD_FLAVOR == '' ] || [ $BUILD_FLAVOR == 'default' ]; then + FLAVOR_CONFIG=$VARIANT_BASE/config + else + FLAVOR_CONFIG=$VARIANT_BASE/config.$BUILD_FLAVOR + fi + source $FLAVOR_CONFIG || die "Could not find config file $FLAVOR_CONFIG" +fi + +echo -e "--> Building VARIANT $BUILD_VARIANT, FLAVOR $BUILD_FLAVOR" + source $OCTOPI_PATH/config source $OCTOPI_PATH/octopi diff --git a/src/chroot_script b/src/chroot_script index ad807d6..0609764 100755 --- a/src/chroot_script +++ b/src/chroot_script @@ -4,40 +4,9 @@ set -x # Helper script that runs in a Raspbian chroot to create the OctoPI distro # Written by Guy Sheffer <guysoft at gmail dot com> # GPL V3 -fixLd(){ - sed -i 's@/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@\#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@' /etc/ld.so.preload -} - -gitclone(){ -if [ $GIT_REPO_OVERRIDE != "" ] ; then - REPO=$GIT_REPO_OVERRIDE`echo $1 | awk -F '/' '{print $(NF)}'` - sudo -u pi git clone $REPO - sudo -u pi git remote set-url $1 -else - sudo -u pi git clone $1 -fi -} - -unpackHome(){ - shopt -s dotglob - cp -av /filesystem/home/* /home/pi - shopt -u dotglob - chown -hR pi:pi /home/pi -} - -unpackRoot(){ - shopt -s dotglob - cp -av /filesystem/root/* / - shopt -u dotglob -} - -unpackBoot(){ - shopt -s dotglob - cp -av /filesystem/boot/* /boot - shopt -u dotglob -} - -fixLd + +source /common.sh + unpackHome unpackBoot apt-get update @@ -52,12 +21,15 @@ pushd /home/pi #build virtualenv sudo -u pi virtualenv --system-site-packages oprint - #OctoPrint - gitclone https://github.com/foosel/OctoPrint.git - pushd OctoPrint - git checkout $OCTOPRINT_BRANCH - sudo -u pi /home/pi/oprint/bin/python setup.py install - popd + if [ -n $OVERRIDE_OCTOPRINT ] + then + #OctoPrint + gitclone https://github.com/foosel/OctoPrint.git + pushd OctoPrint + git checkout $OCTOPRINT_BRANCH + sudo -u pi /home/pi/oprint/bin/python setup.py install + popd + fi #OctoPiPanel gitclone https://github.com/jonaslorander/OctoPiPanel.git @@ -136,8 +108,8 @@ echo "pi ALL=NOPASSWD: /sbin/service" > /etc/sudoers.d/octoprint-service #reach printer by name sudo apt-get -y --force-yes install avahi-daemon -echo octopi > /etc/hostname -sed -i 's@raspberrypi@octopi@' /etc/hosts +echo "$OVERRIDE_HOSTNAME" > /etc/hostname +sed -i -e "s@raspberrypi@$OVERRIDE_HOSTNAME@g" /etc/hosts # enable raspicam echo "# enable raspicam" >> /boot/config.txt @@ -151,7 +123,4 @@ unpackRoot sudo update-rc.d octoprint defaults 99 #cleanup -fixLd sudo apt-get clean - -sed -i 's@\#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@' /etc/ld.so.preload diff --git a/src/common.sh b/src/common.sh new file mode 100755 index 0000000..b388d76 --- /dev/null +++ b/src/common.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +function die () { + echo >&2 "$@" + exit 1 +} + +function fixLd(){ + sed -i 's@/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@\#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@' etc/ld.so.preload +} + +function restoreLd(){ + sed -i 's@\#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so@' etc/ld.so.preload +} + +function gitclone(){ +if [ $GIT_REPO_OVERRIDE != "" ] ; then + REPO=$GIT_REPO_OVERRIDE`echo $1 | awk -F '/' '{print $(NF)}'` + sudo -u pi git clone $REPO + sudo -u pi git remote set-url $1 +else + sudo -u pi git clone $1 +fi +} + +function unpackHome(){ + shopt -s dotglob + cp -v -r --preserve=mode,timestamps /filesystem/home/* /home/pi + shopt -u dotglob + chown -hR pi:pi /home/pi +} + +function unpackRoot(){ + shopt -s dotglob + cp -v -r --preserve=mode,timestamps /filesystem/root/* / + shopt -u dotglob +} + +function unpackBoot(){ + shopt -s dotglob + cp -v -r --preserve=mode,timestamps /filesystem/boot/* /boot + shopt -u dotglob +} + +function install_fail_on_error_trap() { + set -e + trap 'previous_command=$this_command; this_command=$BASH_COMMAND' DEBUG + trap 'if [ $? -ne 0 ]; then echo -e "\nexit $? due to $previous_command \nBUILD FAILED!"; fi' EXIT +} @@ -14,6 +14,7 @@ fi [ -n "$OCTOPI_WORKSPACE" ] || OCTOPI_WORKSPACE=$SCRIPT_PATH/workspace [ -n "$CHROOT_SCRIPT_PATH" ] || CHROOT_SCRIPT_PATH=$SCRIPT_PATH/chroot_script [ -n "$MOUNT_PATH" ] || MOUNT_PATH=$OCTOPI_WORKSPACE/mount +[ -n "$OVERRIDE_HOSTNAME" ] || OVERRIDE_HOSTNAME=octopi echo "================================================================" echo "Using the following config:" @@ -23,4 +24,5 @@ echo "ZIP_IMG = $ZIP_IMG" echo "OCTOPI_WORKSPACE = $OCTOPI_WORKSPACE" echo "CHROOT_SCRIPT_PATH = $CHROOT_SCRIPT_PATH" echo "MOUNT_PATH = $MOUNT_PATH" +echo "OVERRIDE_HOSTNAME = $OVERRIDE_HOSTNAME" echo "================================================================" @@ -3,11 +3,36 @@ # This script takes a Raspbian image and adds to it octoprint and verions addons # Written by Guy Sheffer <guysoft at gmail dot com> # GPL V3 + +source $SCRIPT_PATH/common.sh +install_fail_on_error_trap + +function execute_chroot_script() { + #move OctoPi filesystem files + cp -vr --preserve=mode,timestamps $1/filesystem . + + #black magic of qemu-arm-static + cp `which qemu-arm-static` usr/bin + + cp $2 chroot_script + chmod 755 chroot_script + cp $SCRIPT_PATH/common.sh common.sh + chmod 755 common.sh + + chroot . usr/bin/qemu-arm-static /bin/bash /chroot_script + + #cleanup + rm chroot_script + rm -rfv filesystem +} + mkdir -p $OCTOPI_WORKSPACE mkdir -p $MOUNT_PATH pushd $OCTOPI_WORKSPACE - rm *.img + if [ -e *.img ]; then + rm *.img + fi unzip $ZIP_IMG IMG_PATH=`ls | grep .img` @@ -19,21 +44,18 @@ pushd $OCTOPI_WORKSPACE pushd $MOUNT_PATH #make QEMU boot (remember to return) + fixLd #sed -i 's@include /etc/ld.so.conf.d/\*.conf@\#include /etc/ld.so.conf.d/\*.conf@' etc/ld.so.conf - #move OctoPi filesystem files - cp -av $SCRIPT_PATH/filesystem . - - #black magic of qemu-arm-static - cp `which qemu-arm-static` usr/bin - cp $CHROOT_SCRIPT_PATH chroot_script - chmod 755 chroot_script + # execute the base chroot script + execute_chroot_script $SCRIPT_PATH $CHROOT_SCRIPT_PATH - chroot . usr/bin/qemu-arm-static /bin/bash /chroot_script + # if building a variant, execute its chroot script + if [ -n $VARIANT_BASE ]; then + execute_chroot_script $VARIANT_BASE $VARIANT_BASE/chroot_script + fi - #cleanup - rm chroot_script - rm -rfv filesystem + restoreLd popd # unmount first boot, then root partition diff --git a/src/variants/example/chroot_script b/src/variants/example/chroot_script new file mode 100755 index 0000000..b05e4e8 --- /dev/null +++ b/src/variants/example/chroot_script @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +source /common.sh + +# exit script on any error +install_fail_on_error_trap + +#change the hostname +sed -i 's@octopi@example@' /etc/hosts + +# install dhclient.conf and possibly other files +unpackRoot + +#cleanup +apt-get clean diff --git a/src/variants/example/config b/src/variants/example/config new file mode 100755 index 0000000..3ce7b42 --- /dev/null +++ b/src/variants/example/config @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# make sure to export all the variables to make them available to the chroot scripts as well + +# customize the hostname +export OVERRIDE_HOSTNAME=blueberrypi + +# skip octoprint installation in main build script +export OVERRIDE_OCTOPRINT=yes diff --git a/src/variants/example/config.nightly b/src/variants/example/config.nightly new file mode 100755 index 0000000..679aae8 --- /dev/null +++ b/src/variants/example/config.nightly @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +export OVERRIDE_HOSTNAME=blueberrypi +export OVERRIDE_OCTOPRINT=no diff --git a/src/variants/example/filesystem/root/etc/dhclient.conf b/src/variants/example/filesystem/root/etc/dhclient.conf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/variants/example/filesystem/root/etc/dhclient.conf |