«前の日(02-15) 最新 次の日(02-17)» 追記

meta's blog - The Power To Serve

筆者について - No Unix, No Life

日本xrdpユーザ会発起人。

とある元大学院生の UNIX 系日記。FreeBSDを通じてOSSに囁かな貢献を。 FreeBSD ports contributor やってます。

For non Japanese native people:
If you are interested in my articles, please leave comments. I will do my best to give you articles in English.


2018-02-16

はじめてのMacPorts: FreeRDPを2.0.0-rc1にアップデートしてマージされた

MacPortsに入っているFreeRDPが1.1系で古かったので、最新の2.0.0-rc1に更新してみました。FreeBSD portsのアップデートpatchを作るというのは日常的にやっているので、その

大体こんな流れ。

  1. GitHubのMacPortsリポジトリをforkする
  2. forkしたリポジトリをcloneする
  3. 当該portをいじる
  4. Pull Requestを作る

最初の2つは1回きりで手元にリポジトリを持っていれば省略できるので、適当に。

まずはMacPortsのチケット検索ページから、当該portのアップデートリクエスト等のチケットがないか確認します。あれば、後でコミットするときに「このチケットの作業やっといたよ」とコミットメッセージに書くためにURLを控えておきます。

次にPortfileをいじります。Portfileの書き方はFreeBSD portsのMakefileとは全然違うものの、FreeBSD portsに慣れていればなんとなく雰囲気でわかりました。ちょっと手こずったのが、FreeBSD portsの `make makesum` のような tarball のチェックサムを自動的に生成する手段がない(?)ところ。

もしかしたらあるのかもしれませんが、OpenSSLで2種類のチェックサムを生成して手でPortfileに書き込みました。

openssl dgst -rmd160 FreeRDP-2.0.0-rc1.tar.gz
openssl dgst -sha256 FreeRDP-2.0.0-rc1.tar.gz

コミットメッセージはガイドラインに沿うように。 そんなこんなで出来上がったのがこちらのコミット。とりあえず見様見真似。

そしてPull Requestを作成。

Pull Requestにテンプレートがあって、以下のコマンドでテストしたMacの環境を添えます。

echo "macOS $(sw_vers -productVersion) $(sw_vers -buildVersion)"; echo "Xcode $(xcodebuild -version | awk '{print $NF}' | tr '\n' ' ')"

他にも、

  • コミットメッセージガイドラインに沿ったか
  • 同じようなPull Requestがないことを確認したか
  • Tracチケットがある場合URLでリンクをしたか(チケット番号だけではダメ)
  • `port lint` コマンドで文法チェックをしたか
  • `sudo port test` コマンドでテストを実行したか(テストがある場合)
  • `sudo port -vst install` でインストールのテストをしたか
  • 全てのバイナリの実行テストをしたか

といった項目の確認をします。Tracチケットがなかった場合、わざわざ作る必要はないのですがうっかり作ってしまいました。うっかり作ったとはいえ、チケットを作ってしまったのでチケットのURLをコミットメッセージに含めました。

とりあえずここまで。提出したPull Requestがマージされるのか、それとも修正を求められるのか、とりあえず見守ります。野良portsとしてのビルドはご自由に。

その後

無事にマージされました。いくつか指摘があって、

  • PulseAudioのvariantを削除した理由をコミットメッセージで説明する
  • うっかりepochを削除してしまったので元に戻す

という変更が必要でしたが、大きな変更ではありませんでした。

FreeRDP 2.0系ではMacとの互換性も向上していて、以前はPulseAudioを経由しないと音が出せなかったのがMacのネイティブオーディオをサポートしたため必要なくなったというのがvariantを削除した理由です。