Message ID | 1444399839-10680-1-git-send-email-rdkehn@yahoo.com |
---|---|
State | Superseded |
Headers | show |
Doug, All, [CCing Maxime, as he knows systemd better than I do] On 2015-10-09 09:10 -0500, Doug Kehn spake thusly: > A daemon which handles passwd, group and host lookups for running programs and > caches the results for the next query. You only need this package if you are > using slow Name Services like LDAP, NIS or NIS+. > > This particular NSCD is a complete rewrite of the GNU glibc nscd which is a > single threaded server process which offloads all NSS lookups to worker > children; cache hits are handled by the parent, and only cache misses start > worker children, making the parent immune to resource leaks, hangs, and crashes > in NSS libraries. > > It should mostly be a drop-in replacement for existing installs using nscd. > > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > Signed-off-by: Doug Kehn <rdkehn@yahoo.com> [--SNIP--] > diff --git a/package/unscd/S46unscd b/package/unscd/S46unscd > new file mode 100644 > index 0000000..387ab32 > --- /dev/null > +++ b/package/unscd/S46unscd > @@ -0,0 +1,24 @@ > +#!/bin/sh > + > +NAME="nscd" > +DAEMON="/usr/sbin/${NAME}" > + > +case "$1" in > +start) > + echo -n "Starting ${NAME}: " We have recently readicated use of 'echo -n' and all other non-POSIX use of echo. Please, use printf instead. [--SNIP--] > diff --git a/package/unscd/unscd.mk b/package/unscd/unscd.mk > new file mode 100644 > index 0000000..e8cccd3 > --- /dev/null > +++ b/package/unscd/unscd.mk > @@ -0,0 +1,55 @@ > +################################################################################ > +# > +# unscd > +# > +################################################################################ > + > +UNSCD_VERSION = 0.51 > +UNSCD_SOURCE = unscd_$(UNSCD_VERSION).orig.tar.gz > +UNSCD_SITE = http://snapshot.debian.org/archive/debian/20150519T094547Z/pool/main/u/unscd > +UNSCD_EXTRA_DOWNLOADS = unscd_$(UNSCD_VERSION)-1.debian.tar.gz > +UNSCD_LICENSE = GPLv2 > +UNSCD_LICENSE_FILES = debian/copyright > + > +define UNSCD_EXTRACT_DEBIAN > + gzip -d -c $(BR2_DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) | tar -C $(@D) -xf - Please use suitable-extractor, like so: $(call suitable-extractor,$(UNSCD_EXTRA_DOWNLOADS)) $(DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) \ |$(TAR) xf -C $(@D) - > +endef > + > +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN > + > +define UNSCD_APPLY_DEBIAN_PATCHES > + for f in `grep -Ev "^#" $(@D)/debian/patches/series 2> /dev/null`; do \ > + cat "$(@D)/debian/patches/$${f}" | patch -g0 -p1 -E -d "$(@D)" -t -N; \ Please use apply-patches, like so: $(APPLY_PATCHES) $(@D) $(@D)/debian > + done > +endef > + > +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES > + > +define UNSCD_BUILD_CMDS > + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ > + $(@D)/nscd.c -o $(@D)/nscd > +endef > + > +define UNSCD_INSTALL_TARGET_CMDS > + $(INSTALL) -m 755 -D $(@D)/nscd $(TARGET_DIR)/usr/sbin/nscd > + $(INSTALL) -m 600 -D $(@D)/debian/nscd.conf $(TARGET_DIR)/etc/nscd.conf > +endef > + > +define UNSCD_INSTALL_INIT_SYSTEMD > + $(INSTALL) -m 755 -D package/unscd/unscd.service \ > + $(TARGET_DIR)/usr/lib/systemd/system/unscd.service > + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants Not that it matters a lot, but I think using $(INSTALL) to create directories should be favoured, like so: $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > + ln -fs ../../../../usr/lib/systemd/system/unscd.service \ > + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/unscd.service > +endef [--SNIP--] > diff --git a/package/unscd/unscd.service b/package/unscd/unscd.service > new file mode 100644 > index 0000000..58dd7eb > --- /dev/null > +++ b/package/unscd/unscd.service > @@ -0,0 +1,11 @@ > +[Unit] > +Description=Micro Name Service Caching Daemon. > +After=syslog.target network.target > + > +[Service] > +Type=forking > +PIDFile=/var/run/nscd/nscd.pid > +ExecStart=/usr/sbin/nscd > + > +[Install] > +WantedBy=multi-user.target Maxime, what's your opinion on this systemd unit? Regards, Yann E. MORIN.
Hello Doug, Yann, all On Sat, Oct 10, 2015 at 4:50 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote: > Doug, All, > > [CCing Maxime, as he knows systemd better than I do] > > On 2015-10-09 09:10 -0500, Doug Kehn spake thusly: > > A daemon which handles passwd, group and host lookups for running > programs and > > caches the results for the next query. You only need this package if you > are > > using slow Name Services like LDAP, NIS or NIS+. > > > > This particular NSCD is a complete rewrite of the GNU glibc nscd which > is a > > single threaded server process which offloads all NSS lookups to worker > > children; cache hits are handled by the parent, and only cache misses > start > > worker children, making the parent immune to resource leaks, hangs, and > crashes > > in NSS libraries. > > > > It should mostly be a drop-in replacement for existing installs using > nscd. > > > > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > > Signed-off-by: Doug Kehn <rdkehn@yahoo.com> > [--SNIP--] > > diff --git a/package/unscd/S46unscd b/package/unscd/S46unscd > > new file mode 100644 > > index 0000000..387ab32 > > --- /dev/null > > +++ b/package/unscd/S46unscd > > @@ -0,0 +1,24 @@ > > +#!/bin/sh > > + > > +NAME="nscd" > > +DAEMON="/usr/sbin/${NAME}" > > + > > +case "$1" in > > +start) > > + echo -n "Starting ${NAME}: " > > We have recently readicated use of 'echo -n' and all other non-POSIX use > of echo. Please, use printf instead. > > [--SNIP--] > > diff --git a/package/unscd/unscd.mk b/package/unscd/unscd.mk > > new file mode 100644 > > index 0000000..e8cccd3 > > --- /dev/null > > +++ b/package/unscd/unscd.mk > > @@ -0,0 +1,55 @@ > > > +################################################################################ > > +# > > +# unscd > > +# > > > +################################################################################ > > + > > +UNSCD_VERSION = 0.51 > > +UNSCD_SOURCE = unscd_$(UNSCD_VERSION).orig.tar.gz > > +UNSCD_SITE = > http://snapshot.debian.org/archive/debian/20150519T094547Z/pool/main/u/unscd > > +UNSCD_EXTRA_DOWNLOADS = unscd_$(UNSCD_VERSION)-1.debian.tar.gz > > +UNSCD_LICENSE = GPLv2 > > +UNSCD_LICENSE_FILES = debian/copyright > > + > > +define UNSCD_EXTRACT_DEBIAN > > + gzip -d -c $(BR2_DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) | tar -C $(@D) > -xf - > > Please use suitable-extractor, like so: > > $(call suitable-extractor,$(UNSCD_EXTRA_DOWNLOADS)) > $(DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) \ > |$(TAR) xf -C $(@D) - > > > +endef > > + > > +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN > > + > > +define UNSCD_APPLY_DEBIAN_PATCHES > > + for f in `grep -Ev "^#" $(@D)/debian/patches/series 2> /dev/null`; > do \ > > + cat "$(@D)/debian/patches/$${f}" | patch -g0 -p1 -E -d > "$(@D)" -t -N; \ > > Please use apply-patches, like so: > > $(APPLY_PATCHES) $(@D) $(@D)/debian > > > + done > > +endef > > + > > +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES > > + > > +define UNSCD_BUILD_CMDS > > + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ > > + $(@D)/nscd.c -o $(@D)/nscd > > +endef > > + > > +define UNSCD_INSTALL_TARGET_CMDS > > + $(INSTALL) -m 755 -D $(@D)/nscd $(TARGET_DIR)/usr/sbin/nscd > > + $(INSTALL) -m 600 -D $(@D)/debian/nscd.conf > $(TARGET_DIR)/etc/nscd.conf > > +endef > > + > > +define UNSCD_INSTALL_INIT_SYSTEMD > > + $(INSTALL) -m 755 -D package/unscd/unscd.service \ > > + $(TARGET_DIR)/usr/lib/systemd/system/unscd.service > > + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > > Not that it matters a lot, but I think using $(INSTALL) to create > directories should be favoured, like so: > > $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > At the moment, I think all the packages that install systemd are using mkdir -p, so I would keep that so it's coherent, as said in another mail, a helper is needed to simplify theses few lines. > > > + ln -fs ../../../../usr/lib/systemd/system/unscd.service \ > > + > $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/unscd.service > > +endef > [--SNIP--] > > diff --git a/package/unscd/unscd.service b/package/unscd/unscd.service > > new file mode 100644 > > index 0000000..58dd7eb > > --- /dev/null > > +++ b/package/unscd/unscd.service > > @@ -0,0 +1,11 @@ > > +[Unit] > > +Description=Micro Name Service Caching Daemon. > > +After=syslog.target network.target > > + > > +[Service] > > +Type=forking > > +PIDFile=/var/run/nscd/nscd.pid > > +ExecStart=/usr/sbin/nscd > > + > > +[Install] > > +WantedBy=multi-user.target > > Maxime, what's your opinion on this systemd unit? > nscd is a part of glibc, and looking at the code of glibc 2.22, the startup script and systemd init file are included in the source. So I have a few questions: Why is this not a part of the glibc package as an option ? And I think, we should use the service and init scripts given by upstream, unless they cause real trouble with a BR rootfs. And since we handle many versions of glibc, maybe extract them from the latests versions and simply install them. For the systemd part, there's much more than the initial service it seems, from the source I found: nscd.service and nscd.tmpfiles which will create the /run/nscd directory with the correct ACL, which doesn't seem to be done by your init script but it's done by the shipped init script > > Regards, > Yann E. MORIN. > > -- > > .-----------------.--------------------.------------------.--------------------. > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' > conspiracy: | > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ > | > | +33 223 225 172 `------------.-------: X AGAINST | \e/ There > is no | > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v > conspiracy. | > > '------------------------------^-------^------------------^--------------------' >
Hi Maxime, All, On Mon, Oct 12, 2015 at 10:34:09AM +0200, Maxime Hadjinlian wrote: > Hello Doug, Yann, all > > On Sat, Oct 10, 2015 at 4:50 PM, Yann E. MORIN <yann.morin.1998@free.fr> > wrote: > > > Doug, All, > > > > [CCing Maxime, as he knows systemd better than I do] > > > > On 2015-10-09 09:10 -0500, Doug Kehn spake thusly: > > > A daemon which handles passwd, group and host lookups for running > > programs and > > > caches the results for the next query. You only need this package if you > > are > > > using slow Name Services like LDAP, NIS or NIS+. > > > > > > This particular NSCD is a complete rewrite of the GNU glibc nscd which > > is a > > > single threaded server process which offloads all NSS lookups to worker > > > children; cache hits are handled by the parent, and only cache misses > > start > > > worker children, making the parent immune to resource leaks, hangs, and > > crashes > > > in NSS libraries. > > > > > > It should mostly be a drop-in replacement for existing installs using > > nscd. > > > > > > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > > > Signed-off-by: Doug Kehn <rdkehn@yahoo.com> > > [--SNIP--] > > > diff --git a/package/unscd/S46unscd b/package/unscd/S46unscd > > > new file mode 100644 > > > index 0000000..387ab32 > > > --- /dev/null > > > +++ b/package/unscd/S46unscd > > > @@ -0,0 +1,24 @@ > > > +#!/bin/sh > > > + > > > +NAME="nscd" > > > +DAEMON="/usr/sbin/${NAME}" > > > + > > > +case "$1" in > > > +start) > > > + echo -n "Starting ${NAME}: " > > > > We have recently readicated use of 'echo -n' and all other non-POSIX use > > of echo. Please, use printf instead. > > > > [--SNIP--] > > > diff --git a/package/unscd/unscd.mk b/package/unscd/unscd.mk > > > new file mode 100644 > > > index 0000000..e8cccd3 > > > --- /dev/null > > > +++ b/package/unscd/unscd.mk > > > @@ -0,0 +1,55 @@ > > > > > +################################################################################ > > > +# > > > +# unscd > > > +# > > > > > +################################################################################ > > > + > > > +UNSCD_VERSION = 0.51 > > > +UNSCD_SOURCE = unscd_$(UNSCD_VERSION).orig.tar.gz > > > +UNSCD_SITE = > > http://snapshot.debian.org/archive/debian/20150519T094547Z/pool/main/u/unscd > > > +UNSCD_EXTRA_DOWNLOADS = unscd_$(UNSCD_VERSION)-1.debian.tar.gz > > > +UNSCD_LICENSE = GPLv2 > > > +UNSCD_LICENSE_FILES = debian/copyright > > > + > > > +define UNSCD_EXTRACT_DEBIAN > > > + gzip -d -c $(BR2_DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) | tar -C $(@D) > > -xf - > > > > Please use suitable-extractor, like so: > > > > $(call suitable-extractor,$(UNSCD_EXTRA_DOWNLOADS)) > > $(DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) \ > > |$(TAR) xf -C $(@D) - > > > > > +endef > > > + > > > +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN > > > + > > > +define UNSCD_APPLY_DEBIAN_PATCHES > > > + for f in `grep -Ev "^#" $(@D)/debian/patches/series 2> /dev/null`; > > do \ > > > + cat "$(@D)/debian/patches/$${f}" | patch -g0 -p1 -E -d > > "$(@D)" -t -N; \ > > > > Please use apply-patches, like so: > > > > $(APPLY_PATCHES) $(@D) $(@D)/debian > > > > > + done > > > +endef > > > + > > > +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES > > > + > > > +define UNSCD_BUILD_CMDS > > > + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ > > > + $(@D)/nscd.c -o $(@D)/nscd > > > +endef > > > + > > > +define UNSCD_INSTALL_TARGET_CMDS > > > + $(INSTALL) -m 755 -D $(@D)/nscd $(TARGET_DIR)/usr/sbin/nscd > > > + $(INSTALL) -m 600 -D $(@D)/debian/nscd.conf > > $(TARGET_DIR)/etc/nscd.conf > > > +endef > > > + > > > +define UNSCD_INSTALL_INIT_SYSTEMD > > > + $(INSTALL) -m 755 -D package/unscd/unscd.service \ > > > + $(TARGET_DIR)/usr/lib/systemd/system/unscd.service > > > + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > > > > Not that it matters a lot, but I think using $(INSTALL) to create > > directories should be favoured, like so: > > > > $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > > > At the moment, I think all the packages that install systemd are using > mkdir -p, so I would keep that so it's coherent, as said in another mail, a > helper is needed to simplify theses few lines. > > > > > > + ln -fs ../../../../usr/lib/systemd/system/unscd.service \ > > > + > > $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/unscd.service > > > +endef > > [--SNIP--] > > > diff --git a/package/unscd/unscd.service b/package/unscd/unscd.service > > > new file mode 100644 > > > index 0000000..58dd7eb > > > --- /dev/null > > > +++ b/package/unscd/unscd.service > > > @@ -0,0 +1,11 @@ > > > +[Unit] > > > +Description=Micro Name Service Caching Daemon. > > > +After=syslog.target network.target > > > + > > > +[Service] > > > +Type=forking > > > +PIDFile=/var/run/nscd/nscd.pid > > > +ExecStart=/usr/sbin/nscd > > > + > > > +[Install] > > > +WantedBy=multi-user.target > > > > Maxime, what's your opinion on this systemd unit? > > > nscd is a part of glibc, and looking at the code of glibc 2.22, the startup > script and systemd init file are included in the source. So I have a few > questions: > > Why is this not a part of the glibc package as an option ? ... good point. I see glibc nscd (I'm using glibc 2.21) is built but not installed. Is the suggestion to add a nscd configuration option to glibc for native nscd or unscd? If unscd is selected, only glibc nscd support files will be installed. > > And I think, we should use the service and init scripts given by upstream, > unless they cause real trouble with a BR rootfs. And since we handle many > versions of glibc, maybe extract them from the latests versions and simply > install them. I will test the glibc init script with unscd to see if there are any issues. Would using the 'selected' glibc version, versus latest version, of the support files be okay here? > For the systemd part, there's much more than the initial service it seems, > from the source I found: > > nscd.service and nscd.tmpfiles which will create the /run/nscd directory > with the correct ACL, which doesn't seem to be done by your init script but > it's done by the shipped init script I will see what I can do with respect to systemd support. Regards, ...doug
Maxime, All, On 2015-10-12 10:34 +0200, Maxime Hadjinlian spake thusly: > On Sat, Oct 10, 2015 at 4:50 PM, Yann E. MORIN <yann.morin.1998@free.fr> > wrote: > > On 2015-10-09 09:10 -0500, Doug Kehn spake thusly: > > > A daemon which handles passwd, group and host lookups for running > > programs and > > > caches the results for the next query. You only need this package if you > > are > > > using slow Name Services like LDAP, NIS or NIS+. > > > > > > This particular NSCD is a complete rewrite of the GNU glibc nscd which > > is a > > > single threaded server process which offloads all NSS lookups to worker > > > children; cache hits are handled by the parent, and only cache misses > > start > > > worker children, making the parent immune to resource leaks, hangs, and > > crashes > > > in NSS libraries. > > > > > > It should mostly be a drop-in replacement for existing installs using > > nscd. [--SNIP--] > > > +define UNSCD_INSTALL_INIT_SYSTEMD > > > + $(INSTALL) -m 755 -D package/unscd/unscd.service \ > > > + $(TARGET_DIR)/usr/lib/systemd/system/unscd.service > > > + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > > > > Not that it matters a lot, but I think using $(INSTALL) to create > > directories should be favoured, like so: > > > > $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants > > > At the moment, I think all the packages that install systemd are using > mkdir -p, so I would keep that so it's coherent, as said in another mail, a > helper is needed to simplify theses few lines. Valid point. Consistence trumps beauty. ;-) > > > + ln -fs ../../../../usr/lib/systemd/system/unscd.service \ > > > + > > $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/unscd.service > > > +endef > > [--SNIP--] > > > diff --git a/package/unscd/unscd.service b/package/unscd/unscd.service > > > new file mode 100644 > > > index 0000000..58dd7eb > > > --- /dev/null > > > +++ b/package/unscd/unscd.service > > > @@ -0,0 +1,11 @@ > > > +[Unit] > > > +Description=Micro Name Service Caching Daemon. > > > +After=syslog.target network.target > > > + > > > +[Service] > > > +Type=forking > > > +PIDFile=/var/run/nscd/nscd.pid > > > +ExecStart=/usr/sbin/nscd > > > + > > > +[Install] > > > +WantedBy=multi-user.target > > > > Maxime, what's your opinion on this systemd unit? > > > nscd is a part of glibc, and looking at the code of glibc 2.22, the startup > script and systemd init file are included in the source. So I have a few > questions: > > Why is this not a part of the glibc package as an option ? From what I understood, this unscd is a complete *rewrite* of glibc's nscd. Where unscd shines is that it can resolve queries in parallel as it spawns a thread for each query that it has not yet cached, whereas glibc's nscd is single-threaded, thus serialising uncached queries. Thus, unscd should be overall "faster" at resolving queries than glibc's nscd would be. So, no, unscd is not part of glibc. nscd is, and we could indeed add an option to install it, of course. But that does not prevent unscd to also be oferred as a replacement. > And I think, we should use the service and init scripts given by upstream, > unless they cause real trouble with a BR rootfs. I think you meant "we should *not* use the service and init scripts given by upstream", no? > And since we handle many > versions of glibc, maybe extract them from the latests versions and simply > install them. > For the systemd part, there's much more than the initial service it seems, > from the source I found: > > nscd.service and nscd.tmpfiles which will create the /run/nscd directory > with the correct ACL, which doesn't seem to be done by your init script but > it's done by the shipped init script So, if I udnerstand you correctly, the systemd units are fine, but the startup script is missign some pieces, right? Regards, Yann E. MORIN.
Doug, MAxime, All, On 2015-10-12 09:35 -0500, rdkehn@yahoo.com spake thusly: > On Mon, Oct 12, 2015 at 10:34:09AM +0200, Maxime Hadjinlian wrote: [--SNIP--] > > nscd is a part of glibc, and looking at the code of glibc 2.22, the startup > > script and systemd init file are included in the source. So I have a few > > questions: > > > > Why is this not a part of the glibc package as an option ? > > ... good point. > > I see glibc nscd (I'm using glibc 2.21) is built but not installed. > Is the suggestion to add a nscd configuration option to glibc for > native nscd or unscd? > > If unscd is selected, only glibc nscd support files will be > installed. I would well see something along the lines of: - in toolchain/toolchain-common/in, add this: config BR2_GLIBC_NSCD bool "Install nscd" depends on BR2_TOOLCHAIN_USES_GLIBC - in package/unscd/Cofnig.in: config BR2_PACKAGE_UNSCD bool "unscd" depends on BR2_TOOLCHAIN_USES_GLIBC depends on !BR2_GLIBC_NSCD help unscd is a blabla replacement blabla... http://example.net/home/of/unscd comment "unscd needs an (e)glibc toolchain" depends on !BR2_TOOLCHAIN_USES_GLIBC Note that we do not make BR2_GLIBC_NSCD an option of the glibc package, because we also want to handle external toolchains. So it has to be a toolchain option, not a package option. Regards, Yann E. MORIN.
Maxime, All, On 2015-10-12 18:34 +0200, Yann E. MORIN spake thusly: > On 2015-10-12 10:34 +0200, Maxime Hadjinlian spake thusly: > > On Sat, Oct 10, 2015 at 4:50 PM, Yann E. MORIN <yann.morin.1998@free.fr> [--SNIP--] > > And I think, we should use the service and init scripts given by upstream, > > unless they cause real trouble with a BR rootfs. > > I think you meant "we should *not* use the service and init scripts > given by upstream", no? Forget that comment. I misread "unless" as "because". So, I agree with you. Sorry for the noise... Regards, Yann E. MORIN.
On Mon, Oct 12, 2015 at 6:34 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote: > Maxime, All, > > On 2015-10-12 10:34 +0200, Maxime Hadjinlian spake thusly: > > On Sat, Oct 10, 2015 at 4:50 PM, Yann E. MORIN <yann.morin.1998@free.fr> > > wrote: > > > On 2015-10-09 09:10 -0500, Doug Kehn spake thusly: > > > > A daemon which handles passwd, group and host lookups for running > > > programs and > > > > caches the results for the next query. You only need this package if > you > > > are > > > > using slow Name Services like LDAP, NIS or NIS+. > > > > > > > > This particular NSCD is a complete rewrite of the GNU glibc nscd > which > > > is a > > > > single threaded server process which offloads all NSS lookups to > worker > > > > children; cache hits are handled by the parent, and only cache misses > > > start > > > > worker children, making the parent immune to resource leaks, hangs, > and > > > crashes > > > > in NSS libraries. > > > > > > > > It should mostly be a drop-in replacement for existing installs using > > > nscd. [--SNIP--] > > nscd is a part of glibc, and looking at the code of glibc 2.22, the > startup > > script and systemd init file are included in the source. So I have a few > > questions: > > > > Why is this not a part of the glibc package as an option ? > > From what I understood, this unscd is a complete *rewrite* of glibc's > nscd. > > Where unscd shines is that it can resolve queries in parallel as it > spawns a thread for each query that it has not yet cached, whereas > glibc's nscd is single-threaded, thus serialising uncached queries. > > Thus, unscd should be overall "faster" at resolving queries than glibc's > nscd would be. > > So, no, unscd is not part of glibc. nscd is, and we could indeed add an > option to install it, of course. But that does not prevent unscd to also > be oferred as a replacement. > Indeed, I misread the name of the package (and with it the intent of the patch), and so I agree with you, that was a bad idea. > > > > nscd.service and nscd.tmpfiles which will create the /run/nscd directory > > with the correct ACL, which doesn't seem to be done by your init script > but > > it's done by the shipped init script > > So, if I udnerstand you correctly, the systemd units are fine, but the > startup script is missign some pieces, right? > No, both are missing pieces, that's why I think we should use upstream files since they should know what they are doing :). > > Regards, > Yann E. MORIN. > > -- > > .-----------------.--------------------.------------------.--------------------. > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' > conspiracy: | > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ > | > | +33 223 225 172 `------------.-------: X AGAINST | \e/ There > is no | > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v > conspiracy. | > > '------------------------------^-------^------------------^--------------------' >
diff --git a/package/Config.in b/package/Config.in index 3794f44..a4b3b1b 100644 --- a/package/Config.in +++ b/package/Config.in @@ -1520,6 +1520,7 @@ if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS source "package/sysvinit/Config.in" source "package/tar/Config.in" endif + source "package/unscd/Config.in" source "package/util-linux/Config.in" endmenu diff --git a/package/unscd/Config.in b/package/unscd/Config.in new file mode 100644 index 0000000..937aeb2 --- /dev/null +++ b/package/unscd/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_UNSCD + bool "unscd" + depends on BR2_TOOLCHAIN_USES_GLIBC + help + Micro Name Service Caching Daemon + +comment "unscd needs an (e)glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/unscd/S46unscd b/package/unscd/S46unscd new file mode 100644 index 0000000..387ab32 --- /dev/null +++ b/package/unscd/S46unscd @@ -0,0 +1,24 @@ +#!/bin/sh + +NAME="nscd" +DAEMON="/usr/sbin/${NAME}" + +case "$1" in +start) + echo -n "Starting ${NAME}: " + start-stop-daemon -S -x ${DAEMON} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +stop) + echo -n "Stopping ${NAME}: " + start-stop-daemon -K -x ${DAEMON} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +restart|reload) + $0 stop + $0 start + ;; +*) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/unscd/unscd.hash b/package/unscd/unscd.hash new file mode 100644 index 0000000..f65ebda --- /dev/null +++ b/package/unscd/unscd.hash @@ -0,0 +1,3 @@ +# From http://snapshot.debian.org/archive/debian/20150519T094547Z/pool/main/u/unscd/unscd_0.51-1.dsc +sha256 0dbf717726e1c29af8f4ef7d2d2695e5eedb342320a730a56ae0d56fe32891f8 unscd_0.51.orig.tar.gz +sha256 8ae16a826afd464639f6c6372fabafee5b93aea9645b3fbf23970296d4961f27 unscd_0.51-1.debian.tar.gz diff --git a/package/unscd/unscd.mk b/package/unscd/unscd.mk new file mode 100644 index 0000000..e8cccd3 --- /dev/null +++ b/package/unscd/unscd.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# unscd +# +################################################################################ + +UNSCD_VERSION = 0.51 +UNSCD_SOURCE = unscd_$(UNSCD_VERSION).orig.tar.gz +UNSCD_SITE = http://snapshot.debian.org/archive/debian/20150519T094547Z/pool/main/u/unscd +UNSCD_EXTRA_DOWNLOADS = unscd_$(UNSCD_VERSION)-1.debian.tar.gz +UNSCD_LICENSE = GPLv2 +UNSCD_LICENSE_FILES = debian/copyright + +define UNSCD_EXTRACT_DEBIAN + gzip -d -c $(BR2_DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) | tar -C $(@D) -xf - +endef + +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN + +define UNSCD_APPLY_DEBIAN_PATCHES + for f in `grep -Ev "^#" $(@D)/debian/patches/series 2> /dev/null`; do \ + cat "$(@D)/debian/patches/$${f}" | patch -g0 -p1 -E -d "$(@D)" -t -N; \ + done +endef + +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES + +define UNSCD_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + $(@D)/nscd.c -o $(@D)/nscd +endef + +define UNSCD_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/nscd $(TARGET_DIR)/usr/sbin/nscd + $(INSTALL) -m 600 -D $(@D)/debian/nscd.conf $(TARGET_DIR)/etc/nscd.conf +endef + +define UNSCD_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 755 -D package/unscd/unscd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/unscd.service + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + ln -fs ../../../../usr/lib/systemd/system/unscd.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/unscd.service +endef + +define UNSCD_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/unscd/S46unscd \ + $(TARGET_DIR)/etc/init.d/S46unscd +endef + +define UNSCD_USERS + unscd -1 unscd -1 * - - - unscd user +endef + +$(eval $(generic-package)) diff --git a/package/unscd/unscd.service b/package/unscd/unscd.service new file mode 100644 index 0000000..58dd7eb --- /dev/null +++ b/package/unscd/unscd.service @@ -0,0 +1,11 @@ +[Unit] +Description=Micro Name Service Caching Daemon. +After=syslog.target network.target + +[Service] +Type=forking +PIDFile=/var/run/nscd/nscd.pid +ExecStart=/usr/sbin/nscd + +[Install] +WantedBy=multi-user.target