2018年4月 1日 (日)

rpi-updateしたら、VPNクライアントが繋げなくなった(XL2TP/IPSEC)

rpi-updateしたところ、VPNクライアントから接続できなくなってしまいました。

メッセージは以下。
# tail -f /var/log/syslog
----
Apr 1 20:54:11 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:12 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:13 raspberrypi3 xl2tpd[3151]: control_finish: Peer requested tunnel 31445 twice, ignoring second one.
Apr 1 20:54:13 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:14 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:15 raspberrypi3 xl2tpd[3151]: control_finish: Peer requested tunnel 31445 twice, ignoring second one.
Apr 1 20:54:15 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:17 raspberrypi3 xl2tpd[3151]: control_finish: Peer requested tunnel 31445 twice, ignoring second one.
Apr 1 20:54:17 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
Apr 1 20:54:18 raspberrypi3 xl2tpd[3151]: udp_xmit failed to 192.168.0.12:35733 with err=-1:No such device
----

ググると、https://github.com/libreswan/libreswan/issues/140 で、カーネル4.14でxl2tpが同様のエラーで繋がらなくなる事象があるとのこと。

現在のカーネルバージョンは
# uname -a
----
Linux raspberrypi3 4.14.31-v7+ #1104 SMP Thu Mar 29 16:52:18 BST 2018 armv7l GNU/Linux
----
なので、該当しているかも知れません。

以前のカーネルに戻して様子を見ます。

https://github.com/Hexxeh/rpi-firmware/commits/master

4.9系の最終である「Kernel: Bump to 4.9.80」を選択して右側のボタンから「Copy the full SHA」。
以下を実行してカーネルを更新。

# sudo rpi-update 5c80565c5c0c7f820258c792a98b56f22db2dd03

再起動して確認すると、4.9.80に戻っています。
uname -a
----
Linux raspberrypi3 4.9.80-v7+ #1092 SMP Fri Feb 9 13:56:00 GMT 2018 armv7l GNU/Linux
----

VPNクライアントも問題なく繋がるようになりました。


rpi-updateで任意の古いカーネルに戻す

本日rpi-updateしたところ、VPNクライアントから繋がらなくなってしまったため、古いカーネル(4.9.x)に戻して対処しました。

https://github.com/Hexxeh/rpi-update によると、


To upgrade/downgrade to a specific firmware revision, specify its Git hash (from the https://github.com/Hexxeh/rpi-firmware repository) as follows:

# sudo rpi-update #gitハッシュ値

で好きなカーネルに入れ替えられるようです。

いまの(VPNが繋がらない)カーネル。
# uname -a
----
Linux raspberrypi 4.14.31-v7+ #1104 SMP Thu Mar 29 16:52:18 BST 2018 armv7l GNU/Linux
----

戻したいカーネルを探す。
https://github.com/Hexxeh/rpi-firmware/commits/master

Kernel: Bump to X.X.XX (今回は、Kernel: Bump to 4.9.80)を探し
右側のボタンから「Copy the full SHA」を選択する。

今回は「5c80565c5c0c7f820258c792a98b56f22db2dd03」なので

# sudo rpi-update 5c80565c5c0c7f820258c792a98b56f22db2dd03

再起動して確認。

uname -a
----
Linux raspberrypi 4.9.80-v7+ #1092 SMP Fri Feb 9 13:56:00 GMT 2018 armv7l GNU/Linux
----

VPNクライアントも無事に繋がるようになりました。

(4/24追記)
/bootに古い .firmware_revision があると、このコマンドでは戻せないようです。
あらかじめ.firmware_revision ファイルを改名しておきます。

cd /boot
sudo mv .firmware_revision .firmware_revision_old

この後、rpi-updateしてうまく行きました。

2017年1月15日 (日)

AliExpressで Raspberry Pi用の3.5inch LCDを買いました

AliExpressで RaspberryPi用の3.5inch LCDが$11.45ということで職場のかたと共同で購入してみました。
12/23に購入し1/6に受け取ったので、ちょうど2週間くらいです。

Img_20170115_151033

あらかじめLCD用ドライバが含まれたOSイメージを使う方法と
純正OSに、自分でドライバを追加する方法の、2種類があるようです

参考サイト
3.5inch RPi LCD (A)
Drive the LCD(Raspbian/Ubuntu mate)

今回は純正OS(Raspbian 2017-01-11版)に自分でドライバを追加する方法を試してみました。
Raspbianは既にインストールされているものとします。

ドライバをダウンロード
$ wget http://www.spotpear.com/download/diver24-5/LCD-show-161112.tar.gz

ファイルを展開
$ tar xzvf LCD-show-161112.tar.gz

この時点でLCDを装着しておきます。(この後いきなりリブートするので)

$ cd LCD-SHOW
$ sudo ./LCD35-show

再起動すると、使えるようになります。
タッチパネルも動きます。
Img_20170115_143351

キーボードが無いと不便なので、マッチボックスキーボードを入れておきます。
$ sudo apt-get update
$ sudo apt-get install matchbox-keyboard

アクセサリ -> keyboard で起動できます。

Img_20170115_142816

画面を回転させることも出来ます。(リブートが必要)
90度回転させるには、90を指定します。0、90、180、270が指定できるようです。

$ cd LCD-show/
$ sudo ./LCD35-show 90

Img_20170115_144505

以上

アプリによってはウィンドウが画面外へはみ出してしまいOKボタン等が押せないこともある(詰み...)、あまり実用的では無いですが、ちょっと面白かったです。

おまけ
LXDEのフォントを小さくするための設定が入っている場所;

$ vi ~/.config/pcmanfm/LXDE-pi/desktop-items-0.conf
----
desktop_font=Roboto Light 12
----

$ vi ~/.config/lxsession/LXDE-pi
----
sGtk/FontName=Roboto Light 12
----

$ vi ~/.config/lxpanel/LXDE-pi/panels/panel
----
fontsize=12
----

$ vi ~/.config/gtk-3.0/gtk.css
----
font: Roboto Light 12;
----

(1/17)追記
xrdpをインストールしましたが、リモートデスクトップ接続できないことが判明。
原因不明(調べてない)

2016年12月13日 (火)

秋月の温湿度・気圧センサモジュールAE-BME280で、温度・湿度・気圧を取得する(2/2)

Cactiで表示させてみることにしました。

(1)カスタマイズグラフの作り方
まずスクリプトを作る
cd /usr/local/share/cacti/scripts

sudo vi bme280_temp.pl
----
#!/usr/local/bin/perl
$val = `/usr/bin/python /home/pi/bme280_sample.py |grep temp |awk '{print $3}'`;
print $val;
----
:wq
実行権付与
sudo chmod +x bme280_temp.pl

(2)Data Input Method画面
----
name: bme280_temp
Input Type: Script/command
Input String: perl /usr/local/share/cacti/scripts/bme280_temp.pl
----

ただ、これではうまく行かない。
ログに延々エラーが出ていた。
tail /var/log/cacti/poller-error.log
----
Traceback (most recent call last):
File "/home/pi/bme280_sample.py", line 9, in
bus = SMBus(bus_number)
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 132, in __init__
self.open(bus)
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 142, in open
self.fd = os.open("/dev/i2c-{}".format(bus), os.O_RDWR)
OSError: [Errno 13] Permission denied: '/dev/i2c-1'
----

www-dataでは/dev/i2c-1を読む権限がないらしい

(3)無理矢理パスワードを付けて
sudo passwd www-data

(4)soduersに追加
sudo vi /etc/sudoers
----
www-data ALL=(ALL) NOPASSWD: ALL
----
:wq

うまく(?)出来たようだ
sudo -u www-data sh /usr/local/share/cacti/scripts/bme280_temp.sh
22.54

まあでも、www-dataにsudo権限を付けるのは、セキュリティ的にはどうですかね。

以上

秋月の温湿度・気圧センサモジュールAE-BME280で、温度・湿度・気圧を取得する(1/2)

お手伝いしている会社の勉強会のために、秋月の温湿度・気圧センサモジュールAE-BME280で、温度・湿度・大気圧を得る手順をまとめました。

最近、smbus2が必要になったようです。

Img01013

(1)モジュール接続
割愛

(2)I2C有効化
[Preferences]-[Raspberry Pi Configuration]
[Interfaces」->「I2C」「Enable」

再起動
[YES]

(3)i2cパッケージのインストール
sudo apt-get install i2c-tools
sudo apt-get python-smbus

検出
sudo i2cdetect -y 1

中身を取り出す
sudo i2cdump -y 1 0x76

(4)スイッチサイエンス社のライブラリをダウンロード
wget https://github.com/SWITCHSCIENCE/BME280/archive/master.zip

unzip master.zip

cp -p ./BME280-master/Python27/bme280_sample.py .
python ./bme280_sample.py
----
Traceback (most recent call last):
File "/home/pi/bme280_sample.py", line 3, in
from smbus2 import SMBus
ImportError: No module named smbus2
----
エラーになる。

cd /BME280-master/Python27
cat requirements.txt
----
smbus2>=0.1.3
----
smbus2が必要なようだ。

(5)smbus2のインストール
wget https://github.com/kplindegaard/smbus2/archive/master.zip
unzip master.zip.1
----
Archive: master.zip.1
a115a850ed7c8ecc7438fff0d5c40e230eaf6579
creating: smbus2-master/
inflating: smbus2-master/.travis.yml
inflating: smbus2-master/LICENSE
inflating: smbus2-master/README.md
inflating: smbus2-master/README.rst
inflating: smbus2-master/setup.py
creating: smbus2-master/smbus2/
inflating: smbus2-master/smbus2/__init__.py
inflating: smbus2-master/smbus2/smbus2.py
creating: smbus2-master/tests/
inflating: smbus2-master/tests/test_datatypes.py
inflating: smbus2-master/tests/test_smbus2.py
----

cd smbus2-master
sudo pip install smbus2
----
Downloading/unpacking smbus2
Downloading smbus2-0.1.4.tar.gz
Running setup.py (path:/tmp/pip-build-Eqrjt6/smbus2/setup.py) egg_info for package smbus2

Installing collected packages: smbus2
Running setup.py install for smbus2

Successfully installed smbus2
Cleaning up...
----

(6)動作確認
python ./bme280_sample.py
----
temp : 24.13 ℃
pressure : 1011.14 hPa
hum : 67.66 %
----

以上

2016年12月 6日 (火)

ipset作成メモ(日本のIPv4アドレス一覧)

ipsetで日本のIPv4アドレス一覧を作成したときのメモ

最新のCIDR一覧を取得
wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip -f cidr.txt.gz
grep -e "^JP" cidr.txt |awk '{print $2}' >IP_JAPAN
rm cidr.txt

IP_JAPANという名前で一覧を作成
sudo ipset create -exist IP_JAPAN hash:net
while read NET; do sudo ipset add IP_JAPAN $NET; done

※けっこう時間が掛かる

保存
sudo ipset save |sudo tee /etc/ipset.conf

再起動時にipsetをリストアさせる方法

iptablesで日本国外からのアクセスを禁止する設定をしているのですが
ファイアウォールルールが長くなっていろいろ面倒なので、ipsetを使ってみることにしました。
ipsetの内容は再起動時にクリアされてしまうため、うまい方法がないか、考えてみました。

ipsetはインストール&設定済み、の前提で。

■概要
(1)/etc/ipset.confファイルに ipset save する
(2)netfilter-persistent起動時に、ipset restore する。

■詳細
(1)/etc/ipset.confファイルに ipset save
# sudo ipset save |sudo tee /etc/ipset.conf

(2)netfilter-persistent起動時に、ipset restoreする。
# sudo vi /lib/systemd/system/netfilter-persistent.service
----
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no
Before=network.target
Requires=systemd-modules-load.service local-fs.target
After=systemd-modules-load.service local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/sudo /sbin/ipset restore -exist -f /etc/ipset.conf <---これを追加
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target
----
:wq

# sudo systemctl daemon-reload
# sudo systemctl restart netfilter-persistent

以上

2016年11月17日 (木)

Android 6 MarshmallowでL2TP/IPsec VPNが動作しない(openswan編)

HUAWEI P9 Liteを購入しました。
そうしたら、自宅のVPNに接続できなくなってしまいました。
わりと有名な問題のようです。

Android 6 MarshmallowでL2TP/IPsec VPNが動作しない問題を解決する(xl2tpd+openswan)

このかたはopenswanからlibreswanに乗り換えたようですが、パッケージの再セットアップが面倒なのでopenswanで出来ないか調べました。結果は、出来ました。
connセクションにsha2_truncbug=yes を追記すれば良いようです。
libreswanは sha2-truncbug だったので、ハイフンとアンダースコアの違いだけですね。

$ sudo vi /etc/ipsec.conf
----
coon L2TP
<中略>
ike=aes256-sha2_256
phase2alg=aes256-sha2_256
sha2_truncbug=yes
----
$ sudo service ipsec restart
これでOK。Windows7はsha1で、Androidはsha2で繋がります。

ログにこんなメッセージが出ます。
$ tail -f /var/log/auth.log
----
Nov 16 17:45:07 raspberrypi3 pluto[26345]: | authalg converted for sha2 truncation at 96bits instead of IETF's mandated 128bits
Nov 16 17:45:07 raspberrypi3 pluto[26345]: | authalg converted for sha2 truncation at 96bits instead of IETF's mandated 128bits
----

参考にした元記事はこちら。
Cisco 2811 & OpenSWAN SHA256 truncate bug
https://bugzilla.redhat.com/show_bug.cgi?id=1077641

2016年1月12日 (火)

RaspberryPi (4.1.15-v7+) でELECOM WDC-150SU2Mを使う

sudo rpi-update をやったらカーネルが4.1.13-v7+ →4.1.15-v7+ に上がってしまい、ELECOM WDC-150SU2Mが使えなくなってしまった。

参考ページ
https://www.raspberrypi.org/forums/viewtopic.php?p=462982
を見て、カーネルにあったファイルをダウンロードする。

mkdir drivers
cd drivers
wget https://dl.dropboxusercontent.com/u/80256631/8188eu-v7-20151215.tar.gz
tar zxf ./8188eu-v7-20151215.tar.gz
sudo ./install.sh

再起動すれば WDC-150SU2Mが使えるようになる。

2015年12月27日 (日)

squid 3.5.12-20151128-r13959 失敗編

Raspberry Pi2でsquid 3.5.12-20151128-r13959 をビルドし、動かしたときに出た不具合です。

・rockを初期化しようとするとエラー …対応済み
・キャッシュディレクトリ作成がエラー …対応済み
・2GB以上のrockが作れない …対応済み
・cache.logにワーニングが記録される …放置
・たくさんログローテーションしてしまう …対応済み
・マルチインスタンス時、cachemgrの表示がおかしい …放置

rockを初期化しようとするとエラー


現象


キャッシュディレクトリ作成(squid -z)でエラー
$ sudo squid -z
----
2015/12/07 01:12:07| assertion failed: ../../src/ipc/AtomicWord.h:88: "Enabled()"
----

起動もエラー
----
$ sudo service squid start
[warn] Starting Squid HTTP Proxy: squid[....] Creating Squid HTTP Proxy cache structure ... (warning).
2015/12/07 01:14:17| assertion failed: ../../src/ipc/AtomicWord.h:88: "Enabled()"
Aborted
Aborted
failed!
----

原因と対策


C++11でコンパイルしていない。
configureのオプションにCXXFLAGS='-std=c++11'を追加する。

キャッシュディレクトリ作成がエラー


現象


$ sudo -u proxy squid -z
----
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid2| Creating missing swap directories
2015/12/08 20:35:05 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:05 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.020 user + 0.020 sys
Maximum Resident Size: 39408 KB
Page faults with physical i/o: 0
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid3| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid3| Creating missing swap directories
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid1| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid1| Creating missing swap directories
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:08 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:08 kid2| Creating missing swap directories
2015/12/08 20:35:08 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:08 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.030 user + 0.010 sys
Maximum Resident Size: 39568 KB
Page faults with physical i/o: 0

WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:14 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:14 kid2| Creating missing swap directories
2015/12/08 20:35:14 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:14 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.030 user + 0.010 sys
Maximum Resident Size: 39568 KB
Page faults with physical i/o: 0
----

原因と対応


/var/run/squidのオーナーがrootになっているのが問題らしい

$ ll /var/run
----
drwxr-xr-x 2 root root 40 12月 7 00:38 squid
----

オーナーをproxyに変更する
$ sudo chown proxy.proxy /var/run/squid

2GB以上のrockが作れない


現象


キャッシュディレクトリ作成時にエラー
$ sudo -u proxy squid -z
----
ERROR: Failed to initialize Rock Store db in /var/cache/squid/rock; truncate error: (22) Invalid argument
----

原因と対応


ビルド時に2GB以上のファイルサポートを有効にしていない。
configureオプションに以下を追加する。
----
--with-large-files
----

cache.logにワーニングが記録される


現象


$ sudo view /var/log/squid/cache.log
----
WARNING: disk-cache maximum object size is too large for mem-cache: 4096.00 KB > 512.00 KB
----

原因と対応


不明。特に問題に問題ないのでそのまま使う。

たくさんログローテーションしてしまう


現象


一度に何世代もローテーションしてしまい、ログがめちゃめちゃになる。
$ ll /var/log/squid
----
-rw-r----- 1 proxy proxy 0 12月 13 06:25 access.log
-rw-r----- 1 proxy proxy 0 12月 13 06:25 access.log.0
-rw-r----- 1 proxy proxy 4360875 12月 14 01:09 access.log.1
-rw-r----- 1 proxy proxy 29476 12月 10 22:55 access.log.2
-rw-r----- 1 proxy proxy 76167 12月 7 20:28 access.log.3
-rw-r----- 1 proxy proxy 4465767 12月 13 06:24 access.log.4
-rw-r----- 1 proxy proxy 536326 12月 7 06:23 access.log.5
---

原因と対応


squid3.5ではsquid -k rotate 時にプロセスの数だけローテーションするため。
cache.log、access.log、cache_swap_logにはプロセス番号を付けるなど別ファイルに分けておく。
必要の無いログは出さないのも有効か。

$ sudo vi /etc/squid/squid.conf
----
cache_swap_log /var/log/squid/cache_swap_${process_number}.log
access_log none
cache_log /var/log/squid/cache_${process_number}.log
----

マルチインスタンス時、cachemgrの表示がおかしい


現象


cache_memで指定したサイズが表示されない。
$ sudo squidclient cachemgr mgr:info
----
Storage Mem size: 2128 KB
Storage Mem capacity: 51.9% used, 48.1% free
----

原因と対応


原因不明。コーディネータの情報だけが表示されているのではないか。
※その後、マルチインスタンスは使用しないことにしましたので、詳細不明です。

ということで、今回でsquid3.5ネタは一旦終了します。

最近のトラックバック

2018年4月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
フォト
無料ブログはココログ