PostgreSQL で 横断的にカラムを検索する のMySQLバージョン
SELECT table_name, column_name FROM information_schema.columns WHERE column_name = 'カラム名' AND table_schema = 'DB名';
PostgreSQL で 横断的にカラムを検索する のMySQLバージョン
SELECT table_name, column_name FROM information_schema.columns WHERE column_name = 'カラム名' AND table_schema = 'DB名';
SELECT table_schema AS "データベース名" , FLOOR(SUM(data_length + index_length) / 1024 / 1024) AS "合計容量(MB)" FROM information_schema.tables GROUP BY table_schema ORDER BY SUM(data_length + index_length) DESC ; +-----------------------+------------------+ | データベース名 | 合計容量(MB) | +-----------------------+------------------+ | xxxxxxxx_xxxxxxxx | 1995 | | information_schema | 0 | +-----------------------+------------------+
use DATABASE_NAMEで確認したいデータベースに切り替えた後に実行。
SELECT table_name AS "テーブル名" , FLOOR((data_length + index_length) / 1024 / 1024) AS "合計容量(MB)" , FLOOR((data_length) / 1024 / 1024) AS "データ容量(MB)" , FLOOR((index_length) / 1024 / 1024) AS "インデックス容量(MB)" , table_rows AS "行数" , avg_row_length AS "平均行容量" , engine AS "ストレージエンジン" FROM information_schema.tables WHERE table_schema = database() ORDER BY (data_length + index_length) DESC ; +-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+ | テーブル名 | 合計容量(MB) | データ容量(MB) | インデックス容量(MB) | 行数 | 平均行容量 | ストレージエンジン | +-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+ | aaa | 1781 | 1132 | 649 | 10340935 | 114 | InnoDB | | bbb | 99 | 42 | 56 | 842684 | 52 | InnoDB | | ccc | 53 | 50 | 3 | 97275 | 545 | InnoDB | | ddd | 48 | 34 | 13 | 614400 | 58 | InnoDB | | eee | 12 | 5 | 6 | 84417 | 68 | InnoDB | | fff | 1 | 0 | 0 | 7083 | 53 | InnoDB | | ggg | 0 | 0 | 0 | 2598 | 63 | InnoDB | | hhh | 0 | 0 | 0 | 1543 | 63 | InnoDB | | iii | 0 | 0 | 0 | 233 | 70 | InnoDB | | jjj | 0 | 0 | 0 | 233 | 70 | InnoDB | | kkk | 0 | 0 | 0 | 69 | 237 | InnoDB | | lll | 0 | 0 | 0 | 265 | 61 | InnoDB | | mmm | 0 | 0 | 0 | 1 | 16384 | InnoDB | +-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+
データ量の多いサイトだとパフォーマンスが悪くて、仕方がないので、
メモリ数を増やす。
デフォルトだと、589M割り当てられている。
[vagrant@vagrant-centos65 ~]$ free -m total used free shared buffers cached Mem: 589 545 44 0 5 41 -/+ buffers/cache: 497 91 Swap: 1224 7 1217
config.vm.provider "virtualbox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: vb.memory = "2048" end
[vagrant@vagrant-centos65 ~]$ free -m total used free shared buffers cached Mem: 1877 1194 682 0 9 547 -/+ buffers/cache: 637 1240 Swap: 1224 0 1224
誤差があるが、あとで調べてみよう。
[mysqld] innodb_buffer_pool_size=1024M innodb_log_file_size=128M
$ vim /root/backup.sh #!/bin/sh # 何日分保存するか period=3 # バックアップしたいディレクトリ(バーチャルホストディレクトリ) wwwdir=/home # バックアップ保存先ディレクトリ dirpath=/root/backup # 今日のバックアップを保存するディレクトリ todaydir=`date '+%Y%m%d'` # DBユーザー dbuser=user # DBパスワード dbpassword=xxxxxxxx # 今日のバックアップを保存するディレクトリを作成 mkdir $dirpath/$todaydir # MySQLバックアップ for i in `mysql -u$dbuser -p$dbpassword -e "show databases"` do if [ $i == "Database" ]; then continue fi; mysqldump --single-transaction $i -u$dbuser -p$dbpassword --opt | gzip > $dirpath/$todaydir/mysql.$i.sql.tar.gz done; # ディレクトリバックアップ for i in `ls $wwwdir` do tar cvfz $dirpath/$todaydir/www.$i.tar.gz $wwwdir/$i done tar cvfz $dirpath/$todaydir/www.$i.tar.gz /var/www olddir=`date -d "$period days ago" '+%Y%m%d'` rm -rf $dirpath/$olddir
$ chmod 0700 /root/backup.sh $ /root/backup.sh $ ll /root/backup 合計 4 drwxr-xr-x 2 root root 4096 12月 31 01:17 20131231
$ crontab -e 0 4 * * * /root/backup.sh 1> /dev/null
メールサーバーについて気になった事が有ったので、さくらVPS環境で、メールサーバー構築した際の備忘録です。
メールサーバー | Postfix 2.6.6 |
POP、IMAPサーバー | Dovecot 2.0.9 |
アンチウィルスソフトウェア | ClamAV 0.97 |
スパムフィルタソフトウェア | SpamAssassin 3.3.1 |
メールサーバー、アンチウィルスソフトウェア、スパムフィルタソフトウェアのインターフェースソフトウェア | Amavised-new 2.8.0 |
メールアカウント管理 | PostfixAdmin 2.3.6 |
PostfixAdmin からソースをダウンロードして、解凍後、公開ディレクトリにFTPなどでアップロードします。今回は公開ディレクトリを下記のような形で設定し、PostfixAdminを配置しました。
/home/webadmin/public_html ← ドキュメントルート /home/webadmin/public_html/postfixadmin
データベースをpostfix、ユーザーをpostfixで作成しました。
create database postfix GRANT ALL PRIVILEGES ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH GRANT OPTION;
設定ファイルは、config.inc.phpですが、config.local.phpというファイルがある場合は、設定を上書きするので、config.local.phpを作成して、設定内容を記述します。
vi /home/webadmin/public_html/postfixadmin/config.local.php <?php $CONF['configured'] = true; $CONF['setup_password'] = 'changeme'; // ブラウザからアクセスした後に設定する $CONF['default_language'] = 'ja'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'XXXXXXX'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; $CONF['admin_email'] = 'postmaster@ドメイン名'; $CONF['encrypt'] = 'md5crypt'; // パスワードの暗号化方式 $CONF['page_size'] = '100'; $CONF['domain_path'] = 'YES'; // メールボックス用に、ドメインごとにディレクトリを作成する /home/virtual/virtualdomain.com/ $CONF['aliases'] = '100'; $CONF['mailboxes'] = '100'; $CONF['maxquota'] = '100'; $CONF['quota'] = 'YES'; $CONF['backup'] = 'NO'; $CONF['sendmail'] = 'NO'; $CONF['fetchmail'] = 'NO'; $CONF['new_quota_table'] = 'YES'; // dovecotのバージョンが1.2以下の場合はNOにする。 $CONF['user_footer_link'] = 'http://ドメイン名/postfixadmin/users/main.php'; // procmail使用時の設定 // メールディレクトリ自動作成 $CONF['mailbox_postcreation_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; // メールディレクトリ自動削除 $CONF['mailbox_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh'; // ドメインディレクトリ自動削除 $CONF['domain_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh'; ?>
バーチャルドメインでは、メールボックスとUNIXユーザーは切り離されて、メールは指定したバーチャルドメイン用のメールボックスに配送されます。そのユーザーを作成します。
#groupadd -g 5000 virtual #useradd -g 5000 -u 5000 virtual
設定後、http://ドメイン/postfixadmin/setup.phpにアクセスします。
imap関数がないとWarningが出たので、
# yum install php-imap
としてインストールしました。インストール後はapacheを再起動します。
# /sbin/service/httpd restart
その後、http://ドメイン/postfixadmin/setup.phpにアクセスし、Warningが出ないことを確認したら、パスワードの設定をして、管理画面からドメイン、ユーザーを追加します。
セットアップが完了したら、セットアップ用のファイルを削除します。
# rm -f /home/webadmin/public_html/postfixadmin/setup.php # rm -f /home/webadmin/public_html/postfixadmin/motd*
さくらVPSにははじめからPostfixがインストールされています。
インストール済みのPostfixが対応しているルックアップテーブルを表示して、MySQLに対応しているか確認します。
# postconf -m btree cidr environ hash ldap mysql nis pcre proxy regexp static unix
mysqlと表示されているのでMySQLに対応していることが確認できます。
PostfixからMySQLへアクセスする為のファイルを作成します。
# vi /etc/postfix/mysql_virtual_alias_maps.cf user = postfix password = XXXXXX hosts = localhost dbname = postfix table = alias select_field = goto where_field = address # vi /etc/postfix/mysql_virtual_domains_maps.cf user = postfix password = XXXXXX hosts = localhost dbname = postfix table = domain select_field = domain where_field = domain additional_conditions = and active = '1' # vi /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix password = XXXXXX hosts = localhost dbname = postfix table = mailbox select_field = maildir where_field = username # vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf user = postfix password = XXXXXX hosts = localhost dbname = postfix table = mailbox select_field = quota where_field = username #additional_conditions = and active = '1'
Postfixの設定ファイルを編集します。
設定ファイルを変更する場合は全て、オリジナルのバックアップをとってから行いました。
# cp /etc/postfix/{main.cf,main.cf.org}
# vi /etc/postfix/main.cf #inet_interfaces = localhost #コメントアウト #inet_protocols = all #コメントアウト #mydestination = $myhostname, localhost.$mydomain, localhost #コメントアウト #最終行に追加 myhostname = wwwXXXXX.sakura.ne.jp #さくらのホスト名 inet_interfaces = all # 外部からのメールも受信する inet_protocols = ipv4 mydestination = $myhostname, localhost relay_domains = $mydestination home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown # Virtual Domain w/MySQL local_transport = local virtual_transport = procmail # メールの配送はprocmail procmail_destination_recipient_limit = 1 virtual_mailbox_base = /home/virtual virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 5000 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 maximal_backoff_time = 800s minimal_backoff_time = 100s bounce_queue_lifetime = 60m maximal_queue_lifetime = 60m message_size_limit = 20480000 #virtual_mailbox_limit = 51200000 virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_overquota_bounce = yes virtual_mailbox_limit_inbox = yes smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # SpamAssasin # procmailと連携するようにする。 mailbox_command = /usr/bin/procmail # End SpamAssasin # amavisd-new # amavisd-newと連携するように設定 content_filter=smtp-amavis:[127.0.0.1]:10024 # End amavisd-new
新規ユーザーが追加されたらホームディレクトリに Mairdir/ を自動で作成されるようにする。
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir/
サブミッションポート587番ポートを利用する。
# cp /etc/postfix/{master.cf,master.cf.org} # vi /etc/postfix/master.cf #最終行に追加 submission inet n - n - - smtpd # amavisd-new smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 # End amavisd-new # procmail procmail unix - n n - - pipe flags=R user=virtual argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc # End procmail
最後に自動起動の設定をして終了です。
# /sbin/chkconfig postfix on
yumでインストールする。
# yum install dovecot dovecot-mysql
dovecot2の設定ファイルは/etc/dovecot/dovecot.confですが、/etc/dovecot/conf.d/以下に.confファイルを作成すれば自動で読みこんでくれるので、00-base.confというファイルを作成し設定を行います。
# vi /etc/dovecot/conf.d/00-base.conf # debug auth_debug_passwords = yes auth_verbose = yes auth_debug = yes listen = * disable_plaintext_auth = no auth_mechanisms = plain login digest-md5 cram-md5 # mail dir mail_location = maildir:/home/virtual/%d/%u first_valid_uid = 5000 first_valid_gid = 5000 mail_plugins = quota protocol imap { imap_client_workarounds = delay-newmail tb-extra-mailbox-sep mail_plugins = $mail_plugins imap_quota } protocol pop3 { pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } passdb { driver = sql args = /etc/dovecot/dovecot-postfixadmin-mysql.conf } userdb { driver = sql args = /etc/dovecot/dovecot-postfixadmin-mysql.conf } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 } } plugin { quota = maildir:User quota }
次に、/etc/dovecot/conf.d/10-auth.confを編集します。
# cp /etc/dovecot/conf.d/{10-auth.conf,10-auth.conf.org} # vi /etc/dovecot/conf.d/10-auth.conf #auth_mechanisms = plain #コメントアウト #!include auth-system.conf.ext #コメントアウト
次に、MySQLへの接続ファイルを作成します。
# vi /etc/dovecot/dovecot-postfixadmin-mysql.conf driver = mysql connect = host=/var/run/mysqld/mysqld.sock dbname=postfix user=postfix password=XXXXXX default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT concat('/home/virtual/', maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
次に、認証用ライブラリをインストールします。
# yum install cyrus-sasl-plain cyrus-sasl-md5
最後自動起動の設定をして終了です。
# /sbin/chkconfig dovecot on
yumでインストール
# yum install clamd
バックアップを取って、設定(実行ユーザー(root)にする)
# cp /etc/{clamd.conf,clamd.conf.org} # vi /etc/clamd.conf #User clam #コメントアウト
起動と自動起動設定
# /etc/init.d/clamd start # chkconfig clamd on
ウイルス定義ファイル更新機能を有効化と、定義ファイルの更新
# sed -i 's/Example/#Example/g' /etc/freshclam.conf # freshclam
# vi /etc/clamd.conf #TCPSocket 3310 #コメントアウト /etc/init.d/clamd restart
yumでインストール
# yum install amavisd-new
バックアップを取って、設定
# cp /etc/amavisd/{amavisd.conf,amavisd.conf.org} # vi /etc/amavisd/amavisd.conf # COMMONLY ADJUSTED SETTINGS: $undecipherable_subject_tag = ''; #←追加(パスワード付ZIPファイル受信時メール件名に「***UNCHECKED***」と付加されないようにする。) @bypass_spam_checks_maps = (1); # controls running of anti-spam code #←コメントアウト解除(amavisd-newではスパムチェックは行なわないようにする。スパムチェックはprocmail経由でspamcコマンドで行なう) $mydomain = 'wwwXXXXX.sakura.ne.jp'; # a convenient default for other settings #←コメントアウト解除してホスト名に変更する #$QUARANTINEDIR = undef; # -Q #←コメントアウト(ウィルスメールは隔離しない) #$virus_admin = undef; #←コメントアウト(ウィルス検知メールを管理者宛に通知しない) ### BLOCKED ANYWHERE # qr'^UNDECIPHERABLE$', # is or contains any undecipherable components # qr'^\.(exe-ms|dll)$', # banned file(1) types, rudimentary #←コメントアウト(exeファイルを受信できるようにする) # qr'^\.(exe|lha|cab|dll)$', # banned file(1) types # # this entry; when running chrooted one may prefer socket "$MYHOME/clamd". # ↓追加(/var/run/clamav/clamd.sockはソケット名変更) ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], qr/\bOK$/m, qr/\bFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
起動と自動起動設定
# /etc/init.d/amavisd start # chkconfig amavisd on
起動と自動起動設定
# /etc/init.d/spamassassin start # chkconfig spamassassin on
バックアップを取って設定
# cp /etc/mail/spamassassin/{v310.pre,v310.pre.org} # vi /etc/mail/spamassassin/v310.pre loadplugin Mail::SpamAssassin::Plugin::TextCat #←コメントアウト解除
rootユーザーでSpamAssassin設定ファイル最新化スクリプト作成
# cd ~ # vi spamassassin-update
#!/bin/bash # SpamAssassin設定ファイル最新版ダウンロード cd /etc/mail/spamassassin wget -qN http://www.flcl.org/~yoh/user_prefs # 設定ファイル更新時のみSpamAssassin再起動 diff user_prefs user_prefs.org > /dev/null 2>&1 if [ $? -ne 0 ]; then cp user_prefs local.cf # スパム判断したメールを添付形式にしないように設定 echo "report_safe 0" >> local.cf # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ echo "rewrite_header Subject ***SPAM***" >> local.cf # SpamAssassin再起動 /etc/rc.d/init.d/spamassassin restart > /dev/null fi cp user_prefs user_prefs.org
実行権限追加
# chmod +x spamassassin-update
一度実行して、最新にする
# ./spamassassin-update
cronに登録する
# mv spamassassin-update /etc/cron.daily/
# vi /etc/procmailrc
SHELL=/bin/bash PATH=/usr/bin:/bin DEFAULT=/home/virtual/$DOMAIN/$USER\@$DOMAIN/ LOCKFILE=/home/virtual/procmail.lock LOGFILE=/home/virtual/procmail.log #VERBOSE=ON # SpamAssassin Spam Check :0fw |/usr/bin/spamc :0 *^X-Spam-Flag: YES $SPAM
ログの設定
# vi /etc/logrotate.d/procmail
/home/virtual/procmail.log { missingok nocreate notifempty }
PostfixAdminを使ってアカウント追加・削除する際に、ディレクトリを自動で作成・削除するようにスクリプトを作成する。
メールボックス作成・削除スクリプト用ディレクトリ作成
# mkdir /usr/local/bin/postfixadmin
PostfixAdminに有るスクリプトをコピー
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin # cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin # cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin
削除したメールボックスを保存するディレクトリを作成
# mkdir /home/virtual/.deleted-maildirs # chmod 0700 /home/virtual/.deleted-maildirs # chown virtual:virtual /home/virtual/.deleted-maildirs
スクリプトの編集(メールボックス作成)
# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh
#basedir=/var/spool/maildirs #←コメントアウト basedir=/home/virtual #←追加
# ↓コメントアウト #maildirmake "$maildir" #if [ ! -d "$maildir" ]; then # echo "$0: maildirmake didn't produce a directory; bailing out." # exit 1 #fi
exit 0の前に追加
mkdir "$maildir" if [ ! -d "$maildir" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}cur" if [ ! -d "${maildir}cur" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}new" if [ ! -d "${maildir}new" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}tmp" if [ ! -d "${maildir}tmp" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi chown -R virtual:virtual "$maildir" chmod -R 700 "$maildir"
スクリプトの編集(メールボックス削除)
# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh
#basedir=/var/spool/maildirs basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs trashbase=/home/virtual/.deleted-maildirs
#subdir=`echo "$1" | sed 's/@.*//'` subdir=$1
スクリプトの編集(ドメイン削除用)
# vi /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh
#basedir=/var/spool/maildirs basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs trashbase=/home/virtual/.deleted-maildirs
実行権限追加
# chmod 0700 /usr/local/bin/postfixadmin/postfixadmin*
apacheがsudo出来るように設定する
# visudo
Defaults requiretty Defaults:apache !requiretty #←追加 root ALL=(ALL) ALL apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh #←追加 apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh #←追加 apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh #←追加
/etc/init.d/postfix restart /etc/init.d/dovecot restart /etc/init.d/spamassassin restart /etc/init.d/clamd restart /etc/init.d/amavisd restart
TSLの設定追記…
ちょっとデータ追加したり、試しにカラム追加したい時等、コピーしてバックアップとっておくとき便利です。
/* aaaテーブルのスキーマをコピーしてテーブル作成 */ > CREATE TABLE back_aaa LIKE aaa; /* aaaテーブルのデータをINSERT */ > INSERT INTO back_aaa SELECT * FROM aaa;
MySQLの自動起動設定がされてなかったのでしたというメモ。
[root@suusuke ~]# /etc/rc.d/init.d/mysqld start mysqld を起動中: [ OK ] [root@suusuke ~]# chkconfig mysqld on ← 自動起動設定 [root@suusuke ~]# chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
インストールしたもののメモです。
Index of /Linux/centos/5/isos/i386. CentOS5.7を今回は使用しました。
ISOファイルをダウンロードして、最小構成でインストール。
VMWare上のCentOSは時間がずれるのでVMWare Toolsをインストール。
VMWare Serverの管理画面から[Install VMware Tools…]を選択します。
選択すると、CDドライブにインストール用のファイルがセットされます。
[root@localhost ~]# mount /dev/cdrom /mnt/ [root@localhost ~]# cd /mnt/ [root@localhost ~]# /etc/yum.conf gpgcheck=0 ← 0に変更 [root@localhost ~]# cp VMwareTools-7.7.6-203138.i386.rpm /tmp/ [root@localhost ~]# cd /tmp/ [root@localhost ~]# yum localinstall VMwareTools-7.7.6-203138.i386.rpm [root@localhost ~]# /etc/yum.conf gpgcheck=1 ← 元に戻す
一旦、サーバを停止しvmxファイルを変更します。
tools.syncTime = "TRUE" ← TRUEに変更
サーバを再度起動し、grubの設定を変更します。
このパラメータの追加(divider=10)はCentOS5.7では合った方が精度が良いよ?とナレッジに記載あったので追加しました。
VMware KB: Timekeeping best practices for Linux guests.
[root@localhost ~]# vi /boot/grub/grub.conf kernel /vmlinuz-2.6.18-274.el5 ro root=/dev/VolGroup00/LogVol00 divider=10
[root@localhost ~]# yum install ntp [root@localhost ~]# vi /etc/ntp.conf tinker panic 0 restrict 127.0.0.1 restrict default kod nomodify notrap server 0.vmware.pool.ntp.org server 1.vmware.pool.ntp.org server 2.vmware.pool.ntp.org driftfile /var/lib/ntp/drift [root@localhost ~]# vi /etc/ntp/step-tickers 0.vmware.pool.ntp.org 1.vmware.pool.ntp.org [root@localhost ~]# service ntpd start [root@localhost ~]# chkconfig ntpd on
まずはifconfigでipを確認して、puttyまたはpoderosaで接続する。
何かとvimの方が便利なので、aliasで設定
[root@localhost ~]# vi /etc/bashrc alias vi='vim' ← 追加 [root@localhost ~]# source /etc/bashrc
[root@localhost ~]# /etc/rc.d/init.d/yum-updatesd stop yum-updates を停止中: [ OK ] [root@localhost ~]# yum remove yum-updatesd
[root@localhost ~]# vi /etc/sysconfig/selinux #SELINUX=enforcing SELINUX=disabled
[root@localhost ~]# service iptables stop [root@localhost ~]# chkconfig iptables off
[root@localhost ~]# rpm -import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka [root@localhost ~]# vi /etc/yum.repos.d/utterramblings.repo [utterramblings] name=Jason's Utter Ramblings Repo baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/ enabled=0 gpgcheck=1 gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
enabled=0にしているので、通常のyumコマンドではこのリポジトリは使われない。
使う場合は
[root@localhost ~]# yum --enablerepo=utterramblings install パッケージ [root@localhost ~]# yum --enablerepo=utterramblings update パッケージ
とする。
再起動
[root@localhost ~]# reboot
[root@localhost ~]# yum --enablerepo=utterramblings install httpd httpd-devel php php-mbstring php-devel php-mcrypt php-pear php-mysql php-gd mysql-server
[root@localhost ~]# chkconfig httpd on [root@localhost ~]# chkconfig mysqld on [root@localhost ~]# service httpd start [root@localhost ~]# service mysqld start
rootのパスワードを設定して、パスワードがブランクのユーザを削除
[root@localhost ~]# mysql -u root mysql> set password for root@localhost=password('password'); mysql> exit [root@localhost ~]# mysql -u root -p mysql> DELETE FROM mysql.user WHERE Password = ''; mysql> exit
[root@localhost ~]# adduser sample [root@localhost ~]# su - sample [root@localhost ~]# chmod 755 /home/sample/ [sample@localhost ~]$ mkdir ~/public_html [sample@localhost ~]$ vi ~/public_html/phpinfo.php ← 確認用 <?php phpinfo(); [sample@localhost ~]$ exit [/bash] <h4>バーチャルホスト設定</h4> [root@localhost ~]# vi /etc/httpd/conf.d/vhosts.conf NameVirtualHost *:80# sample<VirtualHost *:80> DocumentRoot /home/sample/public_html ServerName test.sample.com <Directory "/home/sample/public_html"> Options Indexes FollowSymLinks MultiViews Includes ExecCGI AddType text/html .shtml AddHandler server-parsed .shtml AddHandler cgi-script .cgi .pl AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
確認
[root@localhost ~]# httpd -S VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:80 is a NameVirtualHost default server test.sample.com (/etc/httpd/conf.d/vhosts.conf:5) port 80 namevhost test.sample.com (/etc/httpd/conf.d/vhosts.conf:5) Syntax OK
C:\Windows\System32\drivers\etc\hosts
192.168.1.3 test.sample.com
http://test.sample.com/phpinfo.phpにアクセスして確認.
ここまでで一通り開発環境が出来ました。
ソースのアップはrsync等で同期すると簡単にできると思います。
Windowsからrsyncを利用する方法も書きました。
suusuke – blog – Windows で rsync を使用する.
ここからは有ると便利な設定等を追記していきます。
[root@localhost ~]# yum -y install gcc gcc-c++
既にphp-devel,php-pearはインストールしてある状態なのでpeclコマンドでインストール。
[root@localhost ~]# pecl install xdebug .... Build process completed successfully Installing '/usr/lib/php/modules/xdebug.so' install ok: channel://pecl.php.net/xdebug-2.1.2 configuration option "php_ini" is not set to php.ini location You should add "extension=xdebug.so" to php.ini
/usr/lib/php/modules/xdebug.soにxdebug.soがインストールされました。
/etc/php.ini
zend_extension="/usr/lib/php/modules/xdebug.so"
psql => \x psql => select * from users;
mysql> select * from users \G;
psqlもmysqlも縦でカラムを表示するようになるので崩れずに見やすくSELECTの実行結果を確認できるようになります。
普段は迷わずPHP5.3使うのですが、今やってるサイトがPHP4なのでインストールしたときのログを残しておきます。
PHP4はソースからインストールする。makeしてできるApahceのモジュールのMIMEタイプを『application/x-h-httpd-php4』で作成する。バーチャルホストの設定でPHP4で動くようにする。
[suusuke@macbook ~]$ curl -o php-4.x.tar.gz -L http://jp2.php.net/get/php-4.4.9.tar.gz/from/this/mirror [suusuke@macbook ~]$ tar zxvf php-4.x.tar.gz [suusuke@macbook ~]$ cd php-4.4.49
sapi/apache2handler/sapi_apache2.cを変更する。
#define PHP_MAGIC_TYPE "application/x-httpd-php"
↓
#define PHP_MAGIC_TYPE "application/x-httpd-php4"
とりあえず最低限、必要そうなものをオプションに追加しました。
また、Snow Leopardでconfigureする時はlresolvを有効にする必要があるようなので、『EXTRA_LIBS=-lresolv』で指定する。
[suusuke@macbook ~]$ EXTRA_LIBS=-lresolv \ ./configure --prefix=/usr/local/lib/php-4.4.9 \ --with-apxs2=/usr/sbin/apxs \ --enable-mbstring \ --with-pgsql=/opt/local/lib/postgresql83 \ --with-pdo-pgsql=/opt/local/lib/postgresql83 \ --with-mysql \ --with-pdo \ --with-gd \ --with-png-dir=/opt/local \ --with-jpeg-dir=/opt/local \ --with-zlib-dir=/opt/local
ないものは基本portでインストール。
今回インストールしたのは
[suusuke@macbook ~]$ sudo port install libpng [suusuke@macbook ~]$ sudo port install jpeg
の二つ。
MySQL、PostgreSQLのインストールについてはSnow Leopard に PostgreSQL インストールSnow Leopard に MySQL 再インストールを参照。
[suusuke@macbook ~]$ make [suusuke@macbook ~]$ sudo make install
[suusuke@macbook ~]$ sudo cp php.ini-recommended /usr/local/lib/php-4.4.9/lib/php.ini
PHP.iniのinclude_pathにPEARのパスを追加。。。したいところだったんだけど、PEARがインストールされない。。。
とりあえず、PEARは未だにPEAR::DB使ってるんみたいなんで、手動で入れることに。
~/.bashrc
alias php4=/usr/local/lib/php-4.4.9/bin/php
反映
[suusuke@macbook ~]$ source ~/.bashrc
[suusuke@macbook ~]$ php4 -v PHP 4.4.9 (cli) (built: Mar 26 2011 10:08:22) Copyright (c) 1997-2008 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
# test.php5.info <VirtualHost *:80> DocumentRoot "/Library/WebServer/Documents/php5/public_html" ServerName test.php5.info <Directory "/Library/WebServer/Documents/php5/public_html"> AllowOverride All order deny,allow allow from All </Directory> </VirtualHost> # test.php4.info <VirtualHost *:80> DocumentRoot "/Library/WebServer/Documents/php4/public_html" ServerName test.php4.info <Directory "/Library/WebServer/Documents/php4/public_html"> AllowOverride All order deny,allow AddType application/x-httpd-php4 .php allow from All </Directory> </VirtualHost>
phpinfo();で確認してみる。
削除したいときは
/usr/local/lib/php-4.4.9 php-x.x.x/ bin/ PHPコマンドなど etc/ pear設定ファイル include/ ヘッダファイルなど lib/php PEARライブラリディレクトリ man/ マニュアル /opt/local/apache2/modules/libphp4.so
を削除するだけ。
http://www.atmarkit.co.jp/fcoding/articles/macxphp/02/macxphp02a.html