/varをLVMに移し替える

やりたいこと

  1. /varをLVMのパーティションにしてシャットダウンなしに拡縮(増加)可能にする
  2. /varを/dev/xvdbの単一デバイスで運用する
  3. AWS環境なのでシングルユーザーモードに移行しない力技


対象ディストリビュージョン

事前準備

  • インスタンスを作成する
  • AWSのボリュームを作成する。マグネティック(HDD)で好きなだけ。100GB未満ならSSDくらいでも値段問題ないかも。


以下、手順。
マウント確認

[root@ip-10-0-0-48 ~]# mount
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
/dev/xvda1 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=1921800k,nr_inodes=480450,mode=755)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /dev/shm type tmpfs (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

バイス一覧

[root@ip-10-0-0-48 ~]# ls -l /dev/xvd*
brw-rw---- 1 root disk 202, 0 Jul 16 13:19 /dev/xvda
brw-rw---- 1 root disk 202, 1 Jul 16 13:19 /dev/xvda1
brw-rw---- 1 root disk 202, 16 Jul 16 13:19 /dev/xvdb

コマンド

# LVMのツールをインストールする
yum install -y lvm2

# 論理ボリュームを切り出す
pvcreate /dev/xvdb
vgcreate vg1 /dev/xvdb
lvcreate -l 100%FREE -n lv_var vg1

# パーティションを作成する
mkfs -t ext4 /dev/vg1/lv_var

# コピー先を用意する
mv /var /var.bak
mkdir /var
mount /dev/vg1/lv_var /var
cd /var.bak; tar cvf - ./* | (cd /var;tar xvf - )

# /etc/fstabを変数する
blkid /dev/xvdb # UUIDに16進数以外の値が入っておかしかったので今回は使わない
vi /etc/fstab
/dev/vg1/lv_var /var ext4 defaults 2 1

# 再起動する
reboot

「android studio が予期しない理由で終了しました」を起動させる

久し振りにAndroid Studioを立ち上げようとしたら"android studio が予期しない理由で終了しました"というダイアログが出て立ち上がらなかった。
設定やJAVA_HOMEを見なおしたけど問題なし。
でも結果としてはきっと古いjavaが使われているのだろうなあと想像。1.6が使われているっぽい。

ログがどこに出ているのかわからないのでターミナルから起動してみる。

/Applications/Android\ Studio.app/Contents/MacOS/studio 
2015-03-13 23:53:31.089 studio[904:42467] Value of STUDIO_JDK: (null)
2015-03-13 23:53:31.113 studio[904:42467] fullFileName is: /Applications/Android Studio.app/Contents/bin/studio.vmoptions
2015-03-13 23:53:31.113 studio[904:42467] fullFileName exists: /Applications/Android Studio.app/Contents/bin/studio.vmoptions
2015-03-13 23:53:31.114 studio[904:42467] Value of STUDIO_VM_OPTIONS is (null)
2015-03-13 23:53:31.114 studio[904:42467] Processing VMOptions file at /Applications/Android Studio.app/Contents/bin/studio.vmoptions
2015-03-13 23:53:31.115 studio[904:42467] Done
2015-03-13 23:53:31.115 studio[904:42467] Processing VMOptions file at /Users/kappa/Library/Preferences/AndroidStudio/studio.vmoptions
2015-03-13 23:53:31.117 studio[904:42467] No content found
2015-03-13 23:53:31.117 studio[904:42467] Processing VMOptions file at 
2015-03-13 23:53:31.117 studio[904:42467] No content found
dyld: lazy symbol binding failed: Symbol not found: _CGContextSetAllowsAcceleration
  Referenced from: /Library/Java/JavaVirtualMachines/1.6.0_51-b11-457.jdk/Contents/Libraries/libawt.jnilib
  Expected in: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices

dyld: Symbol not found: _CGContextSetAllowsAcceleration
  Referenced from: /Library/Java/JavaVirtualMachines/1.6.0_51-b11-457.jdk/Contents/Libraries/libawt.jnilib
  Expected in: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices

Trace/BPT trap: 5

うむ。1.6が使われているのが確定。

mac java 削除」ググってこちらの記事を見つけました。
Apple版Java6をすっきりアンインストールする

まずは1.6を再確認する。

ls -al /Library/Java/JavaVirtualMachines/
total 0
drwxr-xr-x  6 root  wheel  204  3 13 23:49 ./
drwxrwxr-x  6 root  wheel  204  3 12 23:08 ../
drwxr-xr-x  3 root  wheel  102  3 11 01:17 1.6.0_51-b11-456.jdk/
drwxr-xr-x  3 root  wheel  102  3 11 01:02 1.6.0_51-b11-457.jdk/
drwxr-xr-x  3 root  wheel  102  3 11 00:56 jdk1.7.0_40.jdk/
drwxr-xr-x  3 root  wheel  102  3 12 23:08 jdk1.8.0_25.jdk/

確かに1.6がまだいる。
どうやらこれが使われているから起動に失敗する模様。
という訳でどけてみる。

mkdir -p ~/tmp/java
sudo mv /Library/Java/JavaVirtualMachines/1.6.0* ~/tmp/java/

そしてAndroid StudioをDockからクリックして起動。
うごいたー。

Rapberry Pi 2初見

クロックスピードとメモリーの向上以外はそのままだと思っていたけど結構変わっていたのでメモ。

以前買ったものはRaspberry Pi model B (512MB)
http://d.hatena.ne.jp/kappaseijin/20140201/1391244521

  1. 今回買ったもの

失敗

買いたいリスト

  1. 変わったところ
    • メモリ : 512MB -> 1GB
    • USB : 2ポート x 1 -> 2ポート x 2。出っ張りが引っ込んでイーサネットポートと面が揃った。
    • 電源ポート(micro USB) : 配置変更でHDMIと同じ向き
    • オーディオ端子 : RCAビデオと端子統合。配置変更でHDMIと同じ向き
    • RCA端子 : 同上
    • ストレージ : 標準SDカード -> microSD

DL

[archive]kappa$ time wget http://downloads.raspberrypi.org/raspbian_latest
2015-03-09 16:30:17 (515 KB/s) - 'raspbian_latest' saved [1021592274/1021592274]

real	32m20.456s
user	0m3.112s
sys	0m21.252s

名前を変更する

$ mv raspbian_latest 2015-02-16-raspbian-wheezy.img

SDカードがどれか確認する

$ df -h

macからアンマウントする

$ sudo diskutil unmount /dev/disk2s1

イメージを焼く

$ time sudo dd bs=1m if=2015-02-16-raspbian-wheezy.img of=/dev/rdisk2

3125+0 records in
3125+0 records out
3276800000 bytes transferred in 304.701388 secs (10754135 bytes/sec)

real	5m4.787s
user	0m0.025s
sys	0m3.044s

SDカードをアンマウントする

$ sudo diskutil unmount /dev/disk2s1

SDカードをraspiへ挿す
電源を繋いで起動する

raspiを送って探す

$ ping 10.0.1.255
$ arp -a

raspiへログインする

$ ssh pi@10.0.1.13

パーティションを広げる。1を選ぶ

$ sudo raspi-config

有線LANの設定をする

$ sudo cp /etc/network/interfaces /etc/network/interfaces.`date +%Y%m%dT%H%M%S`.bak
$ sudo vi /etc/network/interfaces
(以下へ変更)
auto lo

iface lo inet loopback

iface eth0 inet static
address 10.0.1.111
netmask 255.255.255.0
gateway 10.0.1.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

# 有線LANが固定になるか確認する
$ sudo reboot -r now
$ ssh pi@10.0.1.111

wifi設定

$ sudo ifconfig -a
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:10.0.1.111  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:70 errors:0 dropped:0 overruns:0 frame:0
          TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8004 (7.8 KiB)  TX bytes:8424 (8.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1104 (1.0 KiB)  TX bytes:1104 (1.0 KiB)

wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:8 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

認識されているか?

$ sudo dmesg  | less
(略)
[    3.529179] usb 1-1.3: new high-speed USB device number 4 using dwc_otg
[    3.640546] usb 1-1.3: New USB device found, idVendor=2019, idProduct=ab2a
[    3.649499] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.658901] usb 1-1.3: Product: GW-USNANO2
[    3.665027] usb 1-1.3: Manufacturer: Planex Communications Inc.
[    3.672928] usb 1-1.3: SerialNumber: xxxxxxxxxxxx
(略)

バイスの確認

$ sudo lsusb | grep -i PLANEX
Bus 001 Device 004: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]

何もしなくても認識されている。

SSIDパスフレーズを作成する

$ sudo wpa_passphrase SSID パスワード > ~/passphrase.tmp

SSIDとPSKを設定する

$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.`date +%Y%m%dT%H%M%S`
$ sudo cat ~/passphrase.tmp >> /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
trl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
  ssid="SSID"
  psk=生成された値
  key_mgmt=WPA-PSK
  proto=WPA2
  pairwise=CCMP
#  group=CCMP
  priority=2
}

ファイルの改行がおかしいとInvalid argumentって出るので改行をUnix改行へ変更する。
http://d.hatena.ne.jp/kudzu/20140426/1398523133

ネットワークの設定

$ sudo cp /etc/network/interfaces /etc/network/interfaces.`date +%Y%m%dT%H%M%S`
$ sudo vi /etc/network/interfaces
auto lo

iface lo inet loopback

iface eth0 inet static
address 10.0.1.111
netmask 255.255.255.0
gateway 10.0.1.1

allow-hotplug wlan0
iface wlan0 inet static
address 10.0.1.112
netmask 255.255.255.0
gateway 10.0.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp


無線LANを有効にする

$ sudo ifdown wlan0
$ sudo ifup   wlan0
$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:10.0.1.112  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1848 errors:0 dropped:29 overruns:0 frame:0
          TX packets:817 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:449339 (438.8 KiB)  TX bytes:109945 (107.3 KiB)

再起動しても設定されているか確認する。

$ sudo reboot


ひとまず環境構築完了。
raspi1より速いかどうかはまだなんとも言えず。

Raspberry Piをふらふら持ち歩くためにUPS代わりのモバイルバッテリーを探してみた

やりたいこと
UPS的に瞬断に対応したい。
・RasPiを短時間だけ持ち歩きたい。

解決方法
・モバイルバッテリーを電源にする。


本題。
Raspberry Pi 2を買ったのでまともな運用を考えて瞬断や持ち歩きに対応するためにモバイルバッテリーを買ったけど勘違いで使えなかった。
日立マクセル マクセル 〔maxell 〕 モバイルバッテリー 2500mAh MPC-C2500WH ホワイト

具体的には繋いで起動してRasPi動いて放ったらかしにしていたらRasPiの電源が落ちていた。
バッテリーは完全放電状態。
コンセントからバッテリーへ給電しているのがUSBハブだからその接点が甘かったのか、給電電流が低かったのか、またはUSBハブの他のポートの抜き差しで電流が減ったのかなと妄想。

給電を安定すべく2.1A出力の専用アダプターに繋いでみたらバッテリーのランプが弱々しい赤になったけどRasPiが起動せず。
バッテリーをよくよく見るとスマホへの充電ON/OFFの物理スイッチがONになっている。
OFFにしてみる。ランプがさっきより力強い赤になる。RasPiは起動せず。
ONにしてみる。ランプが緑になってRasPiが起動。

バッテリー自体の充電を給電、バッテリーから外へ充電することを充電と呼ぶことにする。
つまりこのバッテリーは給電中は充電できないし充電中は給電できない。
手元にあった他のモバイルバッテリーもそうだった。
ググってみるとほとんどのモバイルバッテリーもそうらしい。

給電しつつ充電、というのをパススルーとか追っかけ充電と呼ぶらしい。
というわけでその単語でググってみた中で購入できそうなものをリストアップしてみた。
SONYのヤツが信頼性高そうだけど値段的にはパナだろうか。
検討。

・一覧
http://www.amazon.co.jp/dp/B00ODHN2MY 多摩電子工業 2,600mAh TILA04LW ¥ 3,000
http://www.amazon.co.jp/dp/B00KJ7TSDE Panasonic 2500mAh QE-AL101-W ¥ 2,980
http://www.amazon.co.jp/dp/B00OVLO3GG Panasonic 1880mAh QE-AL102-W ¥ 2,984
http://www.amazon.co.jp/dp/B00H7OQ8JE SoftBank SELECTION smart energy box 6200 ¥ 2,600

・高すぎて除外
http://www.amazon.co.jp/dp/B009URMKPW SONY 7000mAh CP-F2LSAVP ¥ 4,960
http://www.amazon.co.jp/dp/B00BVYW5OS iBUFFALO Voltissimo 4000mAh BSMPB0140BK ¥ 5,300
http://www.amazon.co.jp/dp/B00BVYW926 iBUFFALO Voltissimo 8000mAh BSMPB0180WH ¥ 7,840
http://www.amazon.co.jp/dp/B00BVYW80Y iBUFFALO Voltissimo 8000mAh BSMPB0180BK ¥ 12,800

BoxenなPostgreSQLの設定メモ

MacでBoxenなPostgreSQLの設定メモ。

$ vi ~/.bash_profile
source /opt/boxen/env.sh

$ vi /opt/boxen/etc/env.d/70_postgresql.sh
export BOXEN_POSTGRESQL_HOST=127.0.0.1
export BOXEN_POSTGRESQL_PORT=15432
export BOXEN_POSTGRESQL_URL="postgres://$BOXEN_POSTGRESQL_HOST:$BOXEN_POSTGRESQL_PORT/"
export PGHOST=localhost
export PGPORT=5432
[ -z "$PGDATA" ] && export PGDATA=/opt/boxen/homebrew/var/postgres
[ -z "$PGPORT" ] && export PGPORT=$BOXEN_POSTGRESQL_PORT

実行

$ pg_ctl stop
$ pg_ctl start
$ psql postgres
postgres=# \l
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 postgres  | kappa  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 

ActiveRecordをCLIから使う

以下参照。
ActiveRecordを外部アプリケーション(rails以外)で使う

上記そのまま。

#!/usr/bin/env ruby

require '~/docs/www.example.com/app/config/boot'
require '~/docs/www.example.com/app/config/environment'

dbconfig = YAML.load_file('~/docs/www.example.com/app/config/database.yml')
ActiveRecord::Base.establish_connection(dbconfig['development'])

result = TestTable.find(:all, :conditions => {:test_id => 2})
result.each { |record|
    test_id   = record['test_id']
    another_id = record['another_id']
  puts "test_id:#{test_id},another_id:#{another_id}"
}

最初、ググったらactive_recordとyamlもrequireする例を見付けたのでそちらを試したらminitestの2.7.5以外がダブってるみたいなエラーが出て動かなかった。gem cleanupしてもbundle updateでも解決せず。
結局上記の記載で動いた。
こちらの環境はruby 2.0.0p451、rails 4.0.4。
3.x系とは違うのかもしれない。

rsyncでsshと署名ファイル(鍵)を使って同期する方法

サーバーで使うものはgitでほとんど管理しているけどDBのダンプが大きくなってきたのでそれだけはrsyncでローカルへバックアップしてみた。

rsync -avz -e "ssh -i /Users/kappa/secretpath/ssh_key_file.pem" root@example.com:/root/db/backupdb/* ~/db/backup/
  • eの後の""な記述がポイント。

転送プロトコルsshを使うことと鍵の場所を指定する。
鍵のパスはフルパスじゃないとうまくいかない。