Re: Time Stand Still
by Fabian A. Santiago
On November 23, 2017 11:38:00 AM EST, Barry Warsaw <barry(a)list.org> wrote:
>Somewhen in the dark recesses of intarweb history, I found myself as
>the project leader for both Jython (née JPython) and GNU Mailman. I'd
>been involved with Jython since it was invented by Jim Hugunin around
>the time he came to work with us at Pythonlabs. I'd been contributing
>to Mailman since we inherited John Viega's Python-based Dave Matthews
>Band list server, and put it to use replacing python.org's Majordomo
>installation.
>
>I'd enjoyed both projects, but knew I could not lead both, so I had to
>make a choice. I chose to turn over Jython to a team that's done a
>much better job over the years than I ever could have. Something about
>email, and especially the communication and collaboration patterns that
>it facilitates, really fascinated me. I know, I know, but we all have
>our lapses of sanity. Mine has lasted almost 20 years, a bit more than
>"momentary" perhaps.
>
>I've rarely gotten paid to work on Mailman, but it did provide me some
>great opportunities. Most notably it led to my 10 year stint at
>Canonical. I was originally hired on there to integrate mailing lists
>with Launchpad, and Mailman was the obvious choice. I learned a ton
>doing that project, and working within the constraints of integrating
>the two Python-based systems, especially since Launchpad was originally
>not free software and Mailman was GPL'd. Later, the Zope-based
>Launchpad source code was released under the AGPL, making much of the
>monkeypatching unnecessary, but by then the system was solid and
>reliable, and you don't fix what's not broken.
>
>Except, I guess I did. I took a lot of the lessons from that work,
>along with a good hard look at all the problems with Mailman 2, and
>began to break another cardinal rule of software development: second
>system syndrome. The result is Mailman 3. It took forever, and we're
>still not at complete feature parity with Mailman 2, but at least it's
>Real Enough to be used at many Real Sites, including python.org and
>lists.fedoraprojects.org.
>
>It would be ridiculous for me to take significant credit for this. I
>have to acknowledge the amazing user community -- you! -- for all the
>support, patches, suggestions, feedback, patience, criticism,
>donations, and contributions that you've given to the project, and to
>me personally over the years. And my deepest gratitude goes to all the
>core developers that have stayed or come and gone, but most especially
>the current Cabal: Abhilash Raj, Aurelien Bompard, Florian Fuchs, Mark
>Sapiro, Stephen J. Turnbull, Terri Oda. You should know that each and
>every one of them is truly awesome, both in what they contribute
>technically, and in their amazing friendships. Mailman is infinitely
>better because of their involvement, and I've loved spending time with
>them over the years at the Pycon sprints, making releases and sharing
>teas and meals.
>
>My blog is called We Fear Change, and that's humorously taken from a
>90's bit in Mike Myer's excellent Wayne's World movie (a phrase
>actually uttered by the brilliant Dana Carvey as Garth). The irony of
>course is that while we all may fear change, it's the one constant
>thing we can count on. And in fact, we *require* change to thrive,
>because if you aren't changing, you aren't alive. Time, and being
>engaged with life's vagaries, means there's no alternative to change;
>it must be embraced.
>
>And so, with a vague reference to the many (good!) changes in my
>personal and professional life, I'm announcing that I'm stepping down
>from the project leadership role of GNU Mailman, effective... nowish!
>And it's with unanimous agreement among the GNU Mailman Steering
>Committee (a.k.a. the Mailman Cabal), that we are announcing Abhilash
>Raj as the new project leader.
>
>If you don't recognize Abhilash's name, you probably aren't paying
>attention, at least to Mailman 3. Abhilash came to us in 2013 as a
>Google Summer of Code student, and he's become one of the project's
>most valuable contributors. His list of accomplishments is long, and
>it includes everything from redesigning the website, to integrating CI
>with our GitLab build system, porting our code to the SQLAlchemy ORM,
>adding MySQL support, revving up adoption through his Docker images,
>along with his great coding work on Core, Postorius, HyperKitty, and
>mailmanclient.
>
>This transition is good for the project too. Email, its defining
>protocols and standards, and its role in our daily lives, has changed
>profoundly since the early days of Mailman. A fresh perspective and
>enthusiasm will help keep Mailman relevant to the changing ways we --
>especially the FLOSS and tech communities -- communicate.
>
>Please join me in supporting Abhilash in every way possible as he takes
>over in this new role as project leader. I'll be here when and if
>needed, even as I create space in my "spare" time for... Something
>Else. I look forward to the vision that Abhilash will bring to the
>project, and I know that he will do a great job. To me, Mailman has
>always been about collaboration, and the best
>way for it to succeed is for you to continue to contribute your
>insights, experiences, opinions, and skills with positive intention.
>
>-Barry
>
>https://www.wefearchange.org/
Congrats Abhilash! Love the docker images!
Thank you Barry! Mailman rocks!
--
Thanks,
Fabian S.
OpenPGP: 3C3FA072ACCB7AC5DB0F723455502B0EEB9070FC
7 years
Re: How To Install Mailman 3 on Debian 10 (Complete Guide)
by Brian Carpenter
On 2/25/21 10:35 PM, Abhilash Raj wrote:
> I think it is okay to be pick up a specific configuration and provide a
> guide to installation keeping that as the target technology. As it happens
> to be, the official doc uses the same set, Nginx, Postfix and PostgSQL.
>
> https://docs.mailman3.org/en/latest/install/virtualenv.html
Thank you for pointing the above out. I will keep track of the URLs you
provided in this thread and I am willing to also assist to try to make
sure such links are propagated via search engine results.
> I don't see anything very specific to Debian in the doc except the package
> names and I think they are similar enough in Debian derivative distros that
> we can write up that assumption up front in the top.
>
> Given that most of the installation is based off on pip, I don't think there is
> going to be a *lot* of deviation for even RHEL/Fedora based distros when it
> comes to Mailman itself. Some minute deviations could occur with the
> behavior of certain commands, like `nano` doesn't exist, but I still expect
> 95% of the doc to be the same, except obviously the package names.
I agree. One of my goals was to make it easy for Mailman 3 adopters to
use a different installation method other than a repo since distro
packages tend to install older versions of Mailman 3 core, Postorius,
and Hyperkitty. At this stage of Mailman 3 development, these new
versions bring a LOT of improvements to the Mailman 3 user.
I am also willing to start testing out my installation method on other
distros and document the differences. If you are willing to help me, I
have no problem posting installation instructions and tips to Mailman
3's official documentation. I am also more than willing to keep such
documentation up to date. I am always being called upon to install
Mailman 3 for someone, so I seem to be on the front-line when it comes
to "surprises" such as the issue with the cryptography module. That puts
me in a good position to update documentation simply because I need to
know such things for the next install.
> I am not that well versed in SEO, but the official website https://list.org
> does point to it. Maybe not prominently enough for new users to discover?
> I'll see if we can make the discovery of docs.mailman3.org better.
I think the issue I found was running into outdated documentation for
older versions of Mailman 3. Even doing a search for an up to date
changelog or release notes are problematic. Again, I am also willing to
help out with trying to get such vital pieces of information showing up
prominently in search results.
> I guess it is fine to be opinionated about choosing the technologies but
> yet provide pointers to help people using other technologies.
>
> Right now, I do that using "Hints" and "Notes" and "See also" banners
> through out the documentation to point to different pages where they
> can lookup setup for other technologies. For example, how to setup
> MySQL if official doc recommends Postgres.
Are there still any outstanding issues with using MySQL? I know I ran
into some when I tried to use MySQL and chose to go with PostgreSQL
(which I am so glad I did). I still recall even seeing some recent
issues brought to this list for someone using MySQL. I know MySQL is
very popular for websites so I do believe the momentum for someone to
set up a Mailman 3 server is to go with MySQL. Perhaps just putting up
some heads up warnings (here there be dragons!) IF there are still
issues out in the wild for those wanting to use MySQL with Mailman 3.
Personally I will always steer clients to PostgreSQL when I get a
chance. My own documentation reflects that bias.
> Gitlab has a fairly good experience editing REsT files and you don't
> necessarily
> have to do much outside of a Web Browser actually. It lets you preview before
> saving like wiki.list.org and you can submit it for review and merging into
> main repo.
>
> Would you be more willing to contribute to official documentation if we
> documented the Gitlab contribution process better?
Absolutely. My current installation documentation was the result of a
certain beautiful Mailman developer who I won't name (just protecting
your privacy Mark!) providing me assistance when I decided to go with
the certain installation direction. So if you scratch my back (i.e.
teach me Master for I am your student!) then I will scratch yours.
> Because we haven't yet gotten to updating those in the official docs,
> unfortunately. And there are more things missing like Fulltext search (Xapian
> recommended) and more of the Email setup like SPF and DKIM. Very much
> aligned with your plans, which is why I suggested contributing updates
> to docs.mailman3.org instead :)
Well show me how to update the documentation and I will certainly take
care of those things. I am also now comfortable in getting OpenDKIM
working with Mailman 3 so I can also provide documentation there as
well. I have done Xapian installations for clients but unfortunately did
not document my methods so I will need to work on that. How do you feel
about documentation for the use of Elasticsearch and Solr?
Remember, I was a Mailman 2 host for years using cPanel. cPanel took the
thinking of out a lot of things when it came to Mailman 2 hosting and I
don't have that crutch anymore with Mailman 3.
--
Brian Carpenter
Harmonylists.com
Emwd.com
3 years, 8 months
Re: Basic settings for a discussion list
by Abhilash Raj
On Sat, Aug 31, 2019, at 9:25 PM, paul(a)arenson.org wrote:
> Over the last 20 hours I have been trying to figure out setup for list
> members to sign up. One person has kindly helped out, though I am
> still unsure of the difference between the several signups. That
> thread is here and I welcome more advice.
>
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
>
> But it occurs to me that my problem is that I have not actually
> configured my list. So this thread is for help on that. I have found a
> guide for general users here:
> http://docs.mailman3.org/en/latest/userguide.html
>
> But I have only found a highly technical guide for administrators here:
> https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclien…
>
> It is written for coders and I am looking for a guide similar to the
> one for users. It seems not to exist yet.
>
> WHAT I WANT
> Discussion only list. Ideally anyone who signs up via the various ways
> should be able to get the archives and post via email and the interface
> if they want. The list should be closed to others.
>
> In the absence of any guide, all I can do is cross check with you guys
> and hope I am on the right track. I am non technical, although I
> managed a Mailman 2 list without difficulty.
>
>
> 1) FIRST ANOMALY
> Under https://list.tokyoprogressive.org/postorius/accounts/subscriptions/
> I see myself twice:
>
> List Name Subscription Address Delivery Mode Role
> discuss.list.tokyoprogressive.org paul(a)tokyoprogressive.org None member
> discuss.list.tokyoprogressive.org paul(a)tokyoprogressive.org regular owner
>
> Is this correct? I added My name in one field somewhere and this is the
> result. I even got a welcome message.
> I think it is because I subscribed to my own list.If this was not
> necessary, what should I do?
No, this isn't anomaly. Check out the "Role" column.
You are an "owner" of the list and are thus allowed to change the list settings. You are also a "member", which means you will get emails from this mailing list.
>
> Global based preferences are listed. Address and email based ones are
> not showing either enabled or disabled.
They are unset, which means they are set to whatever the default value in the backend is.
I know this is terrible in many regards, but we have an issue open for this. Hopefully, this will improve in future releases.
>
> 2) MANAGE LISTS
>
> For myself I have done the following in my MAILING LIST SETTINGS
>
> Subscribe to this list
> My email and name
> (Maybe that is why i am listed twice)
That's right.
>
> Now I see
>
> 3) Users
> For now only me- I am listed as member and owner.
> There will be no other moderators or owners
> I have no idea what a non member is (if they register aren't they a member?)
I explained non-member in other email you sent.
>
> 4) Templates
> This is showing nothing at this point. Before it was. I am not sure
> what i did to stop it from showing. Perhaps because I made it a private
> list?
If this is a new list, it will probably not have any templates.
>
> 5) Settings
> a) List identity
> I have it set for NOT SHOWING on the Index page because I will link to
> it from my news magazine website as a way to comment on articles. Is
> this ok? Other data will be filled in later. I think I am confusing
> this with private list. I also will have no other list.
>
> b) AUTO RESPOND LIST OWNER-- I added a short note thanking people.
> Respond and Continue Processing
>
> c) AUTO RESPOND POSTER--Your message has been been received. If you
> are a member, it should be posted soon. Respond and Continue Processing
>
> d) AUTO RESPOND REQUESTS--No auto response
> OTHER THINGS DEFAULT
>
> e) URL WELCOME MESSAGE--NOT SURE. I want people to subscribe
> themselves but I also have 500 people from another list from DADA I
> will import. I want them automatically be able to post. Is it
> possible? If so, I hope to add them manually. DO I compose a text on
> my website and welcome them by adding the URL, or enter it in my list?
This option is deprecated, and actually now removed.
>
> f) NOTIFY OF MEMBERSHIP CHANGES--Yes
>
> g) ALTER MESSAGES ---I have left most things as they are. However, as
> this is a discussion list, I want replies ONLY to go to the list. I
> chose that.
>
> h) DMARC --I have left as is
>
> i) DIGEST--I have left as is
>
>
> 6) MASS OPERATIONS--I have left as is
>
> 7) BAN--left as is
>
> 8) MESSAGE ACCEPTANCE--I have left as is
>
>
> 9) HEADER FILTERS--left as is
>
> 10) ARCHIVES--Private Archives (Maybe this is why templates do not show???)
>
> 11) SUBSCRIPTION POLICY--MODERATE-- I intend to send them an email to
> confirm their reasons for subscribing to avoid spammers.
>
> LAST THING. My Gravity does not work. I edited it online as per
> instructions but it does not appear.
>
> That is all I can think of.
>
> Thanks in advance.
>
> paul
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
5 years, 2 months
Re: Hyperkitty CPU usage
by Alain Kohli
I have not seen any improvement over time, so I switched the backend to
Xapian. That works like a charm now, I guess our lists were indeed just
too busy for whoosh.
On 5/7/19 5:15 PM, Alain Kohli wrote:
> Well, I understand that it might take a while, but the process is
> running for over 200h now, I doubt it can really take _that_ long if
> everything is working properly. Especially because the rebuild_index
> command is only taking a few hours at most, doesn't that essentially
> do the same?
>
> We have ~700k messages in ~300 mailing lists in case that helps you
> estimate how long it could take. I can take a look at alternative
> backends, though.
>
>
> On 5/7/19 4:32 PM, Abhilash Raj wrote:
>> On Sat, Apr 27, 2019, at 6:22 PM, Alain Kohli wrote:
>>> I'm running a custom image which is based on an older version of the
>>> one
>>> here: https://github.com/maxking/docker-mailman. I attached it below.
>>> But I separated postorius and hyperkitty, so hyperkitty is running in
>>> its own container. I'm deploying the image with a plain 'docker run'
>>> behind nginx. I made fulltext_index persistent now, but it didn't get
>>> populated with anything yet. I don't really have an error traceback
>>> because there is never an error thrown. The only thing with some
>>> content
>>> is uwsgi-error.log, which you can find below. I'm also still getting
>>> the
>>> "A string literal cannot contain NUL (0x00) characters." messages. I
>>> also noticed that it takes incredibly long for the webinterface to load
>>> (several minutes) even though there doesn't seem to be any process
>>> consuming notable resources apart from the minutely job.
>>>
>>> Funnily enough, I have the exact same image deployed on a second server
>>> as well for testing. On that one everything works fine. The only
>>> difference is that on the problematic one I have a lot more mailing
>>> lists/archives and that I imported them from mailman2. Could something
>>> have gone wrong during the import? I used the regular hyperkitty_import
>>> command.
>> Yes, this is because `whoosh`, the library set by default to run
>> fulltext
>> indexing is a pure python implementation and quite slow in busy lists.
>>
>> We do support more backends though, see [1] for a list of all the
>> supported
>> search backends. Something like Xapian(C++) or Elasticsearch/Solr(Java)
>> should be much better in terms of performance.
>>
>> [1]:
>> https://django-haystack.readthedocs.io/en/master/backend_support.html
>>
>>> uwsgi-error.log:
>>>
>>> *** Starting uWSGI 2.0.18 (64bit) on [Sat Apr 27 22:50:17 2019]
>>> ***
>>> compiled with version: 6.4.0 on 27 April 2019 22:48:42
>>> os: Linux-4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19)
>>> nodename: hyperkitty.docker
>>> machine: x86_64
>>> clock source: unix
>>> detected number of CPU cores: 4
>>> current working directory: /home/hyperkitty
>>> detected binary path: /usr/local/bin/uwsgi
>>> !!! no internal routing support, rebuild with pcre support !!!
>>> setgid() to 82
>>> setuid() to 82
>>> chdir() to /home/hyperkitty
>>> your memory page size is 4096 bytes
>>> detected max file descriptor number: 1048576
>>> lock engine: pthread robust mutexes
>>> thunder lock: disabled (you can enable it with --thunder-lock)
>>> uwsgi socket 0 bound to TCP address 0.0.0.0:8081 fd 8
>>> uwsgi socket 1 bound to TCP address 0.0.0.0:8080 fd 9
>>> Python version: 3.6.8 (default, Jan 30 2019, 23:54:38) [GCC 6.4.0]
>>> Python main interpreter initialized at 0x55dfaa41c980
>>> python threads support enabled
>>> your server socket listen backlog is limited to 100 connections
>>> your mercy for graceful operations on workers is 60 seconds
>>> [uwsgi-cron] command "./manage.py runjobs minutely" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly"
>>> registered
>>> as cron task
>>> [uwsgi-cron] command "./manage.py runjobs hourly" registered as
>>> cron
>>> task
>>> [uwsgi-cron] command "./manage.py runjobs daily" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs monthly" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs weekly" registered as
>>> cron
>>> task
>>> [uwsgi-cron] command "./manage.py runjobs yearly" registered as
>>> cron
>>> task
>>> mapped 208576 bytes (203 KB) for 4 cores
>>> *** Operational MODE: threaded ***
>>> WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter
>>> 0x55dfaa41c980 pid: 1 (default app)
>>> *** uWSGI is running in multiple interpreter mode ***
>>> spawned uWSGI master process (pid: 1)
>>> spawned uWSGI worker 1 (pid: 40, cores: 4)
>>> Sat Apr 27 22:50:18 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> minutely" (pid 45)
>>> [uwsgi-daemons] spawning "./manage.py qcluster" (uid: 82 gid: 82)
>>> 22:50:21 [Q] INFO Q Cluster-47 starting.
>>> 22:50:21 [Q] INFO Process-1:1 ready for work at 59
>>> 22:50:21 [Q] INFO Process-1:2 ready for work at 60
>>> 22:50:21 [Q] INFO Process-1:3 ready for work at 61
>>> 22:50:21 [Q] INFO Process-1:4 ready for work at 62
>>> 22:50:21 [Q] INFO Process-1:5 monitoring at 63
>>> 22:50:21 [Q] INFO Process-1 guarding cluster at 58
>>> 22:50:21 [Q] INFO Process-1:6 pushing tasks at 64
>>> 22:50:21 [Q] INFO Q Cluster-47 running.
>>> 22:59:31 [Q] INFO Enqueued 3403
>>> 22:59:31 [Q] INFO Process-1:1 processing [update_from_mailman]
>>> 22:59:33 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 73)
>>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> hourly" (pid 74)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 73 exited after 64 second(s)
>>> 23:01:28 [Q] INFO Enqueued 3404
>>> 23:01:29 [Q] INFO Process-1:2 processing
>>> [rebuild_mailinglist_cache_recent]
>>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>>> 74 exited after 91 second(s)
>>> Sat Apr 27 23:01:36 2019 - uwsgi_response_write_body_do(): Broken
>>> pipe [core/writer.c line 341] during GET / (212.203.58.154)
>>> OSError: write error
>>> 23:01:36 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>>> Sat Apr 27 23:15:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 88)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 88 exited after 4 second(s)
>>> 23:28:24 [Q] INFO Enqueued 3405
>>> 23:28:24 [Q] INFO Process-1:3 processing [update_from_mailman]
>>> 23:28:25 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:30:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 96)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 96 exited after 4 second(s)
>>> 23:44:40 [Q] INFO Enqueued 3406
>>> 23:44:40 [Q] INFO Process-1:4 processing [update_from_mailman]
>>> 23:44:41 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:45:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 104)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 104 exited after 4 second(s)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 113)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> hourly" (pid 114)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> daily" (pid 115)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> weekly" (pid 116)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 113 exited after 55 second(s)
>>> [uwsgi-cron] command "./manage.py runjobs weekly" running with pid
>>> 116 exited after 55 second(s)
>>> 00:01:36 [Q] INFO Enqueued 3407
>>> 00:01:36 [Q] INFO Process-1:1 processing
>>> [rebuild_mailinglist_cache_recent]
>>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>>> 114 exited after 99 second(s)
>>> 00:01:50 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>>> 00:04:52 [Q] INFO Enqueued 3408
>>> 00:04:52 [Q] INFO Process-1:2 processing [update_from_mailman]
>>> 00:04:54 [Q] INFO Processed [update_from_mailman]
>>>
>>> Dockerfile:
>>>
>>> FROM python:3.6-alpine3.7 # Add startup script to container COPY
>>> assets/docker-entrypoint.sh /usr/local/bin/ # Install packages and
>>> dependencies for hyperkitty and add user for executing apps. #
>>> It's
>>> important that the user has the UID/GID 82 so nginx can access the
>>> files. RUN set -ex \&& apk add --no-cache --virtual .build-deps
>>> gcc
>>> libc-dev linux-headers git \postgresql-dev \&& apk add --no-cache
>>> --virtual .mailman-rundeps bash sassc mailcap \postgresql-client
>>> curl \&& pip install -U django==2.2 \&& pip install
>>> git+https://gitlab.com/eestec/mailmanclient
>>> \git+https://gitlab.com/mailman/hyperkitty@c9fa4d4bfc295438d3e01cd93090064d004cf44d
>>> \git+https://gitlab.com/eestec/django-mailman3 \whoosh \uwsgi
>>> \psycopg2 \dj-database-url \typing \&& apk del .build-deps \&&
>>> addgroup -S -g 82 hyperkitty \&& adduser -S -u 82 -G hyperkitty
>>> hyperkitty \&& chmod u+x /usr/local/bin/docker-entrypoint.sh# Add
>>> needed files for uwsgi server + settings for django COPY
>>> assets/__init__.py /home/hyperkittyCOPY assets/manage.py
>>> /home/hyperkittyCOPY assets/urls.py /home/hyperkittyCOPY
>>> assets/wsgi.py /home/hyperkittyCOPY assets/uwsgi.ini
>>> /home/hyperkittyCOPY assets/settings.py /home/hyperkitty# Change
>>> ownership for uwsgi+django files and set execution rights for
>>> management script RUN chown -R hyperkitty /home/hyperkitty &&
>>> chmod
>>> u+x /home/hyperkitty/manage.py# Make sure we are in the correct
>>> working dir WORKDIR /home/hyperkittyEXPOSE 8080 8081# Use stop
>>> signal for uwsgi server STOPSIGNAL SIGINTENTRYPOINT
>>> ["docker-entrypoint.sh"]CMD ["uwsgi", "--ini",
>>> "/home/hyperkitty/uwsgi.ini"]
>>>
>>> On 4/27/19 7:58 PM, Abhilash Raj wrote:
>>>> On Sat, Apr 27, 2019, at 9:40 AM, Alain Kohli wrote:
>>>>> I have run "python manage.py rebuild_index" before, doesn't that do
>>>>> clear_index as well? Apart from that, I run hyperkitty in a docker
>>>>> container and didn't know fulltext_index should be persistent, so
>>>>> that
>>>>> got deleted after every version update for sure.
>>>> Which images are you using and how are you deploying them?
>>>>
>>>> You should persist fulltext_index, yes, and possibly logs if you need
>>>> them for debugging later.
>>>>
>>>> Can you paste the entire error traceback?
>>>>
>>>>> On 4/26/19 10:18 PM, Mark Sapiro wrote:
>>>>>> On 4/26/19 11:14 AM, Alain Kohli wrote:
>>>>>>> I see loads of "A string literal cannot contain NUL (0x00)
>>>>>>> characters."
>>>>>>> messages, but I haven't found missing messages in the archives
>>>>>>> yet. Not
>>>>>>> sure how that could be related, though. Apart from that I don't see
>>>>>>> anything unusual. The other jobs (quarter_hourly, hourly, etc.)
>>>>>>> seem to
>>>>>>> run and finish normally.
>>>>>> Did you upgrade from a Python 2.7 version of HyperKitty to a
>>>>>> Python 3
>>>>>> version? The Haystack/Whoosh search engine databases are not
>>>>>> compatible
>>>>>> between the two and "A string literal cannot contain NUL (0x00)
>>>>>> characters." is the symptom.
>>>>>>
>>>>>> You need to run 'python manage.py clear_index' or just remove all
>>>>>> the
>>>>>> files from the directory defined as 'PATH' under
>>>>>> HAYSTACK_CONNECTIONS in
>>>>>> your settings file (normally 'fulltext_index' in the same
>>>>>> directory that
>>>>>> contains your settings.py.
>>>>>>
>>>>> _______________________________________________
>>>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>>>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>>>
>>> _______________________________________________
>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>
>
5 years, 6 months
Re: config incoming email in my domain cpanel
by Rafael Mora
El jue., 3 ago. 2017 a las 16:07, tlhackque via Mailman-users (<
mailman-users(a)mailman3.org>) escribió:
> You've said you're working with labbrands.com.
>
> labbrands.com has address 192.185.51.89
> mail.labbrands.com has address 192.185.51.89
> www.labbrands.com is an alias for labbrands.com.
>
> telnet proves that Exim is running on that IP address. Either you're
> running it, or hostgator is redirecting the SMTP ports.
>
> You added:
> lists.labbrands.com has address 190.145.27.66
>
> Presumably that's a different machine.
>
> So that now needs an MX record, and a firewall routing.
I added the MX record on our hostgator hosting like this:
[image: image.png]
Is it correct???
> And the SPF
> records ... and spam and virus filters, and all the other stuff you need
> to setup an independent, public-facing smtp server.
>
> But at least you won't have to relay.
>
> Good luck.
>
> On 03-Aug-17 16:55, Rafael Mora wrote:
> > El jue., 3 ago. 2017 a las 15:49, tlhackque via Mailman-users (<
> > mailman-users(a)mailman3.org>) escribió:
> >
> >> I think you're confused.
> >>
> >> You already have mail.labbrands.com set up as the MX record for
> >> labbrands.com. And it has an A record with the same address as your
> >> webserver.
> >>
> > I'm working with the hostgator mailserver, we are not running a local
> > mailserver.
> >
> > As suggested I added an A record like this:
> > [image: image.png]
> >
> > Is it correct? is it redirecting to my Ip so I can redirect it to my
> > postfix/mm3 server?
> >
> >
> >> So if you're getting e-mail on that domain, there's another e-mail
> >> server running on that IP address. You can't have 2 servers on port
> >> 25. In that case, as has been noted before, you'll need to setup a
> >> relay in that server, not a firewall redirect. Depending on your MTA,
> >> you would need to relay to your internal server. And make sure your
> >> firewall setup allows your MTA to do this.
> >>
> >> We can see it's EXIM:
> >>
> >> telnet mail.labbrands.com 25
> >> Trying 192.185.51.89...
> >> Connected to mail.labbrands.com (192.185.51.89).
> >> Escape character is '^]'.
> >> help
> >> 220-gator4137.hostgator.com ESMTP Exim 4.87 #1 Thu, 03 Aug 2017
> 15:47:48
> >> -0500
> >> 220-We do not authorize the use of this system to transport unsolicited,
> >> 220 and/or bulk e-mail.
> >> 214-Commands supported:
> >> 214 AUTH STARTTLS HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP
> >> quit
> >> 221 gator4137.hostgator.com closing connection
> >> Connection closed by foreign host.
> >>
> >> Or, consolidate all your e-mail to one server - which is a lot easier to
> >> manage unless you have a really big operation. Postfix is probably the
> >> right choice, but requires more setup.
> >>
> >> Although Mailman3 configuration is not well documented (as you've
> >> discovered), you may want to get help from someone with more general
> >> network and mail experience. You're now into territory that is, as
> >> Simon indicated, not Mailman-specific.
> >>
> >> On 03-Aug-17 16:28, Rafael Mora wrote:
> >>> El jue., 3 ago. 2017 a las 15:26, Mark Sapiro (<mark(a)msapiro.net>)
> >> escribió:
> >>>> On 08/03/2017 01:22 PM, Rafael Mora wrote:
> >>>>> El jue., 3 ago. 2017 a las 15:18, Mark Sapiro (<mark(a)msapiro.net>)
> >>>> escribió:
> >>>>>> You need to forward port 25 for SMTP mail delivery and if you want
> the
> >>>>>> web UI (Postorius and HyperKitty) accessible from the outside, port
> 80
> >>>>>> for http and/or port 443 for https
> >>>>>> <
> >>>>>>
> >>
> https://www.iana.org/assignments/service-names-port-numbers/service-names-p…
> >>>>>>> .
> >>>>> I mean for incoming mail redirected from my hostgator hosting,
> because
> >>>> when
> >>>>> I suscribe an email address MM3 sends a confirmation email, so I have
> >> to
> >>>>> reply to be suscribed to the list.
> >>>> As I said, for mail delivery you need to forward port 25 to the
> Mailman
> >>>> server.
> >>>>
> >>> Ok so I'll redirect in my zentyal firewall the port 25 to my local
> >> centos7
> >>> with postfix and MM3 with IP 192.168.1.42. Thanks Mark.
> >>>
> >>>
> >>>> --
> >>>> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> >>>> San Francisco Bay Area, California better use your sense - B. Dylan
> >>>> _______________________________________________
> >>>> Mailman-users mailing list
> >>>> mailman-users(a)mailman3.org
> >>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >>>>
> >> --
> >> This communication may not represent my employer's views,
> >> if any, on the matters discussed.
> >>
> >> _______________________________________________
> >> Mailman-users mailing list
> >> mailman-users(a)mailman3.org
> >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >>
>
> --
> This communication may not represent my employer's views,
> if any, on the matters discussed.
>
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
Atentamente / Best Regards
Ing. Rafael Mora
7 years, 3 months
Re: new list not working
by Christian
I am only having issues with the new list.
Below are logfile entries
Smtp.log
++++++
Mar 09 20:57:09 2023 (9401) Available AUTH mechanisms: LOGIN(builtin) PLAIN(builtin)
Mar 09 20:57:09 2023 (9401) Peer: ('127.0.0.1', 35982)
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) handling connection
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) >> b'LHLO zarathustra.ccalternatives.org'
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) >> b'MAIL FROM:<christian(a)naturalintelligence.us> SIZE=3653'
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) sender: christian(a)naturalintelligence.us
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) >> b'RCPT TO:<redlatinleg(a)lists.ccalternatives.org>'
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) recip: redlatinleg(a)lists.ccalternatives.org
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) >> b'DATA'
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) >> b'QUIT'
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) connection lost
Mar 09 20:57:09 2023 (9401) ('127.0.0.1', 35982) Connection lost during _handle_client()
Access.log
++++++++
127.0.0.1 - - [09/Mar/2023:13:08:22 -0800] "GET /archives/list/redlatinleg(a)lists.ccalternatives.org/recent-threads HTTP/1.0" 200 4676 "https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
127.0.0.1 - - [09/Mar/2023:13:08:22 -0800] "GET /archives/list/redlatinleg(a)lists.ccalternatives.org/favorites HTTP/1.0" 200 58 "https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
127.0.0.1 - - [09/Mar/2023:13:08:22 -0800] "GET /archives/list/redlatinleg(a)lists.ccalternatives.org/top-threads HTTP/1.0" 200 4676 "https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
127.0.0.1 - - [09/Mar/2023:13:08:22 -0800] "GET /archives/list/redlatinleg(a)lists.ccalternatives.org/posted-to HTTP/1.0" 200 54 "https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
Mailman.log
++++++++
Mar 09 20:57:09 2023 (9400) ACCEPT: <032101d952c9$caf09990$60d1ccb0$(a)naturalintelligence.us>
Mar 09 13:03:42 2023 (9397) HyperKitty archived message <032101d952c9$caf09990$60d1ccb0$(a)naturalintelligence.us> to https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…
[09/Mar/2023:21:03:42 +0000] "GET /3.1/lists/redlatinleg(a)lists.ccalternatives.org HTTP/1.1" 200 497 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:03:42 +0000] "GET /3.1/lists/redlatinleg(a)lists.ccalternatives.org/config HTTP/1.1" 200 3805 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:03:42 +0000] "GET /3.1/addresses/cs(a)safecomputing.org HTTP/1.1" 200 402 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:03:42 +0000] "GET /3.1/lists/redlatinleg.lists.ccalternatives.org/roster/owner HTTP/1.1" 200 665 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:03:42 +0000] "GET /3.1/lists/redlatinleg.lists.ccalternatives.org/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:03:42 +0000] "GET /3.1/users/christian(a)naturalintelligence.us HTTP/1.1" 200 297 "-" "GNU Mailman REST client v3.3.3"
[09/Mar/2023:21:08:22 +0000] "GET /3.1/users/58f1e71ff425473d935fda2a7f9c2171 HTTP/1.1" 200 395 "-" "GNU Mailman REST client v3.3.3"
mailmansuite.log
++++++++++++
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py", line 56, in count
return self.function(count=0, page=1).total_size
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py", line 962, in _get_list_page
advertised=advertised, mail_host=mail_host, count=count, page=page)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/client.py", line 210, in get_list_page
return Page(self._connection, url, MailingList, count, page)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py", line 37, in __init__
self._create_page()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py", line 62, in _create_page
response, content = self._connection.call(self._build_url())
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/connection.py", line 169, in call
'Could not connect to Mailman API: ', repr(e))
mailmanclient.restbase.connection.MailmanConnectionError: ('Could not connect to Mailman API: ', 'ConnectionError(MaxRetryError("HTTPConnectionPool(host=\'localhost\', port=8001): Max retries exceeded with url: /3.1/lists?advertised=true&count=0&page=1 (Caused by NewConnectionError(\'<urllib3.connection.HTTPConnection object at 0x7f910b1d7da0>: Failed to establish a new connection: [Errno 111] Connection refused\'))"))')
ERROR 2023-03-08 13:52:33,078 623 django.request Service Unavailable: /mailman3/lists/
ERROR 2023-03-08 13:52:33,078 623 django.request Service Unavailable: /mailman3/lists/
INFO 2023-03-08 14:12:32,804 5421 hyperkitty.views.mailman Archived message <01e001d9520a$3ca64320$b5f2c960$(a)sewagesludgeactionnetwork.com> to https://lists.ccalternatives.org/archives/list/ssan@lists.ccalternatives.or…
INFO 2023-03-08 14:16:54,400 5423 hyperkitty.views.mailman Archived message <01d801d95207$e34e52b0$a9eaf810$(a)sewagesludgeactionnetwork.com> to https://lists.ccalternatives.org/archives/list/ssan@lists.ccalternatives.or…
INFO 2023-03-08 15:01:16,764 8917 hyperkitty.views.mailman Archived message <021201d95210$d2818c00$7784a400$(a)safecomputing.org> to https://lists.ccalternatives.org/archives/list/medialist@lists.ccalternativ…
ERROR 2023-03-08 17:18:00,624 8915 django.security.DisallowedHost Invalid HTTP_HOST header: 'www.vsooth.com'. You may need to add 'www.vsooth.com' to ALLOWED_HOSTS.
ERROR 2023-03-09 06:45:21,849 8916 django.security.DisallowedHost Invalid HTTP_HOST header: 'icook.tw'. You may need to add 'icook.tw' to ALLOWED_HOSTS.
INFO 2023-03-09 07:46:33,940 8915 hyperkitty.lib.mailman Imported the new list redlatinleg(a)lists.ccalternatives.org from Mailman
INFO 2023-03-09 08:01:35,590 8916 hyperkitty.views.mailman Archived message <02ab01d9529f$967afae0$c370f0a0$(a)naturalintelligence.us> to https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…
INFO 2023-03-09 08:27:34,189 8919 hyperkitty.views.mailman Archived message <02c301d952a3$37279c70$a576d550$(a)naturalintelligence.us> to https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…
INFO 2023-03-09 08:50:56,941 8916 hyperkitty.views.mailman Archived message <02cc01d952a6$7bdfbed0$739f3c70$(a)naturalintelligence.us> to https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…
INFO 2023-03-09 13:03:42,385 8916 hyperkitty.views.mailman Archived message <032101d952c9$caf09990$60d1ccb0$(a)naturalintelligence.us> to https://lists.ccalternatives.org/archives/list/redlatinleg@lists.ccalternat…
From: Zaheer Abbas <zaheer.psg(a)gmail.com>
Sent: Thursday, March 9, 2023 9:00 AM
To: csa(a)web-analysts.net; Christian <eric(a)safecomputing.org>
Cc: mailman-users(a)mailman3.org
Subject: Re: [MM3-users] new list not working
Are you having issues with only this list or all lists?
Did you configure and test smtp configuration?
Check for mailman and smtp log files, usually placed in /var/log/mailman3/
On Thu, Mar 9, 2023 at 4:51 PM Christian via Mailman-users <mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org> > wrote:
I created a new list using via the form. I sent a test message to the new
list and it appears in the list archive. However I am not receiving the
distribution.
What should I check for please?
Thank you ahead of time!
_______________________________________________
Mailman-users mailing list -- mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>
To unsubscribe send an email to mailman-users-leave(a)mailman3.org <mailto:mailman-users-leave@mailman3.org>
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to zaheer.psg(a)gmail.com <mailto:zaheer.psg@gmail.com>
--
Zaheer Abbas
Cell:+44-740-5511766
Personal Web: www.zaheerabbas.info <http://www.zaheerabbas.info>
'SAVE WATER ~ SAVE ENERGY ~ ~ SAVE EARTH
1 year, 8 months
Re: REST API notes
by Barry Warsaw
On Jun 28, 2017, at 01:47 AM, tlhackque--- via Mailman-users wrote:
>As a beginner with the REST API, I found it necessary to read code and
>experiment to figure out how to get things done.
Thanks for the feedback. Other than the work supporting Postorius and
HyperKitty, I think you've done some of the more extensive exploration of the
REST API, so your comments here (and greatly appreciated bug reports) are
quite valuable, and I think will help us make the REST API both more usable
and more discoverable.
It's important to point out some history of the REST API. Originally, we used
the restish library (which was Python 2 and eventually abandoned upstream).
That choice informed the essentially dynamic nature of the REST API. Which
means that unlike many other systems, we don't have -nor do I think we could
if we wanted to- easily and automatically generate a static description of the
REST API.
When I switched to Falcon (which is both Python 3 compatible and well
maintained upstream), I had to reimplement what I called "object based
traversal". Falcon by default supports a routes based traversal mechanism,
similar to Flask and other systems. But by plugging in (originally, by
monkeypatching, but now through an official Falcon API) support for object
based traversal, I was able to port the extensive existing REST implementation
to the new underlying library fairly easily.
All this to say that some of the problems you describe are due to historical
accident. And that's served us well(-ish) while we only had to support
mailmanclient and P/HK. But as the REST API is used in more places, those
deficiencies are becoming more glaring. I think if we ever make progress on
Lemme (our authenticating REST proxy), we'll likely encounter the same
problems. But at this point, it's infeasible to completely reimplement the
REST machinery.
>There are a number of implementation choices that are unusual.
No doubt. :)
>There is some documentation in src/mailman/rest/docs. It's oriented toward
>Python and intermixes the mailman client & REST API, apparently trying to
>show equivalence.
Much of that is because these are doctests, i.e. testable documentation. It's
a tradeoff between making them useful as docs but also testable without too
much clutter. It's very much oriented toward Python because that makes
testability easier. It would be good to have documentation for pure HTTP/JSON
consumers, but it would be imperative for that also to be testable so we're
sure it remains accurate, aside from any requirements to keep the docs in
sync. Suggestions and contributions would be very much welcome here.
>The REST API has a hybrid interface: Requests are made with
>application/x-www-form-urlencoded POST, PUT, PATCH and delete http requests.
>Requests are also accepted as parameter strings.
>
>The responses are JSON. (This is rather surprising - one would expect JSON
>requests - and I hope someday they'll be accepted, as the split complicates
>clients. I suspect this evolved to simplify the initial Web GUI client
>(Postorious), but it precludes using standard JSON-in/JSON-out client
>libraries.)
Absolutely. I want to support JSON-in/JSON-out. Again, the current mismatch
is due to historical implementation decisions, but there's nothing in
principle preventing us from accepting JSON in, afaict. We'd have to continue
to accept both, for backward compatibility reasons.
>Error responses are often misidentified as content-type: application/json,
>but actually contain a text/plain error message. This isn't universally
>true; for example the 401 response actually IS JSON. A client has to guess
>and handle decoding exceptions.
That's clearly a bug. The Content-Type should always be accurate. It would
be a new feature to also support JSON error responses.
>The API presents resources hierarchically, rooted at '/'. The top level
>resources include /users, /lists. /addresses, /domains, /system
>
>The next level is a resource id.
Kind of. It all depends on what the top-level resource is returned. This
makes sense when you think about the object based traversal machinery.
Each path component points internally to an object, and the subsequent path
component is handled by that object. If that returns another object, then the
next remaining path component is consumed by *that* object. And so on until
we reach the end of the path. Then the object at the leaf responds to the
HTTP command, and each object knows how to represent itself as JSON, and it
knows its canonical location within the resource tree (there can be multiple
paths to any particular object, but there's always one canonical location).
>There is a an id which is stable for the lifetime of an object, and a current
>name (which can be changed). For example, a list has a name like
>mylist(a)example.com, and a list_id of mylist.example.com. But if you change
>the list name, it becomes mynewname(a)example.net, while the list_id remains
>mylist.example.com.
Lists are weird in that they have two identifiers. One is the posting
address, what we internally (and slightly incorrectly) call the "fully
qualified list name". I don't particularly like that nomenclature anymore,
but we live with it.
A posting address can change, e.g. if you rename or rehome a list.
The (RFC 2919) List-ID is assigned when the mailing list is created and it's
immutable. Section 4 discourages changing the List-ID and Mailman takes that
as a requirement. Rename a list or rehome it to a different domain on the
same server and the List-ID will never change.
Again for historical reasons, many APIs both internal and external used the
posting address to identify the list, but this is wrong exactly because that
can change. I've slowly been converting APIs to accept both the posting
address and the List-ID when identifying the mailing list. New APIs generally
accept only the List-ID. Bottom line, it's best to use the List-ID.
>Lists are associated with "domains", which are the "domain part" of the
>list's address. That is, the part after the @. This is sometimes referred
>to as the "mail host", but there need not be a real host.
Yep, again historical nomenclature.
>A domain has to be created before you can create a list with an address in
>that domain.
Some APIs (e.g. `mailman create` CLI) will create the domain automatically if
it doesn't already exist, and unless you disable that explicitly.
>Resources are created with a POST to their top-level resource. To create a
>domain, post to /domains with mail_host => the domain, and (optionally)
>description => a description for the GUI. The response isn't JSON as one
>would expect. In fact, it's an empty application/json response with a 201
>status.
>
>To create a list, one POSTs to /lists. This post takes a restricted set of
>parameters; in the case of a list, just its fqdn_listname, (and an optional
>style - which isn't well defined). The response isn't JSON as one would
>expect. The Location header of the response contains a URL of the new list.
What else would you expect? From my reading of books like RESTful Web
Services (admittedly a long while ago), that's exactly the proper response to
an appending POST. Return a 201 with a Location header to the new resource
and empty content.
>To configure the list, you have to follow up with a PUT or PATCH to that URL
>+ /config This is where you can set the description, posting policy, etc.
>It's unrealistic to do a PUT; even if you're cloning another list, there's no
>programatic way to determine which attributes are writable. PATCH what you
>know...
Mailing list resources are somewhat unique in that they probably have the most
properties of any resource/object in the system. That's not surprising if you
think about it, but it does make PUTing to a mailing list more or less
impractical. That's certainly not true of other, smaller resources though,
and of course, you still want symmetry there (plus, implementation-wise, it's
almost a no brainer to support both PUT and PATCH).
>Members are associated with e-mail addresses - which belong to Users.
Users can have multiple addresses, addresses can be linked to only one user,
but may be unlinked, and members associate "subscribers" to mailing lists,
where a subscriber is either a user-with-preferred-address, or an address.
>You create a user by posting to /users with email => the email address, and
>optionally display_name => the name string. (A user can also be implicitly
>created by subscribing an e-mail address, but that gets confusing.) The
>e-mail address is the primary email address for the user. More later.
>Again, you get a Location header in the response, which you can use to PATCH
>/preferences to set delivery_status, etc. .These preferences are part of a
>hierarchy - many have a system default, a list default, the user default, and
>a subscription to that list value. You can find the User associated with a
>list by a GET of /addresses/address(a)example.net.
Technically, the returned user isn't necessarily associated with a list. It
*may* be subscribed to the list, but that relationship is represented by a
member.
>This GET returns two URLs: user => the user owning this address, and
>self_link => the address object.
*All* resources in the REST API have a self_link, and while that may seem
redundant, it's not. As mentioned above, you can take various paths through
the resource tree to get to a particular resource, but regardless of that,
every resource has exactly one canonical location. That location is
represented by the self_link.
>Note also that there are both an email and original_email attribute. The
>latter preserves case. The former is used internally by Mailman as a
>resource key, etc. (Though exactly what happens if John(a)example.net and
>john(a)example.net both subscribe is unclear.)
They can't. Mailman is case-preserving case-insensitive for email addresses.
Technically speaking, john(a)example.com and JOHN(a)example.com can be different
mailboxes, but that never happens in practice anymore, and Mailman has always
explicitly treated them as the same address. This goes back to the earliest
days of Mailman.
>Once a list is configured, you can add members. This requires the list_id -
>which you don't (officially) have. So you do a GET on the list resource, to
>get the list_id. Then you can subscribe a member with list_id => (the list
>id), subscriber => email address. Optionally you can
>pre_verify/confirm/approve the member and/or add a display_name.. POST to
>/members. Again, you get a Location header back. You can't specify
>everything you might like. as a creation attribute. So you may have to PATCH
>the member to, for example, set the moderation_status.
This is true, but it also kind of makes sense if you grok the way preferences
work, i.e. hierarchically as you describe above. TBH, I don't particularly
like the way preferences are modeled either internally or through the REST
API, but I haven't been able to come up with anything better.
>You may also need to PATCH the member /preferences if you want to set
>list-level delivery status, etc.
All true. In each of those cases, you may be talking to a different
preference resource.
>Consider adding at least an owner when creating a list.
I think that would be a useful addition to the REST API for list creation.
>One challenge is that almost everything requires multiple REST operations to
>set up. But REST (by definition) is stateless. So the best you can do is
>order operations & hope.
I don't understand this. REST is stateless, but not all HTTP operations are
idempotent. POST certainly isn't, by definition, so if you use it to create a
new resource under a collection, you clearly cannot modify that resource
through PUT or PATCH until the resource is created, which only happens when
POST succeeds.
>The mailman client examples refer to transactions (e.g in users.rst, there is
>'transaction.commit(); - but REST can't hold state. It does appear that the
>server uses DB transactions to ensure that any given REST operation is ACID,
>but the composite operations (e.g. create a list and set it's config) can not
>be Atomic. This is an architectural flaw in the API.
I think what you're getting at is that some POSTs to create new resources do
not accept the same parameters as the subsequent PUT or PATCH on the newly
created resource. I think that may be true, but it's not universally so.
E.g. POST on /domain creates a new domain, returning the location of the new
resource. You can provide both a description and an owner, and you can also
provide a mail_host. But mail_host is immutable, and PATCH or PUT support
changing all mutable attributes on the domain.
That should be the general rule; if an attribute on a resource is mutable, you
should be able to PATCH and PUT it, *and* you should be able to specify all
mutable attributes, plus some immutable ones on the POST that creates the
resource. GET should return all attributes, mutable or immutable. This rule
may not be strictly adhered to for all resources and collections, but I would
consider that a bug, not an architectural flaw.
AFAIK, this is all working as any well-defined web service should work.
>Symbolic names (which are required) for attributes are in the
>src/mailman/interfaces/(class).py.
Please note that the interfaces under this package are for the *internal* API,
which often, but not always, is exposed in the REST API. These two APIs serve
different purposes so they cannot be a one-to-one mapping, and there are many
resources in the REST API that don't correspond directly to internal objects,
and there are many internal objects that are not exposed to the REST API.
>What you can get/set comes from src/mailman/rest/(class).py.
Yes, so clients of the REST API are served by objects in this package.
Plugins and other internal operations are served by the objects that implement
interfaces in the src/mailman/interfaces package. This is a strict separation
of concerns, and it mirrors other 'external facing' interfaces, of which the
command line is another example.
Hope that helps.
-Barry
7 years, 4 months
Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
And using the module manually works...
(venv) mailman@new-server ~ (v3.3.9) [0|127]> *ipython3*
/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py:949:
UserWarning: Attempting to work in a virtualenv. If you encounter problems,
please install IPython inside the virtualenv.
warn(
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: *import MySQLdb*
(venv) mailman@new-sever ~ (v3.3.9)> *fg*
Send job 1, 'ipython3' to foreground
In [3]: *con = MySQLdb.connect("localhost", "mailman3web",
"*****************", "mailman3web")*
In [4]:
*cursor = con.cursor()*
In [5]: *cursor.execute("show tables")*
Out[5]: 34
In [6]: *print(cursor.fetchall())*
(('account_emailaddress',), ('account_emailconfirmation',),
('auth_group',), ('auth_group_permissions',), ('auth_permission',),
('auth_user',), ('auth_user_groups',), ('auth_user_user_permissions',),
('django_admin_log',), ('django_content_type',),
('django_mailman3_maildomain',), ('django_mailman3_profile',),
('django_migrations',), ('django_q_ormq',), ('django_q_schedule',),
('django_q_task',), ('django_session',), ('django_site',),
('hyperkitty_attachment',), ('hyperkitty_email',),
('hyperkitty_favorite',), ('hyperkitty_lastview',),
('hyperkitty_mailinglist',), ('hyperkitty_profile',),
('hyperkitty_sender',), ('hyperkitty_tag',), ('hyperkitty_tagging',),
('hyperkitty_thread',), ('hyperkitty_threadcategory',),
('hyperkitty_vote',), ('socialaccount_socialaccount',),
('socialaccount_socialapp',), ('socialaccount_socialapp_sites',),
('socialaccount_socialtoken',))
In [7]: *cursor.execute("select * from account_emailaddress")*
Out[7]: 2530
In [8]: *print(cursor.fetchall())*
So what can I do? Is there a way to troubleshoot the root cause of this
issue?
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Tue, 19 Dec 2023 at 11:11, Helio Loureiro <helio(a)loureiro.eng.br> wrote:
> Hi,
>
> No luck :(
>
> (venv) mailman@new-server ~ (v3.3.9)> *pip freeze | egrep
> "mailman-web|django-mailman3|django-allauth"*
> django-allauth==0.59.0
> django-mailman3==1.3.11
> mailman-web==0.0.8
> (venv) mailman@new-server ~ (v3.3.9)> *pip install -U
> django-allauth==0.58.0*
> Collecting django-allauth==0.58.0
> Downloading django-allauth-0.58.0.tar.gz (861 kB)
> ---------------------------------------- 861.7/861.7 KB 9.4 MB/s eta
> 0:00:00
> Installing build dependencies ... done
> Getting requirements to build wheel ... done
> Installing backend dependencies ... done
> Preparing metadata (pyproject.toml) ... done
> Requirement already satisfied: requests-oauthlib>=0.3.0 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (1.3.1)
> Requirement already satisfied: Django>=3.2 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (4.1.13)
> Requirement already satisfied: pyjwt[crypto]>=1.7 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.8.0)
> Requirement already satisfied: requests>=2.0.0 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.31.0)
> Requirement already satisfied: python3-openid>=3.0.8 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (3.2.0)
> Requirement already satisfied: asgiref<4,>=3.5.2 in
> ./venv/lib/python3.10/site-packages (from
> Django>=3.2->django-allauth==0.58.0) (3.7.2)
> Requirement already satisfied: sqlparse>=0.2.2 in
> ./venv/lib/python3.10/site-packages (from
> Django>=3.2->django-allauth==0.58.0) (0.4.4)
> Requirement already satisfied: cryptography>=3.4.0 in
> ./venv/lib/python3.10/site-packages (from
> pyjwt[crypto]>=1.7->django-allauth==0.58.0) (41.0.7)
> Requirement already satisfied: defusedxml in
> ./venv/lib/python3.10/site-packages (from
> python3-openid>=3.0.8->django-allauth==0.58.0) (0.7.1)
> Requirement already satisfied: urllib3<3,>=1.21.1 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (2.1.0)
> Requirement already satisfied: charset-normalizer<4,>=2 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (3.3.2)
> Requirement already satisfied: idna<4,>=2.5 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (3.6)
> Requirement already satisfied: certifi>=2017.4.17 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (2023.11.17)
> Requirement already satisfied: oauthlib>=3.0.0 in
> ./venv/lib/python3.10/site-packages (from
> requests-oauthlib>=0.3.0->django-allauth==0.58.0) (3.2.2)
> Requirement already satisfied: typing-extensions>=4 in
> ./venv/lib/python3.10/site-packages (from
> asgiref<4,>=3.5.2->Django>=3.2->django-allauth==0.58.0) (4.9.0)
> Requirement already satisfied: cffi>=1.12 in
> ./venv/lib/python3.10/site-packages (from
> cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0) (1.16.0)
> Requirement already satisfied: pycparser in
> ./venv/lib/python3.10/site-packages (from
> cffi>=1.12->cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0)
> (2.21)
> Building wheels for collected packages: django-allauth
> Building wheel for django-allauth (pyproject.toml) ... done
> Created wheel for django-allauth:
> filename=django_allauth-0.58.0-py3-none-any.whl size=1157319
> sha256=a430c552101d1ad47bc00b16d1c1d6df728afacdd13823927b4cbfb02c35dbfc
> Stored in directory:
> /local/mailman/.cache-ubuntu-22.04/pip/wheels/55/0a/79/e199827a18f310906c2a90b0e92b89c41daf21d2a502db6710
> Successfully built django-allauth
> Installing collected packages: django-allauth
> Attempting uninstall: django-allauth
> Found existing installation: django-allauth 0.59.0
> Uninstalling django-allauth-0.59.0:
> Successfully uninstalled django-allauth-0.59.0
> Successfully installed django-allauth-0.58.0
> (venv) mailman@new-server ~ (v3.3.9)> *mailman-web migrate*
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you don't
> care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't care
> about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
> (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 89, in _execute
> return self.cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 257, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during
> query')
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
> sys.exit(main())
> File
> "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
> line 90, in main
> execute_from_command_line(sys.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 446, in execute_from_command_line
> utility.execute()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 440, in execute
> self.fetch_command(subcommand).run_from_argv(self.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 402, in run_from_argv
> self.execute(*args, **cmd_options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 448, in execute
> output = self.handle(*args, **options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 96, in wrapped
> res = handle_func(*args, **kwargs)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py",
> line 349, in handle
> post_migrate_state = executor.migrate(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 135, in migrate
> state = self._migrate_all_forwards(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 167, in _migrate_all_forwards
> state = self.apply_migration(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 252, in apply_migration
> state = migration.apply(state, schema_editor)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py",
> line 130, in apply
> operation.database_forwards(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py",
> line 235, in database_forwards
> schema_editor.alter_field(from_model, from_field, to_field)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 788, in alter_field
> self._alter_field(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 858, in _alter_field
> self.execute(self._delete_unique_sql(model, constraint_name))
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 199, in execute
> cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 67, in execute
> return self._execute_with_wrappers(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 80, in _execute_with_wrappers
> return executor(sql, params, many, context)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 84, in _execute
> with self.db.wrap_database_errors:
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/utils.py", line
> 91, in __exit__
> raise dj_exc_value.with_traceback(traceback) from exc_value
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 89, in _execute
> return self.cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 257, in query
> _mysql.connection.query(self, query)
> django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server
> during query')
> (venv) mailman@new-server ~ (v3.3.9) [0|1]> *more
> /etc/mailman3/settings.py*
> # Mailman Web configuration file.
> # /etc/mailman3/settings.py
>
> # Get the default settings.
> from mailman_web.settings.base import *
> from mailman_web.settings.mailman import *
>
> # Settings below supplement or override the defaults.
>
> #: Default list of admins who receive the emails from error logging.
> ADMINS = (
> ('Mailman Suite Admin', 'root@localhost'),
> )
>
> # Postgresql database setup.
> DATABASES = {
> 'default': {
> 'ENGINE': 'django.db.backends.mysql',
> 'NAME': 'mailman3web',
> 'USER': 'mailman3web',
> # TODO: Replace this with the password.
> 'PASSWORD': '***********',
> 'HOST': 'localhost',
> # PORT: set to empty string for default.
> 'PORT': '3306',
> # OPTIONS: Extra parameters to use when connecting to the database.
> #'OPTIONS': {
> # Set sql_mode to 'STRICT_TRANS_TABLES' for MySQL. See
> # https://docs.djangoproject.com/en/1.11/ref/
> # databases/#setting-sql-mode
> # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
> # 'charset': 'utf8mb4',
> #},
>
> }
> }
>
> # 'collectstatic' command will copy all the static files here.
> # Alias this location from your webserver to `/static`
> STATIC_ROOT = '/local/mailman/web/static'
>
> # enable the 'compress' command.
> COMPRESS_ENABLED = True
>
> # Make sure that this directory is created or Django will fail on start.
> LOGGING['handlers']['file']['filename'] =
> '/local/mailman/web/logs/mailmanweb.log'
>
> #: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
> ALLOWED_HOSTS = [
> "localhost", # Archiving API from Mailman, keep it.
> "127.0.0.1",
> # "lists.your-domain.org",
> # Add here all production domains you have.
> "*"
> ]
>
> #: See
> https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
> (venv) mailman@new-server ~ (v3.3.9)> *mysql -umailman3web -p -h
> localhost mailman3web*
> Enter password:
> Reading table information for completion of table and column names
> You can turn off this feature to get a quicker startup with -A
>
> Welcome to the MariaDB monitor. Commands end with ; or \g.
> Your MariaDB connection id is 32
> Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
>
> Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
>
> Type 'help;' or '\h' for help. Type '\c' to clear the current input
> statement.
>
> MariaDB [mailman3web]> show tables;
> +-------------------------------+
> | Tables_in_mailman3web |
> +-------------------------------+
> | account_emailaddress |
> | account_emailconfirmation |
> | auth_group |
> | auth_group_permissions |
> | auth_permission |
> | auth_user |
> | auth_user_groups |
> | auth_user_user_permissions |
> | django_admin_log |
> | django_content_type |
> | django_mailman3_maildomain |
> | django_mailman3_profile |
> | django_migrations |
> | django_q_ormq |
> | django_q_schedule |
> | django_q_task |
> | django_session |
> | django_site |
> | hyperkitty_attachment |
> | hyperkitty_email |
> | hyperkitty_favorite |
> | hyperkitty_lastview |
> | hyperkitty_mailinglist |
> | hyperkitty_profile |
> | hyperkitty_sender |
> | hyperkitty_tag |
> | hyperkitty_tagging |
> | hyperkitty_thread |
> | hyperkitty_threadcategory |
> | hyperkitty_vote |
> | socialaccount_socialaccount |
> | socialaccount_socialapp |
> | socialaccount_socialapp_sites |
> | socialaccount_socialtoken |
> +-------------------------------+
> 34 rows in set (0.000 sec)
>
> Best Regards,
> Helio Loureiro
> https://helio.loureiro.eng.br
> https://github.com/helioloureiro
> https://mastodon.social/@helioloureiro
>
>
> On Mon, 18 Dec 2023 at 17:11, Mark Sapiro <mark(a)msapiro.net> wrote:
>
>> On 12/18/23 6:24 AM, Helio Loureiro wrote:
>> > Hi,
>> >
>> > Indeed it was the configuration. It was placed into
>> > /etc/mailman3/mailman-web.py. After a I changed to
>> > /etc/mailman3/settings.py a few things advanced a little bit more.
>> >
>> > I had to figure out how to fix mysqlclient installation since there
>> isn't a
>> > mention about it and the simple "pip install mysqclient" was breaking
>> with
>> > pkg-config issues. But it did work at the end.
>> >
>> > Now I can see further messages on mailman3-web than before.
>> >
>> > (venv) mailman@new-server ~ (v3.3.9)> mailman-web migrate
>> > System check identified some issues:
>> >
>> > WARNINGS:
>> > account.EmailAddress: (models.W036) MariaDB does not support unique
>> > constraints with conditions.
>> > HINT: A constraint won't be created. Silence this warning if you don't
>> care
>> > about it.
>> > account.EmailAddress: (models.W043) MariaDB does not support indexes on
>> > expressions.
>> > HINT: An index won't be created. Silence this warning if you don't care
>> > about it.
>> > Operations to perform:
>> > Apply all migrations: account, admin, auth, contenttypes,
>> > django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
>> > socialaccount
>> > Running migrations:
>> > Applying
>> account.0004_alter_emailaddress_drop_unique_email...Traceback
>> > (most recent call last):
>>
>>
>> I'm not sure why there would be an issue with this migration, but there
>> is a possible compatibility issue depending on how you installed things.
>>
>> django-mailman3<=1.3.11 is not compatible with django-allauth>=0.58.
>>
>> In your venv, try
>> ```
>> pip install django-allauth\<0.58
>> ```
>>
>> --
>> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
>> San Francisco Bay Area, California better use your sense - B. Dylan
>>
>> _______________________________________________
>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to helio(a)loureiro.eng.br
>>
>
11 months
Re: using SSH/TLS with external MTA
by Roland Giesler
On 2024/07/28 15:26, Roland Giesler via Mailman-users wrote:
> On 2024/07/28 00:39, Mark Sapiro wrote:
>> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
>>>
>>> The server runs power-mailinabox, which uses Postfix indeed. All my
>>> mail, and quite a few others' mail is sent from the using SMTP-Auth
>>> on port 465. Actually, this message is sent via that server too.
>>> So it's clear to me that MM3 is not authenticating for some reason.
>>
>> What do you see in Mailman's smtp.log and in the mail.log on the mail
>> server?
>
> The smtp log is in syslog...
I also see this in /var/log/mailman3/web/mailman-web.log
*** Starting uWSGI 2.0.20-debian (64bit) on [Sun Jul 28 15:27:48 2024] ***
compiled with version: 11.2.0 on 21 March 2022 11:00:44
os: Linux-5.15.108-1-pve #1 SMP PVE 5.15.108-2 (2023-07-20T10:06Z)
nodename: mailman
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /
detected binary path: /usr/bin/uwsgi-core
setgid() to 33
setuid() to 33
chdir() to /usr/share/mailman3-web
your processes number limit is 513922
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /run/mailman3-web/uwsgi.sock fd 4
Python version: 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0]
Python main interpreter initialized at 0x561ce813d1d0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 166752 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
/usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
and timeout are misconfigured. Set retry larger than timeout,
failure to do so will cause the tasks to be retriggered before
completion.
See
https://django-q.readthedocs.io/en/latest/configure.html#retry for details.
warn(
WSGI app 0 (mountpoint='') ready in 5 seconds on interpreter
0x561ce813d1d0 pid: 113 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 113)
spawned uWSGI worker 1 (pid: 339, cores: 2)
[uwsgi-daemons] spawning "python3 manage.py qcluster" (uid: 33 gid: 33)
/usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
and timeout are misconfigured. Set retry larger than timeout,
failure to do so will cause the tasks to be retriggered before
completion.
See
https://django-q.readthedocs.io/en/latest/configure.html#retry for details.
warn(
System check identified some issues:
WARNINGS:
django_mailman3.MailDomain: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
DjangoMailman3Config.default_auto_field attribute to point to a subclass
of AutoField, e.g. 'django.db.models.BigAutoField'.
django_mailman3.Profile: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
DjangoMailman3Config.default_auto_field attribute to point to a subclass
of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Attachment: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Email: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Favorite: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.LastView: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.MailingList: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Profile: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tag: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tagging: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Thread: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.ThreadCategory: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Vote: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
postorius.EmailTemplate: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
PostoriusConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet starting.
15:27:55 [Q] INFO Process-1 guarding cluster low-vermont-harry-fillet
15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet running.
15:27:55 [Q] INFO Process-1:3 pushing tasks at 386
15:27:55 [Q] INFO Process-1:2 monitoring at 385
15:27:55 [Q] INFO Process-1:1 ready for work at 384
3 months, 4 weeks
Mailman3 in dockers on EC2 - running out of memory and puking ev.ry.where.
by roger.hislop@is.co.za
Hi all -- really need some help. I'm tech literate, but definitely not a sysadmin or dev.
I'm following the tutorial at "Olay's Farmland" at https://www.olay.xyz/2018/01/01/deploy-mailman-3-on-aws-using-docker/ which seems to be a clone of the same content here https://xiaoxing.us/2018/01/01/deploy-mailman-3-on-aws-using-docker/
Easy enough to get most of the way ... set up EC2 instance, configure SES and add DNS settings with DKIM etc. Set up Postfix, test it. All working groovy.
I run through the how to all the way through setting up the containers and firing it up. This is where things start to get funky.
Once the docker-compose is run, I run "curl http://172.19.199.3:8000/postorius/lists/" to test. First time it said it couldn't connect to database. So I nuked and restarted from scratch. Second time it said the same thing... was reading around the place and tried again, and then reran that curl and it worked -- gave me html from a page. But the VM started running slowly --taking forever to follow keypresses.
Eventually became unresponsive. So I rebooted the machine via AWS console, and docker ps showed only the postgres db running. docker-compose ps shows
Name Command State Ports
------------------------------------------------------------------------------------------
docker-mailman_database_1 docker-entrypoint.sh postgres Up 5432/tcp
mailman-core docker-entrypoint.sh maste ... Exit 255 8001/tcp, 8024/tcp
mailman-web docker-entrypoint.sh uwsgi ... Exit 255 8000/tcp, 8080/tcp
So rebuilt the container -- same thing. It looks and feels like its running out of memory.
I used the compose file from https://gist.githubusercontent.com/Yexiaoxing/833bfcc5d3e4e0c06a8b7f0bac7c4… (with appropriate edits).
I have no idea how to proceed from here...
Go to logs...
Partial log (they're LONG)
docker logs docker-mailman_database_1
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
sh: locale: not found
performing post-bootstrap initialization ... No usable system locales were found.
Use the option "--debug" to see details.
ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgresql/data -l logfile start
waiting for server to start....LOG: database system was shut down at 2019-04-09 14:37:48 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
done
server started
CREATE DATABASE
/usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
LOG: received fast shutdown request
LOG: aborting any active transactions
LOG: autovacuum launcher shutting down
LOG: shutting down
waiting for server to shut down....LOG: database system is shut down
done
server stopped
PostgreSQL init process complete; ready for start up.
LOG: database system was shut down at 2019-04-09 14:37:50 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
ERROR: relation "social_auth_usersocialauth" does not exist at character 15
STATEMENT: SELECT 1 from social_auth_usersocialauth
LOG: database system was interrupted; last known up at 2019-04-09 14:48:37 UTC
LOG: database system was not properly shut down; automatic recovery in progress
LOG: invalid record length at 0/1767BB8: wanted 24, got 0
LOG: redo is not required
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
LOG: received smart shutdown request
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
LOG: database system was shut down at 2019-04-09 15:18:06 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
ERROR: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL: Key (username)=(lists) already exists.
STATEMENT: INSERT INTO "auth_user" ("password", "last_login", "is_superuser", "username", "first_name", "last_name", "email", "is_staff", "is_active", "date_joined") VALUES ('!lS8pgTTV7CyhUbZItku00ZnUGxLQkVEuc3ENZKbV', NULL, true, 'lists', '', '', 'iotic-za(a)reasondigital.co.za', true, true, '2019-04-09T15:39:57.715036+00:00'::timestamptz) RETURNING "auth_user"."id"
TopMemoryContext: 8192 total in 1 blocks; 3480 free (0 chunks); 4712 used
smgr relation table: 24576 total in 2 blocks; 13008 free (4 chunks); 11568 used
WAL record construction: 49768 total in 2 blocks; 6584 free (0 chunks); 43184 used
Checkpointer: 8192 total in 1 blocks; 7992 free (3 chunks); 200 used
PrivateRefCount: 8192 total in 1 blocks; 2840 free (0 chunks); 5352 used
MdSmgr: 8192 total in 1 blocks; 8120 free (0 chunks); 72 used
Pending ops context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
Pending Ops Table: 8192 total in 1 blocks; 2840 free (5 chunks); 5352 used
LOCALLOCK hash: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
Timezones: 104120 total in 2 blocks; 2840 free (0 chunks); 101280 used
ErrorContext: 8192 total in 1 blocks; 8152 free (0 chunks); 40 used
Grand total: 235808 bytes in 13 blocks; 56632 free (12 chunks); 179176 used
ERROR: out of memory
DETAIL: Failed on request of size 4032.
CONTEXT: writing block 0 of relation base/16384/16797
TopMemoryContext: 8192 total in 1 blocks; 3480 free (0 chunks); 4712 used
smgr relation table: 24576 total in 2 blocks; 13008 free (4 chunks); 11568 used
WAL record construction: 49768 total in 2 blocks; 6584 free (0 chunks); 43184 used
Checkpointer: 8192 total in 1 blocks; 7992 free (2 chunks); 200 used
PrivateRefCount: 8192 total in 1 blocks; 2840 free (0 chunks); 5352 used
LOG: could not fork autovacuum worker process: Out of memory
MdSmgr: 8192 total in 1 blocks; 8120 free (0 chunks); 72 used
Pending ops context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
Pending Ops Table: 8192 total in 1 blocks; 2840 free (5 chunks); 5352 used
LOCALLOCK hash: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
LOG: could not fork autovacuum worker process: Out of memory
Timezones: 104120 total in 2 blocks; 2840 free (0 chunks); 101280 used
ErrorContext: 8192 total in 1 blocks; 8152 free (0 chunks); 40 used
Grand total: 235808 bytes in 13 blocks; 56632 free (11 chunks); 179176 used
LOG: could not fork autovacuum worker process: Out of memory
ERROR: out of memory
DETAIL: Failed on request of size 4032.
CONTEXT: writing block 0 of relation base/16384/16797
LOG: could not fork autovacuum worker process: Out of memory
WARNING: could not write block 0 of base/16384/16797
DETAIL: Multiple failures --- write error might be permanent.
TopMemoryContext: 8192 total in 1 blocks; 3480 free (0 chunks); 4712 used
smgr relation table: 24576 total in 2 blocks; 13008 free (4 chunks); 11568 used
WAL record construction: 49768 total in 2 blocks; 6584 free (0 chunks); 43184 used
Checkpointer: 8192 total in 1 blocks; 7992 free (2 chunks); 200 used
PrivateRefCount: 8192 total in 1 blocks; 2840 free (0 chunks); 5352 used
MdSmgr: 8192 total in 1 blocks; 8120 free (0 chunks); 72 used
Pending ops context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
Pending Ops Table: 8192 total in 1 blocks; 2840 free (5 chunks); 5352 used
LOCALLOCK hash: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
TopMemoryContext: 51040 total in 4 blocks; 1344 free (1 chunks); 49696 used
TopTransactionContext: 8192 total in 1 blocks; 6968 free (0 chunks); 1224 used
Timezones: 104120 total in 2 blocks; 2840 free (0 chunks); 101280 used
Statistics snapshot: 0 total in 0 blocks; 0 free (0 chunks); 0 used
ErrorContext: 8192 total in 1 blocks; 8152 free (0 chunks); 40 used
Grand total: 235808 bytes in 13 blocks; 56632 free (11 chunks); 179176 used
Per-database function: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
Per-database table: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
Per-database function: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
Per-database table: 8192 total in 1 blocks; 776 free (0 chunks); 7416 used
Databases hash: 24576 total in 2 blocks; 15072 free (5 chunks); 9504 used
ERROR: out of memory
For UWSGI
cat uwsgi.log
[pid: 49|app: 0|req: 1/1] 172.19.199.1 () {24 vars in 291 bytes} [Tue Apr 9 14:43:43 2019] GET /postorius/lists/ => generated 3710 bytes in 705 msecs (HTTP/1.1 200) 5 headers in 163 bytes (1 switches on core 0)
[pid: 39|app: 0|req: 1/1] 172.19.199.1 () {24 vars in 291 bytes} [Tue Apr 9 15:40:12 2019] GET /postorius/lists/ => generated 3710 bytes in 694 msecs (HTTP/1.1 200) 5 headers in 163 bytes (1 switches on core 0)
[ec2-user@ip-172-31-23-250 logs]$ cat uwsgi-error.log
cat: uwsgi-error.log: Permission denied
[ec2-user@ip-172-31-23-250 logs]$ sudo cat uwsgi-error.log
*** Starting uWSGI 2.0.15 (64bit) on [Tue Apr 9 14:38:03 2019] ***
compiled with version: 6.3.0 on 29 December 2017 00:16:31
os: Linux-4.14.77-70.59.amzn1.x86_64 #1 SMP Mon Nov 12 22:02:45 UTC 2018
nodename: mailman-web
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /opt/mailman-web
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
setgid() to 101
setuid() to 100
chdir() to /opt/mailman-web
your processes number limit is 3860
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 0.0.0.0:8080 fd 8
uwsgi socket 1 bound to TCP address 0.0.0.0:8000 fd 9
Python version: 2.7.14 (default, Dec 19 2017, 17:52:21) [GCC 6.3.0]
Python main interpreter initialized at 0x55ca1d90e1e0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
[uwsgi-cron] command "./manage.py runjobs minutely" registered as cron task
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs hourly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs daily" registered as cron task
[uwsgi-cron] command "./manage.py runjobs monthly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs weekly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs yearly" registered as cron task
mapped 166144 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x55ca1d90e1e0 pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1)
spawned uWSGI worker 1 (pid: 49, cores: 2)
Tue Apr 9 14:38:04 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 51)
[uwsgi-daemons] spawning "./manage.py qcluster" (uid: 100 gid: 101)
14:38:07 [Q] INFO Q Cluster-52 starting.
14:38:07 [Q] INFO Process-1 guarding cluster at 67
14:38:07 [Q] INFO Process-1:1 ready for work at 68
14:38:07 [Q] INFO Process-1:3 pushing tasks at 70
14:38:07 [Q] INFO Q Cluster-52 running.
14:38:07 [Q] INFO Process-1:2 monitoring at 69
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 51 exited after 4 second(s)
Tue Apr 9 14:39:04 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 71)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 71 exited after 269 second(s)
Tue Apr 9 14:43:33 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 79)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 79 exited after 3 second(s)
Tue Apr 9 14:51:35 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 89)
*** Starting uWSGI 2.0.15 (64bit) on [Tue Apr 9 15:39:58 2019] ***
compiled with version: 6.3.0 on 29 December 2017 00:16:31
os: Linux-4.14.109-80.92.amzn1.x86_64 #1 SMP Mon Apr 1 23:07:39 UTC 2019
nodename: mailman-web
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /opt/mailman-web
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
setgid() to 101
setuid() to 100
chdir() to /opt/mailman-web
your processes number limit is 3860
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 0.0.0.0:8080 fd 8
uwsgi socket 1 bound to TCP address 0.0.0.0:8000 fd 9
Python version: 2.7.14 (default, Dec 19 2017, 17:52:21) [GCC 6.3.0]
Python main interpreter initialized at 0x562e2c0b11e0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
[uwsgi-cron] command "./manage.py runjobs minutely" registered as cron task
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs hourly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs daily" registered as cron task
[uwsgi-cron] command "./manage.py runjobs monthly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs weekly" registered as cron task
[uwsgi-cron] command "./manage.py runjobs yearly" registered as cron task
mapped 166144 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x562e2c0b11e0 pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1)
spawned uWSGI worker 1 (pid: 39, cores: 2)
Tue Apr 9 15:39:59 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 41)
[uwsgi-daemons] spawning "./manage.py qcluster" (uid: 100 gid: 101)
15:40:02 [Q] INFO Q Cluster-43 starting.
15:40:02 [Q] INFO Process-1:1 ready for work at 58
15:40:02 [Q] INFO Process-1:2 monitoring at 59
15:40:02 [Q] INFO Process-1 guarding cluster at 57
15:40:02 [Q] INFO Process-1:3 pushing tasks at 60
15:40:02 [Q] INFO Q Cluster-43 running.
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 41 exited after 4 second(s)
Tue Apr 9 15:40:59 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 63)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 63 exited after 13 second(s)
Tue Apr 9 15:41:59 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 71)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 71 exited after 33 second(s)
Tue Apr 9 15:42:59 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 79)
16:33:36 [Q] ERROR could not translate host name "database" to address: Try again
16:35:17 [Q] INFO Process-1:3 stopped pushing tasks
16:35:25 [Q] ERROR reincarnated pusher Process-1:3 after sudden death
16:35:25 [Q] INFO Process-1:4 pushing tasks at 87
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 79 exited after 3146 second(s)
Tue Apr 9 16:35:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 88)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 88 exited after 3 second(s)
Tue Apr 9 16:36:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 96)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 96 exited after 3 second(s)
Tue Apr 9 16:37:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 104)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 104 exited after 3 second(s)
Tue Apr 9 16:38:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 112)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 112 exited after 3 second(s)
Tue Apr 9 16:39:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 120)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 120 exited after 3 second(s)
Tue Apr 9 16:40:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 128)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 128 exited after 3 second(s)
Tue Apr 9 16:41:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 136)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 136 exited after 3 second(s)
Tue Apr 9 16:42:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 144)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 144 exited after 3 second(s)
Tue Apr 9 16:43:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 152)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 152 exited after 3 second(s)
Tue Apr 9 16:44:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 160)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 160 exited after 3 second(s)
Tue Apr 9 16:45:00 2019 - [uwsgi-cron] running "./manage.py runjobs quarter_hourly" (pid 168)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running with pid 168 exited after 2 second(s)
Tue Apr 9 16:45:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 176)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 176 exited after 3 second(s)
Tue Apr 9 16:46:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 184)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 184 exited after 2 second(s)
Tue Apr 9 16:47:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 192)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 192 exited after 3 second(s)
Tue Apr 9 16:48:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 200)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 200 exited after 3 second(s)
Tue Apr 9 16:49:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 208)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 208 exited after 3 second(s)
Tue Apr 9 16:50:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 216)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 216 exited after 3 second(s)
Tue Apr 9 16:51:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 224)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 224 exited after 3 second(s)
Tue Apr 9 16:52:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 232)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 232 exited after 3 second(s)
Tue Apr 9 16:53:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 240)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 240 exited after 2 second(s)
Tue Apr 9 16:54:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 248)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 248 exited after 2 second(s)
Tue Apr 9 16:55:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 256)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 256 exited after 3 second(s)
Tue Apr 9 16:56:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 264)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 264 exited after 3 second(s)
Tue Apr 9 16:57:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 272)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 272 exited after 3 second(s)
Tue Apr 9 16:58:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 280)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 280 exited after 3 second(s)
Tue Apr 9 16:59:25 2019 - [uwsgi-cron] running "./manage.py runjobs minutely" (pid 288)
[uwsgi-cron] command "./manage.py runjobs minutely" running with pid 288 exited after 3 second(s)
Tue Apr 9 17:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs quarter_hourly" (pid 296)
Tue Apr 9 17:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs hourly" (pid 297)
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
utility.execute()
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 337, in execute
utility.execute()
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 337, in execute
django.setup()
django.setup()
File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models()
app_config.import_models()
File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
self.models_module = import_module(models_module_name)
File "/usr/local/lib/python2.7/importlib/__init__.py", line 37, in import_module
File "/usr/local/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
__import__(name)
File "/usr/local/lib/python2.7/site-packages/hyperkitty/models/__init__.py", line 28, in <module>
File "/usr/local/lib/python2.7/site-packages/hyperkitty/models/__init__.py", line 28, in <module>
from .email import Email, Attachment
from .email import Email, Attachment
File "/usr/local/lib/python2.7/site-packages/hyperkitty/models/email.py", line 37, in <module>
File "/usr/local/lib/python2.7/site-packages/hyperkitty/models/email.py", line 37, in <module>
from hyperkitty.lib.analysis import compute_thread_order_and_depth
from hyperkitty.lib.analysis import compute_thread_order_and_depth
File "/usr/local/lib/python2.7/site-packages/hyperkitty/lib/analysis.py", line 28, in <module>
File "/usr/local/lib/python2.7/site-packages/hyperkitty/lib/analysis.py", line 28, in <module>
import networkx as nx
import networkx as nx
File "/usr/local/lib/python2.7/site-packages/networkx/__init__.py", line 114, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/__init__.py", line 114, in <module>
import networkx.generators
import networkx.generators
File "/usr/local/lib/python2.7/site-packages/networkx/generators/__init__.py", line 6, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/generators/__init__.py", line 6, in <module>
from networkx.generators.classic import *
from networkx.generators.classic import *
File "/usr/local/lib/python2.7/site-packages/networkx/generators/classic.py", line 26, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/generators/classic.py", line 26, in <module>
from networkx.algorithms.bipartite.generators import complete_bipartite_graph
from networkx.algorithms.bipartite.generators import complete_bipartite_graph
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/__init__.py", line 57, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/__init__.py", line 57, in <module>
import networkx.algorithms.connectivity
import networkx.algorithms.connectivity
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/connectivity/__init__.py", line 3, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/connectivity/__init__.py", line 3, in <module>
from .connectivity import *
from .connectivity import *
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/connectivity/connectivity.py", line 13, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/connectivity/connectivity.py", line 13, in <module>
from networkx.algorithms.flow import boykov_kolmogorov
from networkx.algorithms.flow import boykov_kolmogorov
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/flow/__init__.py", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/networkx/algorithms/flow/__init__.py", line 1, in <module>
from .maxflow import *
from .maxflow import *
MemoryErrorMemoryError
18:16:37 [Q] ERROR could not translate host name "database" to address: Try again
...etc ...
For Mailman
cat mailmanweb.log
ERROR 2019-04-09 20:05:48,878 934 hyperkitty.lib.utils Failed to update the fulltext index: could not translate host name "database" to address: Try again
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/hyperkitty/lib/utils.py", line 186, in run_with_lock
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/hyperkitty/search_indexes.py", line 87, in update_index
update_cmd.update_backend("hyperkitty", "default")
File "/usr/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 240, in update_backend
total = qs.count()
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 363, in count
return self.query.get_count(using=self.db)
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 498, in get_count
number = obj.get_aggregation(using, ['__count'])['__count']
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 479, in get_aggregation
result = compiler.execute_sql(SINGLE)
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 874, in execute_sql
cursor = self.connection.cursor()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 254, in cursor
return self._cursor()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 229, in _cursor
self.ensure_connection()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
OperationalError: could not translate host name "database" to address: Try again
ERROR 2019-04-09 20:15:08,192 983 hyperkitty.lib.utils Failed to update the fulltext index: could not translate host name "database" to address: Try again
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/hyperkitty/lib/utils.py", line 186, in run_with_lock
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/hyperkitty/search_indexes.py", line 87, in update_index
update_cmd.update_backend("hyperkitty", "default")
File "/usr/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 240, in update_backend
total = qs.count()
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 363, in count
return self.query.get_count(using=self.db)
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 498, in get_count
number = obj.get_aggregation(using, ['__count'])['__count']
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 479, in get_aggregation
result = compiler.execute_sql(SINGLE)
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 874, in execute_sql
cursor = self.connection.cursor()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 254, in cursor
return self._cursor()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 229, in _cursor
self.ensure_connection()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
OperationalError: could not translate host name "database" to address: Try again
5 years, 7 months