2010.12.04

Samba 3.x版について

FreeBSD-81.1ではja-samba-3.0.35_1をpackageから入れた。

# cd /usr/local/etc/rc.d
# ./samba start

として、起動しようとすると、/etc/rc.confに下記を入れろとメッセージがでる。

samba_enable="YES"
winbindd_enable="YES"

samba_enable=”YES”は予想通りだが、winbindd_enable=”YES”は初めて出た。
Samba 2.x以降であろうか、ハッキリしないが、Sambaをインストールすると
/usr/local/etcにsmb.confが出来、sambaというディレクトリーが出来ている。この中には、
smbpasswdファイルがあるので、ここでSambaのPasswordを設定する。

# cd /usr/local/etc/samaba
# smbpasswd -a nnnnnnn  (nnnnnnは登録するuser名)
# New Password:  xxxxxxx
# Retype New Password:xxxxxxx

2010.12.03

FreeBSD-8.1のkernel再構築

サーバーのHDDのミラー化も済み、各種設定も行い動作も良さそうなので、kernelの再構築(reconfiguration)を行うことにした。

1. 設定ファイルの編集

# cd /usr/src/sys/i386/conf      ← 設定ファイルのディレクトリーに移動
# cp GENERIC MYSERVER
# vi MYSERVER
ここで、下記の赤字部を追加 (4096 x nで100倍にした)
options         AUDIT                   # Security event auditing
options         MSGBUF_SIZE=409600
後は、RAID関連、Wireless LAN関係、PCMCIAカード関係をコメントアウト。
SCSI関連は、USBメモリーを使うので、SCSI peripheralのscbus, device  da, device pass, dev sesを除き、
後は全てコメントアウト。
また、NICで現在使用してしているもの、ならびに他に予備機がある場合はその予備機のNICも残し、他は
コメントアウト。(下記の注参照)
(ハッキリ理解出来ない行は残すのが、鉄則。)

注意:

サーバー内には、HDD2台でミラー構成を取っているが、もしHDD以外の要因(電源等)でサーバーが動作不能になった場合は、HDDを予備機に移し、起動すればデバイス名は、/dev/mirror/gm0で予備機のATAの構成が異なっても(起動ドライブ名がad2からad4に変わっても)起動でき、直ちに運用が継続できる。このためには、kernelに予備機のNICのドライバーも含めておく必要がある。

2. コンパイル作業

# config MYSERVER
以下のメッセージが表示された。
Kernel build directory is ../compile/MYSERVER
Don't forget to do ``make cleandepend; make depend''
作業を続行する
# cd ../compile/MYSERVER
# make clendepend  ← 10秒ぐらいか
# make depend   ← 3分ぐらいかかる
# make       ← 25分ぐらいかかる
# make install    ← 1分ぐらいかかる
# reboot      ← 新kernelを使って再起動

 kernelサイズが、11,783KB → 6,681KB となった。
 測定していないが、起動時間も早くなった感じである。

3. 新カーネルになったことを確認

$ uname -a
FreeBSD uls.fam.cx 8.1-RELEASE FreeBSD 8.1-RELEASE #0:
Fri Dec  3 19:54:02 JST 2010     xxxxxxxx@uls.fam.cx:
/usr/src/sys/i386/compile/MYSERVER  i386

 MYSERVERで作られたkernelとなっている。

4. コンパイルしたkernelに誤りがあり、立ち上がらなかった場合の処理

 下の画面が現れて、カウントダウンしている間にスペースキーを押す。
   なお、/boot/loader.conf でカウントダウン数を、例えば
   autoboot_delay=”3″ (3秒の場合)のように指定できる。← 気の短い人向き (私)
freebsd001.gif

スペースキーで止まったら、6を押して、OKのLoader Promptを出す。
これで、旧kernelで起動するように指定できる。

OK unload     ← 既に読み込まれているモジュールをunload
OK boot kernel.old    ← kernel.oldを使ってbootを指示

再度kernelコンパイルを最初からやり直すことになる。
再度のkernelも起動出来なかった場合、1つ前の起動出来ないkernelがkernel.oldとして保存され、さらにその前の起動出来たオリジナルのkernelは失くなってしまう。
 (1) kernel.old → 喪失   (オリジナルの起動出来たkernel)
 (2) kernel → kernel.old  (構築して起動出来なかったkernel)
 (3) 再コンパイルkernel → kernel(再度のkernelも起動出来ない場合が問題)
これでは、もう起動する手段が無くなってしまうので、再度のコンパイルに先立ち、起動できたkernelをkernel.orgとして保存しておくと良い。

# cd /boot
# mv kernel.old kernel.org

これで、最悪の事態でも、前の図のカウントダウン画面でスペースキーを押し、6を押してOKのPromptを出して、

OK unload
OK boot kernel.org

で、起動できる。

BIND 9.6.2-P2 (DNSサーバ)

FreeBSD 8.1を入れたところ、BINDのバージョンが9.6.2-P2になっており、設定方法が変わったので、書いておく。

1. rndc.keyの作成

 BINDをローカル、リモートからコマンドで制御するためのkeyで、これを作成する。
 (使用法は、Netで参照のこと)
以下のコマンドで、rndc.keyが作成される。

# rndc-confgen -a

2. named.confの例

options {
directory       "/etc/namedb";
pid-file        "/var/run/named/pid";
dump-file       "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
listen-on {127.0.0.1; 192.168.1.0/24;};
forwarders {210.188.224.10;};
};
include "/etc/namedb/rndc.key";
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};
view "internal" {
match-clients {192.168.1.0/24; 127.0.0.0/8; };
recursion yes;
zone "." {type hint; file "/etc/namedb/named.root";};
zone "localhost" {
type master;
file "/etc/namedb/master/localhost-forward.db";
};
zone "127.in-addr.arpa"  {
type master;
file "/etc/namedb/master/localhost-reverse.db";
    };
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/namedb/slave/canal.rev";
allow-update { none; };
};
zone "fam.cx" {
type master;
file "/etc/namedb/slave/canal.zone";
allow-update { none; };
};
//zone "idema-jp.org" {
//        type master;
//        file "slave/idema.zone";
//        };
};
  • masterディレクトリー内
  •  namedbのディレクトリーの中には、masterの名のディレクトリーがあり、
     その中には、
     ・empty.db
     ・localhost-forward.db
     ・localhost-reverse.db
     が入っている。

  • slaveディレクトリー内
  •  slaveディレクトリーは、最初からあるmasterディレクトリー内のファイルと区別するた、新たに作り、その中にゾーンファイルと逆引きのファイルを入れた。

/etc/namedb → named.conf, named.root, rndc.key
    |
    +ー master → empty.db, localhost-forward.db, localhost-reverse.db
    +ー slave → canal.zone, canal.rev

 (1) canal.zone (正引き定義)

$TTL 3600       ; 1 hour
@             IN      SOA   uls.fam.cx.  root.uls.fam.cx.(
2006121601 ; serial
10800      ; refresh (3 hours)
3600       ; retry (1 hour)
3600000    ; expire (5 weeks 6 days 16 hours)
3600       ; minimum (1 hour)
)
IN       NS      uls.fam.cx.
IN       MX      10 uls.fam.cx.
uls            IN       A       192.168.1.5
www        IN       CNAME   uls
ftp            IN       CNAME   uls
uls2          IN       A       192.168.1.6

 (2) canal.rev (逆引き定義)

$TTL 3600       ; 1 hour
@             IN      SOA   uls.fam.cx.  root.uls.fm.cx.(
2006121602 ; serial
10800      ; refresh (3 hours)
900        ; retry (15 minutes)
3600000    ; expire (5 weeks 6 days 16 hours)
3600       ; minimum (1 hour)
)
IN   NS   uls.fam.cx.
5                      IN   PTR  uls.fam.cx.
6                      IN   PTR  uls2.fam.cx.

3. /etc/resolv.conf

nameserver   127.0.0.1

4. /etc/rc.confに次を追加

named_enable="YES"
named_program="/usr/sbin/named"

5. 動作確認例

 googleのIPアドレスを求めてみる。

$ nslookup www.google.com
Server:         127.0.0.1
Address:        127.0.0.1#53
Non-authoritative answer:
www.google.com  canonical name = www.l.google.com.
Name:   www.l.google.com
Address: 66.249.89.104
Name:   www.l.google.com
Address: 66.249.89.99

2010.10.17

MySQL バージョン5.5.6

*** 2010/12/16に内容一部修正しました ***
家のサーバーはFreeBSD-7.0で運用しているが、そろそろ最新のFreeBSD-8.1に上げようと準備中です。
OSのインストール後にMySQLをportsで入れて、文字コードの設定で引っかかった。
(1) インストール

# cd /usr/ports/databases/mysql55-server
# make WITH_CHARSET=ujis WITH_XCHARSET=all install clean
# cd ../mysql55-client
# make WITH_CHARSET=ujis WITH_XCHARSET=all install clean

(2) my.cnfの編集

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# cd /etc
# chmod +w my.cnf
# vi my.cnf
[mysqld]
datadir = /usr/db/mysql
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16M

(3) DBをインストール

# mkdir /usr/db
# mysql_install_db --basedir=/usr/local --datadir=/usr/db/mysql
# chown -R mysql /usr/db/mysql

(4) 起動

次にmysqlの起動ファイルを修正します。

# cd /usr/local/etc/rc.d
# chmod +w mysql-server
# vi mysql-server

下記の赤字部分を修正する。
mysql_dbdirの記述を有効にして/usr/db/mysqlを指定し、
–defaults-extra-file=/etc/my.cnf として、/etc/my.cnfを明に指定する。

: ${mysql_enable="NO"}
: ${mysql_limits="NO"}
${mysql_dbdir="/usr/db/mysql"}
: ${mysql_args=""}
mysql_user="mysql"
mysql_limits_args="-e -U ${mysql_user}"
pidfile="${mysql_dbdir}/`/bin/hostname`.pid"
command="/usr/sbin/daemon"
command_args="-c -f /usr/local/bin/mysqld_safe --defaults-extra-file=/etc/my.cnf --user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args}"

これで、ようやくMySQLを起動できる。

# ./mysql-server start

(5) パスワード設定

# mysql -u root
mysql > use mysql;
mysql > set password for root@localhost=password('xxxxx');
mysql> flush privileges;
mysql > exit;

(6) 文字コード調べ

# mysql -u root -p
Password xxxxxxx
mysql > SHOW VARIABLES LIKE 'character_set_%';
+-----------------------------------+--------+
| Variable_name                             | Value   |
+-----------------------------------+--------+
| character_set_client              | latin1 |
| character_set_connection     | latin1 |
| character_set_filesystem              | binary |
| character_set_database               | latin1 |
| character_set_results                    | latin1 |
| character_set_server          | latin1 |
| character_set_system           | utf8   |
+------------------------------------+--------+
6 rows in set (0.00 sec)

入れたままだと、latin1の文字コードになっている。

(7) 文字コード指定

MySQLをストップして、/etc/my.cnfの[mysqld]のセクションにdefault-character-set=ujisを追加したら、エラーが出て起動できなくなった
調べたらdefault-character-set=ujisは変更され使えなくなったことが分かり、下記のように2行追加した。

[mysqld]
datadir = /usr/db/mysql
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
    ・
    ・
myisam_sort_buffer_size = 8M
character-set-server=ujis
skip-character-set-client-handshake

(8) 再確認

mysql> SHOW VARIABLES LIKE 'character_set_%';
+----------------------------------+--------+
| Variable_name                 | Value   |
+----------------------------------+--------+
| character_set_client          | ujis |
| character_set_connection            | ujis |
| character_set_database      | ujis |
| character_set_filesystem              | binary |
| character_set_results           | ujis |
| character_set_server            | ujis |
| character_set_system          | utf8   |
+----------------------------------+--------+

systemはデフォルトでutf8、filesystemはbinaryで問題ないので、無事ujsi(EUC)が使えるようになった。 やれやれ。

2010.08.31

PageButeでMT-3.35のページ分割

以前、MTPagenateというプラグインを使ってメインページの分割を行った。
しかし、このためにはphpが動く環境を構築して、index.htmlをphp化してindex.phpとして、index.htmlにアクセスしてきたのをindex.phpに振り向けるRedirectの設定を.htaccessで行う必要もあった。

ところが、その後PageButeと言うプラグインが提供されて、php化することなく簡単にページ分割ができるようになった。以下は、本ブログでメインページを分割した内容である。
ただし、本ブログはMTのVersionが3.35であり、MT4あるいはMT5の場合は、些か異なるのでネットで他の記事を参照されたい。

なお、カテゴリーのページも同様に分割できる。(適用ブログ例)

(1) まず、PageButeをダウンロードして解凍する。

(2) 解凍したPageBute.plをmt/pluginsディレクトリーに入れる。
(3) 設定内容(メインページに赤字部を挿入)

         <div id="pagebody">
            <div id="pagebody-inner" class="pkg">
               <div id="alpha">
<div class="content-nav">
<MTIfPageBefore>
<span><$MTPageBefore delim="前の5件"$></span>
</MTIfPageBefore>
<$MTPageLists$>
<MTIfPageNext>
<span><$MTPageNext delim="次の5件"$></span>
</MTIfPageNext>
(全エントリー数:<$MTBlogEntryCount$>)
</div>
                  <div id="alpha-inner" class="pkg">
<MTPageContents count="5">
                     <MTEntries lastn="500">
<$MTPageSeparator$>
                     </MTEntries>
</MTPageContents>
             </div>
<div class="split">
<MTIfPageBefore>
<span><$MTPageBefore delim="前の5件"$></span>
</MTIfPageBefore>
<$MTPageLists$>
<MTIfPageNext>
<span><$MTPageNext delim="次の5件"$></span>
</MTIfPageNext>
(全エントリー数:<$MTBlogEntryCount$>)
<br><br><br></div>
          </div>

« Previous | Next »