[Libguestfs] [PATCH] customize: firstboot: make sure to run Linux scripts only once

Richard W.M. Jones rjones at redhat.com
Mon Nov 3 21:47:29 UTC 2014


On Mon, Nov 03, 2014 at 09:19:44PM +0100, Pino Toscano wrote:
> If a script does not finish, hangs, etc, it would be executed again at
> the next boot, since the injected firstboot.sh helper removes it only
> after it finished.
> 
> Before executing a script, move it to another internal subdirectory
> (scripts-done) and execute it from there, so it is not run again by
> firstboot.sh.  The downside is that now scripts are executed only once
> at all, so if a script fails it will not be attempted at the next boot.
> 
> Also, remove all the files found in scripts-done, as they have been run
> (or at least attempted) in a previous boot.
> 
> This fixes RHBZ#1159651.
> ---
>  customize/firstboot.ml | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/customize/firstboot.ml b/customize/firstboot.ml
> index 67b9479..89821f3 100644
> --- a/customize/firstboot.ml
> +++ b/customize/firstboot.ml
> @@ -47,6 +47,7 @@ module Linux = struct
>  ### END INIT INFO
>  
>  d=%s/scripts
> +d_done=%s/scripts-done
>  logfile=~root/virt-sysprep-firstboot.log
>  
>  echo \"$0\" \"$@\" 2>&1 | tee $logfile
> @@ -54,16 +55,20 @@ echo \"Scripts dir: $d\" 2>&1 | tee $logfile
>  
>  if test \"$1\" = \"start\"
>  then
> +  mkdir -p $d_done
>    for f in $d/* ; do
>      if test -x \"$f\"
>      then
> +      # move the script to the 'scripts-done' directory, so it is not
> +      # executed again at the next boot
> +      mv $f $d_done
>        echo '=== Running' $f '===' 2>&1 | tee $logfile
> -      $f 2>&1 | tee $logfile
> -      rm -f $f
> +      $d_done/$(basename $f) 2>&1 | tee $logfile
>      fi
>    done
> +  rm -f $d_done/*
>  fi
> -" firstboot_dir
> +" firstboot_dir firstboot_dir
>  
>    let firstboot_service = sprintf "\
>  [Unit]
> -- 
> 1.9.3

This looks like a better approach to me, so ACK.

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v




More information about the Libguestfs mailing list