2014年5月16日金曜日

linux(kernel)にgit send-emailでパッチを送る方法

残念ながら初パッチは取り込まれませんでした。しかし、作業の中で得られたことがあるのでまとめておきます。
ネタときっかけはこちら
CONFIG_USB_DEVICEFS は廃止されています

MLのログはこちら
http://comments.gmane.org/gmane.linux.usb.general/108441
パッチの作り方・投げ方などの正式なドキュメントはこれです。
Documentation/development-process/

私は次の2つを参考に作業しました。

git send-emailを準備する

送信にはThunderbirdやWebのGmailなどの普通のメーラーでなく、git send-emailを使うことにします。
件名とかルールがありますからね。5.Postingに書いてあります。

Ubuntu14.04ではgitパッケージだけではsend-emailはインストールされません。次のように導入します。
apt-get install git-email

とあるエンジニアの備忘log - git send-emailを参考にセットアップしてます。

git send-emailでエイリアスを使う場合はfromオプションを指定するか、~/.gitconfigに次のようにしておくとよいでしょう。
Gmailを使っていてエイリアスのアドレスを送信したい場合はこちらの記事に従って事前にアドレスを登録しておく必要があります。
Gmailでエイリアスから送信する方法
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = username@gmail.com
smtpserverport = 587
from = username+alias@gmail.com

1.パッチを作る

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git して
sed -i -e /CONFIG_USB_DEVICEFS/d `grep -rl ^CONFIG_USB_DEVICEFS *` 対象を抹殺するだけです。

あとは普通にコミットを行います。コミットメッセージは他のコミットを参考にしながら考えます。
レビューしてくれる人が分かるように配慮が必要です。
5.4: PATCH FORMATTING AND CHANGELOGS を目に通しましょう。

コミットしたらパッチセットを作ります。コマンドは git format-patch を使います。
今回はパッチセットではなく1つだけで済んだので次の通りにしました。
sオプションをつけることにより、Signed-off-byをつけてくれます。5.4: PATCH FORMATTING AND CHANGELOGSに記述があるので忘れちゃダメだと思います。
$git format-patch HEAD^ -s
0001-USB-CONFIG_USB_DEVICEFS-from-defconfig.patch

パッチが複数になるときはきちんと連番になる仕様です。
0000は自分でカバーというパッチセットの説明を作成します。
今回はパッチ一つなので必要ありません。なんとなく、0001が邪魔なのでリネームしました。
mv {0001-,}USB-CONFIG_USB_DEVICEFS-from-defconfig.patch

2.パッチを送る

送り先は確認します。
MAINTAINERSに書いてあります。
今回の場合は次が該当します。
メンテナさんはGregさんで、MLはlinux-usb@~だという事が分かります。
USB SUBSYSTEM
M: Greg Kroah-Hartman
L: linux-usb@vger.kernel.org
W: http://www.linux-usb.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
S: Supported
F: Documentation/usb/
F: drivers/usb/
F: include/linux/usb.h
F: include/linux/usb/


そして、次のようにします。
git send-email \
--to gregkh@linuxfoundation.org \
--cc linux-usb@vger.kernel.org \
USB-delete-CONFIG_USB_DEVICEFS-from-defconfig.patch

これで完了です。
ちゃんと送信できたかそわそわしちゃう場合は、こことかでWebArchiveで確認できます。

ハマった所

全部、メールを送る部分だったりします。
  1. git send-email に失敗
  2. 次のようなエラーが出てしまいました。
    Password: 5.7.9 Application-specific password required. Learn more at 5.7.9 http://support.google.com/accounts/bin/answer.py?answer=185833 qw8sm8354239pbb.27 - gsmtp
    Gmailは2段階認証していたためです。 予めメッセージに従ってパスワードを発行しておきます。
  3. Gmail(Web)からレスをするとMLからエラーが来る
  4. Delivery to the following recipient failed permanently: The error that the other server returned was: 550 5.7.1 Content-Policy reject msg: The message contains HTML subpart, therefore we consider it SPAM or Outlook Virus. TEXT/PLAIN is accepted.!
    ちゃんとプレーンテキストで送っているはずなのにこうなりました。 メールのソースを開くと"Content-Type: multipart/alternative;"となっていて、引用部分がHTMLになっていました。 解決するには画像の矢印をクリックして展開する必要があります。 展開して送信した所, Content-Type: text/plain; となり、解決できていることが確認出来ました。
  5. エイリアスで送信できない
  6. いくつかの資料にGmailからは難しいという記載があったので諦めていたのですが、後ほど試したら可能でした。 2014/5/29にUpdate

反省点

  • Gregさんほどの人がこんなことはしないだろうとちょっと考えるべきだった。
  • MLに正しく送るのは分かっていれば難しくなさそうだが、ワナがある。
  • ひどい英語でも丁寧に説明してくれて嬉しい

しかし、本業がピンチな時にネタがふっと見つかるのはテスト前に机を片付け始めるあれと同じなんですかね

0 件のコメント:

コメントを投稿