Re: Updating from Ubuntu-20.04 LTE installation
by Abhilash Raj
On Sat, May 23, 2020, at 8:28 PM, Mark Sapiro wrote:
> On 5/23/20 7:02 PM, Peter Adebahr via Mailman-users wrote:
> >
> > Our installation was done by "apt-get install" in Ubuntu 20, thus still
> > running MM 3.2.2 (and python 3.8.2).
> >
> > Do you have any advise, how to upgrade from there to your current
> > version? I know this might be a bit dangerous, but with today's VMs the
> > risk is much less than it used to be:
>
>
> It shouldn't be difficult, but I can't give you details because I don't
> know exactly how the Debian/Ubuntu package installs things. Also I don't
> know whether "current version" refers to the 3.3.1 release or the head
> of the https://gitlab.com/mailman/mailman master branch.
>
>
> > Do you think it would be possible, just to replace the code and library
> > parts, keeping the database and config files as is?
>
>
> Yes. It should be fairly straightforward. You first need to find where
> the Mailman Core package is. You should be able to just replace the
> contents of the `mailman` package directory with ours. You may be able
> to do this via pip
>
> pip install --upgrade mailman
>
> globally or within Mailman's virtualenv if it is installed in a virtualenv.
This is probably not a good idea, global install quite often breaks a lot of stuff (Like I broke Yum on my work computer since I wanted something newer than 10yo python packages).
A better idea would be to install Mailman from scratch inside a virtualenv somewhere in /opt/mailman and then letting it consume the same configurations. I think Ubuntu/Debian have their configurations in `/etc/mailman3/` and Mailman Core installed anywhere should just pick that up without any special work.
Same goes for Postorius/Django stuff. You can switch to a different Django project and just point to Debian/Ubuntu's settings.py (location of which should be in README.debian of the Debian package I presume).
> However, there are caveats. There are Debian patches at
> <https://sources.debian.org/patches/mailman3/3.2.2-1/>. The big `0002`
> patch replaces importlib_resources with importlib.resources because
> importlib_resources is not available in Debian. Most of the patches
> apply to tests, and for the actual working code, we fixed this
> differently as of Mailman 3.3.1, so I don't think you need the Debian
> patches.
>
>
> --
> 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/
>
--
thanks,
Abhilash Raj (maxking)
5 years, 9 months
Hyperkitty issue(s)
by Bryan Loniewski
Hello --
I'm stuck trying to integrate Hyperkitty. I see the following errors in mailman.log and mailmansuite.log respectively:
<snipped>
[2020-05-27 16:42:11 -0400] [5140] [ERROR] Error handling request /3.1/lists/bry_test4.lists-test.rutgers.edu/archivers
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/wsgiapp.py", line 193, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 274, in falcon.api.API.__call__
File "falcon/api.py", line 269, in falcon.api.API.__call__
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/lists.py", line 406, in on_get
for archiver in archiver_set.archivers
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/lists.py", line 407, in <dictcomp>
if archiver.system_archiver.is_enabled}
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/model/mailinglist.py", line 587, in system_archiver
raise AssertionError('Archiver not found: {}'.format(self.name))
AssertionError: Archiver not found: hyperkitty
and
<snipped>
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/postorius/middleware.py", line 42, in __call__
return self.get_response(request)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 36, in inner
response = response_for_exception(request, exc)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 90, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 125, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/views/debug.py", line 89, in technical_500_response
reporter = ExceptionReporter(request, exc_type, exc_value, tb)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/views/debug.py", line 254, in __init__
self.template_info = getattr(self.exc_value, 'template_debug', None)
File "/opt/mailman/mm/venv/lib/python3.6/tempfile.py", line 479, in __getattr__
file = self.__dict__['file']
KeyError: 'file'
Note that I've kinda followed the Virtualenv route along with using Mark's helpful webpage re: his experiences.
Some relevant? config files...
mailman.cfg:
<snip>
[archiver.prototype]
enable: yes
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /opt/mailman/mm/mailman-hyperkitty.cfg
<snip>
mailman-hyperkitty.cfg:
[general]
base_url: https://a_real_domain/mm3/hyperkitty
api_key: <movealong>
I can provide additional conf file setups if warranted? I am curious (and perhaps this is in fact the issue) why when I run mailman conf I don't see the archiver.hyperkittty section even though its in the mailman.cfg file? While at the same time I do see archiver.{mail_archive,mhonarc}? I know it's reading my mailman.cfg based on other sections I've already setup/manipulated.
Another data point:
$ grep -i hyperkitty requirements.txt
HyperKitty==1.3.2
mailman-hyperkitty==1.1.0
Any suggestions?
________________________
Bryan Loniewski
Rutgers University
OIT:EAS:Messaging and Collaboration Services
System Administrator
5 years, 9 months
Re: Reg Archive Inactive Status
by Nirmal J
DNS Report for that list1.iitm.ac.in is 10.24.5.52
-----Original Message-----
From: Nirmal <nirmal(a)iitm.ac.in>
To: Nirmal <nirmal(a)iitm.ac.in>
Cc: Stephen <steve(a)turnbull.jp>; mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:28 PM IST
Subject: Re: [MM3-users] Re: Reg Archive Inactive Status
Yes I have it. I am also sharing that also settings_local.py file
# This file is imported by the Mailman Suite. It is used to override
# the default settings from /usr/share/mailman3-web/settings.py.
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'vWzgIJ1Hvjgy4yXJz7l71vpxX6+pJcBLMdv8mWNNAd0ajVr1'
ADMINS = (
('Mailman Suite Admin', 'nirmal(a)iitm.ac.in'),
)
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts
# Set to '*' per default in the Deian package to allow all hostnames. Mailman3
# is meant to run behind a webserver reverse proxy anyway.
ALLOWED_HOSTS = [
#"localhost", # Archiving API from Mailman, keep it.
# "lists.your-domain.org",
# Add here all production URLs you may have.
'*'
]
# Mailman API credentials
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = '/EqNGU+Mj8udFpw4ueIkhWXzAy3kJIy17wwzChrXb3P8Vh4e'
MAILMAN_ARCHIVER_KEY = 'n/ZZnR5bRgNdUEyNK4p731C1+gWJLw0/'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '10.24.5.52')
# Application definition
INSTALLED_APPS = (
'hyperkitty',
'postorius',
'django_mailman3',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor', 'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora',
#'allauth.socialaccount.providers.openid',
#'allauth.socialaccount.providers.github',
#'allauth.socialaccount.providers.gitlab',
#'allauth.socialaccount.providers.google',
#'allauth.socialaccount.providers.facebook',
#'allauth.socialaccount.providers.twitter',
#'allauth.socialaccount.providers.stackexchange',
)
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
# Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.sqlite3',
#'ENGINE': 'django.db.backends.postgresql_psycopg2',
#'ENGINE': 'django.db.backends.mysql',
# DB name or path to database file if using sqlite3.
'NAME': '/var/lib/mailman3/web/mailman3web.db',
# The following settings are not used with sqlite3:
'USER': '',
'PASSWORD': '',
# HOST: empty for localhost through domain sockets or '127.0.0.1' for
# localhost through TCP.
'HOST': '',
# PORT: set to empty string for default.
'PORT': '',
# 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'",
},
}
}
# If you're behind a proxy, use the X-Forwarded-Host header
# See https://docs.djangoproject.com/en/1.8/ref/settings/#use-x-forwarded-host
USE_X_FORWARDED_HOST = True
# And if your proxy does your SSL encoding for you, set SECURE_PROXY_SSL_HEADER
# https://docs.djangoproject.com/en/1.8/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')
# Other security settings
# SECURE_SSL_REDIRECT = True
# If you set SECURE_SSL_REDIRECT to True, make sure the SECURE_REDIRECT_EXEMPT
# contains at least this line:
# SECURE_REDIRECT_EXEMPT = [
# "archives/api/mailman/.*", # Request from Mailman.
# ]
# SESSION_COOKIE_SECURE = True
# SECURE_CONTENT_TYPE_NOSNIFF = True
# SECURE_BROWSER_XSS_FILTER = True
# CSRF_COOKIE_SECURE = True
# CSRF_COOKIE_HTTPONLY = True
# X_FRAME_OPTIONS = 'DENY'
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/ LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Set default domain for email addresses.
EMAILNAME = 'list1.iitm.ac.in'
# If you enable internal authentication, this is the address that the emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#default-from-email
# DEFAULT_FROM_EMAIL = "mailing-lists(a)you-domain.org"
DEFAULT_FROM_EMAIL = 'postorius@{}'.format(EMAILNAME)
# If you enable email reporting for error messages, this is where those emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
# SERVER_EMAIL = 'root(a)your-domain.org'
SERVER_EMAIL = 'root@{}'.format(EMAILNAME)
# Django Allauth
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
#
# Social auth
#
SOCIALACCOUNT_PROVIDERS = {
#'openid': {
# 'SERVERS': [
# dict(id='yahoo',
# name='Yahoo',
# openid_url='http://me.yahoo.com'),
# ],
#},
#'google': {
# 'SCOPE': ['profile', 'email'],
# 'AUTH_PARAMS': {'access_type': 'online'},
#}, #'facebook': {
# 'METHOD': 'oauth2',
# 'SCOPE': ['email'],
# 'FIELDS': [
# 'email',
# 'name',
# 'first_name',
# 'last_name',
# 'locale',
# 'timezone',
# ],
# 'VERSION': 'v2.4',
#},
}
# On a production setup, setting COMPRESS_OFFLINE to True will bring a
# significant performance improvement, as CSS files will not need to be
# recompiled on each requests. It means running an additional "compress"
# management command after each code upgrade.
# http://django-compressor.readthedocs.io/en/latest/usage/#offline-compression
COMPRESS_OFFLINE = True
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
SITE_ID = 2
import ldap
from django_auth_ldap.config import LDAPSearch # LDAP server URI
AUTH_LDAP_SERVER_URI = "ldap://127.0.0.1"
# Bind DN & password (service account from IITM LDAP admin)
AUTH_LDAP_BIND_DN = "cn=ldapreader,ou=Services,dc=iitm,dc=ac,dc=in"
AUTH_LDAP_BIND_PASSWORD = "642126"
# Where to search for users
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"ou=People,dc=iitm,dc=ac,dc=in",
ldap.SCOPE_SUBTREE,
"(uid=%(user)s)"
)
# Map LDAP attributes to Django user fields
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "cn",
"last_name": "sn",
# "email": "mail" # optional if not present
}
# Authentication backends (LDAP first, fallback to Django DB)
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
]
import logging
logger = logging.getLogger('django_auth_ldap')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
-----Original Message-----
From: Nirmal <nirmal(a)iitm.ac.in>
To: Stephen <steve(a)turnbull.jp>
Cc: mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:27 PM IST
Subject: Re: [MM3-users] Re: Reg Archive Inactive Status
Yes I have it. I am also sharing that also settings_local.py
-----Original Message-----
From: Stephen <steve(a)turnbull.jp>
To: Nirmal <nirmal(a)iitm.ac.in>
Cc: mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:09 PM IST
Subject: [MM3-users] Re: Reg Archive Inactive Status
Nirmal J via Mailman-users writes:
> Hereby I am sharing the full settings.py file.
Are you sure this is the settings.py being used by your installation?
It appears to be the distribution file, unchanged.
> MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')# Application definition
If this is from the installed settings.py, it isn't going to work,
since you specified a routable domain (I think, although
"list1.iitm.ac.in" is not in the public DNS), which will have a
routable address, not localhost.
What IP does your DNS report for "list1.iitm.ac.in"?
> HOSTNAME = 'localhost.local'
That isn't what you told Mailman via hyperkitty.cfg. I'm not sure it
matters, but I think you should make sure all the config files agree
on the name of the host.
> # If you enable email reporting for error messages, this is where those emails
> # will appear to be coming from. Make sure you set a valid domain name,
> # otherwise the emails may get rejected.
> # https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
> # SERVER_EMAIL = 'root(a)your-domain.org'
> SERVER_EMAIL = 'root@{}'.format(HOSTNAME)
This can be problematic, at least if you enable error messages by email.
> try:
> from settings_local import *
> except ImportError:
> pass
Do you have a "settings_local.py" file?
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
5 months, 2 weeks
Re: HYPERKITTY_ATTACHMENT_FOLDER
by Ugnius S
Could You please confirm that this parameter should be placed in
mailman-hyperkitty.cfg file?
I have checked mailman/postorius/hyperkitty owner user can write files
there and web user group
has privileges to write and to read, but *no any files appear there*.
Mailman works, it is possible to download
attachments from hyperkitty. Mailman restarted, uwsgi restarted, runjobs
restarted. No files in
/full/path/to/folder/
File looks like:
[general]
base_url: https://flistserv.example.com/hyperkitty/
api_key: BlaBlabla
HYPERKITTY_ATTACHMENT_FOLDER = /full/path/to/folder/
BR
Ugnius
2019-09-11, tr, 21:21 Ugnius S <ugniusviln(a)gmail.com> rašė:
> Thank You so much.
>
> 1) https://hyperkitty.readthedocs.io/en/latest/install.html
> Close to the end before the "UPDATE" topic, chapter "Customization".
>
> 2)
> https://buildmedia.readthedocs.org/media/pdf/hyperkitty/stable/hyperkitty.p…
> Page 10, chapter 2.8 "Customization"
>
> BR
> Ugnius
>
> 2019-09-11, tr, 20:16 Abhilash Raj <maxking(a)asynchronous.in> rašė:
>
>>
>>
>> On Wed, Sep 11, 2019, at 9:52 AM, Ugnius S wrote:
>> > Hi.
>> >
>> > Can anybody send example how to set it? It is mentioned in
>> documentation,
>> > but very vaguely.
>>
>> If you can point out where did you find it in docs, I can update it.
>> Information is kind of duplicated in a few places.
>>
>> > HYPERKITTY_ATTACHMENT_FOLDER = /full/unix/path
>>
>> This is the right value.
>>
>> It is a path on the filesystem, where the user running Hyperkitty is
>> allowed to write.
>>
>> >
>> > HYPERKITTY_ATTACHMENT_FOLDER = http://localhost:8000/something
>> >
>> > HYPERKITTY_ATTACHMENT_FOLDER = ./var/data/something/
>> >
>> > Has anybody experience of using this, maybe have recommendations of
>> using
>> > it? Better under project user or better under web content owner where
>> the
>> > static content is. I would like to store attachments separately to avoid
>> > growing database.
>> > Hyperkitty documentation:
>> > By default, HyperKitty stores the email attachments in the database.
>> If
>> > you would rather have them stored on the filesystem, you can set the
>> > HYPERKITTY_ATTACHMENT_FOLDER configuration value to a directory.
>> > Make sure that the user running the Django process (for example, apache
>> or
>> > www-data) has the permissions to write in this directory.
>> >
>> > -------------
>> > _______________________________________________
>> > 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)
>> _______________________________________________
>> 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/
>>
>
6 years, 6 months
Re: Newbie hyperkitty question
by Stephen Daniel
Thanks. Very helpful.
On Tue, Jan 11, 2022 at 2:03 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/11/22 8:27 AM, Stephen Daniel wrote:
> > Mailman users --
> >
> > I am setting up a new mailman3 installation, and this is my first
> > experience with the suite. All of the software is up and running, but I
> > cannot tell if hyperkitty is actually running.
>
>
> In Postorius, in the list's `info` view can you click the Archives
> button and see archived messages? That's HyperKitty.
>
> If the messages aren't there with the hyperkitty archiving option
> enabled, check `mailman.log` for why.
>
> Also do messages from the list have an Archived-At: header?
>
>
> > When I look at my test mailing list, two archive options are available,
> > hyperkitty and "prototype", and both are enabled. I can see that my
> email
> > is being archived, but I think "prototype" is what is doing the
> archiving.
> > I see that a test message will end up in
> >
> /opt/mailman/mm/var/archives/prototype/<LISTNAME>@<LISTDOMAIN.org>/new/164....
> > and nowhere else. This suggests that "prototype" is archiving, but
> > hyperkitty is not.
>
>
> No this says the prototype archiver is working. It says nothing about
> Hyperkitty.
>
>
> > So, this opens up a raft of questions on hyperkitty:
>
>
> David Newman has answered some of this, but ...
>
>
> > - How do I tell if hyperkitty is actually running?
>
>
> It doesn't actually run. it is a Django web UI and a web API that serves
> things on request.
>
>
> > - Does hyperkitty have a web-UI for admins or users? How would I
> access
> > it?
>
> See above.
>
>
> > - I can not find any documentation on hyperkitty, other than
> > installation instructions and change logs. Does documentation exist?
>
> No, not really.
>
>
> > - How do I set policies on how long archives are kept?
> > - Assuming I want to back up my archives, what do I need to back up?
>
>
> Messages are kept forever unless you do something to delete them.
> HyperKitty's messages are stored in the database configured in the
> DATABASES setting in your Django settings. How you backup the database
> depends on the database manager. You already found the prototype
> archiver's messages.
>
>
> --
> 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/
>
4 years, 2 months
Re: About to Install MM3 -- Seeking clarification
by Onyeibo Oku
Help!
Regards
Onyeibo
On Thu Oct 13, 2022 at 6:03 AM WAT, Onyeibo Oku wrote:
> On Wed, 12 Oct 2022 17:52:47 -0700
> Mark Sapiro <mark(a)msapiro.net> wrote:
>
> Thanks Eggert and Sapiro.
>
> >
> > As Eggert suggests, see
> > https://docs.mailman3.org/en/latest/install/virtualenv.html and
> > follow that.
>
> I already started out on the above route. Its an adaptation because I
> am running Fedora. I had no problem with system-wide installations via
> dnf package management. However, some parts of the documentation does
> not add up.
>
> > You don't need to download the source from GitLab.
> > Following that doc will get the latest releases from PyPI via pip.
> > Those are still somewhat out of date - we really should make new
> > releases - so if you want the latest from GitLab, there are a couple
> > of ways to do it. Perhaps the easiest is to just run the various `pip
> > install` commands as documented and then upgrade Mailman core in your
> > venv with ```
> > pip install --upgrade git+https://gitlab.com/mailman/mailman@master
> > ```
> > and update the various mailman web packages with
> > ```
> > pip install --upgrade git+https://gitlab.com/mailman/xxx@master
> > ```
> > where xxx is mailman-web, mailman-hyperkitty, django-mailman3,
> > postorius, hyperkitty. I.e., run it 5 times, once for each value of
> > xxx.
> >
>
> I will come to this eventually (assuming that does not break things
> later). I aim to get it all working with regular pip packages first. I
> have installed mailman core already.
>
> Fedora expects mailman files to reside at /usr/lib/mailman. It appears
> to ship with a mailman unix user. I adapted to those system defaults.
>
> Now I observe that "su - mailman" gives me the proper prompt but
> .bashrc doesn't kick in. I still have to manually change to the
> virtual environment despite setting the automatic change in .bashrc.
> However, "su mailman" runs .bashrc but the prompt says "bash X.XX $".
> Is this normal?
>
> Subsequent parts of the doc show the path "/opt/mailman/mm/var/*" which
> should correspond to "/usr/lib/mailman/mm/var/*" on my instance.
> However, I don't see any instructions on how to get the "/mm" folder
> and the associated sub-folders. I just have "/usr/lib/mailman"
>
> I am lost
>
> "pip list" within the venv environment confirms that I have "mailman
> 3.3.5". What am I missing?
>
> Regards
> Onyeibo
>
>
> _______________________________________________
> 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/
3 years, 4 months
Re: Missing Base64 encoding from control message reply
by Jana Berger
On 22.09.2023 18:32, Stephen J. Turnbull wrote:
> lists-mailman3(a)janaberger.de writes:
>
> > I have a setup with GNU Mailman 3.3.8 where a user tried to
> > subscribe. When replying to the "confirm" message, the user
> > received a completely garbled response, like so:
> >
> > N?z?????zf???&???j?????u?[zZ0:???v???,j?z???k?e?0
> >
> 4D???r?^b??r?????*'???y????{ax?L?X????0:???v???,j?z???k?d?m?-???zz?rn??l]y+???-E?(
> >
> ?^N??'??M???t???Mz?????^i?????}?o?\????6sN?zf??????r??z?????????b?{h?????f?r?ne==
>
> To diagnose, we really need to see that in context of the raw message
> as received by the user.
You can see the same or similar result by opening the EML I quoted. Does
the list support attachments? Then I will attach the file directly.
>
> > The user then forwarded the .eml file to me, which clearly shows
> > the contents of the mail as plain text while being announced as
> > base64 (Content-Transfer-Encoding: base64):
>
> It also clearly doesn't show anything like the mojibake above. What
> is the relation between the two?
Sorry, I should have made that clearer - when opening the EML file with
e.g. Thunderbird, the contents (message text) of the mail as displayed
is the garbled string. I assume it is the result of Thunderbird trying
to process the contents as base64-encoded, which it is not.
>
> While the problems could be related to Mailman, it could also be any
> MTA along the way or the user's mail client.
>
> I suspect that the .eml file has been significantly altered by
> intervening software. As far as I know, the Python email package does
> not MIME-encode plain ASCII text as you see in the email's subject.
I have multiple control messages, all received from my instance which
all contain the "Content-Transfer-Encoding: base64" marker, their
contents is plain text (Content-Type: text/plain; charset="utf-8"), but
they are still encoded using base64.
Of course that is not proof, but an indication that it is either done by
the mail server itself or widely across MUAs.
>
> The only other thing I can think of is it might have something to do
> with your internationalization settings. What is the default language
> of the list? (This is available in Postorius.) Have you changed the
> default encoding for English on your site? (I think you need to look
> in mailman.cfg for this.) What is the default language of the site?
Global "Preferred language" is "English (USA)", which is not overridden
by the list in question. I have not changed the default encoding. Is
there a surefire way to detect this?
My mailman.cfg has no section pertaining to encoding, and all related
files also do not mention encoding.
2 years, 5 months
Re: mailman3 on new Debian 12 installation, got ssl apache working on all URLs except /mailman3
by Odhiambo Washington
On Fri, Mar 28, 2025 at 12:06 AM Philip Bondi <pjbondi(a)systemdatabase.com>
wrote:
> LE and certbot created those paths for me, somehow. Both on CentOS and
> Debian. Don't know why. Checked my putty logs. Cannot find the first
> emergence of strange path. You guys are superheroes.
>
> Debian 12:
>
> <PRE>
> pjbondi@shackleton12:~$ sudo -i
> root@shackleton12:~# cat /etc/os-release
> PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
> NAME="Debian GNU/Linux"
> VERSION_ID="12"
> VERSION="12 (bookworm)"
> VERSION_CODENAME=bookworm
> ID=debian
> HOME_URL="https://www.debian.org/"
> SUPPORT_URL="https://www.debian.org/support"
> BUG_REPORT_URL="https://bugs.debian.org/"
> root@shackleton12:~# ls -alF /etc/letsencrypt/live/
> total 32
> drwx------ 7 root root 4096 Nov 29 07:57 ./
> drwxr-xr-x 9 root root 4096 Mar 27 15:02 ../
> -rw-r--r-- 1 root root 740 Nov 27 10:27 README
> drwxr-xr-x 2 root root 4096 Mar 6 09:03 systemdatabase.ca/
> drwxr-xr-x 2 root root 4096 Mar 6 09:03 systemdatabase.ca-0001/
> drwxr-xr-x 2 root root 4096 Mar 6 09:04 systemdatabase.com/
> drwxr-xr-x 2 root root 4096 Mar 6 09:04 systemdatabase.com-0001/
> drwxr-xr-x 2 root root 4096 Mar 6 09:04 systemdatabase.homelinux.com/
> root@shackleton12:~#
> </PRE>
>
> CentOS 7:
>
> <PRE>
> [1004] $ cat /etc/os-release
> NAME="CentOS Linux"
> VERSION="7 (Core)"
> ID="centos"
> ID_LIKE="rhel fedora"
> VERSION_ID="7"
> PRETTY_NAME="CentOS Linux 7 (Core)"
> ANSI_COLOR="0;31"
> CPE_NAME="cpe:/o:centos:centos:7"
> HOME_URL="https://www.centos.org/"
> BUG_REPORT_URL="https://bugs.centos.org/"
>
> CENTOS_MANTISBT_PROJECT="CentOS-7"
> CENTOS_MANTISBT_PROJECT_VERSION="7"
> REDHAT_SUPPORT_PRODUCT="centos"
> REDHAT_SUPPORT_PRODUCT_VERSION="7"
>
> [1005] $ ls -alF /etc/letsencrypt/live/
> total 4
> drwx------. 7 root root 168 Aug 15 2023 ./
> drwxr-xr-x. 9 root root 108 Jan 19 03:22 ../
> -rw-r--r--. 1 root root 740 Jul 2 2020 README
> drwxr-xr-x. 2 root root 93 Jan 19 2023 systemdatabase.ca/
> drwxr-xr-x. 2 root root 112 Jan 19 03:22 systemdatabase.ca-0001/
> drwxr-xr-x. 2 root root 112 Feb 5 2021 systemdatabase.com/
> drwxr-xr-x. 2 root root 112 Jan 19 03:21 systemdatabase.com-0001/
> drwxr-xr-x. 2 root root 112 Jan 19 03:20 systemdatabase.homelinux.com/
> </PRE>
>
> Again. We're almost there with ssl apache configs.
> - works for LE challenge and Subversion https://systemdatabase.ca/
> - 6 paths work for MM3 https://systemdatabase.ca/postorius/, etc
> - But https://systemdatabase.ca/mailman3 fails
>
So, might you be having a file named /etc/mailman3/urls.py and what does it
contain?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
11 months, 2 weeks
Re: Archive not updated
by Marc SCHAEFER
Hello,
On Mon, Sep 02, 2024 at 09:08:09AM -0000, mailman3--- via Mailman-users wrote:
> Debian bookworm
Archival works here.
Here is my simplified auto-deployement script (some might not be useful to you, I am using a local Postfix):
PS: replace services_install by apt-get install
djangoauth=@@@REPLACE
# this is a bash array: server, user, pw
psqlauth=@@@REPLACE
services_install postfix
(while read line
do
case $line in
*=*) postconf -e "$line";;
*) echo "TOSSING: $line" >&2;;
esac
done) <<EOF
myhostname = $lists
mydestination = $lists
mynetworks = 127.0.0.0/8
inet_protocols = ipv4
inet_interfaces = all
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps = hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains = hash:/var/lib/mailman3/data/postfix_domains
relayhost = @@@REPLACE
EOF
cat >> /etc/aliases <<EOF
postorius: root
www-data: root
root: ${djangoauth[1]}
EOF
newaliases
services_install dbconfig-pgsql
cat > /etc/dbconfig-common/mailman3.conf <<EOF
dbc_install='true'
dbc_upgrade='true'
dbc_remove='false'
dbc_dbtype='pgsql'
dbc_dbuser='${psqlauth[1]}'
dbc_dbpass='${psqlauth[2]}'
dbc_dbserver='${psqlauth[0]}'
dbc_dbname='mailman'
dbc_dbadmin='postgres'
EOF
sed < /etc/dbconfig-common/mailman3.conf \
> /etc/dbconfig-common/mailman3-web.conf \
"s/^dbc_dbname=.*/dbc_dbname='mailmanweb'/"
chmod 600 /etc/dbconfig-common/mailman3.conf \
/etc/dbconfig-common/mailman3-web.conf
services_install mailman3-full mailman3-web
sed --in-place "s/^site_owner: .*/site_owner: ${djangoauth[1]}/" \
/etc/mailman3/mailman.cfg
# archiving mails from mailing-lists automatically
cat >> /etc/mailman3/mailman.cfg <<'EOF'
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman3/mailman-hyperkitty.cfg
[styles]
default: private-default
EOF
# enable archiver key
sed -i "s%^api_key:.*%api_key: $(egrep MAILMAN_ARCHIVER_KEY /etc/mailman3/mailman-web.py | awk '{print $NF;}' | sed "s/'//g")%" /etc/mailman3/mailman-hyperkitty.cfg
# work-around: SQLAlchemy no longer supports "postgres"
sed --in-place "s%^url: postgres://%url: postgresql://%" \
/etc/mailman3/mailman.cfg
sed --in-place "s/.*'Mailman Suite Admin', 'root@localhost').*/('Mailman Suite Admin', '${djangoauth[1]}'),/;s/^EMAILNAME\s*=.*/EMAILNAME = '$lists'/;/django_mailman3.lib.auth.fedora/d" /etc/mailman3/mailman-web.py
# aliases mailman <-> postfix
mkdir -p /var/lib/mailman3/data
chown list:list /var/lib/mailman3/data
for i in postfix_lmtp postfix_lmtp postfix_domains
do
touch /var/lib/mailman3/data/$i
postmap /var/lib/mailman3/data/$i
done
chown list:list /var/lib/mailman3/data/postfix_*
# work-around for django_q
# (does not seem to work, and DEFAULT_AUTO_FIELD should be also
# configured to django.db.models.BigAutoField)
dpkg-divert --rename /usr/lib/python3/dist-packages/django_q/conf.py
sed < /usr/lib/python3/dist-packages/django_q/conf.py.distrib \
> /usr/lib/python3/dist-packages/django_q/conf.py \
's%TIMEOUT = conf.get("timeout", None)%TIMEOUT = conf.get("timeout", 59)%'
pkill -e -2 --full 'python3 manage.py qcluster' || true
# fix example.com
PGPASSWORD=${psqlauth[2]} psql -h ds-services-psql -U ${psqlauth[1]} mailmanweb -c "UPDATE django_site SET domain = '$lists', name = '$lists' WHERE id = 1"
# workaround required?
#chgrp list /var/lib/mailman3/locks/
#chmod g+rwx /var/lib/mailman3/locks/
chgrp list /var/log/mailman3/*.log
# https://docs.djangoproject.com/en/3.0/ref/django-admin/#django-admin-create…
env DJANGO_SUPERUSER_PASSWORD=${djangoauth[3]} \
DJANGO_SUPERUSER_USERNAME=${djangoauth[2]} \
DJANGO_SUPERUSER_EMAIL=${djangoauth[1]} \
mailman-web createsuperuser --noinput \
|| echo "django super user already exists in DB, ignored"
# then I migrate the lists
1 year, 6 months
Re: Can creating too many Django accounts crash Mailman3 server?
by Abhilash Raj
On Tue, Sep 15, 2020, at 12:09 AM, Stephen J. Turnbull wrote:
> Mohsen Masoudfar writes:
>
> > It seems anybody can go to the site:
> > https://LISTSERVNAME/mailman3/postorius/lists/
> > and click on the [Sign up] on the top-right corner and create an
> > account.
>
> Yes.
>
> > This can easily be automated, even though the next step, confirming
> > the email address, being ignored. I believe it can be used as a
> > target for a DOS attack by creating so many accounts, that
> > eventually causes an 'out of space' error.
> >
> > Is this a justified concern?
>
> "Justified" depends on who you think the attacker is. Theoretically
> it's a real possibility, but the space used by an unverified account
> is not large. I suspect there are always much more painful DoS
> attacks to worry about.
>
> > Is there a way to manage this feature in a secure way?
>
> In some sense, I don't think there is. The point of the feature is to
> allow anybody to sign up without authentication beyond having a usable
> email address. Either you allow the DoS attack or anything you do is
> likely to deny service to legitimate users.
>
> Brian's approach (cron job purging unverified users) is generally good
> hygiene, but I don't think it would do much against an deliberate
> attack. And it shouldn't be hard to automate the confirmation
> process. I guess you could handle that by purging accounts with no
> subscriptions or other roles on any lists, but that might annoy a few
> legitimate users.
>
> Probably the best you could do for an open server would be to throttle
> user creation to say 1 per minute (adjustable to the scale of your
> site).
>
> I don't know if there is currently a way to require admin approval for
> account creation (as opposed to list subscription). Perhaps we should
> add that if we don't have it.
I checked django-allauth, it doesn't have a feature like that. We could implement
something on-top of that to optionally allow for admin approval but some other
details would need to be figured out and would be a sizeable task involving a new
view for account approvals.
We potentially also would have to modify the models used in django-allauth to
add the flag for "approved", which I am not sure would be an easy task to figure
out.
Perhaps, it might be easier to make a feature request and implement it in
django-allauth though.
>
> Steve
> _______________________________________________
> 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, 5 months