2011年8月30日火曜日

ufwの使い方

アクセス制限をかけるために、ufw(Uncomplicated Fire Wall)を使ってみよう!、ということで、はじめての設定を行います。
以前iptableを使ったことがあるのですが、使いづらく、ufwのほうが楽だと思いました。


ステータスの確認
初めてなので、非アクティブになっています。
$ sudo ufw status
状態: 非アクティブ

有効にする設定
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。

$ sudo ufw status
Status: active

無効にする設定
$ sudo ufw disable
ファイアウォールを無効にし、システム起動時にも無効にします
$ sudo ufw status
状態: 非アクティブ

すでに用意されているルールが2つあります。
$ cd /etc/ufw/applications.d
$ ls
apache2.2-common openssh-server

何が書かれているのか見てみましょう。
$ ls
apache2.2-common openssh-server

$ cat apache2.2-common
[Apache]
title=Web Server
description=Apache v2 is the next generation of the omnipresent Apache web server.
ports=80/tcp

[Apache Secure]
title=Web Server (HTTPS)
description=Apache v2 is the next generation of the omnipresent Apache web server.
ports=443/tcp

[Apache Full]
title=Web Server (HTTP,HTTPS)
description=Apache v2 is the next generation of the omnipresent Apache web server.
ports=80,443/tcp

ルールの設定
ためしにルールを設定を設定してみます。
ルールの設定には、 sudo ufw allow ARGS を利用します。
ARGSは、上記のファイルの[]かっこ内に定義した名称です。
% sudo ufw allow "Apache Full"
ルールを追加しました
% sudo ufw allow "OpenSSH"
ルールを追加しました

$ sudo ufw status
Status: active

To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere

追加した定義の削除
削除するには、ufw delete allow RULE を用います。
$ sudo ufw delete allow "Apache Full"
ルールを削除しました

$ sudo ufw status
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere

特定のIPとPortを追加する場合
あるIP:Portからのアクセスを許容することもできます。
$ sudo ufw allow from 10.20.30.40 to any port 2011
ルールを追加しました
$ sudo ufw status
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2011 ALLOW 10.20.30.40

追加した特定のIPとPortを削除する場合
$ sudo ufw delete allow from 10.20.30.40 to any port 2011
ルールを削除しました
$ sudo ufw status
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere

コマンドがわからなくなったらヘルプを見ましょう!
$ sudo ufw help

2011年8月25日木曜日

パスワードなしでサーバーにログイン

あるサーバーへパスワードなしでログインする場合の方法です。
ここでの例は、AのコンピュータからBのサーバーへ
パスワードなしでログインします。


0. サーバーBへログインできることを確認します。
ログインできなかった、では話になりませんので…。
この時はパスワードが求められます。
$ ssh userb@serverb
userb@serverbs password:


1. 公開キーと秘密キーのペアを生成します。
ログインなしにするため、パスワード(passphrase)部分は
何も入力しないでEnterを押します。
例) Aのコンピュータにて実行

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/servera/.ssh/id_rsa):
Created directory '/home/servera/.ssh'.
Enter passphrase (empty for no passphrase): ★何も入力しない
Enter same passphrase again:         ★何も入力しない
Your identification has been saved in /home/servera/.ssh/id_rsa.
Your public key has been saved in /home/servera/.ssh/id_rsa.pub.
The key fingerprint is:
c3:e2:e5:c8:4b:b3:dd:d3:e2:a9:09:3c:c4:ad:8a:71 usera@computera
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| . o |
| + S |
| = * . |
| . E @ . . |
| + o B oo.. |
| . . o +o+o |
+-----------------+

2. 生成された公開キーのほうをSCP転送します。
例) AのコンピュータからBのサーバへ転送
$ scp id_rsa.pub userb@serverb:/home/userb/id_rsa.pub

3. 転送されてきた公開キーをauthorized_keysにマージします。
例) BのサーバーでAから送られてきた公開キーをauthorized_keysにマージ
$ cat id_rsa.pub >> authorized_keys 

4. authorized_keys のファイル権限は600にします。
$ chmod 600 authorized_keys

5. ログインしてみて、パスワードを求められないことを確認します。
$ ssh userb@serverb

2011年8月23日火曜日

MySQLでカラム型を知りたい

焦ってる時にいきなり思い出せないカラム型を見るコマンド。
それはDESC または DESCRIBE

Redmine1.1のusersテーブルをのぞいてみました。
mysql> desc users;

2011年8月22日月曜日

LVMの構築 ~6. LVのサイズ変更~

最初の図にはありませんが、LVのサイズ変更をする方法についてです。


アンマウント
一旦アンマウントしてから作業を行います。

fstabに記載していれば、下記コマンドでOK
$ sudo umount /home/LV_1

記載していない場合は、
$ sudo umount /dev/VG_1/LV_1

アンマウントされていれば、先ほどマウントしたものが、こちらに表示されなくなります。
$ df -h
ファイルシステム サイズ 使用 残り 使用% マウント位置
/dev/sda1 7.5G 1.3G 5.9G 18% /
none 242M 192K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 48K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw

LV増加
もともと12GBだったのを1GB増やして13GBにする場合

$ sudo lvextend -L +1G /dev/VG_1/LV_1
Extending logical volume LV_1 to 13.00 GiB
Logical volume LV_1 successfully resized

lvdisplayで見てみると、LV Sizeが13GBになってますね。

$ sudo lvdisplay
--- Logical volume ---
LV Name /dev/VG_1/LV_1
VG Name VG_1
LV UUID Jl8OQb-Y3iS-iQas-1ko9-TNqZ-uB2j-yrHFg5
LV Write Access read/write
LV Status available
# open 0
LV Size 13.00 GiB
Current LE 3328
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 251:0

ファイルシステムの変更
LVにあわせてファイルシステムも変更します。

$ sudo resize2fs /dev/VG_1/LV_1
resize2fs 1.41.11 (14-Mar-2010)
Please run 'e2fsck -f /dev/VG_1/LV_1' first.

e2fsckを先に実行せよ、とのことなので、実行してみます。
$ sudo e2fsck -f /dev/VG_1/LV_1
e2fsck 1.41.11 (14-Mar-2010)
Pass 1: Checking iノードs, blocks, and sizes
Pass 2: Checking ディレクトリ structure
Pass 3: Checking ディレクトリ connectivity
Pass 4: Checking reference counts
Pass 5: Checking グループ summary information
/dev/VG_1/LV_1: 11/786432 files (0.0% non-contiguous), 89841/3145728 blocks

改めて再実行
$ sudo resize2fs /dev/VG_1/LV_1
resize2fs 1.41.11 (14-Mar-2010)
Resizing the filesystem on /dev/VG_1/LV_1 to 3407872 (4k) blocks.
The filesystem on /dev/VG_1/LV_1 is now 3407872 blocks long.

再マウント
$ sudo mount -t ext3 /dev/VG_1/LV_1 /home/LV_1/

13Gになっていることが確認できますね。
$ df -h
ファイルシステム サイズ 使用 残り 使用% マウント位置
/dev/sda1 7.5G 1.3G 5.9G 18% /
none 242M 192K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 48K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
/dev/mapper/VG_1-LV_1
13G 159M 12G 2% /home/LV_1

今回試したのはここまでです。
初歩的なことばかりですが、いろいろ勉強になりました!

LVMの構築 ~5. マウント~

つくったLVMを使うのに、マウントする必要があります。

フォーマット
作成したLVを使う前に、フォーマットする必要があります。
$ sudo mkfs.ext3 /dev/VG_1/LV_1
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
786432 inodes, 3145728 blocks
157286 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3221225472
96 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

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

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

マウント
マウントポイントを適宜作成します。
$ mkdir /home/LV_1
マウントします。
$ sudo mount -t ext3 /dev/VG_1/LV_1 /home/LV_1/
マウントされたか見てみると、下記のように12G利用できるようになったのが分かりますね!
$ df -h
ファイルシステム サイズ 使用 残り 使用% マウント位置
/dev/sda1 7.5G 1.3G 5.9G 18% /
none 243M 192K 243M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 48K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
/dev/mapper/VG_1-LV_1
12G 159M 12G 2% /home/LV_1

fstabへの記載
毎回起動してもマウントされる状態になるようにfstabに記載しておきます。
$ sudo vi /etc/fstab
/dev/VG_1/LV_1 /home/LV_1 ext3 defaults 0 0

一旦rebootしてみて、問題ないようでした完了です!

LVMの構築 ~4. LVMの作成~

そして、LVMの作成。
ようやくLVMの作成です。
LV_1に12GBを割り当てることにしました。

lvcreate
論理ボリュームの新規作成を行います。
ボリュームグループ VG_1 上に12Gの論理ボリュームをLV_1のな前で
作る場合は下記のようなコマンドを実行します。
$ sudo lvcreate -n LV_1 --size 12G VG_1
Logical volume "LV_1" created

lvdisplay
論理ボリュームの情報を見ます。
$ sudo lvdisplay
--- Logical volume ---
LV Name /dev/VG_1/LV_1
VG Name VG_1
LV UUID Jl8OQb-Y3iS-iQas-1ko9-TNqZ-uB2j-yrHFg5
LV Write Access read/write
LV Status available
# open 0
LV Size 12.00 GiB
Current LE 3072
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 251:0

LVMの構築 ~3. VGの作成~

ここではVolumeGroup(VG)の作り方です。
あっというまにできます。

1個目と2個目をまとめて、1つのVGにした場合。

vgcreate
VGを定義し、それと同時にPVの中にPEが作成されます。
PVの1個目と2個目を合わせてVG_1にし、
3個目だけをVG_2にした場合は下記のようになります。
$ sudo vgcreate VG_1 /dev/sdb1 /dev/sdc1
Volume group "VG_1" successfully created

$ sudo vgcreate VG_2 /dev/sdd1
Volume group "VG_2" successfully created


どんなものができたかは下記コマンドで見てみました。
PVの時と同じように、それぞれが何のコマンドなのかは想像がつくと思います。

vgscan
$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "VG_2" using metadata type lvm2
Found volume group "VG_1" using metadata type lvm2

vgs
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
VG_1 2 0 0 wz--n- 15.99g 15.99g
VG_2 1 0 0 wz--n- 8.00g 8.00g

vgdisplay
$ sudo vgdisplay
--- Volume group ---
VG Name VG_2
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 8.00 GiB
PE Size 4.00 MiB
Total PE 2047
Alloc PE / Size 0 / 0
Free PE / Size 2047 / 8.00 GiB
VG UUID Xlel3X-rMSJ-4rvV-XV8f-PZNz-dMSe-Gh03SJ

--- Volume group ---
VG Name VG_1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.99 GiB
PE Size 4.00 MiB
Total PE 4094
Alloc PE / Size 0 / 0
Free PE / Size 4094 / 15.99 GiB
VG UUID 0qKvI6-z0sL-O62h-TzYB-EdxC-j1o0-a2R4Tu

LVMの構築 ~2. PVの作成~

Physical Volume(PV)の作成についてのメモです。

1パーティションが1PVになるので、pvcreateコマンドで、PVを作成します。
今回はパーティションを細かくわけなかったので、3つのPVができることになります。

その前に、lvm2をインストール必要あります。
$ sudo apt-get install lvm2

インストールしないとこんなエラーが出ます。
$ pvcreate /dev/sdb1
プログラム 'pvcreate' はまだインストールされていません。 次のように入力することでインストールできます:

lvm2をインストールして、いざ実行!
あっという間にできました。
これで、PVの初期化が完了しました。

$ sudo pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
$ sudo pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
$ sudo pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created

どんなものができたか、下記コマンドで見てみました。

pvscan
物理ボリュームの一覧を表示します。
今回は3つあるので、3行表示されていますね。
$ sudo pvscan
PV /dev/sdd1 lvm2 [8.00 GiB / 8.00 GiB free]
PV /dev/sdb1 lvm2 [8.00 GiB / 8.00 GiB free]
PV /dev/sdc1 lvm2 [8.00 GiB / 8.00 GiB free]
Total: 3 [23.99 GiB] / in use: 3 [23.99 GiB] / in no VG: 0 [0 ]

pvs
pvscanのように物理ボリュームの一覧を表示していますが、
pvsでは、書式制御ができます。
たとえば、「-o pv_name,pv_size」のオプションをつけることで
物理ボリュームの名前とサイズだけ表示させることも可能です。
なお、下記は全情報を表示しています。
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 a- 8.00g 8.00g
/dev/sdc1 lvm2 a- 8.00g 8.00g
/dev/sdd1 lvm2 a- 8.00g 8.00g

pvdisplay
各物理ボリュームについての詳細を出力します。
下記では、それぞれのPVが複数行の詳細を出力していますね。
$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 8.00 GiB / not usable 3.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2047
Free PE 2047
Allocated PE 0
PV UUID VPS27O-yOVJ-MuPZ-hsz4-4Ub9-hzt9-Nbni73

--- Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 8.00 GiB / not usable 3.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2047
Free PE 2047
Allocated PE 0
PV UUID CXBHn0-GhSL-WTGP-woo2-UeHv-tDJC-C2T16U

--- Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 8.00 GiB / not usable 3.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2047
Free PE 2047
Allocated PE 0
PV UUID DWnZGi-rdt5-8Tlg-n07f-4WRY-K0Cj-dRw7df

LVMの構築 ~1.ディスク追加とフォーマット~

LVMを構築するのに、まずはディスクを追加してHDDの容量を増やしておきます。

ディスクの追加
ディスクを追加するごとに
 /dev/sdb、
 /dev/sdc、
 /dev/sdd
というように、sd* の命名規則で増えていきます。
今回は8GBを3つ追加しました。

# デフォルト
$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5

# 1つ目追加
$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb

# 2つ目追加
$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc

# 3つ目追加
$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd


フォーマット
fdiskのコマンドでフォーマットを行います。
初めてだと意味不明な文言が…。
「m」がヘルプなので、とりあえず「m」を選択。

$ sudo fdisk /dev/sdb

デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x61dc093d で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。

警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
強く推奨します。 and change display units to
sectors (command 'u').

コマンド (m でヘルプ): m
コマンドの動作
a ブート可能フラグをつける
b bsd ディスクラベルを編集する
c dos 互換フラグをつける
d 領域を削除する
l 既知の領域タイプをリスト表示する
m このメニューを表示する
n 新たに領域を作成する
o 新たに空の DOS 領域テーブルを作成する
p 領域テーブルを表示する
q 変更を保存せずに終了する
s 空の Sun ディスクラベルを作成する
t 領域のシステム ID を変更する
u 表示/項目ユニットを変更する
v 領域テーブルを照合する
w テーブルをディスクに書き込み、終了する
x 特別な機能 (エキスパート専用)

領域の作成
新領域の作成なので「n」を選択し、プライマリパーティションの作成なので、次は「p」。
とりあえずデフォルト値を利用することで、最初と最後のシリンダの所ではEnter押下
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-8192, 初期値 1):  [←Enter押下]
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-8192, 初期値 8192):  [←Enter押下]
初期値 8192 を使います

パーティションのタイプ変更
「t」を選択してタイプ変更を行います。
デフォルトの「Linux(83)」ではなく、「Linux LVM(8e)」を選択します。
Linux LVMにすることで、VGの作成ができるようになります。
コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): L
== 一部抜粋==
83 Linux
8e Linux LVM

16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました



変更確認
変更したかどうかは、「p」で表示します。
コマンド (m でヘルプ): p

ディスク /dev/sdb: 8589 MB, 8589934592 バイト
ヘッド 64, セクタ 32, シリンダ 8192
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x61dc093d

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 1 8192 8388592 8e Linux LVM

終了
最後は「w」で書きこんで終了
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

ここでフォーマットは終了。
どんなふうにできたか見てみると、/dev/sdb1 が追加されてますね。
$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5
/dev/sdb /dev/sdb1 /dev/sdc /dev/sdd

同じように他の2つのディスクも変更します。

ちなみに変更前と変更後は、こんな感じです。

(変更前)
ディスク /dev/sdd: 8589 MB, 8589934592 バイト
ヘッド 64, セクタ 32, シリンダ 8192
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x32b6d984

デバイス ブート 始点 終点 ブロック Id システム

(変更後)
ディスク /dev/sdd: 8589 MB, 8589934592 バイト
ヘッド 64, セクタ 32, シリンダ 8192
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x32b6d984

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 1 8192 8388592 8e Linux LVM

LVMの構築 ~0. はじめに~

初めてのLVMの構築ということで、下記の5ステップに分けてメモに残しました。

  • 1.ディスク追加とフォーマット
  • 2.PVの作成
  • 3.VGの作成
  • 4.LVMの作成
  • 5.マウント

上記のステップでこんな感じのものを構築してみます。

今回参考にしたのは、こちらのサイトです。ありがとうございました!
http://sourceforge.jp/magazine/07/09/04/0115239

ログアウトをしてもscpが切れないようにする方法

SSHで時間のかかるscpでファイルを転送してると、SSHが切れるとファイル転送も切れてしまう。これでは転送が終わるまで帰れなくなってしまうことになります。
このような問題を解消するためにはどうすれば良いのでしょう?

scpを行うときは相手のサーバーパスワードが必要になるので、cronで実行ができないし、コマンドの最後に&をつけてもうまくいかない…。
(公開キーを使えばという案もありますが…)
そんな時は、nohup bg コマンドで対応できることを知りました。
どちらも初めてのコマンドです。


$ nohup scp -r xyz root@10.3.2.1:/opt/xyz
nohup: appending output to `nohup.out'
root@10.3.2.1's password: <パスワードを入力する>

Ctrl+z でジョブをサスペンド
[1]+ Stopped nohup scp -r xyz root@10.3.2.1:/opt/xyz
実行中のジョブを確認する。
$ jobs -l
[1]+ 19003 停止しました nohup scp -r xyz root@10.3.2.1:/opt/xyz

サスペンドしたジョブ「1」をバックグラウンドで実行再開する方法がbgコマンド。
$ bg 1
[1]+ nohup scp -r xyz root@10.3.2.1:/opt/xyz

ジョブの状態を確認する。
$ jobs -l
[1]+ 19003 Running nohup scp -r xyz root@10.3.2.1:/opt/xyz

とすると、ログアウトしても scp は止まらずに転送を継続してくれるのです。


こちらはまさに参考になりました。ありがとうございます。
http://d.hatena.ne.jp/yohei-a/20100212/1265950974

2011年8月19日金曜日

MySQLのSHOWコマンド

MySQLのSHOWコマンドでいろいろな情報が見れます。
私自身よく使うのがこちらです。
他にもまだまだたくさんありますが、メモとしてこのくらいに。。

show databases;
データベース一覧を表示

show tables;
テーブル一覧を表示

show columns from [テーブル名];
指定したテーブルのカラム情報を表示

show index from [テーブル名];
指定したテーブルのインデックス情報を表示

show variables [like キー];
MySQLのシステム変数を表示します。
例)show variables like "%max%";


2011年8月18日木曜日

第2回GTUG-girls(HTML5 Canvas編)

第2回のGTUG-girls@ニフティに参加してきました♪
今回はHTML5のCanvas編。
HTML5、ずっと気になっていたのです。

レポートはこちら。


◆なごみタイム
今回はポットラック式。
女性が多いので、お菓子がいっぱい(笑)
第1回に来た人も、今回初めての方もいて、新たな交流ができました。

◆説明タイム
講師は山崎大助さん。イケメンです(^^)
Canvasってどんなもの?ということからまずはデモ。

Canvas要素

<canvas id="***" width="" height="">

Canvasを描きたい所に下記のタグを追加します。

属性はこれだけ。
・id: ユニークID
・width:幅
・height:縦

※サイズ指定はstyle属性でも使用できるが、違ったふうになってしまうらしいです

コンテキスト
canvas要素はgetContext()のメソッドを持っている。引数は1つで、現在は"2d"のみです。将来"3d"出るのかな?といった所です。

var can = document.getElementById("drowarea"); //CanvasElement
var context = can.getContext("2d"); //描画するための描画Objectを準備!

座標と短形
座標は左上の(0,0)から相対的に数えます。

Canvasでは点、線、3角形、4面体の表現ができます。
3つの関数があり、それぞれx,y,width,heightの引数を取ります。
・fillRect(x,y,width,height)
・strokeRect(x,y,width,height)
・clearRect(x,y,width,height)


スクリプトは、上から順に読み込みますので、下の方に書かれた要素を上のほうで呼んでしまうとエラーになるので、それを防ぐために window.onload を利用します。
window.onload=function(){
drawShape();
}
最近ではスクリプト部を下の方に書くことも多いそうです。


HTML5で作られた歯医者さんのカルテを見せてもらい、
こういう使い方があるんだぁ、と思いました。

パス(線)
線を描くには下記の関数を順に呼び出します。

context.beginPath();//初期化処理で、始点が(0,0)になる
context.moveTo(); //始点の座標
context.lineTo(); //終点の座標
context.stroke(); //線をつなぐ
context.closePath(); //閉める

始点(moveTo)と終点(lineTo)を設定して、線を描く(stroke)を書けば、線を引いてくれるのです。
開始と終了はbeginPath と closePath が必要です。

Local Storage
ブラウザにデータを保存することができます。
保存に関しては、下記ファンクションを呼び出すだけです。

localStorage.getItem(KEYネーム); //データ取得
localStorage.setItem(KEYネーム, 値) //データ登録or更新
localStorage.clear();// データを全削除
localStorage.removeItem(KEYネーム); //1レコードのデータを削除


◆ハンズオンタイム
講師が用意したサンプルを用いながら、
お絵かきキャンバスの作成+クリアボタンの追加を行いました!

今回も新しいことが学べて楽しかったです♪

2011年8月11日木曜日

Ubuntuでのバージョンチェック

入れたモジュールのバージョンをチェックする場合のコマンドです。
Ubuntuインストール時にLAMPでついでに入れてしまおう、といった場合、
バージョンいくつだっけ?という時に必要になりました。

◆ Apache2
$ apache2 -v
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Nov 18 2010 21:19:09
他のLinuxだとhttpd -vとかあって統一されてないようです…


◆ MySQL
$ mysql --version
mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1


◆ Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:        10.04
Codename:       lucid


◆ ruby
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]

2011年8月10日水曜日

VMWareのUbuntuのクローン作成後の作業(ネットワークエラー対応)

vSphere Clientというツールを使ってVMのクローンを作ったら
ネットワーク周りでエラーが発生…。

なにこれ…。
eth0: ERROR while getting interface flags: No such device


IPを設定するのに、下記ファイルを編集

$ vi /etc/network/interfaces

その後

$ sudo /etc/init.d/networking restart

を実行したら

eth0: ERROR while getting interface flags: No such device

という経緯。


下記ファイルを開いてみると、コピー元のMACアドレスがeth0にあって、
eth1には、エラーのあるサーバーのMACアドレスが記載されてました。

$ vi /etc/udev/rules.d/70-persistent-net.rules

とりあえず、両方とも(SUBSYSTEM=="net"で始まる部分)コメントアウト。

$ sudo reboot

したら、無事認識!
70-persistent-net.rules のファイルにはeth0とeth1がうまくマージされた行が
1行追加されてました。
昔のMACアドレスが残っていたのが問題だったみたいなので、
きっとそれだけ削除すれば良かったのかも、と後から思い
昔のMACアドレスが定義されていた行(eth0)を削除して、
新規に追加された行のeth1をeth0に変更したら大丈夫でした。


こちらのサイトを参考にさせていただきました!
http://namahage.dip.jp/blog/2107

◆ VMをクローンしたら何したら良いのかをまとめると

・hostnameの変更
$ sudo vi /etc/hostname

・hostsの変更
$ sudo vi /etc/hosts
新IPと新hostnameに合わせましょう。
合わせないとsudoした時にsudoはできますが、エラーメッセージが出ます。

・IPの設定
$ sudo vi /etc/network/interfaces

・ethデバイスの再定義
$ vi /etc/udev/rules.d/70-persistent-net.rules
eth0とMACアドレスをあわせ、不要のものは削除 (上記の対応)

・reboot
$ sudo reboot

2011年8月9日火曜日

ある階層以下を検索結果に表示させない

Linuxのコマンドを使って、あるディレクトリ以下を検索させないようにするには、どうすれば良いのでしょうか?
よくあるのが、Subversionからチェックアウトしてきたファイルに .svn が含まれていて、それを省きたい場合です。

◆カレントディレクトリのファイル全部を見る場合
find . -type f

◆一部のディレクトリを省く場合
-prune のオプションを使うことで、指定したディレクトリ以下は対象にしません。
find . -name '.svn' -prune -o -type f

しかし、これだけだと、
./.svn
がまだ残ってしまうのです…。

そんな時は、最後に-printを付けます
理由はmanを見てね(^^;
find . -name '.svn' -prune -o -type f -print   

◆ 複数ディレクトリを対象にする場合
ORを用いて、-o -name 'XXXXX' -prune のセットを追加していきます。

find . -name '.svn' -prune -o -name 'XXXXX' -prune -o -type f -print   


2011年8月5日金曜日

MySQLの文字コード設定

mysqlコマンドでMySQLのデータベースに接続する際に設定と異なるキャラクターセットでログインする場合は
 --default-character-set={文字コード}
のオプションを利用することができます。

mysql --default-character-set=utf8 -u root -pXXXXX 


毎回つけるのが面倒な場合は、my.cnfの設定で変更が可能です。

% sudo vi /etc/mysql/my.cnf

[client]
port        = 3306
socket        = /var/run/mysqld/mysqld.sock
default-character-set = utf8   # ★追加

[mysqld]
#
# * Basic Settings
#
default-character-set = utf8   # ★追加

[mysql]
#no-auto-rehash    # faster start of mysql but no tab completition
default-character-set = utf8   # ★追加
 


設定されたかどうかを確認するには下記コマンドを用います。
SHOW VARIABLES LIKE 'char%';


MySQLに用意されている文字コードはこちらのコマンドで確認できます。
show character set;


MySQLインストール後に、特に何も変更していなければ
デフォルトでは latin1 が設定されます。

<注意>
上記はMySQL5.1の場合の設定ですが、
MySQL5.5以降では、[mysqld]セクションのdefault-character-setがなくなり、
character-set-serverに変わったそうです。


MySQLのバージョンチェックするにはこちら
select version();

+-----------------+
| version()       |
+-----------------+
| 5.1.37-1ubuntu5 | 
+-----------------+
1 row in set (0.02 sec)