linux一覧

CentOS WiFi アダプタを交換しつつ使いたい

今更ですが、CentOS の 6.9 を使用しています。
事情により使用する USB WiFi アダプタを交換しつつ接続をしたいという状況で、通常であれば wlan0, wlan1, … とアダプタ分のインターフェースが増えてしまいます。
ただ接続する USB WiFi アダプタは場面により1つなので、出来れば wlan0 のみで運用したいと思っています。

続きを読む


Docker で Samba

最近 Docker によるコンテナに興味がわいて触り始めました。
これまでは仮想マシン推しだったのですが、環境の再構成や配布といった点でコンテナの方が都合が良さそうな場面も多く感じたことが理由です。

Docker とは

Docker が提供してくれる利便性については各所で説明されています。ここでは、 Docker はコンテナと呼ばれるものに環境ごとを閉じ込めて、実行させるものと考えています。
また環境を閉じ込めて実行させるものという点のみをみると、仮想マシンが提供するものと同じなのですが、コンテナの方は以下のようなメリットもあります。

  • 動作が軽量
  • コンテナサイズが小

こういった点から開発環境をコンテナで構築して使用するといった用途に使われたりします。環境が閉じているのでこれを実環境にデプロイでき、開発と実環境の差異によるトラブルも最低限になったりします。

初めてのコンテナ起動

ここでは CentOS 1708 をインストールした環境で初めてのコンテナを起動するまでを説明します。

インストール手順

CentOS 1708 の時点であっても、 yum(dnf) でインストールできるものは古いため以下のようにして新しいものをインストールするようにしました。

コンテナ起動

コンテナを作成してコンテナ内の Bash シェルを起動してみます。
以下のコマンドを実行すると、コンテナで bash が起動してそのシェルに接続されます。

起動したシェルから抜けるには、「Ctrl+P, Ctrl+Q」 と入力します。シェルを Ctrl+D で抜けると、コンテナで起動したシェルが終了するため、コンテナもまた終了状態となります。

環境を作る

こうやって作ったコンテナのなかで、必要なものをインストールして環境を整えていきます。このときに、何をやったのかをメモをとりつつ作業をするのをオススメします。
というのもコンテナにどのようなことを行って環境を作ったのかを設定ファイルのようなものに記述することによって、
その設定ファイル+αのものを配布するだけで、受け取った人が同じ環境を構築することができるようになるからです。この設定ファイルは Dockerfile と呼ばれます。
作ったコンテナのイメージをそのままエクスポートして、それを渡すと言うこともできるので Dockerfile の作成は必ずしも必要ではありません。

続きを読む


Raspberry Pi でパケット遅延器

Raspberry Pi を使って、パケットの遅延器を作ってみました。
Linux なら2枚の NIC を使って簡単に作ることができます。これの Raspberry Pi 版となります。

USB-NIC を増設

Raspberry Pi 2/3 には1つの LAN ポートしかないため、2つめを追加する必要があります。
そこで今回 USB NIC を追加しました。手元にあったのが ESXi でも使うことが出来た LAN-GTJU3H3 だったのでこれを使用しました。
ちょうど Raspbian 2017-09 版でも装着したら、すぐに使えるという状態だったので手軽でした。


同様のチップを採用しているものも素直に動くのでは、と思います。

続きを読む


iptables で Symmetric NAT

ずいぶん久しぶりに Linux を使っての NAT Box を作成しました。
手持ちのブロードバンドルーターが Symmetric NAT のタイプではなかったので、検証のために Linux で Symmetric NAT を作成しました。

NATの種類

NATには、いくつか種類があって フルコーン、アドレス制限、アドレスポート制限、シンメトリック と4種類ほどに大別されます。
・・・というのが数年前のお話でした。実はこれでは現実問題対応出来ないとのことで、現在ではこの区別はレガシー扱いとなっています。

今は、NATのマッピング規則と、フィルタリング規則という2つの観点からルーターNATの特性を判定します。
手持ちのルーターでは、エンドポイント非依存マッピングで、アドレスポート依存フィルタリングというシロモノでした。
というわけで P2P のゲームやアプリにおいては割と都合の良い感じになっています。
しかしプログラムの作成立場としては、ある程度のケースが欲しいもので今回シンメトリックNAT を作ることにしました。

マッピング規則、フィルタリング規則、これらについては検索すると多くの情報が見つかり、わかりやすい記述を見つけることが出来ると思うので、ここでは説明を省略します。
続きを読む


Mesa3D のレンダラーの切り替え

Linux の OpenGL 実装で有名な Mesa3D ですが、レンダラーの切り替えができることがわかったのでメモしておきます。
ちなみに The Mesa 3D Graphics Library って現時点においては 17.0 となってました。しかしながら動作実験環境は Ubuntu 16.04 で apt でインストールできるものを使用しているため、これよりも古いです。

切り替え方法

以下の環境変数で指定が可能です。

  • LIBGL_ALWAYS_SOFTWARE
  • GALLIUM_DRIVER

この環境変数で LIBGL_ALWAYS_SOFTWARE=1 とするとソフトウェア(エミュレーション)でのレンダラーが選択されるようです。
そして GALLIUM_DRIVER=softpipe を指定することで llvmpipe との切り替えができるようです。


続きを読む


USB Wifi Linux ドライバを変えて再試験

ちょっと前の某雑誌で、当ブログでも紹介していた USB WiFi の紹介がありました。
ただ当ブログで紹介していたドライバとは違うものだったので、確認してみたいと思います。
ちなみに 以前の内容はこちらです。

ドライバの確認・インストール

まず使用環境は Ubuntu 16.04 ですが、正確には 16.04.1 においても使えるかどうか確認してみました。
ドライバは https://github.com/abperiasamy/rtl8812AU_8821AU_linuxにあるものです。

使用機材は、 WN-AC433UA (IO DATA) で試しました。
前回紹介したドライバは、 https://github.com/gnab/rtl8812au でした。
基本的にインストールはこれと同じように行っていけるのですが、 今回の rtl8812AU_8821AU_linux では、 DKMS 対応の Makefile も含まれているので、こちらを使って準備しました。

これでしばらくするとインストールが完了します。

動作チェック・感想

こちらのドライバのほうが以前紹介したものよりはよさそうな印象をうけました。
というのも、前回の記事の中にあった不正な文字列は今回は見当たらなかったですし、NetworkManagerあたりにもスムーズに認識させることができていた点からです。

気になる速度の方は、iso ファイルのコピーで確認してみたところ 約 16.5 MB/s でした。つまり 132 Mbps あたり。
リンク速度の方は、iwconfig で確認したところ以下のような感じでした。

5GHz 帯で、 433 Mbps でのリンクとなっていました。
433M で実効 133 M というともう少し速度が出てほしいところです・・・。


ちなみにルーターの方は ac 側で 1733 Mbps までの対応のものを使用しています。
ルーターとの距離も 2m 内くらいだったので、やっぱり速度のほうにはもう少し頑張ってほしいところです。

追加検証

そもそも速度計測方法がイマイチということに気付いたので別方法で計測しました。前回は CIFS でのファイルコピーで別の処理コストもかかっていました。
これを iperf を用いて純粋に転送速度だけを測ってみました。

結果は、UP/Down どちらも大きな変化はなく、 220Mbps ほどでした。理論値の半分くらいにまで到達したのでまずまずの結果かなと納得しました。ちなみに 11n のほうでは自分の環境では 80Mbps 程度のリンクとなり実効速度も 53Mbps ほどでした。

11ac の環境は偉大だと言うことがよくわかりました。


ラズパイ2で使えたUSB WiFi 2016

前回に続いて Raspberry Pi 2 で使えた USB WiFi 2016版です。
少なくとも手元で動作チェックをして動いたものだけをここに記載しています。

オススメできるのは手軽さから自動でドライバを認識するタイプですね。
自分でドライバを入手・ビルドするタイプはなかなかうまくいかないことが多かったです。

なおここで使用している Raspbian は 2016/09版を使用しています。

usb_wifi_adapters2016

続きを読む


Linux で使えた USB WiFi 2016

USB WiFi を Linux で使おうとすると予想通り大変です。
Windows でドライバなしで使える(標準ドライバ)とかがどれだけ恵まれているかを実感させられます。今回は個人的に試してみて Linux でも使えたものをまとめてみました。

usb_wifi_adapters2016

この記事を書いている段階では生産中止になっていない入手可能なものに厳選しています。

続きを読む


gcc 組込み関数(memcpyとか)のインライン展開抑制

アライメントに寛容な x86 の話ではなく、 ARM プロセッサのお話になります。OSが動いていてソフトウェア例外を処理できるような状況では非アライメントなデータであってもなんとか動くので表面化しませんが、そのアタリをケアしない状況ではプログラムが停止してしまう原因の1つです。

さて非アライメントなデータ列をコピーしたりクリアしたりする際に、memcpy, memset などを使用することがあります。
デバッグ時にはうまく動いていたのに、最適化を有効にしたリリースビルドでは, このあたりでうまく動作せずに例外を出してしまったりすることがあります。

仕方なくこれらの関数の自前版を用意してこちらを使うようにしてしまうのも1つの手です。しかし memcpy, memset などのまま対処することも可能なことがわかりましたのでここで紹介したいと思います。
ここまでに言い忘れてしまいましたが、 gcc を使用した開発環境でのお話です。

原因

そもそも最適化によって何が起こり、正常に動かなくなってしまうのか。この原因は gcc が自分の組み込み関数を使用し、最適化によってインライン展開されてしまうことによります。

インライン展開されてもアライメント寛容なコードであればまだ良かったりしますが、速度重視のために最適化されているのでそうはならないのが現実です。

対策

gcc のコンパイルオプションで実はこのインライン展開の抑制が可能です。
-fno-builtin-(functionname) というオプションになります。なので、 memset,memcpy らを抑制する場合には、 -fno-builtin-memset, -fno-builtin-memcpy といったようなオプションを指定することとなります。


Ubuntu 16.04 で Vulkan を使う

以前には Ubuntu 14.x で Vulkan を試してみました。今は Ubuntu も 16.04 LTS が出てちょっと経ちましたので、これでやってみたいと思います。結論としては、従来よりも安定して導入・使用開始できそうな気配を感じています。

ubuntu-vulkan_vulkanscene

続きを読む