ReadyNAS312

投稿日: Leave a comment

NASを導入した件を書くのを忘れていた.

結局,ここに書いた通り,

  • ReadyNAS 312 2ベイ Diskless RN31200-100AJS
  • 3.5インチ内蔵HDD 2TB SATA6.0Gb/s WD20EFRX-R 2台

の構成で構築.

DebianベースのOSが入っているけど,別のところに設定ファイルが置かれているようで,OSの設定はほとんどいじれない.

IPv6の匿名アドレスを作らせるための/etc/sysctl.conf(実際に作ったのは,/etc/sysctl.d/99-ipv6-ra.conf)は有効だったので,そこだけはいじった.

$ cat /etc/sysctl.d/99-ipv6-ra.conf
net.ipv6.conf.eth0.accept_ra = 1
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth0.use_tempaddr = 2
net.ipv6.conf.eth0.accept_ra_defrtr = 0

今のところ気づいて気になっているところ.

  • ユーザーフォルダではWebDAVは使えない.
  • httpsのサーバー証明書は自己署名したものなので,クライアントで証明書エラーが出る.
  • SSHを有効にするとサポートが受けられなくなる場合があるとのことだったが,有効にした.
  • IPv6のアドレスを固定で振ってsysctl.confでRAを受けるようにすれば,匿名アドレスと固定アドレスを併用可

かまくら2

投稿日: Leave a comment

先週に引き続きかまくらを作った.

先週のは子供一人がやっと入れる大きさだったけど,今日作ったのは子供二人または大人一人が入れるくらい大きさ.それでも雪が余るくらいだったから,今回の方が雪の量が多かったと思う.

夜から雨だったのでうまく作れるかわからなかったけど,問題なく作れた.

20140215_1612_mod2

Android用CA証明書

投稿日: Leave a comment

NASがhttpsをしゃべって,いわゆるオレオレ証明書でSSL証明書エラーが出てうっとうしいので,opensslで認証局(CA)を立てて,サーバー証明書をこのCAでサインしてあげた.

で,このCAの証明書をAndroidに入れようと思ったらすんなりといかなかったので備忘録.

このコマンドで,pkcs#12形式に変換したらうまくいった.

# openssl pkcs12 -export -in cacert.pem -inkey private/cakey.pem -out cacert.p12

これを端末に移したら登録できた.

雪 (2014/2/9)

投稿日: Leave a comment

土曜日(2/8)の大雪の翌日.

玄関前を雪かきしたら結構な雪の山が出来た.

20140209103206_SNOW

昨日今日で幼稚園の作品展があったが,昨日は雪で一歩も外に出られず,今日行くことにした.

で,まだ家の周りは雪がたくさんなので車はやめて電車で移動.駅まで歩いた感じ,久里浜はあちこち雪が残っていて,歩道は雪だらけ.子供たちは長靴だったので楽しそうに歩いていたが.

途中通った小学校はこんな感じで真っ白.

20140209110228_Kurihama

電車で幼稚園のある京急大津まで行ったが,大津方面はほとんど雪がなかった.

幼稚園でいろいろ聞いた感じでは,森崎や佐原は雪が多かったらしく,場所によって振り方が結構違った模様.

 

FreeBSD-10RELEASE on ZFS

投稿日: Leave a comment

年末にFreeBSD機が壊れてしまってさみしくなってしまったのでUbuntuを入れているPCにFreeBSDを入れた.

以前,9.1RC2をZFSに入れたけど,もう少し細かく設定したので手順を書き直し.

1. インストーラの起動

1GBのSDカードに10-Rの64ビット版 FreeBSD-10.0-RELEASE-amd64-memstick.img を書き込んでUSBブート.

普通にインストーラを使ってインストールを進めるが,途中のディスクの設定のところはZFSを選ばず,Shellを選ぶ.一度ZFSにしてみたが,パーティションの切り方に満足できなかったので,一度作ったZFSを参考に手動で作ることにした.

2. ZFSの設定

WD REDの1TB 1本のみ使う.ミラーにはしない.4kセクターなディスクなのでzfsパーティションを作るときにちょっと気を使ってあげる.swapはZFSのプール内に作る.

GPTパーティションを作る.

# gpart destroy -F ada0
# gpart create -s gpt ada0
# gpart add -s 512k -a 4k -t freebsd-boot -l boot0 ada0
# gpart add -a 4k -t freebsd-zfs -l disk0 ada0

4kセクタ対応ZFSパーティション(ashift=12)を作る.

一旦,gnopで作ったラッパーデバイスでzfsを作り,export,nop削除,importする.

# gnop create -S 4096 /dev/gpt/disk0
# kldload zfs
# zpool create -o altroot=/mnt -O canmount=off -m none rpool /dev/gpt/disk0.nop
# zpool export rpool
# gnop destroy /dev/gpt/disk0.nop
# zpool import -o altroot=/mnt -o cachefile=/tmp/zpool.cache rpool

3. ファイルシステムの詳細設定

# zfs set checksum=fletcher4 rpool
# zfs set atime=off rpool

ルート

# zfs create -o mountpoint=none rpool/ROOT
# zfs create -o mountpoint=/ rpool/ROOT/default

各ディレクトリ

/直下のフォルダにはmountpointプロパティを設定し,それ以下は単に作るだけ.必要に応じて圧縮とsetuidなどを設定する.

# zfs create -o mountpoint=/tmp -o compression=lz4 -o setuid=off rpool/tmp
# chmod 1777 /mnt/tmp
# zfs create -o mountpoint=/usr rpool/usr
# zfs create rpool/usr/local
# zfs create rpool/usr/obj
# zfs create -o compression=lz4 -o setuid=off rpool/usr/ports
# zfs create -o compression=off -o exec=off -o setuid=off rpool/usr/ports/distfiles
# zfs create -o compression=off -o exec=off -o setuid=off rpool/usr/ports/packages
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/usr/src

# zfs create -o mountpoint=/home rpool/home

# zfs create -o mountpoint=/var rpool/var
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/crash
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/log
# zfs create -o compression=lz4 -o atime=on rpool/var/mail
# zfs create -o compression=lz4 -o exec=on -o setuid=off rpool/var/tmp
# chmod 1777 /mnt/var/tmp

ブート設定

# zpool set bootfs=rpool/ROOT/default rpool

Swap作成

# zfs create -V 12G -o org.freebsd:swap=on -o checksum=off rpool/swap

4. インストールの続き

shellをexecで抜けてインストールの続きを実行.

5. インストール後の設定(1)

# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
# cp /tmp/zpool.cache /mnt/boot/zfs/

6. インストール後の設定(2)

これだけだとなぜか起動せず.PMBRの1番目のパーティションにアクティブフラグがついていない.
fdisk -aを実行するため,一度インストーラを抜けてもう一度USBからブートし,Live CDを選択.

# 前回のときは起動した気がするんだけどなぁ.

# fdisk -a /dev/ada0

これでおしまい.

LEDイルミネーションの修復

投稿日: Leave a comment

金曜日に年休を取ったので、朝、子供の幼稚園バスの見送りに外に出たら、植え込みのLEDイルミネーションの電線が3箇所切断されているのに気づいた。

すぐに修復したかったけど時間がなくて作業できず、今日になってやっと時間がとれたので修復。

普通のフィラメントの電球なら極性は気にしないけど、LEDなので極性に気をつけてはんだ付け。
最初はテスターで見ながら繋いでたけど、面倒になってきて、点灯状態にして、線を接触させてついた方で繋いでいった。

外で使うものなので、熱収縮チューブで絶縁・補強して修復完了。

その日の夜から今まで通りになりました。

せっかくはんだ付けするので、長さを変えられるようにコネクターでも付けようと思ったけど、絶縁不良になっても嫌なのでやめた。

ちなみに、切断面はきれいではなく、ペンチやニッパーで切ったと言う感じではなかった。所々、刃物が当たった感じの傷がついているのと、より線が引きちぎられたような切れかたをしているところから、ハサミとかカッターみたいに金属を切るようにできていない弱い刃物で無理やり切ったんじやないかと。

MyDNS更新用luaスクリプト

投稿日: Leave a comment

これまでFreeBSDのサーバーのcronで実行していたMyDNSのIPv4アドレス更新動作が途絶えていたので,RTX810のluaスクリプトに移植した.

動作は

  1. syslogからNetVolante DNSの更新を検出したらMyDNSにも更新に行く
  2. NetVolante DNSの更新が一定時間なくてもMyDNSに更新をする.

2の方は,一定時間更新がないとアカウントを消されてしまうので,そのための対処.基本的なアドレスの変更通知は1の方になる.

以下,そのスクリプト.

-- update_mydns.lua
-- polling Netvolante DNS update log with timeout

-- parameters for HTTP request
http_req = {
  url = "http://ipv4.mydns.jp/login.html",
  method = "GET",
  auth_type = "basic",
  auth_name = "mydnsxxxxxx",
  auth_pass = "xxxxxxxxxxx"
}

-- monitoring eventlog pattern
SYSLOG_PATTERN = "%[DDNS%] Update succeeded"
SYSLOG_NMATCH = 1
SYSLOG_TIME = 2 * 24 * 60 * 60

-- entry point (main)
while true do
  -- polling netvolante dns update log
  rtn, str = rt.syslogwatch(SYSLOG_PATTERN, SYSLOG_NMATCH, SYSLOG_TIME)

  -- http request for update IP address after:
  -- (1) netvolante dns update log detected
  -- (2) syslogwatch timer timed out
  rtn_http = rt.httprequest(http_req)
  rt.syslog("info", "[LUA][MyDNS] HTTP request for update IP address done")

  -- logging
  if rtn_http.code == 200 then
    if rtn > 0 and str then
      rt.syslog("info", "[LUA][MyDNS] Update succeeded (Netvolante DNS update detected)")
    else
      rt.syslog("info", "[LUA][MyDNS] Update succeeded (Force update)")
    end
  else
    rt.syslog("info", "[LUA][MyDNS] Update failed")
  end
end

これをsftpでRTX810に転送する.ユーザー権限だとファイルの書き込みができず少し悩んだが,通常のユーザー名を指定しつつも,ログインパスワードを管理者パスワードにすれば管理者権限付でログインできることが分かった.

時間間隔は以前と同様2日間隔とするが,cronと違って正確に2日間隔にはならない.が,サーバー側の負荷軽減を考えると少しずれてるくらいの方がいいと思うので,ここは特にこだわらないことにする.

このファイルを / 直下に置いて,実行してみる.

# lua /update_mydns.lua

これでPPPoEを切断してNetvolante DNSの更新をさせてみる.で,以下のようなログが記録された.

2014/01/17 12:10:42: PPPOE[01] PPPoE Connect
2014/01/17 12:10:43: PP[01] PPP/IPCP up  (Local: 125.30.x.x, Remote: x.x.x.x)
2014/01/17 12:10:43: [DDNS] netvolante-dns go PP[01] (auto)
2014/01/17 12:10:43: [DDNS] Update succeeded
2014/01/17 12:10:50: [LUA][MyDNS] HTTP request for update IP address done
2014/01/17 12:10:50: [LUA][MyDNS] Update succeeded (Netvolante DNS update detected)

あとは,起動時にスクリプトを実行するように設定して終わり.

schedule at 1 startup * lua /update_mydns.lua

WD REDのIntellipark設定

投稿日: Leave a comment

備忘録.

Ubuntuを入れている1TBのWD RED.SMARTの193 Load/Unload Cycle Countを見ると7000以上になっていて,Intelliparkのしきい値を調整してあげた方がいいような気がしたので,設定メモ.

ubuntuの場合は,以下でidle3-toolsを入れる.

# apt-get install idle3-tools

設定値の確認.生値を見るのは-g,人間の読める値で見るのは-g103とか.

# idle3ctl -g /dev/sda
Idle3 timer set to 80 (0x50)
# idle3ctl -g103 /dev/sda
Idle3 timer set to 8.0s (0x50)

8秒になっている.これを300秒に変更する.
# 8秒間HDDにアクセスがなかったからといってシステムが休んでいるとは思えないが
# 5分ならさすがに休んでいるだろうということで300秒.OFFにはしない.

設定値の変更は-sオプション.設定方法はここの一番下にあるように1-128は設定値×0.1秒,129-255は(設定値-128)×30秒.

128+300/30=138を設定すればよい.

# idle3ctl -s138 /dev/sda
Idle3 timer set to 138 (0x8a)
Please power cycle your drive off and on for the new setting to be taken into account. A reboot will not be enough!

HDDの電源オフ→オンをせよと言われる.

念のため確認.

# idle3ctl -g /dev/sda
Idle3 timer set to 138 (0x8a)
# idle3ctl -g103 /dev/sda
Idle3 timer set to 300.0s (0x8a)

ちなみに,無効にするのは-d.

# idle3ctl -h
idle3ctl v0.9.1 - Read, Set or disable the idle3 timer of Western Digital drives
Copyright (C) 2011  Christophe Bothamy

Usage: idle3ctl [options] device
Options: 
 -h : displat help
 -V : show version and exit immediately
 -v : verbose output
 --force : force even if no Western Digital HDD are detected
 -g : get raw idle3 timer value
 -g100 : get idle3 timer value as wdidle3 v1.00 value
 -g103 : get idle3 timer value as wdidle3 v1.03 value
 -g105 : get idle3 timer value as wdidle3 v1.05 value
 -d : disable idle3 timer
 -s<value> : set idle3 timer raw value

 

FreeBSD disk on Ubuntu

投稿日: Leave a comment

FreeBSD機のデータ救出するためにUbuntu studio機につないでみた.

1. 認識

何はともあれ,dmesgを見てみる.

[    1.159211] scsi 3:0:0:0: Direct-Access     ATA      Hitachi HDS5C302 ML6O PQ: 0 ANSI: 5
[    1.159330] sd 3:0:0:0: Attached scsi generic sg2 type 0
[    1.159404] sd 3:0:0:0: [sdb] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB)
[    1.159504] sd 3:0:0:0: [sdb] Write Protect is off
[    1.159507] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    1.159550] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.184219]  sdb: sdb1
[    1.184219]  sdb1: <bsd: sdb5 sdb6 sdb7 sdb8 sdb9 sdb10 >

しっかりFreeBSDのパーティション (bsd: sdb5 sdb6 sdb7 sdb8 sdb9 sdb10) を認識してる.

2. マウント

順番にマウントしてみる.

root@dahlia:/# uname -a
Linux dahlia 3.11.0-14-lowlatency #6-Ubuntu SMP PREEMPT Wed Nov 20 23:59:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb5 /mnt
root@dahlia:/# ls /mnt
COPYRIGHT  boot.config  entropy  home     media  rescue  sys  var
bin        compat       etc      lib      mnt    root    tmp
boot       dev          export   libexec  proc   sbin    usr
root@dahlia:/# umount /mnt
root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb6 /mnt
mount: 間違ったファイルシステムタイプ、不正なオプション、
       /dev/sdb6 のスーパーブロックが不正、コードページまたは
       ヘルパープログラムの未指定、或いは他のエラー
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb7 /mnt
root@dahlia:/# ls /mnt
bin     include  libexec  ports  src             src_R83p4.tar.gz
compat  lib      local    sbin   src_82R.tar.gz  src_R83p8
games   libdata  obj      share  src_R83p4
root@dahlia:/# umount /mnt
root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb8 /mnt
root@dahlia:/# ls /mnt
account  backups  db     heimdal     mail   nmbd      rwho   yp
at       crash    empty  log         msgs   preserve  spool
audit    cron     games  lost+found  named  run       tmp
root@dahlia:/# umount /mnt
root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb9 /mnt
root@dahlia:/# ls /mnt
samba  ueda
root@dahlia:/# umount /mnt
root@dahlia:/# mount -r -t ufs -o ufstype=ufs2 /dev/sdb10 /mnt
root@dahlia:/# ls /mnt
db  samba  www

内容的に以前のマウントポイントはこんな感じの様子.

  • sdb5: /
  • sdb6: swap
  • sdb7: /usr
  • sdb8: /var
  • sdb9: /home
  • sdb10: /export

マウントポイントを作って一気にマウントするスクリプトを作っておいた.

rose@dahlia:~# mkdir /rose
root@dahlia:~# cat mount_rose_disk.sh 
#!/bin/sh

mount -r -t ufs -o ufstype=ufs2 /dev/sdb5 /rose
mount -r -t ufs -o ufstype=ufs2 /dev/sdb7 /rose/usr
mount -r -t ufs -o ufstype=ufs2 /dev/sdb8 /rose/var
mount -r -t ufs -o ufstype=ufs2 /dev/sdb9 /rose/home
mount -r -t ufs -o ufstype=ufs2 /dev/sdb10 /rose/export

ここまでくれば後は吸い出すだけだから大丈夫か.

3. 文字コードの変換

と思いきや,ファイルを読み込んでいくとEUC-JPなファイル名がゴロゴロ出てくる.そのままでは困るので convmv というツールを入れた.デフォルトでは実際に変更をかけないという超安全設計なツール.これでsamba経由で書き込んだ日本語ファイル名が元に戻った.

(事前確認)
> convmv -r -f euc-jp -t utf8 *
(実際に変換する)
> convmv --notest -r -f euc-jp -t utf8 *