Message ID | 1428933447-32061-3-git-send-email-angelo.compagnucci@gmail.com |
---|---|
State | Superseded |
Headers | show |
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
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
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
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
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
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 --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
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