[cowdancer] 04/06: qemubuilder.c: Update first-stage script in --update

James Clarke jrtc27-guest at moszumanska.debian.org
Sun May 1 18:33:34 UTC 2016


This is an automated email from the git hooks/post-receive script.

jrtc27-guest pushed a commit to branch master
in repository cowdancer.

commit aeb24e9c3f7d08e446cafd5e1ab190d2aaf739d7
Author: James Clarke <jrtc27 at jrtc27.com>
Date:   Sun May 1 01:15:35 2016 +0100

    qemubuilder.c: Update first-stage script in --update
---
 qemubuilder.c | 112 ++++++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 73 insertions(+), 39 deletions(-)

diff --git a/qemubuilder.c b/qemubuilder.c
index 87cf2fb..99cc0af 100755
--- a/qemubuilder.c
+++ b/qemubuilder.c
@@ -192,32 +192,47 @@ static void fix_terminal(void)
     }
 }
 
+static int copy_file_contents_in_temp(FILE *f,
+				      const char* tempname,
+				      const char* targetdir,
+				      const char* targetname)
+{
+  int trailing_slash = targetdir[strlen(targetdir)-1] == '/';
+  const char* sep = trailing_slash ? "" : "/";
+  fprintf(f,
+	  "echo \"I: copying %s%s%s from temporary location\"\n"
+	  "mkdir -p %s\n"
+	  "cp $PBUILDER_MOUNTPOINT/%s %s%s%s || echo \"E: Copy failed\"\n",
+	  targetdir, sep, targetname,
+	  targetdir,
+	  tempname,
+	  targetdir, sep, targetname);
+  return 0;
+}
+
 static int copy_file_contents_through_temp(FILE* f,
 					   const char* orig,
-					   const char* temppath,
+					   const char* tempdir,
 					   const char* targetdir)
 {
-  char* tempname;
+  char* temppath;
   int ret;
   char* file_basename = basename(orig);
-  asprintf(&tempname, "%s/%s", temppath, file_basename);
-  ret=copy_file(orig, tempname);
+  char* tempname = file_basename;
+  asprintf(&temppath, "%s/%s", tempdir, tempname);
+  ret=copy_file(orig, temppath);
   if (ret == -1)
     {
       fprintf(f, "E: Copy file error in %s to %s\n",
-	      orig, tempname);
+	      orig, temppath);
+      goto out;
     }
 
-  free(tempname);
 
-  fprintf(f,
-	  "echo \"I: copying %s/%s from temporary location\"\n"
-	  "mkdir -p %s\n"
-	  "cp $PBUILDER_MOUNTPOINT/%s %s/%s || echo \"E: Copy failed\"\n",
-	  targetdir, file_basename,
-	  targetdir,
-	  file_basename,
-	  targetdir, file_basename);
+  copy_file_contents_in_temp(f, tempname, targetdir, file_basename);
+
+out:
+  free(temppath);
   return ret;
 }
 
@@ -553,6 +568,31 @@ static char* get_current_time_string(void)
   return timestring;
 }
 
+static void write_first_stage(FILE *f, const struct pbuilderconfig* pc)
+{
+  fprintf(f,
+	  "#!/bin/bash\n"
+	  "echo \n"
+	  "echo ' -> qemu-pbuilder first-stage' \n"
+	  "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'\n"
+	  "mount -n /proc /proc -t proc\n"
+	  "ln -s /dev/shm /run/shm\n"
+	  "mkdir /run/lock\n"
+	  "chmod 01777 /run/lock\n"
+	  "mount -t tmpfs tmpfs /run/lock\n"
+	  "mount -n -o rw,remount / || mount -v -n -o rw,remount /dev/root \n"
+	  "mkdir /dev/shm\n"
+	  "chmod 01777 /dev/shm\n"
+	  "mount -t tmpfs tmpfs /dev/shm\n"
+	  "ln -s /proc/mounts /etc/mtab\n"
+	  "export PBUILDER_MOUNTPOINT=/var/cache/pbuilder/pbuilder-mnt\n"
+	  "mkdir -p $PBUILDER_MOUNTPOINT\n"
+	  "mount -n -t ext3 /dev/%sb $PBUILDER_MOUNTPOINT \n"
+	  "$PBUILDER_MOUNTPOINT/pbuilder-run \n",
+	  qemu_arch_diskdevice(pc)
+	  );
+}
+
 
 /**
  * Invoke qemu, and run the second-stage script within QEMU.
@@ -563,6 +603,8 @@ static int run_second_stage_script
 (
  /** save the result of this command*/
  int save_result,
+ /** update first stage script */
+ int update_first_stage,
  /** the command-line to invoke within QEMU */
  const char* commandline,
  const struct pbuilderconfig* pc,
@@ -636,6 +678,13 @@ static int run_second_stage_script
 
   /* copy files script */
   f = create_script(pc->buildplace, "run-copyfiles");
+  if (update_first_stage)
+    {
+      FILE *g = create_script(pc->buildplace, "pbuilder-run-first-stage");
+      write_first_stage(g, pc);
+      fclose(g);
+      copy_file_contents_in_temp(f, "pbuilder-run-first-stage", "/", "pbuilder-run");
+    }
   copy_file_contents_through_temp(f, "/etc/hosts", pc->buildplace, "/etc");
   copy_file_contents_through_temp(f, "/etc/hostname", pc->buildplace, "/etc");
   /* copy inputfile */
@@ -839,27 +888,7 @@ int cpbuilder_create(const struct pbuilderconfig* pc)
   qemu_create_arch_devices(pc->buildplace, pc->arch);
 
   f = create_script(pc->buildplace, "pbuilder-run");
-  fprintf(f,
-	  "#!/bin/bash\n"
-	  "echo \n"
-	  "echo ' -> qemu-pbuilder first-stage' \n"
-	  "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'\n"
-	  "mount -n /proc /proc -t proc\n"
-	  "ln -s /dev/shm /run/shm\n"
-	  "mkdir /run/lock\n"
-	  "chmod 01777 /run/lock\n"
-	  "mount -t tmpfs tmpfs /run/lock\n"
-	  "mount -n -o rw,remount / || mount -v -n -o rw,remount /dev/root \n"
-	  "mkdir /dev/shm\n"
-	  "chmod 01777 /dev/shm\n"
-	  "mount -t tmpfs tmpfs /dev/shm\n"
-	  "ln -s /proc/mounts /etc/mtab\n"
-	  "export PBUILDER_MOUNTPOINT=/var/cache/pbuilder/pbuilder-mnt\n"
-	  "mkdir -p $PBUILDER_MOUNTPOINT\n"
-	  "mount -n -t ext3 /dev/%sb $PBUILDER_MOUNTPOINT \n"
-	  "$PBUILDER_MOUNTPOINT/pbuilder-run \n",
-	  qemu_arch_diskdevice(pc)
-	  );
+  write_first_stage(f, pc);
   fclose(f);
   f = NULL;
 
@@ -1056,7 +1085,7 @@ int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile)
 	   pc->buildplace, pc->buildresult);
 
   ret=run_second_stage_script
-    (0,
+    (0, 0,
      commandline, pc,
      hoststr,
      hoststr2);
@@ -1071,6 +1100,7 @@ int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile)
 int cpbuilder_login(const struct pbuilderconfig* pc)
 {
   return run_second_stage_script(pc->save_after_login,
+				 0,
 				 EXECUTE_HOOKS("H")
 				 EXECUTE_HOOKS("F")
 				 "bash",
@@ -1096,8 +1126,12 @@ int cpbuilder_execute(const struct pbuilderconfig* pc, char** av)
 	   EXECUTE_HOOKS("H")
 	   EXECUTE_HOOKS("F")
 	   "sh $PBUILDER_MOUNTPOINT/runscript");
-  ret=run_second_stage_script(pc->save_after_login, runcommandline, pc,
-			      hostcommand, NULL);
+  ret=run_second_stage_script(pc->save_after_login,
+			      0,
+			      runcommandline,
+			      pc,
+			      hostcommand,
+			      NULL);
   free(hostcommand);
   free(runcommandline);
   return ret;
@@ -1132,7 +1166,7 @@ int cpbuilder_update(const struct pbuilderconfig* pc)
       return 1;
     }
 
-  return run_second_stage_script(1, script, pc, NULL, NULL);
+  return run_second_stage_script(1, 1, script, pc, NULL, NULL);
 }
 
 int cpbuilder_help(void)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pbuilder/cowdancer.git



More information about the Pbuilder-maint mailing list