概要

この記事は古く、Linuxをあまり理解していない時期に書いたものなので不正確です。参考として挙げたほかのサイトまたは「白箱の本」(毎日コミュニケーションズ)などを参考にしてください。

LANTANKにネットワークの構築、Sambaのインストールなどを行う。

LANTANKについて

dmesgの内容:

Linux version 2.4.21 (embedix@embedix) (gcc version 3.0.4) #48 2004年 11月 19日 金曜日 10:46:05 JST
I-O DATA DEVICE, INC. landisk3 support.
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: ro mem=64M root=/dev/hda1 console=ttySC1,9600
CPU clock: 266.81MHz
Bus clock: 133.40MHz
Module clock: 33.35MHz
Interval = 5207
Calibrating delay loop... 266.24 BogoMIPS
Memory: 62580k/65536k available (1689k kernel code, 2956k reserved, 271k data, 60k init)
Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
CPU: SH7751R
POSIX conformance testing by UNIFIX
PCI: Using configuration type 1
SH7751R PCI: Finished initialization of the PCI controller
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Allocate Area5/6 success.
Julian Shutdown button driver initialized
Starting kswapd
Journalled Block Device driver loaded
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
pty: 256 Unix98 ptys configured
SuperH SCI(F) driver initialized
ttySC0 at 0xffe00000 is a SCI
ttySC1 at 0xffe80000 is a SCIF
Real Time Clock Driver v1.10e
RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
AEC6880R: IDE controller at PCI slot 00:01.0
PCI: Enabling device Artop Electronic Corp ATP865 (0005 -> 0007)
AEC6880R: chipset revision 7
AEC6880R: not 100% native mode: will probe irqs later
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
AEC6880R: ROM enabled at 0x01000000
    ide0: BM-DMA at 0x4420-0x4427, BIOS settings: hda:pio, hdb:pio
    ide1: BM-DMA at 0x4428-0x442f, BIOS settings: hdc:pio, hdd:pio
hda: HDS722525VLAT80, ATA DISK drive
hdb: HDS722525VLAT80, ATA DISK drive
blk: queue 8c21fc40, I/O limit 4095Mb (mask 0xffffffff)
blk: queue 8c21fd7c, I/O limit 4095Mb (mask 0xffffffff)
ide0 at 0x4400-0x4407,0x440a on irq 6
hda: attached ide-disk driver.
hda: host protected area => 1
hda: 488397168 sectors (250059 MB) w/7938KiB Cache, CHS=30401/255/63, UDMA(100)
hdb: attached ide-disk driver.
hdb: host protected area => 1
hdb: 488397168 sectors (250059 MB) w/7938KiB Cache, CHS=30401/255/63, UDMA(100)
ide-floppy driver 0.99.newide
Partition check:
 hda: hda1 hda2 hda3
 hdb: hdb1
ide-floppy driver 0.99.newide
SCSI subsystem driver Revision: 1.00
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
md: linear personality registered as nr 1
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
   8regs     :   197.600 MB/sec
   32regs    :   284.800 MB/sec
raid5: using function: 32regs (284.800 MB/sec)
md: multipath personality registered as nr 7
md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
md: Autodetecting RAID arrays.
 [events: 00000002]
 [events: 00000002]
md: autorun ...
md: considering hdb1 ...
md:  adding hdb1 ...
md:  adding hda3 ...
md: created md0
md: bind<hda3,1>
md: bind<hdb1,2>
md: running: <hdb1><hda3>
md: hdb1's event counter: 00000002
md: hda3's event counter: 00000002
md: md0: raid array is not clean -- starting background reconstruction
md: RAID level 1 does not need chunksize! Continuing anyway.
md0: max total readahead window set to 124k
md0: 1 data-disks, max readahead per data-disk: 124k
raid1: device hdb1 operational as mirror 1
raid1: device hda3 operational as mirror 0
raid1: raid set md0 not clean; reconstructing mirrors
raid1: raid set md0 active with 2 out of 2 mirrors
md: updating md0 RAID superblock on device
md: hdb1 [events: 00000003]<6>(write) hdb1's sb offset: 244195904
md: syncing RAID array md0
md: minimum _guaranteed_ reconstruction speed: 100 KB/sec/disc.
md: using maximum available idle IO bandwith (but not more than 100000 KB/sec) for reconstruction.
md: using 124k window, over a total of 242051264 blocks.
md: hda3 [events: 00000003]<6>(write) hda3's sb offset: 242051264
md: ... autorun DONE.
LVM version 1.0.5+(22/07/2002)
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: AppleTalk 0.18a for Linux NET4.0
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem) readonly.
Freeing unused kernel memory: 60k freed
Adding Swap: 136544k swap-space (priority -1)
EXT3 FS 2.4-0.9.19, 19 August 2002 on ide0(3,1), internal journal
8139cp: 10/100 PCI Ethernet driver v0.3.0 (Sep 29, 2002)
PCI: Enabling device Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (0000 -> 0003)
eth0: RTL-8139C+ at 0xfd000000, 00:a0:b0:70:c1:17, IRQ 5
eth0: PCI cache line size set incorrectly (0 bytes) by BIOS/FW, correcting to 32
PCI: Setting latency timer of device Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ to 64
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
PCI: Enabling device NEC Corporation USB (0000 -> 0002)
PCI: Setting latency timer of device NEC Corporation USB to 64
usb-ohci.c: USB OHCI at membase 0xfd001000, IRQ 7
usb-ohci.c: usb-00:02.0, NEC Corporation USB
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
hub.c: 3 ports detected
PCI: Enabling device NEC Corporation USB (#2) (0000 -> 0002)
PCI: Setting latency timer of device NEC Corporation USB (#2) to 64
usb-ohci.c: USB OHCI at membase 0xfd002000, IRQ 8
usb-ohci.c: usb-00:02.1, NEC Corporation USB (#2)
usb.c: new USB bus registered, assigned bus number 2
hub.c: USB hub found
hub.c: 2 ports detected
PCI: Enabling device NEC Corporation USB 2.0 (0000 -> 0002)
ehci-hcd 00:02.2: NEC Corporation USB 2.0
ehci-hcd 00:02.2: irq 5, pci mem fd000100
usb.c: new USB bus registered, assigned bus number 3
PCI: 00:02.2 PCI cache line size set incorrectly (0 bytes) by BIOS/FW.
PCI: 00:02.2 PCI cache line size corrected to 32.
ehci-hcd 00:02.2: USB 2.0 enabled, EHCI 1.00, driver 2003-Jan-22
hub.c: USB hub found
hub.c: 5 ports detected
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
usb.c: registered new driver usblp
printer.c: v0.11: USB Printer Device Class driver
kjournald starting.  Commit interval 5 seconds
EXT3 FS 2.4-0.9.19, 19 August 2002 on md(9,0), internal journal
EXT3-fs: mounted filesystem with ordered data mode.
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
GIO driver initialized.
Reset switch driver initialized.
Dip switch driver initialized.
LED control driver initialized.
md: md0: sync done.

telnetdの起動

デフォルトでは停止しているのでWeb設定画面から起動する。

初期状態ではDNSの設定に不備があり、ログインプロンプトが表示されるまで数分かかるか、もしくは切断される。接続できない場合は、設定画面のネットワークの設定からネームサーバーアドレスとゲートウェイアドレスを逆にしてみるといけるかもしれない。

ログインできたらadminとrootのパスワードを変更する。

# passwd

再起動はrebootやshutdown -r nowなどで行う。

手動でネットワークを設定する

設定画面のバグによりネットワーク設定が正しく反映されないので、直接設定ファイルを書き換える。

$ su -
# vi /etc/network/interfaces

LANTANKのIPアドレスを192.168.1.2に、ネットマスクを255.255.255.0に、ゲートウェイを192.168.1.1に設定する場合は次のようになる。

#interface file output sample
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1

ネームサーバーを変更する。

# vi /etc/resolv.conf

DNSのアドレスが192.168.1.1のときは次のようになる。

# Domain name searches will fail until you point this to a real DNS server.
#search mydomain.com
nameserver 192.168.1.1

SSH

telnetでは平文でメッセージをやりとりするので、パスワードを入力するときに攻撃者にパスワードが漏れてしまう。そこで通信経路が暗号化され、また公開鍵認証を行えるSSHを用いる。

$ su -
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
(省略) root@LANTANK
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
(省略) root@LANTANK
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
(省略) root@LANTANK

ユーザーを認証できるようにする。

# vi /etc/ssh/sshd_config

次の行(31行目)の行頭のコメントアウトを外す。

AuthorizedKeysFile      %h/.ssh/authorized_keys

ファイルが存在しないと警告が出る場合はファイルを作成する。

$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys

Debianのパッケージ管理システムを使用する

aptでSambaをインストールする例を示す。

まずリポジトリ一覧がコメントアウトされ無効になっているので有効にする。

$ su
# vi /etc/apt/sources.lst

1 行目のコメントアウトを外して次のようにする。

deb http://iohack.sourceforge.jp/debian ./
#deb http://debian.dodes.org/debian sid main non-free contrib

最新の情報に更新する。

# apt-get update

Samba と SWAT をダウンロードしてインストールする。

# apt-get install samba swat

そのまま表示(英語)に従ってインストール、初期設定をする。

SWATサービスを有効にする。

# vi /etc/inetd.conf

最終行あたりにあるSWATの"#<off>#"を削除する。

swat            stream  tcp     nowait.400      root    /usr/sbin/tcpd  /usr/sbin/swat

iconv

最初から組み込まれているiconvにはバグがあり、eucjp-msにも対応していないのでパッチを当てる。

libiconv-1.9.1.tar.gzとlibiconv-1.9.1-ja-patch-1.diff.gzをダウンロードする。

解凍し、パッチを当てる。

$ tar zxvf libiconv-1.9.1.tar.gz
$ zcat libiconv-1.9.1-ja-patch-1.diff.gz | patch -p0

ビルドする。

$ cd libiconv-1.9.1
$ ./configure
$ make ; make check
$ su
# make install

正常にインストールされたか確かめる。

$ iconv -l | egrep -i '(-31j|-ms)'
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN
CP932 SJIS-OPEN SJIS-WIN WINDOWS-31J CSWINDOWS31J

新しいiconvで置き換える。

$ su
# mv /usr/bin/iconv /usr/bin/_iconv
# ln -s /usr/local/bin/iconv /usr/bin/iconv

開発環境

とりあえず必要そうなパッケージは次の通り。

  • patch
  • gcc
  • g++
  • make
  • automake
  • autoconf

RAID1を手動で構成する

ドライブを後から追加したり、セットアップ時にうまく構成されなかった場合は手動で構成する。

RAID1のデフォルトの状態(setraid.shを実行した場合)では、hda1が/、hda2がswap、hda3が/share(データ領域)、hdbがhda3のミラーになる。hdaがクラッシュするとシステムをインストールし直さなくてはならなくなるのでhdbも同じパーティション構成になるようにした。

hdaのパーティション情報(start-end)をメモする。

# fdisk -l /dev/hda

すでにRAIDが組まれている場合はそれを解除する。

# raidsetfaulty /dev/md0 /dev/hdb1

パーティションを作成する。

# fdisk /dev/hdb

「d」でhdb1を削除、メモしておいたstart-endと合わせて「n」でパーティションを3つ作成する。「t」でhdb2, hdb3のパーティションタイプをそれぞれ82, fdに変更する。「p」で確認して、「w」でパーティション情報を書き込む。(hdb中の既存のデータはすべて破棄されるので注意。)

MBRとhda1をhdbにコピーする。

# dd if=/dev/hda of=/dev/hdb bs=446 count=1
# dd if=/dev/hda1 of=/dev/hdb1 bs=2k

hdb2をスワップ領域にする。

# mkswap /dev/hdb2

ミラーリング用のRAID設定ファイルをコピーする。

# cp /var/www/raid/cgi-bin/raidtab.mirror /etc/raidtab

'/etc/raidtab'内の /deb/hdb1 となっている箇所を /dev/hdb3 にして、RAIDを構築する。

# raihotadd /dev/md0 /dev/hdb3

容量によっては数時間かかる。進捗状況は次のようにして確かめる。

$ cat /proc/mdstat

問題点など

  • akaDAVでファイルサイズが1GBを超えるファイルを転送することができないので、1GB以上のファイルを扱いたい場合はSambaをインストールする必要がある

謝辞

カスタマイズ可能なNASを製造・販売された株式会社アイ・オー・データ様、有益な情報を書き込まれた挑戦者掲示板・LANTANK白箱スレの皆様。