はじめに
OSv Advent Calendar 2014 - Qiita 4日目(4日目に公開できたらいいな).
以前,OSvもくもく会#4 〜OSvで遊んでみよう〜 - connpass でOSv へのパッチの送り方を教えていただいたので,紹介する.
なお,この記事の中身OSv というよりはGit の使い方っぽい.
OSv のパッチ
- メールで送る
- Github のpull req ではない
- Linux のやり方に近い(気がする)
- Github のpull req ではない
- パッチが受け入れられたら,github のリポジトリにマージしてもらえる.
- マージされるとこんな感じ→ https://github.com/cloudius-systems/osv-apps/commit/fdeb89efa69c84d7ba01a4842451c8190ba78486
- (パッチの中身はCで書いたHello WorldをOSv に組み込むサンプルコード)
- マージされるとこんな感じ→ https://github.com/cloudius-systems/osv-apps/commit/fdeb89efa69c84d7ba01a4842451c8190ba78486
送る流れ
git format-patch
でパッチを生成git send-email
で送るgit send-email
を使わずにメールを送ってもいいけど,使った方が無難(僕は使わずに妙なことになった)
パッチファイルを作る(git format-patch)
- git のユーザー名とメールアドレスを設定しておく
- 変更を加えてローカルリポジトリにコミットまでする
git format-patch -s <commit id>
- OSvにパッチを送る時は -s オプションは必須.
- このオプションはパッチファイルに署名を追加する.
- このオプションはパッチファイルに署名を追加する.
- –subject-prefix='PATCH v2' とオプションをつけると,パッチのタイトルの先頭にprefix を追加できる.
- パッチを修正して再度送る場合などに,"PATCH v2" などとつける.
- パッチを修正して再度送る場合などに,"PATCH v2" などとつける.
- OSvにパッチを送る時は -s オプションは必須.
- コマンド実行の結果,"0001-commit-message.patch" のようなファイル名でパッチファイルが生成される.
生成されるパッチの中身
From 9a81c71e4a64acdb62ffdfc8f5d5fbe77eca48a8 Mon Sep 17 00:00:00 2001
From: Takaaki Fukai <deep.wiki@gmail.com>
Date: Sun, 9 Nov 2014 07:48:23 +0000
Subject: [PATCH v2] add a native code example
Signed-off-by: Takaaki Fukai <deep.wiki@gmail.com> ←-s オプションでついた署名
---
native-example/Makefile | 10 ++++++++++
native-example/README | 1 +
native-example/hello.c | 6 ++++++
native-example/module.py | 3 +++
native-example/usr.manifest | 1 +
5 files changed, 21 insertions(+)
create mode 100644 native-example/Makefile
create mode 100644 native-example/README
create mode 100644 native-example/hello.c
create mode 100644 native-example/module.py
create mode 100644 native-example/usr.manifest
diff --git a/native-example/Makefile b/native-example/Makefile
new file mode 100644
index 0000000..0271bcb
--- /dev/null
+++ b/native-example/Makefile
@@ -0,0 +1,10 @@
+.PHONY: module
+module: hello
+
+CFLAGS = -std=gnu99 -fpie -rdynamic
+
+hello: hello.c
+ $(CC) -pie -o $@ $(CFLAGS) $(LDFLAGS) hello.c
+
+clean:
+ rm -f hello
diff --git a/native-example/README b/native-example/README
new file mode 100644
index 0000000..7ce6e3e
--- /dev/null
+++ b/native-example/README
@@ -0,0 +1 @@
+This is a minimal sample of porting native code.
diff --git a/native-example/hello.c b/native-example/hello.c
new file mode 100644
index 0000000..be1cf2b
--- /dev/null
+++ b/native-example/hello.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main(){
+ printf("Hello from C code\n");
+ return 0;
+}
diff --git a/native-example/module.py b/native-example/module.py
new file mode 100644
index 0000000..16c9bae
--- /dev/null
+++ b/native-example/module.py
@@ -0,0 +1,3 @@
+from osv.modules import api
+
+default = api.run("/hello")
diff --git a/native-example/usr.manifest b/native-example/usr.manifest
new file mode 100644
index 0000000..b79ddd9
--- /dev/null
+++ b/native-example/usr.manifest
@@ -0,0 +1 @@
+/hello: ${MODULE_DIR}/hello
--
1.9.3
パッチを送る
前準備: メーリスの購読
- パッチを送る前にOSv の開発者メーリングリストの購読をする
- メーリングリストはGoogle グループ
- メーリングリストのURL: https://groups.google.com/d/forum/osv-dev
- メーリングリストはGoogle グループ
前準備: git send-email の設定
(これが一番面倒)
- 参考URL: LinuxカーネルHack: git commitからgit send-emailでGMailアカウントを用いたパッチ送信まで - ひっそりらぼ
- まずは必要なものをインストール
# yum install git-email
# yum install msmtp
# yum install ca-certificates
~/.gitconfig
に以下を追記
[sendemail]
smtpserver = /usr/bin/msmtp
~/.msmtprc
を作成(以下はGmail アカウントからメールを送るための設定)
# Example for a user configuration file
# Set default values for all following accounts.
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-bundle.crt ←(※1)
logfile ~/.msmtp.log
# My email service
account gmail
host smtp.gmail.com
port 587
from deep.wiki@gmail.com
auth on
user deep.wiki@gmail.com
password ****************** ←(※2)
# Set a default account
account default : gmail
- (※1)ディストリによってはファイルのパスが違うかもしれない.上はFedoraの例.
- (※2)Google の2段階認証を有効にしているときは,アプリケーション固有パスワード
メールを送る
git send-email 0001-add-a-native-code-example.patch
を実行- 起動すると"Who should the emails be sent to (if any)?" と送り先メールアドレスを聞かれる.
- osv-dev@googlegroups.com と入力
- osv-dev@googlegroups.com と入力
- "Message-ID to be used as In-Reply-To for the first email (if any)?" と聞かれる.
とりあえず何も入れずにEnter で良かったはず. - 送信するメールの中身が表示されるので,確認してyを入力
[root@openstack-host apps]# git send-email 0001-add-a-native-code-example.patch
0001-add-a-native-code-example.patch
Who should the emails be sent to (if any)? osv-dev@googlegroups.com
Message-ID to be used as In-Reply-To for the first email (if any)?
(mbox) Adding cc: Takaaki Fukai <deep.wiki@gmail.com> from line 'From: Takaaki Fukai <deep.wiki@gmail.com>'
(body) Adding cc: Takaaki Fukai <deep.wiki@gmail.com> from line 'Signed-off-by: Takaaki Fukai <deep.wiki@gmail.com>'
From: Takaaki Fukai <deep.wiki@gmail.com>
To: osv-dev@googlegroups.com
Cc: Takaaki Fukai <deep.wiki@gmail.com>
Subject: [PATCH v2] add a native code example
Date: Thu, 4 Dec 2014 14:10:45 +0000
Message-Id: <1417702245-4428-1-git-send-email-deep.wiki@gmail.com>
X-Mailer: git-send-email 1.9.3
The Cc list above has been expanded by additional
addresses found in the patch commit message. By default
send-email prompts before sending whenever this occurs.
This behavior is controlled by the sendemail.confirm
configuration setting.
For additional information, run 'git send-email --help'.
To retain the current behavior, but squelch this message,
run 'git config --global sendemail.confirm auto'.
Send this email? ([y]es|[n]o|[q]uit|[a]ll): y
OK. Log says:
Sendmail: /usr/bin/msmtp -i osv-dev@googlegroups.com deep.wiki@gmail.com
From: Takaaki Fukai <deep.wiki@gmail.com>
To: osv-dev@googlegroups.com
Cc: Takaaki Fukai <deep.wiki@gmail.com>
Subject: [PATCH v2] add a native code example
Date: Thu, 4 Dec 2014 14:10:45 +0000
Message-Id: <1417702245-4428-1-git-send-email-deep.wiki@gmail.com>
X-Mailer: git-send-email 1.9.3
Result: OK
(ブログ書くときにやりかたを思い出すために別のアドレスに送ったときのログから送り先だけ"osv-dev@…"に変えたもの.実際のパッチを投げた時のではないので日付とかはお察し)
おわりに
パッチを送るまでに少々面倒な手順が必要だけど,一度設定してしまえば,
git format-patch
と git send-email
コマンドだけでパッチを送れるようになる.最初は
git send-email
を使わずにメーラーにパッチをコピペして送ったろうとしてみた.しかし,妙な空行が入ったりして逆に面倒だったので,最初から
git send-email
使った方がよい.--
My Emacs Files At GitHub
0 件のコメント:
コメントを投稿