Archive for the ‘Linux(CentOS)’ Category

私のLinux環境がまともに動かないのはどう考えてもSELinuxが悪い!

インストールしたばっかりのCentOSで、特にWebまわりでな〜んか動きがおかしいぞ、ってときは、大抵、SELinuxの設定でおかしなことになっていたりします。

まず確認する

getenforce を実行してみて、SELinuxがどんな状態になってるかを確認する
ハマってるときは大抵 Enforced になっております。
setenforce で Permissive にしてあげて一度様子を見るか(使いたい場合)、/etc/selinux/config で、SELinux=の引数を「Disabled」にして再起動か(「お前に用はない!」ポリシーの場合)、いづれかをします。

ちなみに、「Enforced」「Permissive」「Disabled」の3つがありますが、それぞれ

  • Enforced … ポリシーを適用し、違反があったら拒否する
  • Permissive … ポリシーは適用するが、違反がログに残すだけで、見逃す
  • Disabled … ポリシー適用もしない(完全にオフ)

でも「切ったら負け」の場合

わかりやすい解説をしてるサイトがなかなかなくて。
いろいろ探してみたら、ここにたどりつきました。
第一人者がやさしく教える新SELinux入門 – 第一人者がやさしく教える新SELinux入門—目次:ITpro
ユーザー権限に加えて、「ドメイン」×「タイプ」×「許可アクセス」で制限するのね。

ls -lZ で、ファイル/ディレクトリに対して、どういうタイプが設定されているかを見ることが出来ます。
ls -lZの結果
これを確認したかったがために、久々にCentOSのVMを起動したのは内緒です。
ちなみにこのVM、Squidで透過proxyでいろいろやりたかったときに実験で作ったやつでした。
壁紙は、Squidだけにイカ娘です ;-)

まとめ

もう少し勉強しないとあかんなーってこと。
さきほどのサイトを読みつつ自分でいじればわかりそうな気がしてきました。

とりあえず。
「私のLinux環境がまともに動かないのはどう考えてもSELinux(をまともに設定してない自分)が悪い!」
ってことで。

もう少し理解できたら続編を書くかもしれません。

表題の元ネタ

ええ……「私がモテないのはどう考えてもお前らが悪い!」です。
いまアニメでやってますが1話までしか見てなかったり…
TVアニメ「私がモテないのはどう考えてもお前らが悪い!」 – ガンガンONLINE -SQUARE ENIX-

LVMでファイル消しちゃったときの復旧方法(VM利用を前提)

実は…VMのLinux上で開発してたときに間違ってファイルを消してしまいました(爆)
調べてたら、extundeleteってのがありますので、それに頼りました。(ちなみにext3,ext4が対象です)
しかも、(CentOSのせた)LVM(論理ボリューム)なので、さらに厄介です。

まず、やっちまったLinux上でrunlevelを1にします。1になったところですかさずshutdown。

su
telinit 1
shutdown

そして、対象のハードディスクのイメージを安全な場所にコピーします(バックアップ)。

次に、LVMをマウントしてないLinuxを1つ用意します。
(ちなみに私のとこでは、別にDebianの環境があったので、それを使いました)
このマシンにさきほどの(復旧したい)ディスクイメージをつなぎます。
そしてそのマシンに、extundeleteを入れます。
C++と、ext2fsライブラリがいります。Debianだとこれで入ります。

aptitude install g++
aptitude install ext2fs-dev

extundeleteを展開し、configureしてmakeします。

bunzip2 -c -d extundelete-0.2.0.tar.bz2 | tar xvf -
cd extundelete-0.2.0
./configure
make
make install

デフォルトでは、LVMはマウントされてないはずなので(dfしてみてマウントされてなかったら大丈夫)、これからLVMの確認作業です。
pvscanで、いま繋がってるLVMのPhysical Volume一覧がでてきます。

pvscan

vgscanで、いま繋がってるLVMのVolume Group一覧がでてきます。デフォルトで「VolGroup00」とか出るあれです。

vgscan

lvscanで、論理ボリューム(Logical Volume)一覧がでてきます。

lvscan

いづれも、引数なしでOKです。

これで、LVMの VolumeGroup と LogicalVolume がわかると思います。
デフォルトは「VolGroup00」、「LogVol00」のはず。

これまでの /dev/sda1 と同じようなデバイス指定方法だと、

/dev/VolGroup00/LogVol00

みたいなかんじになります。

わかったところで、extundeleteを実行します。

extundelete --after (エポック時間) --restore-all /dev/VolGroup00/LogVol00

「エポック時間」は、time(2)で返される、1970年1月1日0時ジャストからの経過秒数です。
これで、指定時間「以降」に削除されたファイルが復元されます。

ま、LVMでも仕組みわかれば従来のファイルシステム同様に扱えるわけで。

とりあえず。
ひさびさに、マジで心臓に悪い思いをしました…。

とりあえず、一番大事なことは

  • 落ち着く
  • 容赦なく落とす
  • バックアップをとる

こんだけ。

参考にしたサイト

CentOS 5.5でPHP5.2.x

yumで入れるとPHP 5.1.xになっちゃうので、symfony 1.4を動かせなかったり、いろいろ不都合が多くて、ね。

ちなみに。
さくらのVPSさくらインターネットさんの専用サーバ エントリーのOSのバージョンがまさにこれなんで、思いっきりぶちあたりました。
多分今後参照する人が増えると思うので、メモがてら。

対策としては2つあります。

(1)根性で野良ビルド

私はこれでやりました。ちなみに5.2.14。
慣れないと難しいけど最強な方法。
逆を言うと「–with-apxs2ってなにそれ?」って人は絶対にやっちゃだめ。

参考までに私のとこでの configure 設定例を載せておきます。
php -i した結果です。

コンパイル環境や開発用のライブラリをyumコマンドで前もっていれておく必要があります。

manaka(専用サーバのほう)

Configure Command => ‘./configure’ ‘–prefix=/usr’ ‘–with-apxs2’ ‘–with-mysql’ ‘–with-pdo-mysql’ ‘–enable-calendar’ ‘–with-curl’ ‘–enable-mbstring’ ‘–with-mcrypt’ ‘–with-ncurses’ ‘–with-gd’ ‘–with-t1lib’ ‘–with-zlib’ ‘–with-png-dir=/usr/lib’ ‘–with-jpeg-dir=/usr/lib’

nene(VPSのほう)

Configure Command => ‘./configure’ ‘–prefix=/usr’ ‘–with-libdir=lib64’ ‘–with-apxs2’ ‘–with-mysql’ ‘–with-pdo-mysql’ ‘–enable-calendar’ ‘–with-curl’ ‘–enable-mbstring’ ‘–with-mcrypt’ ‘–with-ncurses’ ‘–with-gd’ ‘–with-zlib’ ‘–with-png-dir=/usr/lib’ ‘–with-jpeg-dir=/usr/lib’

VPSのほうは64bitなんで、’–with-libdir=lib64’が要ります。これ注意ね。

(2)パッケージを利用する

野良ビルドがわからない人向け。(できればこのほうをおすすめしたい)
yumでリポジトリを明示的に指定してする方法です。
「centOS 5.5 PHP 5.2」で検索するとこちらの方が圧倒的に多いですね。