* [Buildroot] [PATCH v2] monkey: new package
@ 2015-06-29 9:02 Julien CORJON
2015-06-30 10:19 ` Thomas Petazzoni
0 siblings, 1 reply; 4+ messages in thread
From: Julien CORJON @ 2015-06-29 9:02 UTC (permalink / raw)
To: buildroot
From: Morgan Delestre <m.delestre@sinters.fr>
Monkey is a small, fast and lightweight open source Web Server for GNU/Linux.
It has been designed with focus in embedded devices, therefore its scalable by
nature having a low memory and CPU consumption and an excellent performance.
Signed-off-by: Julien Corjon <corjon.j@ecagroup.com>
---
Changes v1 -> v2:
- Fix typo (suggested by Alexandre)
- Change autotools for generic-package (suggested by Thomas)
- Add hash file
- Add licence
- Add uClib & musl support
- Add shared library option
package/Config.in | 1 +
package/monkey/Config.in | 19 ++++++++
package/monkey/monkey.hash | 3 ++
package/monkey/monkey.mk | 109 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 132 insertions(+)
create mode 100644 package/monkey/Config.in
create mode 100644 package/monkey/monkey.hash
create mode 100644 package/monkey/monkey.mk
diff --git a/package/Config.in b/package/Config.in
index c2f6524..477cc47 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1226,6 +1226,7 @@ endif
source "package/modem-manager/Config.in"
source "package/mongoose/Config.in"
source "package/mongrel2/Config.in"
+ source "package/monkey/Config.in"
source "package/mosquitto/Config.in"
source "package/mrouted/Config.in"
source "package/mtr/Config.in"
diff --git a/package/monkey/Config.in b/package/monkey/Config.in
new file mode 100644
index 0000000..5be2284
--- /dev/null
+++ b/package/monkey/Config.in
@@ -0,0 +1,19 @@
+config BR2_PACKAGE_MONKEY
+ bool "monkey"
+ depends on BR2_TOOLCHAIN_HAS_THREADS
+ help
+ Monkey Server is a fast and lightweight web server for Linux platforms.
+
+ http://monkey-project.com/
+
+if BR2_PACKAGE_MONKEY
+
+config BR2_PACKAGE_MONKEY_SHARED
+ bool "shared library in addition to stand-alone server"
+ help
+ Build Monkey as a shared library in addition to stand-alone server
+
+endif
+
+comment "monkey needs an toolchain w/ threads"
+ depends on !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/monkey/monkey.hash b/package/monkey/monkey.hash
new file mode 100644
index 0000000..6c7eada
--- /dev/null
+++ b/package/monkey/monkey.hash
@@ -0,0 +1,3 @@
+# md5 from http://monkey-project.com/releases/1.5/monkey-1.5.6.tar.gz.md5, sha256 locally computed:
+md5 9699e4c9ea6ce6b989907c252ae80254 monkey-1.5.6.tar.gz
+sha256 7c3d845306aa74ee6effd7ab6169d16ac4e6450e564954d0d0baa2d1e9be1a22 monkey-1.5.6.tar.gz
diff --git a/package/monkey/monkey.mk b/package/monkey/monkey.mk
new file mode 100644
index 0000000..b73d0bb
--- /dev/null
+++ b/package/monkey/monkey.mk
@@ -0,0 +1,109 @@
+################################################################################
+#
+# monkey
+#
+################################################################################
+MONKEY_VERSION_MAJOR = 1.5
+MONKEY_VERSION = $(MONKEY_VERSION_MAJOR).6
+MONKEY_SOURCE = monkey-$(MONKEY_VERSION).tar.gz
+MONKEY_SITE = http://monkey-project.com/releases/$(MONKEY_VERSION_MAJOR)/
+MONKEY_LICENCE = Apache-2.0
+MONKEY_LICENCE_FILE = LICENSE
+
+MONKEY_SYSCONF_DIR = /etc/monkey
+MONKEY_DATA_DIR = /usr/local/monkey
+MONKEY_LOG_DIR = /var/log
+MONKEY_PLUGIN_DIR = /usr/lib/monkey
+
+MONKEY_CONF_OPTS = \
+ --prefix=/usr \
+ --sysconfdir=$(MONKEY_SYSCONF_DIR) \
+ --datadir=$(MONKEY_DATA_DIR) \
+ --mandir=/usr/share/man \
+ --logdir=$(MONKEY_LOG_DIR) \
+ --pidfile=/var/run \
+ --plugdir=$(MONKEY_PLUGIN_DIR)
+
+ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
+MONLEY_CONF_OPTS += --uclib-mode
+endif
+
+ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
+MONKEY_CONF_OPTS += --musl-mode
+endif
+
+ifeq ($(BR2_PACKAGE_MONKEY_SHARED),y)
+MONKEY_CONF_OPTS += --enable-shared
+MONKEY_INSTALL_STAGING = YES
+endif
+
+ifeq ($(BR2_ENABLE_DEBUG),y)
+MONKEY_CONF_OPT += --debug
+endif
+
+define MONKEY_CONFIGURE_CMDS
+ (cd $(@D); ./configure $(MONKEY_CONF_OPTS))
+endef
+
+define MONKEY_BUILD_CMDS
+ $(MAKE) -C $(@D)
+endef
+
+define MONKEY_INSTALL_STAGING_CMDS
+ $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
+endef
+
+define MONKEY_INSTALL_TARGET_BIN
+ $(INSTALL) -d $(TARGET_DIR)/usr/bin
+ $(INSTALL) -m 755 $(@D)/bin/* $(TARGET_DIR)/usr/bin/
+endef
+
+define MONKEY_INSTALL_TARGET_LIBRARY
+ $(INSTALL) -m 644 $(@D)/src/libmonkey.so.$(MONKEY_VERSION_MAJOR) $(TARGET_DIR)/usr/lib
+ -ln -sf libmonkey.$(MONKEY_VERSION_MAJOR) $(TARGET_DIR)/usr/lib/libmonkey.so
+endef
+
+define MONKEY_INSTALL_TARGET_CONFIGURATION
+ $(INSTALL) -d $(TARGET_DIR)$(MONKEY_SYSCONF_DIR)
+ $(INSTALL) -d $(TARGET_DIR)${MONKEY_SYSCONF_DIR}/plugins
+ $(INSTALL) -d $(TARGET_DIR)${MONKEY_SYSCONF_DIR}/sites
+ $(INSTALL) -m 644 $(@D)/conf/*.* $(TARGET_DIR)$(MONKEY_SYSCONF_DIR)
+ cp -r $(@D)/conf/plugins/* $(TARGET_DIR)${MONKEY_SYSCONF_DIR}/plugins/
+endef
+
+define MONKEY_INSTALL_TARGET_PLUGINS
+ $(INSTALL) -d $(TARGET_DIR)${MONKEY_PLUGIN_DIR}
+ $(INSTALL) -m 644 $(@D)/plugins/*/*.so $(TARGET_DIR)${MONKEY_PLUGIN_DIR}/
+endef
+
+define MONKEY_INSTALL_TARGET_DATA
+ $(INSTALL) -d $(TARGET_DIR)${MONKEY_DATA_DIR}
+ $(INSTALL) -d $(TARGET_DIR)$(MONKEY_DATA_DIR)/imgs
+ $(INSTALL) -d $(TARGET_DIR)$(MONKEY_DATA_DIR)/css
+ $(INSTALL) -m 644 $(@D)/htdocs/index.html $(TARGET_DIR)$(MONKEY_DATA_DIR)
+ $(INSTALL) -m 644 $(@D)/htdocs/404.html $(TARGET_DIR)$(MONKEY_DATA_DIR)
+ $(INSTALL) -m 644 $(@D)/htdocs/favicon.ico $(TARGET_DIR)$(MONKEY_DATA_DIR)
+ $(INSTALL) -m 644 $(@D)/htdocs/imgs/monkey_logo.png $(TARGET_DIR)$(MONKEY_DATA_DIR)/imgs
+ $(INSTALL) -m 644 $(@D)/htdocs/imgs/info_pic.jpg $(TARGET_DIR)$(MONKEY_DATA_DIR)/imgs
+ $(INSTALL) -m 644 $(@D)/htdocs/css/bootstrap.min.css $(TARGET_DIR)$(MONKEY_DATA_DIR)/css
+ $(INSTALL) -d $(TARGET_DIR)${MONKEY_LOG_DIR}
+endef
+
+ifeq ($(BR2_PACKAGE_MONKEY_SHARED),y)
+define MONKEY_INSTALL_TARGET_CMDS
+ $(MONKEY_INSTALL_TARGET_BIN)
+ $(MONKEY_INSTALL_TARGET_LIBRARY)
+ $(MONKEY_INSTALL_TARGET_CONFIGURATION)
+ $(MONKEY_INSTALL_TARGET_PLUGINS)
+ $(MONKEY_INSTALL_TARGET_DATA)
+endef
+else
+define MONKEY_INSTALL_TARGET_CMDS
+ $(MONKEY_INSTALL_TARGET_BIN)
+ $(MONKEY_INSTALL_TARGET_CONFIGURATION)
+ $(MONKEY_INSTALL_TARGET_PLUGINS)
+ $(MONKEY_INSTALL_TARGET_DATA)
+endef
+endif
+
+$(eval $(generic-package))
--
2.1.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v2] monkey: new package
2015-06-29 9:02 [Buildroot] [PATCH v2] monkey: new package Julien CORJON
@ 2015-06-30 10:19 ` Thomas Petazzoni
2015-07-01 7:27 ` Julien CORJON
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2015-06-30 10:19 UTC (permalink / raw)
To: buildroot
Dear Julien CORJON,
On Mon, 29 Jun 2015 09:02:43 +0000, Julien CORJON wrote:
> From: Morgan Delestre <m.delestre@sinters.fr>
>
> Monkey is a small, fast and lightweight open source Web Server for GNU/Linux.
> It has been designed with focus in embedded devices, therefore its scalable by
> nature having a low memory and CPU consumption and an excellent performance.
>
> Signed-off-by: Julien Corjon <corjon.j@ecagroup.com>
> ---
> Changes v1 -> v2:
> - Fix typo (suggested by Alexandre)
> - Change autotools for generic-package (suggested by Thomas)
> - Add hash file
> - Add licence
> - Add uClib & musl support
> - Add shared library option
I've applied the patch, but really there was still a lot of things
broken. The most astonishing problem was that with your monkey.mk,
Monkey was built for the host and not for the target. So I really don't
see how you could have tested this, unless you're working on x86/x86-64
embedded systems (but I know you are not!).
So, I've fixed up a whole bunch of issues before applying:
[Thomas:
- Add missing dependency on !BR2_STATIC_LIBS (the source code uses
dlopen) and BR2_USE_MMU (the source code uses fork)
- Slightly adjust/reword the description of the
BR2_PACKAGE_MONKEY_SHARED option.
- Remove all the complicated installation logic for the target, and
just use "make install" instead.
- Pass --no-backtrace when uClibc is used, otherwise the build fails
because <execinfo.h> is not available in uClibc.
- Pass $(TARGET_CONFIGURE_OPTS) in the environment of the configure
script., otherwise monkey gets built for the host and not for the
target.
- Add a post install target hook to remove a broken symlink
libmonkey.so installed by Monkey's Makefile when the shared
library is not enabled.
- Use TARGET_MAKE_ENV when calling make, just because we should.
- Pass --malloc-libc so that the libc malloc() is used instead of
the builtin jemalloc allocator, which requires more work to
cross-compile properly.
- Add missing empty line after the .mk header and before the first
variable definition.]
Things like dependencies on BR2_STATIC_LIBS/BR2_USE_MMU, I understand
that they could have slipped through. But the fact that the binaries
got built for the host indicates that you haven't even built+tested the
package.
Also, if you could post a follow-up patch adding an init script that
starts Monkey at boot time, it would be great.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v2] monkey: new package
2015-06-30 10:19 ` Thomas Petazzoni
@ 2015-07-01 7:27 ` Julien CORJON
2015-07-01 7:48 ` Thomas Petazzoni
0 siblings, 1 reply; 4+ messages in thread
From: Julien CORJON @ 2015-07-01 7:27 UTC (permalink / raw)
To: buildroot
Dear Thomas,
> ...
> I've applied the patch, but really there was still a lot of things
> broken. The most astonishing problem was that with your monkey.mk,
> Monkey was built for the host and not for the target. So I really don't
> see how you could have tested this, unless you're working on x86/x86-64
> embedded systems (but I know you are not!).
You're right, with the autotool -> generic-packages rework I just
checked the compilation and didn't notice that x86 GCC was used. It
won't happen again, next time I will fully test patches after each rework.
> So, I've fixed up a whole bunch of issues before applying:
>
> [Thomas:
> - Add missing dependency on !BR2_STATIC_LIBS (the source code uses
> dlopen) and BR2_USE_MMU (the source code uses fork)
Do you have a documentation on "BR dependencies versus functions" to
learn about that?
> - Slightly adjust/reword the description of the
> BR2_PACKAGE_MONKEY_SHARED option.
> - Remove all the complicated installation logic for the target, and
> just use "make install" instead.
I didn't know that BR remove all headers from the target image at the
end of the compilation. Is it the same for the man files?
> - Pass --no-backtrace when uClibc is used, otherwise the build fails
> because <execinfo.h> is not available in uClibc.
As I daily use a linaro toolchain, I did not test the uClib and Musl
configure options. In this case (for future patches), should I include a
case I cannot test or disable it with depend?
> - Pass $(TARGET_CONFIGURE_OPTS) in the environment of the configure
> script., otherwise monkey gets built for the host and not for the
> target.
Slap me for this one!
> - Add a post install target hook to remove a broken symlink
> libmonkey.so installed by Monkey's Makefile when the shared
> library is not enabled.
> - Use TARGET_MAKE_ENV when calling make, just because we should.
> - Pass --malloc-libc so that the libc malloc() is used instead of
> the builtin jemalloc allocator, which requires more work to
> cross-compile properly.
> - Add missing empty line after the .mk header and before the first
> variable definition.]
> ...
> Also, if you could post a follow-up patch adding an init script that
> starts Monkey at boot time, it would be great.
I notice there is an systemd start script debian/monkey.init but my
knowledge of init daemons is so limited that I didn't try to
include/modify this file in BR package declaration.
>
> Thanks!
>
> Thomas
Thanks for the review/fix/commit. I'll try to be more meticulous on the
next one.
Julien
-------------- next part --------------
A non-text attachment was scrubbed...
Name: corjon_j.vcf
Type: text/x-vcard
Size: 428 bytes
Desc: corjon_j.vcf
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20150701/47bda20e/attachment.vcf>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v2] monkey: new package
2015-07-01 7:27 ` Julien CORJON
@ 2015-07-01 7:48 ` Thomas Petazzoni
0 siblings, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2015-07-01 7:48 UTC (permalink / raw)
To: buildroot
Hello,
On Wed, 1 Jul 2015 07:27:40 +0000, Julien CORJON wrote:
> You're right, with the autotool -> generic-packages rework I just
> checked the compilation and didn't notice that x86 GCC was used. It
> won't happen again, next time I will fully test patches after each rework.
Ah, ok, I understand. Indeed when using the autotools-package infra,
TARGET_CONFIGURE_OPTS is automatically passed in the environment of
configure. But as discussed previously, this package is not using
autoconf/automake, so it doesn't make a lot of sense to use the
autotools-package infrastructure for it.
> > [Thomas:
> > - Add missing dependency on !BR2_STATIC_LIBS (the source code uses
> > dlopen) and BR2_USE_MMU (the source code uses fork)
>
> Do you have a documentation on "BR dependencies versus functions" to
> learn about that?
No, not really. And it's not necessarily a 1:1 mapping. For example,
usage of dlopen() is an indication that you should depend
on !BR2_STATIC_LIBS. But there are also other situations where you need
to depend on !BR2_STATIC_LIBS: when the package tries to build a shared
library unconditionally.
Seeing fork() being called is a good indication that you need a depends
on BR2_USE_MMU.
For the other dependencies like BR2_TOOLCHAIN_HAS_THREADS, you can grep
for pthread functions.
For wide-char/locales, it's a bit more complicated.
But it's not too dramatic if you don't get these correct, as the
autobuilders will catch such problems.
> > - Slightly adjust/reword the description of the
> > BR2_PACKAGE_MONKEY_SHARED option.
> > - Remove all the complicated installation logic for the target, and
> > just use "make install" instead.
>
> I didn't know that BR remove all headers from the target image at the
> end of the compilation. Is it the same for the man files?
Yes. Look at what the target-finalize target is doing at
http://git.buildroot.net/buildroot/tree/Makefile#n547. This is executed
at the end of the build: after all packages have been built/installed,
but before the root filesystem images are generated.
> > - Pass --no-backtrace when uClibc is used, otherwise the build fails
> > because <execinfo.h> is not available in uClibc.
>
> As I daily use a linaro toolchain, I did not test the uClib and Musl
> configure options. In this case (for future patches), should I include a
> case I cannot test or disable it with depend?
No, we really prefer when the uClibc situation has been at least built
tested: uClibc is still our default C library, so it's a bit weird to
make a package depends on !BR2_TOOLCHAIN_USES_UCLIBC, if it really can
be used with uClibc.
Especially since your package had some specific conditionals for uClibc
and Musl handling.
But to be honest, I did not built the musl case. The autobuilders will
take care of that.
Remember that you have pre-built uClibc toolchains available at
http://autobuild.buildroot.org/toolchains/tarballs/, which allows you
do quickly build test a package with uClibc.
Here I have a script called br-init-conf, which does:
#!/bin/sh
wget -O .config http://autobuild.buildroot.org/toolchains/configs/br-arm-full.config
cat /home/thomas/projets/br/minimal.defconfig >> .config
With minimal.defconfig being:
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
# BR2_TARGET_ROOTFS_TAR is not set
This allows to initialize a minimal Buildroot configuration that uses a
pre-built uClibc toolchain. Excellent to do a quick test build.
> > Also, if you could post a follow-up patch adding an init script that
> > starts Monkey at boot time, it would be great.
>
> I notice there is an systemd start script debian/monkey.init but my
> knowledge of init daemons is so limited that I didn't try to
> include/modify this file in BR package declaration.
Ok, no problem.
Thanks,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-07-01 7:48 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-29 9:02 [Buildroot] [PATCH v2] monkey: new package Julien CORJON
2015-06-30 10:19 ` Thomas Petazzoni
2015-07-01 7:27 ` Julien CORJON
2015-07-01 7:48 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox