Archive for the ‘Cent OS’ Category.

FTPでミラーリング

数百GBのデータを管理したいのですが、管理したいデータはFTPで公開されている配布元のデータ。
これが更新されたり追加されたりしたら、これを検知してその情報を管理アプリケーション側のデータベースに登録したい感じのことをやりたいのです。

配布元(FTP) > - <  ( Internet ) > - < 管理アプリケーション <- 管理者

数が少なければ、配布元にFTPアクセスして管理アプリケーションで持っている情報と突合せして、
新しかったり、管理アプリケーションに持っていないデータであれば、それを追加すれば良いかもしれないのですが、
多くなると配布元へのFTPアクセス負荷が増えそうだし、その配布データ自体は上記で言う管理アプリケーション側で
また別のところに配信するために保持しておかないといけない。
それを、増えた減ったのタイミングでダウンロードさせるのも面倒な処理になるなぁと思っていました。

なので、FTPでミラーリングみたいなことが出来れば、後はローカル(管理アプリケーション側)だけで処理出来るので
何かいいのないかな。と思って探していたら、「lftp」と言うLinux用のFTPクライアントを見つけました。

LFTP – sophisticated file transfer program
lftp を使った ftp ミラーリングと便利機能

このlftpは、標準的なツールのようで、すでにCentOS5.3でも使えるようになっているようでした。
すごそうなのは、

# mirror

の一発で簡単にミラーリング(配布元のファイルをローカルにダウンロード)出来るとこです。
これをcron登録しておきて定期的にミラーリングしておけば、わざわざFTP元まで見に行く必要がない。

基本的な使い方は以下です。
(と言うか、これしかまだやってない。)

# lftp -u (FTPユーザー名),(パスワード) 接続先
lftp :~&gt;set ftp:charset cp932
lftp :~&gt;mirror

上記でset ftp:charset cp932とやっているのは、おそらく配布元がWindowsサーバーかなんかで、ファイルがSJISになっていて普通にlsしたら化けていたので文字セットを変えてみたものです。
それはそれで、ログインして単に「mirror」すれば良いだけというのは簡単だ!
しかし一度目は時間かかるのはしょうがないとしても、二度目以降はどうなんだろうか?


忙しい人の為のCentOSUSB外付けHDD増設

訳あって、大量データを保存する場所が欲しくなったのですが、とりあえず外付けHDD(USB接続)が売るほどあったので、
それを付けてみることにしました。
じっくり時間を掛けてやるヒマがないので、かいつまんで特急でやりましたが、この作業の目標としては。

・USDディスクを/extにマウントさせる

事ができればOKとします。(本来は、/を拡張したりとかがしたいですが・・・)

環境は

# cat /etc/redhat-release
CentOS release 5.3 (Final)
# uname -a
Linux xxxxxxxxx 2.6.29.1 #6 SMP Mon Apr 27 19:17:47 JST 2009 i686 i686 i386 GNU/Linux

こちらの記事が参考になりました。
USBのハードディスクを接続するには
はじめての自宅サーバ構築 – Fedora/CentOS – 物理ディスクの増設

まずは、中身はどうなっても良い外付けUSB-HDDを用意します。Buffalo HD-CN1.0TU2(容量1TB)をマシンに取り付けます。
起動中につけましたが時に問題なさそう。

これで、USBのデバイスが認識されているかを確認します。

# lsusb
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 0411:00a2 MelCo., Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# cat /proc/bus/usb/devices
     :
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(&gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0411 ProdID=00a2 Rev=f6.26
S:  Manufacturer=BUFFALO INC.
S:  Product=BUFFALO INC. USB-SATA Bridge
S:  SerialNumber=FAFFFFF0FDF1FFF9BF801159
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

認識されているっぽい。しかしこれだとたくさんつないだときに判別が大変になるだろうなぁ。
まあサーバーにUSBHDDをタコ足しないか。

@ITの記事を見ると、USB接続HDDはSCSI接続として認識されるらしい。
以下コマンドでSCSI接続のHDDを確認できます。

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD5000AACS-0 Rev: 01.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD5000AACS-0 Rev: 01.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: SAMSUNG  Model: HD103SI          Rev:
  Type:   Direct-Access                    ANSI  SCSI revision: 02

SCSI接続の3番目なので、/dev/sdcと言う事になるんだったかな?
現在のパーテーション情報を確認します。

# fdisk -l
 
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
 
デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         144     1052257+  82  Linux swap / Solaris
/dev/sda3             145       60801   487227352+  83  Linux
 
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
 
デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          13      104391   83  Linux
/dev/sdb2              14         144     1052257+  82  Linux swap / Solaris
/dev/sdb3             145       60801   487227352+  83  Linux
 
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
 
デバイス Boot      Start         End      Blocks   Id  System
/dev/sdc1               2      121601   976752000    f  W95 Ext'd (LBA)
/dev/sdc5               2      121601   976751968+   7  HPFS/NTFS

うん。NTFSでフォーマットされているはずのものなのでこれでよいと思います。
あとは/dev/sdcをLinux用にフォーマットしなおして、/extにマウントさせればOK。
fdiskツールを使用して領域の編集をします。

# fdisk /dev/sdc
 
このディスクのシリンダ数は 121601 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)
 
コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

まずは、既存のパーテーションを全部消します。

コマンド (m でヘルプ): d
領域番号 (1-5): 1-5

そして、領域を新たに作成します。全部基本領域でとりあえずはいいでしょう。

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-121601, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-121601, default 121601):
Using default value 121601
 
コマンド (m でヘルプ): p
 
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
 
デバイス Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      121601   976760001   83  Linux

あとは、これを保存してfdiskを終了させます。

コマンド (m でヘルプ): w
領域テーブルは交換されました!
 
ioctl() を呼び出して領域テーブルを再読込みします。 ←ここでなんか処理実行中
ディスクを同期させます。 ←ここでもなにか処理実行中

一応確認してみると

# fdisk /dev/sdc -l
 
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
 
デバイス Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      121601   976760001   83  Linux

うむ。全部Linux用になったようです。
これでこのままマウントしてもマウントできません。まだフォーマットしていないからです

# mount /dev/sdc1 /ext
mount: unknown filesystem type 'ntfs'

前の情報をどっかで持ってるってことなのかな?とりあえずLinux用ファイルシステムに作り変えます。

# mkfs -t ext3 /dev/sdc1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
122109952 inodes, 244190000 blocks
12209500 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
7453 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

これでマウントすればOKです。

# mount /dev/sdc1 /ext
# cd /ext

これで/extに移動してファイルを作ってみたりしたけど、大丈夫ぽい。簡単で拍子抜けしました。
コマンドのダイジェスト

  • USBデバイスの接続状況を表示する

    lsusb
    参考サイト
    USB/OS/Linux – SyncHack

    cat /proc/bus/usb/devices

  • SCSIデバイスを確認する

    cat /proc/scsi/scsi

  • パーテーション情報を表示する

    fdisk -l


CentOS5.4で無線LANを使ってみる

Lavie MにCentOSを入れて使ってみるの続編です。

CentOS5.4を使って普通に使えるとこまでは行きましたが、このLavie Mには無線LANインターフェイスが付いている模様。
これを何とか使ってもうちょっと快適に使いたいことろです。

Linuxで無線LANを使うには
を参考にさせて頂きました。

環境は
・CentOS5.4(3.9からアップグレード)
・NEC Lavie M LM700/7
・無線LANルーター親機 Bufferlo AirStation WHR-G

まず付いている無線LANインターフェイスはなんなのかを調べたい。これは、GUIの「システム」-「管理」-「ネットワーク」で調べられるけど、コマンドではどう調べるのかも押さえておきたい。

コンピュータに接続されているハードウェア(OSが認識できている)は以下コマンドで調べられます。

# lspci

で、ずらずらリスト出力されるのですが、一番下に

02:09.0 Ethernet controller: Atheros Communications Inc. Atheros AR5001X+ Wireless Network Adapter (rev 01)

と出ているので、Atheros AR5001X+というのが無線LAN用のハードウェアだと分かります。

そして、このハードウェアを使用するためのドライバがあるはずですが、それは以下の場所を見てみます。
もっといい方法があるかも?

# ls /lib/modules/2.6.18-164.el5/kernel/drivers/net/wireless

すると、「ath5k」というモジュールがあるのがわかります。
このへんは感覚なのですが、「Atheros AR5001X+」と紐づけるにはまず
5k → 5000で、
athが会社名
なのでそれっぽいな、という判別方法しかないのですが、もっといい判別方法ないのかなぁ?

これのドライバはどこに読み込まれているのか?読み込まれているモジュールを取得するには、以下コマンドを使います。

# lsmod

これでath5kが読み込まれているのが確認出来ました。
というか、これは確認方法で、既にここまでは何もしなくても出来ていました。

全く勘違い編

最初は、iwconfigというコマンドを軸にいろいろ以下のようなことをやっていたが、これはあんまり意味がなかった。

無線LANデバイスをデスクトップのGUIの設定ツール(システム-管理-ネットワーク)から起動すると

Error for wireless request "Set Mode" (8B06):
Set failed on deice wlan0: invalid argument
Error for wireless request "Set requency"(8B04):
 invalid argument "自動".

と出て失敗してます。
これの設定ファイルである、/etc/sysconfig/networks-scripts/ifcfg-wlan0を見てみると

CHANNEL=自動

とか書いてありました。確かにGUIの設定で「自動」って選択項目があったので、それをそのまま設定してくれちゃってたのかもしれませんが、
普通、ドライバに渡すパラメータが日本語というのはまだまだないんじゃないかと。
ここをコメントアウトして、再度起動してみると

Error for wireless request "Set requency"(8B04):
 invalid argument "自動".

の方のエラーが消えたので、SetModeで失敗している原因ぽい「MODE=Auto」
をコメントにしたら、とりあえず起動のエラーは消えました。

というか、GUIの「ワイヤレスデバイス設定」のモードを「自動」にするとどうもおかしくなるので「管理」にしたら
この辺のifcfg-wlan0の記述がおかしなのも直ったみたいです。
この状態で、以下コマンドをやってみると、親機が見えているようでした。

# iwlist wlan0 scanning
 Cell 02 - Address: (親機MACアドレス)
             ESSID: (SSID)
        :

見えているのであとちょっとだ!と思っていたのですが、ここからiwconfig系のことを何やってもだめ。
どうやっても、

Error for wireless request "Set requency"(8B04):
 invalid argument "自動".

が出てしまい、うまく起動できないのです。

解決編

じゃあ、まず基本的なところから確認しようと思い、親機をブラウザ設定画面で確認しました。
親機の現在の設定はAOSS(AirStation One-Touch Secure Systemの略らしい)を使用しており、この暗号化レベルがいくつか並んでいます。
・WPA-PSK-AES
・WPA-PSK-TKIP
・WEP128
・WEP64

これの「WPA-PSK-AES」のところに(現在使用中)となっているので、これを使っているのだろうと想像しました。
WPAというのは、従来のWEPという規格の改良版ということなので、これはこのままでよさそうです。

WPAとは 【Wi-Fi Protected Access】 – 意味/解説/説明/定義 : IT用語辞典

ところで、このWPAでLinuxを無線LANクライアントにする場合、どうがんばっても先ほどのiwconfigなどを使ってもだめなようです。
そこで、wpa_supplicantというツールを使用するとつなぐことができると言うことを聞いたのでやってみました。

参考ページ:
wpa_supplicant
YANO’s digital garage – madwifiとwpa_supplicant
ごえごえの Linux 備忘録: CentOS+INSPIRON 700m 無線(WPA-PSK)設定

まずwpa_supplicantはyumで普通にインストール出来た。

# yum install wpa_supplicant

続いて、このwpa_supplicantの設定をします。
まずは、wpa_supplicantファイルを確認します。
とはいっても、今回インターフェイスやドライバーに特に変わったことはやっていないのでそのままでよいと思います。

# vi /etc/sysconfig/wpa_supplicant
  :
INTERFACES="-i wlan0"
  :
DRIVERS="-D wext"
  :

次に、/etc/wpa_supplicant/wpa_supplicant.confです。

# vi /etc/wpa_supplicant/wpa_supplicant.conf
network={
     ssid="(設定されているSSID)"
     proto=WPA
     pairwise=CCMP
     group=CCMP
     psk=(パスフレーズ)
}

(設定されているSSID)は、AirStationの設定画面に設定されているSSIDを設定します。
(パスフレーズ)も、同じ欄にある「暗号化キー」をそのまま入れればいいのかなと思ったらやはり駄目で、
これをクライアント側で暗号化?するために、wpa_passphraseというツールを使います。
ためしに、SSIDをAAA、パスフレーズをAAAAAAAAでやると以下のように出力されます。

# wpa_passphrase AAA AAAAAAAA
network={
    ssid="AAA"
    #psk="AAAAAAAA"
    psk=2f2681c2d3d2d8d1e・・・

これを先ほどのSSIDと暗号化キーで出た出力を設定すればよいです。
これでwpa_supplicantを起動します。