CentOS 6.5 導入にあたり、ひっかかった箇所の個人的な覚書。
CentOSやFedora、RHELなんかを入れる度にひっかかっているのに、ついメモを忘れてしまう…
なお、今回は、主としてコマンドラインでの開発用としての導入なので、Web サーバ機能等はまだ入れていない。
テキストモード(CUI環境)への切り替え
ランレベル即時切替(runlevel 5→3)
# runlevel N 5 # init 3 # runlevel 5 3
起動時のランレベル変更(runlevel 5→3)
# vi /etc/inittab
id:5:initdefault:
となっている部分を、
id:3:initdefault:
に変更。
Yum の設定
yum-cron
Yum(RPM)パッケージの自動更新設定。
# yum -y install yum-cron # service yum-cron start # chkconfig yum-cron on
/etc/cron.daily/0yum.cron が作成される
RPMforge リポジトリ導入
php-mcrypt、libmcrypt等を Yum でインストールしたい場合に設定。
から、自分の OS に合ったパッケージを探し、
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm # yum -y update rpmforge-release
のようにして導入。
その後、
# vi /etc/yum.repos.d/CentOS-Base.repo
で、各セクション([base]等) の最後に
priority=1
の記述を入れておく(RPMforgeよりもCentOSのリポジトリを優先させる)。
PostgreSQL RPM Building Project リポジトリ導入
PostgreSQLの新しいバージョンとか、phpPgAdmin とかをインストールしたい場合に設定。
から、自分の OS および導入したい PostgreSQL のバージョンを探し、
# rpm -Uvh http://yum.pgrpms.org/9.3/redhat/rhel-6-i386/pgdg-centos93-9.3-1.noarch.rpm # yum -y update pgdg-centos*
のようにして導入。
Samba の設定
※参考
以下は、便宜上、
- Unix ユーザ名: myname
- Samba ユーザ名: myname
- サーバのネットBIOS名: MYSERVER
- サーバの所属するワークグループ: MYGROUP
- サーバの所属するサブネットマスク: 192.168.1.0/24
で、/home/myname を共有する例。
Samba のインストール
# yum -y install samba
Samba ユーザの追加
# pdbedit -a -u myname (パスワードの入力) # pdbedit -L -v (ユーザ一覧)
Sambaパスワードの変更は、「smbpasswd myname」で行う。
smb.conf の設定変更
# vi /etc/samba/smb.conf
※変更箇所のみ。
# (前略) #======================= Global Settings ===================================== [global] # (中略) unix charset = UTF-8 dos charset = CP932 display charset = UTF-8 follow symlinks = yes unix extensions = no wide links = yes workgroup = MYGROUP server string = Samba Server Version %v netbios name = MYSERVER hosts allow = 127. 192.168.1. # (中略) # ----------------------- Standalone Server Options ------------------------ # (中略) security = user passdb backend = tdbsam # (中略) #============================ Share Definitions ============================== [homes] comment = %U's Home Directory browseable = no writable = yes path = %H/ # 各ユーザ専用のごみ箱機能追加(ここから) # ファイル削除時に自動的にごみ箱へ移動されるようにする ; ごみ箱の有効化 vfs objects = recycle ; ごみ箱のディレクトリ名(/home/ユーザ名/.recycle) recycle:repository = .recycle ; ごみ箱へ移動時にディレクトリ構造を維持しない recycle:keeptree = no ; 同名のファイルがごみ箱にある場合に別名で移動 recycle:versions = yes ; ごみ箱へ移動時にタイムスタンプを更新しない recycle:touch = no ; ごみ箱へ移動するファイルのサイズ上限(0:無制限) recycle:maxsize = 0 ; ここで指定したファイルはごみ箱へ移動せずに即削除する recycle:exclude = *.tmp ~$* # 各ユーザ専用のごみ箱機能追加(ここまで) # (後略)
ごみ箱の自動削除設定
# vi /etc/cron.weekly/recyclewatch
#!/bin/bash # ■ 1週間ごとに30日間(24*30時間)アクセスのないごみ箱内のファイルを自動的に削除 for user in `ls /home/` do recycle_dir=/home/$user/.recycle #echo $recycle_dir if [ -d $recycle_dir ]; then tmpwatch -f 720 $recycle_dir/ fi done
# chmod +x /etc/cron.weekly/recyclewatch
SELinux 対策
# setsebool -P samba_enable_home_dirs on
実行には時間がかかるので気長に待つこと。
httpd(Apache)の設定で、ユーザーディレクトリ(public_html)を有効にしたときに、アクセスできない/ファイルの書き込みできない場合には、
ディレクトリのアクセス権を設定し(apache用に、その他ユーザーの実行権を付加)、
# chmod 701 /home/user # chmod 701 /home/user/public_html
SELinux 用にコンテキスト(httpd_user_content_t)を設定してやる。
# ls -Zd /home/user/public_html
drwxr-xr-x. user user unconfined_u:object_r:user_home_t:s0 /home/user/public_html
# restorecon -RF /home/user/public_html
# ls -Zd /home/user/public_html
drwxr-xr-x. user user unconfined_u:object_r:httpd_user_content_t:s0 /home/user/public_html
|
ファイアウォール設定
# vi /etc/sysconfig/iptables
-A INPUT -j REJECT --reject-with icmp-host-prohibited
の直前に、
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
を追加。
もしくは、「setup」コマンドで、「ファイヤーウォールの設定」→[ツールを実行する]→[カスタマイズ]→[*] Samba→[閉じる]→[OK]→[はい]
# service iptables restart
Samba サービスの起動
# service smb start # service nmb start # chkconfig smb on # chkconfig nmb on
PostgreSQL の設定
PostgreSQL 9.3 を入れる場合は、
を参照のこと。
旧データベースのバックアップ
$ pg_dumpall -U postgres -c > ./pgdball.dmp
PostgreSQL サーバインストール
# yum -y install postgresql-server # service postgresql initdb
初期化は、「su - postgres -c "/usr/bin/initdb"」でも可。
設定ファイル編集
# vi /var/lib/pgsql/data/pg_hba.conf
※変更箇所のみ。
# (前略) # IPv4 local connections: #host all all 127.0.0.1/32 trust host all all 192.168.1.0/24 trust # (後略)
# vi /var/lib/pgsql/data/postgresql.conf
※変更箇所のみ。
# (前略) #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart) port = 5432 # (change requires restart) # (後略)
ファイアウォール設定
# vi /etc/sysconfig/iptables
-A INPUT -j REJECT --reject-with icmp-host-prohibited
の直前に、
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
を追加。
# service iptables restart
PostgreSQL サーバ起動
# service postgresql start # chkconfig postgresql on
バックアップを取ったデータベースのリストア
$ psql -U postgres -d template1 < ./pgdball.dmp
Python の設定
以下は、便宜上、
- ユーザ名:myname でログインした状態
- ホームディレクトリ:$HOME(/home/myname) 直下への Python 2.7.6 インストール
の例。
Readline のインストール
これが無いと、Python の対話モードでカーソルキーによる履歴表示等が使えないため、Python のインストール(make)前に入れておくこと。
# yum -y install readline readline-devel
Python のユーザディレクトリへのインストール
ダウンロードする tarball は、
から探す。
「Python 2.7.6 compressed source tarball (for Linux, Unix or Mac OS X)」などとなっているもの。
$ mkdir -p ~/temp $ cd ~/temp $ wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz $ tar xvfz ./Python-2.7.6.tgz $ cd ./Python-2.7.6 $ ./configure --prefix=$HOME --with-threads --enable-shared $ make $ make install $ ln -s ~/lib/python2.7/ ~/lib/python
.bash_profile の編集
$ vi ~/.bash_profile
※変更箇所のみ
export PYTHONHOME=$HOME export PYTHONPATH=$PYTHONHOME/lib/python export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$PYTHONHOME/lib:$LIBRARY_PATH PATH=$HOME/bin:$PATH export PATH
$ source ~/.bash_profile
共有ライブラリ追加
~/lib(例では/home/myname/lib)を、共有ライブラリとして追加。
SELinux が有効になっている場合、環境変数 LD_LIBRARY_PATH 等の設定は無効になる。
$ su - # echo /home/myname/lib > /etc/ld.so.conf.d/python.conf # ldconfig -v | grep -e "\(^\/\|python\)"
※ ldconfig -v | grep -e "\(^\/\|python\)" の結果に、
/home/myname/lib: libpython2.7.so.1.0 -> libpython2.7.so.1.0
が含まれていることを確認。
パッケージ管理システムの導入: ez_setup(easy_install) と pip のインストール
$ #wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python $ wget https://bootstrap.pypa.io/ez_setup.py -O - | python
$ wget https://bootstrap.pypa.io/get-pip.py -O - | python
Installation — pip 8.1.0.dev0 documentation参照。
PIPを"easy_install pip"で入れようとすると、[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedのDownload errorが出るようになっていた。
pip の使い方については、以下の記事がわかりやすかった。
対話モード時の履歴保存、Tab補完等の設定
参考:
$ vi ~/.pystartup
try: import readline except ImportError: pass else: import os import atexit import rlcompleter historyPath = os.path.expanduser("~/.pyhistory") def save_history(historyPath=historyPath): import readline readline.write_history_file(historyPath) if os.path.exists(historyPath): try: readline.read_history_file(historyPath) except: pass atexit.register(save_history) readline.parse_and_bind('Tab: complete') del os, atexit, readline, rlcompleter, save_history, historyPath
$ vi ~/.bash_profile
※変更箇所のみ
export PYTHONSTARTUP=$HOME/.pystartup
$ source ~/.bash_profile
PHP のインストール
PHP 本体および各種ライブラリ・関連アプリのインストール
# yum -y install php php-cli php-fpm php-devel php-gd php-mbstring php-mysql php-pgsql php-pdo php-pear php-xml php-imap php-pecl php-mcrypt php-common # yum -y install phpMyAdmin phpPgAdmin
php-mcrypt 用設定の修正
$ php -v PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/module.so' - /usr/lib/php/modules/module.so: cannot open sha red object file: No such file or directory in Unknown on line 0 PHP 5.3.3 (cli) (built: Dec 11 2013 03:15:48) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
のような警告が出る場合の対処方法。
# vi /etc/php.d/mcrypt.ini
extension=module.so
を、
extension=mcrypt.so
に修正。
$ php -v PHP 5.3.3 (cli) (built: Dec 11 2013 03:15:48) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
その他
wget でファイル名に Content-Disposition ヘッダの内容をデフォルトで使う設定
wget に --content-disposition オプションを付けるのと同様。
ダウンロード元のURLがCGI等のためにファイル名が含まれていない場合等に有効。
$ vi ~/.wgetrc
content_disposition = on
crontab の設定
$ crontab -e
※書き方の例
# 実行時の環境変数を定義可 # ※ 環境変数の展開はしてくれない(?)ので # PATH=$HOME/bin:$PATH # などとすると、予期せぬ動作になってしまうので注意 SHELL=/bin/bash LANG=ja_JP.UTF-8 PYTHONHOME=/home/myname PYTHONPATH=/home/myname/lib/python LD_LIBRARY_PATH=/home/myname/lib LIBRARY_PATH=/home/myname/lib PATH=/home/myname/bin:/usr/pgsql-9.3/bin/:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # 分 時 日 月 曜日 (コマンド) # ※ '*' で任意指定。 # 毎時間のつもりでうっかり"* */1 * * * ..."とか # 書いてしまうと1分毎になるので注意。 # ※ 曜日は0-7(0,7は共に日曜日)。sun, mon, ... でも可能。 # ※ 各フィールドは、下記の書き方が可能。 # リスト指定: 5,10,30 (5,10,30のときに実行) # 範囲指定: 0-20 (0〜20のときに実行) # 間隔値設定: 9-18/2 (9〜18の2毎(9,11,...,)に実行) # ※ cron からの通知メールを受信しないようにするには、 # コマンドの後に ' 1>/dev/null 2>&1' を付ける # (標準出力/標準エラー出力共に /dev/null にリダイレクト) # --- 例:10分ごとに起動 */10 * * * * (/home/myname/test.sh 1>/dev/null 2>&1)
$ crontab -l
sudo の設定
# visudo
※書き方の例・差分のみ
# User privilege specification
の後に、
# 実ユーザ名 ホスト名=(実効ユーザ名) [NOPASSWD:] コマンド[, コマンド, ..] myname ALL=(ALL) NOPASSWD: /bin/mount, /bin/umount, /bin/touch, /bin/chmod
のような感じで記述する。