Re: James 3.8 one OpenSuSE 15.5
Rene Cordier <[email protected]> Thu, 11 Jan 2024 11:40:27 +0700
| Newsgroups | gmane.comp.jakarta.james.user |
|---|---|
| Message-ID | <[email protected]> |
Hello Matt, Thanks for keeping reporting dead links, I try to fix them every time firing PRs :) Regarding the correct link to the jpa guice sample conf: https://github.com/apache/james-project/tree/master/server/apps/jpa-app/sample-configuration Regarding the link in a previous email with jpa-guice installation guide (but I think the readme is likely more complete): https://james.apache.org/server/install/guice-jpa.html For this though: https://james.staged.apache.org/james-project/3.8.0/servers/basic/conf/index.html, yes that's still not done, it's normal atm, as said this new doc is still a work in progress ^^' Regarding your mail with INVALID suffixed to it... No idea really^^' Might want to ask the people managing the mailing lists I guess. Well if anything else don't hesitate :) Rene. On 1/11/24 02:45, cryptearth wrote: > Hello Rene, > > thank you for your reply. > > I tried to look into the docs and the readme, but I get redirected to > these two pages without content: > > https://github.com/apache/james-project/tree/master/server/container/guice/jpa-guice/sample-configuration > > https://james.staged.apache.org/james-project/3.8.0/servers/basic/conf/index.html > > > From the readme it looks simple to get the jpa-guice package to run as > it seems I can re-use a lot of my current configs. As for the required > keystore: All I found was its use for TLS - as I use the new PEM > variant it should also work this way. I'll give it a shot in a VM. > > Nice to see that the pop3 server is disabled by default. I'm sure this > protocol still has its uses, but as it downloads the messages from the > server and removes them while doing so I only see an application where > messages not supposed to be left on the server like for quota reasons > or something like privacy. > > As for MySQL/MariaDB vs PostgreSQL: The only think I know about > PostgreSQL is that it exist but never used it due to most beginner > books I read when I started roughly over 15 years ago all mentioned it > but only used MySQL anyways. Shouldn't make a difference which to use. > > As for forwarding mails to my backup: I already came up with some > ideas to make this work in both ways without causing loops so that > mails received by the backup will also get forwarded to the main when > it comes back up. > > btw: I noticed that my domain gets an .INVALID appended to it - but > only here on this mailing list. Testmails to other services don't show > this. Anyone maybe has an idea about that? > > > Have a good one. > > Matt > > On 10.01.24 04:28, Rene Cordier wrote: >> Hi Matt, >> >> Let me answer you this time below in each of your points :) >> >> Cheers, >> >> Rene. >> >> On 1/9/24 21:27, cryptearth wrote: >>> Hello Rene, >>> >>> thank you for the kind words. >>> >>> May let me answer your points: >>> >>> - Spring vs. Guice: I use James since the Beta of 3.0 and if I >>> recall correctly back then the Spring package was the one to use. By >>> the usual "never change a running system" I not changed since. I had >>> a quick look into it, but unfortunately the links on the install >>> instructions https://james.apache.org/server/install.html only lead >>> to a 404 - so there's something missing. Also I seem to require >>> docker - which I don't have any experience with. I'd rather prefer >>> just to build a package, unpack it and start it without having to >>> deal with any extra containerization around it. It seems I require >>> some help to setup a guice install. >> >> Regarding the 404 on the install page, it looks like you are right. >> It's not normal and I might take a look at it, thanks for the >> feedback! However, docker is one way, but like Sprint you can still >> just run a jar with Guice as well. You can see the download page for >> example (where the links seem to work) : >> https://james.apache.org/download.cgi . >> >> If you want to try to switch to Guice, the JPA james server is the >> one for you, that you can plug with MariaDB. The distributed version >> is for heavy deployments (which I don't think interests you here) >> with cassandra, opensearch, rabbitmq, ... => >> https://www.apache.org/dyn/closer.lua/james/server/3.8.0/james-server-jpa-guice.zip >> . You will see in the README as well in the zip some basic >> instructions to run it, with docker or manually with the jar like you >> are used to. >> >> I totally understand the reason behind the fact that you started with >> Spring, so far it works, and it's safe to stick to it. Quite a fair >> statement actually. The problem is that though the main development >> efforts since a while are being done on Guice, and the Spring one is >> quickly maintained, as nobody seems fully willing to keep developing >> on it now. It works but could have potentially some >> vulnerabilities... I'm thinking for example the spring dependencies, >> that are old and outdated I think^^' >> >>> >>> - as for using MariaDB: This goes back to 2015 when I started to >>> rent my server and own domain. Back then I had basically no >>> knowledge about server administration let alone set up a mail >>> server. Although there're complete guides on how to setup postfix >>> with dovecot and such on opensuse I not managed to get it working. >>> So I looked for a simple complete solution and ended up using >>> Citadel/UX. For some reason with some update it broke to a state I >>> wasn't able to start it again. Hence I wasn't able to get any data >>> out of it as for some reason I just was not able to access the >>> BerkeleyDB data file. As I also wasn't able to get the regular stuff >>> with maildir running I just wanted a setup using a regular MySQL not >>> just for config- and user-data but also as the mail storage backend >>> so that in the event I encountered such a situation again I can just >>> use regular tools to restore a mysql database. As I'm also a >>> hobbyist Java developer for me it was a simple idea of "there has to >>> be some simple mail server implemented in Java" - and this is how I >>> ended up discovering and using James ever since. >>> >>> It also already came into play that for some reason I had to >>> manually restore my database - exactly the reason why I chose MySQL >>> as storage backend. As it was helpful for the reason I chose it I >>> rather stick to it for that reason. The switch from MySQL to MariaDB >>> was just something OpenSuSE did - so I followed it. As a user I not >>> noticed any differences. >>> >>> As for the database issues mentioned: For some reason I had to set >>> up the MySQL- and later the MariaDB-repos instead of using what >>> comes with the OpenSuSE repos. I don't know what the difference was >>> but it prevented the initial setup of the database structure on >>> first run. Hence I'm glad that this is now fixed - whoever is >>> reponsible for it. >> I get this :) I was just trying to inform you that these days we work >> also on a Postgresql exclusive implementation for James. JPA is good >> to be able to plug to a lot of different SQL databases with the same >> code, but performances can be a bit meh. We are working on a full >> postgresql implementation of James in parallel as most people using >> JPA in the community are using Postgresql as their database (as it is >> quite a popular one). The goal is to have better performance here >> than with JPA for this particular db. But likely JPA might be enough >> for your singular usage. Was just throwing that here if maybe it was >> interesting for you. >>> >>> >>> - sync between main server and backup: I guess the additional >>> forward from the main server to the backup and handle them >>> independently seems like a neat idea simple to implement. I mostly >>> rely on my backup when doing maintenance on the root like OS updates >>> which require a system reboot. It's not I want to try to build a >>> distributed synchronized cluster. I guess for that there're better >>> solutions out there. Looking thru the docs there's something >>> pointing to >>> https://github.com/apache/james-project/blob/james-project-3.8.0/docs/modules/servers/pages/distributed/run-docker.adoc >>> - but that doesn't exists or isn't set to public, same as for the >>> guice setup. So it seems there's documentation for what I want to do >>> - but it's not available to me. >> >> That new Antora documentation is still incomplete and yeah there is >> issues for some reasons with the distributed part that does not >> render each time during build... Might need tot ake an other look at >> it! For the temporary link of it though if it interests you: >> https://james.staged.apache.org/james-project/3.8.0/index.html >> >> Distributed doc in the source code though if you feel like building >> it yourself: >> https://github.com/apache/james-project/tree/master/server/apps/distributed-app/docs >> >> I think yes forwarding your mails to both your main and backup >> servers is simple and efficient :) >> >>> >>> Have a good one. >>> >>> Matt >>> >>> On 09.01.24 08:44, Rene Cordier wrote: >>>> Hello, >>>> >>>> Interesting read thanks. >>>> >>>> Few remarks though, but feel free to agree or not :) : >>>> >>>> - any reason to still run the spring version of James? That version >>>> I believe is not always up-to-date with dependencies (specially the >>>> sprint dependencies). Truth is it might get deprecated and removed >>>> in later release if a consensus is reached, as all active dev is >>>> done on the Guice versions now. You might want to check that (JPA >>>> Guice here probably closest to the Spring version) >>>> >>>> - note that there is active development at the moment (still WIP) >>>> regarding a Postgresql reactive implementation with james (Guice). >>>> I saw you seem to use MariaDB but might interest you for the future >>>> maybe? >>>> >>>> - for sync between your main server and backup, maybe just redirect >>>> the mails to both platforms, and let them treat the mails >>>> separately? If not I guess db backup and sync between the two could >>>> do it too. >>>> >>>> Good job on running latest James on the new OpenSuse though, thanks >>>> for sharing! >>>> >>>> Rene. >>>> >>>> On 1/9/24 10:17, cryptearth wrote: >>>>> Hello there everybody, >>>>> >>>>> happy new year 2024 to all of you. >>>>> It's been quite some time since I was last active on this >>>>> maillist. After >>>>> upgrading my server to OpenSuSE 15.5 and James to 3.8 and after >>>>> reading the >>>>> recent topics on the web archive I decided to post a small round >>>>> up how it >>>>> went this way. >>>>> >>>>> Important word of warning and security: >>>>> This is only a personal write-down how I did my setup. I'm aware >>>>> there're >>>>> still some security improvements to be done. This is meant as an >>>>> informative >>>>> guide. I'm by no means responsible for any security issues that >>>>> may arise by >>>>> following this. I myself got hacked by the Log4J issue mostly due >>>>> to not >>>>> applying the available update fast enough. It's your own >>>>> responsibility to >>>>> make your setup secure. All I can offer are some guidelines from >>>>> personal >>>>> experience. >>>>> >>>>> That warning out now let's get to the real topic. >>>>> >>>>> As several of the active devs here know I use James for quite some >>>>> time now >>>>> and over the years encountered several issues mostly specific to >>>>> OpenSuSE and >>>>> the packages provided by its repositories. Luckily this time >>>>> everything went >>>>> smoothly. >>>>> >>>>> I started from a fresh clean "server"-type install, but this >>>>> should be >>>>> applicable to any existing system as well. So the first step is to >>>>> fully update >>>>> the new system. >>>>> >>>>> As OpenSuSE comes with postfix I replace it with sendmail for >>>>> later. I guess >>>>> it's also possible with postfix or exim or any other MTA providing >>>>> the >>>>> required sendmail dependency. Using sendmail was just the simplest >>>>> option I >>>>> figured out when I first used it. >>>>> The keyword here is "nullclient": It configures sendmail to just >>>>> forward >>>>> everything to James without any handling itself. For this sendmail >>>>> comes with >>>>> an almost ready-to-use config which only needs one change in >>>>> /etc/sendmail/ >>>>> linux.nullclient.mc in line 27 by replacing the example >>>>> "mailhub.domain.notused" with "localhost". Then just generate the new >>>>> sendmail.cf from it (either as root or via sudo): >>>>> m4 /etc/mail/linux.nullclient.mc > /etc/sendmail.cf >>>>> >>>>> I also have to edit the systemd script. For some reason the >>>>> systemctl edit >>>>> command works a bit unexpected for simple edits so by appending >>>>> --full it >>>>> becomes a full override. The service file needs two changes: >>>>> >>>>> 1) moving the PIDFile from /var/run to /run as hinted by systemctl >>>>> status >>>>> message: >>>>> PIDFile=/run/sendmail.pid >>>>> >>>>> 2) remove the -bd flag from the start args to prevent sendmail >>>>> from blocking >>>>> port TCP/25: >>>>> Environment="SENDMAIL_ARGS=-L -Am -q30m -om" >>>>> >>>>> Check if sendmail service is enabled and started: systemctl status >>>>> sendmail >>>>> At least enabled it so it gets started at reboot. As James isn't >>>>> setup yet to >>>>> take its mails don't start it yet - it could cause a hang into an >>>>> infinite >>>>> loop. >>>>> >>>>> Before get to James I prepare the rest of the system by install >>>>> these packages >>>>> (can be installed along when switching postfix for sendmail): >>>>> - java-17-openjdk-devel >>>>> - git >>>>> - maven >>>>> - mariadb >>>>> - phpMyAdmin-apache >>>>> - yast2-http-server >>>>> The required dependencies get pulled in by the resolver. After >>>>> installing the >>>>> packages YaST tells you to secure MariaDB. So I do this right away >>>>> by running >>>>> mariadb-secure-installation as root/sudo and set a root password. >>>>> All other >>>>> questions can be answered with thier default option (just hit enter). >>>>> >>>>> To get phpMyAdmin running only the initial setup using "yast >>>>> http-server" is >>>>> required. Select enable PHP in the 2nd step and complete the setup >>>>> by just >>>>> hitting F10 a couple times. If the Apache2 server is accessible >>>>> via the >>>>> internet care should be taken by limiting phpMyAdmin to localhost. >>>>> Edit /etc/ >>>>> apache2/conf.d/phpMyAdmin.conf line 27 to "Require local" and use >>>>> ssh tunnels. >>>>> If you have services like a vpn or a tor hidden service running >>>>> you may want >>>>> to secure it even further with something like an .htaccess or >>>>> similar. This >>>>> way you prevent attackers from trying to bruteforce your database >>>>> password. >>>>> >>>>> Complete the pre-setup by use phpMyAdmin to add a new user for James. >>>>> >>>>> Now let's build James: >>>>> git clone https://github.com/apache/james-project -b >>>>> james-project-3.8.0 >>>>> cd james-project >>>>> mvn clean package -DskipTests -T 1C >>>>> As I use the spring package I then unpack the tar in >>>>> james-project/server/ >>>>> apps/spring-app/target/james-server-spring-app-3.8.0-app.tar.gz. >>>>> I also need to get the mariadb-connector/J: >>>>> https://mariadb.com/downloads/ >>>>> connectors/ and place the .jar in the >>>>> james-server-spring-app-3.8.0/lib >>>>> folder. >>>>> I'm not sure why this isn't distributed along or part of the >>>>> package manifest >>>>> to pull from the repos - guess this is some licence nonesense. >>>>> >>>>> It's config time now - and there's not that much to do. >>>>> As I don't use POP3 the first I do is disable the POP3 server. >>>>> Next I set up the database stuff by change the driver to >>>>> org.mariadb.jdbc.Driver >>>>> and the connector-string to >>>>> jdbc:mariadb://localhost:3306/james >>>>> Btw: As pretty much any modern JDBC driver should be a type 4.x >>>>> there's no >>>>> need to specify the driver class name or do something like >>>>> Class.forName() >>>>> As long as the driver jar is in classpath on startup of the JVM it >>>>> gets pulled >>>>> in via the ServiceLoader-API. >>>>> >>>>> Next I set my domain and the greetings in the imap and smtp >>>>> servers. I also >>>>> enable StartTLS for both imap and smtp. As for outgoing smtp I >>>>> also enable >>>>> StartTLS by adding this to the RemoteDelievery in the >>>>> mailetcontainer.xml: >>>>> <startTLS>true</startTLS> >>>>> This should be added by default as it's only mentioned in the >>>>> RemoteDelievery >>>>> javadoc but not in the XML doc nor in the config doc. >>>>> Until now I used a Java keystore for the certificate and key. But >>>>> using the new >>>>> PEM files directly skips this. Thanks for who added this. >>>>> >>>>> The last part is to deal with sendmail and apache2/php mail. For >>>>> this I first >>>>> add two users to James (along with others like postmaster): >>>>> webmaster and >>>>> local-service. Then I add this to the mailetcontainer.xml right at >>>>> the top of >>>>> the root processor: >>>>> >>>>> <matcher name="local-service" >>>>> match="org.apache.james.mailetcontainer.impl.matchers.And"> >>>>> <matcher match="RemoteAddrInNetwork=127.0.0.0/8" /> >>>>> <matcher >>>>> match="org.apache.james.mailetcontainer.impl.matchers.Not"> >>>>> <matcher match="SMTPAuthSuccessful" /> >>>>> </matcher> >>>>> <matcher >>>>> match="org.apache.james.mailetcontainer.impl.matchers.Not"> >>>>> <matcher >>>>> match="[email protected]" /> >>>>> </matcher> >>>>> <matcher >>>>> match="org.apache.james.mailetcontainer.impl.matchers.Not"> >>>>> <matcher match="RecipientIs=local- >>>>> [email protected]" /> >>>>> </matcher> >>>>> </matcher> >>>>> >>>>> <mailet match="local-service" class="Redirect"> >>>>> <to>[email protected]</to> >>>>> </mailet> >>>>> >>>>> To explain its purpose: >>>>> When starting James via crontab by root crond sends a start report >>>>> via >>>>> sendmail. In order for sendmail to not get stuck in an endless >>>>> loop trying to >>>>> deliver the crond status I have to provide some drop off >>>>> destination for it. >>>>> But as I also want to send e-mails by PHP I had to get a bit creative >>>>> filtering. It basically goes like this: >>>>> >>>>> IF incoming mail comes from localhost >>>>> AND is NOT authenticated via smtp auth >>>>> AND is NOT sent by webmaster (from php) >>>>> AND is NOT already redirected to local-service >>>>> THEN redirect to local-service >>>>> >>>>> This rule maybe can be written better - but it was the simplest I >>>>> came up >>>>> with. The check for the recipient is required so the mail doesn't get >>>>> redirected to itself again. The check for the webmaster is >>>>> required as >>>>> sendmail drops off php mails with wwwrun@localhost, which is >>>>> overriden by the - >>>>> f parameter to webmaster. Any other client that regular logs in >>>>> via AUTH is >>>>> ignored anyway. And the whole thing is limited to localhost. >>>>> >>>>> Finally, add a >>>>> @reboot /path/to/james/bin/james start >>>>> to roots crontab for james autostart. >>>>> >>>>> If everything was done correctly james should start up just fine >>>>> for the first >>>>> time (it actually already had to for adding the users - but this >>>>> can be done >>>>> now). >>>>> I do the first start via "console" to verify everything is done >>>>> correctly. >>>>> After all is done and james starts correctly I just reboot the >>>>> system. Now >>>>> when all comes up by itself the local-service user should have a >>>>> mail confirm >>>>> the successful start of James which also confirms that the >>>>> sendmail nullclient >>>>> and the mailet redirect works. >>>>> >>>>> A common failure can be an issue with name resolution. In this >>>>> case you have >>>>> to manually set /etc/hosts and reboot again. This can also be done >>>>> early on as >>>>> one of the first few steps after updating the system. >>>>> >>>>> To send mails from apache this can be done like this: >>>>> >>>>> <?php >>>>> $to="[email protected]"; >>>>> $subject=$content="this is a apache webmail test"; >>>>> $headers = array( >>>>> 'From' => 'CryptEarth.de Webmaster >>>>> <[email protected]>', >>>>> 'Reply-To' => '[email protected]', >>>>> 'X-Mailer' => 'PHP/' . phpversion() >>>>> ); >>>>> mail($to, $subject, $content, $headers, >>>>> "[email protected]"); >>>>> ?> >>>>> >>>>> A few improvements that can (and should) be done: >>>>> >>>>> - don't start james as root but rather move the ports to 8025 and >>>>> 8143 and use >>>>> a firewall rule to redirect 25 to 8025 and 143 to 8143 ... but I >>>>> have to figure >>>>> that out >>>>> - maybe rethink about sendmail nullclient and do similar with >>>>> postfix or exim >>>>> - maybe redo the mailet redirect for local-service and php-mail >>>>> - setting up DKIM on outgoing mails >>>>> >>>>> Currently I have James running on two servers: my main root as >>>>> primary and on >>>>> a small sbc at home as a backup. Is there a way to synchronize the >>>>> two servers >>>>> on the application level. Or would it be enough to just >>>>> synchronize the two >>>>> datases secured by a ssh tunnel? How to handle the differences in >>>>> the counters >>>>> when both servers receive an e-mail each which have to get >>>>> synchronized in >>>>> both ways? >>>>> >>>>> Have a nice week. >>>>> Greetings from Germany >>>>> >>>>> Matt >>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [email protected] >>>>> For additional commands, e-mail: [email protected] >>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >