Ubuntu Weekly Recipe

第519回ubuntu-reportは何を・何時送信するのか

Ubuntu 18.04 LTSでは、デスクトップユーザーの利用状況を把握するために、インストール直後にシステム情報をCanonicalのサーバーに送る機能が実装されました(参考:Topicsの2018年2月23日号⁠。今回はどんな情報が、どのタイミングで、どのように送信されるのか、さらにはその停止方法を紹介します。

初回ログイン時にのみ起動するアレ

第517回でも紹介されているように、Ubuntu 18.04 LTSのデスクトップ版では初回ログイン時にウィザード(Welcome to Ubuntu)が表示されるようになりました。これはGNOME Initial SetupのUbuntuカスタマイズ版です。

本家のGNOME Initial Setupは本来、初回ログイン時におおよそ次のような項目を設定します[1]⁠。

  • 言語
  • キーボードレイアウト
  • EULAの確認
  • 無線LAN
  • プライバシー関連機能のオンオフ
  • タイムゾーン
  • 追加のソフトウェアソース
  • オンラインアカウント
  • ローカルアカウント(さらにActiveDirectoryもしくはFreeIPAを利用したアカウント)
  • アカウントに対するパスワード

それに対してUbuntu 18.04 LTSの場合は、第517回の1ページ目末尾のスクリーンショットからもわかるように、次の項目しか表示・設定しません。

  • 「Ubuntuの新機能」
  • 「Livepatch」
  • 「Ubuntuの改善を支援する」
  • 「準備が完了しました!」

これはGNOME Initial Setupで設定する項目のほとんどが、Ubuntuのインストーラー(Ubiquity)で設定済みだからです。ちなみに実行バイナリはGNOME Initial SetupとWelcome to Ubuntuでまったく同じ(/usr/lib/gnome-initial-setup/gnome/initial-setup)です。何をもって挙動を変えているのかというと、どうやら環境変数XDG_CURRENT_DESKTOP「ubuntu」であるかどうかで、変更しているようです。

それでは「初回ログイン時のみ起動する」部分はどのように実現しているのでしょうか。GNOME Initial Setupの起動スクリプトは「/etx/xdg/autostart/gnome-initial-setup-first-login.desktop」です。⁠/etc/xdg/autostart/」※2にあるDesktop Entry Fileは、セッション起動時に自動的に実行されます。ただしgnome-initial-setup-first-login.desktopには次のような記述があります。

AutostartCondition=unless-exists gnome-initial-setup-done

つまり~/.config/gnome-initial-setup-doneが存在しない場合のみ、自動起動されるわけです。GNOME Initial Setupでは、最後のページもしくは「準備が完了しました!」のページが表示されたときに、このファイルが作成されます。これにより一通りGNOME Initial Setupを見たあとは、もう起動しなくなるのです。同じ理由で、GNOME Initial Setupを起動したまま再起動した場合は、次回ログイン時にもGNOME Initial Setupが再び起動することになります。

$ cat ~/.config/gnome-initial-setup-done
yes

これにより古いリリースからアップグレードした場合も必ず一度はGNOME Initial Setupが実行されることになります。ただし18.04から18.10にアップグレードする際は~/.config/gnome-initial-setup-doneが残ってしまいます。GNOME Initial Setupの本来の用途を考えると、アップグレード時は実行されないのが期待される挙動ではありますが、Welcome to Ubuntuの用途からするとアップグレード時は毎回表示するような仕組みになるかもしれません。

ちなみにgnome-initial-setup-first-login.desktopは--existing-uesrオプションを付与してGNOME Initial Setupを起動しています。これは「既存ユーザーモード」と呼ばれる、既に存在するユーザーアカウントに対して設定を行うモードです。もしこのオプションを付けずに起動した場合は、Ubuntuの場合もローカルアカウントとパスワードの設定が表示されます。

ここまでの説明で「初回ログイン時に起動する」仕組みがわかりました。ちなみにこの仕組みはXDG[3]をサポートするディストリビューションやデスクトップ環境であればおおよそ同じ挙動をするので、独自に「初回ログイン時に起動する」ソフトウェアを組み込む際に参考になるでしょう。

送信ツール「ubuntu-report」

「Welcome to Ubuntu」の3番目の「Ubuntuの改善を支援する」では、Ubuntuの改善を支援するためにシステム情報を送信するかどうかを問われます。これはUbuntu Weekly Topicsの2018年2月23日号でも話題になった、より多くのUbuntu利用情報を集める機能の成果物としてのubuntu-reportに関する設定です。

図1 ⁠developers」が何を意図しているのかは不明
画像

ubuntu-reportでは次のような情報をJSONフォーマットで送信します。

  • ハードウェアとシステムの情報
  • インストール時・アップグレード時に設定した項目
  • インストール時・アップグレード時の各画面で要した時間

具体的には同画面の「Show the First Report」ボタンで内容を確認できます。

図2 送信する情報
画像

送信するタイミングは「次へ」ボタンを押したタイミングです。つまり「次へ」を押さない限りはデータの送信は行いません。

ちなみに「いいえ、送信しません」を選ぶと「何も情報を送信しない」と思うかもしれませんが、それは勘違いです。⁠いいえ、送信しません」を選んだ上で「次へ」を押した場合も、「システム情報は送らない」という情報が送信されます。具体的には次のようなJSONデータが送信されます。

{"OptOut": true}

つまりCanonicalには特定のIPアドレスに対してWelcome to Ubuntuが実行されたことがわかるようになっています。言い換えるとUbuntuデスクトップがインストールされたマシンの概数だけは把握できるようになっているのです[4]⁠。

データの送信先はhttps://metrics.ubuntu.comです。経路についてはTLSで暗号化されます。

送信するデータと収集元

実際に送られたデータは~/.cache/ubuntu-report/ubuntu.18.04に保存されます。最後のファイル名はディストリビューション名やバージョンに依存します。またubuntu-report showコマンドを使うことで、再収集も可能です。

{
  "Version": "18.04",
  "OEM": {
    "Vendor": "Panasonic Corporation",
    "Product": "CF-AX2QEBJR"
  },
  "BIOS": {
    "Vendor": "American Megatrends Inc.",
    "Version": "V1.11L14"
  },
  "CPU": [
    {
      "Vendor": "GenuineIntel",
      "Family": "6",
      "Model": "58",
      "Stepping": "9"
    }
  ],
  "Arch": "amd64",
  "GPU": [
    {
      "Vendor": "8086",
      "Model": "0166"
    }
  ],
  "RAM": 3.9,
  "Partitions": [
    122,
    0.5
  ],
  "Screens": [
    {
      "Resolution": "1366x768",
      "Frequency": "60.03"
    }
  ],
  "Autologin": false,
  "LivePatch": false,
  "Session": {
    "DE": "ubuntu:GNOME",
    "Name": "ubuntu",
    "Type": "x11"
  },
  "Timezone": "Asia/Tokyo",
  "Install": {
    "Media": "Ubuntu 18.04 LTS \"Bionic Beaver\" - Release amd64 (20180426)",
    "Type": "GTK",
    "PartitionMethod": "use_device",
    "DownloadUpdates": true,
    "Language": "ja",
    "Minimal": false,
    "RestrictedAddons": false,
    "Stages": {
      "0": "language",
      "1": "language",
      "63": "console_setup",
      "106": "prepare",
      "124": "partman",
      "131": "start_install",
      "143": "timezone",
      "153": "usersetup",
      "172": "user_done",
      "527": "done"
    }
  }
}

送信するデータについてもう一度確認してみましょう。

  • ハードウェアとシステムの情報
  • インストール時・アップグレード時に設定した項目
  • インストール時・アップグレード時の各画面で要した時間

あくまで改善を支援する目的から、個人を特定しうるセンシティブな情報は収集しないようになっています。

ハードウェアとシステムの情報はシステム上のファイルやコマンドから情報を取得しています。

PCベンダーや製品番号、BIOSバージョン /sys/class/dmi/id以下の各種ファイル
CPUの情報 /proc/cpuinfo
CPUアーキテクチャー dpkg --print-architectureの結果
GPUの情報 lspci -nの結果からPCI Device Classが0x0300の情報のみ抽出
メモリーの情報 /proc/meminfo
パーティション dfコマンドから/dev以下のものだけをGB単位で表示
画面解像度 xrandrの結果
自動ログイン設定 /etc/gdm3/custom.confの「AutomaticLoginEnable」の状態
LivePatch設定 /var/snap/canonical-livepatch/common/machine-tokenの有無
セッション情報 環境変数XDG_CURRENT_DESKTOPXDG_SESSION_DESKTOPXDG_SESSION_TYPE
タイムゾーン /etc/timezoneの中身

インストール時に設定した項目はその名のとおり、インストーラーであるUbiquityで設定した項目です。インストール時の各画面で要した時間は、インストーラーのダイアログにおいて「次へ」を押してから次の「次へ」を押すまでの経過時間のリストです。インストーラーが計測した情報は「/var/log/installer/telemetry」に保存しています。Ubiquityには3月28日に取り込まれたので、それ以前のテスト版をインストールした環境であれば存在しないかもしれません。

アップグレード時、つまりUbiquityを使用しない時は「/var/log/upgrade/telemetry」に何がしかの記録が行われる予定です。こちらについてはdo-release-upgradeへの変更が提案されていますが、5月上旬時点ではまだ反映されていない状況です。つまり17.10以前のマシンからのアップグレードの際は、アップグレード関連の情報は通知されません。

データを送信しないようにするには

この手の情報収集にはユーザー(もしくは当事者ではないけれども議論は大好きな人)の反発が付き物です。収集している情報がオープンでないことは論外ですが、いかに「個人を特定できる情報はマスクしてある」とか「ユーザーエクスペリエンスを改善するために」と言われても、集めること自体が「気持ち悪い」とか「何かひっかかる」と感じる人はそれなりにいます。

そもそも集めたデータがどう使われるのかわかりにくいというのも不安の一因です。最近だとFacebookにおける「情報の使われ方」が大きな問題となりましたし、Ubuntu/Canonical自身も過去にAmazon Lensの組み込みの際にユーザーの反発にあいました(参考:Topicsの2012年9月28日号⁠。今回のような情報だと、他のユーザーも気軽にアクセスできるようにすれば不安はもう少し和らぐとは思うのですが、どうやらその仕組みはないようです ※5⁠。

ただしビジネス上はもちろんのこと開発において、利用者の統計情報を集めたくなる気持ちも分かります。また「反発しない人はそもそも声をあげない」ことを考慮すると、大多数の人にとっては多少の情報収集は許容範囲内(もしくは無関心)であろうことも予想に難くないでしょう。

それを踏まえた上で「集めてほしくない人」にとっての最低限の妥協ラインは、⁠収集・送信しないよう簡単に設定できる仕組みが存在すること」であると思われます。この点においてubuntu-reportは残念ながら十分には対応されていません。

しかしながら「収集・送信しない」設定をまったくできないというわけでもありません。ubuntu-reportでは送信結果を~/.cache/ubuntu-report/ubuntu.18.04に保存しています。このファイルをあらかじめ作っておくと、Welcome to Ubuntuはエラーコンソールに「metrics from this machine have already been reported and can be found in: ファイル名」を表示して何も送らないのです。

ファイルの有無がポイントなので、中身はなんでもかまいません。どうしても気になるようなら、Welcome to Ubuntuが起動した時点で「Ctrl-Alt-t」でGNOME端末を起動して、以下のコマンドを実行すると良いでしょう。

$ egrep "ID=|VERSION_ID=" /etc/os-release
ID=ubuntu
VERSION_ID="18.04"
$ touch ~/.cache/ubuntu-report/ubuntu.18.04

なおファイル名の「ubuntu」「18.04」の部分は/etc/os-releaseのIDVERSION_IDがそれぞれ該当します。Ubuntu以外のフレーバーを使っている場合は適宜読み替えてください。

ファイルができたあとであれば、⁠次へ」を押しても「情報は送信済み」と判断されて、何も送信されないはずです。将来に渡ってこの挙動が維持される保証はありませんが、とりあえずの対応としては利用できることでしょう。

おすすめ記事

記事・ニュース一覧