diff mbox

[v2,2/2] package/python-web2py: new package

Message ID 1428933447-32061-3-git-send-email-angelo.compagnucci@gmail.com
State Superseded
Headers show

Commit Message

Angelo Compagnucci April 13, 2015, 1:57 p.m. UTC
This patch adds web2py package. web2py is a free open source
full-stack framework for rapid development of fast, scalable,
secure and portable database-driven web-based applications.
This patch is a big rework using the new introduced feature of recursive
permission to run web2py application server as non root user.

Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
---
Changelog:

v1 -> v2:
 * Adding python2 dependency only (suggested by Yegor)

 package/Config.in                      |  1 +
 package/python-web2py/Config.in        | 26 +++++++++++++++++++
 package/python-web2py/S51web2py        | 25 ++++++++++++++++++
 package/python-web2py/python-web2py.mk | 46 ++++++++++++++++++++++++++++++++++
 package/python-web2py/web2py.service   | 11 ++++++++
 5 files changed, 109 insertions(+)
 create mode 100644 package/python-web2py/Config.in
 create mode 100644 package/python-web2py/S51web2py
 create mode 100644 package/python-web2py/python-web2py.mk
 create mode 100644 package/python-web2py/web2py.service

Comments

Thomas Petazzoni April 13, 2015, 2:21 p.m. UTC | #1
Dear Angelo Compagnucci,

On Mon, 13 Apr 2015 15:57:27 +0200, Angelo Compagnucci wrote:

> diff --git a/package/python-web2py/Config.in b/package/python-web2py/Config.in
> new file mode 100644
> index 0000000..c376856
> --- /dev/null
> +++ b/package/python-web2py/Config.in
> @@ -0,0 +1,26 @@
> +config BR2_PACKAGE_PYTHON_WEB2PY
> +	bool "python-web2py"
> +	depends on BR2_PACKAGE_PYTHON
> +	select BR2_PACKAGE_PYTHON_PYDAL
> +	select BR2_PACKAGE_ZLIB

Not needed.

> +	select BR2_PACKAGE_PYTHON_ZLIB
> +	select BR2_PACKAGE_EXPAT

Ditto.

> +	select BR2_PACKAGE_PYTHON_PYEXPAT
> +	select BR2_PACKAGE_SQLITE

Ditto.

Those are already selected by BR2_PACKAGE_PYTHON_{ZLIB,PYEXPAT,SQLITE}
respectively.

> diff --git a/package/python-web2py/python-web2py.mk b/package/python-web2py/python-web2py.mk
> new file mode 100644
> index 0000000..828b662
> --- /dev/null
> +++ b/package/python-web2py/python-web2py.mk
> @@ -0,0 +1,46 @@
> +################################################################################
> +#
> +# python-web2py
> +#
> +################################################################################
> +
> +PYTHON_WEB2PY_VERSION = R-2.10.3
> +PYTHON_WEB2PY_SITE = https://github.com/web2py/web2py.git
> +PYTHON_WEB2PY_SITE_METHOD = git

github function?

> +PYTHON_WEB2PY_LICENSE = LGPLv3
> +PYTHON_WEB2PY_LICENSE_FILES = LICENSE
> +PYTHON_WEB2PY_DEPENDENCIES = python sqlite

It really depends on sqlite itself? Or only the Python sqlite module?

> +define PYTHON_WEB2PY_PYDAL_COPY
> +	cp -rf $(PYTHON_PYDAL_SRCDIR)/*  $(@D)/gluon/packages/dal/
> +endef
> +
> +PYTHON_WEB2PY_POST_EXTRACT_HOOKS += PYTHON_WEB2PY_PYDAL_COPY
> +
> +define PYTHON_WEB2PY_INSTALL_TARGET_CMDS
> +	$(HOST_DIR)/usr/bin/python2 -c 'import os; \
> +		os.chdir("$(@D)"); \
> +		from gluon.main import save_password; \
> +		save_password($(BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD),8000)'
> +	mkdir -p $(TARGET_DIR)/usr/share/web2py
> +	cp -dpfr $(@D)/* $(TARGET_DIR)/usr/share/web2py
> +endef
> +
> +define PYTHON_WEB2PY_INSTALL_INIT_SYSV
> +	$(INSTALL) -m 0755 -D package/python-web2py/S51web2py \
> +		$(TARGET_DIR)/etc/init.d/S51web2py
> +endef
> +
> +define PYTHON_WEB2PY_INSTALL_INIT_SYSTEMD
> +	$(INSTALL) -D -m 0644 package/python-web2py/web2py.service \
> +		$(TARGET_DIR)/etc/systemd/system/web2py.service

I think we changed the installation of .service files to /usr/lib. See
commit af17811662595ad1db0a992a3a7446c79d40d578 for example.

> +	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
> +	ln -fs ../web2py.service \
> +		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/web2py.service
> +endef
> +
> +define PYTHON_WEB2PY_PERMISSIONS
> +	/usr/share/web2py  r  750  www-data  www-data  -  -  -  -  -
> +endef
> +
> +$(eval $(generic-package))

This package has a setup.py. Any reason why you're not using it,
together with the python-package infrastructure?

Thanks,

Thomas
Angelo Compagnucci April 13, 2015, 2:43 p.m. UTC | #2
Dear Thomas Petazzoni,

2015-04-13 16:21 GMT+02:00 Thomas Petazzoni
<thomas.petazzoni@free-electrons.com>:
> Dear Angelo Compagnucci,
>
> On Mon, 13 Apr 2015 15:57:27 +0200, Angelo Compagnucci wrote:
>
>> diff --git a/package/python-web2py/Config.in b/package/python-web2py/Config.in
>> new file mode 100644
>> index 0000000..c376856
>> --- /dev/null
>> +++ b/package/python-web2py/Config.in
>> @@ -0,0 +1,26 @@
>> +config BR2_PACKAGE_PYTHON_WEB2PY
>> +     bool "python-web2py"
>> +     depends on BR2_PACKAGE_PYTHON
>> +     select BR2_PACKAGE_PYTHON_PYDAL
>> +     select BR2_PACKAGE_ZLIB
>
> Not needed.

Ok!

>
>> +     select BR2_PACKAGE_PYTHON_ZLIB
>> +     select BR2_PACKAGE_EXPAT
>
> Ditto.

Ok!

>
>> +     select BR2_PACKAGE_PYTHON_PYEXPAT
>> +     select BR2_PACKAGE_SQLITE
>
> Ditto.

Ok!

>
> Those are already selected by BR2_PACKAGE_PYTHON_{ZLIB,PYEXPAT,SQLITE}
> respectively.
>
>> diff --git a/package/python-web2py/python-web2py.mk b/package/python-web2py/python-web2py.mk
>> new file mode 100644
>> index 0000000..828b662
>> --- /dev/null
>> +++ b/package/python-web2py/python-web2py.mk
>> @@ -0,0 +1,46 @@
>> +################################################################################
>> +#
>> +# python-web2py
>> +#
>> +################################################################################
>> +
>> +PYTHON_WEB2PY_VERSION = R-2.10.3
>> +PYTHON_WEB2PY_SITE = https://github.com/web2py/web2py.git
>> +PYTHON_WEB2PY_SITE_METHOD = git
>
> github function?

Ok, I will use it.

>> +PYTHON_WEB2PY_LICENSE = LGPLv3
>> +PYTHON_WEB2PY_LICENSE_FILES = LICENSE
>> +PYTHON_WEB2PY_DEPENDENCIES = python sqlite
>
> It really depends on sqlite itself? Or only the Python sqlite module?

It depends on python sqlite, I will look into setting the proper
dependencies. Probably only python would suffice, cause python-sqlite
is always compiled with python cause it's selected.

>> +define PYTHON_WEB2PY_PYDAL_COPY
>> +     cp -rf $(PYTHON_PYDAL_SRCDIR)/*  $(@D)/gluon/packages/dal/
>> +endef
>> +
>> +PYTHON_WEB2PY_POST_EXTRACT_HOOKS += PYTHON_WEB2PY_PYDAL_COPY
>> +
>> +define PYTHON_WEB2PY_INSTALL_TARGET_CMDS
>> +     $(HOST_DIR)/usr/bin/python2 -c 'import os; \
>> +             os.chdir("$(@D)"); \
>> +             from gluon.main import save_password; \
>> +             save_password($(BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD),8000)'
>> +     mkdir -p $(TARGET_DIR)/usr/share/web2py
>> +     cp -dpfr $(@D)/* $(TARGET_DIR)/usr/share/web2py
>> +endef
>> +
>> +define PYTHON_WEB2PY_INSTALL_INIT_SYSV
>> +     $(INSTALL) -m 0755 -D package/python-web2py/S51web2py \
>> +             $(TARGET_DIR)/etc/init.d/S51web2py
>> +endef
>> +
>> +define PYTHON_WEB2PY_INSTALL_INIT_SYSTEMD
>> +     $(INSTALL) -D -m 0644 package/python-web2py/web2py.service \
>> +             $(TARGET_DIR)/etc/systemd/system/web2py.service
>
> I think we changed the installation of .service files to /usr/lib. See
> commit af17811662595ad1db0a992a3a7446c79d40d578 for example.

Ouch! I will fix it!

>> +     mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
>> +     ln -fs ../web2py.service \
>> +             $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/web2py.service
>> +endef
>> +
>> +define PYTHON_WEB2PY_PERMISSIONS
>> +     /usr/share/web2py  r  750  www-data  www-data  -  -  -  -  -
>> +endef
>> +
>> +$(eval $(generic-package))
>
> This package has a setup.py. Any reason why you're not using it,
> together with the python-package infrastructure?

I can try! Honestly, I've not explored the option cause web2py is self
contained and it doesn't require installation. It uses a writable
directory for served applications, so suing a custom directory un
/usr/share with writing permission setted to www-data seemed the most
sensible choice.

Thank you!

>
> Thanks,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
Thomas Petazzoni April 13, 2015, 9:10 p.m. UTC | #3
Dear Angelo Compagnucci,

On Mon, 13 Apr 2015 16:43:08 +0200, Angelo Compagnucci wrote:

> dependencies. Probably only python would suffice, cause python-sqlite
> is always compiled with python cause it's selected.

There is no such thing as python-sqlite. There is only python, which
may or may not have the sqlite functionality. In such cases, what you
have to do is:

 1/ At the Config.in level, make sure you select the relevant options,
    i.e BR2_PACKAGE_PYTHON_SQLITE (or BR2_PACKAGE_PYTHON3_SQLITE if you
    want to support Python 3)

 2/ At the .mk level, depend on the appropriate package, in this case
    'python' (or 'python3')

> > This package has a setup.py. Any reason why you're not using it,
> > together with the python-package infrastructure?
> 
> I can try! Honestly, I've not explored the option cause web2py is self
> contained and it doesn't require installation. It uses a writable
> directory for served applications, so suing a custom directory un
> /usr/share with writing permission setted to www-data seemed the most
> sensible choice.

Installing with python-package seems to work, but it does not install
the web2py.py program itself, so it should be done separately. Also, it
is a bit weird that the whole thing has to be part of a www-data
writable directory, no?

Thomas
Angelo Compagnucci April 14, 2015, 8:46 a.m. UTC | #4
Dear Thomas Petazzoni,

2015-04-13 23:10 GMT+02:00 Thomas Petazzoni
<thomas.petazzoni@free-electrons.com>:
> Dear Angelo Compagnucci,
>
> On Mon, 13 Apr 2015 16:43:08 +0200, Angelo Compagnucci wrote:
>
>> dependencies. Probably only python would suffice, cause python-sqlite
>> is always compiled with python cause it's selected.
>
> There is no such thing as python-sqlite. There is only python, which
> may or may not have the sqlite functionality. In such cases, what you
> have to do is:
>
>  1/ At the Config.in level, make sure you select the relevant options,
>     i.e BR2_PACKAGE_PYTHON_SQLITE (or BR2_PACKAGE_PYTHON3_SQLITE if you
>     want to support Python 3)
>
>  2/ At the .mk level, depend on the appropriate package, in this case
>     'python' (or 'python3')

Ok!

>> > This package has a setup.py. Any reason why you're not using it,
>> > together with the python-package infrastructure?
>>
>> I can try! Honestly, I've not explored the option cause web2py is self
>> contained and it doesn't require installation. It uses a writable
>> directory for served applications, so suing a custom directory un
>> /usr/share with writing permission setted to www-data seemed the most
>> sensible choice.
>
> Installing with python-package seems to work, but it does not install
> the web2py.py program itself, so it should be done separately.

Yes, I tried and it's practically useless.

> Also, it
> is a bit weird that the whole thing has to be part of a www-data
> writable directory, no?

Honestly, more or less all the application framework I saw in the past
runs in a www-data owned directory, I can think of joomla, redmine an
many others I poked with.
Probably do you want a more finer grain in the permission table, like
giving writable permissions only to the directories that really need
it, I can try!

Thank you!

>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
Thomas Petazzoni April 14, 2015, 8:56 a.m. UTC | #5
Dear Angelo Compagnucci,

On Tue, 14 Apr 2015 10:46:21 +0200, Angelo Compagnucci wrote:

> >> I can try! Honestly, I've not explored the option cause web2py is self
> >> contained and it doesn't require installation. It uses a writable
> >> directory for served applications, so suing a custom directory un
> >> /usr/share with writing permission setted to www-data seemed the most
> >> sensible choice.
> >
> > Installing with python-package seems to work, but it does not install
> > the web2py.py program itself, so it should be done separately.
> 
> Yes, I tried and it's practically useless.

Well, the setup.py can be fixed to also install web2py.py, or the
web2py.py can be installed by Buildroot separately, using a post
install hook.

> Honestly, more or less all the application framework I saw in the past
> runs in a www-data owned directory, I can think of joomla, redmine an
> many others I poked with.
> Probably do you want a more finer grain in the permission table, like
> giving writable permissions only to the directories that really need
> it, I can try!

Well, if the Python modules of web2py get installed by the setup.py
script, they are installed in /usr/lib/python<version>/site-packages/.
And clearly, we do not want to directory to be owned by www-data.

Best regards,

Thomas
Angelo Compagnucci April 14, 2015, 10:31 a.m. UTC | #6
Dear Thomas Petazzoni,

2015-04-14 10:56 GMT+02:00 Thomas Petazzoni
<thomas.petazzoni@free-electrons.com>:
> Dear Angelo Compagnucci,
>
> On Tue, 14 Apr 2015 10:46:21 +0200, Angelo Compagnucci wrote:
>
>> >> I can try! Honestly, I've not explored the option cause web2py is self
>> >> contained and it doesn't require installation. It uses a writable
>> >> directory for served applications, so suing a custom directory un
>> >> /usr/share with writing permission setted to www-data seemed the most
>> >> sensible choice.
>> >
>> > Installing with python-package seems to work, but it does not install
>> > the web2py.py program itself, so it should be done separately.
>>
>> Yes, I tried and it's practically useless.
>
> Well, the setup.py can be fixed to also install web2py.py, or the
> web2py.py can be installed by Buildroot separately, using a post
> install hook.

honestly, i don't think it's really necessary to use python distutils
infrastructure to install web2py, it's not even considered in the
official documentation. Probably because the installation is ususally
don copying web2py in a folder reacheable by apache and configuring it
for use with wsgi, or via the internal webserver.
The official setup-web2py-ubuntu.sh distributed with the application
makes a /home/www-data directory and adds a apache/wsgi virtualhost.

>> Honestly, more or less all the application framework I saw in the past
>> runs in a www-data owned directory, I can think of joomla, redmine an
>> many others I poked with.
>> Probably do you want a more finer grain in the permission table, like
>> giving writable permissions only to the directories that really need
>> it, I can try!
>
> Well, if the Python modules of web2py get installed by the setup.py
> script, they are installed in /usr/lib/python<version>/site-packages/.
> And clearly, we do not want to directory to be owned by www-data.

Yes, true, cause web2py is usually installed as an apache served
application in an apache www-data owned directory.
For the of simplicity, I choose to adopt the same method, but without
using an apache virtualhost way too overkill, but use the internal
webserver.

I'm preparing a new patch in which web2py will be installed in the
more suited /var/www/ directory.

Sincerely, Angelo

>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 839b80a..fd4296c 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -618,6 +618,7 @@  menu "external python modules"
 	source "package/python-twisted/Config.in"
 	source "package/python-urwid/Config.in"
 	source "package/python-versiontools/Config.in"
+	source "package/python-web2py/Config.in"
 	source "package/python-webpy/Config.in"
 	source "package/python-werkzeug/Config.in"
 	source "package/python-ws4py/Config.in"
diff --git a/package/python-web2py/Config.in b/package/python-web2py/Config.in
new file mode 100644
index 0000000..c376856
--- /dev/null
+++ b/package/python-web2py/Config.in
@@ -0,0 +1,26 @@ 
+config BR2_PACKAGE_PYTHON_WEB2PY
+	bool "python-web2py"
+	depends on BR2_PACKAGE_PYTHON
+	select BR2_PACKAGE_PYTHON_PYDAL
+	select BR2_PACKAGE_ZLIB
+	select BR2_PACKAGE_PYTHON_ZLIB
+	select BR2_PACKAGE_EXPAT
+	select BR2_PACKAGE_PYTHON_PYEXPAT
+	select BR2_PACKAGE_SQLITE
+	select BR2_PACKAGE_PYTHON_SQLITE
+	help
+	  web2py is a free open source full-stack framework for rapid
+	  development of fast, scalable, secure and portable
+	  database-driven web-based applications.
+
+	  http://web2py.com
+
+if BR2_PACKAGE_PYTHON_WEB2PY
+
+config BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD
+	string "admin panel password"
+	default web2py
+	help
+	  Set the admin panel password.
+
+endif
diff --git a/package/python-web2py/S51web2py b/package/python-web2py/S51web2py
new file mode 100644
index 0000000..55a2ad8
--- /dev/null
+++ b/package/python-web2py/S51web2py
@@ -0,0 +1,25 @@ 
+#!/bin/sh
+
+case "$1" in
+	start)
+		echo -n "Starting web2py: "
+		start-stop-daemon -S -q -m -p /run/web2py.pid \
+			-c www-data \
+			-b -x /usr/share/web2py/web2py.py \
+			-- --nogui -a '"<recycle>"' -i 0.0.0.0 -p 8000
+		[ $? = 0 ] && echo "OK" || echo "FAIL"
+		;;
+	stop)
+		echo -n "Stopping web2py: "
+		start-stop-daemon -K -q -p /run/web2py.pid
+		[ $? = 0 ] && echo "OK" || echo "FAIL"
+		;;
+	restart)
+		"$0" stop
+		sleep 1
+		"$0" start
+		;;
+	*)
+		echo "Usage: $0 {start|stop|restart}"
+		;;
+esac
diff --git a/package/python-web2py/python-web2py.mk b/package/python-web2py/python-web2py.mk
new file mode 100644
index 0000000..828b662
--- /dev/null
+++ b/package/python-web2py/python-web2py.mk
@@ -0,0 +1,46 @@ 
+################################################################################
+#
+# python-web2py
+#
+################################################################################
+
+PYTHON_WEB2PY_VERSION = R-2.10.3
+PYTHON_WEB2PY_SITE = https://github.com/web2py/web2py.git
+PYTHON_WEB2PY_SITE_METHOD = git
+PYTHON_WEB2PY_LICENSE = LGPLv3
+PYTHON_WEB2PY_LICENSE_FILES = LICENSE
+PYTHON_WEB2PY_DEPENDENCIES = python sqlite
+
+define PYTHON_WEB2PY_PYDAL_COPY
+	cp -rf $(PYTHON_PYDAL_SRCDIR)/*  $(@D)/gluon/packages/dal/
+endef
+
+PYTHON_WEB2PY_POST_EXTRACT_HOOKS += PYTHON_WEB2PY_PYDAL_COPY
+
+define PYTHON_WEB2PY_INSTALL_TARGET_CMDS
+	$(HOST_DIR)/usr/bin/python2 -c 'import os; \
+		os.chdir("$(@D)"); \
+		from gluon.main import save_password; \
+		save_password($(BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD),8000)'
+	mkdir -p $(TARGET_DIR)/usr/share/web2py
+	cp -dpfr $(@D)/* $(TARGET_DIR)/usr/share/web2py
+endef
+
+define PYTHON_WEB2PY_INSTALL_INIT_SYSV
+	$(INSTALL) -m 0755 -D package/python-web2py/S51web2py \
+		$(TARGET_DIR)/etc/init.d/S51web2py
+endef
+
+define PYTHON_WEB2PY_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 0644 package/python-web2py/web2py.service \
+		$(TARGET_DIR)/etc/systemd/system/web2py.service
+	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+	ln -fs ../web2py.service \
+		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/web2py.service
+endef
+
+define PYTHON_WEB2PY_PERMISSIONS
+	/usr/share/web2py  r  750  www-data  www-data  -  -  -  -  -
+endef
+
+$(eval $(generic-package))
diff --git a/package/python-web2py/web2py.service b/package/python-web2py/web2py.service
new file mode 100644
index 0000000..87d0416
--- /dev/null
+++ b/package/python-web2py/web2py.service
@@ -0,0 +1,11 @@ 
+[Unit]
+Description=Web2py daemon
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/share/web2py/web2py.py --nogui -a '<recycle>' -i 0.0.0.0 -p 8000
+User=www-data
+
+[Install]
+WantedBy=multi-user.target