Debian Services for the Debian Developer

This is my step-by-step guide of setting up typical work environment as a Debian developer (DD). See also MigrateToDDAccount.

So far email forwarding did not work.

!!! WORK IN PROGRESS !!!!

Following is not tested contents. This is under contraction.

When we became Debian Developer (DD), we knew we obtained few privileges:

Well, there is more to it. Let me go through them step-by-step to set up Debian services.

Step 1: New password

You must set your new password through mail gateway first.

$ echo "Please change my Debian password" | gpg --clearsign | mail chpasswd@db.debian.org

After validating the request the daemon will generate a new random password, set it in the LDAP directory and respond with an encrypted message containing the new password. (The password can be changed using one of the other interface methods later.)

Please note many of the Debian service have similar mail based configuration.

This only works with a configured local MTA, unless you instead copy the output of the gpg command above and send it with your normal MUA to chpasswd@db.debian.org.

Step 2: Set up your Debian account LDAP data

Configuration of your Debian account can be done through the web interface of LDAP Debian server after loging in with your password with "Update my info" button.

Here you can set your password to a memorable one.

Here you can set up your forwarding mail address for "<yourname>@debian.org" and the subscription mail address for "debian-private@lists.debian.org" mailing list, too.

Step 3: Set up your shell accounts

Debian offers shell accounts to the developer using SSH service. See sshd(8) and set up your SSH setup locally on your PC.

The virtual .ssh/authorized_keys file for each user can be set by the Debian LDAP server through mail gateway. For example:

$ gpg --clearsign < .ssh/id_rsa.pub | mail changes@db.debian.org

If you use ssh-agent or OpenPGP key you should use:

$ ssh-add -L | gpg --clearsign | mail changes@db.debian.org

Multiple keys per user are supported, but they must all be sent at once.

You can send .ssh/authorized_keys files as content of inline pgp mail from mail clients like Thunderbird. Note: You will need to set mailnews.wraptext to -1 in config editor to send long lines.

Configure ssh jump host by adding to ~/.ssh/config a jumphost for all debian.org hosts other than the jumphosts.

Host *.debian.org !*.ssh.debian.org !ssh.debian.org
    ProxyJump ssh.debian.org
    # (or {na,eu}.ssh.debian.org)

Step 4: Setup your email forwarding

Although "<yourname>@debian.org" is most common e-mail address used by the DD on Debian system, there are many available mail addresses for you.

The email to "<yourname>@debian.org" address is forwarded by the data on the Debian LDAP server. This can be easily (re)configured through mail gateway:

$ echo "emailforward: foo@bar.com" | gpg --clearsign | mail changes@db.debian.org

or through the web interface of LDAP Debian server as in Step 2. See also Debian GNU/Linux -- Email Forwarding and Debian DNS set up to figure out exactly how you use all these.

You can test the email routing by using the command

$ /usr/sbin/exim -bt foo@debian.org

If you set the forwarding address to be a specific Debian machine, e.g., master.debian.org or people.debian.org and do not create a .forward file then that machine will spool the mail to /var/spool/mail instead of creating a mail loop.

When <yourname>@debian.org is forwarded to <yourname>@master.debian.org, extension addresses <yourname>-<suffix>@debian.org are always routed directly to master.debian.org for processing.

Extension addresses <yourname>-<suffix>@people.debian.org are routed in the same way as <yourname>-<suffix>@debian.org addresses.

{i} Sending mail via Debian machine using bsmtp is documented HOWTO: Using outgoing BSMTP with Exim

procmail

If you use procmail for your main mailbox, PLEASE, erase your .forward file and put a .procmailrc in its place instead. This feature has been supported on debian.org machines for a good while now, and will continue to be supported. .procmailrc files won't be synchronised to all hosts in the LDAP directory.

The correct way to invoke procmail for extension addresses is "|/usr/bin/procmail [options]" Ignore the IFS=".." stuff in the procmail man page. ?MailBox formats Email can be saved to mailboxes or maildirs by using the correct lines in a .forward file:

Mailbox format files "/debian/home/foo/Mbox"
Maildir format files "/debian/home/foo/MDir/"

To deliver to /var/spool/mail/foo use a construct like '|/usr/bin/procmail -m /dev/null'. Putting the mailbox path will not work. You must use absolute paths for mailboxes, qmail-like ./ paths are not supported by Exim.

Also, 'Exim Filter' files are deliberately turned off.

mail-suffix

See /etc/exim4/* on master.debian.org:

...
# Special Features for users:
# .forward-foo - is understood as an extension address for bar-foo@cow.com
# .forward-default - is understood to be a catch all for bar-*@cow.com
# .procmailrc - with no .forward file invokes procmail for delivery
#               automatically.

# For virtual domains the first lookup is done against a linear text
# database called 'aliases', then .forward files are consulted. Exim
# filtering is available for these .forward files only. .forward-default
# is the universal catch all for everything not handled.

# For virtual domains the first lookup is done against a linear text
# database called 'aliases', then .forward files are consulted. Exim
# filtering is available for these .forward files only. .forward-default
# is the universal catch all for everything not handled.
...

Step 5: Setup your email sending

A smtp service is now operational behind mail-submit.debian.org.

Mails sent via this server will be DKIM-signed if the from is a debian.org, debconf.org or ftp-master.debian.org address.

This server requires an active Debian Account, and that one sets their mailPassword up to be able to use the service:

echo "Please change my mail password" | gpg --clearsign | mail chpasswd@db.debian.org

After validating the request the daemon will generate a new random password, set it in the directory and respond with an encrypted message containing the new password. The password can be changed using one of the other interface methods.

Any mail sent via mail-submit.debian.org is DKIM-signed. The server adds an X-Debian-User: header that will contain the user whose password was used to authenticate to the server, and this header is covered by the DKIM signature. The signature is made on all mails the server considers it should handle (for now, debian.org, debconf.org and ftp-master.debian.org mails). It doesn't require any specific setup from the end users, except using the appropriate mail address for sending mails.

Client config could be done using the followings parameters

server: mail-submit.debian.org
port: 587
login: your Debian username (not the mail) 
password: see upwards
encryption: STARTTLS

More details are available at DSA doc-mail

Step 6: Set up your <yourname>.debian.net domain

Debian provides DNS service for <yourname>.debian.net domain. Debian.net DNS zone entries can be set through mail gateway. See DebianDotNet for more details.

Requests can take three forms:

Here, please note:

For example, the followings will to point https://example.debian.net to point to the web server of my home machine:

$ cat example.txt
example   IN CNAME server.example.org.
$ gpg --clearsign < example.txt | mail changes@db.debian.org

Although there was neat BSMTP setup in klecker.debian.org described in BSMTP on debian.net, this klecker.debian.org was restricted machine without SSH access. The alternative seems to be gluck.debian.org (instead of old klecker.debian.org ), so far I could not get BSMTP working on this host. :-( Please comment here if any one is actively using this.

Junk contents

Step 5: Set up your PC to accept mail to <yourname>.debian.net domain

You need to set your local PC to accept mails addressed to "<yourname>.debian.net" including ones for "root".

See exim4 configuration.

$ sudo dpkg-reconfigure exim-config

Then, under "Configuring Exim v4 (exim4-config)" menu, you add "<yourname>.debian.net" to the list separated by colon.

Step 6: Set up script to do BSMTP

You obtain BSMTP script run on Debian server from:

I have modified it to be host name neutral ($FILE can be set from argument).

set -e

DIR="$HOME/bsmtp"
FILE="$1"
TRANSIT="$FILE.transit"

cd "$DIR" || exit 0

# Is there anything to send?
[ -s "$FILE" ] || exit 0

lockfile-create "$FILE"
lockfile-touch "$FILE" &
TOUCH="$!"
trap 'kill "$TOUCH"; lockfile-remove "$FILE"' EXIT ERR HUP INT QUIT TERM

if [ -f "$TRANSIT" ]; then
    cat "$FILE" >> "$TRANSIT" && rm -f "$FILE"
else
    mv -f "$FILE" "$TRANSIT"
fi

cat "$TRANSIT"
rm -f "$TRANSIT"

exit 0

You obtain BSMTP script run on your local PC from:

Here I adjusted to match above change.

# Depends: lockfile-progs, ssh
set -e

if [ -z "$1" ]; then
    echo "Usage: $0 hostname" 2>&1
    exit 1
fi

DIR="$HOME/tmp/.bsmtp"
mkdir -p "$DIR"
cd "$DIR"

HOST="$1"
VHOST="$2"

# TODO: Note that this scheme may currently lose mail if the local disk
# fills up! This is obviously very bad. Fix this.

# By default, lockfile-create gives up after three minutes, so don't cron
# this any more frequently than that without supplying a --retry argument.
lockfile-create "$HOST"
# Race condition pointed out by pjb: this doesn't guarantee that the lock is
# held before the critical section starts.
lockfile-touch "$HOST" &
TOUCH="$!"
trap 'kill "$TOUCH"; lockfile-remove "$HOST"' EXIT ERR HUP INT QUIT TERM

#ssh -2 -i "$HOME/.ssh/id-bsmtp-$HOST" -C "$HOST" bsmtp-pull-server "$VHOST" > "$HOST"
# Since above did not work for me I tried
ssh -2  -C "$HOST" bsmtp-pull-server "$VHOST" > "$HOST"
[ -s "$HOST" ] || exit 0
/usr/sbin/sendmail -bS -odq < "$HOST"
rm -f "$HOST"

exit 0

FIXME: I do not see $HOME/bsmtp directory in gluck :( I am stuck here!

Now you can invoke following to retrieve your message.

$ ~/bin/bsmtp-pull <yourname>@people.debian.org <yourname>.debian.net

Now you have mail address on which you do not rely any external resorces.

These days, the value of this setup has been more for the security and stability.

If it is just to get subscription to high volume Debian ML, I would use free (commercial) service such as gmail.com. Note: please do not forward debian-private emails to gmail!

Since above script is designed to work with SSH key named "$HOME/.ssh/id-bsmtp-$HOST", we make link:

$ cd ~/.ssh
$ ln -f id_dsa id-bsmtp-gluck.debian.org

Here I assumed you have set up $HOME/id_dsa.pub as the SSH public key described in Step 3. If you make custom SSH keys for Debian activity, that is even better.

Further study

Let's login to a Debian machine to see how other people are doing. (Here, people.debian.org.)

Let's see how people uses this host for BSMTP by "cat /etc/exim/bsmtp" and check their domain set up. (I am not publishing exact content of these and hiding some contents here Try these command yourself.):

osamu@gluck:exim$ cat bsmtp
r****.debian.net: user=d** group=Debian file=/home/d**/bsmtp/r*****.debian.net
s*****.debian.net: user=b** group=Debian file=/home/b**/bsmtp/s*****.debian.net
...
r***.debian.net: user=c******* group=Debian file=/home/c*******/bsmtp/r***.debian.net
...
osamu@gluck:exim$ dig r***.debian.net ANY
...
;; QUESTION SECTION:
;r***.debian.net.               IN      ANY

;; ANSWER SECTION:
r***.debian.net.        3600    IN      MX      0 gluck.debian.org.

...

osamu@gluck:exim$ dig s*****.debian.net ANY
...
;; QUESTION SECTION:
;s*****.debian.net.             IN      ANY

;; ANSWER SECTION:
s*****.debian.net.      3600    IN      MX      10 s*****.a****.org .au.
s*****.debian.net.      3600    IN      MX      20 s*****.m****** u*****.com.au.
s*****.debian.net.      3600    IN      MX      30 alts*****.m***** o*********.com.au.
s*****.debian.net.      3600    IN      MX      0 gluck.debian.org.
s*****.debian.net.      3600    IN      TXT     "PGP ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **"
s*****.debian.net.      3600    IN      TXT     "PGP **** **** **** **** **** **** **** **** ****"
s*****.debian.net.      3600    IN      TXT     "******** <b**@debian.org>"
s*****.debian.net.      3600    IN      A       2**.1**.1**.8*
...

The first one is for one with just fast internet connection without any SMTP mail hosts to get BSMTP service via Debian host as described above.

The second one is for you with semi-stable fixed IP SMTP mail hosts. This ensures mail delivary to the home PC on Cable/DSL/Optical connection (with some risk).

Osamu Aoki