2014-10-22

ついでに調べたLAMPのバージョン(CentOS 5 と CentOS 6)

2014/10/22 時点で、標準リポジトリからインストール可能なバージョンを調べた。


■ CentOS 5.11
パッケージ名          バージョン
httpd                 2.2.3-91
php                   5.1.6-44
php53                 5.3.3-23
mysql-server          5.0.95-5
mysql51-mysql-server  5.1.70-1
mysql55-mysql-server  5.5.37-1


■ CentOS 6.5
パッケージ名          バージョン
httpd                 2.2.15-31
php                   5.3.3-27
mysql-server          5.1.73-3



# yum install パッケージ名

MySQL5.5は、CentOS 6.5の標準リポジトリからはインストールできないようだ。

2014-10-21

CentOS 7 で LAMP (Linux + Apache + MySQL + PHP)

CentOS 7 から MySQL が MariaDB になったので、こんな感じでインストールする。

# yum install httpd mariadb-server php php-mysql


後は、必要なphpモジュールを追加でインストールして終わり。


ちなみに、インストールされたバージョンは、2014/10/21現在でこんな感じ

# yum list installed
httpd.x86_64                          2.4.6-18.el7.centos
mariadb-server.x86_64                 1:5.5.37-1.el7_0
php.x86_64                            5.4.16-23.el7_0.1


MySQL が MariaDB になった理由は、Wikipedia 参照で。

■ MariaDB - Wikipedia
http://ja.wikipedia.org/wiki/MariaDB

2014-10-20

VMware Player の 「非営利目的」 って

気になったので調べてみたら、調べてくれていた方がいた。

■ VMwarePlayerの「非営利目的の使用(商用利用)」はどこまで?
http://blog.cnu.jp/2012/08/31/vmwareplayer/


ありがたく読ませていただいた。


とりあえず、会社でテスト環境として使用する分にはいいみたい。


-- 2015/1/31 追記
VMwareへのお問い合わせに、次のような記述が・・・
引用

VMware Playerの業務利用に関するお問い合わせ

VMware Playerは個人利用に限り、非商用利用において無償で提供されます。会社や組織として関知された形でのご利用の場合は、VMware Fusion Professionalを必要数量分ご購入ください。




ん~、やっぱり会社で使うのはNGっぽい。

仮想ハードディスク(vmdk,vhd,etc)の変換

vmdkやvhdなんかの仮想ハードディスクイメージを変換する方法
$ qemu-img convert -f 変換元形式 -O 変換後形式 変換元ファイル名 変換後ファイル名


形式として指定できるのは、こんな感じ
イメージ形式qemu-imgの引数
VMDK (VMware)vmdk
VHD (Virtual PC / Hyper-V)vpc
rawraw
qcow2qcow2


hoge.vmdk を hoge.vhd に変換する例
$ qemu-img convert -f vmdk -O vpc hoge.vmdk hoge.vhd


他のイメージ形式や、その他引数の詳細は、下記参照で。

■ Red Hat Enterprise Linux 6 仮想化マニュアル 9.3.qemu-img の使い方
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-Tips_and_tricks-Using_qemu_img.html

2014-10-10

共有メモリサイズを知る apacheチューニング ~ COW (Copy on Write) ~

apacheをチューニングする必要があったので、いろいろ調べてた。

■Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる
http://d.hatena.ne.jp/naoya/20080212/1202830671

ここに載ってるperlのスクリプトを動かそうと思ったら、Perl の Linux::Smaps っていうモジュールが必要だった。

チューニング中のサーバには入れることができなかったので、他の方法を探していたらあった。


■2010-09-23の技術こねた
http://blog.livedoor.jp/kurt0027/archives/52376188.html


シェルスクリプトで書かれていたので、早速使ってみた。


■使い方
例:apache の子プロセスが共有しているメモリサイズを調べる。

# /bin/bash ./smaps.sh $(pgrep -u apache httpd)
PID     VSZ     RSS     Shared
21462   89292KB 67748KB 62176KB(92%)
23219   88276KB 65316KB 61160KB(94%)
・・・



サブディレクトリ内のファイル数もカウントする

カレントディレクトリ以下サブディレクトリ内も含めたファイル数をカウント。

# find . -type f | wc -l

2014-10-01

ディレクトリ階層別に容量を集計する

# du --max-depth=N /*

例えば、/var/www/html/ 以下にバーチャルホストのDocumentRootが

/var/www/html/host1
/var/www/html/host2
/var/www/html/host3
/var/www/html/host4

みたいにあった場合、バーチャルホストごとに集計したかったら

# du -s /var/www/html/*
# du --max-depth=2 /var/www/

2014-09-29

1年と1日前をシェルで求める

1日前の日付は、

# date +%Y-%m-%d -d '1 day ago'


1年前の日付は、

# date +%Y-%m-%d -d '1 year ago'


1年と1日前の日付は、

# date +%Y-%m-%d -d '1 year ago 1 day ago'



すげー。



2014-09-18

スローアタック

スローアタックって?
http://www.drk7.jp/MT/archives/001527.html

http://2u-moomin.blog.so-net.ne.jp/

http://www.keyman.or.jp/kc/30006788/


対策
http://code.zobe.jp/2012/10/defense_against_slowhttptest_using_mod_security2_section1/

http://code.zobe.jp/2012/10/defense_against_slowhttptest_using_mod_security2_section2/

http://code.zobe.jp/2012/10/defense_against_slowhttptest_using_mod_security2_section3/

http://code.zobe.jp/2012/10/you_shoud_not_blindly_use_modsecurity2_crs_base_rules/

wget で robots.txt を無視する

/etc/wgetrc を見ると
#robots = on
となっている。

これを
robots = off

とすれば、robots.txt を無視してくれる。

2014-09-13

あまりにもレベルが低すぎる

お前ら今まで何してた?

そんなこともわからずに

サーバ管理者気取ってたのか?




って言ってやりたい障害が頻発した。




火消し役は後任の俺。

ログの見方すらわからないらしい。

不正メール中継のチェック方法も知らないらしい。





もうね、あほかと。

2014-06-17

パッケージのアップデート

Fedora,CentOS とか
# yum update パッケージ名

Debian,Ubuntu とか
# apt-get install パッケージ名



OpenSSLをアップデートするには

# yum update OpenSSL

# apt-get install OpenSSL

2014-06-09

パッケージ依存関係の調査コマンド

apt-cache -i depends パッケージ名

rpm -q --whatrequires パッケージ名


例:opensslの依存関係を調べる

apt-cache -i depends openssl

rpm -q --whatrequires openssl

2014-05-30

PHPでheader()を使ってHTTPヘッダを送信する

忘れるのでメモっておく。

header("Content-type: text/html; charset=UTF-8");
header("Content-type: text/html; charset=Shift_JIS");
header("Content-type: text/html; charset=EUC-JP");

2014-05-12

Ubuntu で VMware Player をコマンドラインから起動する

VMware VIX をダウンロードする。
VMware VIX ダウンロード


ダウンロードした VMware VIX をインストールする。

sudo ./VMware-VIX-1.13.2-1744117.x86_64.bundle



コマンドラインから VMware Player 仮想マシン「CentOS6.vmx」を起動する。

vmrun -T player start /home/fuga/vmware/CentOS6/CentOS6.vmx nogui

2014-05-01

bindをchroot環境で動かす

# yum install bind bind-chroot
~ 略


yum でインストールすると、owner が root になるので、named に変更。
# chown named:named /var/named
chroot後のrootディレクトリを確認 # cat /etc/sysconfig/named ~ 略 ROOTDIR=/var/named/chroot # ls -l /var/named/chroot drwxr-x---. 2 root named 4096 4月 23 00:29 2014 dev drwxr-x---. 4 root named 4096 5月 1 22:43 2014 etc drwxr-x---. 3 root named 4096 4月 23 00:29 2014 usr drwxr-x---. 6 root named 4096 4月 23 00:29 2014 var named.confを編集 # vi /etc/named.conf ~ 略 DNSサーバとして必要な設定をする。chroot環境を意識する必要はない。 CentOS 6のBIND起動時にGenerating /etc/rndc.keyで固まるのを防ぐ。 # rndc-confgen -a -r /dev/urandom マウント状態を確認 # df -ah Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_01-lv_root 37G 1.7G 34G 5% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 485M 121M 339M 27% /boot none 0 0 0 - /proc/sys/fs/binfmt_misc 起動 # service named start マウント状態を確認 # df -ah Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_01-lv_root 37G 1.7G 34G 5% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 485M 121M 339M 27% /boot none 0 0 0 - /proc/sys/fs/binfmt_misc /etc/named 37G 1.7G 34G 5% /var/named/chroot/etc/named /etc/named.conf 37G 1.7G 34G 5% /var/named/chroot/etc/named.conf /etc/named.rfc1912.zones 37G 1.7G 34G 5% /var/named/chroot/etc/named.rfc1912.zones /etc/named.iscdlv.key 37G 1.7G 34G 5% /var/named/chroot/etc/named.iscdlv.key /etc/named.root.key 37G 1.7G 34G 5% /var/named/chroot/etc/named.root.key /usr/lib64/bind 37G 1.7G 34G 5% /var/named/chroot/usr/lib64/bind /var/named 37G 1.7G 34G 5% /var/named/chroot/var/named こんな感じで、chroot後のルートにマウントされる。

2014-04-22

CentOS 6.5 /etc/rc.d/init.d/起動スクリプト のサンプル

これが起動スクリプトのサンプルファイル。

/usr/share/doc/initscripts-9.03.40/sysvinitfiles

LSBに準拠した起動スクリプトのリターンコード

サービス停止状態でstartに成功したとき、終了コードは 0

/etc/rc.d/init.d/myservice start; echo $?


サービス起動中にstatusを実行したとき、終了コードは 0

/etc/rc.d/init.d/myservice status; echo $?


サービス起動中にstartを実行したとき、終了コードは 0

/etc/rc.d/init.d/myservice start; echo $?


サービス起動中にstop成功したとき、終了コードは 0

/etc/rc.d/init.d/myservice stop; echo $?


サービス停止状態でstatusを実行したとき、終了コードは 3

/etc/rc.d/init.d/myservice status; echo $?


サービス停止状態でstopを実行したとき、終了コードは 0

/etc/rc.d/init.d/myservice stop; echo $?


失敗した時に使えるコードは、0 と 3 以外。

Postfixの設定確認

実行中の設定を確認するには

# postconf


デフォルト設定を確認するには

# postconf -d


詳しくはこちらで

■Postfix manual - postconf(1)
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.1.html

2014-04-19

userdel するときは -r で消す

ユーザーのホームディレクトリとメールボックスファイルも一緒に消すときは、

# userdel -r ユーザー名

とする。

2014-04-18

passwd コマンドをバッチで処理する

サーバー移行なんかで、大量にユーザーアカウントを登録しなければならないときなんかに便利。

# echo パスワード | passwd ユーザー名 --stdin

ただし、パスワードに(特定の)記号が含まれているとうまくいかない。

特定の記号って何って?

ごめんよ、調べて教えて。

useradd で メールボックスファイルを作らない方法

useraddコマンドのデフォルト設定は、

# cat /etc/default/useradd

で確認できる。



GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes



CREATE_MAIL_SPOOL=yes ← こいつを no にしてあげればいい。


2014-01-22

正規表現のメモ

正規表現のメモ。

ぼちぼち増やしていきます。

1.du と find 使って、90日以前の日付ごとのログファイル容量を算出
# du -hc `find . -type f -name "*_log.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" -mtime +89`


2.find で *.scc と Thumbs.db を探して消す
# find . \( -name '*.scc' -o -name 'Thumbs.db' \) -delete


3.grepでorするときは「\(hoge\|moge\)」、egrepでorするときは「(hoge|moge)」
# grep -e "192\.168\.0\.111.*\(GET\|POST\).*\.php.* HTTP" access_log.201412* > ~/201412.log

4.server-status から時間と起動プロセス数を抜く
grep -e 'Current Time\|requests currently being processed' /var/tmp/httpd_status_20140908.log

5.0x99AA形式を%99%AAに変換する EmEditor 置換
0xを消してから置換
検索文字列:([\d|\w]{2}+)
置き換え:%\1

2014-01-21

DNS ゾーンファイルの例

■正引きゾーンファイル

$ORIGIN example.dom.
$TTL 3600   ; 1 hour
@       IN  SOA     ns1.example.dom. hostmaster.example.dom. (
                    2014012345 ; serial
                    3600       ; refresh (1 hour)
                    1200       ; retry (20 min.)
                    1209600    ; expire (2 weeks)
                    900        ; minimum (15 min.)
)
@       IN  NS      ns1.example.dom.
@       IN  NS      ns2.example.dom.
@       IN  MX      10  mail.example.dom.
@       IN  TXT     "v=spf1 mx ~all"    ; SPF record

ns1     IN  A       123.123.123.121
ns2     IN  A       123.123.123.122
mail    IN  A       123.123.123.123
sv1     IN  A       123.123.123.124
www     IN  CNAME   sv1



■逆引きゾーンファイル

$ORIGIN 120/28.123.123.123-in-addr.arpa.
$TTL 3600   ; 1 hour
@       IN  SOA     ns1.example.dom.  postmaster.example.dom. (
                    2014012345 ; serial
                    3600       ; refresh (1 hour)
                    1200       ; retry (20 min.)
                    1209600    ; expire (2 weeks)
                    900        ; minimum (15 min.)
)

121     IN  PTR     ns1.example.dom.
122     IN  PTR     ns2.example.dom.
123     IN  PTR     mail.example.dom.
124     IN  PTR     sv1.example.dom.

2014-01-15

root宛のメールは転送してでも見ろ

root宛のメールを確認して見つけた障害。

・freshclamに失敗し、ウィルス定義ファイルが更新されていなかった。約3年。
・DBのバックアップが失敗していた。約1年。
・rsyncでの同期が失敗していた。約1年。
・apacheのログローテーションが失敗していた。約2ヶ月間のうち、3回。

・・・恥ずかしい限りです・・・

というわけで、root宛のメールをmailコマンドで確認するのが面倒だという方は、外部メールアドレスへ転送すべし!



# vi /etc/aliases
・・・
root:  hoge@example.dom,fuga@example.dom



複数アドレスへ転送する場合は、カンマで区切って記述する。

で、aliasesを修正したら、

# newaliases

2014-01-12

mb_send_mail()するならReturn-Pathを第5引数に

mb_send_mail()を使ってメールを送信する場合は、第5引数に Return-Path を指定する。

さもなければ、Return-Path は apache@hoge.dom (コマンドラインから実行したときは、実行アカウント名@hoge.dom)になる。

第5引数に Return-Path を指定する方法はこんな感じ

<?php
//  日本語だよって宣言して
mb_language('ja');

//  UTF-8で組んでるなら、文字エンコードをUTF-8に合わせて
mb_internal_encoding("UTF-8");

//  ヘッダーとReturn-Pathを指定して、mb_send_mail()
mb_send_mail("dare@doko.koko", "メールの送信テスト", "これは、メールの送信テストです。", "From:ore@example.dom", "-f ore@example.dom");


問い合わせフォームなんかでメールアドレスを入力させるインターフェイスがある。
問い合わせ者へ受付メールを送信するのが一般的だが、もし、問い合わせ者がメールアドレスを入力ミスした場合、550 unknown user の送信先は Return-Path になるため、正しく指定しないと誰も間違いに気づかない。

まぁ、問い合わせ先の担当者が、問い合わせ者が入力したメールアドレスへメールを送れば気づくけどね。
どうせなら、最初から気づいた方がいいと思うけど。

.htaccessで403を404で返す

久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...