vimでXML整形

xmllintをインストール

sudo apt-get install libxml2-utils

.vimrcの設定

~/.vimrc

au FileType xml exe ":silent 1,$!xmllint --format --recover - 2>/dev/null"

gcc6でRMecabのインストールはエラー

大学のサーバのGCCが6.2だったのでメモ。

RMeCabのインストール

> install.packages("RMeCab", repos = "http://rmecab.jp/R")

エラーになる。

RMeCab.cpp:89:11: error: narrowing conversion of '229' from 'int' to 'char' inside { } [-Wnarrowing]
          0}; //形容詞

GCC6だとエラーになるので、GCC5台にしないと駄目です。

因みにソースコードはinstall.packageのときにオプションを付けると消されないでローカルファイルに残ります。

> install.packages("RMeCab", repos = "http://rmecab.jp/R",keep_outputs=T)

ubuntu16.04で画面のlock解除

Ubuntu16.04のGnomeデスクトップではデフォルトで画面のLockがOnになっています。
そのため、画面を操作しないとロックされてしまい、毎回パスワードを入力する必要があります。

この画面のlockをさせない方法は以下の通り

  • Application-SystemTools-Settingsを選択
  • Privacyを選択
  • ScreenLockを選択しAutomatic Screen LockをOff

CentOS5にbzip2-1.0.6をインストール

未だCentOS5を使っているといろいろと不都合が生じてきます。まず、最新のアプリケーションを使おうとすると、デフォルトで入っているライブラリ群が古く全くインストールできません。

今回はCentOS5.11にbzip2-1.0.6をインストールしてみます

ダウンロード

$ cd /usr/local/src
$ wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
$ tar xzvfp  bzip2-1.0.6.tar.gz
$ cd bzip2-1.0.6

コンパイル

シェアードライブラリも同時にコンパイルします
まずは本体

$ make
# make install

次にシェアードライブラリ

$ make -f Makefile-libbz2_so 
$ make
gcc -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o
/usr/bin/ld: blocksort.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
blocksort.o: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make: *** [all] エラー 1

ここでエラーが

解決方法

どうもfPICをつけてコンパイルしないとダメなようです
本体側も修正、Makefileを修正します

CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -fPIC  # -fPICを追加
CXXFLAGS=-fPIC   # 行追加

コンパイル

$ make clean
$ make
# make install

次にシェアードライブラリ。Makefile-libbz2_soを修正

CXXFLAGS=-fPIC # 行追加

コンパイル

$ make -f Makefile-libbz2_so 
# mv libbz2.so.1.0* /usr/local/lib

CentOS5.11へgcc-4.8.5をインストール

たまたま余っていたCentOS5.11のサーバにpython2.7.12をインストールし、pylabをインストールしようとするとエラー。

 error: ‘SOCK_CLOEXEC’ was not declared in this scope
    error: command 'gcc' failed with exit status 1

どうもOSが古いと色々問題があります。

そこでこちらを参考にGCCをインストールします

ダウンロード

以下のサイトからダウンロードします。とりあえず最新版をダウンロードしました。

コンパイル

# mkdir /usr/local/gcc-4.8.5
# export LD_LIBRARY_PATH=/usr/local/gcc-4.8.5/lib:$LD_LIBRARY_PATH
# bunzip2 gmp-6.1.1.tar.bz2 
# tar xvfp gmp-6.1.1.tar
# cd gmp-6.1.1
# ./configure --prefix=/usr/local/gcc-4.8.5
# make && make install
# xz mpfr-3.1.4.tar.xz 
# cd mpfr-3.1.4
# ./configure --prefix=/usr/local/gcc-4.8.5 --with-gpm=/usr/local/gcc-4.8.5
# make && make install
# tar zxvfp mpc-1.0.3.tar.gz 
# cd mpc-1.0.3
# ./configure --prefix=/usr/local/gcc-4.8.5 --with-gmp=/usr/local/gcc-4.8.5 --with-mpfr=/usr/local/gcc-4.8.5
# make && make install
# tar zxvfp gcc-4.8.5.tar.gz 
# cd gcc-4.8.5
# ./configure --prefix=/usr/local/gcc-4.8.5 --enable-checking=release --with-gpm=/usr/local/gcc-4.8.5 --with-mpfr=/usr/local/gcc-4.8.5 --with-mpc=/usr/local/gcc-4.8.5 --enable-languages=c,c++
# make && make install

環境設定

使う際には、環境変数に入れて使い分けます

$ export LD_LIBRARY_PATH=/usr/local/gcc/lib:/usr/local/gcc/lib64:$LD_LIBRARY_PATH
$ export PATH=/usr/local/gcc/bin:$PATH
$ alias gcc="gcc-4.8.5"
$ alias g++="g++-4.8.5"

tcpdumpでパケット通信サイズを求める

WebサーバとDB間の通信など、DBが他のサービスなどと共用だとそのDBへの通信量などが気になったりします。

WebサーバからDBへの通信パケットサイズをtcpdumpを使って測定してみます。

条件

  • DB Server: 192.168.10.100
  • DB Application: MySQL port 3306

測定

#	tcpdump -e -s0 host 192.168.10.100 > db.txt
# ^C	 # ctrl+Cで中断
# a=0
# for i in `cat db.txt |awk '{print $13}'|sed -e 's/://'`;do let a=$a+$i;done ; echo $a
102799

こんな感じでバイト数が求まります

raspberry piでWifiを固定IPで使う

ハードウエア

raspberry pi B+

wifiアダプタ WNG150U

OS

RASPBIAN JESSIE

設定

ハードウエアの確認

$ lsusb
Bus 001 Device 004: ID 04bb:094c I-O Data Device, Inc. 

ESSIDの確認

$ sudo iwlist wlan0 scan | grep ESSID
										ESSID:"ESSID"

wpa_supplicant.conf

$ sudo su 
#	chmod 660 root% chmod 660 /etc/wpa_suoplicant/wpa_supplicant.comf
# wpa_passphrase "SSID" "KEY" >> /etc/wpa_supplicant/wpa_supplicant.conf
# cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="SSID"
	#psk="KEY"
	psk=ハッシュ化されたキー
}

wpa_supplicant.confの編集

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="SSID"
	proto=WPA2
	key_mgmt=WPA-PSK
	pairwise=TKIP CCMP
	group=TKIP CCMP
	#psk="KEY"
	psk=ハッシュ化されたキー
	scan_ssid=1
}
/etc/dhcpcd.conf
>||

interface wlan0
static ip_address=192.168.11.21/24
static routers=192.168.11.254
static domain_name_servers=192.168.10.1

こんな感じでリブート

 $ ifconfig
eth0			Link encap:イーサネット	ハードウェアアドレス b8:27:eb:9c:30:07 
					inetアドレス:192.168.11.20 ブロードキャスト:192.168.11.255	マスク:255.255.255.0
					inet6アドレス: 240f:79:a8f8:1:b289:a029:fc2e:6ac/64 範囲:グローバル
					inet6アドレス: fe80::7474:4b62:ad78:2a00/64 範囲:リンク
					UP BROADCAST RUNNING MULTICAST	MTU:1500	メトリック:1
					RXパケット:2704 エラー:0 損失:594 オーバラン:0 フレーム:0
					TXパケット:607 エラー:0 損失:0 オーバラン:0 キャリア:0
			衝突(Collisions):0 TXキュー長:1000 
					RXバイト:161138 (157.3 KiB)	TXバイト:88612 (86.5 KiB)

lo				Link encap:ローカルループバック	
					inetアドレス:127.0.0.1 マスク:255.0.0.0
					inet6アドレス: ::1/128 範囲:ホスト
					UP LOOPBACK RUNNING	MTU:65536	メトリック:1
					RXパケット:140 エラー:0 損失:0 オーバラン:0 フレーム:0
					TXパケット:140 エラー:0 損失:0 オーバラン:0 キャリア:0
			衝突(Collisions):0 TXキュー長:0 
					RXバイト:11756 (11.4 KiB)	TXバイト:11756 (11.4 KiB)

wlan0		 Link encap:イーサネット	ハードウェアアドレス 34:76:c5:5d:7e:6c 
					inetアドレス:192.168.11.21 ブロードキャスト:192.168.11.255	マスク:255.255.255.0
					inet6アドレス: fe80::d437:7e2c:6380:2ccc/64 範囲:リンク
					inet6アドレス: 240f:79:a8f8:1:98a1:f100:4d2b:b96b/64 範囲:グローバル
					UP BROADCAST RUNNING MULTICAST	MTU:1500	メトリック:1
					RXパケット:3501 エラー:0 損失:632 オーバラン:0 フレーム:0
					TXパケット:119 エラー:0 損失:3 オーバラン:0 キャリア:0
			衝突(Collisions):0 TXキュー長:1000 
					RXバイト:582397 (568.7 KiB)	TXバイト:20034 (19.5 KiB)

認識されました

expectの書き方

よく忘れるので備忘録

#!/bin/bash
my_ssh(){
/usr/bin/expect << Eof
set timeout -1
spawn /usr/bin/ssh -o stricthostkeychecking=no root@hostname bash /path/to/script.sh
match_max 100000
expect -exact "root@hostname's password: "
send -- "password\r"
expect eof
Eof
}
my_ssh

docker buildのエラー

dockerで今までうまくいっていたBuildが突然落ちるようになったりすることがあります

$ docker build .
..
Err http://archive.ubuntu.com/ubuntu/ trusty-security/main libnss3-nssdb all 2:3.19.2.1-0ubuntu0.14.04.1
404	Not Found [IP: 91.189.88.149 80]
Err http://archive.ubuntu.com/ubuntu/ trusty-security/main libnss3 amd64 2:3.19.2.1-0ubuntu0.14.04.1
404	Not Found [IP: 91.189.88.149 80]
Fetched 108 MB in 3min 14s (555 kB/s)
Unable to correct missing packages.
[91mE: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/n/nss/libnss3-nssdb_3.19.2.1-0ubuntu0.14.04.1_all.deb	404	Not Found [IP: 91.189.88.149 80]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/n/nss/libnss3_3.19.2.1-0ubuntu0.14.04.1_amd64.deb	404	Not Found [IP: 91.189.88.149 80]

こういう時には一度キャッシュをクリーンすれば治ります

$ docker --no-cache build .

Raspberry Pi Type B+にUSBメモリ増設

RaspberryPIを買って早1月以上。そろそろディスク容量も乏しくなってきました。もともと余っていた32GのMicroSDを挿していたのですが、データが増えるにつれてちょっと残りが寂しくなってきたので、上海問屋の64GUSBメモリを購入しました。

RaspberryPIはUSB3.0対応ではないので、USB2.0の安いものをチョイス。送料込みで3400円くらい。安い。。

早速挿してみました。フォーマット自体はFAT32。プラグアンドプレイなので差し込むだけでOK。コマンドラインからマウントしてやります

pi@raspberrypi ~ $ sudo fdisk -l

Disk /dev/mmcblk0: 31.7 GB, 31657558016 bytes
4 heads, 16 sectors/track, 966112 cylinders, total 61831168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b5098

				Device Boot			Start				 End			Blocks	 Id	System
/dev/mmcblk0p1						8192			122879			 57344		c	W95 FAT32 (LBA)
/dev/mmcblk0p2					122880		61831167		30854144	 83	Linux

Disk /dev/sda: 64.5 GB, 64541949952 bytes
255 heads, 63 sectors/track, 7846 cylinders, total 126058496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

	 Device Boot			Start				 End			Blocks	 Id	System
/dev/sda1							64	 126058495		63029216		c	W95 FAT32 (LBA)

pi@raspberrypi ~ $ sudo mount /dev/sda1 /mnt
pi@raspberrypi ~ $ df
ファイルシス	 1K-ブロック		 使用	 使用可 使用% マウント位置
rootfs						30311756 13465040 15569968	 47% /
/dev/root				 30311756 13465040 15569968	 47% /
devtmpfs						219832				0	 219832		0% /dev
tmpfs								44800			240		44560		1% /run
tmpfs								 5120				0		 5120		0% /run/lock
tmpfs								89580				0		89580		0% /run/shm
/dev/mmcblk0p1			 57288		 9896		47392	 18% /boot
/dev/sda1				 63012832		 2752 63010080		1% /mnt

こんだけ。マウント簡単。しかしここで問題が発生。

どうやら一般ユーザでは書き込めない模様。権限も変更できず。まあ、FATなので権限もクソもないのでどうしょうもないのでしょう。ちなみにROOTユーザなら読み書きOKですがそれだと使いづらいので、EXT4にフォーマットし直してやります

pi@raspberrypi ~ $ sudo fdisk /dev/sda

Command (m for help): d
Selected partition 1

Command (m for help): p

Disk /dev/sda: 64.5 GB, 64541949952 bytes
199 heads, 32 sectors/track, 19795 cylinders, total 126058496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

	 Device Boot			Start				 End			Blocks	 Id	System

Command (m for help): n
Partition type:
	 p	 primary (0 primary, 0 extended, 4 free)
	 e	 extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-126058495, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-126058495, default 126058495): 
Using default value 126058495

Command (m for help): p

Disk /dev/sda: 64.5 GB, 64541949952 bytes
199 heads, 32 sectors/track, 19795 cylinders, total 126058496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

	 Device Boot			Start				 End			Blocks	 Id	System
/dev/sda1						2048	 126058495		63028224	 83	Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

mkfsでフォーマット

pi@raspberrypi ~ $ sudo mkfs.ext3 /dev/sda1 
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3940352 inodes, 15757056 blocks
787852 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
481 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

Allocating group tables: done														
Writing inode tables: done														
Creating journal (32768 blocks): 
done
Writing superblocks and filesystem accounting information:				
done

pi@raspberrypi ~ $ mkdir /media/usb0
pi@raspberrypi ~ $ sudo mount /dev/sda1 /media/usb0
pi@raspberrypi ~ $ df
ファイルシス	 1K-ブロック		 使用	 使用可 使用% マウント位置
rootfs						30311756 13498480 15536528	 47% /
/dev/root				 30311756 13498480 15536528	 47% /
devtmpfs						219832				0	 219832		0% /dev
tmpfs								44800			240		44560		1% /run
tmpfs								 5120				0		 5120		0% /run/lock
tmpfs								89580				0		89580		0% /run/shm
/dev/mmcblk0p1			 57288		 9896		47392	 18% /boot
/dev/sda1				 61907956		53196 58703352		1% /media/usb0

pi@raspberrypi /media/usb0 $ sudo chmod 777 .
pi@raspberrypi /media/usb0 $ mkdir data

ついでにマウント先も変更しました