2012年5月16日水曜日

iPhoneでWebページをスクロールせず画面キャプチャーする方法



iPhoneで画面キャプチャーは、電源ボタンとホームボタンを同時押しで取れますが、
Webページでスクロールが必要な場合は、
画面をスクロールしながら分割して取る必要があってこれって手間だなと思っていたら、
スクロールせず、全画面をキャプチャーできるアプリがありました。
f:id:ono51:20120515122711p:image:w120:left
f:id:ono51:20120515155909j:image:w120:left
注意事項 画像はモザイク処理しています。


Web Scroll Capture


まずは、「Web Scroll Capture」をApp Storeで検索してインストールしてください。
「web scroll」で検索すれば出てきます。
http://itunes.apple.com/jp/app/web-scroll-capture/id483112957?mt=8
2012/5/16現在は無料です。

スクロールキャプチャーの取り方


1点のみ設定変更が必要です。


  • 画面右下の[MORE]をタッチする

f:id:ono51:20120515125844p:image:w240


  • [Scroll]オプションをONに変更して画面左上の[BACK]ボタンで戻ります。

f:id:ono51:20120515125845p:image:w240


  • 画面左下の[URL]ボタンをタッチする

f:id:ono51:20120515125847p:image:w240


  • 閲覧したいサイトURLを入力します。

f:id:ono51:20120515125846p:image:w240


  • キャプターしたい画面に遷移して、画面中央したの[CAPTURE]ボタンをタッチします。

f:id:ono51:20120515125843p:image:w240
取った画像は、写真アプリから閲覧可能なので、
メールに添付して送信するかiTunesで画像を取り出します。

ユーザエージェントもiPhone用でスマホ用サイトも閲覧可能でした。


Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206


これまで自分で画像合成してたのでずいぶん楽になりました。
画面遷移作成が捗りますね。




2012年5月14日月曜日

KVMで仮想環境構築 for Ubuntu Server 12.04

近頃ずいぶん便利になった仮想化技術ですが、クリーンインストール環境がたまにほしくなるので、
KVM + QEMUを利用してCentOS 6.2Ubuntu Server 12.04のインストールとゲスト環境の複製までやってみます。

ホスト環境はこれまでセットアップしてきたUbuntu Server 12.04を利用します。

ハードウェアの前提確認

まずKVMを導入するにはCPUが仮想化に対応しているかホスト環境で確認します。
IntelのCPUの場合は、次のようにvmxが含まれれば対応しています。

・Intel VTの場合
grep vmx /proc/cpuinfo

flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
・AMD-Vの場合
grep svm /proc/cpuinfo

OSのダウンロード

インストールに使用するCentOS 6.2 と Ubuntu Server 12.04をダウンロードします。
cd /usr/local/src
curl -LO http://mirror.symnds.com/distributions/CentOS-vault/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
curl -LO http://ftp.iij.ad.jp/pub/linux/ubuntu/releases/precise/ubuntu-12.04.3-server-amd64.iso

ネットワークの設定(ブリッジ接続)

・参考
https://help.ubuntu.com/12.04/serverguide/network-configuration.html#bridging
http://www.linux-kvm.org/page/Networking

・bridge-utilsのインストール
sudo apt-get install bridge-utils
・設定ファイルの修正
vi /etc/network/interfaces 次のように修正して保存する
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
dns-search example.local

・ネットワークを再起動
sudo /etc/init.d/networking restart

・ネットワークの設定確認(br0の追加)
ifconfig -aの内容
br0       Link encap:Ethernet  HWaddr **:**:**:**:**:**  
    inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
    以下省略

ネットワークの設定(iptables)

・/etc/sysctl.confの修正
vi /etc/sysctl.conf
次の内容を追記して保存する
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.ipv4.ip_forward = 1
・設定を読み込み
sysctl -p /etc/sysctl.conf

KVM + QEMU のインストール

sudo apt-get install qemu-kvm virt-manager virt-viewer

イメージファイル作成

適宜容量は変更してください。
qemu-img create -f qcow2 /var/lib/libvirt/images/centos6.img 160G
qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu1204.img 160G
参考
qcow2形式なので、作成されるイメージファイルが160GB使用するわけではありません。
以下の手順で最小構成インストール直後のファイルサイズは3.3GB(centos6)と2.6GB(ubuntu1204) でした。またvirt-cloneで作成したファイルはそれ以下のサイズとなりました。

ゲストOSのインストール

・CentOS 6.2
virt-install --connect qemu:///system \
 --name=centos6 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=virtio26 \
 --disk path=/var/lib/libvirt/images/centos6.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/CentOS-6.2-x86_64-minimal.iso \
 --network bridge=br0 \
 --graphics vnc,port=5900,password=foobar,listen=0.0.0.0,keymap=ja
・Ubuntu Server 12.04
virt-install --connect qemu:///system \
 --name=ubuntu1204 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=ubuntuprecise \
 --disk path=/var/lib/libvirt/images/ubuntu1204.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/ubuntu-12.04-server-amd64.iso \
 --network bridge=br0 \
 --graphics vnc,port=5901,password=foobar,listen=0.0.0.0,keymap=ja

VNC接続

・VNCで使用するポートを開ける
環境に合わせて適宜変更してください。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900:5901
・VNCクライアントで接続して各ゲストOSをインストールする
各OSのインストールは省略いたしますが、ホスト名、IPアドレス、VNCのポート番号などは
マスター作成用に普段使用しないものを割り当てた方がよいかと思います。
セットアップが完了した仮想環境は複製して使い回せるため1台のサーバに複数の環境を導入する場合や、
複数のサーバに展開する場合を考慮してあらかじめ設計するとよいでしょう。

インストール完了後に再起動していない模様

OSインストールが環境してvirshコマンドでゲスト環境を確認したところ
いずれも状態がシャットオフで起動していませんでした。
virsh list --all
Id Name                 State
----------------------------------
  - centos6              shut off
  - ubuntu1204           shut off
・virshコマンドでゲストOSを起動します
virsh start centos6
virsh start ubuntu1204
・確認
virsh list --all
 Id Name                 State
----------------------------------
  1 centos6              running
  2 ubuntu1204           running

virshでゲストOSの再起動やシャットダウンができない

ホスト環境からvirsh shutdownコマンドを実行してもゲスト環境(centos6)がシャットダウンせず実行中のままでした。
この問題は、acpidをインストールして解決します。
・ゲストOSにacpidをインストールする
・CentOS 6.2 の場合
sudo yum install acpid.x86_64
/etc/init.d/acpid start

・Ubuntu Server 12.04の場合(最小構成でもインストールされていたためこの手順は不要です)
sudo apt-get install acpid service acpid start
ホスト環境からシャットダウンするか確認してみます。
virsh shutdown centos6
virsh shutdown ubuntu1204
どちらもシャットダウンできました。
virsh list --all
 Id 名前               状態
----------------------------------
  - centos6              シャットオフ
  - ubuntu1204           シャットオフ
これでゲスト環境の準備は完了です。次にゲスト環境を複製を試してみます。

クローン作成

・複製前の準備
一通りセットアップが完了した状態で不要なログなどを削除してから
シャットダウンして配布用マスターとして利用します。

・virtc-cloneコマンドでゲスト環境のクローン作成
virt-clone --connect=qemu:///system \
  -o centos6 \
  -n centos6clone \
  -f /var/lib/libvirt/images/centos6clone.img
・定義ファイルを一部修正
virsh edit centos6clone なぜかディスクがraw形式になっていたのでrawをqcow2に修正しました。
<disk type='file' device='disk'>:
<driver name='qemu' type='qcow2'/>:

vncのポートが重複していると起動しないため、graphicsタグを削除するかポート番号を変更します。
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>

virt-cloneがMACアドレス適当に割り当ててくれているのでこれをそのまま利用しますが、
CentOSではネットワーク設定に問題があり修正が入ったのでこのMACアドレスをメモしてください。
<interface type='bridge'>
<mac address='52:54:00:1f:b3:76'/>

・複製したゲストOSを起動する
virsh start centos6clone
・ホスト名を変更する(CentOS)
vi /etc/sysconfig/network
HOSTNAME=kvm2
・ホスト名を変更する(Ubuntu)
vi /etc/hostname
kvm3
・IPアドレスとMACアドレスの変更(CentOS)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=52:54:00:1f:b3:76
IPADDR=192.168.1.101
CentOSでは、virt-cloneで作成したイメージで起動すると、eth0がeth1に書き変わってしまいネットワークの起動に失敗しました。同じ現象と思われる記事 http://d.hatena.ne.jp/ngyuki/20110805/p1 もあるでの私だけではないようです。
dmesgには次のようなログが出力されます。
udev: renamed network interface eth0 to eth1
・eht0がリネームされた場合は次のファイルを削除する(CentOS)
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
・IPアドレスとMACアドレスの変更(Ubuntu)
vi /etc/network/interfaces
iface eth0 inet static
        address 192.168.1.102
再起動してホスト名とIPアドレスが変更されていることを確認します。
reboot
以上でゲスト環境の複製ができました。

kvm環境すごく便利ですね。
OpenStackやEucalyptusとまではいかなくても、
小規模なプライベートクラウドなら自作できそうですね。

2012年5月5日土曜日

Mosh (mobile shell) インストール for Ubuntu Server 12.04 LTS



前回のパッケージのアップデートに引き続き、SSHのインストールおよび設定を行います。
それに加え、最近気になっているMosh (mobile shell)も試してみます。

ファイアーウォール設定(ufw)


まずはファイアーウォールの設定でSSHに使用するポートを許可します。
下記の設定はあくまで一例であり、同一ネットワークはセキュアなのが前提です。
そのため環境により適宜変更してください。


sudo ufw default deny
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
sudo ufw limit 22/tcp
sudo ufw enable

コマンドの内容


  • デフォルトを拒否に設定する

  • 同一ネットワークからの22番ポートを許可する

  • 外部ネットワークからの22番は限定許可する

  • ファイアーウォールを有効にする



OpenSSHのインストール


apt-getでopenssh-serverをインストールします。


sudo apt-get install openssh-server


インストールが完了するとsshdが自動起動するので、別のPCなどのターミナルで接続します。
次に鍵を作成します。


ssh-keygen -t rsa
Enter file in which to save the key (/home/[ユーザ名]/.ssh/id_rsa): [Enter]キーを押す
Created directory '/home/[ユーザ名]/.ssh'.
Enter passphrase (empty for no passphrase): パスフレーズを入力して[Enter]キーを押す
Enter same passphrase again: 再度パスフレーズを入力して[Enter]キーを押す

cd $HOME/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

作成した秘密鍵(/home/[ユーザー名]/.ssh/id_rsa)を自分のPCなどにコピーします。


パスワード認証を停止


sudo vi /etc/ssh/sshd_config
次の項目の設定を追記または書き換え保存する
PasswordAuthentication no
UsePAM no


sshdの設定再読み込み後にログアウトして秘密鍵を使用して再度SSHで接続します。


sudo service ssh reload



Mosh用ファイアーウォールの設定


moshは、デフォルトでudpの60000から61000番ポートを使用するので、
今回はそのままポートを開けますが、このあたりはポリシーに従って適宜変更が必要です。
使用状況にもよりますが、モバイル用途なら常時ヘビーに使う感じがしないので、
使用する人数分かその倍ぐらいのポート数でも十分ではないかと思います。


sudo ufw allow proto udp from 192.168.1.0/24 to any port 60000:61000
sudo ufw limit 60000:61000/udp



Moshのインストール




  • サーバ側


sudo apt-get -y install mosh


Moshのバージョンをサーバとクライアントで合わせたい場合は、
ソースコードやgitからインストールしてください。
ちなみに今回のバージョンは、サーバ側1.1.3、クライアント側1.2と異なりますが動作しました。


  • クライアント側(Macの場合)


次のいずれかの方法でインストールしますが、今回はパッケージでインストールしました。


  • パッケージの場合

https://github.com/downloads/keithw/mosh/mosh-1.2.pkg


  • Homebrewの場合

brew install mobile-shell


  • MacPortsの場合

sudo port install mosh



Moshで接続する




  • クライアント側からmoshコマンドでサーバに接続する


mosh [ホスト名]



  • ポート番号を指定する場合


mosh -p [ポート番号] [ホスト名]


これでmosh接続完了です。

mobile shellというだけあって、WiFiを切ったりPCをスリープさせて復帰した後でも
すぐに再接続してコマンド入力できました。
ただし、screenやtmuxの代わりになるわけではないので併用するのがよさそうです。




2012年5月4日金曜日

Ubuntu Server 12.04 LTS のパッケージ管理



皆様、大雨の連休をいかがお過ごしでしょうか?
今日は、幸い?外出せず自宅にこもっているのでUbuntu Serverインストールの続きを書いてみます。

前回、Ubuntu Server 12.04 LTSを最小構成でインストールしましたが、
アプリケーションのインストールの前に、パッケージ管理について確認してみました。

パッケージ管理


Ubuntuのパッケージ管理は、主に次の3つがあります。







dpkgdebパッケージ管理システム
apt-getコマンドラインのパッケージ管理ツール
aptitudeテキストユーザーインターフェースのパッケージ管理ツール

apt-getとaptitudeの違いは、テキストユーザーインターフェースが使える以外にも依存関係のない使われなくなったパッケージの扱いなど何点かあるようです。
このあたりはdebianのマニュアル「apt-get/apt-cache と aptitude の比較」が詳しいですね。

aptitudeが良さそうなんですが、apt-getを使用してみます。
理由としては、上記のマニュアルで次の点が気に入りました。


  • コマンドラインで使用する

  • メモリーの消費は少なく、実行速度が早い

  • 推薦パッケージの自動インストールや自動削除を行わない




apt-getコマンドオプション


以下debianのマニュアルを引用しました。
















apt-get/apt-cache シンタックス説明
apt-get updateパッケージアーカイブメタデーター更新
apt-get install foo"foo" パッケージの候補バージョンをその依存関係とともにインストール
apt-get upgrade他のパッケージを削除すること無くインストール済みパッケージの候補バージョンをインストール
apt-get dist-upgrade <パッケージ>必要なら他のパッケージを削除しながらインストール済みパッケージの候補バージョンをインストール
apt-get remove foo設定ファイルを残したまま "foo" パッケージを削除
apt-get autoremove既に必要なくなっている自動済みパッケージを削除
apt-get purge foo設定ファイルを含めて "foo" パッケージを完全削除
apt-get clean収集されローカルに貯蔵されたパッケージファイルを完全消去
apt-get autoclean収集されローカルに貯蔵されたパッケージファイルのうち古くなったパッケージを消去
apt-cache show <パッケージ>"foo"パッケージに関する詳細情報を表示
apt-cache search <regex><regex> とマッチするパッケージを検索


パッケージ更新


インストール直後に、apt-getでさっそくアップデートしてみます。
また、リリースして間もないですが、カーネルのアップデートがあったので再起動します。
最後に、不要なパッケージの削除を行います。


sudo apt-get -y update
sudo apt-get -y dist-upgrade
sudo reboot
sudo apt-get -y autoremove


インストール済みのパッケージ一覧は、dpkgコマンドで確認します。


dpkg -l





2012年5月2日水曜日

Ubuntu Server 12.04 LTS 最小構成インストールしてみた(スクリーンキャプチャ付き)



スタートアップ系Webサービスではよく利用されてと思われるUbuntuですが、
「Ubuntu 12.04 LTS」がリリースされたのと、LTSが5年サポートになったのを記念して、
最小構成でインストールしてスクリーンキャプチャーを取ってみました。
ちなみに今回インストールするのは、サーバ版です。

Ubuntuのシェアが下がったという記事がたまにありますが、
おそらくこれはデスクトップの話で、サーバ用途ではないと思われます。
W3Techsによれば、Webサービスのサーバとしては、Debian、CentOSに続いて利用されています。
http://w3techs.com/technologies/details/os-linux/all/all
また、Redhatの10年サポートには及びませんが、
Ubuntuも12.04 LTSから5年サポートとなり企業でも導入しやすくなったのではないでしょうか。

ダウンロードはこちらから
http://www.ubuntu.com/download/server

Ubuntu Server 12.04 LTS 最小構成インストール


1. [日本語]を選択して[Enter]キーを押す
f:id:ono51:20120501110728p:image:w480

2. [Enter]キーを押す([Ubuntu Serverをインストール(I)]選択済み)
f:id:ono51:20120501110729p:image:w480

3. [Enter]キーを押す(<はい>が選択済み)
f:id:ono51:20120501110730p:image:w480

4. [Enter]キーを押す([日本]選択済み)
f:id:ono51:20120501110731p:image:w480

5. [Enter]キーを押す([日本語]選択済み)
f:id:ono51:20120501110732p:image:w480

6. [Enter]キーを押す([日本語]選択済み)
f:id:ono51:20120501110733p:image:w480

7. [Enter]キーを押す([eth0]選択済み)
f:id:ono51:20120501142124p:image:w480

8. ホスト名の入力画面が表示されますが、手動でネットワーク設定を行うため[esc]キーを押します。
DHCPでの自動取得の場合は、14へ
f:id:ono51:20120501110734p:image:w480

9. [Enter]キーを押す([ネットワークを手動で設定]選択済み)
f:id:ono51:20120501110735p:image:w480

10. IPアドレスを入力して[Enter]キーを押す
f:id:ono51:20120501110736p:image:w480

11. ネットマスクを入力して[Enter]キーを押す
f:id:ono51:20120501110737p:image:w480

12. ゲートウェイを入力して[Enter]キーを押す
f:id:ono51:20120501110738p:image:w480

13. ネームサーバアドレスを入力して[Enter]キーを押す
f:id:ono51:20120501110739p:image:w480

14. ホスト名を入力して[Enter]キーを押す
f:id:ono51:20120501110740p:image:w480

15. ドメイン名を入力して[Enter]キーを押す
f:id:ono51:20120501110741p:image:w480

16. 新しいユーザの本名(フルネーム)を入力して[Enter]キーを押す
f:id:ono51:20120501110742p:image:w480

17. あなたのアカウントのユーザ名を入力して[Enter]キーを押す
f:id:ono51:20120501110743p:image:w480

18. パスワードを入力して[Enter]キーを押す
f:id:ono51:20120501110744p:image:w480

19. 再度パスワードを入力して[Enter]キーを押す
f:id:ono51:20120501110745p:image:w480

20. [Enter]キーを押す(<いいえ>が選択済み)
f:id:ono51:20120501110746p:image:w480

21. タイムゾーンが正しいことを確認してカーソルまたはTABキーで<はい>を選択して[Enter]キーを押す
f:id:ono51:20120501110747p:image:w480

22. [ガイド ー ディスク全体を使う]を選択して[Enter]キーを押す
MySQL、LVM、jbd2の組み合わせで悪夢のような性能劣化が・・・あったような気がする。
f:id:ono51:20120501110748p:image:w480

23. [Enter]キーを押す
f:id:ono51:20120501110749p:image:w480

24. <はい>を選択して[Enter]キーを押す
f:id:ono51:20120501115021p:image:w480

ファイルシステムやパーティションの設定を変更する場合は、
<いいえ>を選択して[Enter]キーを押すと次のような設定画面に遷移する






パーティション選択
f:id:ono51:20120501110750p:image:w240
パーティション選択
f:id:ono51:20120501110751p:image:w240
ファイルシステムなどの選択
f:id:ono51:20120501112407p:image:w240

25. [Enter]キーを押す(HTTPプロキシの設定が必要であれば入力する)
f:id:ono51:20120501112448p:image:w480

26. [Enter]キーを押す([自動的にアップデートしない]選択済み)
f:id:ono51:20120502012048p:image:w480

27. [Enter]キーを押す。
最小構成とはいえ[OpenSSH server]ぐらいは[スペース]キーを押してチェックをつけてもいいかも。
f:id:ono51:20120501112450p:image:w480

28. [Enter]キーを押す(<はい>選択済み)
f:id:ono51:20120501112451p:image:w480

29. [Enter]キーを押す(<続ける>選択済み)
f:id:ono51:20120501112452p:image:w480

30. ログイン画面
f:id:ono51:20120501112453p:image:w480

最小構成での、Ubuntu Server 12.04 LTS インストール完了です。