月別: 2012年11月

.htaccess URL末尾の/(スラッシュ)保管

.htaccsee による URL のリライトを行っている場合、末尾の/(スラッシュ)が無い場合、
「Not Found」になってしまいます。
それを、 URL 末尾に/(スラッシュ)を付けた URL にリダイレクトすることで解消されます。

例)
http://demo.filetransfer.jp/category/flyers/1

http://demo.filetransfer.jp/category/flyers/1/

 

.htaccess URL末尾の/(スラッシュ)保管するサンプル

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* %{REQUEST_URI}/ [R,L]

JQuery Mobile 関連 セレクトボックスやラジオボタンを js から操作する時の注意点

jQueryMobile でセレクトボックスの要素を選択状態にしたり、ラジオボタンにチェックをつけたりといった操作を JavaScript から行っても、画面表示に変化がないという事象になったので調べました。

値のなどの操作を行った後に、描画の更新が必要でした。

下記のようなコード対応できます。

セレクトボックスの描画を更新する。

$("#myselect").selectmenu('refresh');

Firefox リロード(POST)時セレクトメニューの挙動 selected が効かない(Firefoxが選択を保持する)

Firefox でフォームのあるページをリロード(POST)すると Firefox が選択肢を保持します。

この場合、リロードしているのに、セレクトボックスの選択状態が想定と違う状態になってしまいます。

例)画面に選択肢の内容を表示する場合など。

それを解消するためには、下記のヘッダーの出力が必要です。

これで、選択肢を保持しません。

 

header(‘Expires: Thu, 01 Dec 1994 16:00:00 GMT‘);
header(‘Last-Modified: ‘ . gmdate(‘D, d M Y H:i:s’) . ‘ GMT‘);
header(‘Cache-Control: no-store, no-cache, must-revalidate’);
header(‘Cache-Control: post-check=0, pre-check=0’, false);
header(‘Pragma: no-cache’);

 

header(‘Cache-Control: no-cache, must-revalidate’);

header(‘Cache-Control: no-store, no-cache, must-revalidate’);

MySQLでDB移行する時はmysql_upgradeを行おう

mysqlのDB移行ではまったお話。

MySQL4系で動いてたシステムをMySQL5.5のサーバーへ移行する事となりました。その際にいくつかトラブルが発生し、はまってしまったお話です。

mysqlの移行作業

移行作業は以下のような形で行いました。
旧サーバーのデータベースのダンプを取得
[code]
/usr/local/mysql/bin/mysqldump -pXXXX -u root -x -A > /tmp/my_dump.db
[/code]

取ったdumpを新サーバーへ転送
[code]
scp /tmp/my_dump.db hoge@xxx.xxx.xxx.xxx:/tmp/
[/code]
新サーバーでリストア
[code]
mysql -u root < /tmp/my_dump.db
[/code]
FLUSHを実行
[code]
mysql -u root

FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
[/code]
新サーバー上からmysqlへの接続を確認して作業完了したのでした。

rootユーザーがなんかおかしい

問題はユーザー作成を行ったときに発覚しました。
rootでログインしてユーザー作成を行おうとするも、権限がないというエラーが発生してしまう。
[code]
mysql> GRANT ALL PRIVILEGES ON . TO hoge@localhost IDENTIFIED BY ‘パスワード’ WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user ‘root’@’%’ (using password: YES)
[/code]
権限の確認の為に以下のコマンドで確認したのですが
[code]
mysql -u root
mysql> select * from mysql.user where user=’root’;
[/code]
表示されるすべての項目は「Y」となっていました。

rootユーザーを再作成してみる

どうしても原因がわからなかったのでrootユーザーが変になったのだと決めつけた。
検証環境でrootユーザーを削除して再作成を実行してみました
[code]
mysql> DELETE FROM mysql.user WHERE user=’root’;
Query OK, 1 row affected (0.00 sec)
mysql> exit
[/code]
mysqlを権限フリーモードで起動
[code]
/path/to/mysqld_safe –skip-grant-tables &
[/code]
mysqlにログイン。rootユーザーのパスなしでログインできるようになっている。
[code]
mysql -u root
[/code]
パスワードの設定
[code]
mysql> update user set password=PASSWORD(‘パスワード’) where user=’root’;
mysql> use mysql;
[/code]
このままでは権限は何ももたない一般ユーザーと同じなのでrootユーザーへ様々な権限を付与します。
この内容は正常に動作しているmysql5.5サーバーのrootユーザーの設定を確認しました。

別のmysqlサーバーにて以下のようにして権限の種類を確認
[code]
mysql -u root
mysql> select * from mysql.user where user=’root’;
+————+——+———-+————-+————-+————-+————-+————-+———–+————-+—————+————–+———–+————+—————–+————+————+————–+————+———————–+——————+————–+—————–+——————+——————+—————-+———————+——————–+——————+————+————–+————————+———-+————+————-+————–+—————+————-+—————–+———————-+——–+———————–+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string |
+————+——+———-+————-+————-+————-+————-+————-+———–+————-+—————+————–+———–+————+—————–+————+————+————–+————+———————–+——————+————–+—————–+——————+——————+—————-+———————+——————–+——————+————+————–+————————+———-+————+————-+————–+—————+————-+—————–+———————-+——–+———————–+
| localhost | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
[/code]

この権限の通りに設定を行います。結果以下のコマンドになりました。
[code]
mysql> update user setSelect_priv=’Y’,
Insert_priv=’Y’,
Update_priv=’Y’,
Delete_priv=’Y’,
Create_priv=’Y’,
Drop_priv=’Y’,
Grant_priv=’Y’,
Alter_priv=’Y’,
Shutdown_priv=’Y’,
Process_priv=’Y’,
File_priv=’Y’,
Grant_priv=’Y’,
References_priv=’Y’,
Index_priv=’Y’,
Alter_priv=’Y’,
Reload_priv=’Y’,
Show_db_priv=’Y’,
Super_priv=’Y’,
Create_tmp_table_priv=’Y’,
Lock_tables_priv=’Y’,
Execute_priv=’Y’,
Repl_slave_priv=’Y’,
Repl_client_priv=’Y’,
Create_user_priv=’Y’,
ssl_cipher=”,
x509_issuer=”,
x509_subject=”,
max_questions=”,
max_updates=”,
max_connections=”
where User=’root’;
[/code]
しかしこのコマンドでエラー発生しました。Create_user_priv といった項目など存在ない、というのです。
mysql4のドキュメントを確認した所、たしかに「Create_user_priv」はない。
mysql5.1や5.5のドキュメントでは「Create_user_priv」が存在します。

・権限システムはどのように機能するか(mysql4.1) – http://dev.mysql.com/doc/refman/4.1/ja/privileges.html
MySQL 提供の権限(mysql5.1) – http://dev.mysql.com/doc/refman/5.1/ja/privileges-provided.html
・Privileges Provided by MySQL(mysql5.5) – http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html

つまり、バージョン違いによるprivilegesカラムの変化が問題だったんだよ!

なんだってー! Ω ΩΩ

なんとなくバージョン違いなのが問題なんだろうなー、とわかってはきたのですがどうしたら解決できるの・・・と困っていたのですが、この件は会社の何人かに相談していて、nakagawa氏から以下のようなページを教えてもらったのでした。

4.5.4. mysql_upgrade — MySQL アップグレードのテーブル チェック
http://dev.mysql.com/doc/refman/5.1/ja/mysql-upgrade.html

上記のページを確認してただ以下のコマンドを実行
[code]
mysql_upgrade
[/code]
このコマンドにより
[code]
mysql> select * from mysql.user where user=’root’;
[/code]
で確認した所 「Create_user_priv」の項目ができている事を確認。

この上で上記の権限を付与さしてあげました。
[code]
mysql> update user setSelect_priv=’Y’,
Insert_priv=’Y’,
Update_priv=’Y’,
Delete_priv=’Y’,
Create_priv=’Y’,
Drop_priv=’Y’,
Grant_priv=’Y’,
Alter_priv=’Y’,
Shutdown_priv=’Y’,
Process_priv=’Y’,
File_priv=’Y’,
Grant_priv=’Y’,
References_priv=’Y’,
Index_priv=’Y’,
Alter_priv=’Y’,
Reload_priv=’Y’,
Show_db_priv=’Y’,
Super_priv=’Y’,
Create_tmp_table_priv=’Y’,
Lock_tables_priv=’Y’,
Execute_priv=’Y’,
Repl_slave_priv=’Y’,
Repl_client_priv=’Y’,
Create_user_priv=’Y’,
ssl_cipher=”,
x509_issuer=”,
x509_subject=”,
max_questions=”,
max_updates=”,
max_connections=”
where User=’root’;
[/code]
rootの設定が完了したら今は権限スルーモードで立ち上げているいるのでいったん終了して普通モードで起動します
[code]
/path/to/mysqld_safe &
[/code]
これでログインしてユーザーが作成できるか確認します
[code]
mysql -u root
mysql> GRANT ALL PRIVILEGES ON . TO hoge@localhost IDENTIFIED BY ‘パスワード’ WITH GRANT OPTION;
[/code]
成功しました!

まとめ

古いバージョンのmysql dumpを最近のmysqlに流し込んだ時は mysql_upgradeを実行し、mysqlテーブルを最新仕様にしておく。また、その後rootなどの管理ユーザーに適切な権限を付与する必要があるという事を学びました。

考えたらDB単位での移行であればこの問題はおきないでしょうね。まるごと移行を行うときは注意、というお話でした。

Aiで画像を書き出すTips ~準備編~

デザイナーさんからデータがAiで来た時、みなさんはどうしてますか?

Photoshopで作業?
それでもいいのですが、
私は、Illstrator大好き人間なので、そのままAiで作業しちゃいます。

その際に困らないようにTipsをmemoしておきます。
今回は準備編です。

AiをWEB用に設定しちゃいましょう!

※今回はwin/cs5の環境でお届けします。

STEP1 : 環境設定 -> 単位

ai01

環境設定から「単位」を選びましょう。

STEP2 : 有無を言わさず「ピクセル」に

ai02

「単位」を全部「ピクセル」にしちゃいましょう。
AiをWEB制作以外で使う人は、ちゃんとその都度変えた方がいいと思います。。。!

STEP3 : 止めの「ピクセルビュー」

WEBはピクセル命。Aiもピクセル視点にしましょう。

こうなります。

 ※クリック推奨
(シーズマガジン9月号の時に作成した素材です)

ピクセルビューをON・OFFにするだけでこんなにもAiの世界は違うんです。

どうしてピクセルにするの?

WEBはピクセルの世界だから

コンピュータにおける画像形式は、「ベクタ形式」と「ラスタ形式」の2つが代表的です。
Aiの表示は「ベクタ形式」なので、線やパスがキレイに表示され、
WEBサイトやビットマップ画像と呼ばれるものは「ラスタ形式」によって、ピクセル単位で表示されます。

…ということは通常のAiの表示形式だと、WEBデザインをする上でふさわしくない環境だと言えます。

なので、AiでWEBデザインないし画像の書き出しをする際には、
先に紹介した説明を見て、最初からピクセルの世界でモノゴトを見れるようにしておきましょう。

そうすれば、今後の作業効率もあがりますし、コーダーさんや自分自身が画像を書き出す際にも
「データの時より書き出した画像が汚い!どうしてこの画像切れてるの?!」
みたいなこともなくなる…はずです。

次回は書き出し編

をお届けしていこうと思います。
応用としてスライス編も出来ればいいなと思っています。
今回のTipsが今後の制作のお役にたてると幸いです^0^

Linuxサーバーでpdftkを使ってpdfファイルを結合

pdftkはO’Reilly の PDF Hacks でも紹介されている PDF 操作ツールです。

Linuxサーバーのコマンドにてpdfを変換させる必要が出てきたので検証しました。
比較を行ったわけではないのですが、かなり高速なようです。

インストール

各OSに対応したインストール方法が、公式サイトで提示されています。
http://www.pdflabs.com/docs/install-pdftk/
検証機はDebianの為、以下のコマンドでインストールできました

apt-get install pdftk

コマンド例

以下の公式サイトの使用例を翻訳しました
全部ではないので詳細は以下を確認してください。

 

Pdftk Examples
http://www.pdflabs.com/docs/pdftk-cli-examples/

複数のPDFファイルを結合する。

(1.pdf 2.pdf 3.pdf が結合され 123.pdf が生成されます)

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

 

複数のPDFファイルを結合する。(ハンドラー使用例)

(1.pdf 2.pdf が結合され 12.pdf が生成されます)

pdftk A=1.pdf B=2.pdf cat A B output 12.pdf

 

複数のPDFファイルを結合する。(ワイルドカード使用)

(カレントディレクトリのpdfファイルが結合され combined.pdf が生成されます)

pdftk *.pdf cat output combined.pdf

 

複数のPDFファイルのページを指定して結合する。(ワイルドカード使用)

(A(one.pdf)ファイルの1~7ページ、B(two.pdf)ファイルの1~5ページ、A(one.pdf)ファイルの8ページが順番に結合され
combined.pdfが生成されます。)

pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf

ページの指定方法は以下のような形です

1-end (はじめから最後までのページ。つまりデフォルト)
1-6 (1~6ページ)
6-1 (1~6ページを逆順で)
4 (4ページ目だけ)
5 11 20 (5ページ、11ページ、20ページ)
1-6even (偶数ページの取得 → 2 4 6)
1-6odd (奇数ページの取得 → 1 3 5)

 

はじめのページを90度回転

※ページ指定の後にEをつけると90度回転

pdftk in.pdf cat 1E 2-end output out.pdf

 

すべてのページを180度回転

※ページ指定の後にSをつけると90度回転

pdftk in.pdf cat 1-endS output out.pdf

回転の指定はN:0 E:90 S:180 W:270 L:-90 R:+90 D:+180です。
Rが右回転、Lが左回転と考えれば問題ないです。
上記のページの指定と併せて利用できます。

5-25oddE (奇数ページの取得 して90度回転)

 

PDF 暗号化。権限はすべて許可

pdftk mydoc.pdf output mydoc.128.pdf owner_pw パスワード

 

PDF 暗号化。開いた時にパスワードをきかれる

pdftk mydoc.pdf output mydoc.128.pdf owner_pw パスワード user_pw パスワード

 

PDFのmetaデータなどをテキストファイルにアウトプット

pdftk mydoc.pdf dump_data output report.txt

感想

すごく強力なツールでした。
PHPなどから呼び出してpdf結合サービスなんてWEBアプリを作ってみるのも面白いかもしれないですね。

HTMLのコードからCSSセレクタを自動出力してくれるジェネレーター

CSSセレクタの入力って、結構面倒ですよね。

私の場合、これまでは、まずHTMLコードをコピーしてCSSファイルに張りつけ、そしてそのコードの中から必要なセレクタを残していくという作業を行っていました。

この方法が、タイピングに自信のない私ににはピッタリで、かつタイプミスによってスタイルが効かないなどのトラブルも起こりにくい方法だと思っていたのですが、もっといい方法を見つけました。

知っている方も多いかもしれませんが、便利なのでご紹介。

 

CSS Selector Generator

 

使い方は簡単で、

 

Step1: まずは、HTMLのコードをまるごとテキストエリアに貼付けます。

 

Step2: つぎに、文字コードや、あらかじめ除外しておきたい要素などを設定して、「CSSを出力」ボタンを押すだけ。

 

Step3: あとは、出力されたコードをありがたくコピーさせていただきます。

 

CSSファイルに貼付けたあとは、Zen-codingなどで楽しくマークアップしちゃいましょう。
作業効率アップ間違いなしの「CSS Selector Generator」。ホントお世話になってます。

EC2でCentOS6のEBS-Backed AMIをゼロから作る

はじめまして。サーバーインフラ担当の原口です。

64bitの完全クリーンなCentOS環境のEBS-Backed AMIを作成する手順です。
Amazon公式のAMIを使えよ!って話なんですがOSって基本なのでシーズでは完全にゼロからクリーンインストールを行ったCentOSを用意して使用しています。今回はその手順を公開したいと思います。

※2013/06/10 作成したEBSをAMI化する を編集しました
※2013/06/13 CentOSのいつからかのバージョン(kernel)からfstabにてLABELでの指定を行っていると以下のようなエラーが出た後にKernel Panicとなるようになっていたので、fstabとgrubの設定を修正しました。

dracut Warning: No root device "block:/dev/disk/by-label/_\x2f" found

この手順作成にあたり、以下のブログやサイトを参考にしました。

[Amazon EC2] AMI をゼロから作る CentOS 6.2 / S3-Backed 版
SUZ-LAB謹製 CentOS AMI 6.0.0″の作り方
Amazon EBS-Backed AMI の作成 (公式)
Amazon loopback S3-Backed の作成 (公式)
Sharing AMIs Safely

事前準備

https://portal.aws.amazon.com/gp/aws/securityCredentials
・X.509証明書
→AWSに登録したら新規作成が必要。作成した証明書や秘密鍵は大切に保存。
基本的に何個も作る必要はなくて1個あればOKです。
作成したOSイメージをAMIとして登録するのに必要です。

適当なPublic AMIでインスタンス作成

RightScaleのCentOSでインスタンス作成します。
AMI: RightImage_CentOS_6.3_x64_v5.8.8 (ami-7c9e237d)

Amazon EC2 AMI Tools のインストール

起動したインスタンスへログインしてAmazon EC2 AMI Toolsをインストールします。

rubyが必要なのでまずはrubyのインストール

yum install ruby

続いてec2-ami-toolsのインストール

cd /usr/local/src
wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
rpm -ihv ec2-ami-tools.noarch.rpm

EBSを作成してアタッチ

20GBくらいで適当なEBSを作ってインスタンスにアタッチ。この作成した容量はそのままAMIの基本容量となるので、ここまで必要がなければ8GBくらいで作ってOKです。
/dev/sdfとして認識されるとかかれているけど実際は/dev/xvdf として認識されるので注意して下さい。

EBSをフォーマット&マウント

アタッチしたEBSをインスタンス上でフォーマットして適当なところにマウントします。

CentOS6からデフォルトでext4なのでext4でフォーマット

mkfs.ext4 /dev/xvdf

できたら適当なとこにマウント

mkdir /data
mount /dev/xvdf /data

dfでマウントできたか確認を行って下さい。

インストール用のファイルを作成

ここからはアタッチしたボリュームへのCentOSインストールの事前準備となります。

まずはデバイスファイルの作成。

cd /data
mkdir etc proc dev
vi etc/fstab

以下のように作成

/dev/xvde1 / ext4 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
mount -t proc none proc

インストール用の yum.conf を作成

今回はrikenさんのmirrorを使用したいと思います。
まずは鍵ファイルを入れておきます。

cd /data
wget -O ../RPM-GPG-KEY-CentOS-6 http://ftp.riken.jp/Linux/centos/RPM-GPG-KEY-CentOS-6

repos.confの作成

vi ../repos.conf

以下のように編集

[ami-base]
name=CentOS-6 - Base
mirrorlist=http://mirrorlist.centos.org/?release=6&amp;arch=x86_64&amp;repo=os
gpgcheck=1
gpgkey=file://${PWD}/../RPM-GPG-KEY-CentOS-6
<h3>released updates</h3>
[ami-updates]
name=CentOS-6 - Updates
mirrorlist=http://mirrorlist.centos.org/?release=6&amp;arch=x86_64&amp;repo=updates
gpgcheck=1
gpgkey=file://${PWD}/../RPM-GPG-KEY-CentOS-6

CentOS6のインストール

準備が整ったのでCentOS6のインストールを行います。
ついでにec2-ami-toolsのインストールも行っています。
この作業は時間がかかります。

cd /data
setarch x86_64 yum -y -c ../repos.conf --installroot=$PWD --disablerepo=* --enablerepo=ami-base,ami-updates groupinstall Core
setarch x86_64 yum -y -c ../repos.conf --installroot=$PWD --disablerepo=* --enablerepo=ami-base,ami-updates install kernel
setarch x86_64 yum -y -c ../repos.conf --installroot=$PWD --disablerepo=* --enablerepo=ami-base,ami-updates install ruby rsync
rpm -Uvh --root=$PWD http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
wget -O usr/bin/ec2-metadata http://s3.amazonaws.com/ec2metadata/ec2-metadata
chmod +x usr/bin/ec2-metadata

grubの設定

grubの設定
以下のようにgrubのmenu.lstを作成します

cat &gt; boot/grub/menu.lst &lt;&lt;EOS
default=0
timeout=0
hiddenmenu
title CentOS6.4
root (hd0)
kernel /boot/vmlinuz-$(rpm --root=$PWD -q --queryformat &quot;%{version}-%{release}.%{arch}\n&quot; kernel) ro root=/dev/xvde1
initrd /boot/initramfs-$(rpm --root=$PWD -q --queryformat &quot;%{version}-%{release}.%{arch}\n&quot; kernel).img
EOS

ネットワーク設定

ネットワーク設定ファイルを作成します。
初回のIP取得はDHCPを使って行われます。

vi /data/etc/sysconfig/network-scripts/ifcfg-eth0

以下のように編集。

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
vi /data/etc/sysconfig/network

以下のように編集。

NETWORKING=yes
vi /data/etc/hosts

以下のように編集。

127.0.0.1 localhost.localdomain localhost

rc.local に ssh 公開鍵を取得する設定を追加

初回起動で公開鍵を設定できなければ、だれもログインできないインスタンスとなる為、必須作業です。
今回のスクリプトでは起動時にec2-ami-toolsの更新も行われるように作成されています。

vi /data/etc/rc.local

以下の文を追記。

#Update the Amazon EC2 AMI creation tools
rpm -Uvh http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
#Update ec2-metadata
wget -O /usr/bin/ec2-metadata http://s3.amazonaws.com/ec2metadata/ec2-metadata
chmod 755 /usr/bin/ec2-metadata
if [ -f "/root/firstrun" ] ; then
dd if=/dev/urandom count=50|md5sum|passwd --stdin root
rm -f /root/firstrun
else
echo "* Firstrun *" &amp;&amp; touch /root/firstrun
fi
if [ ! -d /root/.ssh ] ; then
mkdir -p /root/.ssh
chmod 0700 /root/.ssh
fi
ATTEMPTS=5
FAILED=0
#Fetch public key using HTTP
while [ ! -f /root/.ssh/authorized_keys ]; do
curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key &gt; /tmp/aws-key 2&gt;/dev/null
if [ $? -eq 0 ]; then
cat /tmp/aws-key &gt;&gt; /root/.ssh/authorized_keys
chmod 0600 /root/.ssh/authorized_keys
rm -f /tmp/aws-key
echo "Successfully retrieved AWS public key from instance metadata"
else
FAILED=$(($FAILED + 1))
if [ $FAILED -ge $ATTEMPTS ]; then
echo "Failed to retrieve AWS public key after $FAILED attempts, quitting"
break
fi
echo "Could not retrieve AWS public key (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."
sleep 5
fi
done

各種設定

sshdの設定

perl -p -i -e 's,^#PermitRootLogin yes,PermitRootLogin without-password,' etc/ssh/sshd_config
perl -p -i -e 's,^#UseDNS yes,UseDNS no,' etc/ssh/sshd_config
perl -p -i -e 's,^PasswordAuthentication yes,PasswordAuthentication no,' etc/ssh/sshd_config

SELinuxの設定

vi /data/etc/sysconfig/selinux
SELINUX=enforcing
↓
SELINUX=disabled

作成したEBSをAMI化する

ここまででCentOSディスク(EBS)の作成は完了です。
ここからはこのEBSイメージをAMI化する作業です。

マウントしているEBSの不要ファイルを削除してアンマウント

cd /data
setarch x86_64 yum -y -c ../repos.conf --installroot=$PWD --disablerepo=* --enablerepo=ami-base,ami-updates clean all
cd ..
umount /data/proc
umount /data

アンマウントが完了したらAWSの管理画面より、このEBSのスナップショットを作成します。
EBSを選択し「Create SnapShot」を選択します。

スナップショット作成が完了したらいよいよAMIの登録作業です。

登録にはX.509証明書が必要です。
事前準備にて用意した[X.509の鍵] と [X.509の証明書]をインスタンスの任意の場所に保存します。
その後、以下のコマンドにてAMI登録を行います。
ec2-register -K [X.509の鍵] -C [X.509の証明書] –region [リージョン] -a [アーキテクチャ] -d [概要] -n [名前] -s [スナップショット名]
例えば、今回は東京リージョンで64bit版なので以下のようなコマンドとなります。
ec2-register -K pk-xxxxxxxxxxxxxxxxxxx.pem -C cert-xxxxxxxxxxxxxxxxx.pem –region ap-northeast-1 -a x86_64 -d “centos6 clean install ami 2012/xx/xx” -n centos6_clean_2012 -s snap-xxxxx

※2013/06/10 編集 (以下の方法の方が簡単なので編集しました)

スナップショット一覧から作成したスナップショットを選択し、右クリックメニューから
「Create Image from EBS Snapshot」を選択します。

出てくるウィンドウで以下の内容を編集します。

Architecture: x86_64
Kernel ID: aki-44992845

これでAMIが作成されます。

AMIの確認

AWSの管理画面から登録したAMIの存在を確認できると思います。
このAMIを右クリックしてインスタンスを作成してみましょう。
インスタンスが作成されログインができれば完成です。

今後のAMIの作成

クリーンなCentOS-AMIの作成が完了したら自分ごのみにカスタマイズする事となるでしょう。
その後、AMIを作成したい場合の方法ですが、すごく簡単です。

カスタマイズ済のインスタンスを右クリックで[Create Image (EBS AMI)]というメニューを選ぶ事でAMI登録する事が可能です。

終わり

以上で独自EBS-Backed AMIの作成方法は終了です。
サービスを開始して数年経ちましたが未だに複雑な作業だなぁ・・・と思ってしまいます。
コンソール機能やそこからISOイメージからOSインストールできる機能が今後できるととてもうれしいですね。

クリエイターズブログ始まります!

ハジメマシテ!
株式会社シーズのクラタです。

サイトリニューアルに伴い、クリエイターズブログを新たに開設いたしました。

・プログラムTIPS
・WEBについてのウンチク
・ITよもやま話

などなど。。。。。。

WEBクリエーションにまつわる様々なことをシーズ社員が書いていきます!
是非ご覧ください!

© SEEDS Co.,Ltd.