Proxy設定メモ

毎回ググるのでメモ.

apt

環境変数の利用

export ftp_proxy="ftp://proxy.example.com:8080/"
export http_proxy="http://proxy.example.com:8080/"

/etc/apt/apt.confの利用

最後のセミコロンを忘れて,しばらく動かせなかった...orz

Acquire::ftp::proxy "ftp://proxy.example.com:8080/";
Acquire::http::proxy "http://proxy.example.com:8080/";
Acquire::https::proxy "https://proxy.example.com:8080/";

pip

easy_install

export HTTP_PROXY="http://proxy.example.com:8080/"

pip

pip install [package] --proxy=http://proxy.example.com:8080

git

設定

git config --global http.proxy http://proxy.example.com:8080/
git config --global https.proxy https://proxy.example.com:8080

確認

$ git config --list
user.email=example@xxx.co.jp
user.name=hibitomo
http.proxy=http://proxy.example.com:8080/
https.proxy=https://proxy.example.com:8080/
$ less ~/.gitconfig
[user]
        email = example@xxx.co.jp
        name = hibitomo
[http]
        proxy = http://proxy.example.com:8080/
[https]
        proxy = https://proxy.example.com:8080/

ruby gem

gem install [package] -p http://proxy.example.com:8080/

ruby bundle

環境変数に従う

export http_proxy=http://proxy.example.com:8080/
bundle install

Reference

Rasberry Pi 2 Model Bのセットアップ

OSセットアップ

よく分からないのでとりあえず,下記のページ通りにセットアップ

無線LANのセットアップは下記のページを参照

$ sudo sh -c 'wpa_passfhrase Your_SSID Your_Passphrase >> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="Your_SSID"
        psk=hogehogehogehogehogehogehogehogehoge
        key_mgmt=WPA-PSK #←追加
        proto=WPA2 #←追加
        pairwise=CCMP #←追加
        group=CCMP #←追加
        priority=2 #←追加
}

ネットワークの設定はよしなに.

Ruby2.2のインストール

Ruby2.2のインストールは下記のbashを利用する.

$ wget https://gist.githubusercontent.com/blacktm/8302741/raw/a5140c3b0eb95bf46a44f5f1a30a50416061c4fb/install_ruby_rpi.sh
$ bash install_ruby_rpi.sh

Reference

Caskの導入 & flycheckのインストール

Caskの導入

emacsのパッケージ管理にCaskを導入する.便利らしい.

install

簡単いんすとーる

$ curl -fsSkL https://raw.github.com/cask/cask/master/go | python
$ export PATH=$PATH:~/.cask/bin

Macはhomebrewで入れられるらしい.

$ brew install cask

Caskファイルの編集

どっかにCaskという名前でファイルを作成し編集する.~/.emacs.d以下がオススメとのこと. とりあえず,flycheckを入れたいので,flycheckを書いておく.

(source gnu)
(source melpa)

(depends-on "flycheck")

詳しい書き方は公式を見よう.

Caskの実行

以下のとおり.~/.emacs.d/.caskというディレクトリに必要なパッケージが入れられていく.

$ cd ~/.emacs.d
$ cask

パッケージのアップデート

$ cd ~/.emacs.d
$ cask update

init.elの編集

以下を追加.

(require 'cask "~/.cask/cask.el")
(cask-initialize)

Flaycheck

設定

(add-hook 'after-init-hook #'global-flycheck-mode)

reference

Install Open vSwitch with DPDK

Open vSwitchのDPDK版をインストールしてみる。

準備

DPDKはv1.8.0を使う. 最近のmasterはDPDK-v2.0.0しか対応していないので、v1.8.0をサポートしているコミットでcheckoutする。

dpdk

$ wget http://dpdk.org/browse/dpdk/snapshot/dpdk-1.8.0.zip
$ unzip dpdk-1.8.0.zip

ovs

$ git clone http://github.com/openvswitch/ovs
$ git checkout 66cabc46ecc09eeae536277a0fc7d5e44836f845

setup

DPDK

  • hugepageは1Gにしないとだめらしい。(デフォルトは2M)
    • /etc/default/grub に設定する.

grubの更新

$ diff /etc/default/grub ./grub.orig
11c11
< GRUB_CMDLINE_LINUX_DEFAULT="default_hugepagesz=1G hugepagesz=1G hugepages=8"
---
> GRUB_CMDLINE_LINUX_DEFAULT=""

grubのアップデート

$ sudo update-grub
$ sudo reboot

dpdk-の設定 - 通常利用するパッケージに追加でlibfuse-devが必要.

$ sudo apt-get install libfuse-dev
$ diff --git a/config/common_linuxapp b/config/common_linuxapp
index 2f9643b..cf211b8 100644
--- a/config/common_linuxapp
+++ b/config/common_linuxapp
@@ -81,7 +81,7 @@ CONFIG_RTE_BUILD_SHARED_LIB=n
 #
 # Combine to one single library
 #
-CONFIG_RTE_BUILD_COMBINE_LIBS=n
+CONFIG_RTE_BUILD_COMBINE_LIBS=y
 CONFIG_RTE_LIBNAME="intel_dpdk"

 #
@@ -372,7 +372,7 @@ CONFIG_RTE_KNI_VHOST_DEBUG_TX=n
 # fuse-devel is needed to run vhost.
 # fuse-devel enables user space char driver development
 #
-CONFIG_RTE_LIBRTE_VHOST=n
+CONFIG_RTE_LIBRTE_VHOST=y
 CONFIG_RTE_LIBRTE_VHOST_DEBUG=n

 #

dpdkのインストール

$ export RTE_SDK=<Absolute Path of Intel DPDK>
$ export RTE_TARGET="x86_64-native-linuxapp-gcc"
$ cd $RTE_SDK
$ make config T=${RTE_TARGET}
$ make install T=${RTE_TARGET}

Setup Open vSwitch

./configure && make && make install。makeにCFLAGS='-O3 -march=native'のオプションをつけると速いらしい。

./configure --with-dpdk=/home/vsw/hibi/dpdk-1.7.1/x86_64-native-linuxapp-gcc/
make   # make CFLAGS='-O3 -march=native'
sudo make install

以下、とりあえずREADMEをコピペ実行

sudo mkdir -p /usr/local/etc/openvswitch
sudo mkdir -p /usr/local/var/run/openvswitch
sudo rm /usr/local/etc/openvswitch/conf.db
sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db         /usr/local/share/openvswitch/vswitch.ovsschema

実行

ovsdbの実行。よくわからないのでREADMEをコピペ実行。

sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock     --remote=db:Open_vSwitch,Open_vSwitch,manager_options     --private-key=db:Open_vSwitch,SSL,private_key     --cer\
tnificate=Open_vSwitch,SSL,certificate     --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach

SSL周りのオプションを外したver

sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

スイッチの設定。ovs-vswitchdの--dpdk以後がdpdkのコア割当とメモリチャネル数っていうのが推察できる。その後ろのポートのアサインは不明。dpdk0、dpdk1で順番にアサインされたっぽいので、そういう仕様かと。

sudo ovs-vsctl --no-wait init
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
sudo ovs-vswitchd --dpdk -c 0xfff -n 4 -- unix:$DB_SOCK --pidfile --detach
sudo ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
sudo ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
sudo ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk
sudo ovs-ofctl show br0
sudo ovs-ofctl dump-flows br0
sudo ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000001
sudo ovs-vsctl set-controller br0 tcp:127.0.0.1:6633
sudo ovs-vsctl set bridge br0 protocols=OpenFlow13
sudo ovs-ofctl dump-flows br0 --protocol=OpenFlow13

PMD(Poll mode driver)のコア割当を増やすこともできるっぽい. Lookup等の処理自体を並列化する方法は不明.other_config:pmd-cpu-maskの値がPMDに使うコアの割当っぽそう.

sudo ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=ffff

プロセス名(コマンド名)からプロセスIDを取得し,殺す

よく忘れるのでメモ. vimを殺す.

  • プロセス名からpid(複数)を取得する.
$ pidof vim # pid群の取得
2192 2191
$ sudo kill -9 `pidof vim` # pidofで取れるものをすべて殺す

ps, grep, awk で頑張ると,,,,(一つ目のgrepは危ない)

$ ps aux | grep 'vim' | grep -v 'grep' | awk '{pids=$2 " " pids}END{print pids}'
  • プロセス名から該当するプロセスをすべて殺す.上の操作が一つになったイメージ
$ killall -9 vim

余談だが,私はEmacs派.

コードの行数を数える.

コードの行数を数えたい.ただそれだけ.

Cのファイルを数える.

find . -name "*.[ch]" | xargs wc -l

CとPythonのファイルを数える.

findの-oオプションを使う

find . -name "*.[ch]" -o -name "*.py" | xargs wc -l

"test"で始まるファイルは数えたくない.

grep -vで取り除く

find . -name "*.[ch]" -o -name "*.py" | grep -v "*/test*" | xargs wc -l

wc -l じゃなくて grep -c '' の方がいいらしいっすよ.

参考

Lagopus で ofctl

Lagopusでovs-ofctlみたいなことしたいってことで,Ryuのofctl-rest.pyを利用したofctl_scriptというbashスクリプトを書いた (hibitomo/ofctl_script · GitHub)
※ 他のOpenFlow1.3 Switchでも動きます。

ofctl_scriptを使うことで以下の事ができる

  • flow, group, meterの表示、表示項目の変更 (show_flow)
  • flow, group, meterのルール追加/削除 (add_flow/del_flow)
  • show_flowの結果をファイルにダンプし,そのダンプファイルを利用したflow, group, meterの追加/削除

ofctl_scriptは,OpenFlowコントローラのRyuのofctl_rest.pyを利用する. ofctl_rest.pyはREST APIでovs-ofctlのような事ができる便利なアプリケーションである.すごく便利なんだけど、curlコマンドとかURL覚えるのがめんどくさい。その点、ofctl_scriptはflowのadd, delete, showだけに特化しているので簡単。デバッグ用途にどうぞ。

$ ./show_flow

$ ./add_flow '{"table_id":0,"priority":110,"actions":["OUTPUT:1"],"match":{"dl_dst":"00:00:00:01:02:03/ff:ff:ff:ff:ff:ff","in_port":2}}'

$ ./del_flow '{"table_id":0,"priority":110,"actions":["OUTPUT:1"],"match":{"dl_dst":"00:00:00:01:02:03/ff:ff:ff:ff:ff:ff","in_port":2}}'

フローを表現するjsonはofctl_rest.pyのjsonと同じです。 詳しくはドキュメントを確認してください( ryu.app.ofctl_rest — Ryu 3.17 documentation

install

  • 必要パッケージインストール.Ryuはすでにインストール済とする。LagopusはUbuntu推奨だし、環境はUbuntuです。
sudo apt-get install jq
$ git clone git://github.com/hibitomo/ofctl_script
$ git clone git://github.com/osrg/ryu.git

setup

Ryu を動かす。とりあえず、ryuにあるofctl_rest.pyが動いていればOK。 あとは好きなOpenFlow1.3なスイッチとつなげてください.

$ cd ryu
$ ryu-manager [your Ryu application] ryu/app/ofctl_rest.py

使い方

設定確認

ofctl_scriptが接続に行くデフォルトのdpidとurlがofctl.confに記述されている。 接続したいRyu, Switchが一台ならばここにその設定を書いておく。

$ cd ofctl_script
$ head ofctl.conf -n 2
dpid=1
url=127.0.0.1:8080

複数台あるときなど、コマンド個別にコントローラのURL、スイッチのdpidを指定したい場合、-u-dを使うことができる。

$ ./show_flow -d 1 -u 127.0.0.1:8080

接続したOpenFlowSwitchのdpid確認スクリプトも用意してある。check_dpidでRyuに接続しているスイッチのdpidが確認できる。確認後、dpidを設定してもよい。

$ cd ofctl_script
$ ./check_dpid
[1]

show_flow

show_flowでフローを確認できる。また表示したフローをファイルに保存することができる。このダンプファイルは、そのままファイルの追加・削除に使えるため、フローの再現やテストにも利用できる.

$ ./show_flow
$ ./show_flow > [dump file]

show_flowが表示する内容は、ofctl.confに設定されている。好きにコメントアウトをつけはずしするとよい。


add_flow

add_flowでフローを追加できる。

$ ./add_flow '{"table_id":0,"priority":110,"actions":["OUTPUT:1"],"match":{"dl_dst":"00:00:00:01:02:03/ff:ff:ff:ff:ff:ff","in_port":2}}'
$ ./add_flow -t group '{"type":"ALL","group_id":4,"buckets":[{"actions":["OUTPUT:1"]}]}'     # group_table
$ ./add_flow -t meter '{"meter_id":1,"flags":["KBPS"],"bands":[{"type":"DROP","rate":1000}]}'     # meter_table

show_flowでダンプしておいたフロー情報を元にフローを追加することができる。table_idを含んだフローをshow_flowで表示させ、ダンプしておいた方がよい。ダンプしたファイルを編集すれば、任意の複数フローをコマンド一発で追加できる。

$ ./add_flow < flow_dump

Tips: アプリケーションインテグレーションテスト

  • アプリケーション毎にフローのファイルを用意しておくとインテグレーションした場合のテストを行うことができる。
$ ./add_flow < flow_dump_appA
$ ./add_flow < flow_dump_appB
$ ### Your flow integration test ###

del_flow

del_flowでフローが消せる。

$ ./del_flow '{"table_id":0,"priority":110,"actions":["OUTPUT:1"],"match":{"dl_dst":"00:00:00:01:02:03/ff:ff:ff:ff:ff:ff","in_port":2}}'
$ ./del_flow -t group '{"type":"ALL","group_id":4,"buckets":[{"actions":["OUTPUT:1"]}]}'     # group_table
$ ./del_flow -t meter '{"meter_id":1,"flags":["KBPS"],"bands":[{"type":"DROP","rate":1000}]}'     # meter_table

show_flowでダンプしておいたフロー情報を元にフローを削除することができる。table_idを含んだフローをshow_flowで表示させ、ダンプしておいた方がよい。ダンプしたファイルを編集すれば、任意の複数フローをコマンド一発で削除できる。

$ ./del_flow < flow_dump

Tips: フロー全消し

$ ./show_flow | ./del_flow

Reference