2014年10月16日木曜日

Raspberry Piセットアップ日記(14)logger

logger:syslogにログを出力するコマンド。


シェルの標準出力をloggerに送るラッパーシェルを作ってみた。

cronで自動実行した際に、標準エラー出力に出力があったときだけメールされ、
通常時はログに吐くだけとなるようにしてみた。

・標準出力は、loggerに送る
・標準エラー出力は、loggerに送った上で、標準エラー出力にも冗長出力する
・コマンドライン
 logger_wrapper.sh シェル シェル引数

標準出力と標準エラー出力のパイプを分けるやり方は
試行錯誤の結果名前付きパイプにしてみた。
mktempで一時ファイルを使ってもいいだろう。

#!/bin/bash

if [ $# -lt 1 ]; then
        echo "argument not enough"
        exit 8
fi

THIS_NAME=`basename $0 .sh`
EXEC_NAME=`basename $1`
LOGGER_OPTS="-t ${EXEC_NAME}"

# create named pipe
PIPE=${THIS_NAME}_$$.pipe
mkfifo ${PIPE} 

# stderr logging (duplicate to stderr)
logger ${LOGGER_OPTS} -s -f ${PIPE} &

# execute program
$@ 2>${PIPE} | logger ${LOGGER_OPTS}

# cleanup
rm ${PIPE}

2014年9月28日日曜日

Raspberry Piセットアップ日記(13)UFW BLOCKメッセージ


気づいたら、/var/log/messagesに以下のようなメッセージが頻発していた。(1分に1回)

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
Sep 28 08:09:20 raspberrypi kernel: [1807898.640777] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

どうもブロードバンドルーターからの何らかのブロードキャストメッセージをブロックしている模様。
denyすることでログに吐かなくなるようだが、せっかくなのでどんなメッセージが飛んでいるのか
解析してみる。

1、syslogの見方

●参考
Linux LPIC - /var/log/messages
システムログの読み方を理解しよう
Raspberry Pi as a Syslog Server



以下のような読み方になるもよう

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=..
+- timestamp -+ +- host --+ +-src-+ +-- msg body ..

カーネルが、[1807838...というメッセージを出力している、ということになる
"[1807838.540815]"という表記は、なんとなくタイムスタンプ(の別表現)のような感じなので、意味のある情報は
[UFW BLOCK]..以降だろう。

2、ufwの動作確認

ここで一度ufwの動作設定がどうなっているのかを確認する
ufwの動作状態確認

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
...以下略

3、UFW BLOCK以降のログの見方

[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁(2)> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

INは入力デバイスだろう。
OUTはoutgoingのメッセージではないので出ないのだろう。
MACは通常のMACアドレスにしては長い気がするのと、最後の2オクテットの値が違うのでただのMACアドレスではなさそうだが、とりあえず保留。
SRC以降は、IPヘッダの情報くさい。

IPパケットの基本構造

SRC=送信元IP ルータIP
DST=宛先IP 224.0.0.1
LEN=データグラム長、IPパケット全体の大きさ 32 理論的なIPパケットの最小は20bytes
TOS=サービスタイプ 0x00、指定なし
PREC=? 0xA0 とりあえず保留
TTL=寿命 1
ID=IPフラグメント(分割)が起こった時の識別子、通常ランダム 同じフラグメント(分割)されたパケットは同じ値になる 2006
PROTO=プロトコル番号 2 /etc/protocolsファイルによると「igmp(Internet Group Management)」

どうも、IGMPパケットのようだ。

4、IGMPとは?
Internet Group Management Protocol

Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、
マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。

LEN=32であることから、おそらくMembership Queryパケットである可能性が高い。
Membership Query (Type 0x11)
ホストがマルチキャストのグループへ参加するときにルータに送信される。参加しているグループの最新の状態を知りたいときにも送信される。

ただ、内容的には「ホストからルータへ投げられるパケット」であり、
今回のように「ルータからブロードキャストへ」投げられるパケットでは無い様に見受けられるので、解せない。

一方こちらでは
マルチキャスト編<第2回> IGMPを知る

どうも「グループの維持」のために、クエリパケットを60秒に1回投げられるらしい。
意味的にはルータが投げてもおかしくない(というかグループを管理するのはルータらしいのでルータが投げるのが正論だろう)、おそらくこいつだろう。

4、解決策
結論として、IGMPをallowにしてみようと思う。

●参考
Ubuntu で ufw を利用して ping を拒否する設定
KVMのインストールと設定
Question about UFW log entries

IGMPプロトコルそのものに設定することはできなさそう。
公式サイトでバグ報告上がってるがwishlistになっており
マルチキャスト設定で対応する旨書かれている

https://bugs.launchpad.net/ufw/+bug/946322


というわけで、以下のように実行し、ログが増えないことを確認して終了。

$ sudo ufw allow in from ルータIP to 224.0.0.0/8 
Rule added
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
..中略..
224.0.0.0/8                ALLOW IN    ルータIP

5、おまけ

ufwのヘルプ
$ ufw help


2014年9月23日火曜日

Raspberry Piセットアップ日記(12)repository.wolfram.com


●repository.wolfram.com
apt-updateするとrepository.wolfram.comがいないと言われ怒られる。

$ sudo apt-get update
...略...
ヒット http://mirrordirector.raspbian.org wheezy/rpi armhf Packages            
エラー http://repository.wolfram.com stable Release.gpg                        
  repository.wolfram.com:80 (140.177.204.60) へ接続できませんでした。 - connect (113: ホストへの経路がありません)
無視 http://repository.wolfram.com stable Release                              
エラー http://repository.wolfram.com stable/non-free armhf Packages            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja_JP         
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-en            
  repository.wolfram.com:http へ接続できません:
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-ja_JP             
...略...

raspberry piのフォーラムによると、最新のrespbianディストリではrepository.wolfram.comは
含まれていないとのこと
http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=87501

workaroundに従い、wolfram.listをmv

$ cd /etc/apt/sources.list.d/
$ sudo mv wolfram.list wolfram.list.20140923bk1
$ sudo apt-get update
ヒット http://raspberrypi.collabora.com wheezy Release.gpg
ヒット http://mirrordirector.raspbian.org wheezy Release.gpg
...略...
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-en
パッケージリストを読み込んでいます... 完了
N: ディレクトリ '/etc/apt/sources.list.d/' の 'wolfram.list.20140923bk1' が無効なファイル名拡張子を持っているため、無視します

余計なメッセージが出ているようだが、いったん気にしないことにする

Raspberry Piセットアップ日記(11)自動更新

パッチの自動更新

●参考
apt-get/自動アップデートがしたい

cron-apt で自動アップデート

●手順
1.cron-aptをインストール

$ sudo apt-get install cron-apt

2./etc/cron-apt/config を編集

インストール直後のファイルには何もかかれてないので、
/usr/share/doc/cron-apt/README.gzを参考に記述する。

# Configuration for cron-apt. For further information about the possible
# configuration settings see /usr/share/doc/cron-apt/README.gz.

APTCOMMAND=/usr/bin/apt-get
OPTIONS="-o quiet=1"
MAILON="changes"
MAILTO="myaddress@hogehoge.com"

3./etc/cron-apt/action.d/3-download を編集

-dオプションを削る

autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true

4./etc/cron.d/cron-apt を編集

週1実行に設定

0 4     * * thu root    test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt

5.動作確認

$ sudo /usr/sbin/cron-apt

2014年9月14日日曜日

MySQLのバックアップ

mysqlのバックアップにはmysqldumpを使うことにした

●参考
mysqldump に必要な権限
http://blog.enjoitech.jp/article/200

●権限設定
create user 'dbuser'@'localhost';
grant file on *.* to 'dbuser'@'localhost';
grant select,lock tables,show view on dbname.* to 'dbuser'@'localhost';
grant select on mysql.proc to 'dbuser'@'localhost';

●以下のようなシェルを作成
ファイル名にタイムスタンプを持たせ世代管理
なおかつ古いファイルは削除するようにした
#!/bin/bash

dttm=`date +%Y%m%d_%H%M%S`
filename=mydb_${dttm}.dmp.gz
outdir=~/out/dir/to/bkup/

echo mysqldump to ${outdir}/${filename} start

mysqldump mydb | gzip >${outdir}/${filename}

echo mysqldump end

echo delete old archive start
list=`find ${outdir} -mtime +30`
rm -v -f ${list}
echo delete old archive end

2014年9月6日土曜日

Raspberry Piセットアップ日記(10)バックアップ

●バックアップ
いろいろ調べた結果ddを使うことにする
(dumpを使おうと思ったが、raspbianには標準では入っていないようなので避けてみた)

実験
$ sudo dd if=/dev/root of=/mnt/usbdisk1/rbp-backup/rootdd.img
28243968+0 レコード入力
28243968+0 レコード出力
14460911616 バイト (14 GB) コピーされました、 6889.95 秒、 2.1 MB/秒

6800秒=約2時間か。ddは空き領域を含むすべてのブロックをダンプする(はず)なので、
まあ遅いというか無駄が多いが仕方がないか。

最終的には以下のようなシェルをcronに仕込んで終了。

#!/bin/bash

#sudo dd if=/dev/root of=/mnt/usbdisk1/rbp-backup/rootdd.img
sudo dd bs=1M if=/dev/root | gzip >/mnt/usbdisk1/rbp-backup/rootdd.img.gz

Androidアプリ開発 - 電卓(1)

●開発環境構築
android studioを使用
https://developer.android.com/sdk/installing/studio.html

インストール後、SDKマネージャーから
・必要なバージョンのSDK
・Intel用のエミュレーションアクセラレータ
を追加インストール


仮想マシンにGenymotionを使用
http://qiita.com/Sam/items/8d551f575b617fa0be7e

とりあえず、hello worldを作ってみた。

電卓はとりあえずガワだけ。
作り方はこの辺を参考に。
http://www.macs123.dtdns.net/algo/android/android009.html

2014年6月4日水曜日

vmwareでポートフォワーディング的なこと

NAT型の仮想NICで、ポートフォワーディング的なことをやる。
ホストで受けた通信をゲストに転送する。

昔はvmnetcfg.exe的なツールがバンドルされてたようですが今は無いみたいです。
Confを直接いじってOK


[incomingtcp]
10022 = 192.168.11.129:22
この場合だと、ホストの10022番ポートを、ゲスト(192.168.11.129)22番ポートへ。って意味になるらしい。

●参考

2014年5月18日日曜日

Raspberry Piセットアップ日記(8)Gmailでメール送信

●Gmailでメール送信
ssmtpを使う

1、ssmtpのインストール
$ sudo apt-get install ssmtp
2、ssmtpの設定
$ sudo vi /etc/ssmtp/ssmtp.conf 
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=raspberrypi

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

AuthUser=Gmailのアカウント名
AuthPass=Gmailのパスワード
AuthMethod=LOGIN
UseSTARTTLS=YES
UseTLS=Yes
3、送信テスト
$ vi mailtest.txt
From:gmailのメールアドレス
To:あて先メールアドレス
Subject:test

Mail Test
$ sendmail -t < mailtest.txt

●参考
ラズベリーパイ(raspbian)を使ってみる - 5分でメールを送信できるようにする -

Raspberry Piセットアップ日記(7)crontabのエディタ変更

●crontabのエディタを変更


update-alternativesを使う
 $ sudo update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。

  選択肢    パス             優先度  状態
------------------------------------------------------------
* 0            /bin/nano           40        自動モード
  1            /bin/ed            -100       手動モード
  2            /bin/nano           40        手動モード
  3            /usr/bin/vim.tiny   10        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3
update-alternatives: /usr/bin/editor (editor) を提供するために 手動モード で /usr/bin/vim.tiny を使います

2014年5月15日木曜日

KakeiWeb開発日記(3) : 一覧画面のページング

プログラミングスキル維持のため、家計簿システム(KakeiWeb)を作ろうという試み。 ●一覧画面のページング

(1)1ページ分のデータだけとってくるにはJPAのQuery#setFirstResult、Query#setMaxResultsを設定してクエリーを実行する

 public List getList(int page) {
  int first_result = (page-1) * rowsPerPage;
  TypedQuery q = em.createNamedQuery("CreditCard.findAll",CreditCard.class);
  q.setFirstResult(first_result);
  q.setMaxResults(rowsPerPage);
  return q.getResultList();
 }

(2)管理ビーンにJSFで扱いやすいようメソッド/プロパティを実装し、JSFで呼び出す

   
     
      
   


 public boolean hasNextPage() {
  return currentPage < pages;
 }
 public boolean hasPrevPage() {
  return currentPage > 1;
 }
 public String goPage(int page) {
  return "ListCreditCard?faces-redirect=true"+(page > 0 ? "&page="+page : null);
 }
 public int getCurrentPage() {
  return currentPage;
 }

前のページがないときなどは出したくないが、レイアウトが崩れるのでその辺は悩みどころ。
とりあえず今の状態で、完了とする。


●今後(短期課題)
済(1)一覧画面のページング処理実装
中(2)トランザクション編集画面の開発
    ・Excelフィーリング
    ・キーボード操作
    ・少ないキーストローク(自動日付、自動フィールド移動的な)
 (3)記入用Androidアプリの開発


●今後(中期課題)
 (1)本番環境をRaspberry Pi上へ構築する
 (2)マスタメンテ画面のテンプレート化


●今後(長期課題)
 (1)外部公開(Internet経由で入力・参照できるようにする)

2014年5月14日水曜日

MySQLのRaspberryへの移行

Eclipseの接続先をRaspberryPiに向ける

1、Glassfish コンソール起動(localhost:4848)
2、接続プールの編集
  リソース - JDBC - JDBC接続プール - 追加プロパティ タブの URL,user,password を編集
3、Eclipseで接続確認して、OK!

●今後(短期課題)
中(1)一覧画面のページング処理実装
済(2)開発DB環境をRaspberry Piに移行する。
未(3)マスタメンテ画面のテンプレート化

●今後(中期課題)
 (1)本番環境をRaspberry Pi上へ構築する


●今後(長期課題)
 (1)外部公開(Internet経由で入力・参照できるようにする)
 (2)記入用Androidアプリの開発

MySQLの移行



開発用にCentOS上に立てていたMySQLを、Raspberry Pi上に移行する。
さらにMySQL 5.1系(MyISAM)から5.5系(InnoDB)への移行も行う

●移行手順(概要)
1、新MySQL上にDBを作る
2、旧MySQLからmysqldumpでDBをダンプする
3、ダンプ内のEngine設定をMyISAMからInnoDBに変更
4、新MySQL上にダンプをインポートする

●移行手順(詳細)
1、新MySQL上にDBを作る
mysql> create database test;

2、旧MySQLからmysqldumpでDBをダンプする
$ mysqldump -u root -p kakei > kakei.sql

3、ダンプ内のEngine設定をMyISAMからInnoDBに変更
$ vi kakei.sql
%s/MyISAM/InnoDB/g

4、新MySQL上にダンプをインポートする
$ mysql -u kowner -p KakeiWebDev < kakei.sql

一部、キー長が長すぎるなど怒られたが、適宜ダンプを修正し再実行でOK。

●参考
MySQL(DB)の移行

MySQLのデータベースを別サーバーに移行する

Useful sed / awk liners for MySQL


2014年5月13日火曜日

SQL Server ログ配布

ログ配布の構成
http://technet.microsoft.com/ja-jp/library/ms190640.aspx

1、バックアップフォルダの共有
  トランザクションログバックアップを取るフォルダをネットワーク共有する
  とりあえずEveryone 読み書き可にした

2、プライマリ側でログ配布の設定&セカンダリ作成
(1)データベースのプロパティ→トランザクションログの配布→「ログ配布構成のプライマリ データベースとして有効にする」をON
(2)[トランザクション ログのバックアップ] で [バックアップの設定] をクリック
(3)[バックアップ フォルダーのネットワーク パスを指定する]を入力
   \\primary_server\shared_bkup
(3)バックアップ フォルダーがプライマリ サーバーに存在する場合は、バックアップ フォルダーのローカル パスを入力
   D:\backup
(4)バックアップジョブのスケジュールをクリック
(5)間隔を1分に設定
(6)OKを押す
(7)[セカンダリ サーバー インスタンスとデータベース] の [追加] をクリック
(8)接続をクリックしてセカンダリに接続
(9)[セカンダリ データベースの初期化] タブで
   「プライマリデータベースの完全バックアップを生成して、セカンダリデータベースに復元します」を選択
   復元オプションでフォルダを適切に設定
(10)[ファイルのコピー] タブの
    [ファイルのコピー先フォルダー] を入力
    スケジュールで間隔を1分に設定
(11)[トランザクションログの復元] タブの [バックアップ復元時のデータベース状態] で、[復旧モードなし]を選択
    スケジュールで間隔を1分に設定
(12)OK
(13)OK スクリプトは出力できない

ちなみにプライマリへの1000万件のINSERTがセカンダリに伝播するまで少なくとも1.5時間以上かかった。
正確には途中でキャンセルしたので不明。
個人的には使えない性能。(もちろん必要とされる性能要件による)

2014年5月12日月曜日

MySQLの設定

KakeiWeb開発をRaspberry Piで行うにあたり、mysqlのセットアップを済ませておく

●MySQLの設定
1、セキュア設定
$ sudo mysql_secure_installation

2、my.cnfの編集
文字化け対策、リモート接続を設定する
[mysqld]
...
character-set-server = utf8
# 以下の行はコメントアウト
#bind-address           = 127.0.0.1

[client]
...
default-character-set=utf8

編集したら、再起動
$ sudo service mysql restart

3、ユーザーの作成
$ mysql -u root -p
mysql> grant all privileges on KakeiWebDev.* to dbuser@localhost identified by 'xxxx';
mysql> grant all privileges on KakeiWebDev.* to dbuser@'111.111.111.%' identified by 'xxxx';

4、ポート開放
$ sudo ufw allow 3306/tcp

5、データベースの作成
mysql> create database KakeiWebDev;

2014年5月9日金曜日

KakeiWeb開発日記(2)

プログラミングスキル維持のため、家計簿システム(KakeiWeb)を作ろうという試み。

●JPAにおけるトランザクション実装
EJBにして、@TransactionAttributeアノテーションを使うのがよさげ。

public void insert(CreditCard e) throws Exception {
    UserTransaction utx = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
    utx.begin();
    em.persist(e);
    utx.commit();
}
JNDI(InititalContext)やJTA(UserTransaction)がやたらExceptionを投げてくるので
どのレイヤで吸収させるべきかの検討が必要であった。

@Named
@SessionScoped
@Stateful
public class Ejb implements Serializable {
    ...
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void insert(CreditCard e) {
        em.persist(e);
    }
}

例外キャッチ不要。トランザクションの開始終了の宣言不要。
これは楽!
ちなみに@RequestScopedにするなら、@Statelessのほうがおそらくよい。

参考
http://stackoverflow.com/questions/4294680/transaction-not-created-automatically-even-if-transactionattributetransactiona

http://otndnld.oracle.co.jp/document/products/wlw/docs103/guide/controls/conControlTransactions.html

●今後(短期課題)
(1)一覧画面のページング処理実装
(2)環境をRaspberry Piに移行する。

KakeiWeb開発日記(1)

プログラミングスキル維持のため、家計簿システム(KakeiWeb)を作ろうという試み。

●構成
OS:Linux(Raspbian)
Web/AP:GlassFish
アプリケーションフレームワーク:Java EE(JFS+JPA)
バッチ処理:Java+cron
DB:MySQL

●現時点の状況
永続化、画面遷移、その他もろもろ理解を目的として
マスターメンテ画面(クレジットカードマスター)を作成中。
リスト表示、メンテ画面表示、永続化まで一応動く状態。

●今後(短期課題)
(1)一覧画面のページング処理実装
(2)トランザクション開始・終了のスマートな実装
 JTAでトランザクションを実装しているが投げてくるexceptionが多くcatch実装が面倒。
 スマートなやり方を検討する
(3)環境をRaspberry Piに移行する。

2014年5月8日木曜日

Thumbs.db:encryptable


Windows7のフォルダにいつの間にか「Thumbs.db:encryptable」というファイルができている。
これは削除しようとしてもエラーになって消えない。(そんなファイルはありません的なことを言われる)
どうもファイル名にコロン(:)が入っていて、もともとコロンはNTFSでは
ファイル名として使えない記号なので、エラーになる、ということらしい。
みんなLinuxでマウントして消すということで解決している模様。

私も結局、日経Linux付録のUbuntu13.10ブータブルDVDからUbuntuを起動して、無事削除できた。

2014年5月3日土曜日

Raspberry Piセットアップ日記(6)ファイルサーバー化

●ファイルサーバー化 続き

ファイルシステムがNTFSだとめっちゃ遅いので、ext4にきりなおす。

参考


1.マウント済みディスクのアンマウント
 $ sudo umount /dev/sda2

2.3TBなのでpartedでパーティションをきりなおす
$ sudo parted -l
Model: I-O DATA HDJ-U (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name                          Flags 1      17.4kB  134MB   134MB                Microsoft 

reserved partition  msftres
 2      135MB   3001GB  3000GB  ntfs         Basic data partition


Model: SD  (sd/mmc)
Disk /dev/mmcblk0: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      4194kB  1445MB  1441MB  primary   fat32        lba
 2      1447MB  16.0GB  14.5GB  extended
 5      1451MB  1514MB  62.9MB  logical   fat32        lba
 6      1518MB  16.0GB  14.5GB  logical   ext4
 3      16.0GB  16.0GB  33.6MB  primary   ext4

$ sudo parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: I-O DATA HDJ-U (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name                          Flags 1      17.4kB  134MB   134MB                Microsoft 

reserved partition  msftres
 2      135MB   3001GB  3000GB  ntfs         Basic data partition

3.パーティションテーブルの変更
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? y

4.パーティションの作成
(parted) mkpart
Partition name?  usbdisk
File system type?  [ext2]? ext3
Start? 0%
End? 3001GB

(parted) print
Model: I-O DATA HDJ-U (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               usbdisk

5.ファイルシステムの作成
$ sudo mkfs -t ext4 /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
183148544 inodes, 732566272 blocks
36628313 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
22357 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, 20480000, 23887872, 

71663616, 78675968, 
        102400000, 214990848, 512000000, 550731776, 644972544

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


6.fstabの修正
/dev/sda1       /mnt/usbdisk1    ext4   defaults,noatime,nobh,data=writeback,commit=60  0       0

7.マウント
$ sudo mount /mnt/usbdisk1

8./etc/samba/smb.confの修正
[nas]
   comment = nas directory
   path = /mnt/usbdisk1/nas
   guest ok = yes
   read only = No
   writable = Yes
   hosts allow = 192.168.0.0/255.255.255.0
   security = server
   valid users = foo
   create mode = 0666
   directory mode = 0777

9.samba再起動
$ sudo service samba restart


体感的には早くなったように思う。

2014年5月2日金曜日

powershellで$を含む文字列を置換する



たとえば
hello,${name}
という文字列の${name}の部分を"world"に変えたいとき

'hello,${name}' -replace '${name}',"world"

ではダメで、

'hello,${name}' -replace "\`$\{name}","world"

これでOK。

からくりとしては
1、$がpowershellで変数を表す特殊文字なので、`でエスケープする必要がある
2、さらに、$は正規表現で行末を表す特殊文字でもあるので、さらに\でエスケープする必要がある

ということのようです。
なお中括弧{}も正規表現では意味があるので\でエスケープしています。


参考
http://goldyrain.blogspot.jp/2011/12/powershell.html

2014年4月27日日曜日

Raspberry Piセットアップ日記(5)samba設定

●ファイルサーバー化
1、sambaインストール

$ sudo apt-get install samba

2、smb.conf設定
$ sudo vi /etc/samba/smb.conf

ワークグループ名設定
   workgroup = WORKGROUP

map to guestをコメントアウト
#   map to guest = bad user

homeディレクトリへの書き込みを許可、以下をコメントアウト
[homes]
#   read only = yes

3、samba再起動
$ sudo service samba restart

4、パスワード設定
$ sudo pdbedit -a pi

5、ポート開放
$ sudo ufw allow 137/udp
$ sudo ufw allow 138/udp
$ sudo ufw allow 139/tcp
$ sudo ufw allow 445/tcp
$ sudo ufw status

6、共有用ユーザーの作成
$ sudo adduser foo
$ sudo pdbedit -a foo

7、外付けHDDの共有設定
$ sudo vi /etc/samba/smb.conf

[nas]
   comment = nas directory
   path = /mnt/iodata/nas
   public = No
   read only = No
   writable = Yes
   hosts allow = 192.168.0.0/255.255.255.0
   security = server
   valid users = foo

Raspberry Piセットアップ日記(4)


外付けUSBディスクを接続する
(IODATA HDE-U3.0J : 3.0 TB,USB2.0,NTFSフォーマット)

●参考
Raspberry Pi Enabling full read write support for NTFS




3TB GPT NTFS formatted drive share
http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=39604

Mounting gpt partitions on Raspberry Pi
http://www.zayblog.com/computer-and-it/2013/07/22/mounting-gpt-partitions-on-raspberry-pi/

raspberryPi NAS化
http://po.2-d.jp/?p=1387


●手順

1、ディスクを接続

2、接続を確認
$ sudo fdisk -l
<<省略>>
Disk /dev/sda: 3000.6 GB, 3000592982016 bytes
256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1  4294967295  2147483647+  ee  GPT


3、ntfsprogsをインストール
$ sudo apt-get install ntfsprogs
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています            
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  ntfs-3g
以下のパッケージが新たにインストールされます:
  ntfs-3g ntfsprogs
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 48 個。
712 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,555 kB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main ntfs-3g armhf 1:2012.1.15AR.5-2.1 [694 kB]
取得:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main ntfsprogs all 1:2012.1.15AR.5-2.1 [17.5 kB]
712 kB を 1秒 で取得しました (456 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ ntfs-3g を選択しています。
(データベースを読み込んでいます ... 現在 70830 個のファイルとディレクトリがインストールされています。)
(.../ntfs-3g_1%3a2012.1.15AR.5-2.1_armhf.deb から) ntfs-3g を展開しています...
以前に未選択のパッケージ ntfsprogs を選択しています。
(.../ntfsprogs_1%3a2012.1.15AR.5-2.1_all.deb から) ntfsprogs を展開しています...initramfs-tools のトリガを処理しています ...
man-db のトリガを処理しています ...
ntfs-3g (1:2012.1.15AR.5-2.1) を設定しています ...
update-initramfs: deferring update (trigger activated)
initramfs-tools のトリガを処理しています ...
ntfsprogs (1:2012.1.15AR.5-2.1) を設定しています ...

4、接続を確認2
$ sudo parted -l
el: I-O DATA HDJ-U (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name                          Flags 1      17.4kB  134MB   134MB                Microsoft

reserved partition  msftres
 2      135MB   3001GB  3000GB  ntfs         Basic data partition


Model: SD  (sd/mmc)
Disk /dev/mmcblk0: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      4194kB  1445MB  1441MB  primary   fat32        lba
 2      1447MB  16.0GB  14.5GB  extended
 5      1451MB  1514MB  62.9MB  logical   fat32        lba
 6      1518MB  16.0GB  14.5GB  logical   ext4
 3      16.0GB  16.0GB  33.6MB  primary   ext4

5、マウント
$ sudo mount /dev/sda2 /mnt

※/dev/sda1は予約領域ボリュームになっていて/dev/sda1にマウントしようとするとエラーになる。
※ntfsprogs(またはntfs-3g)をインストールした時点でディスクを接続しなおすと、
 /mnt配下に自動マウントされる模様

6、起動時にマウントする設定
$ sudo umount /dev/sda2
$ sudo vi /etc/fstab
以下の1行を追加
/dev/sda2       /mnt/iodata     ntfs    defaults          0       0

$ sudo mount /mnt/iodata/
$ mount
<<省略>>


/dev/sda2 on /mnt/iodata type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

2014年4月25日金曜日

riken.jp

何の気なしに自宅のCentOSのyum updateをしてみたら以下の文字が!!


Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp

rikenって最近聞いたことあるなと思い
www.riken.jpへいって見たら、やはり例のSTAP細胞の方々のサイトでした。


ftp.riken.jpはCentOS以外にも今までFTPミラーサイトとして数々のお世話になってきた。

私は今回の一件で、理研という組織に少なからず疑惑を抱いている一人であるが、
今まで「信頼できるFTPサイト」として利用してきた立場であったことを思い起こし、
非常に複雑な気持ちになってしまった・・

#とはいえ今後ftp.riken.jpを使わないといった行動に出ることはないだろうが


Raspberry Piセットアップ日記(3)


ファイアウォール設定
ufwを使うとiptablesの設定が簡単になるらしい。

$ sudo apt-get install ufw

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination      

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination      

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

$ sudo ufw allow ssh
Rules updated
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination      
ufw-before-logging-input  all  --  anywhere             anywhere          
ufw-before-input  all  --  anywhere             anywhere          
ufw-after-input  all  --  anywhere             anywhere          
ufw-after-logging-input  all  --  anywhere             anywhere          
ufw-reject-input  all  --  anywhere             anywhere          
ufw-track-input  all  --  anywhere             anywhere          

Chain FORWARD (policy DROP)
target     prot opt source               destination      
ufw-before-logging-forward  all  --  anywhere             anywhere          
ufw-before-forward  all  --  anywhere             anywhere          
ufw-after-forward  all  --  anywhere             anywhere          
ufw-after-logging-forward  all  --  anywhere             anywhere          
ufw-reject-forward  all  --  anywhere             anywhere          
<<大量に出力されるので省略>>

Raspberry Piセットアップ日記(2)

前回の続き。

1、JAISTからNOOBSをダウンロード

http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/images/NOOBS-2014-01-09/

2、解凍したZIPの中身をSDカードにコピー

3、Raspberry Piにマウス、キーボード、LANケーブル、HDMI-VGA変換アダプタ経由でVGAモニタに接続、
  SDカードを挿す
  電源ケーブルをつないで電源を入れる
  前回はここまでやった。

4、モニターつかないのでリビングのテレビにHDMIケーブルつないで作業。

5、OSインストール。
  NOOBSの起動画面で
   Raspbianをチェック
   言語に日本語を選択
   Installをクリック

6、しばらく画面の指示に従う。

7、raspi-config画面が出てくるが、いったんfinishに移動してenter

8、X起動
$ startx

9、デスクトップでLXTerminal起動

10、言語設定
  raspi-configから

  4.Internationalization Options
   I1.Change Locale → そのまま → jp_JP.UT8を選ぶ
   I2.Change Timezone →アジア →東京
   I3.Change keyboard Layout → 標準101キーPC → 日本語 → デフォルト
     →コンポーズキーなし → はい

11、日本語入力環境
コンソールベースでの運用にするつもりだが念のため。
  $ sudo apt-get update
  $ sudo apt-get install ibus-anthy
  $ sudo apt-get install fonts-takao

メニューからiBus設定 → iBus起動「はい」 → インプットメソッド→日本語→Anthy
  →追加→閉じる

右下にキーボードが表示され、半角/全角キーで「Aち」になり日本語が入力できることを確認

12、vncserverインストール
これも念のため
  $ sudo apt-get install tightvncserver
  $ tightvncserver
   初回はパスワード入力

ちなみにクライアントはRealVNCのVNC viewer。

とりあえずここまでOKになった!




2014年4月23日水曜日

Raspberry Piセットアップ日記(1)

日経Linux 2014/4号を見ながら以下のように作業。

1、JAISTからNOOBSをダウンロード

http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/images/NOOBS-2014-01-09/

2、解凍したZIPの中身をSDカードにコピー

3、Raspberry Piにマウス、キーボード、LANケーブル、HDMIケーブル(HDMI-VGA変換アダプタ)を 接続
  SDカードを挿す
  電源ケーブルをつないで電源を入れる

4、モニターつかないのでリビングのテレビにつなぐことにするが、
  HDMIケーブルが見当たらないのと夜中に騒がしくしたくないので
  今日はあきらめる


カードリーダー購入

昔買ったサンワサプライのカードリーダーでは16GBのSDを扱えないらしい。

http://kimagurepc.seesaa.net/article/245205080.html

amazonで急遽購入。

ELECOM カードリーダライタ USB2.0対応 SD+MS+CF対応 ホワイトFACE MR-A39HWHF1

ついでにこれも購入。

I-O DATA 静音冷却ファン搭載(電源内蔵)USB接続外付ハードディスク 外付ハードディスク 3.0TB HDE-U3.0J

2014年4月21日月曜日

Raspberry Pi購入

情報処理試験のできばえがよくなかったので景気づけにRaspberry Piを衝動買い。

秋葉で以下のものを購入。


Rapberry Pi Type B              \4,480 若松通商
Rapberry Pi ケース白           \1,420 若松通商
microUSB ACアダプタ             \720 ドスパラ
SDHC class10 16GB               \810 あきばおー
HDMI-VGA変換アダプタ        \1,480 千石電商
カテゴリ6 LANケーブル 1m       \220 千石電商
--------------------------------------------
合計                                   \9130

もうちょっと探せば9000円は切れたかなと思うのと
おそらくネットならもっと安くそろえられたであろう。

でもいいんだ。
GWのお楽しみにする。

2014年4月16日水曜日

iptablesでファイアウォール設定


覚書。
以下の例では、
ssh(22)
Oracle EM(1158)
Oracle (1521)
のポートを開ける設定。

環境

CentOS 6.5

参考

http://can.fujitoko.com/firewall.html


手順


1、/etc/sysconfig/iptablesを編集

#vi /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1619:241989]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1158 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

2、iptables再起動

# service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

3、確認
#iptables -L