コンテンツにスキップ

Research memo

未整理メモをどんどこ書く。

設計概論

  • Webサービス設計概論
  • ネットワーク設計概論
  • ストレージ設計概論
  • 仮想基盤設計概論
  • 監視設計概論
    • 監視は次の行動を決定するための情報を取得するもの

雑記(いつか整理されるかも)

PV headerが古い

...
Setting up grub-pc (2.04-1ubuntu26.11) ...
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
  WARNING: PV /dev/sda5 in VG kaede-vg is using an old PV header, modify the VG to update.
  WARNING: PV /dev/sda5 in VG kaede-vg is using an old PV header, modify the VG to update.
...
$ sudo vgck --updatemetadata kaede-vg
[sudo] password for yuki: 
  WARNING: PV /dev/sda5 in VG kaede-vg is using an old PV header, modify the VG to update.
  WARNING: updating PV header on /dev/sda5 for VG kaede-vg.

コンテナからしか行けないネットワークに繋ぐ

container

$ docker run --rm -p 60022:22 -it centos:7 bash
# yum install -y openssh-server
# echo 'password' | passwd --stdin root
# /usr/sbin/sshd

host

$ ssh -A -oProxyCommand='ssh -W %h:%p root@127.0.0.1 -p 20022' 192.168.122.74 sudo tcpdump -l -eni eth0

同じことを `/.ssh/config に書けば ssh 192.168.122.74 sudo tcpdump -l -eni eth0 で済む。

Host 192.168.122.74
    ProxyCommand ssh -W %h:%p root@127.0.0.1 -p 20022
    ForwardAgent yes

Note

tcpdumpを使う時は、ラインバッファに変えておくと出力が行単位になるのでローカルで動かすときと直感的に近い動きになる。

fabricのProxyJumpを使う事も出来る。Connectionオブジェクトをネスト出来るの強い。

>>> from fabric import Connection
>>> ct = Connection("127.0.0.1", port=60022, user='root', connect_kwargs={'password': "password"})
>>> ct.run("ps ax")
    PID TTY      STAT   TIME COMMAND
      1 pts/0    Ss+    0:00 bash
    234 ?        Ss     0:00 /usr/sbin/sshd
    249 ?        Ss     0:00 sshd: root@notty
    251 ?        Rs     0:00 ps ax
<Result cmd='ps ax' exited=0>
>>> sv = Connection("192.168.122.74", gateway=ct)
>>> sv.run("ip addr")
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 8a:fc:4e:0d:a5:f2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.74/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2400:406f:1d6e:fb00:88fc:4eff:fe0d:a5f2/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591921sec preferred_lft 604721sec
    inet6 2400:406f:1d6e:fb00::74/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::88fc:4eff:fe0d:a5f2/64 scope link 
       valid_lft forever preferred_lft forever
<Result cmd='ip addr' exited=0>

-it 無しでdocker execしたコンテナ内プロセスのkill

docker apiを介してコンテナ上で動作しているPIDを一意に特定する。

(terminal-1)$ docker inspect ct01 | jq -r '.[0].ExecIDs'
null
(terminal-1)$ docker exec ct01 iperf -s
(terminal-2)$ ps ax | grep [i]perf
 8465 pts/12   S+     0:00 sudo docker exec ct01 iperf -s
 8466 pts/12   Sl+    0:00 docker exec ct01 iperf -s
 8488 ?        Ssl    0:00 iperf -s
(terminal-2)$ sudo docker exec ct01 ps ax
  PID TTY      STAT   TIME COMMAND
    1 pts/0    Ss     0:00 /bin/bash /etc/rc.local
    9 pts/0    S+     0:00 /bin/bash
  310 ?        Ssl    0:00 iperf -s
  318 ?        Rs     0:00 ps ax
(terminal-2)$ sudo docker inspect ct01 | jq -r '.[0].ExecIDs'
[
  "21a9d86ab2637e55a6c184a8376eefc82be61ff3a433039b4daf079e4a669e2a"
]
(terminal-2)$ curl -s --unix-socket /var/run/docker.sock http://localhost/exec/21a9d86ab2637e55a6c184a8376eefc82be61ff3a433039b4daf079e4a669e2a/json | jq
{
  "ID": "21a9d86ab2637e55a6c184a8376eefc82be61ff3a433039b4daf079e4a669e2a",
  "Running": true,
  "ExitCode": null,
  "ProcessConfig": {
    "tty": false,
    "entrypoint": "iperf",
    "arguments": [
      "-s"
    ],
    "privileged": false
  },
  "OpenStdin": false,
  "OpenStderr": true,
  "OpenStdout": true,
  "CanRemove": false,
  "ContainerID": "9efd3065028566a8cfe2a01b83dc7b69f51102d13cd13cc786d95cc51ae45e32",
  "DetachKeys": "",
  "Pid": 8488
}
(terminal-2)$ grep pid /proc/8488/status
NSpid:  8488    310
(terminal-2)$ sudo docker exec ct01 kill 310
(terminal-2)$ ps ax | grep [i]perf
(terminal-2)$ sudo docker inspect ct01 | jq -r '.[0].ExecIDs'
null

複数コマンド実行時は ExecIDs が複数登録される。

$ sudo docker inspect ct01 | jq -r '.[0].ExecIDs'
[
  "c758a7cad9f4077fbe72940c693aadabf1d2d1644bae2ae772319a707dd1cd4f",
  "7ceee1f6504a93a1c523e1180caef6690768b1065238f9db8fcb050ce2071dae"
]

wishpy

  • Ubuntu 20.04
$ python3 -m venv --copies ~/.virtualenvs/wishpy/
$ ln -s ~/.virtualenvs/wishpy/bin/activate
(wishpy)$ . activate
(wishpy)$ pip install -U cython
(wishpy)$ sudo apt-get install libglib2.0-dev build-essential python3-dev wireshark libwireshark-dev libpcap-dev
(wishpy)$ pip install wishpy

最終更新日: 2021-06-06 09:29:57