追記

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-04-18 [長年日記]

FreeBSD で CPU のマイクロコードをアップデートする方法

ハンドブックに載ってました。

マイクロコードのアップデートには他にも sysutils/cpupdate を使う方法などいくつかありますが、ハンドブックに載っている sysutils/devcpu-data をインストールして、rc.conf に

microcode_update_enable="YES"

と書いておく方法が公式に推奨されている方法なのだろうと思います。


2018-04-08 [長年日記]

リトルカブ フロントフェンダー交換

リトルカブのフロントフェンダーを交換しました。このリトルカブは2度盗まれて2度とも持ち主の元へ戻ってきました。2度目に戻ってきたときにはかなりボロボロな状態で、当時の持ち主が引越しを控えていたために今更修理してまで乗る気はないという経緯で、前の持ち主から譲ってもらったという個体です。

フロントフェンダーも盗まれたときに壊された箇所のひとつで、前半分が引きちぎられていました。フロントフェンダーの前半分がないと、濡れた路面を走ると水をまき上げて顔にかかってしまうのでフェンダーを交換することにしました。外す前の写真は撮り忘れ。

フロントフェンダーはヤフオクで解体車から取り外したと思われるものを500円くらいで買いました。送料が1500円くらい。

n0NRk5mR16dtSyesBAVvgEedrtLqcvXHKUQzBRvnWURMgycw49GQmUpZFzHEfsyQWGsIa5po3sOpLSCCbgkDs12gUsQIo_6BZn7TKxwKwINOTio-HmuJlohOyw8Yx6wKB8khyQ7K2U_e1fdWscx7Sk9VRYu6qcQk-_VDz9yGU7IS4KnxGilOQkGMzlmwdZwhkdIxWOGFUzB2E1TlcLiWmypBMK9YMP5hQ9pMjyABo-Dbi9bSq9T_h9ng4b5SSmn7DaMGG_b6I8MmKw1qUnVWax5BTvt0vmHN5ugVQe2ED26rkSgwDqXK5ddFlEOcaLXjmZLVjwjxRQqsQRM4SnsLbPBiBMSpigzO_s3fKLlaPguuLBMXejrgTo9Y8cWeC6MzOgkF1QrLMDg0xYi65_qKHzq1OXbeXu5YcbPJe2PIis0SfRIRdKtIQnr6o7R4AtU8J1msxzWE-FGZOahmkyta_wOeKPbyOSGSRrjCCoRQ0b1CezqwbuqDEmmGJvQuRpSk3tQCwctSxk4Gr0gimuljCfD2XLESdWISwF-To-SJOHSdb8TQp07KRVu2rGiRt2bBeFbVa5IKvffaATVFzCbe3MgzaLZUS_KRkqFcE0CPjf0vrUNe98UI92ALw23-HtVJ9Ohc4Stxb-rWuD_1PswZPs913-8mhtpZ6A=w480-no?.jpg

古いフロントフェンダーは前半分が折れていることもあり、都合のいいことに前輪を外さなくても取り外すことができました。取り付けるフェンダーは当然半分ではないので、前輪を外す必要があります。

メガネレンチとソケットレンチを使って、前輪車軸のボルト・ナットを取り外し。サイズは進行方向左側(写真右側)が17mm、右側(写真左側)が12mmでした。17mmというのはドレンボルトと同じサイズです。

AqUUy51cp-fuSgWhJ3cLU8zdgSU1Z1jx9E2BmFiw6R18TeLdLtWUsLTN1upmlBaSFt1Xl5kqmLc0Isnnj8PvzIGTTA7KLdOTpAlHCCv3hMFBIPy7dTKTZAo349gNSx6aMGEl20soGfxZMvDlfctrO5aLKBbfARXpacD7UnxJSx2ysxSYlgzed4lvuUFa4eYespBKPTK-AiJr0n-CzK-i_yHoTOLHGsqivD-dIHNsohoHH1NNL4aTeRrnX5306soiHkYOilTgm0q_VySfpqhgBZF8YEgU7iZbRC0RVmsSfMGKA4ZMnJCRZPjsLkKaDBcZUCbs-bO9cLm3Xml1VWmWgRLOjf77-6DSlEzOd6BsBlA5XuBCHRcBA8sN3AWSdg27WAdc9WdsSF8l7pxpxGIILyh_fudo0l59N0QAEb0RS4m9pIA-S7jpCEXNR9ao5xsSBRW18yTliKvLvHrJSeJFy25MXK8PfAx5E9RIL2dZBjQQ8dMAzdpGuz2EIGpN1HXv2F4bQlZmIzO8yCpCddRa24fV43BCvYQ1yjnxJ2qm62M_NQc-tEvIpqBj2D5E2La3pqjvmjN88RQjwzSHT3K604WDusXuM6To5s22yYP5Qt_MbWG5FLK72ytxYhLdaWsU48rV1hw-AG0MkhgT2U5x3mtIYthTaYuEyw=w480-no?.jpg

はい、前輪が外れました。センタースタンドを立てていますが、前輪を浮かせるためにコンクリートブロックを下に潜らせる…はずが上手くいかなかったので、荷台にコンクリートブロックを2つ乗せて後輪を着地させました。

TqIy4nleZJgMT5DsH3G3GG-LPRCbv7hJRsDkq8CV_dbmNbhPy8G-AmpeZBxvG60vj2RqDzAClvzDOK5bnYufj-Wv3_qHVJVa0F-GV-Ajf64warTBQvBDtlHf94uAlHcWGsPuYQpk7BJ-FpYtChcKhMc6LjZTf0v6V5gVUMhxff4cFsaW5LrF6L7V8jH2eL7vZbM9ZueGNO7tMxv-LUODvf2D52uuTEmDV179_0cnQ2zVnLIMZ7MPIrD3VzA07kATraD3XIF54QaKKDRm8U5-2qywncUN4UBb_keI4_mlLmDFmvAH_ltfDZxLngpDxFjo7WnIMHGwWb4Z5oPhh1O2Op0KJtIbolgZBF-YOpwXCYjzU-wywhdrUo6rCJUovG3e_MQ_eJw8futz1BdcEck508nVXx_aZmMt0ClBrr__dxOwXrojVHrBOYdN2FS-wXMWwlzoiBEEvwfvC6F7Ssd9VJs6HIds-Q6Y8nm4g5z3Qb-QVj3syzdHpyVmhQBky_JAUtyxMeLY9y6X3E-EITYJSynaxE1gKiedttlJVa_373pS6qjfvv3In6TKu6YdQVQ8tl9Vb2gkKP87_K3fmX3RJgmKiAnDCaw-6c-JU-2BvA_kyCY3pHksVq6LN7k6D9ix1QSC5cdtTTUv6XYhmHCslbyAa-BEY12ZRQ=w480-no?.jpg

前輪が外せたら、フェンダーを下から差し込んで、ボルト2本で固定。色が違うけど気にしないことにします。

FPEihvyVx-MgwihTsjaCnlKyYeTgAqo7PkrgP-lFStg5v5nwx1jgWx4AfCSKBnDfPAmI9L9WJTiqgP-CP19RhaQ-HuCjxnWuaxXwnD5NMWeIosL_2kiGZc9-naeju_V8iQahqDWJGZCsQoeQYfIxpVg_WObQhQjWqiiyIQenD3sPsM_8dGcN6ProaGt1vCW3zGxyO1x_vxZiCv3QKk74GvLuuXxNQ83MjkuDZyhFh8eRugYrQSB2SouxQluXXK6Z_I49pcPCg_qfLrxc_zlv_aFK3N4zmyjuxqPkMydjHMmWNv2lcy1IUNXJjWovZ-w0HTE1m4hOFQ3FwFwYmUczKV6KtWPud4cq9iGhhFwGCW1z2yMFGNZBfW5lIJUTfc25Oe66mfa3Bz606gVrgOqwwHSyLf-wsfLkMFFjtVIYTmFJMS4zBVmWaKkOKEGZ2p4kn8M6zfS8oDvkNh4robkqyXppCkRXKPNCBB4RPzUydRxnXLWNLtWdq1ZWlMyTCNps6RFOM12joJIeT71Mn24unH28gnuQgQ9JKh4Imnl-3690qcNq-FvKnYWybIOex2auu9BCN808_hsnQUPgDvE-sESNDYYjggogyKtdr6jvMQ9q1QPvU6nLTmMo3JI3TCmaHoYjt6_x8qzh99VFRfuzurKnUOSziy85cA=w480-no?.jpg

フェンダーを固定したら、前輪を元通りに取り付けて、走行中に外れないようにしっかり締めておしまい。 色が違うのも気にならないような気になるような…。

4g1iX1GXYWSHWRqlT3_mX3sYZVr0rb94ZuTp1ZgEqmUGMHAOnY0HIj1IWrr8QMSo-LnyXg_N7P9YZEvopiEIg3QBTs8xPXHXQRQSuVzyzstB9bH7sbH62Q8TpFaxJhnm_NaxQ4y_RZKds_-xqwYRdJxc7JYazLc3w32HHiYt3umZXVsd7VKD70nTK-ymaWwWLNEiE36y2xflurYdeiKjI5IaZUVZQHblv9zqAGUg1dmBYQLMcmp2nGaN5jE0izL4BZ-HSb_0XbVgosGGCeiRCoPwCCgZMjp6TW9_sRO8kOnVwTEg8AHD9A2u9bXX93Ha8THXIcwwAmJKBjwkGxIjEfPu93Mj-IqU2-zOseqkJvjJtLcVhVEmNvUnGgdC7rhcHd8ERhNHofuvI-0FPx9DeIyt4uYPPJJYjUZRrvEkD0UrzI_AKAEbdy-Z7P50D6bB2KhsGRTE-6diRSindnGQoKkEKd1eKo06KQbqx4_WONxCg_f106bMkcjf0wVrtcTkXG9Y-MDUGs6yo4iEHmPKy-EHfrvDOoQECj0bb5O3EvErxqZEYpnrct0Wrz2iEVAROYszc1-4L5gDDjovWwz9_V1I2oalecSXi4NDk9ICtt_xMdEO-rIg3RESPKBDFZXe6RWW-xKTd0DiBCQasUxqFvkyV3-p6-TQyg=w480-no?.jpg

雨の日に乗ることは基本的にはないですが、雨上がりなどの濡れた路面を走っても顔に水がかからなくなったので本来の実用性を取り戻しました。


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を削除した理由です。


2018-01-31 [長年日記]

実行中のプロセスの環境変数を調べる

いつも忘れるのでメモ。

Linuxの場合

procfsを参照すればわかるが、いい感じに表示するためにodを使う。

od -S1 /proc/<pid>/environ

ref: https://qiita.com/Sheile/items/93171a2c428710700469

FreeBSDの場合

FreeBSDの場合はprocfsがないとは言わないが、procfsをマウントしても /proc/<pid> 以下に environ がなく環境変数を取得できない。

このため、baseに含まれるprocstatを使って調べる。

procstat -S1 -e <pid>

その他

macOSを含む各OS共通で ps eww <pid> でもいける。見た目が見やすいのはLinuxのprocfsに頼った方法なので、他のOSでいい感じに表示するにはどうしよう。


2017-12-31 [長年日記]

2017年に携わったOSSを振り返る

2017年もあと僅かとなりました。ここで、2017年に携わったOSSを振り返ってみます。

xrdp

自身の関わるOSSとし最大のcontributionのあるxrdpですが、2016年6月に開発者の仲間入りを果たしリリース体制の一新を訴えてきました。Pavel RoskinやDebianの手助けもあり、xrdpは2016年12月リリースのv0.9.1以降は 年に4回のTime-basedリリースを行う体制に変わりました。Time-baedリリースサイクルなので、時間が来たら重大なバグがない限り単純にリリースするだけという単純なものですが、概ね予定通りにリリースすることができました。

2017年のコミットを振り返ってみると、コミット数では私が109コミットで1位、続いてPavelが44コミットで2位、プロジェクトリーダーのJayが36コミットと続きます。コミット数だけでは語れないのですが、多くのバグ修正やリファクタリングで貢献してきたと思います。

a3yKrzfUW1bAEcdSjIy7JMUaZR3WXUVEspnX6qa9kqKjdLqLgGYNc4wONVhCFhsNoXeNg86U7YAwVhdtYYdZWADTDY-_Q2X2lLk1s8UUxlb06lgzieGNKa_gMT3OSXMEi0NzTmUvbB-Lg2zwhVvQu9ZLSEbuWAOydsgcWxu9mEnquQqF1BuQS-FjH_Ba-5neb4hCsWRQmDZ1rrHo2rbkTomUs9lSPDvLa2Uvxfvdm6fS5kd1Zu1NrBPwCcpsEm90fooJ7YZK8hoVd_KnfI70J2sMqCLBLT98s3GRLOAr_Ww56DfhwHhF5Y3qjpDX_5s0DJDAte4hjv9mXIyoKpNGzKv4Aj3sOx_3D9KKPIvmHuQA9NJEahniqvq2XBL-wpH41K2Q98xdRSUclL18jmAi4vI-HovLPztNpqDBQ5MKcoZKC236Sk21R9DK2ENceruoB2FOrGs_BZKZFqEn09vPOs0zvxAonRSYm-gQulh9OzUJLvM1SSsHwcp8fNL-x4Tnq9wJfBhCH8qk4AgxBXcrRUbqwzKwYQhHQW59F-9x2h4gwPQaWS-LIxKaKLz9SC2toDr-zd4CI9sWIGj0rDf1lIfvSswtnt0ZaQmtZVv2E4roKsCPOaT2lcbfjyU0GY7Sb8nZ6ZgfzQR_1p8rXJ6JpngeEtutFQnewQ=w750-h905-no?.jpg

10月には openSUSE.Asia Summit 2017 への登壇も果たしました。

xorgxrdp

xrdpのサブコンポーネントであるxorgxrdpですが、こちらは安定しているためそれほどコミット数は多くなく、1年間で14コミットでした。

FreeRDP

FreeRDPはオープンソースのRDPクライアント・サーバの実装として、xrdpと関係の深いプロジェクトです。

こちらには日常的に関わっているというわけではないのですが、今年は1つバグを報告して修正してもらいました。

tDiary

このブログにも使っているtDiaryですが、バージョン5系にアップデートしたところいくつかのプラグインでエラーが出るようになったため、直してPull Requestを送りました。

ところが、直し方がまずかったようで、作者のただただしさんに直してもらいました。

このバグの修正は最新リリースの v5.0.7 に含まれています。

まとめ

xrdpを中心に、その他のソフトウェアにも細々と貢献した1年でした。来年もよろしくお願いします。


2017-12-27 [長年日記]

xrdp v0.9.5 リリース

2017年12月27日、xrdp v0.9.5をリリースしました。四半期ごとのリリースに開発体制が変更になって以来、ちょうど1年、4回目のリリースです。リリースノートはGitHubのリリースページを参照ください。

今回のリリースの主なトピックはCVE-2017-16927の脆弱性修正です。xrdpチームからパッチが出ましたが、そのパッチには不備がありDebianから追加のパッチが提供されました

他には、オーディオ転送のためのPulseAudioモジュールのビルド方法が古くなっていたのをリニューアルし、最新の手順をリリースに含めています。xrdpでオーディオ転送を実現したい場合、下記ドキュメントを参照してください。

セキュリティフィックス

  • ローカルサービス拒否攻撃につながる脆弱性CVE-2017-16927修正

新機能

  • DEBUGより詳細な新たなログレベル TRACE の追加
  • RDP経由でのSSHエージェントフォワーディングのサポート(要FreeRDP)
  • 横ホイールによるスクロールを正式にサポート

バグフィックス

  • sesmanのポートがハードコードされていたのを修正
  • NeutrinoRDPモードでWindows Server 2008と接続した際、描画が乱れるのを修正
  • AACオーディオ転送で音が乱れるのを修正
  • vsockサポートを追加
  • TLS接続時にCPU使用率が100%になる問題を修正

その他の修正

  • US Dvorak キーボードサポートを追加
  • いくつかの誤解を招くログを修正
  • フィンランド語キーボードサポートを追加
  • Xorgの設定により親切なコメントを追加
  • PulseAudioモジュールのドキュメントを改定
  • その他多くのリファクタリング

既知の問題

Windowsのクライアントでオーディオ転送使用時、コーデックがMP3だと音が鳴らない不具合があります。AACを代わりに使用してください。


2017-11-28 [長年日記]

xrdp-sesman の脆弱性 CVE-2017-16927 を修正しました

各所から情報が公開されていますが、xrdp を構成する1コンポーネントである xrdp-sesman にバッファオーバーフローの脆弱性が発見されました。本脆弱性は既に修正済みですが、脆弱性のみを修正するリリースは行わず、来月2017年12月に予定している定期リリースに含む予定です。

xrdp-sesman の sesman/libscp/libscp_v0.c の scp_v0s_accept 関数内で、ネットワークから受け取った信頼できない整数値をサイズとして、固定長のバッファに書き込んでいました。これにより、xrdp-sesman プロセスのクラッシュにより DoS が発生する可能性があります。

デフォルトの設定では、xrdp-sesman は localhost:3350 を LISTEN しているため、リモートからの攻撃は受けず、ローカルユーザによる攻撃に限定されます。

パッチは下記の通り、可変長のバッファを確保することで対応しています。