Ubuntu一覧

Ubuntu18.04にデフォルトのWineを入れた時にダブルクリックでEXEを起動できるようにする

Wineをインストールした後に、何も考えずにGUIから.exeファイルをダブルクリックするとアーカイブマネージャーが起動すると思う。
これはNautilusでダブルクリックの既定アプリケーションにWineを選択すれば起動できるようになる。

しかし、Ubuntu18.04でWineHQとかでないデフォルトのリポジトリからWineを以下のようにインストールすると、デスクトップ環境向けの設定ファイル(wine.desktop)が入っていないため、そのままでは選択できない。

#インストール先が64bit版OSの場合
sudo apt install wine64

#インストール先が32bit版OSの場合
sudo apt install wine32

なので、手動でファイルを入れる。

#すべてのユーザで選択できるようにしたい時
sudo curl -o /usr/share/applications/wine.desktop https://raw.githubusercontent.com/wine-mirror/wine/5c2d6211f6590d3856dc9188593b3d3597c8b441/loader/wine.desktop
#現在のユーザのみで選択できるようにしたい時
curl -o ~/.local/share/applications/wine.desktop https://raw.githubusercontent.com/wine-mirror/wine/5c2d6211f6590d3856dc9188593b3d3597c8b441/loader/wine.desktop

GUIで.exeのファイルのプロパティを開く。

「開き方」タブから「Wine ~」アプリケーションを選択して「追加」ボタンをクリック。

これで.exeをダブルクリックすればwineで起動するはず。


Ubuntu16.04の輻輳制御はデフォルトとBBRでどのくらい速度が違うのか比較

前置き

デフォルト設定のサーバとBBR設定済みのサーバを用意して、クライアントからサーバへアクセスしてファイルをダウンロードした時のダウンロード速度の比較です。
実際に使いそうな環境でBBRに変えた場合に、pingの違うサーバでどの程度の効果があるのか確認したかったので試してみました。
とはいえ環境や回線の混み具合で結果が大幅に変わるガバガバな測定方法なので、決して当てにしてはいけない数値です。
あと測定方法は以下のPowerShellスクリプトを参考にしたのですが、これも信用できるかよく分かっていないです。
PowerShell: Measuring Download Speeds – Trevor Sullivan’s Tech Room

測定環境

サーバ

  • OS : Ubuntu 16.04.4
  • kernel : 4.13.0-36-generic
  • 場所 : 東京、シアトル、パリ (VultrのVPSをそれぞれの場所のデータセンターに構築)
  • HTTPサーバ : Apache2
  • sysctlの設定
    設定 デフォルト BBR
    net.core.default_qdisc pfifo_fast fq
    net.ipv4.tcp_congestion_control cubic bbr

クライアント

  • OS : Windows10
  • 場所 : 日本国内
  • 回線 : FLETS光

測定方法

  • 東京、シアトル、パリの3箇所に1GBのテストデータを置いたHTTPアクセス可能なサーバを構築。
  • サーバの輻輳制御アルゴリズムはデフォルト(cubic)とBBRの2つ。
  • クライアントからテストデータをダウンロードした際のダウンロードファイルのサイズを測定。

測定結果

東京に構築したサーバ

  • Ping平均 : 6ms
デフォルト(cubic) BBR
平均速度(3回試行) 19.12MB/sec 65.45MB/sec
平均完了時間(3回試行) 50秒 15秒

シアトルに構築したサーバ

  • Ping平均 : 99ms
デフォルト(cubic) BBR
平均速度(3回試行) 6.01MB/sec 22.62MB/sec
平均完了時間(3回試行) 2分38秒 42秒

パリに構築したサーバ

  • Ping平均 : 231ms
デフォルト(cubic) BBR
平均速度(3回試行) 2.93MB/sec 9.81MB/sec
平均完了時間(3回試行) 5分25秒 1分38秒

所感

実施前は速くなったとしても数%程度だと思っていたので、正直なところ測定ミスを疑って同じ手順で2回やってみています。
BBRの速度はグラフで見ると天井に張り付くような形で推移しており、特にpingの大きいパリの結果で顕著です。回線速度の上限までうまく使っているということなのかな?

どうにしろ、速度が欲しくてOSをチューニングする場合には、試すべき一手と言えそうです。


Ubuntu 16.04に新しいカーネルをインストールしてBBRを使用する

BBRとは

Linuxカーネルの4.9からGoogleが開発したBBRというアルゴリズムを通信に使えるらしい。
古いアルゴリズムと比べてTCPの転送速度が早くなるらしい。なら使わなきゃ損でしょ。
でもUbuntu 16.04のデフォルトのカーネルは古くて対応してないので、新しいものを入れてBBRの設定もする手順を残しておく。
Ubuntu 18.04ならカーネルが4.15らしいので設定するだけで使えそう。もしかするとデフォルトでオンになるかもしれないけど。

確認環境

  • OS : Ubuntu 16.04.3

新しいカーネルのインストール

カーネルパッケージの一覧を確認

apt-cache search linux-generic

以下のように表示される

~~~
linux-image-4.13.0-32-generic - Linux kernel image for version 4.13.0 on 64 bit x86 SMP
~~~

特にこだわりはないので例では確認時点の最新版(linux-image-4.13.0-32-generic)をインストール

sudo apt install linux-image-4.13.0-32-generic

BBRの有効化

「/etc/sysctl.d/10-custom-kernel-bbr.conf」ファイルを作成

sudo vi /etc/sysctl.d/10-custom-kernel-bbr.conf
#以下を記述して保存
---
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
---

カーネルの有効化も兼ねて再起動

sudo reboot

BBRの設定を確認

sysctl net.core.default_qdisc
sysctl net.ipv4.tcp_congestion_control

---
#こうなる
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
---

これで設定完了。

時間ができたら実測してみた値とかまとめたい。


Ubuntu 16.04でKVM仮想マシンからブリッジを通る通信のNetfilterをオフにする設定

全部Ubuntuマニュアルのsysctl.dディレクトリについてのページで書いてあることそのままだけど、sysctl.dの設定方法の一例として説明されているので気づくのに時間かかった。
試してはいませんが、マニュアルを見る限りubuntu 12.04以降で有効な設定みたい。

設定方法


以下2つの内容の設定ファイルを作成する。

/etc/udev/rules.d/99-bridge.rules

ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
RUN+="/lib/systemd/systemd-sysctl --prefix=/net/bridge"

/etc/sysctl.d/bridge.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

これでbr_netfilterモジュールが読み込まれたときにbridge.confの設定が適用されます。
設定を有効にするには再起動が必要になるので注意が必要です。

こちらでは紹介しませんが、マニュアルにはモジュールの強制読み込みと一緒に設定を適用する方法も書いてあります。

上記設定にたどり着いた理由とか


Netfilterをオフにしない場合どう見えるか

意識して制御していなければ、おそらく以下の図のようになります。

仮想ブリッジ上でtcpdumpを取ると、仮想マシン/端末の双方から送ったパケットが見えますが、その先には届きません。

/etc/sysctl.confまたは/etc/ufw/sysctl.confに設定を記述する方法

以下のファイルに設定を入れる方法も試しましたが、起動時に設定適用されなかった。

  • /etc/sysctl.conf
  • /etc/ufw/sysctl.conf

ついでに書くと、/etc/sysctl.d/以下にただ設定ファイルを作るだけというのもうまくいかなかった。

/etc/sysctl.confに設定を入れて起動時にsysctl -pする方法

inidやsystemctldで[sysctl -p]を実行するようにしても以下のエラーが出て適用できなかった。
このため、モジュールの読み込みタイミングより前に設定適用してしまっていると推測している。

Apr 23 00:12:29 server systemd-sysctl[397]: Couldn’t write ‘0’ to ‘net/bridge/bridge-nf-call-iptables’, ignoring: No such file or directory