2014年2月19日水曜日

ブログ移転

VPSを殆ど使わずに置いておくのももったいないのでWordPressを入れて移転することにしました。 こちら

2014年1月13日月曜日

FreeBSD10.0 RC5を試してみる

あけましておめでとうございます、ブログの更新を暫くしてなかったので年が明けてしまいました。あーあ。
去年(2013年)の年末から楽しみにしていたFreeBSD10.0のリリースがまた伸びました。一回目のスケジュール調整で12月末とか、二回目の調整で1月7日で、ついには予定には無かったRC4とRC5が出来るという状態…どうもOpenJDKの関連らしいですが (FreeBSD 10.0-RC4登場 - 最後の準備リリース)
リリース版を待つのも飽きたのでRC5を仮想マシンに突っ込んでみることにしました。
公式サイトの頒布ページから好きなのを落としてきます、普段通りにISOをマウントしたりして仮想マシンにOSをインストールする準備を整えましょう。
で、インストールダイアログを進めていきます。
めんどくさいのでここではInstallを選んだのですが…

なんということでしょう

ZFS-rootが簡単に実現可能になってます!選択肢にあるという進化(FreeBSD9.2には無かったはず…)
今回はZFS-rootにはしませんでしたが、試しに一回選択した所RAID0,1,Z1,Z2,Z3から種類を選び、どのドライブをプールに入れるかを選択するだけで出来そうです。
インストール作業自体は他に変わってそうな場所はありませんでした。
パッケージ管理システムがpkgコマンドに集約されたのでかなり使いやすくなっていると思います。searchとかも速いですし、apt-getでぬるま湯に使ってきた僕にとっては楽でした。portmasterにあった機能を全ては把握できていないのでどういう追加機能があるのかは把握できてないですが…

次回はFreeBSD10.0にGUI環境を構築してLXDEでQoLを上げる記事を書こうと思います。

2013年3月14日木曜日

jedi-vim in virtualenv(Mac OS X 10.8)

小さいPythonのコードを書くのに一々Eclipseを使うのもなんかなあと思うところがあったので(エクスプローラーバーでディレクトリ開いたり面倒くさい)vimにjedi-vimを入れてPythonの補完を使ってみることにしました。環境はOS X 10.8 vim:ver.7.3です。
こちらを参考に、普通に入れていきます。 ただ、プラグインの管理が面倒なので、折角の機会ということで今までずっとノーマルの状態で使ってきていたvimの環境をちょっと構築することにしました。

NeoBundleを使います。 書いてあるとおりにすれば特に問題なくNeoBundleの設定も済むと思います。一応、シェルでのコマンド類と、.vimrcの関係ある部分を貼っておきます。(NeoBundleの最後の二行が増えただけです )

terminalで

git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
git clone https://github.com/Shougo/vimproc ~/.vim/bundle/vimproc


で、~/.vimrcの中身

" NeoBundle系
set nocompatible " be iMproved
filetype off
if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle'))
endif
" Original Repository on Github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'
" jedi-vim系
NeoBundle 'jmcantrell/vim-virtualenv'
NeoBundle 'davidhalter/jedi-vim'
filetype plugin indent on


参考にしているページに書かれていますが、virtualenv-vimがちゃんとインタプリタ(というか、仮想環境全体)をsys.pathに追加してくれてるのでjedi-vimをいじらなくても勝手にうまいこと行くみたいですね。ちゃんとシェルの設定ファイルに
export $WORKON_HOME='/path_to/virtualenvs'
書いといてあげましょう。
あとは、jedi-vimを入れれば動きます(動くはずです)。
こんなかんじに。

因みにjedi-vimが入ってない状態(python -c 'from jedi import *'したらImportErrorで怒られる)だと、補完はもちろん効きませんしモジュールの名前のあとにドットを入れた瞬間大量のエラーを吐かれます。
↓こんな感じのエラー
Error detected while processing function jedi#complete:
line 1:
Traceback (most recent call last):
Error detected while processing function jedi#complete:
line 1:
  File "<string>", line 1, in<module>
Error detected while processing function jedi#complete:
line 1:
NameError: name 'jedi_vim' is not defined
Error detected while processing function jedi#complete:
line 1:
Traceback (most recent call last):
Error detected while processing function jedi#complete:
line 1:
  File "<string>", line 1, in <module>
Error detected while processing function jedi#complete:
line 1:
NameError: name 'jedi_vim' is not defined


僕はこれで少し躓きましたが…。大概のエラーに関してはGithubのjedi-vimのissuesを見れば解決すると思います。


2013年1月16日水曜日

Arch Linux ARM On Raspberry Pi

Raspberry Piを購入していたのですが色々忙しくて何もできていなかったので今更ながらのOSインストール記事になります。
出来るだけ動作を軽くしたかったのでDebianではなく敢えてArchLinuxを選びましたが…
Mac OSX10.8上でインストール作業を行いました。

  1. とりあえず公式ダウンロードサイトからArchLinuxのimgをダウンロードしてきます。
  2. df -h

    コマンドを利用してSDカードのマウントポイントを確認(ここでは /dev/disk2s1とします)
    アンマウントします。
    diskutil unmount /dev/disk2s1

  3. imgファイルのあるディレクトリまで移動して、書き込みを行います。
    sudo dd if=archlinux-hf-2012-09-18 of=/dev/rdisk2 bs=1m

    disk2s1とかすると失敗します、色々見ているとそこで引っかかった方が多いようです。
  4. コピーが終わったら完了です。LANケーブルとか画面、キーボードを繋いでからマイクロUSBケーブルを繋ぎましょう、起動します。ダウンロードサイトにあるように、
    ID:root Password:root
    で入ります。で、あとは普段通りに色々インストール…僕の時はなぜかパッケージのミラーサイトが落ちていたようで、archlinuxarm.orgのミラー一覧から適当なところにアクセスして、/armv6h ディレクトリからwgetで落としてくる事になりました…ココから落とした pkg.tar.xz ファイルは
    pacman -U <パッケージのファイル名>

  5. で入ります。
  6. 以上で準備は出来たと思います。お疲れ様でした。

2012年6月30日土曜日

自動中指迎撃システムについて

自動で中指に反応してリプライを飛ばします。(Twitbotでやれよというのは無しで…)


自宅のサーバーでDaemon化して動かしてます。
python-twitterを使ってTwitterクライアント支援プログラムを作ってます。現状ではリプライのテキストの中から「)☝」を検出してあったらそのツイートにリプライを飛ばすだけのbotです。APIの消費量を減らすために30秒ごとのMention欄の更新にしていますので自動のリプライを飛ばすまで平均15秒かかる計算になりますが…。
この機能のコードを本体のコードから分離してプラグイン化出来たら公開しようと思ってます。ちなみにですがbotが目的ではないです。






---------------------------7月15日 追記----------------------------




UserStreamに対応させたので迎撃までのロスが秒単位までに減りました。

2012年5月26日土曜日

RAIDZを用いた冗長性のあるストレージサーバーの構築

新しいデスクトップPCを組んだ時にHDDの増設を出来なかったのと、折角工学部に入ったのでそれらしいことをしてみようというのもありストレージサーバーを組むことにしました。
RAID5は書き込みホール問題があるので選択肢から外した結果ですが

とりあえず検証環境を…


メインのデスクトップ


  • CPU:Core i5 2500K(検証時定格動作)
  • メモリー:8GB PC3-12800
  • データ用HDD:3年ほど使ってるWDの2TB(64MBキャッシュ)
  • MB:ASUS P8Z68 V-LE
サーバー用マシン


  • CPU:Celeron G530
  • メモリー:PC3-10600
  • HDD:Seagate製、3TBのHDD  ST3000DM001 ×3
  • キャッシュ用SSD:シリコンパワー製、64GBのSSD  SP064GBSSDE25S25
  • MB: GIGABYTE GA-H61M-DS2 REV2.X
スイッチングハブ
  • BSL-WS-G2108M

これでPC間の転送速度が実測80MB/s程度は出ますが、サーバー内部での実測値が200MB/sを超えていて、1000BASE-Tでは足りないのでお金に余裕ができたらリンクアグリゲーションも試してみようと思います。

さて、本題ですがFreeBSD(on ZFS)は初めてなのでこちらのページを参考にしました。一部僕とは違うところがありますが大まかには先ほどのページと同じです。ただ、zrootの部分は3台のHDDにミラーリングし、残った部分をRAIDZ構成のデータ用ストレージプールとしてます。
以下、手順のメモです。
  1. FreeBSD(amd64)のインストールディスクから起動して、指示に従って"Partitioning"で"Shell"を選択する所まで進んでください。
  2. zpool.cacheを書き換えるための書き換え可能な場所(tmp)を用意します。
    # umount -f /dev/md1
    # mdmfs -s 512M md1 /tmp
  3. デバイス名を確認。
    # dmesg | fgrep MB
    ここで容量などからインストールするHDDのデバイス名を確認してください。僕の場合はHDDがada0、ada1、ada2、トランザクション処理用のログに使用する(つまりzil用)SSDはada3でしたのでこれを前提として話を進めます。
  4. GPT形式で、パーティションを切ります。8GBをzroot、8GBをSWAP、残りをデータ用とします。
    先にHDDのパーティションを切ります。
    # gpart create -s gpt ada0 (残り2台にも同じ事を行う)
    # gpart add -b 40 -s 64k -t freebsd-boot ada0 (残り2台にも同じ事を行う)

    # gpart add -s 8G -t freebsd-swap -l swap0 ada0 (残り2台にも同じ事を行う)

    # gpart add -s 8G -t freebsd-zfs -l disk0 ada0
    # gpart add -s 8G -t freebsd-zfs -l disk1 ada1
    # gpart add -s 8G -t freebsd-zfs -l disk2 ada2

    # gpart add -t freebsd-zfs -l data0 ada0
    # gpart add -t freebsd-zfs -l data1 ada1
    # gpart add -t freebsd-zfs -l data2 ada2

    # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
    # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
    # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2

    # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 (残り2台にも同じ事を行う)

    SSDのパーティションを切ります。僕は64GB割り当てましたが8GBも有れば十分な気がします。 # gpart create -s gpt ada3
    # gpart add -t freebsd-zfs -l ssd-zil ada3
  5. zpoolを作成します。エラーが出ますがマウントできないだけで作成はできているのでスルーします。
    # zpool create -f zroot mirror /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2
    # zpool set bootfs=zroot zroot
    # zfs set checksum=fletcher4 zroot
    # zfs set mountpoint=/mnt zroot
    # zfs create zroot/usr
    # zfs create zroot/usr/home
    # zfs create zroot/var
    # zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
    # zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
    # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
    # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
    # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
    # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
    # zfs create -o exec=off -o setuid=off zroot/var/db
    # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
    # zfs create -o exec=off -o setuid=off zroot/var/empty
    # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
    # zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
    # zfs create -o exec=off -o setuid=off zroot/var/run
    # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp

  6. データ用のプールも作成します。
    # zpool create -f data raidz data0 data1 data2 log ssd-zil
    # zfs set mountpoint=/home data


  7. あとはインストール作業です。先ほどの参考ページの手順(11)~と同じです。
    poolをexportしたのちimportします。キャッシュファイルは、先ほど作った/tmp上に作成します。
    # zpool export zroot
    # zpool import -o cachefile=/tmp/zpool.cache zroot
  8. symlink/sticky bitをたてます。
    # chmod 1777 /mnt/tmp
    # cd /mnt ; ln -s usr/home home
    # chmod 1777 /mnt/var/tmp
  9. FreeBSDのKernel/バイナリ等を展開します。
    # sh
    # cd /usr/freebsd-dist
    # export DESTDIR=/mnt
    # for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
    # do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done

  10. zpool.cacheをコピーします。
    # cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
  11. ZFSで起動する設定を加えます。
    # echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
    # echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
    # cat << EOF > /mnt/etc/fstab
    # Device Mountpoint FStype Options Dump Pass#
    /dev/gpt/swap0 none swap sw 0 0
    EOF
    # echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf

  12. すべての領域をアンマウントします。
    # zfs set readonly=on zroot/var/empty
    # zfs umount -a
    アンマウントが失敗した場合は強制アンマウントします。
    # umount -f /mnt
  13. マウントポイントをセットします。
    # zfs set mountpoint=legacy zroot
    # zfs set mountpoint=/tmp zroot/tmp
    # zfs set mountpoint=/usr zroot/usr
    # zfs set mountpoint=/var zroot/var
  14. 再起動します。
    # sync;sync;sync
    # reboot
  15. OS再起動後、キーマップ・インタフェースを設定します。
    # vi /etc/rc.conf
    hostname="host1.example.com"
    ifconfig_re0="DHCP"
    keymap="jp.106"
  16. rootアカウントのパスワード設定・タイムゾーン設定を行う。
    # passwd
    # tzsetup
  17. 再起動します。
    # sync;sync;sync
    # reboot
以上でZFSの構築は終わりです。長くなったのでSSHとSambaは次の記事に書こうと思います。