]> code.ossystems Code Review - openembedded-core.git/commitdiff
Add insserv
authorRoss Burton <ross@openedhand.com>
Fri, 4 Jul 2008 15:07:33 +0000 (15:07 +0000)
committerRoss Burton <ross@openedhand.com>
Fri, 4 Jul 2008 15:07:33 +0000 (15:07 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4830 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/classes/insserv.bbclass [new file with mode: 0644]
meta/packages/insserv/files/40_segfault_virtprov.dpatch [new file with mode: 0644]
meta/packages/insserv/files/42_loopnochangemsg.dpatch [new file with mode: 0644]
meta/packages/insserv/files/insserv.conf [new file with mode: 0644]
meta/packages/insserv/files/make.patch [new file with mode: 0644]
meta/packages/insserv/insserv-native_1.11.0.bb [new file with mode: 0644]
meta/packages/insserv/insserv_1.11.0.bb [new file with mode: 0644]

diff --git a/meta/classes/insserv.bbclass b/meta/classes/insserv.bbclass
new file mode 100644 (file)
index 0000000..d8e88c7
--- /dev/null
@@ -0,0 +1,5 @@
+do_rootfs[depends] += "insserv-native:do_populate_staging"
+run_insserv () {
+            insserv -p ${IMAGE_ROOTFS}/etc/init.d -c ${STAGING_ETCDIR_NATIVE}/insserv.conf
+}
+ROOTFS_POSTPROCESS_COMMAND += " run_insserv ; "
diff --git a/meta/packages/insserv/files/40_segfault_virtprov.dpatch b/meta/packages/insserv/files/40_segfault_virtprov.dpatch
new file mode 100644 (file)
index 0000000..9b00813
--- /dev/null
@@ -0,0 +1,89 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 40_segfault_virtprov.dpatch by Petter Reinholdtsen
+
+Avoid segfault when an enabled service provide a virtual system
+facility.
+
+@DPATCH@
+--- insserv/insserv.c
++++ insserv/insserv.c  2008-02-01 11:43:45.634618329 +0100
+@@ -166,7 +166,7 @@ typedef struct pwd_struct {
+ static list_t pwd = { &(pwd), &(pwd) }, * topd = &(pwd);
+-static void pushd(const char *const __restrict path);
++static void pushd(const char *const __restrict path) __attribute__((nonnull(1)));
+ static void pushd(const char *const path)
+ {
+     pwd_t *  dir;
+@@ -305,13 +305,13 @@ out:
+     return getserv(ptr);
+ }
+-static serv_t * findserv(const char *const __restrict serv) __attribute__((nonnull(1)));
++static serv_t * findserv(const char *const __restrict serv);
+ static serv_t * findserv(const char *const serv)
+ {
+     list_t * ptr;
+     serv_t * ret = (serv_t*)0;
+-    if (!serv)
++    if (serv == (const char*)0)
+       goto out;
+     list_for_each(ptr, serv_start) {
+@@ -334,6 +334,9 @@ static void rememberreq(serv_t *serv, ui
+     list_t * ptr;
+     uint old = bit;
++    if (!tmp)
++      error("%s", strerror(errno));
++
+     while ((token = strsep(&tmp, delimeter))) {
+       boolean found = false;
+       req_t * this;
+@@ -399,6 +402,9 @@ static void reversereq(const serv_t * se
+     char * rev = strdupa(list);
+     uint old = bit;
++    if (!rev)
++      error("%s", strerror(errno));
++
+     while ((dep = strsep(&rev, delimeter)) && *dep) {
+       serv_t * tmp;
+       list_t * ptr;
+@@ -437,7 +443,7 @@ static void reversereq(const serv_t * se
+ /*
+  * Check required services for name
+  */
+-static boolean chkrequired(const char *const __restrict name) __attribute__((nonnull(1)));
++static boolean chkrequired(const char *const __restrict name);
+ static boolean chkrequired(const char *const name)
+ {
+     serv_t * serv = findserv(name);
+--- insserv/listing.h
++++ insserv/listing.h  2008-02-01 11:40:45.347748072 +0100
+@@ -97,11 +97,11 @@ extern int makeprov(const char *__restri
+ extern void setorder(const char *__restrict script, const int order, boolean recursive) __attribute__((nonnull(1)));
+ extern int getorder(const char *__restrict script) __attribute__((nonnull(1)));
+ extern boolean notincluded(const char *__restrict script, const int runlevel) __attribute__((nonnull(1)));
+-extern boolean foreach(const char **__restrict script, int *__restrict order, const int runlevel) __attribute__((nonnull(1,2)));
+-extern void virtprov(const char *__restrict virt, const char *__restrict real) __attribute__((nonnull(1,2)));
++extern boolean foreach(const char **__restrict script, int *__restrict order, const int runlevel) __attribute__((nonnull(2)));
++extern void virtprov(const char *__restrict virt, const char *__restrict real) __attribute__((nonnull(1)));
+ extern const char * getscript(const char *__restrict prov) __attribute__((nonnull(1)));
+ extern const char * getprovides(const char *__restrict script) __attribute__((nonnull(1)));
+-extern boolean listscripts(const char **__restrict script, const int lvl) __attribute__((nonnull(1)));
++extern boolean listscripts(const char **__restrict script, const int lvl);
+ extern int maxorder;
+ extern boolean is_loop_detected(void);
+@@ -116,7 +116,7 @@ extern int map_has_runlevels(void);
+ extern int map_runlevel_to_lvl (const int runlevel);
+ extern int map_key_to_lvl(const char key);
+-static inline char * xstrdup(const char *__restrict s) __attribute__((always_inline,nonnull(1)));
++static inline char * xstrdup(const char *__restrict s) __attribute__((always_inline));
+ static inline char * xstrdup(const char * s)
+ {
+     char * r;
diff --git a/meta/packages/insserv/files/42_loopnochangemsg.dpatch b/meta/packages/insserv/files/42_loopnochangemsg.dpatch
new file mode 100644 (file)
index 0000000..4a15f58
--- /dev/null
@@ -0,0 +1,20 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 40_loopnochangemsg.dpatch by Petter Reinholdtsen
+
+Make it more obvious that introducing a loop will not change the
+existing boot sequence.  Thanks to Frans Pop for the rationale for
+this change.
+
+@DPATCH@
+
+--- insserv-1.11.0.orig/insserv.c
++++ insserv-1.11.0/insserv.c
+@@ -2647,7 +2647,7 @@
+     follow_all();
+     if (is_loop_detected() && !ignore)
+-      error("exiting now!\n");
++      error("exiting without changing boot order!\n");
+     /*
+      * Re-order some well known scripts to get
diff --git a/meta/packages/insserv/files/insserv.conf b/meta/packages/insserv/files/insserv.conf
new file mode 100644 (file)
index 0000000..4858f85
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# All local filesystems are mounted (done during boot phase)
+#
+$local_fs      mountall
+
+#
+# Low level networking (ethernet card)
+#
+$network       networking +pcmcia +hotplug
+
+#
+# Named is operational
+#
+$named         +named +dnsmasq +lwresd $network
+
+#
+# All remote filesystems are mounted (note in some cases /usr may
+# be remote. Most applications that care will probably require
+# both $local_fs and $remote_fs)
+#
+$remote_fs     $local_fs +mountnfs
+
+#
+# System logger is operational
+#
+$syslog                sysklogd
+
+#
+# SunRPC portmapper available
+#
+$portmap       portmap
+
+#
+# The system time has been set correctly
+#
+$time          hwclock
+
+#
+# Services which need to be interactive
+#
+<interactive>   hostname udev
diff --git a/meta/packages/insserv/files/make.patch b/meta/packages/insserv/files/make.patch
new file mode 100644 (file)
index 0000000..bb3b51a
--- /dev/null
@@ -0,0 +1,58 @@
+=== modified file 'Makefile'
+--- old/Makefile       2008-06-24 14:49:47 +0000
++++ new/Makefile       2008-06-24 15:56:15 +0000
+@@ -7,10 +7,10 @@
+ INITDIR  =    /etc/init.d
+ INSCONF  =    /etc/insserv.conf
+ #DESTDIR =    /tmp/root
+-#DEBUG         =      -DDEBUG=1 -Wpacked
++DEBUG  =      -DDEBUG=1 -Wpacked
+ #LOOPS         =      -DIGNORE_LOOPS=1
+ DEBUG  =
+-ISSUSE         =      -DSUSE
++#ISSUSE        =      -DSUSE
+ DESTDIR        =
+ VERSION        =      1.11.0
+ DATE   =      $(shell date +'%d%b%y' | tr '[:lower:]' '[:upper:]')
+@@ -28,7 +28,9 @@
+         COPTS = -O2
+ endif
+ endif
+-       CFLAGS = -Wall $(COPTS) $(DEBUG) $(LOOPS) -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
++COPTS += -g
++
++       MY_CFLAGS = $(CFLAGS) -Wall $(COPTS) $(DEBUG) $(LOOPS) -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
+                 $(ISSUSE) -DINITDIR=\"$(INITDIR)\" -DINSCONF=\"$(INSCONF)\" -pipe
+         CLOOP = -falign-loops=0
+            CC = gcc
+@@ -58,13 +60,13 @@
+ all: $(TODO)
+ listing.o:    listing.c listing.h .system
+-      $(CC) $(CFLAGS) $(CLOOP) -c $<
++      $(CC) $(MY_CFLAGS) $(CLOOP) -c $<
+ insserv.o:    insserv.c listing.h .system
+-      $(CC) $(CFLAGS) $(CLOOP) -c $<
++      $(CC) $(MY_CFLAGS) $(CLOOP) -c $<
+ insserv:      insserv.o listing.o
+-      $(CC) $(CFLAGS) -Wl,-O,3,--relax -o $@ $^
++      $(CC) $(MY_CFLAGS) -Wl,-O,3,--relax -o $@ $^
+ ifeq ($(ISSUSE),-DSUSE)
+ insserv.8:    insserv.8.in .system
+@@ -86,10 +88,10 @@
+ -include .depend.listing .depend.insserv
+ .depend.listing:
+-      @$(CC) $(CFLAGS) -M listing.c >$@ 2>/dev/null
++      @$(CC) $(MY_CFLAGS) -M listing.c >$@ 2>/dev/null
+ .depend.insserv:
+-      @$(CC) $(CFLAGS) -M insserv.c >$@ 2>/dev/null
++      @$(CC) $(MY_CFLAGS) -M insserv.c >$@ 2>/dev/null
+ install:      $(TODO)
+       $(MKDIR)   $(SBINDIR)
+
diff --git a/meta/packages/insserv/insserv-native_1.11.0.bb b/meta/packages/insserv/insserv-native_1.11.0.bb
new file mode 100644 (file)
index 0000000..f46948b
--- /dev/null
@@ -0,0 +1,17 @@
+LICENSE = "GPL"
+SECTION = "base"
+
+SRC_URI = "ftp://ftp.suse.com/pub/projects/init/insserv-${PV}.tar.gz \
+        file://40_segfault_virtprov.dpatch;patch=1 \
+        file://42_loopnochangemsg.dpatch;patch=1 \
+        file://make.patch;patch=1 \
+        file://insserv.conf"
+
+S = "${WORKDIR}/insserv-${PV}"
+
+inherit native
+
+do_stage () {
+       oe_runmake 'DESTDIR=${STAGING_DIR_NATIVE}' install
+        install -m0644 ${WORKDIR}/insserv.conf ${STAGING_ETCDIR_NATIVE}/insserv.conf
+}
diff --git a/meta/packages/insserv/insserv_1.11.0.bb b/meta/packages/insserv/insserv_1.11.0.bb
new file mode 100644 (file)
index 0000000..e567401
--- /dev/null
@@ -0,0 +1,13 @@
+LICENSE = "GPL"
+SECTION = "base"
+
+SRC_URI = "ftp://ftp.suse.com/pub/projects/init/${PN}-${PV}.tar.gz \
+        file://40_segfault_virtprov.dpatch;patch=1 \
+        file://42_loopnochangemsg.dpatch;patch=1 \
+        file://make.patch;patch=1 \
+        file://insserv.conf"
+
+do_install () {
+       oe_runmake 'DESTDIR=${D}' install
+        install -m0644 ${WORKDIR}/insserv.conf ${D}${sysconfdir}/insserv.conf
+}