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
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