[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