[Mailman-Users] Mailman 3 confusion

Mark Lindsay mark at nervous.org
Sun Jun 18 13:03:24 EDT 2017


Hi Tlhackque,

I went through a similar battle with installing Mailman 3 but emerged
victorious in the end. Here are some tips that might help you out.

- There are several places where you can find Mailman 3 docs. It is
confusing. The most complete documentation I found is here:
https://mailman.readthedocs.io/en/latest/src/mailman/docs/install.html

- Don't use mailman bundler

- Start with installing just Mailman 3 Core. Core is the part of Mailman 3
that talks to your mail server and controls lists and members of lists.
Leave Postorius and Hyperkitty out of it until you have Core running and
you understand what it is doing. You can work directly with Mailman 3 using
`mailman shell` or the Mailman 3 Core REST API
https://mailman.readthedocs.io/en/latest/src/mailman/rest/docs/rest.html

- Mailman 3 Core indeed requires python 3

- Use Python's `virtualenv -p python3` to install Mailman 3 Core. It looks
like a lot of the problems you're having are because of dependency/version
hell. virtualenv will help with this. Successfully dockerizing Mailman 3
Core will help even more! I read over on the Mailman 3 Users list that an
install process using Docker will soon be the canonical way to install
Mailman 3, which is great.

- Use a SQL backend with Mailman 3 Core that allows you to inspect its DB
tables directly. This is so you can see what it is doing behind the scenes
when you interact with it via `mailman shell` or the REST API. The DB
schema is sane and easy to navigate.
https://mailman.readthedocs.io/en/latest/src/mailman/docs/database.html

- I really like that I was able to install Mailman 3 Core right in a
non-privileged user's home directory.  My server is just a stock Ubuntu AWS
EC2 instance. My Mailman 3 Core install is in `/home/ubuntu/mailman` with a
configuration file of `/home/ubuntu/mailman/var/etc/mailman.cfg`. I am
running Mailman 3 Core in production from the regular `ubuntu` user's home
directory in a virtualenv. I do not know if this is the recommended way to
do it, but the documentation is especially sparse in this area, and it
seems to work!

As best I can remember (it's been a couple months), here are the steps I
followed to get it up and running:

1. `cd ~`
2. `git clone https://gitlab.com/mailman/mailman.git`
3. `cd mailman`
4. `virtualenv -p python3 venv`
5. `source venv/bin/activate`
6. `python setup.py develop`
7. I am pretty sure this setup command will place a configuration file into
`~/mailman/var/etc/mailman.cfg`. Edit this file.
https://mailman.readthedocs.io/en/latest/src/mailman/config/docs/config.html
8. `mailman info` can confirm which configuration file is in use
9. `mailman start` will start up Mailman 3 Core. This is what the parent
background process command looks like in `ps -ef`:
`/home/ubuntu/mailman/venv/bin/python /home/ubuntu/mailman/venv/bin/master
-C /home/ubuntu/mailman/var/etc/mailman.cfg`
10. Logs are in ~/mailman/var/logs

It is not a straightforward install process and requires a little detective
work based on your environment and mail server. I had the disadvantage of
never being a Mailman 2 user, so a big chunk of my learning curve was
understanding Mailman terminology and its way of doing things.

I still do not have Postorius or Hyperkitty installed. My use case is a
PHP-based CMS which administers Mailman 3 Core via its REST API. I wrote a
quick and dirty PHP client and it works surprisingly well. Mailman 3 Core
has been solid in production and easy to deal with via the REST API.

Good luck, and you might want to check out the Mailman 3-specific users
list here:
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/

On Sat, Jun 17, 2017 at 5:14 PM, tlhackque via Mailman-Users <
mailman-users at python.org> wrote:

> I took another look at installing Mailman 3, and ended up lost and
> confused.  I'm an experienced software person - but my Python knowledge
> is minimal.
>
> Fedora 25, python 3.5.3, pretty much out of the box.
>
> Mailman version: 3.1.0 (The other bits and pieces are current - 1.1)
>
> I tried to follow the documentation on
> http://docs.list.org/en/latest/prodsetup.html,
>
> http://mailman-3-installation.readthedocs.io/en/latest/
> production_install.html
> claims that the backend requires Python 3.4, but the frontend 2.7.  Not
> clear if this is credible, but it's out there...
>
> https://wiki.list.org/Mailman3 points to Mark Sapiro's experience on
> https://wiki.list.org/DOC/Mailman%203%20installation%20experience  This
> starts off with "For both installs I started with mailman-bundler."
> But https://gitlab.com/mailman/mailman-bundler says "All of this
> documentation is obsolete!  Mailman Bundler is no longer recommended or
> supported. "  So...
>
> I have yet to find a step-by-step 'bare OS to running MM3" document.
> I've run MM2.1 lists for years, it wasn't this hard to get started.
> Just install and edit one config file (plus the webserver.).  I don't
> want to learn a zillion other technologies just to get started - e.g.
>
> But, I decided to see how far I could get.  I tried this, based on pip
> search mailman:
>
> dnf install python3 python3-devel (gets 3.5.3)
> pip3 install mailman postorius mailmanclient HyperKitty
> mailman-hyperkitty KittyStore
>
> All went well until KittyStore, which (0.9.3 is what pip found) died with:
> Collecting storm (from KittyStore)
>   Downloading storm-0.20.tar.bz2 (213kB)
>     100% |################################| 215kB 318kB/s
>     Complete output from command python setup.py egg_info:
>     Traceback (most recent call last):
>       File "<string>", line 1, in <module>
>       File "/tmp/pip-build-wzs03r_4/storm/setup.py", line 5, in <module>
>         import ez_setup
>       File "/tmp/pip-build-wzs03r_4/storm/ez_setup.py", line 106
>         except pkg_resources.VersionConflict, e:
>                                             ^
>     SyntaxError: invalid syntax
>
> Well, set that aside, and install the rest, which seems to work.
>
> Try again with KittyStore, same failure.  So maybe skip the archive for
> now.
>
> Try 'mailman info', another syntax error.
>
> Traceback (most recent call last):
>   File
> "/usr/lib/python3.5/site-packages/zope/configuration/xmlconfig.py", line
> 272, in endElementNS
>     self.context.end()
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 345, in end
>     self.stack.pop().finish()
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 452, in finish
>     args = toargs(context, *self.argdata)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 794, in toargs
>     args[str(name)] = field.fromUnicode(s)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/fields.py",
> line 73, in fromUnicode
>     value = self.context.resolve(name)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 151, in resolve
>     mod = __import__(mname, *_import_chickens)
>   File "/usr/lib/python3.5/site-packages/mailman/database/factory.py",
> line 22, in <module>
>     import alembic.command
>   File "/usr/lib/python3.5/site-packages/alembic/command.py", line 3, in
> <module>
>     from .script import ScriptDirectory
>   File "/usr/lib/python3.5/site-packages/alembic/script/__init__.py",
> line 1, in <module>
>     from .base import ScriptDirectory, Script  # noqa
>   File "/usr/lib/python3.5/site-packages/alembic/script/base.py", line
> 2, in <module>
>     from dateutil import tz
>   File "/usr/lib/python3.5/site-packages/dateutil/tz.py", line 78
>     `self._name`,
>     ^
> SyntaxError: invalid syntax
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
>   File "/usr/bin/mailman", line 9, in <module>
>     load_entry_point('mailman==3.1.0', 'console_scripts', 'mailman')()
>   File "/usr/lib/python3.5/site-packages/mailman/bin/mailman.py", line
> 97, in main
>     initialize(config_path)
>   File "/usr/lib/python3.5/site-packages/mailman/core/initialize.py",
> line 184, in initialize
>     initialize_1(config_path)
>   File "/usr/lib/python3.5/site-packages/mailman/core/initialize.py",
> line 101, in initialize_1
>     xmlconfig.string(zcml.decode('utf-8'))
>   File
> "/usr/lib/python3.5/site-packages/zope/configuration/xmlconfig.py", line
> 513, in string
>     processxmlfile(f, context)
>   File
> "/usr/lib/python3.5/site-packages/zope/configuration/xmlconfig.py", line
> 295, in processxmlfile
>     parser.parse(src)
>   File "/usr/lib64/python3.5/xml/sax/expatreader.py", line 110, in parse
>     xmlreader.IncrementalParser.parse(self, source)
>   File "/usr/lib64/python3.5/xml/sax/xmlreader.py", line 125, in parse
>     self.feed(buffer)
>   File "/usr/lib64/python3.5/xml/sax/expatreader.py", line 210, in feed
>     self._parser.Parse(data, isFinal)
>   File "/builddir/build/BUILD/Python-3.5.3/Modules/pyexpat.c", line 468,
> in EndElement
>   File "/usr/lib64/python3.5/xml/sax/expatreader.py", line 370, in
> end_element_ns
>     self._cont_handler.endElementNS(pair, None)
>   File
> "/usr/lib/python3.5/site-packages/zope/configuration/xmlconfig.py", line
> 281, in endElementNS
>     None, sys.exc_info()[2])
>   File "/usr/lib/python3.5/site-packages/zope/configuration/_compat.py",
> line 38, in reraise
>     raise value.with_traceback(tb)
>   File
> "/usr/lib/python3.5/site-packages/zope/configuration/xmlconfig.py", line
> 272, in endElementNS
>     self.context.end()
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 345, in end
>     self.stack.pop().finish()
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 452, in finish
>     args = toargs(context, *self.argdata)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 794, in toargs
>     args[str(name)] = field.fromUnicode(s)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/fields.py",
> line 73, in fromUnicode
>     value = self.context.resolve(name)
>   File "/usr/lib/python3.5/site-packages/zope/configuration/config.py",
> line 151, in resolve
>     mod = __import__(mname, *_import_chickens)
>   File "/usr/lib/python3.5/site-packages/mailman/database/factory.py",
> line 22, in <module>
>     import alembic.command
>   File "/usr/lib/python3.5/site-packages/alembic/command.py", line 3, in
> <module>
>     from .script import ScriptDirectory
>   File "/usr/lib/python3.5/site-packages/alembic/script/__init__.py",
> line 1, in <module>
>     from .base import ScriptDirectory, Script  # noqa
>   File "/usr/lib/python3.5/site-packages/alembic/script/base.py", line
> 2, in <module>
>     from dateutil import tz
> zope.configuration.xmlconfig.ZopeXMLConfigurationError: File "<string>",
> line 65.2-69.6
>     SyntaxError: invalid syntax (tz.py, line 78)
>
> And the same traceback from 'mailman start'
>
> https://pythonhosted.org/mailman/src/mailman/docs/START.html refers to
> src/mailman/config/schema.cfg,
> /usr/lib/python3.5/site-packages/mailman/config/schema.cfg exists.
>
> http://docs.list.org/en/latest/prodsetup.html refers to "Your Django
> Site's settings.py".  I don't have any (other) Django sites.  "locate"
> turns up
> /usr/lib/python3.5/site-packages/django/conf/global_settings.py, but it
> looks to me as if Mailman needs one (or maybe one/list) Django site.
>
> Bottom line - I'd like to try Mailman 3 for a new project - especially
> since I pre-process inbound mail, and will have to speak LMTP.  But I'm
> lost trying to follow the scattered docs that try to explain how to
> bring it up.
>
> Any pointers, or efforts to record a from-scratch install would be
> appreciated.
>
> Also, is version 3 supplying equivalents to the Mailman 2.1 list_lists
> and config_list utilities, or do I have to interface to the new REST
> API?  (For the latter, I only really need to import and export the
> topics definitions....)
>
>
>
>
> ------------------------------------------------------
> Mailman-Users mailing list Mailman-Users at python.org
> https://mail.python.org/mailman/listinfo/mailman-users
> Mailman FAQ: http://wiki.list.org/x/AgA3
> Security Policy: http://wiki.list.org/x/QIA9
> Searchable Archives: http://www.mail-archive.com/
> mailman-users%40python.org/
> Unsubscribe: https://mail.python.org/mailman/options/mailman-users/
> mark%40nervous.org
>


More information about the Mailman-Users mailing list