使用 mutt 向内核社区提交 Patch

上一篇文章中,我们介绍了比较正统的使用 Git 向内核社区提交 Patch 的全过程,Git为我们提供了一条龙服务,非常的方便。但是很多朋友喜欢使用 Gmail,而使用 git-email 配合 Gmail 发邮件有时候会失败,毕竟 Google 在国内无法访问,邮件服务器断开也是很正常的,即使你能够用 Proxy 上 Gmail 网页版,你也没法给邮件服务器设置代理,那这种情况下我们要如何做才能发送 Patch 呢。

使用 Gmail 网页版

这种方式是不行的,在内核官网文档里也提到了,Gmail 会自动把 Tab 替换为空格,也会在单行超过78字符时自动折行,此外它还会对非 ASCII 字符进行 base64 编码。

使用 mutt 客户端

mutt 是一个命令行版的邮件客户端,用它来发送 Patch 也是非常方便的,不过要配置一下。

配置

首先当然是安装 mutt,一般发行版软件仓库都有的。装好后,将以下内容复制到 ~/.muttrc 中保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ================  IMAP ====================
set imap_user = 'username@gmail.com' # 邮箱地址
set imap_pass = 'password' # 邮箱密码
set spoolfile = imaps://imap.gmail.com/INBOX
set folder = imaps://imap.gmail.com/
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set mbox="imaps://imap.gmail.com/[Gmail]/All Mail"
# https://superuser.com/a/1106152/743573
set copy = no # Gmail 会自动保存已发送的邮件,mutt 会重复保存,所以要关掉

# ================ SMTP ====================
set smtp_url = "smtp://username@smtp.gmail.com:587/" # 邮箱地址@前面的部分
set smtp_pass = $imap_pass
set ssl_force_tls = yes # Require encrypted connection

# ================ Composition ====================
set editor = vim # 使用 vim 编辑器编辑邮件
set edit_headers = yes # See the headers when editing
set charset = UTF-8 # value of $LANG; also fallback for send_charset
# Sender, email address, and sign-off line must match
unset use_domain # because joe@localhost is just embarrassing
set realname = "Your Name" # 你的名字
set from = "username@gmail.com" # 邮箱地址
set use_from = yes

发送补丁

使用如下命令发送补丁,下面的只是例子,实际收件的邮箱地址需要你用 ./scripts/get_maintainer.pl 脚本获取。

1
mutt -H xxx.patch gregkh@linuxfoundation.org -c xxx@suse.com -c username@gmail.com -c linux-xxx@vger.kernel.org -c linux-kernel@vger.kernel.org

以上命令中,Patch 文件名后面紧跟的是主送人,-c 后面是抄送人,别忘了给自己抄一份。

敲回车后,会让你确认主送人,确认无误敲回车,之后会让你确认标题,直接回车,之后会让你确认邮件内容,确认无误后保存退出,此后 mutt 提示你是否确认发送,按下 y 发送,按下 q 取消。

之后邮件就发出去了。

如果提示 SASL Authentication Failure,那就是密码登录被谷歌安全机制拦截了,去 Google 首页,点击你的右上角头像,点击 Google Account 进入设置,点击左侧边栏的 Security,找到 Less secure app access,把它打开然后重试发送。