r4818 - in trunk/src/target/opkg: . libopkg

tick at docs.openmoko.org tick at docs.openmoko.org
Mon Nov 24 08:44:13 CET 2008


Author: tick
Date: 2008-11-24 08:44:12 +0100 (Mon, 24 Nov 2008)
New Revision: 4818

Modified:
   trunk/src/target/opkg/configure.ac
   trunk/src/target/opkg/libopkg/args.c
   trunk/src/target/opkg/libopkg/args.h
   trunk/src/target/opkg/libopkg/opkg_conf.c
   trunk/src/target/opkg/libopkg/opkg_conf.h
   trunk/src/target/opkg/libopkg/pkg.c
Log:
opkg: add a simple way to pass a path environment for pre/post scription execution when in offline mode.

Thanks for Christopher Hall <hsw at openmoko.com>


Modified: trunk/src/target/opkg/configure.ac
===================================================================
--- trunk/src/target/opkg/configure.ac	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/configure.ac	2008-11-24 07:44:12 UTC (rev 4818)
@@ -1,6 +1,10 @@
 # Process this file with autoconf to produce a configure script
 AC_INIT(libopkg/libopkg.c)
-AM_INIT_AUTOMAKE([opkg], [0.1.5])
+
+AC_CONFIG_AUX_DIR([conf])
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([opkg], [0.1.6])
 AM_CONFIG_HEADER(libopkg/config.h)
 
 AC_CANONICAL_HOST

Modified: trunk/src/target/opkg/libopkg/args.c
===================================================================
--- trunk/src/target/opkg/libopkg/args.c	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/libopkg/args.c	2008-11-24 07:44:12 UTC (rev 4818)
@@ -76,6 +76,7 @@
      args->nodeps = ARGS_DEFAULT_NODEPS;
      args->verbosity = ARGS_DEFAULT_VERBOSITY;
      args->offline_root = ARGS_DEFAULT_OFFLINE_ROOT;
+     args->offline_root_path = ARGS_DEFAULT_OFFLINE_ROOT_PATH;
      args->offline_root_pre_script_cmd = ARGS_DEFAULT_OFFLINE_ROOT_PRE_SCRIPT_CMD;
      args->offline_root_post_script_cmd = ARGS_DEFAULT_OFFLINE_ROOT_POST_SCRIPT_CMD;
      args->multiple_providers = 0;
@@ -88,6 +89,7 @@
 void args_deinit(args_t *args)
 {
      free (args->offline_root);
+     free (args->offline_root_path);
      free (args->offline_root_pre_script_cmd);
      free (args->offline_root_post_script_cmd);
 
@@ -138,6 +140,8 @@
 	  {"nodeps", 0, 0, ARGS_OPT_NODEPS},
 	  {"offline", 1, 0, 'o'},
 	  {"offline-root", 1, 0, 'o'},
+	  {"offline-path", 1, 0, 'p'},
+	  {"offline-root-path", 1, 0, 'p'},
 	  {"test", 0, 0, ARGS_OPT_NOACTION},
 	  {"tmp-dir", 1, 0, 't'},
 	  {"verbosity", 2, 0, 'V'},
@@ -146,7 +150,7 @@
      };
 
      while (1) {
-	  c = getopt_long_only(argc, argv, "Ad:f:no:t:vV:", long_options, &option_index);
+	  c = getopt_long_only(argc, argv, "Ad:f:no:p:t:vV:", long_options, &option_index);
 	  if (c == -1)
 	       break;
 
@@ -164,6 +168,9 @@
 	  case 'o':
 	       args->offline_root = strdup (optarg);
 	       break;
+	  case 'p':
+	       args->offline_root_path = strdup (optarg);
+	       break;
 	  case 'n':
 	       args->noaction = 1;
 	       break;
@@ -294,8 +301,10 @@
      printf("				directory name in a pinch).\n");
      printf("\t-o <offline_root>	Use <offline_root> as the root directory for\n");
      printf("\t-offline <offline_root>	offline installation of packages.\n");
-    
-     printf("\tForce Options (use when opkg is too smart for its own good):\n");
+     printf("\t-p <path>		Path to utilities for runing postinst\n");
+     printf("\t-offline-path <path>	script in offline mode.\n");
+
+     printf("\nForce Options (use when opkg is too smart for its own good):\n");
      printf("\t-force-depends		Make dependency checks warnings instead of errors\n");
      printf("\t				Install/remove package in spite of failed dependences\n");
      printf("\t-force-defaults		Use default options for questions asked by opkg.\n");

Modified: trunk/src/target/opkg/libopkg/args.h
===================================================================
--- trunk/src/target/opkg/libopkg/args.h	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/libopkg/args.h	2008-11-24 07:44:12 UTC (rev 4818)
@@ -40,6 +40,7 @@
     int noreadfeedsfile;
     int autoremove;
     char *offline_root;
+    char *offline_root_path;
     char *offline_root_pre_script_cmd;
     char *offline_root_post_script_cmd;
     char *cache;
@@ -58,6 +59,7 @@
 #define ARGS_DEFAULT_FORCE_REMOVAL_OF_DEPENDENT_PACKAGES 0
 #define ARGS_DEFAULT_FORCE_SPACE 0
 #define ARGS_DEFAULT_OFFLINE_ROOT NULL
+#define ARGS_DEFAULT_OFFLINE_ROOT_PATH NULL
 #define ARGS_DEFAULT_OFFLINE_ROOT_PRE_SCRIPT_CMD NULL
 #define ARGS_DEFAULT_OFFLINE_ROOT_POST_SCRIPT_CMD NULL
 #define ARGS_DEFAULT_NOACTION 0

Modified: trunk/src/target/opkg/libopkg/opkg_conf.c
===================================================================
--- trunk/src/target/opkg/libopkg/opkg_conf.c	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/libopkg/opkg_conf.c	2008-11-24 07:44:12 UTC (rev 4818)
@@ -63,6 +63,7 @@
 	  { "noaction", OPKG_OPT_TYPE_INT, &conf->noaction },
 	  { "nodeps", OPKG_OPT_TYPE_BOOL, &conf->nodeps },
 	  { "offline_root", OPKG_OPT_TYPE_STRING, &conf->offline_root },
+	  { "offline_root_path", OPKG_OPT_TYPE_STRING, &conf->offline_root_path },
 	  { "offline_root_post_script_cmd", OPKG_OPT_TYPE_STRING, &conf->offline_root_post_script_cmd },
 	  { "offline_root_pre_script_cmd", OPKG_OPT_TYPE_STRING, &conf->offline_root_pre_script_cmd },
 	  { "proxy_passwd", OPKG_OPT_TYPE_STRING, &conf->proxy_passwd },
@@ -266,6 +267,8 @@
 
      opkg_conf_override_string(&conf->offline_root, 
 			       args->offline_root);
+     opkg_conf_override_string(&conf->offline_root_path, 
+			       args->offline_root_path);
      opkg_conf_override_string(&conf->offline_root_pre_script_cmd, 
 			       args->offline_root_pre_script_cmd);
      opkg_conf_override_string(&conf->offline_root_post_script_cmd, 
@@ -338,6 +341,7 @@
 	            hash_table_deinit(&conf->obs_file_hash);
 
      opkg_conf_free_string(&conf->offline_root);
+     opkg_conf_free_string(&conf->offline_root_path);
      opkg_conf_free_string(&conf->offline_root_pre_script_cmd);
      opkg_conf_free_string(&conf->offline_root_post_script_cmd);
 

Modified: trunk/src/target/opkg/libopkg/opkg_conf.h
===================================================================
--- trunk/src/target/opkg/libopkg/opkg_conf.h	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/libopkg/opkg_conf.h	2008-11-24 07:44:12 UTC (rev 4818)
@@ -65,6 +65,7 @@
      int force_removal_of_essential_packages;
      int nodeps; /* do not follow dependences */
      char *offline_root;
+     char *offline_root_path;
      char *offline_root_pre_script_cmd;
      char *offline_root_post_script_cmd;
      int query_all;

Modified: trunk/src/target/opkg/libopkg/pkg.c
===================================================================
--- trunk/src/target/opkg/libopkg/pkg.c	2008-11-24 00:18:15 UTC (rev 4817)
+++ trunk/src/target/opkg/libopkg/pkg.c	2008-11-24 07:44:12 UTC (rev 4818)
@@ -18,6 +18,7 @@
 #include "includes.h"
 #include <ctype.h>
 #include <string.h>
+#include <stdbool.h>
 #include <errno.h>
 
 #include "pkg.h"
@@ -1494,8 +1495,24 @@
 	scripts when running with offline_root mode and/or a dest other
 	than '/'. I've been playing around with some clever chroot
 	tricks and I might come up with something workable. */
+     /*
+      * Attempt to provide a restricted environment for offline operation
+      * Need the following set as a minimum:
+      * OPKG_OFFLINE_ROOT = absolute path to root dir
+      * D                 = absolute path to root dir (for OE generated postinst)
+      * PATH              = something safe (a restricted set of utilities)
+      */
+
+     bool AllowOfflineMode = false;
      if (conf->offline_root) {
 	  setenv("OPKG_OFFLINE_ROOT", conf->offline_root, 1);
+	  setenv("D", conf->offline_root, 1);
+          if (NULL == conf->offline_root_path || '\0' == conf->offline_root_path[0]) {
+            setenv("PATH", "/dev/null", 1);
+          } else {
+            setenv("PATH", conf->offline_root_path, 1);
+            AllowOfflineMode = true;
+          }
      }
 
      setenv("PKG_ROOT",
@@ -1506,7 +1523,7 @@
 	  return 0;
      }
 
-     if (conf->offline_root) {
+     if (conf->offline_root && !AllowOfflineMode) {
 	  fprintf(stderr, "(offline root mode: not running %s.%s)\n", pkg->name, script);
 	  free(path);
 	  return 0;




More information about the commitlog mailing list