From 2cd8ac38757a2cc89c7fc1aa93128d1ec4b7256c Mon Sep 17 00:00:00 2001 From: Matt Lawrence Date: Mon, 7 Jan 2019 16:34:42 -0500 Subject: [PATCH] BUILD: Housekeeping, add artoo bulild, directory moves/names, new build opts - Changed build directory to /solo-build since it isn't alt anymore. - Move 3dr-yocto-bsp-base into solo-builder directory - Remove unused files and directories from solo-builder - Added building artoo STM32 FW to build - Updated command line options for nuke and scripted - Removed debug outputs --- .../3dr-yocto-bsp-base}/README.md | 0 .../3dr-yocto-bsp-base}/SOURCE | 0 .../3dr-yocto-bsp-base}/conf/bblayers.conf | 0 .../3dr-yocto-bsp-base}/setup-environment | 2 +- solo-builder/build_artoo.sh | 13 ++ solo-builder/builder.sh | 197 ++++++++++++------ solo-builder/gtk-doc-stub_git.bb | 22 ++ solo-builder/repo/build.sh | 13 -- solo-builder/repo/packages | 9 - solo-builder/source_sync.sh | 111 ++++------ solo-builder/tools/auto_compile.py | 187 ----------------- 11 files changed, 212 insertions(+), 342 deletions(-) rename {3dr-yocto-bsp-base => solo-builder/3dr-yocto-bsp-base}/README.md (100%) rename {3dr-yocto-bsp-base => solo-builder/3dr-yocto-bsp-base}/SOURCE (100%) rename {3dr-yocto-bsp-base => solo-builder/3dr-yocto-bsp-base}/conf/bblayers.conf (100%) rename {3dr-yocto-bsp-base => solo-builder/3dr-yocto-bsp-base}/setup-environment (99%) create mode 100755 solo-builder/build_artoo.sh create mode 100644 solo-builder/gtk-doc-stub_git.bb delete mode 100644 solo-builder/repo/build.sh delete mode 100644 solo-builder/repo/packages delete mode 100755 solo-builder/tools/auto_compile.py diff --git a/3dr-yocto-bsp-base/README.md b/solo-builder/3dr-yocto-bsp-base/README.md similarity index 100% rename from 3dr-yocto-bsp-base/README.md rename to solo-builder/3dr-yocto-bsp-base/README.md diff --git a/3dr-yocto-bsp-base/SOURCE b/solo-builder/3dr-yocto-bsp-base/SOURCE similarity index 100% rename from 3dr-yocto-bsp-base/SOURCE rename to solo-builder/3dr-yocto-bsp-base/SOURCE diff --git a/3dr-yocto-bsp-base/conf/bblayers.conf b/solo-builder/3dr-yocto-bsp-base/conf/bblayers.conf similarity index 100% rename from 3dr-yocto-bsp-base/conf/bblayers.conf rename to solo-builder/3dr-yocto-bsp-base/conf/bblayers.conf diff --git a/3dr-yocto-bsp-base/setup-environment b/solo-builder/3dr-yocto-bsp-base/setup-environment similarity index 99% rename from 3dr-yocto-bsp-base/setup-environment rename to solo-builder/3dr-yocto-bsp-base/setup-environment index 33c4e12..3855b89 100755 --- a/3dr-yocto-bsp-base/setup-environment +++ b/solo-builder/3dr-yocto-bsp-base/setup-environment @@ -127,7 +127,7 @@ done if [ "$updated" = "true" ]; then echo "\nACTION REQUIRED: The project root content has been updated. Please run $0 again." - exit 1 + return 2 fi cd $OEROOT diff --git a/solo-builder/build_artoo.sh b/solo-builder/build_artoo.sh new file mode 100755 index 0000000..bc45895 --- /dev/null +++ b/solo-builder/build_artoo.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + + +rm -rf /vagrant/artoo/artoo.bin +cd /vagrant/artoo +tup +if [ ! $? -eq 0 ]; then + exit 1 +fi + +# Copy new Artoo STM32 FW to Artoo FW Bitbake recipe +cp /vagrant/artoo/artoo.bin /vagrant/meta-3dr/recipes-firmware/artoo/files diff --git a/solo-builder/builder.sh b/solo-builder/builder.sh index 3d0af1f..d7fbddd 100755 --- a/solo-builder/builder.sh +++ b/solo-builder/builder.sh @@ -1,79 +1,108 @@ #!/bin/bash -# USAGE: builder.sh -a GIT_ACCOUNT -r GIT_REPO -b GIT_BRANCH -b BUILD_MACHINE +# USAGE: builder.sh -a -m -c -n +# "-a true" will build the Artoo STM32 firmware, and copy the artoo.bin file into the build. Default is true if not specified. +# "-m solo" will build only the copter's IMX +# "-m controller" will build only the controller's IMX +# "-m both" will build both the copter and controller IMX. Default is both if not specified. +# "-c true" will clean the build recipies prior to beginning the build. Default is false if not specified. +# "-n true" nuclear option will delete the entire build directory to start from a totally clean slate. Default is false if not specified. -# EXAMPLE: builder.sh -a OpenSolo -r 3dr-arm-yocto-bsp -b Master -# These are also the defaults that will be used if options are not specified - -# EXAMPLE: builder.sh -a Pedals2Paddles -r 3dr-arm-yocto-bsp -b v0.1.0 -# This will use Matt's fork with a branch named v0.1.0 -# TIP: if the GIT_BRANCH starts with tags/, then it's actually a git tag that's used, if not it's a branch # Defaults if options are not set from command line set -GIT_ACCOUNT=OpenSolo -GIT_REPO=3dr-arm-yocto-bsp -GIT_BRANCH=master -BUILD_MACHINE=both -CLEAN= +MACHINE_BUILD='both' +ARTOO_BUILD=true +CLEAN_BUILD=false +NUKE_BUILD=false +SCRIPT_MODE=false # Check command line options for git account, repo, and branch. -while getopts a:r:b:m:c: option +while getopts a:m:c:n:s: option do case ${option} in - a) GIT_ACCOUNT=${OPTARG};; - r) GIT_REPO=${OPTARG};; - b) GIT_BRANCH=${OPTARG};; - m) BUILD_MACHINE=$${OPTARG};; - c) CLEAN=${OPTARG};; + a) ARTOO_BUILD=${OPTARG};; + m) MACHINE_BUILD=${OPTARG};; + c) CLEAN_BUiLD=${OPTARG};; + n) NUKE_BUILD=${OPTARG};; + s) SCRIPT_MODE=${OPTARG};; esac done +## If nuke arg true, delete the build directory to start from a clean slate +if $NUKE_BUILD; then + if ! $SCRIPT_MODE; then + echo + read -p "Wipe build directory to star over from a clean slate? (y/n):" choice + echo + case "$choice" in + y|Y ) ;; + n|N ) echo "Aborting..." && exit 1;; + * ) echo "Invalid response. Quit pushing my buttons. Aborting..." && exit 1;; + esac + echo + fi + echo "Deleting entire build directory. Please wait.." + echo + sudo rm -rf /solo-build + echo + echo "Build directory nuked." +fi + # Prompt for what is about to execute -echo -echo -echo "Ready to initialize the "$GIT_ACCOUNT $GIT_REPO" repo using branch "$GIT_BRANCH -echo -read -p "This is your last chance to say no. Proceed with build? (y/n):" choice -echo -case "$choice" in - y|Y ) echo "Yes! Proceeding with build.";; - n|N ) echo "No? Fine. Aborting build.." && exit 1;; - * ) echo "Invalid response. Quit pushing my buttons. Aborting build." && exit 1;; -esac -echo -#Do it. -/vagrant/solo-builder/source_sync.sh $GIT_BRANCH 2>&1 -echo "sync done" +if ! $SCRIPT_MODE; then + echo + read -p "Proceed with build? (y/n):" choice + echo + case "$choice" in + y|Y ) echo "Yes! Proceeding with build.";; + n|N ) echo "No? Fine. Aborting build.." && exit 1;; + * ) echo "Invalid response. Quit pushing my buttons. Aborting build." && exit 1;; + esac + echo +fi -cd /solo-build-alt - -if [ ! $? -eq 0 ] -then +## Run source_sync.sh script to pull in build sources +/vagrant/solo-builder/source_sync.sh +if [ ! $? -eq 0 ]; then exit 1 fi +## Switch to build directory +cd /solo-build + + export MACHINE=imx6solo-3dr-1080p EULA=1 source ./setup-environment build - -if [ ! $? -eq 0 ] -then +export_return=$? +if [ $export_return -eq 0 ]; then + echo "Build environment ready" +elif [ $export_return -eq 2 ]; then + # Automatic restart as required + echo "Restarting setup environment" + export MACHINE=imx6solo-3dr-1080p + EULA=1 source ./setup-environment build + if [ ! $? -eq 0 ]; then + echo "Machine export error." + exit 1 + fi +else + echo "Machine export error." exit 1 fi #TIP: how to build just one bit, such as the pixhawk firmware from OpenSolo/meta-3dr/recipes-firmware/pixhawk/pixhawk-firmware_1.3.1.bb : -#assuming you've run the 'export MACHINE...' and 'source ./setup...' commands first, and are in /solo-build-alt/build/ folder as a result: +#assuming you've run the 'export MACHINE...' and 'source ./setup...' commands first, and are in /solo-build/build/ folder as a result: #bitbake -c clean pixhawk-firmware #bitbake pixhawk-firmware #or verbose: #bitbake pixhawk-firmware -v #TIP: -k means continue-after-error-for-as-much-as-possible - -if [ $CLEAN = clean ] -then +## If -c = true, run the recipe clean commands on everything +if $CLEAN_BUILD; then # these clean command/s are very verbose, and return an error code even though the clean works, lets quieten them: echo "solo clean started..." MACHINE=imx6solo-3dr-1080p bitbake world -c cleansstate -f -k 2>&1 > /dev/null @@ -83,40 +112,76 @@ then MACHINE=imx6solo-3dr-artoo bitbake world -c cleansstate -f -k 2>&1 > /dev/null echo "...controller clean finished" fi - - -MACHINE=imx6solo-3dr-1080p bitbake 3dr-solo -if [ ! $? -eq 0 ] -then - exit 1 + +# clean the solo specific recipies, even with -c true to ensure local changes are picked up +if ! $CLEAN_BUILD; then + MACHINE=imx6solo-3dr-1080p bitbake -c clean -f -k sololink shotmanager sololink-python pymavlink mavproxy cubeBlack-solo gimbal-firmware 2>&1 > /dev/null + if [ ! $? -eq 0 ]; then + exit 1 + fi + + MACHINE=imx6solo-3dr-artoo bitbake -c clean -f -k sololink sololink-python pymavlink mavproxy artoo-firmware stm32loader 2>&1 > /dev/null + if [ ! $? -eq 0 ]; then + exit 1 + fi fi -MACHINE=imx6solo-3dr-artoo bitbake 3dr-controller -if [ ! $? -eq 0 ] -then - exit 1 +## if -a arg is true, build the Artoo STM32 firmware and copy artoo.bin to the build. +if $ARTOO_BUILD; then + /vagrant/solo-builder/build_artoo.sh + if [ ! $? -eq 0 ] + then + exit 1 + fi fi -#TIPS: + +## if -m arg is solo or both, build the Solo's IMX +if [ $MACHINE_BUILD = 'solo' ] || [ $MACHINE_BUILD = 'both' ]; then + MACHINE=imx6solo-3dr-1080p bitbake 3dr-solo + if [ ! $? -eq 0 ]; then + exit 1 + fi +fi + + +## if -m arg is controller or both, build the Controller's IMX +if [ $MACHINE_BUILD = 'controller' ] || [ $MACHINE_BUILD = 'both' ]; then + MACHINE=imx6solo-3dr-artoo bitbake 3dr-controller + if [ ! $? -eq 0 ] + then + exit 1 + fi +fi + + # Copy the relevant files to a date/time stamped completed directory in the git repo folder for easy access (on git ignore list). # Make an MD5sum of each as is required for the Solo and Controller to accept the files. # The tar.gz and the .md5 go directly in the /log/updates/ directory on the solo and/or controller. -COMP="completed_$(date +%F_%H-%M)" -NEW_DIR=/vagrant/solo-builder/binaries/$COMP +# Also copies the artoo.bin STM32 FW file used in the build. +COMP_DATE="$(date +%F_%H-%M)" +COMP_DIR="completed_$(date +%F_%H-%M)" +NEW_DIR=/vagrant/solo-builder/binaries/$COMP_DIR echo $COMP > /tmp/COMP.txt mkdir -p $NEW_DIR cd $NEW_DIR -cp /solo-build-alt/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/3dr-solo.tar.gz $NEW_DIR -md5sum 3dr-solo.tar.gz > 3dr-solo.tar.gz.md5 +if [ $MACHINE_BUILD = 'solo' ] || [ $MACHINE_BUILD = 'both' ]; then + cp /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/3dr-solo.tar.gz $NEW_DIR + md5sum 3dr-solo.tar.gz > 3dr-solo.tar.gz.md5 +fi -cp /solo-build-alt/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/3dr-controller.tar.gz $NEW_DIR -md5sum 3dr-controller.tar.gz > 3dr-controller.tar.gz.md5 - -ls -lh $NEW_DIR +if [ $MACHINE_BUILD = 'controller' ] || [ $MACHINE_BUILD = 'both' ]; then + cp /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/3dr-controller.tar.gz $NEW_DIR + md5sum 3dr-controller.tar.gz > 3dr-controller.tar.gz.md5 + cp /vagrant/meta-3dr/recipes-firmware/artoo/files/artoo.bin "$NEW_DIR/artoo_$COMP_DATE.bin" +fi echo -echo "All build files located in below directories of the Vagrant virtual machine (squashfs, uImage, kernel, u-boot, dtb file, initramfs, rootfs.cpio, etc)" -echo /solo-build-alt/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/ -echo /solo-build-alt/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/ +echo "All completed files located in below directories of the Vagrant virtual machine (squashfs, uImage, kernel, u-boot, dtb file, initramfs, rootfs.cpio, etc)" +echo /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/ +echo /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/ +echo +echo "Completed binaries have been copied to the /solo-builder/binaries/ directory:" +ls -lh $NEW_DIR diff --git a/solo-builder/gtk-doc-stub_git.bb b/solo-builder/gtk-doc-stub_git.bb new file mode 100644 index 0000000..42d30f0 --- /dev/null +++ b/solo-builder/gtk-doc-stub_git.bb @@ -0,0 +1,22 @@ +SUMMARY = "Stub implementation of gtk-doc" +DESCRIPTION = "Stub implementation of gtk-doc, as we don't want to build the API documentation" +SECTION = "x11/base" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" + +PROVIDES = "gtk-doc gobject-introspection-stub" + +#SRCREV = "3dfd0a09de696ec8c544762747f8a0f77153622e" +SRCREV = "${AUTOREV}" +PV = "0.0+git${SRCPV}" +PR = "r0" + +SRC_URI = "git://gitlab.gnome.org/GNOME/gtk-doc-stub;protocol=https" + +S = "${WORKDIR}/git" + +inherit autotools + +FILES_${PN} += "${datadir}" + +BBCLASSEXTEND = "native" diff --git a/solo-builder/repo/build.sh b/solo-builder/repo/build.sh deleted file mode 100644 index 039d8c9..0000000 --- a/solo-builder/repo/build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -cd $(dirname $0) - -set -e -rm -rf static -mkdir -p static -while read -r p && [[ "$p" != '' ]]; do - cp ../build/tmp-eglibc/deploy/rpm/$p static/ -done &1 | grep -v 'fatal' -cd sources/poky +mkdir -p $source_dir/poky +git clone git://git.yoctoproject.org/poky $source_dir/poky 2>&1 | grep -v 'fatal' +cd $source_dir/poky git fetch -git checkout bee7e3756adf70edaeabe9d43166707aab84f581 2>&1 -cd ../.. +git checkout bee7e3756adf70edaeabe9d43166707aab84f581 + +## This BB file has a bad source URI, but it isn't our file to fix. +cp -f /vagrant/solo-builder/gtk-doc-stub_git.bb $source_dir/poky/meta/recipes-gnome/gtk-doc-stub/gtk-doc-stub_git.bb echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-fsl-arm -git clone git://git.yoctoproject.org/meta-fsl-arm sources/meta-fsl-arm 2>&1 | grep -v 'fatal' -cd sources/meta-fsl-arm +mkdir -p $source_dir/meta-fsl-arm +git clone git://git.yoctoproject.org/meta-fsl-arm $source_dir/meta-fsl-arm 2>&1 | grep -v 'fatal' +cd $source_dir/meta-fsl-arm git fetch -git checkout af392c22bf6b563525ede4a81b6755ff1dd2c1c6 2>&1 -cd ../.. +git checkout af392c22bf6b563525ede4a81b6755ff1dd2c1c6 echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-openembedded -git clone git://git.openembedded.org/meta-openembedded sources/meta-openembedded 2>&1 | grep -v 'fatal' -cd sources/meta-openembedded +mkdir -p $source_dir/meta-openembedded +git clone git://git.openembedded.org/meta-openembedded $source_dir/meta-openembedded 2>&1 | grep -v 'fatal' +cd $source_dir/meta-openembedded git fetch -git checkout eb4563b83be0a57ede4269ab19688af6baa62cd2 2>&1 -cd ../.. +git checkout eb4563b83be0a57ede4269ab19688af6baa62cd2 echo "----------------------------------------------------------------------------" -mkdir -p sources/base -rsync -r /vagrant/3dr-yocto-bsp-base/ sources/base --delete -# mkdir -p sources/base -# git clone git://github.com/OpenSolo/3dr-yocto-bsp-base sources/base 2>&1 | grep -v 'fatal' -# cd sources/base -# git fetch -# echo git checkout $name 2>&1 -# git checkout $name 2>&1 -# cd ../.. -cp sources/base/README.md . -cp sources/base/setup-environment . +mkdir -p $source_dir/base +rsync -r /vagrant/solo-builder/3dr-yocto-bsp-base/ $source_dir/base --delete +cp $source_dir/base/README.md $build_dir +cp $source_dir/base/setup-environment $build_dir echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-3dr -rsync -r /vagrant/meta-3dr/ sources/meta-3dr --delete -# mkdir -p sources/meta-3dr -# git clone git://github.com/OpenSolo/meta-3dr sources/meta-3dr 2>&1 | grep -v 'fatal' -# cd sources/meta-3dr -# git fetch -# echo git checkout $name 2>&1 -# git checkout $name 2>&1 -# git pull origin +mkdir -p $source_dir/meta-3dr +rsync -r /vagrant/meta-3dr/ $source_dir/meta-3dr --delete echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-fsl-arm-extra -git clone git://github.com/Freescale/meta-fsl-arm-extra sources/meta-fsl-arm-extra 2>&1 | grep -v 'fatal' -cd sources/meta-fsl-arm-extra +mkdir -p $source_dir/meta-fsl-arm-extra +git clone git://github.com/Freescale/meta-fsl-arm-extra $source_dir/meta-fsl-arm-extra 2>&1 | grep -v 'fatal' +cd $source_dir/meta-fsl-arm-extra git fetch -git checkout 07ad83db0fb67c5023bd627a61efb7f474c52622 2>&1 -cd ../.. +git checkout 07ad83db0fb67c5023bd627a61efb7f474c52622 echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-fsl-demos -git clone git://github.com/Freescale/meta-fsl-demos sources/meta-fsl-demos 2>&1 | grep -v 'fatal' -cd sources/meta-fsl-demos +mkdir -p $source_dir/meta-fsl-demos +git clone git://github.com/Freescale/meta-fsl-demos $source_dir/meta-fsl-demos 2>&1 | grep -v 'fatal' +cd $source_dir/meta-fsl-demos git fetch -git checkout 5a12677ad000a926d23c444266722a778ea228a7 2>&1 -cd ../.. +git checkout 5a12677ad000a926d23c444266722a778ea228a7 echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-browser -git clone git://github.com/OSSystems/meta-browser sources/meta-browser 2>&1 | grep -v 'fatal' -cd sources/meta-browser +mkdir -p $source_dir/meta-browser +git clone git://github.com/OSSystems/meta-browser $source_dir/meta-browser 2>&1 | grep -v 'fatal' +cd $source_dir/meta-browser git fetch -git checkout fc3969f63bda343c38c40a23f746c560c4735f3e 2>&1 -cd ../.. +git checkout fc3969f63bda343c38c40a23f746c560c4735f3e echo "----------------------------------------------------------------------------" -mkdir -p sources/meta-fsl-bsp-release -git clone git://git.freescale.com/imx/meta-fsl-bsp-release sources/meta-fsl-bsp-release 2>&1 | grep -v 'fatal' -cd sources/meta-fsl-bsp-release +mkdir -p $source_dir/meta-fsl-bsp-release +git clone git://git.freescale.com/imx/meta-fsl-bsp-release $source_dir/meta-fsl-bsp-release 2>&1 | grep -v 'fatal' +cd $source_dir/meta-fsl-bsp-release git fetch -git checkout dora_3.10.17-1.0.0_GA 2>&1 -cd ../.. -cp sources/meta-fsl-bsp-release/imx/tools/fsl-setup-release.sh . +git checkout dora_3.10.17-1.0.0_GA +cd $build_dir +cp $source_dir/meta-fsl-bsp-release/imx/tools/fsl-setup-release.sh $build_dir diff --git a/solo-builder/tools/auto_compile.py b/solo-builder/tools/auto_compile.py deleted file mode 100755 index ac30be3..0000000 --- a/solo-builder/tools/auto_compile.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/python - -import sys -import time -import pwd -import subprocess -import os, pwd, grp -import os.path - -def get_username(): - return pwd.getpwuid( os.getuid() )[ 0 ] - -me = get_username() -if ( me != 'root' ) : - print(" must be run as root, sorry, aborting. \n"); - exit(1); - -if os.path.isfile("/vagrant/progress.log"): - print "unable to run, another copy is already runniing, see /vagrant/progress.log"; - exit(1); - -# open logfile: -logfile = "/vagrant/progress.log" -log = open(logfile, "w+") - - -# we display results as-it-happens, but also capture them -def run_command_capture_results(cmd='true', doLog=True): - if doLog: - print >>log, "cmd: "+cmd+"\n" - print "cmd: "+cmd+"\n" - p = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE) - ret = '' - - dobreak = False - doNext = False - while True: - #print p.poll() - - #out = p.stdout.readline() - out = p.stdout.read(1) - # poll() returns None if process is still running, or exit code if it's done - if out == "": - if p.poll() is not None: - #print "OUT BREAK : " + str(p.poll()) - dobreak = True - # otherwise handle the data we got prom the process: - while out != '' and doNext == False: - #if doNext == True: - # out = out + "\n" - # doNext = False - sys.stdout.write(out) - sys.stdout.flush() - if doLog: - log.write(out) - log.flush() - ret += out - out = p.stdout.read(1) - #if out == "\n": - # doNext = True - - #err = p.stderr.readline() - err = p.stderr.read(1) - if err == "": - if p.poll() is not None: - #print "ERR BREAK" + str(p.poll()) - dobreak = True - while err != '' and doNext == False: - #if doNext == True: - # out = out + "\n" - # doNext = False - sys.stdout.write(err) - sys.stdout.flush() - if doLog: - log.write(err) - log.flush() - ret += err - err = p.stderr.read(1) - #if err == "\n": - # doNext = True - - if dobreak == True: - break - return ret - - -def drop_privileges(uid_name='nobody', gid_name='nogroup'): - if os.getuid() != 0: - # We're not root so, like, whatever dude - return - - # Get the uid/gid from the name - running_uid = pwd.getpwnam(uid_name).pw_uid - running_gid = grp.getgrnam(gid_name).gr_gid - - # Remove group privileges - os.setgroups([]) - - # Try setting the new uid/gid - os.setgid(running_gid) - os.setuid(running_uid) - - # Ensure a very conservative umask - old_umask = os.umask(002) - -# tasks potentially needing root: - -print >>log, "fixing perms\n"; -print "fixing perms\n"; -run_command_capture_results("chown -R vagrant /vagrant/.git /vagrant/.gitignore"); -run_command_capture_results("chown -R vagrant /vagrant/*"); - -# now actually do ita: -#print >>log, "dropping privs to 'vagrant'\n"; -drop_privileges('vagrant','vagrant'); - -me = get_username() -if ( me != 'vagrant' ) : - print >>log, "error while trying to drop root and running as vagrant user, aborting. \n"; - exit(1); - - -run_command_capture_results("rm /vagrant/www/latest_run.txt", False); - -#run_command_capture_results("touch /vagrant/www/in-progress.txt", False); -progress = open("/vagrant/www/in-progress.txt",'w+') - - -print >>log, "now running as 'vagrant' user.\nstarting run at:\n"; -print "now running as 'vagrant' user.\nstarting run at:\n"; -run_command_capture_results("date"); - - -print >>log, "chdir /vagrant"; -print "chdir /vagrant"; -os.chdir("/vagrant"); - -run_command_capture_results("git pull"); - -# compare git rev with last-run, if changed, then we run again... -gitrev = run_command_capture_results("git rev-parse --verify HEAD"); -touch = run_command_capture_results("touch /vagrant/gitrev.txt"); -with open('gitrev.txt', 'r+') as f_in: - prev = f_in.read() -f_in.close() -# if they are different, make them the same. -if gitrev != prev: - with open('gitrev.txt', 'w+') as f_out: - f_out.write(gitrev) - f_in.close() -# just let the human know the thing we are currently trying to do, by it's git hash.. -progress.write(gitrev) - -# if no change, then don't re-run -if gitrev == prev: - print >>log, "no change in solo-builder git revision, not re-running. ( to force re-run, delete /vagrant/gitrev.txt file)"; - print "no change in solo-builder git revision, not re-running. ( to force re-run, delete /vagrant/gitrev.txt file)"; - -else: - # run something. - run_command_capture_results("echo \"y\" |/vagrant/builder.sh"); - - print >>log, "finished run at:\n"; - run_command_capture_results("date"); - - print "log closed. \n"; - log.close(); - - print "log relocated. \n"; - - comp = '' - with open('/tmp/COMP.txt', 'r+') as f_in: - comp = f_in.read() - f_in.close() - comp = comp.rstrip() - if comp == '': - print "log relocation aborted,cant find /tmp/COMP.txt"; - - run_command_capture_results("mv /vagrant/progress.log /vagrant/binaries/"+comp+"/latest_run.txt", False); - -# either way, wind up the files and handles: -progress.close() -run_command_capture_results("rm /vagrant/www/latest_run.txt", False); -run_command_capture_results("mv /vagrant/www/in-progress.txt /vagrant/www/latest_run.txt", False); -run_command_capture_results("rm /vagrant/progress.log", False); - -