最近の新しい Google Chrome にストア以外から拡張をインストールする

はじめに

Google Chrome では、ストア以外から拡張をインストールすると、次回起動時に無効化されてしまいます。

(開発者モードでパッケージ化する前の状態の拡張をインストールすると、次回起動時でも有効になりますが、 起動のたびに開発者モードがonになってますよとポップアップで警告してくれます。)

社内で使うために手元で作ってるのに、登録してストアからインストールするのもつらいよなぁ (個人アカウントは使いたくない、会社用にアカウントを作るのは社内手続きが面倒)

みたいな状態だったので、なんとかしたいと調べてみた感じのことを書こうと思います。

本題

  1. なにはともあれ、拡張を作らないと始まらないので作りましょう。
  2. 作ったらパッケージ化します。
  3. パッケージ化したのをインストールしてappIDを確認しておきます。(パッケージ化前とはID変わります、バージョンアップのために鍵はなくさないようにしましょう)
  4. 拡張インストール用XMLを作成します。
  5. グループポリシを利用してレジストリに書きます。

以上で次回Google Chrome起動時に自動で拡張がインストールされ、使えるようになります。(アンインストールや無効化できません)

拡張インストール用XMLの作成

Autoupdating - Google Chrome

拡張インストール用XMLというよりは、拡張の自動アップデート用XMLなんですが、

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

調べておいたappIDを入力します、 codebase には、拡張の場所を記載します。 “c:\temp\xxx.crx” みたいなローカルパスも書けます。バージョンは実際の拡張(crxのmanifest)に書いてあるバージョンにしましょう。

レジストリへの記載

Policy List - The Chromium Projects

パスは HKLM\Software\Policies\Google\Chrome\extensioninstallforcelist です。 プロパティ名 1 とか 2 とかで REG_SZ なものに “appid;pat/to/xml” のような形で記載します。 ここでの path/to/xml についても c:\temp\xxx.xml みたいなローカルパスが指定できます。

デバイス用の Chrome ポリシーを設定する - Chrome for business and education ヘルプ こちらを参考にポリシーテンプレートをインストールしてActiveDirectoryなどを利用してレジストリ設定値をpush配信するほうが楽ですし、書き換えられてもログイン時に設定を強制できるので良いかと思います。

運用的な

XMLと拡張を何らかの管理ツールで各PCにpush配信するなり、Webサーバを用意して置くなりしましょう。

バージョンアップしたいときはXMLファイルを書き換えて再度 pushするなりWebサーバに配置するなりすれば、勝手にバージョンアップしてくれます。

終わりに

Firefox のWeb Extension APIはpromise対応していたりするのに Chrome のWeb Extension APIはpromise非対応な感じだったりしてつらいです。

この方法、個人のPCでも当然行えるので、オレオレ拡張を自分が使うだけなら有効だったりします。

ルータのDHCPサーバ性能

先日、ちょっとYAMAHAのルータを利用していて、DHCPサーバが死ぬということが起きました。

一斉にクライアントから再接続しに行ったところ、接続できなくなり、 確認してみたらDHCPでした、という感じです。

dhcpperfというDHCPの性能を測るツールを公開してくださっているので、 これを機会に調べてみたところです。

YAMAHAのルータ自体は、クリティカルなわけでもない箇所でDHCP/NAT箱として利用しているだけでしたので、 置き換えを検討しながら、いっそ仮想ルータに置き換えてしまっても問題ないのでは? ということで SEIL/x86VyOSDHCP性能も調べてみたところです。

仮想マシンは、AMD A10-7800 Windows10上のVMwareWorkstation上ですので、 もっと性能のいいサーバマシン上ではもう少し出るかもしれません。

結果だけ書いてしまうと

機器 性能 request/sec
RTX 3500 7, 8
SEIL/x86 96
VyOS 113

というところでした。 YAMAHAルータの圧倒的な性能のなさが見せつけられました。 CPU bound な処理だろうから、クロックの低いルータのCPUではつらいという感じでしょうか

計測には dhcpperf -v を用い、何も特殊なことはしていません。

DHCP pool は 172.16.0.0/16 を基準としています ただし、 SEIL/x86は pool の最大が 1021でしたので、 1021で計測しています。 計測中の状況を見るとに、SEIL/x86は clientのreleaseに応じてちゃんと解放しているようでしたので、 ちゃんと計測できているのではないかと思います。 VyOSの場合、clientのreleaseが来ても、どうも1日くらい(?)解放しないようで、poolサイズを小さくすると、 poolが尽きて応答が高速になるという現象に遭遇しました。

とりあえず3種比べてみましたが、手元に転がっているCisco Routerでも調べてみる予定です。

それはそうと、120秒間、100リクエストが来続けるとか、どんな環境でしょうね。 12000台のクライアントが2分の間に接続してくるような環境……

Cisco 機器と IPsec その3

crypto isakmp profile にて match identity address 0.0.0.0を入れてしまうと、 該当外のIPSecもこの設定を利用してしまうため不都合があるので、 aggressive-mode を利用するほうが無難という。

Site2-A, Site2-B 共通

外へ出ていくIFが GigabitEthernet1/0 であるとしている。

crypto keyring <keyring-name>
  pre-shared-key address 0.0.0.0 0.0.0.0 key <shared-pass>

crypto isakmp profile <profile-name>
   keyring <keyring-name>
   match identity user-fqdn <User@FQDN.local>
   virtual-template <template number>

interface Virtual-Template <template number> type tunnel
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile default

router ospf 1

Site2-A, Site2-B 共通

外へ出ていくIFが GigabitEthernet1/0 であるとしている。

crypto isakmp peer address <Site2-A Global IPAddress>
 set aggressive-mode password <shared-pass>
 set aggressive-mode client-endpoint user-fqdn <User@FQDN.local>

crypto isakmp peer address <Site2-B Global IPAddress>
 set aggressive-mode password <shared-pass>
 set aggressive-mode client-endpoint user-fqdn <User@FQDN.local>

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel mode ipsec ipv4
 tunnel destination <Site2-A Global IPAddress>
 tunnel protection ipsec profile default

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel destination <Site2-B Global IPAddress>
 tunnel protection ipsec profile default

router ospf 1