カッティングボード

カルマをカットしてます

Ubuntu16.04でアクセスポイント

はじめに

Ubuntu16.04を用いてアクセスポイント化する方法はいくつか検索すれば出てくるのですが,再起動したりすると設定が消えるのでその辺も踏まえてメモ.

hostapdの設定

hostapdをインストールする hostapdとはユーザー空間で動作するアクセスポイントと認証サーバーである.

sudo apt install hostapd
sudo vim /etc/hostapd/hostapd.conf

hostapdの設定ファイルを作っていく. インターフェイス名とかはiwconfigとかでいい感じに確認する driverはよくわからんけどnl80211で大抵OKらしい.IEEEの規格とかの話なのかな?

#インタフェース名
#iwconfigとかでwifiのインターフェイス名を確認できます.
interface=wlp2s0

#無線LANアダプタのドライバ
driver=nl80211

#クライアントに表示される無線LANアクセス・ポイント(SSID)名 
ssid=SSID
hw_mode=g
channel=7
wpa=2 # WPA2

#認証パスワード 
wpa_passphrase=PASS
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

hostapd.confをhostapdサービス起動時の設定ファイルとして設定.

sudo vim /etc/default/hostapd

10行目のコメントアウトを外して下に書き換える

DAEMON_CONF="/etc/hostapd/hostapd.conf"

DHCPの設定

isc-dhcp-serverをインストールする

sudo apt install isc-dhcp-server

dhcpdの設定

sudo vim /etc/dhcp/dhcpd.conf

一番下に下記を追加

subnet 192.168.190.0 netmask 255.255.255.0 {
  range 192.168.190.50 192.168.190.100;
  option domain-name-servers 192.168.189.7, 8.8.8.8;
  option domain-name "internal.example.org";
  option routers 192.168.190.1;
  option broadcast-address 192.168.190.255;
  default-lease-time 600;
  max-lease-time 7200;
}

dhcpdのインターフェイスを設定する.

sudo vim /etc/default/isc-dhcp-server

21行目を下記に書き換える.

INTERFACES="wlp2s0";

IPフォワーディングの有効化

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo vim /etc/sysctl.conf

28行目のコメントアウトを外す.

wifiNIC設定

sudo vim /etc/network/interfaces

一番下に下記を追加

auto wlp2s0
iface wlp2s0 inet static
address 192.168.190.1
netmask 255.255.255.0

NetworkManagerの停止

NetworkManagerの停止と,自動起動の無効. これやらなくても大丈夫な気がする.

sudo stop network-manager
echo "manual" | sudo tee /etc/init/network-manager.override

iptablesの設定

sudo iptables -t nat -A POSTROUTING -s 192.168.190.0/255.255.255.0 -o enp3s0 -j MASQUERADE
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo vim /etc/network/interfaces

下記のようにpre-upの記述を追加

auto wlp2s0
iface wlp2s0 inet static
pre-up iptables-restore /etc/iptables.ipv4.nat
address 192.168.190.1
netmask 255.255.255.0

参考文献

LinuxPCをWiFiアクセスポイントにする hostapdとは

DockerからホストPCのネットワーク接続に対するメモ

最近ブログ書いてなかったですけど,このままズルズルずっと書かないと習慣が完全にきえうせるので徐々に書き始めたいと思います.

Dockerのファイルシステムのやつは書いてたメモが消え去ったので,気分が乗った時に書きなおします.

はじめに

DockerのコンテナからホストノードのLANに接続できるのかどうかに関して,研究室の人と意見が分かれたので実際に検証してみました.

結果

ホストPCのネットワークに対して普通に接続できます.

なんでできるんや,IPマスカレードでもしてるのか?と思ったらしてました.

↓のIPが172で始まるところの記述の部分がIPマスカレードの設定の部分です.

細かいIPレンジとかに関してはノードによって変わるかもしれないです.

$ sudo iptables --list -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16        anywhere

Chain DOCKER (2 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

まぁ考えてみると当たり前のことなんですよね.

dockerを立ち上げると,docker0とかいう仮想NICが立ち上がってそのNICをdockerコンテナでは利用してると思います.

なので,IPマスカレード設定がされてなければ外部のネットワークに一切接続できないですよね.

まぁIPマスカレード設定がされてて普通にホストノードから通信が出て行くんだから,ホストノードのLANに対してアクセスできますよね...

dockerのストレージドライバ(ファイルシステム)を調べる

はじめに

最近,↓のようにdockerのストレージドライバレベルに近い部分を触ったりしてるのに全く理解してないので何日かにわたって調べていきたいと思います.

cut-ter.hatenablog.com

cut-ter.hatenablog.com

ファイルシステムとかめっちゃ詳しいわけじゃないので,間違いとかあるかもしれないです.

dockerコンテナに利用されているファイルシステム

基本的にユニオンマウントという概念を用いたファイルシステムが使われているみたいです.

dockerを触ったことがある人はわかると思いますが,一つのdockerイメージは複数のdockerイメージを組み合わせられていることが多いです.

どのようにしてそれを行っているかというと,一つのマウントポイントに対して垂直に重ね合わせて行っているイメージのようです.

コンテナを実行する際には,イメージの時系列順にリードオンリーで重ね合わせます.その後ライトできる新たなイメージをその上に重ねます.基本的にコンテナ内で作業した内容はライトできる新たなイメージ部分に書き込まれるようです.

ファイルに関しては上の方に存在している情報が優先され,ディレクトリに関しては内容を組み合わせるようになっています.

ストレージデバイスの種類

今現在dockerでは7種類のストレージデバイスがあるみたいです.

  • overlay
  • overlay2
  • aufs
  • brtfs
  • device mapper
  • vfs
  • zfs

今回はここに調べることはしませんが,明日以降調べたりいきたいと思います.

デフォルトで利用されているストレージデバイス

特に意識してなかったのですが,↓の記事の調査してる時にストレージデバイスが判明してました. cut-ter.hatenablog.com

17.09.0-ceではoverlay2が利用されています.

今日のところはこんな感じにします.ストレージデバイスによってはnfsとかも許容できる可能性もあるのでしっかりと調べていきたいと思います.

dockerイメージのバックアップを2重に取る

はじめに

dockerイメージをレジストリとかにpushしてちゃんとバックアップ取ったりしたいですよね.

基本的に自前でレジストリ立てて管理したりとかしてると思います.

私もそうしているのですが,この間レジストリにpushしておいたらpullできなくなって死を迎えました.

そうならないようにレジストリにpushする以外のバックアップも取っておきましょう.

バックアップとるだけじゃなくてバックアップから復元できることを事前に確認しておけって話ですが....

バックアップと復元

↓のコマンドでイメージをtarにまとめることができます.

sudo docker save test >test.tar

↓のコマンドでtarからイメージを読み込むことができます.

sudo docker load < test.tar

バックアップは取ればいいってもんじゃなくて復元できないと意味ないんだよなぁ.

nvidia-dockerでgpuのリソースを制限する

はじめに

nvidia-dockerを何も考えずに複数動かしてしまうと,後から動き始めた方がメモリが足りないよーとかエラー吐いてしまってまともに動きません.

複数同時に並行して動かしたいときはgpuリソースを制限しながらやってあげないとダメみたいなので制限しましょう.

やり方

nvidia-docker

NV_GPU='0,1' nvidia-docker run -it nvidia/cuda nvidia-smi

nvidia-docker2

docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES='0,1' --rm nvidia/cuda nvidia-smi

↑みたいな感じにすると,コンテナからは指定されたデバイスidの物しか見えなくなるみたいです.

nvidia-docker2の変更点的なのは↓のサイトみたいな感じでまとめてくれてる人がいました.

aetros.com

雑談

今日作業してたら突如としてネットワークに繋がらなくなって焦りました.

原因としてはDHCPサーバーが死んでたのが原因だったのですが,LANケーブルかハブが調子悪いのかなぁとか調べてたら結構時間かかってしまいました.

固定ip取得してるやつだけ生き残ってるっぽかったので最終的にDHCPだとわかりましたが,1年前だったら絶対に気付けなかったので少しづつは成長できてるのかなー.

yoloが動くDockerイメージを作る

はじめに

yoloが動作する機械学習ノードをいい感じに作っていたのですが,コミットしていたイメージがでかくなりすぎてpullできなくなってしまいました.

どうも15GBあたりのイメージになるとメモリ関連とかでpullできなくなってしまうらしいです.

コミットしていたりして使えなくなるとひたすらに辛さを感じるので,ちゃんとDockerfile書きました.

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
RUN apt update -y  && apt upgrade -y
RUN apt -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip vim
RUN mkdir /root/Sources

WORKDIR /root/Sources

RUN git clone https://github.com/opencv/opencv.git
RUN git clone https://github.com/opencv/opencv_contrib.git
RUN mkdir opencv/build

RUN cd opencv/build && cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/root/Sources/opencv_contrib/modules -D WITH_CUDA=ON .. && make -j5 && make install
RUN ldconfig

ADD darknet /root/darknet
WORKDIR /root/darknet
RUN make -j5
RUN make install

説明

使用するイメージの検討に関しては↓の記事を読んで検討してください. cut-ter.hatenablog.com

基本的に最初はopencvをビルドして,その後にyoloのビルドをしています.

yoloのビルドは,Makefileで色々パラメータをいじる必要があるので外部からADDするようにしています.

Dockerfileと同階層に↓からyoloを持ってきて,Makefileをお好きなパラメーターに書き換えてください.

pjreddie.com

Opencvとcudaを使用するように設定して動作することは確認してあります.

Dockerでビルドした後に軽量化とかしてないのでひたすらにでかいのでよくないDockerイメージの例ですね.

Dockerのあるバージョンからビルド部分を切り離したりできるようになったらしいのでその辺調べてイメージをちゃんと軽量化したらdockerhubとかにあげたいですね.

今年もアドベントカレンダー完走した

はじめに

このブログは下のアドベントカレンダーの25日目の記事です. adventar.org

初日を書いたのがついこの間のような気がしますが,もう25日たったんやなー.

個人的に振り返ってみる

下が1日目の記事ですね. cut-ter.hatenablog.com

今見ても完全にゴミって感じですね.Twitterのリンク貼ればいいのにスクショ貼ってるし,なんか適当に赤く塗りつぶしてる画像がリンク貼った時に出てくるし.

リンクを見てリンクを踏もうかなって思えないやつですよね.

今月結構ブログをかいてて,ちゃんと書くかーってきめて書いた日はリンクの時に出てくる画像とかもこだわったりしてみたりしてました.

下のゆかりさんのやつとかは結構画像にこだわったりしてました.

でもなんかリンク踏もうとするとお探しのブログは見つかりませんとか出るのでもしかしたらなんかよくない内容を書いてたのかもしれない.

cut-ter.hatenablog.com

まぁ1日目に比べると途中は,はてなブログの扱いにも慣れてきて徐々にましな感じになっていったかなと思います.

全体的に振り返る

現状のアドベントカレンダーの画像を貼るとこんな感じですね. f:id:cut-ter:20171225174640p:plain

25日に関してはこのブログなのであれですが,見事にきれいに埋まってるなー.

まぁ去年に引き続きって感じですが,一人で複数回書いてくれてる人が結構いてその人たちに支えられて完走できたかなって感じですね.

そういえばどこにも書いてなかったですが,この記事を時間内に上げることさえできれば見事完走って感じですね.

誰か遅刻してたような気がしなくもないけどまぁ細かいことは気にしない.

なんだかんだ言って25日しっかりと完走できてるアドベントカレンダーって多くはないのでこれはまぁまぁ誇れることかなって思いますね.

団体とかでアドベントカレンダーやってればまぁ完走できるけど,ごく限られた身内だけで回してて完走できたのは普通に嬉しいですね.

去年に比べると「誰か頼む書いてくれ」って感じなのはなく,いつの間にか全体的に埋まってるって感じでした.

みんな社会人になってしまうので来年以降は,こんな感じでアドベントカレンダーできないかもしれないのでとりあえず今年完走できてよかったなって感じです.

できればまた来年もやりたいな〜って感じですね.

まぁダラダラと書きましたが,アドベントカレンダーに参加してくれた人,読んでくれた人たちありがとうございました.

f:id:cut-ter:20171225175320p:plain