From 285ac1c2138ad1c192f9cf1e32e12682ca81fff4 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Fri, 4 Jul 2008 15:07:33 +0000 Subject: Add insserv git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4830 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- meta/classes/insserv.bbclass | 5 ++ .../insserv/files/40_segfault_virtprov.dpatch | 89 ++++++++++++++++++++++ .../insserv/files/42_loopnochangemsg.dpatch | 20 +++++ meta/packages/insserv/files/insserv.conf | 41 ++++++++++ meta/packages/insserv/files/make.patch | 58 ++++++++++++++ meta/packages/insserv/insserv-native_1.11.0.bb | 17 +++++ meta/packages/insserv/insserv_1.11.0.bb | 13 ++++ 7 files changed, 243 insertions(+) create mode 100644 meta/classes/insserv.bbclass create mode 100644 meta/packages/insserv/files/40_segfault_virtprov.dpatch create mode 100644 meta/packages/insserv/files/42_loopnochangemsg.dpatch create mode 100644 meta/packages/insserv/files/insserv.conf create mode 100644 meta/packages/insserv/files/make.patch create mode 100644 meta/packages/insserv/insserv-native_1.11.0.bb create mode 100644 meta/packages/insserv/insserv_1.11.0.bb diff --git a/meta/classes/insserv.bbclass b/meta/classes/insserv.bbclass new file mode 100644 index 000000000..d8e88c70f --- /dev/null +++ b/meta/classes/insserv.bbclass @@ -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 index 000000000..9b0081307 --- /dev/null +++ b/meta/packages/insserv/files/40_segfault_virtprov.dpatch @@ -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 index 000000000..4a15f5831 --- /dev/null +++ b/meta/packages/insserv/files/42_loopnochangemsg.dpatch @@ -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 index 000000000..4858f85b6 --- /dev/null +++ b/meta/packages/insserv/files/insserv.conf @@ -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 +# + hostname udev diff --git a/meta/packages/insserv/files/make.patch b/meta/packages/insserv/files/make.patch new file mode 100644 index 000000000..bb3b51a8c --- /dev/null +++ b/meta/packages/insserv/files/make.patch @@ -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 index 000000000..f46948bb3 --- /dev/null +++ b/meta/packages/insserv/insserv-native_1.11.0.bb @@ -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 index 000000000..e567401f3 --- /dev/null +++ b/meta/packages/insserv/insserv_1.11.0.bb @@ -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 +} -- cgit v1.2.3