風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

CentOS 6.5 導入時のメモ

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 でインストールしたい場合に設定。

Index of /rpmforge-release

から、自分の 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 とかをインストールしたい場合に設定。

PostgreSQL RPM Repository (with Yum)

から、自分の 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 の設定

※参考

Windowsファイルサーバー構築(Samba) - CentOSで自宅サーバー構築

以下は、便宜上、

  • 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 を入れる場合は、

CentOS 6.5 導入時のメモ(続き: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 は、

Download Python | Python.org

から探す。
「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 の使い方については、以下の記事がわかりやすかった。

pipの使い方 - そこはかとなく書くよ。

対話モード時の履歴保存、Tab補完等の設定

参考:

Pythonの対話モードで補完とヒストリ置換してみた - 牌語備忘録 -pygo

$ 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

のような感じで記述する。