Patchwork adding dhcpcd

login
register
mail settings
Submitter John Stile
Date March 6, 2013, 7:50 p.m.
Message ID <1362599417.20183.159.camel@genx>
Download mbox | patch
Permalink /patch/225612/
State Superseded
Headers show

Comments

John Stile - March 6, 2013, 7:50 p.m.
Dear Thomas,
On Wed, 2013-03-06 at 19:58 +0100, Thomas Petazzoni wrote:
> Dear John Stile,
> 
> On Wed, 06 Mar 2013 10:01:56 -0800, John Stile wrote:
> 
> > If I'm going to rebuild a good package I might as well use the latest
> > version of dhcpcd, so I'll start with 5.6.7.
> 
> Good idea.
> 
> > I am not sure if
> > http://roy.marples.name/downloads/dhcpcd/dhcpcd-5.6.7.tar.bz2
> > uses cmake or automake.  The tarball contains a Makefile, and their
> > configure script has the comment, "Try and be like autotools configure,
> > but without autotools", so I assume it is just using gnu make.
> 
> Your analysis is correct. It has an hand-crafted configure script that
> writes values into a config.mk, which presumably, gets read by the
> Makefile. So it's neither autotools nor CMake, so you have to use the
> "generic-package" infrastructure.
> 
> >  It does
> > contain a Makefile... but I don't see how to use it from:
> > http://buildroot.org/downloads/manual/manual.html#generic-package-tutorial
> > 
> > So I tried to make a pacakge using 
> > $(eval $(generic-package))
> 
> Good.
> 
> Your file below has been line-wrapped by your e-mail client. Not a big
> issue just to discuss, but if you want to submit a patch, you'll have
> to fix your e-mail client, or better, use 'git send-email'.
> 
> > When I run make in buildroot, the package is not downloaded, or built.
> > Below is my package file so far.
> 
> Please send a complete patch. The main reason is usually that your
> BR2_PACKAGE_<foo> option is misnamed, or that the package is not
> located in the proper directory.
> 
> When creating a package named "foo", it is very important that:
> 
>  * The option in Config.in is BR2_PACKAGE_FOO.
> 
>  * The package is located in package/foo/.
> 
> > #############################################################
> > #
> > # dhcpcd
> > #
> > #############################################################
> > 
> > DHCPCD_VERSION = 5.6.7
> > DHCPCD_SOURCE = dhcpcd-$(DHCPCD_VERSION).tar.bz2
> > DHCPCD_SITE = http://roy.marples.name/downloads/dhcpcd
> > DHCPCD_LICENSE = GPLv3+
> > DHCPCD_LICENSE_FILES = COPYING
> 
> The license is not GPLv3+, it's BSD-2c, and there is no COPYING file.
> 
> > DHCPCD_INSTALL_STAGING = YES
> 
> No, it's just installing an application, so setting
> DHCPD_INSTALL_STAGING to YES is not necessary.
> 
> > DHCPCD_CONFIG_SCRIPTS = configure
> 
> No, the configure script is not a <foo>-config script.
> 
> > DHCPCD_DEPENDENCIES = 
> 
> Not needed, it is empty by default.
> 
> > DHCPCD_SITE_METHOD = wget
> 
> Not needed, it is guessed automatically from the URL (which starts by
> http://).
> 
> Before the BUILD_CMDS, you should have a:
> 
> define DHCPD_CONFIGURE_CMDS
> 	(cd $(@D);
> 		...some environment variables...
> 		./configure
> 		...some options...)
> endef
> 
> This will call the configure script.
> 
> > define DHCPCD_BUILD_CMDS
> > 	$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
> > endef
> 
> If you run the configure script, then the CC and LD are defined in
> config.mk, so there should be no need to pass them in the environment
> anymore.
> 
> > define DHCPCD_INSTALL_STAGING_CMDS
> > 	$(INSTALL) -D -m 0644 $(@D)/dhcpcd.conf
> > $(STAGING_DIR)/etc/dhcpcd.conf 
> > 	$(INSTALL) -D -m 0755 $(@D)/dhcpcd $(STAGING_DIR)/usr/bin/dhcpcd
> > endef
> 
> Not needed as we should not be installing dhcpcd in the staging area.
> 
> > define DHCPCD_INSTALL_TARGET_CMDS
> > 	$(INSTALL) -D -m 0755 $(@D)/dhcpcd $(TARGET_DIR)/usr/bin
> 
> This should be:
> 
> 	$(INSTALL) -D -m 0755 $(@D)/dhcpcd $(TARGET_DIR)/usr/bin/dhcpcd
> 
> > 	$(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/dhcpcd.conf
> 
> Are you you want to create the /etc/dhcpcd.conf file? It would have
> thought you wanted to copy the default dhcpcd.conf configuration file,
> no? If so:
> 
> 	$(INSTALL) -D -m 0644 $(@D)/dhcpcd.conf $(TARGET_DIR)/etc/dhcpcd.conf
> 
> > endef
> > 
> > define DHCPCD_PERMISSIONS
> > 	/usr/bin/dhcpcd  f  4755  0  0  -  -  -  -  -
> > endef
> 
> I'm not sure, does dhcpcd needs to be installed setuid-root?
> 
> Anyway, despite those comments, you are definitely on the right track
> to create a proper package!

> Thanks,
> 
> Thomas

I think I have addressed the problem with the make file, but it still
silently does not build.  I am attaching a complete patch.

------------------
Begin dhcpcd.patch
------------------

Adding package dhcpcd to buildroot

signed-off-by: John Stile <john@stilen.com>
Thomas Petazzoni - March 6, 2013, 8:06 p.m.
Dear John Stile,

On Wed, 06 Mar 2013 11:50:17 -0800, John Stile wrote:

> I think I have addressed the problem with the make file, but it still
> silently does not build.  I am attaching a complete patch.

Are you sure you didn't forget to enable the package in menuconfig?
I've applied your patch as is, enabled the dhcpcd package in
menuconfig, and it starts building (sorry for the messages in French
below):

>>> dhcpcd 5.6.7 Downloading
--2013-03-06 20:59:38--  http://roy.marples.name/downloads/dhcpcd//dhcpcd-5.6.7.tar.bz2
Résolution de roy.marples.name (roy.marples.name)... 77.75.106.61, 2a01:348:31:2:209:5bff:fe84:887d
Connexion vers roy.marples.name (roy.marples.name)|77.75.106.61|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 85983 (84K) [application/octet-stream]
Sauvegarde en : «/opt/dl/dhcpcd-5.6.7.tar.bz2.tmp»

100%[========================================================================================================================================================>] 85 983      98,1K/s   ds 0,9s    

2013-03-06 20:59:39 (98,1 KB/s) - «/opt/dl/dhcpcd-5.6.7.tar.bz2.tmp» sauvegardé [85983/85983]

>>> dhcpcd 5.6.7 Extracting
bzcat /opt/dl/dhcpcd-5.6.7.tar.bz2 | tar --strip-components=1 -C /home/thomas/projets/buildroot/output/build/dhcpcd-5.6.7  -xf -
>>> dhcpcd 5.6.7 Patching package//dhcpcd
>>> dhcpcd 5.6.7 Configuring
>>> dhcpcd 5.6.7 Building
/usr/bin/make -j8 -C /home/thomas/projets/buildroot/output/build/dhcpcd-5.6.7 all
make[1]: entrant dans le répertoire « /home/thomas/projets/buildroot/output/build/dhcpcd-5.6.7 »
Makefile:11: config.mk: Aucun fichier ou dossier de ce type
make[1]: *** Pas de règle pour fabriquer la cible « config.mk ». Arrêt.
make[1]: quittant le répertoire « /home/thomas/projets/buildroot/output/build/dhcpcd-5.6.7 »
make: *** [/home/thomas/projets/buildroot/output/build/dhcpcd-5.6.7/.stamp_built] Erreur 2

So the build starts, but fails. However, the configure step is not
done, because you use DHCPD_CONFIGURE_CMDS and not
DHCPCD_CONFIGURE_CMDS (maybe it was wrong in the e-mail I sent to you,
but basically, all variables have to start with the package name, in
upper-case letters).

Best regards,

Thomas

Patch

--- a/buildroot-2011.11/package/Config.in	2013-03-06 11:40:52.000000000 -0800
+++ b/buildroot-2011.11/package/Config.in	2013-02-28 14:59:32.000000000 -0800
@@ -409,6 +409,7 @@  if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
 source "package/dhcp/Config.in"
 endif
 source "package/dhcpdump/Config.in"
+source "package/dhcpcd/Config.in"
 source "package/dnsmasq/Config.in"
 source "package/dropbear/Config.in"
 source "package/ebtables/Config.in"

--- a/buildroot-2011.11/package/dhcpcd/Config.in	2013-03-06 11:44:03.000000000 -0800
+++ b/buildroot-2011.11/package/dhcpcd/Config.in	2013-03-06 07:55:53.000000000 -0800
@@ -0,0 +1,5 @@ 
+config BR2_PACKAGE_DHCPCD
+	bool "dhcpcd"
+	depends on BR2_INET_IPV6
+	help
+	an RFC2131 compliant DHCP client

--- a/buildroot-2011.11/package/dhcpcd/dhcpcd.mk	2013-03-06 11:44:03.000000000 -0800
+++ b/buildroot-2011.11/package/dhcpcd/dhcpcd.mk	2013-03-06 11:38:17.000000000 -0800
@@ -0,0 +1,43 @@ 
+#############################################################
+#
+# dhcpcd
+#
+#############################################################
+
+DHCPCD_VERSION = 5.6.7
+DHCPCD_SOURCE = dhcpcd-$(DHCPCD_VERSION).tar.bz2
+DHCPCD_SITE = http://roy.marples.name/downloads/dhcpcd/
+DHCPCD_LICENSE = BSD-2c
+DHCPCD_INSTALL_STAGING = NO
+
+CONFIG_ARGS = $(BR2_GCC_TARGET_ARCH)
+
+ifeq ($(BR2_USE_MMU),n)
+    CONFIG_ARGS =: --disable-fork
+endif 
+
+define DHCPD_CONFIGURE_CMDS
+	(cd $(@D);
+	...some environment variables...
+	./configure \
+	$(CONFIG_ARGS) )
+endef
+
+define DHCPCD_BUILD_CMDS
+	$(MAKE) -C $(@D) all
+endef
+
+define DHCPCD_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/dhcpcd $(TARGET_DIR)/usr/bin/dhcpcd
+	$(INSTALL) -D -m 0644 $(@D)/dhcpcd.conf $(TARGET_DIR)/etc/dhcpcd.conf
+endef
+
+define DHCPCD_DEVICES
+	#/dev/foo  c  666  0  0  42  0  -  -  -
+endef
+
+define DHCPCD_PERMISSIONS
+	/usr/bin/dhcpcd  f  4755  0  0  -  -  -  -  -
+endef
+
+$(eval $(generic-package))