From 86834e13c4e225b499700ba57267b6d8caa418ac Mon Sep 17 00:00:00 2001 From: Dominic Ricottone Date: Fri, 22 Nov 2024 16:31:43 -0600 Subject: [PATCH] MoinMoin 1.9 running in PyPy --- moin/.gitignore | 1 + moin/Dockerfile | 22 +++++ moin/Makefile | 13 +++ moin/moin.wsgi | 49 +++++++++++ moin/rhtml/rhtml.py | 24 ++++++ moin/uwsgi.ini | 15 ++++ moin/wikiconfig.py | 203 ++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 327 insertions(+) create mode 100644 moin/.gitignore create mode 100644 moin/Dockerfile create mode 100644 moin/Makefile create mode 100644 moin/moin.wsgi create mode 100644 moin/rhtml/rhtml.py create mode 100644 moin/uwsgi.ini create mode 100644 moin/wikiconfig.py diff --git a/moin/.gitignore b/moin/.gitignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/moin/.gitignore @@ -0,0 +1 @@ +dist diff --git a/moin/Dockerfile b/moin/Dockerfile new file mode 100644 index 0000000..ea76d55 --- /dev/null +++ b/moin/Dockerfile @@ -0,0 +1,22 @@ +FROM registry.intra.dominic-ricottone.com/uwsgi:latest + +USER root + +COPY dist/moin-1.9.11 /var/moin +RUN cd /var/moin && pypy setup.py install + +RUN cp -r /usr/lib/pypy/share/moin/server /var/www/ +RUN cp -r /usr/lib/pypy/share/moin/underlay /var/www/ +#Eventually... COPY rhtml/* /var/www/data/plugin/parser/ +COPY moin.wsgi /var/www/ +COPY uwsgi.ini /var/www/ +COPY wikiconfig.py /var/www/ + +RUN chown 100:101 /var/www/uwsgi.ini +RUN chown 100:101 /var/www/moin.wsgi +RUN chown 100:101 /var/www/wikiconfig.py +RUN chown -R 100:101 /var/www/server +RUN chown -R 100:101 /var/www/underlay + +USER uwsgi + diff --git a/moin/Makefile b/moin/Makefile new file mode 100644 index 0000000..6c50259 --- /dev/null +++ b/moin/Makefile @@ -0,0 +1,13 @@ +CONMAN=sudo docker + +REGISTRY=registry.intra.dominic-ricottone.com +IMAGE=moin +TAG=latest + +image: + $(CONMAN) buildx build --push --progress=plain \ + --platform linux/arm64,linux/amd64 \ + --tag $(REGISTRY)/$(IMAGE):$(TAG) \ + . + +.PHONY: image diff --git a/moin/moin.wsgi b/moin/moin.wsgi new file mode 100644 index 0000000..8aedf21 --- /dev/null +++ b/moin/moin.wsgi @@ -0,0 +1,49 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - mod_wsgi driver script + + To use this, add those statements to your Apache's VirtualHost definition: + + # you will invoke your moin wiki at the root url, like http://servername/FrontPage: + WSGIScriptAlias / /some/path/moin.wsgi + + # create some wsgi daemons - use someuser.somegroup same as your data_dir: + WSGIDaemonProcess daemonname user=someuser group=somegroup processes=5 threads=10 maximum-requests=1000 umask=0007 + + # use the daemons we defined above to process requests! + WSGIProcessGroup daemonname + + @copyright: 2008 by MoinMoin:ThomasWaldmann + @license: GNU GPL, see COPYING for details. +""" + +import sys + +# a) Configuration of Python's code search path +# If you already have set up the PYTHONPATH environment variable for the +# stuff you see below, you don't need to do a1) and a2). + +# a1) Path of the directory where the MoinMoin code package is located. +# Needed if you installed with --prefix=PREFIX or you didn't use setup.py. +#sys.path.insert(0, 'PREFIX/lib/python2.7/site-packages') + +# a2) Path of the directory where wikiconfig.py / farmconfig.py is located. +# See wiki/config/... for some sample config files. +sys.path.insert(0, '/var/www') +#sys.path.insert(0, '/path/to/farmconfigdir') + +# b) Configuration of moin's logging +# If you have set up MOINLOGGINGCONF environment variable, you don't need this! +# You also don't need this if you are happy with the builtin defaults. +# See wiki/config/logging/... for some sample config files. +#from MoinMoin import log +#log.load_config('/path/to/logging_configuration_file') + +from MoinMoin.web.serving import make_application + +# Creating the WSGI application +# use shared=True to have moin serve the builtin static docs +# use shared=False to not have moin serve static docs +# use shared='/my/path/to/htdocs' to serve static docs from that path +application = make_application(shared=True) + diff --git a/moin/rhtml/rhtml.py b/moin/rhtml/rhtml.py new file mode 100644 index 0000000..2174cd8 --- /dev/null +++ b/moin/rhtml/rhtml.py @@ -0,0 +1,24 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - Raw HTML Parser + + @copyright: 2010 by Chris Martino + @license: GNU GPL. +""" + +from MoinMoin.parser._ParserBase import ParserBase + +Dependencies = ['user'] + +class Parser(ParserBase): + + parsername = "RawHTML" + Dependencies = [] + + def __init__(self, raw, request, **kw): + self.raw = raw + self.request = request + + def format(self, formatter): + self.request.write(formatter.rawHTML(self.raw)) + diff --git a/moin/uwsgi.ini b/moin/uwsgi.ini new file mode 100644 index 0000000..27fc9e0 --- /dev/null +++ b/moin/uwsgi.ini @@ -0,0 +1,15 @@ +[uwsgi] +uid = uwsgi +gid = uwsgi +socket = :9000 + +chdir = /var/www +pypy-wsgi-file = /var/www/moin.wsgi +need-app = false + +master +workers = 3 +max-requests = 200 +harakiri = 60 +die-on-term + diff --git a/moin/wikiconfig.py b/moin/wikiconfig.py new file mode 100644 index 0000000..03b3356 --- /dev/null +++ b/moin/wikiconfig.py @@ -0,0 +1,203 @@ +# -*- coding: iso-8859-1 -*- +# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a +# western country and you don't know that you use utf-8, you probably want to +# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode +# encoding) you MUST use: coding: utf-8 +# That setting must match the encoding your editor uses when you modify the +# settings below. If it does not, special non-ASCII chars will be wrong. + +""" + MoinMoin - Configuration for a single wiki + + If you run a single wiki only, you can omit the farmconfig.py config + file and just use wikiconfig.py - it will be used for every request + we get in that case. + + Note that there are more config options than you'll find in + the version of this file that is installed by default; see + the module MoinMoin.config.multiconfig for a full list of names and their + default values. + + Also, the URL http://moinmo.in/HelpOnConfiguration has + a list of config options. + + ** Please do not use this file for a wiki farm. Use the sample file + from the wikifarm directory instead! ** +""" + +from MoinMoin.config import multiconfig, url_prefix_static + +class Config(multiconfig.DefaultConfig): + + # Critical setup --------------------------------------------------- + + # Directory containing THIS wikiconfig: + wikiconfig_dir = '/var/www' + + # We assume that this config file is located in the instance directory, like: + # instance_dir/ + # wikiconfig.py + # data/ + # underlay/ + # If that's not true, feel free to just set instance_dir to the real path + # where data/ and underlay/ is located: + #instance_dir = '/where/ever/your/instance/is' + instance_dir = wikiconfig_dir + + # Where your own wiki pages are (make regular backups of this directory): + #data_dir = os.path.join(instance_dir, 'data', '') # path with trailing / + data_dir = '/var/www/data/' + + # Where system and help pages are (you may exclude this from backup): + #data_underlay_dir = os.path.join(instance_dir, 'underlay', '') # path with trailing / + data_underlay_dir = '/var/www/underlay/' + + # The URL prefix we use to access the static stuff (img, css, js). + # Note: moin runs a static file server at url_prefix_static path (relative + # to the script url). + # If you run your wiki script at the root of your site (/), just do NOT + # use this setting and it will automatically work. + # If you run your wiki script at /mywiki, you need to use this: + #url_prefix_static = '/mywiki' + url_prefix_static + + + # Wiki identity ---------------------------------------------------- + + # Site name, used by default for wiki name-logo [Unicode] + sitename = u'Wikittone' + + # Wiki logo. You can use an image, text or both. [Unicode] + # For no logo or text, use '' - the default is to show the sitename. + # See also url_prefix setting below! + logo_string = u'MoinMoin Logo' % url_prefix_static + + # name of entry page / front page [Unicode], choose one of those: + + page_front_page = u"WikiTtone" + + # a) if most wiki content is in a single language + #page_front_page = u"MyStartingPage" + + # b) if wiki content is maintained in many languages + #page_front_page = u"FrontPage" + + # The interwiki name used in interwiki links + #interwikiname = u'UntitledWiki' + # Show the interwiki name (and link it to page_front_page) in the Theme, + # nice for farm setups or when your logo does not show the wiki's name. + #show_interwiki = 1 + + + # Security ---------------------------------------------------------- + + # This is checked by some rather critical and potentially harmful actions, + # like despam or PackageInstaller action: + superuser = [u"DominicRicottone", u"ChristianBrickhouse"] + + # Some actions are by default only enabled for superusers and disabled + # for everybody else. + # 'newaccount' is one of these (used to let visitors create new accounts). + # You can create wiki users on the shell by using "moin account create". + # A superuser also can use "Settings" -> "Switch user" to create users. + # If you need the newaccount action for everybody (e.g. to create your + # very first [superuser] account), you can (temporarily) enable it: + #actions_superuser = multiconfig.DefaultConfig.actions_superuser[:] + #actions_superuser.remove('newaccount') + + # Surge protection + # to disable... + surge_action_limits = None + # to enable... + # (count, dt) -> allow max. requests per
secs + # surge_action_limits = { + # 'show': (20, 60), + # 'raw': (20, 40), + # 'AttachFile': (60, 60), + # 'diff': (30, 60), + # 'fullsearch': (5, 60), + # 'edit': (10, 120), + # 'rss_rc': (1, 60), + # 'default': (30, 60), + #} + #surge_lockout_time = 3600 + + # IMPORTANT: grant yourself admin rights! replace YourName with + # your user name. See HelpOnAccessControlLists for more help. + # All acl_rights_xxx options must use unicode [Unicode] + acl_rights_before = u"DominicRicottone:read,write,delete,revert,admin" + + # This is the default ACL that applies to pages without an ACL. + # Adapt it to your needs, consider using an EditorGroup. + acl_rights_default = u"Trusted:read,write,delete,revert Known:read,write,delete,revert All:read" + + # The default (ENABLED) password_checker will keep users from choosing too + # short or too easy passwords. If you don't like this and your site has + # rather low security requirements, feel free to DISABLE the checker by: + password_checker = None + + # Link spam protection for public wikis (Uncomment to enable) + # Needs a reliable internet connection. + #from MoinMoin.security.antispam import SecurityPolicy + + + # Mail -------------------------------------------------------------- + + # Configure to enable subscribing to pages (disabled by default) + # or sending forgotten passwords. + + # SMTP server, e.g. "mail.provider.com" (None to disable mail) + #mail_smarthost = "" + + # The return address, e.g u"Jürgen Wiki " [Unicode] + #mail_from = u"" + + # "user pwd" if you need to use SMTP AUTH + #mail_login = "" + + + # User interface ---------------------------------------------------- + + # Add your wikis important pages at the end. It is not recommended to + # remove the default links. Leave room for user links - don't use + # more than 6 short items. + # You MUST use Unicode strings here, but you need not use localized + # page names for system and help pages, those will be used automatically + # according to the user selected language. [Unicode] + navi_bar = [ + # If you want to show your page_front_page here: + #u'%(page_front_page)s', + u'RecentChanges', + u'FindPage', + u'HelpContents', + ] + + # The default theme anonymous or new users get + theme_default = 'modernized' + + + # Language options -------------------------------------------------- + + # See http://moinmo.in/ConfigMarket for configuration in + # YOUR language that other people contributed. + + # The main wiki language, set the direction of the wiki pages + language_default = 'en' + + # the following regexes should match the complete name when used in free text + # the group 'all' shall match all, while the group 'key' shall match the key only + # e.g. CategoryFoo -> group 'all' == CategoryFoo, group 'key' == Foo + # moin's code will add ^ / $ at beginning / end when needed + # You must use Unicode strings here [Unicode] + page_category_regex = ur'(?PCategory(?P(?!Template)\S+))' + page_dict_regex = ur'(?P(?P\S+)Dict)' + page_group_regex = ur'(?P(?P\S+)Group)' + page_template_regex = ur'(?P(?P\S+)Template)' + + # Content options --------------------------------------------------- + + # Show users hostnames in RecentChanges + show_hosts = 1 + + # Enable graphical charts, requires gdchart. + #chart_options = {'width': 600, 'height': 300} + -- 2.45.2