現在位置: ホーム / みらくるブログ / 入社 2 年目!駆け出しエンジニアの Patch がマージされるまで

入社 2 年目!駆け出しエンジニアの Patch がマージされるまで

人生で初めて Patch 投稿をしました!!

 

皆さんこんにちは、でぃさんです。
今回は、入社 2 年目の駆け出しエンジニアである私が初投稿した Patch がマージされるまでの過程を紹介したいと思います!

私が挑戦したのは、fedora の iso を作成する際に使われる spin-kickstarts パッケージを作成するための fedora-kickstarts というプロジェクトです。Live DVD を作成するプロジェクトと言うと分かりやすいですかね。
spin-kickstarts には、様々なウィンドウマネージャー用のキックスタートファイルが準備されているのですが、その中に l10n というディレクトリがあります。このディレクトリのキックスタートファイルを活用すると、それぞれの言語に対応した Live DVD が作成出来るんです!

私が投稿した Patch は "fedora-livedvd-games-ja_JP.ks" です。
簡単に説明すると、fedora-livedvd-games を起動直後から日本語表示、日本語入力可能で、日本語キーボード対応にさせるという、日本語対応が目的の Patch です。

当社のたいちょうが、以前に日本語対応に貢献しているという話を聞いて、まだ日本語対応させていないディストリビューションがあるだと?私がやってやるぜ!という気持ちで私のチャレンジはスタートしました。
...と格好つけたいところですが、実際は「やってみたいけど、私に出来るのかな?」と不安だらけのスタートでした。

一度投稿してしまうと怖さが減り、現在は "fedora-livedvd-electronic-lab" の日本語化 Patch も作成中なんですけどね(笑)。

前置きはこのぐらいにして、本題に入ります!
順を追って説明していきますので、このブログを見つけてくれたあなたもぜひ一緒に手を動かしてみてください。

まず私が Patch 投稿にあたり行ったことは、Fedora アカウントを作成することでした。

ステップ1:Fedora アカウントを作ろう

やる気があればなんでもできるという訳にはいかないので、Patch 投稿が出来るように Fedora アカウントを作成します。アカウントの作成は特に難しいことはなく、公式ページにアクセスし、
Fedoraに参加する → Log in → Sign up now の順に進んでいき、必要項目を入力するだけです。

塚田のブログ用画像

アカウントの作成が完了したら fedora-kickstarts に初ログインしていきます。
リンク先に行き、右上の Log in ボタンから作成したアカウント名とパスワードを入力すれば大丈夫です。

塚田のブログ用画像

ログインが出来たら Git での作業の準備として fedora-kickstarts リポジトリを fork して、自分用のリポジトリを作成します。

ステップ2:リポジトリを fork しよう

右上に「fork」というボタンがあるのでそのボタンをリックするだけで ユーザー名/fedora-kickstarts
が作成出来ます。下の画像は fork が完了した後のものになります。

塚田のブログ用画像

ここまでで Web 上での作業は一旦終了です。 

ステップ3:作業環境を用意しよう

私の実機の環境は当社製品である Asianux Server 7 ですので、仮想環境上に Fedora をインストールして、Patch 作成作業を行いました。

Fedora の iso ファイルは公式サイトから入手可能です。
また、仮想環境上へのインストール方法については割愛します。
仮想環境上へのインストールが完了したら、Fedora にログインしビルド等に必要なパッケージのインストールを行います。

私は以下のパッケージをインストールしました。

  • Git

  • Mock

$ dnf install "パッケージ名"

これで環境構築の第一段階は終了です。

ステップ4:リポジトリを clone しよう

早速 fork したリポジトリをローカル環境に clone していきます。

ここで注意!
clone する前に、作業環境の公開鍵の作成と設定が必要になります。
公開鍵の設定が正しく出来ていないと、リポジトリにアクセス出来ません。 

まずは公開鍵の作成から説明します。
説明と言っても、以下のコマンドを実行するだけでさくっと作れます。

$ ssh-keygen -t rsa -b 4096 -C "メールアドレス"

作成した公開鍵は以下のコマンドで確認できます。

$ cat ~/.ssh/id_rsa.pub

次は、作成した公開鍵を PAGURE に設定します。
コピーした公開鍵を以下に示した箇所に貼り付け、Add を押すだけで設定完了です!
ログインした状態で Setting → Deploy keys タブ → add deploy keys を選択してください。

塚田のブログ用画像

ここまで終わってようやく安心して clone が実行できます。

$ git clone https://pagure.io/forks/"ユーザー名"/fedora-kickstarts.git

ステップ5:ビルド環境を用意しよう

ビルドを行うために、chroot 環境を作成します!まずは、chroot 環境を初期化します。
ここで先程インストールした "mock" が出てきます。

# mock -r fedora-28-x86_64 --init

iso イメージを作成するのに必要なパッケージを chroot 環境にインストールします。

# mock -r fedora-28-x86_64 --install lorax-lmc-novirt vim-minimal pykickstart spin-kickstarts

ここで一度、clone したディレクトリに戻ります。
次の作業で必要になるので、make コマンドを実行して tar.gz ファイルを生成します。
この生成した tar.gz ファイルを /var/lib/mock/fedora-28-x86_64/root/ に展開します。

# make
# mv "tar.gz ファイル" /var/lib/mock/fedora-28-x86_64/root/
# cd /var/lib/mock/fedora-28-x86_64/root
# tar zxvf "tar.gz ファイル"

長かったですが、以上で環境の準備は終了です。

ステップ6:Patch を作成しよう

環境が整ったら今回のメインである Patch 作成を行います。
まず、Patch を作成するためのブランチを切ります。(今回の""は実際に記述する際にも必要です)
今回は「fix-games-ja」というブランチ名で作成しました。

$ git branch -b "ブランチ名"

私が作成した Patch は他言語版のファイルもあったので、書き方を合わせるようにするということも考えながら作成しました。
実際に投稿した Patch は公式ページで確認できます!
記述した行数は少ないですが、パッケージの削除や追加、ファイルの参照など基礎を学べる良い内容でした。

ステップ7:iso ファイルを作成しよう

Patch の作成は完了したら、Patch が正しく作成できているが確認します。
まずは作成した Patch を ksflatten コマンドを使って 1 つの長いファイルにしていきます。

# ksflatten --config "作成したpatch名" -o "生成されるファイル名" --version "バージョン"

ファイルが生成できたら、 chroot に入り livemedia-creator コマンドを使って iso ファイルを作成していきます!

# mock -r fedora-28-x86_64 --shell --old-chroot

下に示したものは chroot 環境で実行します。
("\"の箇所は一行に繋がっていることを示しています。)

<mock-chroot> sh-4.4# livemedia-creator --ks "キックスタートファイル名" --no-virt \
--resultdir /var/lmc --project "プロジェクト名" --make-iso --volid "ラベル" --iso-only \
--iso-name " iso ファイル名" --releasever "バージョン" --title "表示されるタイトル" --macboot

もちろんエラーが出たりなどしますが、根気強く成功するまでこの作業を Patch の修正から何度も繰り返します。 

☆ポイント

  • build を実行した後は /var/lmc を削除してから次の build を行う
  • 参照先ファイルの名前はしっかり確認する
  • chroot 環境に入ることを忘れない

以上のポイントに注意しながら作業を行いました。

ステップ8:正しく動くか確認しよう

ステップ7 で作成した iso ファイルが正しく動作するのか確認します。
そのためには先ず、仮想環境上に作成された iso ファイルを実機にコピーする必要があります。
私は以下に示す scp コマンドを使用し、ファイルをコピーしました。

$ scp Fedora-games-28-x86_64-ja_JP.is "ユーザー名"@"IPアドレス":"配置したいディレクトリの絶対パス"

実機へ iso ファイルを持ってきたら、ドキドキの最終確認です。
確認方法としては簡単で、作成した iso ファイルを仮想マシン上で立ち上げ、起動直後から日本語表示されていること、日本語入力が可能なことを確認するだけです。
私が作成した game iso の起動後の画面はこの様になっていました。

修正版

日本語表示になっていることが分かりますね!

パッチ投稿_5_2

ここで問題がなければ作成したブランチを fork した自分用のリポジトリにプッシュします。(今回の""は実際に記述する際にも必要です)

$ git push origin "ブランチ名"

パッチ投稿_6

Webページで確認すると、一番下に「fix-games-ja」というブランチが追加されているのが分かります。

ステップ9:プルリクエストを送る

ついに最後の工程です。プルリクエストを送ります。
これが一番緊張する作業だと私は思っています。

いざ、ブランチの横にある青色のボタンをクリック!

マスターのプルリクエストのタブを確認すると 1 番上に私のリクエストを確認できました!
ここまで終われば後はマージされるのを待つだけです。

パッチ投稿_7

そして待つこと数日。。。
私の初投稿 Patch がマージされました!!

パッチ投稿_8

Patch 投稿を実際に経験して最初に感じていた不安がなくなったので、今後も投稿していこうと思っています!fedoraディストリビューション自体を作成する重要なプロジェクトに参加できたと思っているので、次回からは、もっとコアなところにも貢献できるようにしていきたいです。

最後まで読んでくださり、ありがとうございました。
このブログを読んで、Patch 投稿そんなに怖くないじゃん!と思ってもらえたら嬉しいです。

以上、でぃさんでした。
また何かの機会でお会いしましょう (`・ω・')ゝ

(参考ページ)
https://fedoraproject.org/wiki/Join_the_package_collection_maintainers/ja

https://www.mankier.com/1/livemedia-creator

タグ: