SF.net SVN: morphix: [2629] trunk/mmaker

[email protected] Tue, 15 Apr 2008 14:55:25 -0700
Newsgroups gmane.linux.morphix.cvs
Message-ID <[email protected]>
Revision: 2629
          http://morphix.svn.sourceforge.net/morphix/?rev=2629&view=rev
Author:   alextreme
Date:     2008-04-15 14:55:24 -0700 (Tue, 15 Apr 2008)

Log Message:
-----------
 * fixed -s option for mmaker, added -s to isomaker (retrieve source packages after a module has been built, for all packages present in a module)

Modified Paths:
--------------
    trunk/mmaker/debian/changelog
    trunk/mmaker/libmorphix/makemodule.c
    trunk/mmaker/libmorphix/makemodule.h
    trunk/mmaker/src/isomaker.c

Modified: trunk/mmaker/debian/changelog
===================================================================
--- trunk/mmaker/debian/changelog	2008-04-15 16:09:46 UTC (rev 2628)
+++ trunk/mmaker/debian/changelog	2008-04-15 21:55:24 UTC (rev 2629)
@@ -1,3 +1,9 @@
+morphix-mmaker (0.4-44) unstable; urgency=low
+
+  * Fixes for -s (source retrieval option), added to isomaker. Confirmed it might actually work this time!
+
+ -- Alex de Landgraaf <[email protected]>  Tue, 15 Apr 2008 18:57:24 +0200
+
 morphix-mmaker (0.4-43) unstable; urgency=low
 
   * Bug fix from Michael Bunk to correctly parse localdeb option.

Modified: trunk/mmaker/libmorphix/makemodule.c
===================================================================
--- trunk/mmaker/libmorphix/makemodule.c	2008-04-15 16:09:46 UTC (rev 2628)
+++ trunk/mmaker/libmorphix/makemodule.c	2008-04-15 21:55:24 UTC (rev 2629)
@@ -875,56 +875,7 @@
 	return TRUE;
 }
 
-/**
-  Compresses the directory using the default cloop compression
 
-  @param dirname gchar*; Directory to compress
-  @param filename gchar *; resulting compressed image
-
-  return TRUE if successful, FALSE and message to stderr if an error occurred
-*/
-
-gboolean compressModuleCloop(gchar *dirname, gchar *filename) {
-	int ret;
-	gchar *cmdline;
-	gchar *tmpisofile;
-	gboolean exists = FALSE;
-	if (!g_file_test(P_CREATE_COMPRESSED_FS,G_FILE_TEST_EXISTS)) {
-		fprintf(stderr,"Error: couldn't locale create_compressed_fs on %s",P_CREATE_COMPRESSED_FS);
-		return FALSE;
-	}
-	tmpisofile = g_strdup_printf("%s/%s",getTempRoot(),"libmorphix-tmpiso-XXXXXX");
-	ret =  mkstemp(tmpisofile);
-	cmdline = g_strdup_printf("%s -R -U -m /proc/* -o %s -hide-rr-moved -cache-inodes -no-bak -pad %s",P_MKISOFS,tmpisofile,dirname);
-	if (ExecuteCommand(cmdline) == TRUE) {
-		g_free(cmdline);
-		// nice -5 create_compressed_fs file.iso 65536 > output.mod
-		cmdline = g_strdup_printf("/bin/sh -c \"%s -5 %s %s 65536 > %s\"",P_NICE,P_CREATE_COMPRESSED_FS,tmpisofile,filename);
-		if (!ExecuteCommand(cmdline)) {
-			fprintf(stderr,"Error: unable to compress temporary iso file: %s\n",tmpisofile);
-		}
-		else {
-			unlink(tmpisofile);
-		}
-		g_free(cmdline);
-	}
-	else {
-		fprintf(stderr,"Error: unable to build temporary iso file from directory %s\n",dirname);
-		g_free(cmdline);
-	}
-	
-	fprintf(stderr,"Info: Compression complete\n");
-	exists = g_file_test(filename,G_FILE_TEST_EXISTS);
-	if (exists == TRUE) {
-		fprintf(stderr,"Info: Compression successful\n");
-	}
-	else {
-		fprintf(stderr,"Info: Compression failed\n");
-	}
-	g_free(tmpisofile);
-	return exists;
-}
-
 /**
    Fires up apt-get, after optionally making debconf non-interactive
    optionally executes depmod afterwards. Uses the module->interactive setting
@@ -960,8 +911,6 @@
 
         installPackages(module,module->dirname);
 
-	deletePackages(module,module->dirname);
-
 	if (extra_package_list != NULL) {
 		GList * ptr = extra_package_list;
 
@@ -997,6 +946,7 @@
 		return FALSE;
 	}
 
+	deletePackages(module,module->dirname);
 	deleteCruft(module->dirname);
 
         if (!cleanApt(module,module->dirname)) {
@@ -1230,6 +1180,12 @@
 
 	gint count = 5; // skip first 5 lines of dpkg -l
 	fprintf(stderr,"Info: In getAptPackageSources\n");
+
+	// Store for future usage, do this regardless of any source being downloaded
+	cmdline = g_strdup_printf("%s %s sh -c \"COLUMNS=160 dpkg -l > /morphix/packages.gz\"",P_CHROOT,module->dirname);
+	ExecuteCommand(cmdline);
+	g_free(cmdline);
+
 	if (sources_location == NULL) { // no sources wanted
 		return TRUE;
 	}
@@ -1248,8 +1204,7 @@
 	    simply isn't enough...
 	*/
 
-	cmdline = g_strdup_printf("%s %s sh -c \"COLUMNS=160 dpkg -l | gzip > /morphix/packages.gz\"",P_CHROOT,module->dirname);
-
+	cmdline = g_strdup_printf("%s %s sh -c \"COLUMNS=160 dpkg -l\"",P_CHROOT,module->dirname);
 	stdinput = ExecuteCommandReturnStdin(cmdline);
 	g_free(cmdline);
 	buf_array = g_strsplit(stdinput,"\n",0);
@@ -1278,8 +1233,7 @@
 	g_free(cmdline);
 
 	cmdline = g_strdup_printf("rm -rf %s/sources", module->dirname);
-	// Enable this after everything works...
-	// ExecuteCommand(cmdline);
+	ExecuteCommand(cmdline);
 	g_free(cmdline);
 
 	return TRUE;

Modified: trunk/mmaker/libmorphix/makemodule.h
===================================================================
--- trunk/mmaker/libmorphix/makemodule.h	2008-04-15 16:09:46 UTC (rev 2628)
+++ trunk/mmaker/libmorphix/makemodule.h	2008-04-15 21:55:24 UTC (rev 2629)
@@ -27,7 +27,6 @@
 gboolean updatePackages(mmodule *module, gchar *dirname);
 gboolean installPackages(mmodule *module, gchar *dirname);
 gboolean cleanApt(mmodule *module, gchar *dirname);
-gboolean compressModuleCloop(gchar *dirname, gchar *filename);
 gboolean executePatches(mmodule *module, gchar *dirname);
 gboolean addRepositories(mmodule *module,gchar *dirname);
 gboolean setupDebootstrap(mmodule *module);

Modified: trunk/mmaker/src/isomaker.c
===================================================================
--- trunk/mmaker/src/isomaker.c	2008-04-15 16:09:46 UTC (rev 2628)
+++ trunk/mmaker/src/isomaker.c	2008-04-15 21:55:24 UTC (rev 2629)
@@ -31,17 +31,18 @@
 #define MAKEISO_PATH "/usr/bin/make-iso"
 
 void usage(gchar *filename) {
-	printf("Usage: %s -b basemod.xml [-g debootstrap.tar.gz] [-t tarball.tar.gz] [-m mainmod.xml] [-m mainmod2.xml] [-n minimod1.xml] [-n minimod2.xml] [-c] [-v] [-r repository [-p package1] [-p package2]] [-R image.png] output.iso\n",filename);
+	printf("Usage: %s -b basemod.xml [-g debootstrap.tar.gz] [-t tarball.tar.gz] [-m mainmod.xml] [-m mainmod2.xml] [-n minimod1.xml] [-n minimod2.xml] [-c] [-v] [-r repository [-p package1] [-p package2]] [-R image.png] [-s /path/to/sources.gz] output.iso\n",filename);
 
 	printf("\t-b:\tBase module template to build output.iso with\n");
+	printf("\t-c:\tClean temporary directories\n");
+	printf("\t-g:\tTarball which contains a complete debootstrapped Debian\n\t\tsystem for building the base module (and any main modules)\n");
 	printf("\t-m:\tMain module template to include in output.iso\n");
 	printf("\t-n:\tMini module template to include in output.iso (needs morphmini)\n");
+	printf("\t-p:\tPackages to be included on iso\n");
 	printf("\t-r:\tSpecify Repository for deb/udeb packages to include on iso\n");
-	printf("\t-p:\tPackages to be included on iso\n");
+	printf("\t-R:\tCall morphix-rebrand on the resulting iso using this image-file\n");
+	printf("\t-s:\tDownload and store all source packages in this tarball\n");
 	printf("\t-t:\tTarball to be included on iso\n");
-	printf("\t-g:\tTarball which contains a complete debootstrapped Debian\n\t\tsystem for building the base module (and any main modules)\n");
-	printf("\t-c:\tClean temporary directories\n");
-	printf("\t-R:\tCall morphix-rebrand on the resulting iso using this image-file\n");
 	printf("\t-v:\tverbose mode\n");
 	printf("\nThis tool uses mmaker to generate a Morphix iso from scratch,\n");
 	printf("using one basemodule template, and arbitrary number of mainmodule and minimodule templates,\nand optionally extra dpkg-deb-extracted deb/udeb packages\n\n");
@@ -79,16 +80,23 @@
 	}
 }
 
-void do_mainmodules(gchar *workdir, GList *mainmodxmllist,gchar *debtarball) {
+void do_mainmodules(gchar *workdir, GList *mainmodxmllist,gchar *debtarball, gchar *source_directory) {
 	gint count = 0;
 	GList *ptr = NULL;
 	gchar *cmdline = NULL;
 	ptr = mainmodxmllist;
 	while (ptr != NULL) {
 	        gchar *xmltemplate = (gchar *)ptr->data;
+		gchar *mmaker_sourcefile = NULL;
 		count++;
-		cmdline = g_strdup_printf("%s -c %s %s %s/mainmod/%s.mod",
+
+		if (source_directory != NULL) {
+		  mmaker_sourcefile = g_strdup_printf(" -s %s/main-%s-%d.tar.gz", source_directory, xmltemplate, count);
+		}
+
+		cmdline = g_strdup_printf("%s %s -c %s %s %s/mainmod/%s.mod",
 					  MMAKER_PATH,
+					  (source_directory ? mmaker_sourcefile : ""),
 					  debtarball,
 					  xmltemplate,
 					  workdir,
@@ -97,6 +105,10 @@
 			printf("Warning: mmaker returned an error when building mainmodule, continuing...\n");
 		}
 		g_free(cmdline);
+		if (mmaker_sourcefile != NULL) {
+		  g_free(mmaker_sourcefile);
+		  mmaker_sourcefile = NULL;
+		}
 		ptr = ptr->next;
 	}
 }
@@ -209,6 +221,10 @@
 	gchar *debtarball = NULL;
 	gchar *morphixrebrand = NULL;
 
+	gchar *retrieve_source = NULL;
+	gchar *source_directory = NULL;
+	gchar *mmaker_sourcefile = NULL;
+
 	GList *mainmodxmllist = NULL;
 	GList *minimodxmllist = NULL;
 	GList *packagelist = NULL;
@@ -225,7 +241,7 @@
 		return(EXIT_FAILURE);
 	}
 	
-	while ((optchar = getopt(argc,argv,"b:m:n:r:g:t:p:R:cv")) != -1) {
+	while ((optchar = getopt(argc,argv,"b:m:n:r:g:s:t:p:R:cv")) != -1) {
 	  switch (optchar) {
 	  case 'b':
 		  // set temporary directory
@@ -276,6 +292,10 @@
 		  opts+=1;
 		  verbose = TRUE;
 		  break;
+	  case 's':
+		  opts+=2;
+		  retrieve_source = (char *) g_strdup(optarg);
+		  break;
 	  case '?':
 		  printf("Error: Unknown command line option...\n");
 		  usage(argv[0]);
@@ -343,6 +363,15 @@
 		use_debget = FALSE;
 	}
 
+	if (retrieve_source != NULL) {
+	  source_directory = getTempdir();
+	  if (source_directory == NULL) {
+	    printf("Error: Unable to create temporary directory in %s for storing the source packages...\n",getTempRoot());
+	    return(EXIT_FAILURE);
+	  }
+	  mmaker_sourcefile = g_strdup_printf(" -s %s/base.tar.gz ", source_directory);
+	}
+
 	/* everything should be okay now, start making that iso */
 
 	/* set up default directories */
@@ -355,9 +384,10 @@
 
 	/* build and add basemodule files */
 
-	cmdline = g_strdup_printf("%s%s -t %s -m %s/boot/miniroot.gz -k %s/boot/vmlinuz %s %s %s/base/morphix",
+	cmdline = g_strdup_printf("%s%s %s -t %s -m %s/boot/miniroot.gz -k %s/boot/vmlinuz %s %s %s/base/morphix",
 				  MMAKER_PATH,
-                  (verbose ? " -v" : ""),
+				  (verbose ? " -v" : ""),
+				  (retrieve_source ? mmaker_sourcefile : ""),
 				  tempdir,
 				  workdir,
 				  workdir,
@@ -372,7 +402,7 @@
 
 	/* build and add mainmodules */
 
-	do_mainmodules(workdir,mainmodxmllist,debtarball);
+	do_mainmodules(workdir,mainmodxmllist,debtarball, source_directory);
 
 	/* build and add minimodules */
 
@@ -415,6 +445,18 @@
 
 	printf("Info: Your live CD should be available as %s\n",outputiso);
 
+	/* Bundle all the source tarballs into a single tarball */
+
+	if (retrieve_source != NULL) {
+	  cmdline = g_strdup_printf("tar zcvf %s %s", retrieve_source,source_directory);
+	  ExecuteCommand(cmdline);
+	  g_free(cmdline);
+
+	  cmdline = g_strdup_printf("rm -rf %s", source_directory);
+	  ExecuteCommand(cmdline);
+	  g_free(cmdline);
+	}
+
 	/* clean everything up... */
 	if(clean){
 	  printf("Info: Cleaning up base module build directory %s\n",tempdir);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone