AWS で sudo の設定を間違えると管理者になれなくなる

AWS 自体のことはあまりわからないのですが、デフォルトで ec2-user というのがあるようです。このアカウントは sudo でパスワードを入力しなくても実行出来るようになっています。

今回行ったのは apache グループに全てのコマンドで sudo 出来るようにする設定です。

sudo visudo

でファイルの一番下に以下を追加しました。

%apache ALL=(ALL) ALL
%apache
設定するユーザー名(% を初めにつけるとグループ名)
ALL
ホストの設定(通常ALL)
=(ALL)
使用できるユーザー権限(ALLなら全て)
ALL
使用可能なコマンド(複数指定は,(カンマ)を使用する)

上記の行を追加した状態で保存しました。

そして改めて sudo を実行すると


[[email protected] ~]$ sudo ls
[sudo] password for ec2-user: 

とパスワードを求められるようになりました…
ec2-user のパスワードは設定していないのでわかりません。

なので、管理者権限での操作が一切出来なくなりました…

apache グループに設定したはずなのになぜ ec2-user の設定が変更されたのかわけがわかりませんでした。
ふとグループを確認してみると、


[[email protected] ~]$ groups
ec2-user wheel apache

………apache…

ec2-user は apache グループに所属していました…
恐らく、ファイルの一番下に上記の一行を追加したために、NOPASSWORD が設定されている項目を上書きしてしまいパスワードを求められる用になったようです…

色々調べましたが…解決方法は見当たりませんでしたww

削除しかなくなりました。 sudo の設定をする前はユーザーのグループも確認するようにします。。。

AWS 上で PHP のエラー

AWS 上にて動かしていた Apache にブラウザでアクセス出来ない状態になっていました
アクセスログは空。エラーログにいくつか下記のエラーが発生していました。

PHP Fatal error: PHP Startup: apc_mmap: mmap failed: in Unknown on line 0
Segmentation fault

APC のエラーが発生していたので php.ini で APC を無効にしてみました。

apc.enabled = 1

ここの行を

apc.enabled = 0

に変更します。

その後に、Apache を再起動しました。

service httpd restart

すると問題なく接続出来るようになりました。

考えられる原因としては、恐らくAWS で割り当てられているメモリの量がAPCで設定されている値より低いということだと思われます。

子プロセスだけが生成されていく状態になるという情報もありました。(確認はしていません)

サーバーの状態を使いまわすときには注意が必要になるかもしれません。

WordPress の手動アップデート

WordPress のアップデートを行ってみます

以下のバージョンで確認
3.6.1 → 3.7.1
3.7.1 → 3.8 (3.8 で管理画面がフラットなデザインになりましたね!)

※作業中はサイトが利用できなくなるのでメンテナンス中等という表示を行った方が良いと思います

http://weble.org/2011/04/01/wordpress-manual-upgrade
このサイトのままなのですが、コマンドラインから行えるように軽く書いていきます

データベースのバックアップ

まず初めに全てのデータベースをバックアップします。

mysqldump --add-drop-table -u ユーザー名 データベース名 --single-transaction -p > dump.sql

–add-drop-table
テーブルデータの破棄クエリをダンプするファイルに挿入するオプション
復元する時に便利ですね

–single-transaction

このオプションだとテーブルをロックせず、トランザクションの範囲でバックアップしてくれるとのことだった。

http://php.tekmemo.com/?p=1388
Got error: 1044: Access denied for user 'ユーザー名@...' to database 'データベース名' when using LOCK TABLES

というエラーが出た場合に必要になります。検証してはないのですがテーブルをロック出来る権限を持っていないユーザーでバックアップを取ろうとすると発生するかもしれません(未検証)

プラグインの一括停止

WordPressの管理画面から一括停止を行う

WordPress のダウンロード

http://wordpress.org/
から最新版をダウンロードする

wget http://wordpress.org/latest.zip

※これは英語版になります

解凍して既存の wordpress を上書きする

unzip latest.zip
mv wordpress /var/www/html/wordpress_new

上書きするのは wp-content wp-config.php 以外の全てです。(日本語版だと wp-content/languages も必要?)

cd /var/www/html/
cp -r wordpress/wp-content wordpress_new/
cp -r wordpress/wp-config.php wordpress_new/
mv wordpress wordpress_old
mv wordpress_new wordpress

これで wp-content, wp-config.php 以外のファイルを上書きしたことになります。
(もっと簡潔に出来るといいのですが…)

ブラウザからサイトへアクセスしてデータベースを更新する

管理画面からプラグインを有効化

これで更新完了です

WordPress のプラグインを手動インストール

ここでは crazy-bone 0.5.2 を導入してみる

ダウンロードしてきた zip を解凍する
http://wordpress.org/plugins/crazy-bone/

unzip crazy-bone.0.5.2.zip

crazy-bone というフォルダができるのでそのまま WordPress の wp-content/plugins/ 以下に移動する

mv crazy-bone /var/www/html/wordpress/wp-content/plugins

※パスは一般的と思う場所になります

WordPress の管理画面へアクセスして crazy-bone のプラグインを有効化

以上で完了です。

IE8 未対応・不具合・注意点 まとめ

スクリプトを書いてて出てきたものや、調べ物しながら出てきたものなど未確認のもありますが、まとめてみました。

基本的にCSS3の要素は使用出来ない

css3 transition, transform
css3: :first-child 以外の擬似クラス (未確認)
css3: text-shadow (未確認)
css: rgba で指定した色

opacity は効かない

IE 独自の filter を使用する必要があります
filter: ‘alpha(opacity=0)’;

・jQuery のアニメーションを行う場合
$dom.css({filter: ‘alpha(opacity=0)’}).animate({opacity: 1}):
私の環境では上記のようにする必要がありました。

background-size・background-clip・複数の背景画像(未確認)

jQuery(JS)で画像のロードをする場合に attr(‘src’, ‘image.png’); 等を load の前に置くと動かない

// 動かない
$(img).attr('src', url).on('load', function() {
	...
});

// 動く
$(img).on('load', function() {
	...
}).attr('src', url);

width, height のパーセンテージ

良くは調べていないのですが
width: 500%; height: 500%;
等と指定すると綺麗に拡大されないようです

透明度指定がある子要素に position absolute か relative があるとその子要素に透過がされない

#id * 等で全選択かけるか * { filter: inherit; } を使うと適用されるようになります

・max-width: 100% で画像が表示されなくなる(詳細不明)
参考: http://creatorclip.info/2013/09/ie8-img-max-width-bug/

jQuery の $(‘‘).attr(‘src’, ‘image.png’); 等で要素を指定すると height, width 属性が勝手に追加される

$(‘‘);
など、何かを追加することで追加されなくなりましたが…原因がよくわかりません…

他のブラウザでは動作する状態でIEでのみ動かない状況で、デベロッパーツールを開くと問題なく動いてしまうプログラム

スクリプトの最後に

if (!window.console){
    window.console = {
        log : function(msg){
            // do nothing.
        }
    };
}

を追加すると動くようです(未確認)

スクロールアニメーションのセレクター

他のブラウザでは $(‘body’) で問題無いが、IEだと $(‘html,body’)としないと動作しませんでした。

※1 http://creatorclip.info/2013/09/ie8-img-max-width-bug/