diff mbox

[v5,1/2] package/unscd: new package

Message ID 1448287096-18606-2-git-send-email-rdkehn@yahoo.com
State Superseded
Headers show

Commit Message

Doug Kehn Nov. 23, 2015, 1:58 p.m. UTC
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.

Signed-off-by: Doug Kehn <rdkehn@yahoo.com>
Cc: Yann E. MORIN <yann.morin.1998@free.fr>
CC: Arnout Vandecappelle <arnout@mind.be>
--
Changes v4 -> v5
  - Reincorporate $(APPLY_PATCHES) suggestion after update by Arnout.
Changes v3 -> v4
  - Incorporate feedback/suggestions by Yann and Maxime.
Changes v2 -> v3
  - Remove trailing '/' from UNSCD_SITE.
  - Whitespace cleanup.
Changes v1 -> v2
  - Incorporate feedback/suggestions by Yann (from nss-pam-ldapd patch).
---
 package/Config.in        |  1 +
 package/unscd/Config.in  | 11 +++++++++++
 package/unscd/S46unscd   | 24 ++++++++++++++++++++++++
 package/unscd/unscd.hash |  3 +++
 package/unscd/unscd.mk   | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 86 insertions(+)
 create mode 100644 package/unscd/Config.in
 create mode 100644 package/unscd/S46unscd
 create mode 100644 package/unscd/unscd.hash
 create mode 100644 package/unscd/unscd.mk

Comments

Thomas Petazzoni Nov. 30, 2015, 9:44 p.m. UTC | #1
Dear Doug Kehn,

On Mon, 23 Nov 2015 07:58:15 -0600, Doug Kehn wrote:

> diff --git a/package/unscd/Config.in b/package/unscd/Config.in
> new file mode 100644
> index 0000000..1639bca
> --- /dev/null
> +++ b/package/unscd/Config.in
> @@ -0,0 +1,11 @@
> +config BR2_PACKAGE_UNSCD
> +	bool "unscd"
> +	depends on BR2_TOOLCHAIN_USES_GLIBC
> +	depends on !BR2_GLIBC_NSCD

I think you should leave this BR2_GLIBC_NSCD thing on the side for now.
Just make unscd a normal package, and don't worry about nscd coming
from glibc: there is anyway no mechanism in Buildroot today to install
the nscd coming from the toolchain.

> +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN
> +
> +define UNSCD_APPLY_DEBIAN_PATCHES
> +	$(APPLY_PATCHES) $(@D) $(@D)/debian/patches
> +endef
> +
> +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES

This doesn't work because the patches don't end with an extension that
is recognized by our apply-patch script. So all what you see is:

>>> unscd 0.51 Patching
support/scripts/apply-patches.sh  /home/thomas/projets/buildroot/output/build/unscd-0.51 /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches
Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/change_invalidate_request_info_output, skipping
Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/support_large_numbers_in_config, skipping

which makes the entire dance around applying the Debian patches useless.

Unfortunately, fixing this requires fixing our apply-patches script.
Generally speaking, I am not super happy with all the logic we need to
add in various packages to get them to apply the Debian patches. But
Debian packages vary quite a bit in the way the patches are organized,
so I don't know if it's doable to fix.

BTW any reason to not use the upstream version, at
http://busybox.net/~vda/unscd/nscd-0.52.c, which is higher than 0.51 ?

Can you look into this patching issue (or alternatively use 0.52 with
no patches) and send an updated version ?

Thanks !

Thomas
Arnout Vandecappelle Nov. 30, 2015, 10:17 p.m. UTC | #2
On 30-11-15 22:44, Thomas Petazzoni wrote:
> Dear Doug Kehn,
> 
> On Mon, 23 Nov 2015 07:58:15 -0600, Doug Kehn wrote:
> 
>> diff --git a/package/unscd/Config.in b/package/unscd/Config.in
>> new file mode 100644
>> index 0000000..1639bca
>> --- /dev/null
>> +++ b/package/unscd/Config.in
>> @@ -0,0 +1,11 @@
>> +config BR2_PACKAGE_UNSCD
>> +	bool "unscd"
>> +	depends on BR2_TOOLCHAIN_USES_GLIBC
>> +	depends on !BR2_GLIBC_NSCD
> 
> I think you should leave this BR2_GLIBC_NSCD thing on the side for now.
> Just make unscd a normal package, and don't worry about nscd coming
> from glibc: there is anyway no mechanism in Buildroot today to install
> the nscd coming from the toolchain.
> 
>> +UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN
>> +
>> +define UNSCD_APPLY_DEBIAN_PATCHES
>> +	$(APPLY_PATCHES) $(@D) $(@D)/debian/patches
>> +endef
>> +
>> +UNSCD_POST_PATCH_HOOKS += UNSCD_APPLY_DEBIAN_PATCHES
> 
> This doesn't work because the patches don't end with an extension that
> is recognized by our apply-patch script. So all what you see is:
> 
>>>> unscd 0.51 Patching
> support/scripts/apply-patches.sh  /home/thomas/projets/buildroot/output/build/unscd-0.51 /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches
> Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/change_invalidate_request_info_output, skipping
> Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/support_large_numbers_in_config, skipping

 Uh, that shouldn't happen, since 7caf464 everything in the series file should
be applied regardless of name...

> 
> which makes the entire dance around applying the Debian patches useless.
> 
> Unfortunately, fixing this requires fixing our apply-patches script.

 Which I did :-)


 Regards,
 Arnout

> Generally speaking, I am not super happy with all the logic we need to
> add in various packages to get them to apply the Debian patches. But
> Debian packages vary quite a bit in the way the patches are organized,
> so I don't know if it's doable to fix.
> 
> BTW any reason to not use the upstream version, at
> http://busybox.net/~vda/unscd/nscd-0.52.c, which is higher than 0.51 ?
> 
> Can you look into this patching issue (or alternatively use 0.52 with
> no patches) and send an updated version ?
> 
> Thanks !
> 
> Thomas
>
Thomas Petazzoni Nov. 30, 2015, 10:22 p.m. UTC | #3
Arnout,

On Mon, 30 Nov 2015 23:17:18 +0100, Arnout Vandecappelle wrote:

> >>>> unscd 0.51 Patching
> > support/scripts/apply-patches.sh  /home/thomas/projets/buildroot/output/build/unscd-0.51 /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches
> > Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/change_invalidate_request_info_output, skipping
> > Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/support_large_numbers_in_config, skipping
> 
>  Uh, that shouldn't happen, since 7caf464 everything in the series file should
> be applied regardless of name...

I tested on top of next, so it should have worked... but it did not. I
didn't check if the patches were actually applied, but it is clear that
this message was displayed, since I copy/pasted from my terminal.

Thomas
Arnout Vandecappelle Nov. 30, 2015, 10:24 p.m. UTC | #4
On 30-11-15 23:22, Thomas Petazzoni wrote:
> Arnout,
> 
> On Mon, 30 Nov 2015 23:17:18 +0100, Arnout Vandecappelle wrote:
> 
>>>>>> unscd 0.51 Patching
>>> support/scripts/apply-patches.sh  /home/thomas/projets/buildroot/output/build/unscd-0.51 /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches
>>> Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/change_invalidate_request_info_output, skipping
>>> Unsupported file type for /home/thomas/projets/buildroot/output/build/unscd-0.51/debian/patches/support_large_numbers_in_config, skipping
>>
>>  Uh, that shouldn't happen, since 7caf464 everything in the series file should
>> be applied regardless of name...
> 
> I tested on top of next, so it should have worked... but it did not. I
> didn't check if the patches were actually applied, but it is clear that
> this message was displayed, since I copy/pasted from my terminal.

 7caf464 was applied to master only, and there has been no merge from master to
next. So that explains it.

 next will be gone soon so don't worry ;-)

 Regards,
 Arnout
Thomas Petazzoni Nov. 30, 2015, 10:44 p.m. UTC | #5
Hello,

On Mon, 30 Nov 2015 23:24:12 +0100, Arnout Vandecappelle wrote:

>  7caf464 was applied to master only, and there has been no merge from master to
> next. So that explains it.

Ah damn, ok.

>  next will be gone soon so don't worry ;-)

Indeed.

Doug: can you resend a new version of the unscd patch, without the
attempt to integrate the installation of the glibc provided nscd
daemon? This way, we can merge unscd quickly, and then work on
installing the one from glibc if you are interested.

Thanks!

Thomas
Doug Kehn Dec. 1, 2015, 1:07 p.m. UTC | #6
Hi Thomas,

On Mon, Nov 30, 2015 at 11:44:21PM +0100, Thomas Petazzoni wrote:
> Hello,
> 
> On Mon, 30 Nov 2015 23:24:12 +0100, Arnout Vandecappelle wrote:
> 
> >  7caf464 was applied to master only, and there has been no merge from master to
> > next. So that explains it.
> 
> Ah damn, ok.
> 
> >  next will be gone soon so don't worry ;-)
> 
> Indeed.
> 
> Doug: can you resend a new version of the unscd patch, without the
> attempt to integrate the installation of the glibc provided nscd
> daemon? This way, we can merge unscd quickly, and then work on
> installing the one from glibc if you are interested.

Yes, I will resend, after incorporating/updating to 0.52 as
suggested.

Regards,
...doug
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index bdc3063..7fd3f0d 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1534,6 +1534,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..1639bca
--- /dev/null
+++ b/package/unscd/Config.in
@@ -0,0 +1,11 @@ 
+config BR2_PACKAGE_UNSCD
+	bool "unscd"
+	depends on BR2_TOOLCHAIN_USES_GLIBC
+	depends on !BR2_GLIBC_NSCD
+	help
+	  Micro Name Service Caching Daemon
+
+	  https://packages.debian.org/unscd
+
+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..7d18f94
--- /dev/null
+++ b/package/unscd/S46unscd
@@ -0,0 +1,24 @@ 
+#!/bin/sh
+
+NAME="nscd"
+DAEMON="/usr/sbin/${NAME}"
+
+case "$1" in
+start)
+        printf "Starting ${NAME}: "
+        start-stop-daemon -S -x ${DAEMON}
+        [ $? -eq 0 ] && echo "OK" || echo "FAIL"
+        ;;
+stop)
+        printf "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..1ea8d5c
--- /dev/null
+++ b/package/unscd/unscd.mk
@@ -0,0 +1,47 @@ 
+################################################################################
+#
+# 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
+	$(call suitable-extractor,$(UNSCD_EXTRA_DOWNLOADS)) \
+		$(DL_DIR)/$(UNSCD_EXTRA_DOWNLOADS) \
+		| $(TAR) -C $(@D) -xf -
+endef
+
+UNSCD_POST_EXTRACT_HOOKS += UNSCD_EXTRACT_DEBIAN
+
+define UNSCD_APPLY_DEBIAN_PATCHES
+	$(APPLY_PATCHES) $(@D) $(@D)/debian/patches
+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_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))