2019年8月8日 星期四

建立 forward-only mail server


動機就不寫了,這裡只寫重點:

https://github.com/huan/docker-simple-mail-forwarder
  • 以 alpine 為基底
  • 在跑 docker run 的時候要指定 SMF_CONFIG 跟 TZ 等環境變數,指定完之後跑起來就可以做 mail forward 了。真的很方便。
    • docker 裡面實際上是跑 postfix,用 virtual user table 做轉寄。
  • 自己跑 smf 的主要原因是我要知道轉寄信件的下落... 之前使用 forwardemail.net 在 DNS 裡直接加 TXT 也是很方便,但是有信寄丟時完全沒有線索可以找。所以 mail log 是修改重點
    • 跑起來的時候可以看到 syslog-ng 的警告:設定檔版本太舊。可見裡面用的是 syslog-ng,目前的版本用的是 3.13 而設定檔裡的 version 是 3.9。實際上並不會造成什麼問題,不過想去掉警告訊息的話,就把 install/syslog-ng.conf 裡的 version 改掉
    • syslog-ng 是把紀錄檔整合起來的工具,研究過幾個網頁後可以看到它的設定概念很簡單。指定來源 source { },過濾條件 filter { },還有目的 destination { }。
    • 因為我的重點在 mail log,所以我把 source 調整成
      source src {
        system();
        internal();
      }

      只收系統跟 syslog-ng 自己的訊息,然後在 filter 區塊指定 mail:
      filter f_mail {
        facility(mail);
      }

      再把它寫到目的檔去
      destination d_mail {
        file("/var/log/postfix-mail.log" persist-name("maillog"));
      }
    • log 當然不會是寫在 docker container 裡面的 /var/log,所以在跑 docker run 時要透過 -v 參數掛載外部的目錄進去。
  • 改好 install/syslog-ng.conf 後,重新 build docker image,用它給的 Dockerfile 即可
    docker build -t smf:0807-1 .
  • 把 SMF_CONFIG 跟 TZ 等環境變數,還有執行 docker 的指令寫在一個 shell script 裡
    # cat smf.env

    #!/bin/bash
    export SMF_CONFIG='franklin@sunjun.com.tw:fweng.ef@gmail.com;service@sunjun.com.tw:fweng.ef@gmail.com;'
    export SMF_CONFIG="$SMF_CONFIG;franklin@sunjun.tw:fweng.ef@gmail.com"
    export SMF_CONFIG="$SMF_CONFIG;service@sunjun.tw:fweng.ef@gmail.com|wally.lian@gmail.com"
    export TZ='Asia/Taipei'

    echo "Running simple mail forward on `date`..." >> /tmp/smf.log

    docker run -t -d --restart=always -e SMF_CONFIG="$SMF_CONFIG" -e TZ="$TZ" -v /var/log/docker:/var/log -p 25:25 smf:0807-1

  • 把每個 mail alias 分行寫是為了方便維護。實際上它是用分號隔開即可。
搞定!

2019年8月2日 星期五

Debian 上 hp-setup 鬼打牆不斷要求安裝 proprietary plugin 的問題



HP 的印表機一直算是對 Linux 相當友善的廠牌,所以我選印表機首選都是 HP。而之前跑用 Kubuntu 為基底的 ezgo 時,安裝 hp 印表機的驅動很簡單,只要安裝 hplip 套件執行 hp-setup 後面就通通搞定了。

不過現在換用 Debian 為基底的 ezgo 時,卻出現兩個問題。第一個是下載 plugin 時,從 pgp.mit.edu 取得驗證公開金鑰時一直失敗,其次就是如下面截圖所示,明明告訴我裝好了,實際上卻仍是紅字告訴我需要安裝 proprietary plugin。





先講第一個問題。現在從 pgp.mit.edu 取得金鑰變得很困難,我還找不出是什麼原因,網路上也很少討論。我透過 kgpg 提供的伺服器,找到了另一個可以順利下載金鑰的伺服器 pool.sks-keyservers.net ,並在 gpg.conf 中把預設伺服器換成了這個。但 hp-setup 仍然是去找 pgp.mit.edu,於是我發現他們把下載金鑰的伺服器寫死在程式裡:

/usr/share/hplip/base/validation.py  line 43:

```
class GPG_Verification(DigiSign_Verification):
    def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
```


臉上頓時出現三條線... 把它改掉就可以順利下載金鑰了。


另一個問題則是在這裡找到解答:


https://www.linuxquestions.org/questions/linux-software-2/hplip-keeps-looping-at-plug-in-installation-4175647505/

看來是不同系統函式庫放的位置不同所造成... 依照其建議新增路徑與符號連結後就順利安裝成功了。