iSCSIサーバーのインストール (その3)

新たに2TBのディスクを3台追加して、RAID5を設定する。

500GBをマザーボードのSATAポートに、2TBx3を追加したSATAカードに接続する。
PCを起動すると、500GBが/dev/sda、2TBx3が/dev/sdb~c、USB stickが/dev/sdeで認識される。

RAID5の作成

sudo fdisk /dev/sdb
sudo fdisk /dev/sdc
sudo fdisk /dev/sdd

基本パーティションを1つずつ作成し、ディスクIDを0xfd (Linux raid auto detect) に設定する。

sudo mdadm --create /dev/md/datastore --level=5 --raid-devices=3 \
           /dev/sdb1 /dev/sdc1 /dev/sdd1

RAID5の構築には時間がかかる。

cat /proc/mdstat

で進捗が見られる。なお、この表示だとRAIDのデバイスファイル名が指定(/dev/md/datastore)と違うが、別に関係なく/dev/md/datastoreでもアクセスできるので大丈夫。

sudo cp /etc/mdadm/mdadm.conf{,.bak.20120313} &&
sudo sh -c "mdadm --detail --scan > /etc/mdadm/mdadm.conf"

適当に編集して

ARRAY /dev/md/vmstore metadata=1.2 UUID=493e9bab:bf4f4d93:13ae5ef2:1f277881
ARRAY /dev/md/datastore metadata=1.2 UUID=ae189551:89069074:6d0d79a4:e0c921a6

みたいにした。

initramを作り直す。

sudo update-initramfs -u

iSCSIターゲットの設定

sudo sh -c "
cat >> /etc/tgt/targets.conf << EOF
<target iqn.2012-03.net.example.domino:datastore>
    backing-store /dev/md/datastore
</target>
EOF"
sudo service tgt restart
sudo tgtadm --lld iscsi --op show --mode target

で状態を確認。

targets.confファイルに追記した場合、tidが逆になる(元々はvmstoreが1だったのが、今回vmstoreが2でdatastoreが1になる)ため、ESXiでターゲットを自動認識しなかった。改めてデータストアの追加をやり直したら問題は解決した。

WordPressにプラグインを追加

WordPressの管理Webインタフェースからプラグインを自動追加する機能があるみたいだが、FTPサーバーが必要みたいで微妙。Zipファイルから一旦ローカルにダウンロードして、 管理インタフェースからアップロードしてインストールする。 

まず、インストールしたいプラグインのZipファイルをダウンロードする。Dashboardのプラグイン検索画面からはZipファイルへのリンクはなさそうなので、適当にググって探してくる。

Dashboardの左のメニューからPluginsを選択し、Add newをクリック。上のメニューにUploadという項目があるので、そこからダウンロードしたZipファイルをアップロードしてインストール。

WordPressのインストール

作業日: 12 Mar. 2012

作業メモをblogで残すために、WordPressをインストール。
参考:

環境: Linodeサーバー上のLFS6.7ベースシステム

WordPressは、PHPとMySQLが必要だが、MySQLはまだインストールしていないのでインストールする。その場合PHPも再インストールが必要。依存関係をいろいろ考え、

  1. expat-2.0.1
  2. libxml2-2.7.8
  3. libarchive-2.8.5
  4. cURL-7.24.0
  5. CMake-2.8.6
  6. MySQL-5.5.21
  7. PHP-5.3.8
  8. WordPress-3.3.1

の順にインストール。

1. expat-2.0.1

patch -Np1 -i ../expat-2.0.1-fixes-3.patch &&
./configure --prefix=/usr &&
make
sudo make install &&
sudo install -v -m755 -d /usr/share/doc/expat-2.0.1 &&
sudo install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.1

2. libxml2-2.7.8

./configure --prefix=/usr &&
make &&
sudo make install

テストはしない。

3. libarchive-2.8.5

wget http://libarchive.googlecode.com/files/libarchive-2.8.5.tar.gz &&
tar zxf libarchive-2.8.5.tar.gz &&
cd libarchive-2.8.5 &&
./configure --prefix=/usr &&
make &&
make check
sudo make install &&
cd ../ &&
rm -rf libarchive-2.8.5

4. cURL-7.24.0

wget http://curl.haxx.se/download/curl-7.24.0.tar.bz2 &&
tar jxf curl-7.24.0.tar.bz2 &&
cd curl-7.24.0 &&
./configure --prefix=/usr --disable-static \
            --with-ca-path=/etc/ssl/certs &&
make &&
make check
sudo make install &&
sudo find docs \( -name "Makefile*" -o -name "*.1" -o -name "*.3" \) \
          -exec rm {} \; &&
sudo install -v -d -m755 /usr/share/doc/curl-7.24.0 &&
sudo cp -v -R docs/* /usr/share/doc/curl-7.24.0 &&
cd ../ &&
rm -rf curl-7.24.0

5. CMake-2.8.6

wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz &&
tar zxf cmake-2.8.6.tar.gz &&
cd cmake-2.8.6 &&
./bootstrap --prefix=/usr \
            --system-libs \
            --mandir=/share/man \
            --docdir=/share/doc/cmake-2.8.6 &&
make &&
make test
sudo make install &&
cd ../ &&
rm -rf cmake-2.8.6

6. MySQL-5.5.21

wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.21.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/ &&
tar zxf mysql-5.5.21.tar.gz &&
cd mysql-5.5.21 &&
sudo /usr/sbin/groupadd -g 40 mysql &&
sudo /usr/sbin/useradd -c "MySQL Server" -d /dev/null -g mysql \
                       -s /bin/false -u 40 mysql &&
cmake . \
      -DSYSCONFDIR=/etc \
      -DMYSQL_DATADIR=/srv/mysql \
      -DINSTALL_MYSQLDATADIR=/srv/mysql \
      -DCMAKE_INSTALL_PREFIX=/usr \
      -DINSTALL_BINDIR=bin \
      -DINSTALL_SBINDIR=sbin \
      -DINSTALL_DOCDIR=share/doc/mysql \
      -DINSTALL_DOCREADMEDIR=share/doc/mysql \
      -DINSTALL_INCLUDEDIR=include/mysql \
      -DINSTALL_INFODIR=share/info \
      -DINSTALL_LIBDIR=lib \
      -DINSTALL_MANDIR=share/man \
      -DINSTALL_MYSQLSHAREDIR=share/mysql \
      -DINSTALL_MYSQLTESTDIR=share/mysql-test \
      -DINSTALL_PLUGINDIR=lib/plugin \
      -DINSTALL_SCRIPTDIR=bin \
      -DINSTALL_SHAREDIR=share/mysql \
      -DINSTALL_SQLBENCHDIR=share/mysql-bench \
      -DINSTALL_SUPPORTFILESDIR=share/mysql/support-files \
      -DWITH_ZLIB=system \
      -DWITH_SSL=system \
      -DWITH_READLINE=system \
      -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
      -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
      -DWITH_FEDERATED_STORAGE_ENGINE=1 \
      -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
      -DMYSQL_MAINTAINER_MODE=OFF \
      -DWITH_DEBUG=OFF &&
make
SEGMENTS="Client Server IniFiles ManPages"
SEGMENTS="$SEGMENTS Development Documentation Info Readme"
for segment in $SEGMENTS; do
    sudo cmake -DCMAKE_INSTALL_COMPONENT=$segment -P cmake_install.cmake
done
unset SEGMENTS
sudo install -v -m644 /usr/share/mysql/support-files/my-medium.cnf \
             /etc/my.cnf &&
sudo mysql_install_db --basedir=/usr --datadir=/srv/mysql \
                      --user=mysql &&
sudo chgrp -v mysql /srv/mysql{,/test,/mysql} &&
sudo install -v -m755 -o mysql -g mysql -d /var/run/mysql &&
sudo mysqld_safe --user=mysql 2>&1 > /dev/null &

パスワードを設定。****を置き換える。

sudo mysqladmin -u root password ****
sudo mysqladmin -p shutdown &&
cd ../ &&
rm -rf mysql-5.5.21

MySQLのブートスクリプト

wget http://www.linuxfromscratch.org/blfs/downloads/svn/blfs-bootscripts-20120305.tar.bz2 &&
tar jxf blfs-bootscripts-20120305.tar.bz2 &&
cd blfs-bootscripts-20120305 &&
sudo make install-mysql &&
cd ../ &&
rm -rf blfs-bootscripts-20120305

ブートスクリプトは、paranoiaのLFS6.7に対応していないので、適宜修正する。

#!/bin/sh
########################################################################
# Begin /etc/init.d/mysql
#
# Description : Start MysSQL Server
#
# Author      : Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS 7.0
#
########################################################################

### BEGIN INIT INFO
# Provides:            mysql
# Required-Start:      $network
# Should-Start:        $remote_fs
# Required-Stop:       $network
# Should-Stop:         $remote_fs
# Default-Start:       3 4 5
# Default-Stop:        0 1 2 6
# Short-Description:   Starts MySQL server.
# Description:         Starts MySQL server.
# X-LFS-Provided-By:   BLFS / LFS 7.0
### END INIT INFO

. /etc/sysconfig/rc
. $rc_functions

#$LastChangedBy: dj $
#$Date: 2011-12-05 07:38:40 +0000 (Mon, 05 Dec 2011) $

PIDFILE=/srv/mysql/`/bin/hostname`.pid

case "$1" in
   start)
      boot_mesg "Starting MySQL daemon..."

      # Make sure the mysql user can create a socket
      mkdir -p /run/mysql
      chown mysql.mysql /run/mysql

      if [ -f "$PIDFILE" ]; then
         if /bin/ps --pid `cat $PIDFILE` | grep mysqld >/dev/null; then
           boot_mesg "\n   mysqld already running!"  #warning
            exit 0
         else
            rm -f "$PIDFILE"
            if [ -f "$PIDFILE" ]; then
               #log_failure_msg2
               boot_mesg "\n failure"
               exit 1
            fi
         fi
      fi

      /usr/bin/mysqld_safe --user=mysql 2>&1 >/dev/null &
      evaluate_retval
      ;;

   stop)
      boot_mesg "Stopping MySQL daemon..."
      killproc -p ${PIDFILE} /usr/sbin/mysqld
      evaluate_retval
      ;;

   reload)
      bootmesg "Reloading MySQL ..."
      killproc -p ${PIDFILE} /usr/sbin/mysqld -HUP
      evaluate_retval
      ;;

   restart)
      $0 stop
      sleep 1
      $0 start
      ;;

   status)
      statusproc /usr/sbin/mysqld
      ;;

   *)
      echo "Usage: $0 {start|stop|reload|restart|status}"
      exit 1
      ;;
esac

# End /etc/init.d/mysql

のようにした。

7. PHP-5.3.8 の再インストール

wget http://us2.php.net/distributions/php-5.3.8.tar.bz2 &&
tar jxf php-5.3.8.tar.bz2 &&
cd php-5.3.8 &&
./configure --prefix=/usr \
            --sysconfdir=/etc \
            --with-apxs2 \
            --with-config-file-path=/etc \
            --with-zlib \
            --enable-bcmath \
            --with-bz2 \
            --enable-calendar \
            --enable-dba=shared \
            --with-gdbm \
            --with-gmp \
            --enable-ftp \
            --with-gettext \
            --enable-mbstring \
            --with-readline \
            --with-openssl \
            --with-mysql \
            --with-mcrypt \
            --with-pgsql \
            --with-pdo-pgsql &&
make
sudo make install &&
sudo install -v -m644 php.ini-production /etc/php.ini &&
sudo install -v -m755 -d /usr/share/doc/php-5.3.8 &&
sudo install -v -m644 CODING_STANDARDS EXTENSIONS INSTALL NEWS \
                      README* TODO* UPGRADING php.gif \
             /usr/share/doc/php-5.3.8 &&
sudo ln -v -sfn /usr/lib/php/doc/Archive_Tar/docs/Archive_Tar.txt \
        /usr/share/doc/php-5.3.8 &&
sudo ln -v -sfn /usr/lib/php/doc/Structures_Graph/docs \
        /usr/share/doc/php-5.3.8

Apacheを再起動

sudo /etc/rc.d/init.d/apache stop &&
sudo /etc/rc.d/init.d/apache start

restartだとうまくいかなかった。

8. WordPress-3.3.1のインストール

http://wpdocs.sourceforge.jp/WordPress_のインストールを参考にした。

wget http://wordpress.org/latest.tar.gz &&
tar zxf latest.tar.gz &&
sudo mv -R wordpress /srv/www/htdocs/blog &&
sudo chown -R apache:apache /srv/www/htdocs/blog

作業日時点での最新版は、3.3.1だった。

WordPress専用ユーザーを追加する。

mysql -u root -p
mysql> CREATE DATABASE databasename;
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "username"@"localhost"
-> IDENTIFIED BY "password";
mysql> FLUSH PRIVILEGES;
mysql> EXIT

databasename、username、passwordは適宜変更。

ブラウザからhttp://www.songanatomy.info/blog/にアクセスし、指示に従って進んで行くと、mysqlのユーザー名等を入力させられる。そして出てきた画面を、
/srv/www/htdocs/blog/wp-config.php
にコピペする。そして、進んで行き、ブログタイトル、ユーザー名等の情報を入れるとブログが完成。

iSCSIサーバーのインストール (その2)

今回は、ハードディスクを接続し、iSCSIターゲットとして設定するまで。

将来的には、ESXiのデータストアとして500GBx2程度のRAID1と、ファイルサーバー用のディスク領域として(iSCSI越しに)直接マウントして使用する2TBx3のRAID5を構成する。まずは、500MBx1でDegraded RAID1として設定し、iSCSIで問題なく使えるかを確認する。

電源が停止した状態で、500GBのハードディスクを接続した。電源を投入すると、OSは無事に起動。ただ、ここでUSBメモリが/dev/sdbになり、ハードディスクが/dev/sdaになった。
/etc/fstabはUUIDで設定されているので、大きな問題ではない。とは言っても、ハードディスクの順番はSATAのポートの位置によって変化するので、ディスクのデバイスファイル名に依存しない構成にすべき。

必要なパッケージのインストール

まず、iSCSIターゲットとRAIDの管理ツールをインストールする。

sudo apt-get install mdadm &&
sudo apt-get install tgt &&
sudo service tgt start

mdadmのインストールの際に、postfixもついでにインストールされ、設定が画面が出てくる。メールサーバーとしては使わないので、構成としてLocal onlyを選択する。System mail nameは、domino.example.netとする。

RAID1の設定

/dev/sdaに認識されているディスクを使用して、degraded RAID1を設定する。まず、/dev/sdaをfdiskする。

sudo fdisk /dev/sda

基本パーティションを1つ作成し、ディスクIDを0xfd (Linux raid auto detect) に設定する。
次に、degraded RAID1を設定する。

sudo mdadm --create /dev/md/vmstore --level=1 --raid-devices=2 \
           /dev/sda1 missing

これで、片方のディスクが欠損しているRAID1として運用される。現在のRAIDの状態は、

cat /proc/mdstat

で見ることができる。

RAIDドライブがどのデバイスファイルに割り当てられるかは起動時に勝手に決まってしまうので、設定ファイル/etc/mdadm/mdadm.confを書くことでそれを固定化する。ただし、設定ファイルが存在すると、設定ファイルの書かれているRAIDしか認識しなくなるので注意が必要。

まず、現在の構成を/etc/mdadm/mdadm.confに書き出す。

sudo sh -c "mdadm --detail --scan >> /etc/mdadm/mdadm.conf"

適当に編集して、

ARRAY /dev/md/vmstore metadata=1.2 UUID=493e9bab:bf4f4d93:13ae5ef2:1f277881

のようにする(ただし、UUIDは環境依存)。

/etc/mdadm/mdadm.confを編集した後は、initramを作り直す必要がある。

sudo update-initramfs -u

これで再起動すると、このRAIDはdegradedの状態なので、ブートスクリプトの途中でエラーが出て、そこで手動でyを入力しないと起動しない。当面は暫定処置としてこのままで運用する。早くちゃんとしたRAIDにしなければ。

iSCSI設定のテスト

iSCSIターゲットをコマンドライン上で設定し、ESXiから認識できるかを確認する。

sudo tgtadm --lld iscsi --op new --mode target --tid 1 \
     --targetname iqn.2012-03.net.example.domino:vmstore
sudo tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 \
     --backing-store /dev/md/vmstore
sudo tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

tidは0ではうまくいかなかった。lunは0はコントローラなので、1から順に指定する。

下記コマンドで状態を確認できるので、適宜確認する。

sudo tgtadm --lld iscsi --op show --mode target

vSphere Clientで 構成->ハードウェア->ストレージアダプタ から、iSCSI Software Adapterを追加し、Propertyから動的検出で192.168.0.3を指定する。今回設定したターゲットが見えることを確認。

iSCSI設定の固定化

コマンドラインから設定した内容は、iSCSIターゲットを再起動するとすべて忘れてしまう。そのため、設定ファイルに書いて、起動時に自動で設定するようにする。

sudo sh -c "
cat > /etc/tgt/targets.conf << EOF
<target iqn.2012-03.net.example.domino:vmstore>
    backing-store /dev/md/vmstore
</target>
EOF"
sudo service tgt restart

でiSCSIターゲットを再起動しても、PC自体を再起動しても、無事にESXiから見えることを確認。

iSCSIサーバーのセットアップ (その1)

iSCSIサーバーをインストールして、VMWare ESXiのターゲットとして使用する。
今回は、とりあえずOSをインストールして起動するところまで。

計算機の仕様

  • メインボード: Intel D2500HN
  • CPU: Intel Atom D2500 (on-board)
  • Memory: 4GB x 1
  • NIC: Intel 1Gbps
  • 起動ディスク: 4GB USB stick

CentOS 6.2のインストール(失敗)

CentOS 6.4をUSBメモリにインストールして再起動する。Grubコンソールが出てきて、USBメモリをディスクとして認識していない模様。原因は不明だがGrubのバージョンの問題か?

Ubuntu Server 11.10 64bitをインストール

  • IPアドレス: 192.168.0.3
  • Hostname: domino

追加機能としてはSSH Serverのみをインストール。起動後、SSH越しにログインできることを確認。今回は成功。

まず最初に、

sudo apt-get update
sudo apt-get upgrade

でソフトウェアを更新。