2018年9月20日木曜日

Dockerfile の EXPOSE もしくは docker run --expose の意味

どこのサイトとは言わないが、docker の EXPOSE について誤った情報が蔓延しているような気がしてならない。

そのサイトは docker0 で繋がっているコンテナ同士の通信のために EXPOSE が必要と書いている。つまり EXPOSE しないと他のコンテナからそのポートにアクセスできないということを言っている。

しかし Dockerfile に EXPOSE なんて書かなくても(docker run で --expose を与えなくても)、あるポートを listen しているコンテナに対して他のコンテナから接続することは可能だ。

嘘だと思うなら以下のような Dockerfile から作ったイメージを --expose せずに docker run して、他のコンテナから「nc -vz <相手> 8080」でもしてみるといい。普通に connected になるはず。
FROM fedora:28
RUN dnf install -y nc
ENTRYPOINT ["/usr/bin/nc", "-kl", "8080"]

私の EXPOSE の理解は以下。間違ってたらコメント等で指摘ください。

EXPOSE で指定されたポートは docker run に -P (--publish-all) を付与した際の対象ポートとなる。つまりコンテナ内のポートを -P でホストの任意ポートにマッピングしたい場合にEXPOSE でポートを明示する必要がある。

2018年8月30日木曜日

curl で Proxy Protocol

NGINX で proxy_protocol を設定しちゃうと、curl なんかのクライアントから直接 NGINX のサーバにアクセスできなくなっちゃって辛い。
検証やテストなんかのときに応答を確認したいのに、上段のロードバランサ等を介さなくちゃならないのは非常に辛い。
そこで curl に Proxy Protocol オプションが無いかなと探してたらありました。7.60.0 からの実装だそうです。


--haproxy-protocol
(HTTP) Send a HAProxy PROXY protocol v1 header at the beginning of the connection. This is used by some load balancers and reverse proxies to indicate the client's true IP address and port.
This option is primarily useful when sending test requests to a service that expects this header.
Added in 7.60.0.

Fedora はまだ追いついてないや(7.59.0)。バックポートもされてない。


2018年8月25日土曜日

fcitx-mozc for Fedora 28

Fedora Copr で fcitx-mozc を build してみました(fedora-28-x86_64 のみ)。

https://copr.fedorainfracloud.org/coprs/ryohayakawa/fcitx-mozc/

よろしければどなたか使っていただけるとうれしかったり。不安な方は src.rpm 見てみて下さい。怪しいことはしてません。

まぁそのうち epel とか Fedora 29 の chroot もやろうかと。


2018年8月6日月曜日

最近の Fedora でマウスが速い

Fedora 27 にアップデートした頃からだったか、マウスの動きがぴゅんぴゅん速くなってしまい年寄りには結構厳しい状態に...仕方ない、xset m でチョチョイと、、、あれ?遅くならない????

と、その後忙しさにかまけて調べず我慢してそのまま使っていたが、最近会社 PC を X1 Carbon 6th にして Fedora 28 を入れていて良い機会なのでこれを直すことに。

最近の Fedora は Wayland がデフォルトのようだが、私は未だに自分の .xinitrc を設定して startx から起動するって流れで Xorg から抜けきれない老人である。しかし Xorg でも libinput というナウな入力デバイスのドライバが主流のようで、Fedora 28 でも /usr/share/X11/xorg.conf.d/40-libinput.conf にデフォルト設定として定義されている。

この libinput だが、アクセラレーションのモードとして adaptive と flat があり、adaptive の場合 xset m が効かないらしい。このモードは libinput コマンドの list-devices オプションで確認できる。adaptive がデフォルトとのこと。

$ sudo libinput list-devices
   :
Device:           TPPS/2 Elan TrackPoint
Kernel:           /dev/input/event15
Group:            10
   :
Accel profiles:   flat *adaptive
Rotation:         n/a

xset が効かないとなるとどうやって,,, ということでググって xinput でやるべしということがわかった。まず、マウスのデバイス名の確認。

$ xinput --list --short
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Synaptics TM3288-011                        id=12    [slave  pointer  (2)]
⎜   ↳ TPPS/2 Elan TrackPoint                      id=13    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]

X1 Carbon の赤ポチは「TPPS/2 Elan TrackPoint」という名前のようで、この設定情報を見てみる。

 $ xinput --list-props "TPPS/2 Elan TrackPoint"
Device 'TPPS/2 Elan TrackPoint':
    Device Enabled (146):    1
    :
libinput Accel Speed (301):    0.000000
    :
この「libinput Accel Speed」を -0.5 くらいに修正してみる。
$ xinput --set-prop "TPPS/2 Elan TrackPoint" "libinput Accel Speed" -0.5


おぉ、遅くなったぞ。良かった。これを .xinitrc に書いておこう。
















2018年8月2日木曜日

gnome-control-center を docker コンテナから(もしくは別のWMから)

docker コンテナから手元のホストの Xorg に gnome-control-center を表示したかったんだけど、単純に gnome-control-center を起動すると画面が空っぽで Devices ってのだけが表示されてる。

以下の環境変数で解決したのでメモ。

XDG_CURRENT_DESKTOP=GNOME gnome-control-center


2018年7月30日月曜日

docker container から X の画面を出すときの SELinux

ドメインソケット経由で docker コンテナからホストの X Server に画面を出すのは Web に結構情報があるのでそれは良いとして、SELinux Enforcing な環境だと Socket へのアクセスが Permission Denied になってちょっとだけハマったので自分のためのメモ。

docker run のときに以下オプションをつけるとうまく行った。
  --security-opt label=type:container_runtime_t