2015年1月25日日曜日

Docker Network Configuration

Dockerのネットワーク構成のメモ。

(1) Docker Host
dockerdを起動すると、docker用のローカルインタフェースdocker0ができる。適当なアドレス空間、この場合172.17.0.0/16が割り当てられる。
containerを起動すると各コンテナ毎に仮想ethインタフェースveth(この場合veth88b6e5a)ができる。
$ ifconfig -a
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2466 (2.4 KB) TX bytes:2572 (2.5 KB)
......
veth88b6e5a Link encap:Ethernet HWaddr 9e:fa:9d:17:c9:47
inet6 addr: fe80::9cfa:9dff:fe17:c947/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:24 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1866 (1.8 KB) TX bytes:2108 (2.1 KB)
$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 * 255.255.255.0 U 0 0 0 eth0
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0


(2) Docker Container
docker0のネットワーク(172.17.0.0/16)につながるインタフェースeth0がみえる。
root@1365d04a68c9:/# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: eth0: mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.4/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:4/64 scope link
valid_lft forever preferred_lft forever

root@1365d04a68c9:/# ip route
default via 172.17.42.1 dev eth0 

172.17.0.0/16 dev eth0  proto kernel  scope link  src 172.17.0.4

(3) Communication btw Containers
Container間で通信を行うためには

  • EXPOSEでポートを公開する。
  • --link container_name:aliase でIPアドレス、ポート情報を取得できるようにする

外部から通信を行うためには-p host_port:container_portを使って、ホスト側のポートをContainerにマップする





2014年6月22日日曜日

markdownでスライド作成

Mac上でのスライドを作る必要に迫られて、impress.jsいじってみたものの「生html,生css無理」
ということでmarkdownでちゃっちゃとできないか調べてみた結果、rubyで動くslideshowを採用!
これでimpress.jsの悪夢から解放される...

2014年2月23日日曜日

Logitec LAN-W150N/U2ABをBeagleboard Ubuntuで使う

LAN-W150N/U2ABはMediaTek (Ralink)のRT2870を使っている。これならubuntu13.10入れたBeagleBoardに挿すだけで使えると思ったけれども、挿してもwlan0が現れない。ということで、顛末をメモ。
(1) vendor ID, product IDを確認。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

(2) rt2800usbドライバに認識させるよう new_id に登録してみる。
# modprobe rt2800usb
# echo "0789 0168" > /sys/bus/usb/drivers/rt2800usb/new_id

(3) 動いた!ということでconfigファイルを作っておく。起動時にrt2800usbをロードするようにしておく。
$ cat /etc/modprobe.d/lan-w150nu2.conf
install rt2800usb /sbin/modprobe --ignore-install rt2800usb; /bin/echo "0789 0168" > /sys/bus/usb/drivers/rt2800usb/new_id
$ cat /etc/modules
rt2800usb


2009年9月26日土曜日

DVD ripping on Linux

Linux上でDVDをリッピングする方法のメモ。
(1) DVDを/mntにmountして
$ vobcopy -m -i/mnt
カレントディレクトリ以下にVIDEO_TS以下がコピーされる。
(2) VLCであればコピーしたディレクトリを直接再生可能。
(3) DVDにもう一度書き込むのであれば,ISOファイルを作成する。
$ mkisofs -dvd-video -o dvd_img.iso ./DVD_DIR
(4) PS3(or iPod, PSP)用に再エンコードをするのであれば,HandBrakeを使う。字幕はエンコード時に映像に埋め込まれるのでHandBrakeのオプション-Nで埋め込む字幕を選択しておく。
$ HandBrakeCLI -Z PS3 -L -N jpn -i ./DVD_DIR -o ./out.mp4

2009年7月1日水曜日

RFBServer on Cupcake

1.0のソースコードには含まれていたSurfaceFlingerのVNC Server機能をAndroid 1.5へマージしてみた。

RFBServer on cupcake

(1) 1.0 のソースコードから frameworks/base/libs/surfaceflinger/RFBServer.{cpp,h} をコピーする。
(2) 外部から接続できるようRFBServerをすべてのインタフェースにbindするために下記のように変更。
*** RFBServer.cpp       2009-07-12 11:56:19.000000000 +0900
--- RFBServer.cpp.orig 2009-07-12 11:55:46.000000000 +0900
***************
*** 112,119 ****
do {
retry:
if (serverfd < 0) {
! // serverfd = socket_loopback_server(port, SOCK_STREAM);
! serverfd = socket_inaddr_any_server(port, SOCK_STREAM);
if (serverfd < 0) {
if ((errno == EADDRINUSE) && (port < (VNC_PORT+10))) {
LOGW("port %d already in use, trying %d", port, port+1);
--- 112,118 ----
do {
retry:
if (serverfd < 0) {
! serverfd = socket_loopback_server(port, SOCK_STREAM);
if (serverfd < 0) {
if ((errno == EADDRINUSE) && (port < (VNC_PORT+10))) {
LOGW("port %d already in use, trying %d", port, port+1);


(3) 1.0のSurfaceFlinger.cppを参考にVNC処理部分を追加していく。
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/Surfac
eFlinger.cpp
index c2adf07..030a8e9 100644
--- a/libs/surfaceflinger/SurfaceFlinger.cpp
+++ b/libs/surfaceflinger/SurfaceFlinger.cpp
@@ -55,6 +55,7 @@
#include "LayerBitmap.h"
#include "LayerOrientationAnim.h"
#include "OrientationAnimation.h"
+#include "RFBServer.h"
#include "SurfaceFlinger.h"
#include "VRamHeap.h"

@@ -64,6 +65,11 @@

#define DISPLAY_COUNT 1

+// the VNC server even on local ports presents a significant
+// thread as it can allow an application to control and "see" other
+// applications, de-facto bypassing security permissions.
+#define ENABLE_VNC_SERVER 1
+
namespace android {

// ---------------------------------------------------------------------------
@@ -455,6 +461,9 @@ status_t SurfaceFlinger::readyToRun()
if (mDebugNoBootAnimation == false)
mBootAnimation = new BootAnimation(this);

+ if (ENABLE_VNC_SERVER)
+ mRFBServer = new RFBServer(w, h, f);
+
return NO_ERROR;
}

@@ -572,6 +581,18 @@ void SurfaceFlinger::postFramebuffer()
debugShowFPS();
}

+ if (UNLIKELY(ENABLE_VNC_SERVER &&
+ mRFBServer!=0 && mRFBServer->isConnected())) {
+ if (!mSecureFrameBuffer) {
+ GGLSurface fb;
+ // backbufer, is going to become the front buffer really soon
+ hw.getDisplaySurface(&fb);
+ if (LIKELY(fb.data != 0)) {
+ mRFBServer->frameBufferUpdated(fb, mInvalidRegion);
+ }
+ }
+ }
+
hw.flip(mInvalidRegion);

mInvalidRegion.clear();

diff --git a/libs/surfaceflinger/SurfaceFlinger.h b/libs/surfaceflinger/SurfaceF
linger.h
index e023182..d18c324 100644
--- a/libs/surfaceflinger/SurfaceFlinger.h
+++ b/libs/surfaceflinger/SurfaceFlinger.h
@@ -40,6 +40,7 @@
#include "CPUGauge.h"
#include "Layer.h"
#include "Tokenizer.h"
+#include "RFBServer.h"

struct copybit_device_t;
struct overlay_device_t;
@@ -348,6 +349,7 @@ private:
sp mGPU;
GLuint mWormholeTexName;
sp mBootAnimation;
+ sp mRFBServer;
nsecs_t mBootTime;

// Can only accessed from the main thread, these members