アーカイブ

‘サーバ構築’ カテゴリーのアーカイブ

Windows Server 構築しました。

2010 年 1 月 17 日 oklab コメントはありません

先月から、インストールマニアックス3 Hyper-V祭りが行われました。Hyper-V Server 2008 R2 と呼ぶWindows Server 2008 R2ベースの仮想化用OSに、Windows Web Server 2008 R2をインストールし、その上にオープンソースのアプリケーションをインストールする大会です。オープンソースはwordpressやpukiwikiなど一般的に普及している課題の中から自分で選択してインストールしていきます。

詳しくは、サイトを公開しましたので確認していただければ、Window Server について知らない方もドキュメント化しつつ大会を行ったので、どういうものか理解できると思います。InstallManiax3 サーバー構築日記(http://techon.webhop.net/)

仕事上、Window Server はあまり扱わないので、今回の大会に参加できて非常に勉強になりました。Linuxだとyumでのパッケージ管理が普及しています。Windowsの場合はパッケージ管理がないと思っていたので、検証しながらインストールするのは大変かと思われたのですが、最近は、簡単にオープンソースがインストールできる「Microsoft Web Platform Installer」というインストーラが存在していました。依存関係等も正しく解決してくれるので、これを使うとIIS, MySQL,Wordpress, PHP実行環境を一度でインストールできました。

大会の規約上、1年間運用するので、この機会にASP.NETやWindow Server 管理をいろいろ試してみたいと思います。また、Windows Server に関しての記事はoklab.orgのブログではなく、techon.webhop.net側のwordpressに記述していこうと思います。

HTTP経由の、hg push で「abort: HTTP Error 500: Internal Server Error」発生を回避する方法

2009 年 11 月 29 日 oklab コメントはありません

CentOS5上に、Mercurialサーバを構築したのですが、hg push が正常に動作しませんでした。その原因と解決方法です。

レポジトリを作成する場合は、Linuxのアカウントでhg init を使いレポジトリを作成すると思います。この時レポジトリのオーナーは、いま使っているアカウントになります。hg pushコマンドをHTTP経由で行った場合は、Apacheの実行ユーザでレポジトリにアクセスしようとします。例えば、CentOS5の場合のデフォルトでは、Apacheの実行ユーザは、apache、実行グループはapacheになります。そのためhg initで作成したレポジトリは、HTTP経由でhg pushができるように、Apacheの実行ユーザにする必要があります。

普段使っているhogeユーザで、Mercurialのレポジトリを作成する例。ユーザがhogeになっているのが分かると思います。

[hoge@sc ~]$ hg init MyFirstProject
[hoge@sc ~]$ ls -l
合計 4
drwxrwxr-x 3 hoge hoge 4096 11月 29 21:29 MyFirstProject

例えば、実行ユーザをapacheにして、実行グループをapacheにする場合は以下のようにします。

[hoge@sc ~]$ sudo chown -R apache.apache MyFirstProject

ただこの場合は、このローカルマシンで作業をする場合に、apache を意識する必要があるので、普段使用するユーザと、apache ユーザ用のグループ(この場合はmyadmin)をgroupaddコマンドで作成したほうが管理が楽になると思います。

[hoge@sc ~]$ sudo chown -R apache.myadmin MyFirstProject

また、問題を解決する際にGoogleなどの検索エンジンを使うと思いますが、–debug -v –traceback で、実行時の詳細が取得できます。詳細なログで検索すれば解決方法が見つかるかもしれません。

[hoge@sc ~]$ hg push --debug -v --traceback
Traceback (most recent call last):
 File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 43, in _runcatch
 return _dispatch(ui, args)
 File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 441, in _dispatch
 raise error.RepoError(_("There is no Mercurial repository"
RepoError: There is no Mercurial repository here (.hg not found)
abort: There is no Mercurial repository here (.hg not found)!

http://ubuntuforums.org/showthread.php?p=7539735

カテゴリー: サーバ構築 タグ: ,

CentOS5にMercurial1.3をインストール

2009 年 11 月 25 日 oklab コメントはありません

CentOS5にMercurial1.3をインストールした際に、マルチレポジトリ環境を構築したのですが、ブラウザでレポジトリのリストが表示されない状態になってしまいました。その時のトラブルシューティングです。

CentO+S5.4では、RPMForegeをインストールすれば、yum管理でMercurial1.3がインストールできます。ローカルでMercurialを使う環境を整えるのは比較的簡単にできますが、レポジトリ公開用の環境構築に癖があります。CVSやSVNの場合は、ブラウザベースでレポジトリを公開する場合は、一般的にViewvcなどが使われますが、Mercurialでは、標準で用意されています。標準で用意されている機能としては、以下の3つがあります。

  • hg serveコマンドによる簡易サーバ
  • レポジトリを1つ公開するためのhgweb
  • 複数のレポジトリを公開するためのhgwebdir

hgwebサーバの構築または、hgwebdirサーバの構築には、以下の構築手順書があります。

  • http://mercurial.selenic.com/wiki/PublishingRepositories
  • http://mercurial.selenic.com/wiki/modwsgi

CentOS5.4の場合は、mod_wsgi はyumでインストールできるのでwsgi環境を整える(Pythonの環境)を整えるのは難しくありません。

私の場合は、上記手順書で、hgwebdirサーバの構築を行ったのですが、http://mercurial.selenic.com/wiki/modwsgiの「3.3 Mercurial」で書かれている設定ではブラウザからレポジトリ公開のトップページは表示できるけれど、レポジトリ一覧が表示できない状態でした。以下のように、CGI 設定ファイルに当たるhgweb.config を絶対パスで指定することで解決できました。

from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir('/var/www/myhg/hgweb.config') # 絶対パス

トラブルシューティングの手順としては、

  1. コマンドラインでMercurialのテストプロジェクトを作って動作確認する。これによりMercurial自体に問題ないことを検証。
  2. hgweb,hgwebdirを使わずに、hg serveコマンドで簡易サーバを立てて、ブラウザからのアクセスを行う。ここでファイアウォールやブラウザ環境に問題ないことを確認。
  3. hgwebdirの構築を行って動作確認。問題がある場合は、パーミッション、Apacheの設定、hgweb.config の設定などが考えられます。
#hg serve -p 8111 --webdir-conf /var/www/myhg/hgweb.config

SVNとViewvcで構築した場合は、SVN自体の管理と、Viewvcの管理が必要になりますが、Mercurialでは、単体でViewvcのようなソースコードブラウザの管理ができ、また複数のレポジトリをサーバの再起動せずに反映させることが可能です。

また、yumでmercurial1.3をインストールした場合、以下ディレクトリに、hgwebdir.wsgiが存在するのでこれをコピーして使います。

[root@xxx ~]# rpm -ql mercurial-1.3.1-1.el5.rf | grep hgwebdir
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.py
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.pyc
/usr/lib/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.pyo
/usr/share/doc/mercurial-1.3.1/contrib/hgwebdir.fcgi
/usr/share/doc/mercurial-1.3.1/contrib/hgwebdir.wsgi
カテゴリー: サーバ構築 タグ: ,

Sambaクライアントコマンド(smbclient)で、対象のSambaサーバにバックアップを行うスクリプト.

2009 年 11 月 18 日 oklab コメントはありません

最近は、LAN接続の外付けハードディスクやNAS機能が付いている個人用ルータが販売されています。こういう製品は誰にでも使いやすくできるようにWebベースの設定画面が用意されていてとても便利です。Windows の場合は、自動バックアップの環境を整えるのも比較的簡単にできます。Mac OSX やLinux から自動バックアップする場合は、smbclient コマンドを使うことでコマンドでの自動化が可能です。

smbclient コマンドは、ftpコマンドと似たコマンドなのでftpを知っている方は簡単に使うことができるはずです。

#!/bin/sh
#
# Sambaクライアントコマンド(smbclient)で、対象のSambaサーバにバックアップを行うスクリプト.
#
#
# Author: Satoshi Okita
# Create: 2009年 11月 18日 水曜日 19:06:40 JST
# Update: 2009年 11月 19日 木曜日 13:44:54 JST
#         初期ディレクトリの設定をできるようにしました。
#####
# 接続先の設定の仕方
# このスクリプトに「接続先の設定」というユーザが設定する場所があります。
#
#
#####
# targetlist.txtの書き方
#
#     /tmp/bkup_targetdir/aaa.txt
#     /tmp/bkup_targetdir/bbb.txt
#     /etc/.
# 上記のように、1行単位に、バックアップしたいファイル、またはディレクトリを記述します。
# ディレクトリを指定する場合は、/etc/.のようにドットを記述してください。
# 現在はドットがあるかないかでsmbclientのコマンドを切り替えているためです。
# また、ファイル名はtargetlist.txtである必要はありません。
#
#####
# 使い方:
# ルート権限で以下のように実行します。
#    #chmod 744 bkup2nas.sh
#    #./bkup2nas.sh targetlist.txt

# ユーザが設定するパラメータはここから、
# 接続先の設定
# Sambaサーバの接続先(共有フォルダのルートを設定します。)
# //NetBiosName/や \\\\NetBiosName\\ShareRootのように記述します。
#
#service=//NetBiosName
#service=//NetBiosName/ShareRoot
#service=\\\\NetBiosName\\ShareRoot
service=//AAHost/Share1
#
# 保存したいディレクトリがある場合はdirectory変数に設定します。
# このディレクトリはこのスクリプトで自動作成しませんので、
# あらかじめ作っておく必要があります。
#
#directory=
directory=bkupdir
workgroup=Workgroup
username=Tarohoge
password=passhoge
# ここまで

# コマンドリスト
BASENAME=`which basename`
DIRNAME=`which dirname`
SMBCLIENT=`which smbclient`

input_file=$1

# バックアップ対象が書かれているファイルが引数に渡されたか
# 確認します。
if [ -z $input_file ]; then
  echo "引数がありません."
  exit 1
fi

# 引数で渡されたファイルを1行単位で処理する
while read buff;do
  if [ ! -f "$buff" -a ! -d "$buff" ]; then
    echo "$buffはファイル、またはディレクトリではありません"
    exit 2
  fi
  # ディレクトリ名取得
  dir_name=`$DIRNAME  "$buff"`
  filename=`$BASENAME "$buff"`
  echo "ディレクトリは$dir_name  ファイル名は $filename"

  local_file=$buff;
  smb_client_put_cmd=''

  # ファイルバックアップの場合は、putコマンドを設定し、
  # ディレクトリバックアップの場合は、mputコマンドを指定します。
  if [ '.' = $filename ];then
    smb_client_put_cmd='mput *'
  else
    smb_client_put_cmd="put $filename"
  fi

  # 初期ディレクトリが設定されている場合は、smbclientコマンドの
  # -Dオプションが有効になります。
  dir_opt=''
  if [ ! -z $directory ];then
    dir_opt="-D $directory"
  fi

  # smbclientコマンドを確認プロンプトなし、再帰モードで実行します。
  $SMBCLIENT $service $password $dir_opt -W $workgroup -U $username \
    -c "prompt;
     recurse;
     mkdir $dir_name;
     cd .$dir_name;
     lcd $dir_name;
     $smb_client_put_cmd;"
done < $input_file
カテゴリー: サーバ構築 タグ:

CentOS5.2 yum updateをしたらinitctlが制御できずshutdownできない

2009 年 5 月 17 日 oklab コメントはありません

CentOS5.2 yum updateをしたらinitctlが制御できずshutdownできない

timeout opening/writing control channel /dev/initctl

yumコマンドで一気にいろいろなソフトウェアをアップデートすると実行中のソフトウェアとの整合性が取れなくなって発生するようで、上記のメッセージが表示されました。 telinitコマンドでinitの初期化をしようとしても正常に終了できない状態でした。英語圏の情報を調べてみたら、theNthDoctor’s Dumped His Brain Again… timeout opening/writing control channel /dev/initctlこの記事の方が同じような症状で、いろいろトラブルシューティングを試しているようでした。私も通常のrebootコマンドを実行したのですが、コマンドが正常に終了しませんでした。-fで強制実行オプションを付けると問題なく再起動できるようです。RAID構成のため電源ボタンで強制終了するのがちょっと嫌だったので、rebootコマンドでとりあえず解決できてよかったです。

reboot -f

*どうやら、CentOS5.2からCentOS5.3にアップデートしたら、環境によってこの問題が発生するようです。

カテゴリー: サーバ構築 タグ: ,

サーバのRAID1環境でSATAケーブル抜いて縮退モードを試してみた

2008 年 12 月 30 日 oklab コメントはありません

新しく購入したHDDをさすがに壊すことはできませんので、RAID1環境で、片方のSATAケーブルを抜いてどうなるか試してみました。当然ですが、SATAケーブルを抜いても再起動後に片方のHDDでOSが動作するのを確認できました。それでケーブルを元に戻してみたけど自動回復しませんでした。縮退モードになったままなのでmdadmコマンドで再構築。mdadmはRAID環境を構築しない限り使わないコマンドなので、ちょっと勉強になりました。

mdstatコマンドで今の状態を確認してみます。UUと書かれている場合は、HDDが両方とも生きている場合です。_Uとなっているので一方が死んでいる状態です。

[root@xx samba]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
      104320 blocks [2/1] [_U]
md1 : active raid1 sdb3[1] sda3[0]
      2040128 blocks [2/2] [UU]
md2 : active raid1 sdb2[1]
      974615232 blocks [2/1] [_U]

詳細を確認すると、/dev/sda2がremovedと表示されています。

[root@xx samba]# mdadm --detail /dev/md2
/dev/md2:
        Version : 00.90.03
  Creation Time : Tue Dec 30 07:05:18 2008
     Raid Level : raid1
     Array Size : 974615232 (929.47 GiB 998.01 GB)
  Used Dev Size : 974615232 (929.47 GiB 998.01 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 2
    Persistence : Superblock is persistent
    Update Time : Tue Dec 30 12:55:59 2008
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0
           UUID : e11b7f72:d72e8389:6d04d614:d721b971
         Events : 0.12072
    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2

mdadmコマンドで、/dev/sda2を再構築します。

[root@xx samba]# mdadm /dev/md2 --add /dev/sda2
mdadm: re-added /dev/sda2
[root@xx samba]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
      104320 blocks [2/2] [UU]
md1 : active raid1 sdb3[1] sda3[0]
      2040128 blocks [2/2] [UU]
md2 : active raid1 sda2[2] sdb2[1]
      974615232 blocks [2/1] [_U]
      [>....................]  recovery =  0.4% (4172032/974615232) finish=216.1min speed=74826K/sec
[root@sc samba]# mdadm --detail /dev/md2
/dev/md2:
        Version : 00.90.03
  Creation Time : Tue Dec 30 07:05:18 2008
     Raid Level : raid1
     Array Size : 974615232 (929.47 GiB 998.01 GB)
  Used Dev Size : 974615232 (929.47 GiB 998.01 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent
    Update Time : Tue Dec 30 12:57:37 2008
          State : active, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1
 Rebuild Status : 0% complete
           UUID : e11b7f72:d72e8389:6d04d614:d721b971
         Events : 0.12101
    Number   Major   Minor   RaidDevice State
       2       8        2        0      spare rebuilding   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2

コマンドさえわかってしまえば、少ないコストで対応できることがわかりました。

カテゴリー: サーバ構築 タグ:

プロキシ自動取得のためにPACファイルを作る

2008 年 5 月 23 日 oklab コメントはありません

DHCPのプロキシを自動で運用する場合は、直接接続するサイトなど例外をPACファイルで一元管理できます。PACファイルは単純なJavascript関数のFindProxyForURL(url, host)を作るだけです。

function FindProxyForURL(url, host)
{
    if (isPlainHostName(host)) {
        return "DIRECT";
    }
    if (isInNet(host, "127.0.0.1", "255.0.0.0")) {
        return "DIRECT";
	}
    if (shExpMatch(host, "*.microsoft.com")) {
        return "DIRECT";
    }
    if (isInNet(myIpAddress(), "192.168.1.0", "255.255.255.0")) {
        if ((isInNet(dnsResolve(host), "192.168.1.0", "255.255.255.0"))) {
            return "DIRECT";
        }
        else {
            return "PROXY 192.168.1.50:3128";
        }
    }
	return "PROXY 192.168.11.26:3128";
}
カテゴリー: サーバ構築 タグ:

WPADでクライアント側のプロキシ設定の自動取得

2008 年 5 月 6 日 oklab コメントはありません

DHCPはよく使われるますが、ネットワーク規模が大きくなるとプロキシの自動取得はDHCPほど使われていません。けれど、個人が運用する規模のネットワークで、毎回ブラウザ毎に設定するのは面倒なので、ルータのDHCPDから、 SC440に移行して設定してみました。以下サイトがApacheのバーチャルホスト設定やIEとFirefoxの差異などでのトラブルシューティングに役立ちました. プロキシの設定はもっと複雑かと思っていましたが、以下のコードを追加するだけでした。

# wpad
authoritative;
option wpad code 252 = string;
option wpad "http://www.oklab.org/xxxxxxxxxx.pac"; #適当なファイル名.

あとは、ブラウザによっては、xxxxxxxxx.pacを解釈できない場合がありますので、pa拡張子、da拡張子、dat拡張子のリンクを作る必要があります。.最近のFirefox1.5,IE6などでは作らなくても問題なさそうです。

ln -s xxxxxx.pac xxxxxxxx.pa
ln -s xxxxxx.pac xxxxxxxx.da
ln -s xxxxxx.pac xxxxxxxx.dat
カテゴリー: サーバ構築 タグ:

DELL PowerEdge SC440にCentOS5.xをネットワークインストール

2008 年 4 月 27 日 oklab コメントはありません

ネットワークインストールをするには、まずOSをインストールするためネットワークインストール用のISOをダウンロードします。(CentOS5.1の場合

ftp://ftp.riken.jp/Linux/caos/centos/5/isos/i386/CentOS-5.1-i386- netinstall.iso

ISO形式ファイルのCD-Rライティングが分からないなら、Active@ISO BurnerなどフリーのISOライティングソフトをインストールして、ダウンロードしたISOイメージをCD-Rに焼きます。CDからブート起動すれば、OSのインストールが開始されます。最近のCentOS5系のOSインストールは、GUIベースでもCUIベースでも特に設定する必要なく、ネットワークドライバやHDDが設定されます。インストール途中に、CDメディアかFTP,HTTPなどどこからインストールするか聞かれるので、FTPを以下のように指定します。あとはインストール・ウィザードにしたがって進めていけば完了します。

site: ftp.riken.jp
path: /Linux/caos/centos/5/os/i386
カテゴリー: サーバ構築 タグ:

RedHat Enterprise Linux互換のCentOS5 でサーバ運用コスト削減

2008 年 4 月 27 日 oklab コメントはありません

今まではWEBサーバ、プロキシサーバ、ソースコード管理、DNSなどを/opt配下でソースからインストールしていましたが、最近のLinuxOSは環境がかなり整っているので、基本的にOS標準のソフトウェアを使うことで管理コストを削減してみます。

/opt配下で独自管理する場合の良い点は、Mac OSX や Solarisなどを同時に運用している場合の一貫性や、LinuxからSolarisへ変更した場合などに、全てのソフトウェアを自分で管理し ていたため移行しやすいです。一元管理しているためバックアップが容易な点が挙げられます。ただ、ソフトウェアを最新に保ったり、パッケージ管理などでは簡 単に出来る事が結構手間をかけなければいけない欠点などもあります。

CentOS標準のソフトウェアでのソースコード管理はApache2.2.xとSubversion1.4.x。Subversionが生まれた当初は WEBで公開するための設定は一苦労だったけど、Apache2.2系のモジュール管理のおかげで大幅に環境構築コストが削減できました。Subversion1.4系は、バックアップサーバとの同期機能を持っているので、rsync+sshの運用スクリプトな ども大幅に削減できそうです。

DNSはchrootに対応しているのでセキュリティも向上。ただし設定ファイルのディレクトリ構造がOS依存しているので他のOSに切り替える際面倒だと思われます。

DHCPもルータで割り当てるのではなくサーバで運用しました。DHCPをLinuxで構築するメ リットとしては、プロキシ自動設定ができるため。いままではOSのブラウザ毎にプロキシ指定をしていたけど、こういう細かなコストも削減できます。

カテゴリー: サーバ構築 タグ: