Looks like my studies and development on the BSD has to be put on hold due to
the fact that I would be working with BYI Systems[1]. And the focus would be
mostly working with formal verification using TLA+[2]. This is something that I
have not worked with before so I am also kind of excited about this
opportunity. Another aspect of this as cherry@ mentioned would be it’s
application to systems programming, since TLA+ is a good tool for verifying
protocols.
Meanwhile, in order to keep in touch with BSD, I also took up the responsibility
of setting up and maintaining the infrastructure required for BYI Systems.
This would require
- Basic web hosting / reverse proxy using nginx(8)
- A mailing list for communication based on mailman(8)
- Version control via git(1)
Setting up nginx(8)
This was not my first time setting up nginx(8) and by this time I had become
more familiar with how nginx(8) is supposed to be configured. The initial task
was to configure the static HTML which would act as the company website. Which
was not too hard of a task.
The second website we needed get up was that of the mailman’s web UI. Initially
I setup the fcgiwrap(8) script to start up via rc(8) and it was not too hard
doing that in rc.conf(5).
1
2
3
4
5
fcgiwrap_enable="YES"
fcgiwrap_profiles="mailman"
fcgiwrap_mailman_socket="unix:/var/run/fcgiwrap/mailman.sock"
fcgiwrap_mailman_user="www"
fcgiwrap_mailman_socket_owner="www"
After setting up fcgiwrap(8) to serve the CGI scripts, setting up ngnix(8) to
serve the webpages and going through the nginx(8) documentation[3]. Some
customizations and I could get it running correctly.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
location /mailman {
root /usr/local/mailman/cgi-bin/;
fastcgi_split_path_info ^/mailman(/[^/]*)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_pass cgi-handler;
}
location /mailman/icons/ {
alias /usr/local/mailman/icons/;
expires 1y;
}
location /pipermail {
alias /usr/local/mailman/archives/public;
autoindex on;
}
rewrite ^/mailman(/)?$ /mailman/listinfo permanent;
rewrite ^/$ /mailman/listinfo permanent;
Setting up mailman(8)
Other than compiling the package from ports to enable postfix(1) support. The
installation was pretty straight forward. In addition to this is is always wise
to read the FreeBSD post install notes to read up about any specific quirks.
The changes made to mailman(8) configuration file /usr/local/mailman/Mailman/mm_cfg.py
itself was quite small
1
2
3
4
5
6
POSTFIX_STYLE_VIRTUAL_DOMAINS = [ 'lists.byisystems.com' ]
DEFAULT_EMAIL_HOST = 'lists.byisystems.com'
DEFAULT_URL_HOST = 'lists.byisystems.com'
DEFAULT_URL_PATTERN = 'https://%s/mailman/'
add_virtualhost('lists.byisystems.com', 'lists.byisystems.com')
Other than the mynetworks
which was updated with the IP, the only other change
was adding the alias files of mailman to the postfix(1), most of the other
settings were left as default.
1
2
3
4
5
6
7
8
9
10
11
12
virtual_alias_domains = lists.byisystems.com
virtual_alias_maps = hash:$config_directory/virtual
hash:/usr/local/mailman/data/virtual-mailman
alias_maps = hash:$config_directory/aliases
hash:/usr/local/mailman/data/aliases
alias_database = hash:$config_directory/aliases
hash:/usr/local/mailman/data/aliases
recipient_delimiter = +
Setting up the mailing lists
Referring to couple of websites[5][6], I managed to create the “mailman” mailing
list which is required for running of mailman using the following command.
$ bin/newlist --urlhost=lists.byisystems.com --emailhost=lists.byisystems.com mailman
Once postfix(1) and mailman(8) services were up and running, it was trivial to
setup the rest of the lists needed by BYI Systems.
Setting up basic git(1)
While the server was being setup, we had a designer working on the basic website
for BYI Systems. Due to my lack of experience in setting up a proper remote
git(1) based collaboration platform and we did not want the website sources to
be hosted in github. the easiest thing I could think of was to setup a simple
git repository in the BYI machine and then set up a ssh(1) account to access it
remotely.
The git-shell[7] documentation helped with setting up an user git
with the
shell /usr/local/libexec/git-core/git-shell
and a small script under
/home/git/git-shell-commands
called no-interactive-login
#!/bin/sh
printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
printf '%s\n' "provide interactive shell access."
exit 128
In addition to this a similar user gitro
was setup with read-only access to
the repositories stored under the git
user’s home. And the access was granted
to both git
and gitro
using ssh(1) and authorized_keys
file for each of
the above mentioned account.
Adding a .hushlogin
file to the home directory of both git
and gitro
helped prevent the /etc/motd
from being displayed when one tried to push /
pull via git(1).
In future, I will need to think about setting up a proper git based
collaboration platform like GitLab.
Conclusion
Using jails would be a nice way to isolate these things from the virtual
machine. This would also help with isolating the various services that is
required.
Mail configuration is hard and is probably something that I need to look into.
References
- https://byisystems.com/
- http://lamport.azurewebsites.net/tla/tla.html
- https://www.nginx.com/resources/wiki/start/topics/recipes/mailman/
- https://svnweb.freebsd.org/ports/head/mail/mailman/files/FreeBSD-post-install-notes?view=markup
- https://www.purplehat.org/?page_id=18
- https://www.howtoforge.com/how-to-install-and-configure-mailman-with-postfix-on-debian-squeeze
- https://git-scm.com/docs/git-shell