RaspberryPi で tagged VLAN を扱う

Raspbian jessie で 802.1Q のタグVLANを扱うインタフェースの設定方法について。

vlan パッケージをインストールする。 lsmod | grep 8021q して 8021q が既にいればこの手順は基本不要。

$ sudo apt-get install vlan
$ sudo modprobe 8021q
$ sudo su
# echo 8021q >> /etc/modules
# exit

eth1 にタグ付き VLAN100 を流し込み、 Raspberry Pi 上で VLAN100 を扱うインタフェースを作る場合、

$ sudo vi /etc/network/interfaces

auto eth1
iface eth1 inet manual
    pre-up ifconfig $IFACE up
    post-down ifconfig $IFACE down

auto eth1.100
iface eth1.100 inet manual
    vlan-raw-device eth1
    pre-up ifconfig $IFACE up
    post-down ifconfig $IFACE down

VLAN インタフェースの eth1.100 へのアドレスの割当てなどは dhcpcd.conf でその他普通のインタフェースと同じように書けばOK。
eth1 が DHCP でアドレス取得すると面倒なので noipv4, noipv6 で阻止する。
(denyinterfaces eth1 でいいかもしれない)

sudo vi /etc/dhcpcd.conf

interface eth1
noipv4
noipv6

interface eth1.100
static ip_address=192.168.100.2/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1

再起動するかサービス再起動で設定反映。

$ sudo service networking restart

参考 :

IPアドレスを持たないインタフェースの作り方 Raspbian jessie

Raspberry Pi with Raspbian jessie を使って PacketiX のブリッジ用とか Sniffing 用とかの IP アドレスの無いインタフェースの作り方。

追記: 参考2 を見ていると、 /etc/dhcpcd.conf に denyinterfaces eth1 を書くだけで済むかもしれない(未検証)

/etc/dhcpcd.conf でのインタフェースごとのアドレス設定に noipv4 noipv6 を付ける。
eth1 を IP アドレス無しインタフェースとする場合は、 dhcpcd.conf を次のようにする。

$ sudo vi /etc/dhcpcd.conf

interface eth1
noipv4
noipv6

/etc/interfaces のほうはこんな感じ。

$ sudo vi /etc/network/interfaces

auto eth1
iface eth1 inet manual
    pre-up ifconfig $IFACE up
    post-down ifconfig $IFACE down

Raspbian jessie で確認したけど、Ubuntu とかの Debian 系も同じかもしれない。


参考 :

参考2 : bridge 作ったときに物理インタフェースにも dhcp でアドレス振られてふぁっきん!→ denyinterfaces を使おう。という話類。

YAMAHA RTXシリーズ DHCP オプションを複数指定するには

リファレンス15.1.8 DHCP オプションの設定によると、 dhcp scope option の構文は、

dhcp scope option scope_num option=value

の通りで、構文的には option=value が 1 コだけに見えるが、実際にはスペース区切りで option=value を複数指定可能。

DHCP で配る DNS と NTP を指定したい場合は以下の通り。

# dhcp scope option 1 dns=192.168.0.1 ntp_server=192.168.0.1

NTP と DNS の設定を入れようとして、

# dhcp scope option 1 dns=192.168.0.1
# dhcp scope option 1 ntp_server=192.168.0.1

とかやっていたら、最後の分しか反映されないので謎に思っていろいろ試した次第。

シェル上から Raspberry Pi 2 と Raspberry Pi 3 を見分ける方法

Raspbian のシェル上から Raspberry Pi 2 と Raspberry Pi 3 を見分ける方法。

テンポラリな実験のつもりで Raspberry Pi 2 と 3 が混在した環境を DHCP ベースで作ってしまった後で、「いまログインしてるのって 2 だっけ? 3 だっけ?」となった時用。

試した Raspbian の環境は以下の通り。

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux

$ cat /proc/device-tree/model を使う

Raspberry Pi 2 上で実行した場合。

pi@raspberrypi:~ $ cat /proc/device-tree/model
Raspberry Pi 2 Model B Rev 1.1pi@raspberrypi:~ $

Raspberry Pi 3 上で実行した場合。

pi@raspberrypi:~ $ cat /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2pi@raspberrypi:~ $

$ iwconfig を使う

Raspberry Pi 3 が WiFi 搭載していのを使った手。
Raspberry Pi 3 で WiFi を無効にしていたり、USB WiFi NIC を着けていたりした場合は
使えないかもしれない。

Raspberry Pi 2 上で実行した場合。wlan がない。

pi@raspberrypi:~ $ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

Raspberry Pi 3 上で実行した場合。wlan0 がある。

pi@raspberrypi:~ $ iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

lo        no wireless extensions.

eth0      no wireless extensions.


参考:pi 2 - Is there a Bash command to check if the Raspberry Pi is 2 or 3? - Raspberry Pi Stack Exchange

メールサイズで転送処理を変更するprocmailレシピ

転送先の許容サイズに制限がある場合用。

30KB より小さい場合だけ転送する。

:0 c
* < 30000
!(転送先アドレス)

30KB より大きい場合は転送するのはメールヘッダだけにする(小さい場合は全文転送)。

:0 hc
* > 30000
!(転送先アドレス)

:0 c
* < 30001
!(転送先アドレス)

ping: sendmsg: Operation not permitted

Ubuntuufw で外向き通信を

$ ufw default deny outgoing

とデフォルト禁止に固めてる場合に ping すると Operation not permitted が出て ping 通らない問題。

$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

/etc/ufw/before.rules に以下のように外向き icmp を許可するルールを追加する。

# allow outbound icmp
-A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT

また、もし before.rules に以下ルールがない場合は以下も追加する(16.04.3 LTSでは設定済みだった)

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

内向き icmp 許可ルール。

参考 : networking - ping and traceroute does not work when UFW deny outgoing by default - Server Fault

x264 の 64bit バイナリを Windows 上でビルドする 2017

先トピでの x264 の 64bit 版を作る場合はこちら。
先トピを書いた後に試してみたら 64bit 版もほぼ同手順でできたので。

基本は先トピと同じなので、違う点のみの記載です。

msys2 の準備

展開した先の mingw64.exe を実行する。

ビルドに必要なパッケージのインストール時に 32bit版(i686) gccではなく、64bit版(x86_64)のgcc を指定する。

$ pacman -S git make tar automake autoconf libtool pkg-config mingw-w64-x86_64-gcc

nasm のビルド&インストールと GPAC のビルド

nasm, GPAC それぞれで configure 時の prefix 指定を mingw32 → mingw64 に変更。

$ ./configure --prefix=/mingw64

もし、先に 32bit 版をコンパイルしていた場合は、

$ make clean

で掃除してから make し直すこと。

x264 のビルド

configure 時の host オプションを i686-w64-mingw32 → x86_64-w64-mingw32 に変更。
--extra-ldflags="-static -static-libgcc" オプションを追加。
(--extra-ldflags オプションを付けないと cmd.exe 上での実行時に標準出力にメッセージ類が出なくなる)

$ ./configure --extra-cflags="-pipe -march=native" --extra-ldflags="-static -static-libgcc" --enable-strip --host=x86_64-w64-mingw32
platform:      X86_64 ここが X86_64 になっているか確認
byte order:    little-endian
system:        WINDOWS
cli:           yes
libx264:       internal
shared:        no
static:        no
asm:           yes
interlaced:    yes
avs:           avisynth
lavf:          no
ffms:          no
mp4:           gpac
gpl:           yes
thread:        win32
opencl:        yes
filters:       crop select_every
lto:           no
debug:         no
gprof:         no
strip:         yes
PIC:           no
bit depth:     8
chroma format: all

You can run 'make' or 'make fprofiled' now.

これで make すると 64bit の x264.exe が作成されます。

本当に 64bit バイナリかどうかを調べる場合は以下参照で。
Windows 実行ファイルが32ビットか64ビットか確認する方法 - Qiita

参考

  • Cygwinmingwでfdk-aacとx265が使える64bit版ffmpegをビルドする - つーさのくーかん http://tu3.jp/01061
    • コンパイルオプション --extra-ldflags="-static -static-libgcc" に気付くきっかけ
    • なんでこのオプション付けないと cmd.exe 上で標準出力が出ないのか謎(msys上では出る)