Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2009年6月29日月曜日

追加レポジトリrpmforgeを利用する このエントリーを含むはてなブックマーク

本記事では、レポジトリrpmforgeを追加して、より多くのパッケージを利用できるようにする方法をまとめる。まず、標準のレポジトリのパッケージがrpmforgeのパッケージによって上書きされないように、次のプラグインをインストールする。

# yum -y install yum-priorities

/etc/yum.repos.d/CentOS-Base.repoの各[base],[updates],[addons],[extras]にpriority=1を追加する。

GPGキーをインストールして、rpmforgeレポジトリをインストールする。

# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# vi /etc/yum.repos.d/rpmforge.repo 
enabled = 0  <--- デフォルトで無効にする。

追加パッケージを利用する場合は、オプションで指定する。

# yum --enablerepo=rpmforge install hoge

2009年6月25日木曜日

Ubuntu9.04で無線LAN このエントリーを含むはてなブックマーク

本記事では、Ubuntu9.04 on ThinkPad X31でBuffaloのWLI-CB-54を使って無線LANの設定方法をまとめる。

以下の必要なパッケージをインストールする。

# apt-get install ndiswrapper-common ndisgtk
# apt-get install lha
# apt-get install b43-fwcutter

BuffaloのサイトからWLI-CB-54のドライバをダウンロードして、展開する。

# wget wdrv-1052.exe
# lha -e wdrv-1052.exe

システム→システム管理→WindowsWirelessDriverから、次のドライバwdrv-1052/cbg54/win2000/netg54s.infを追加する。後は、個別のネットワーク環境に応じて、設定すれば良い。

yum updateでGPGキーがないと怒られる件 このエントリーを含むはてなブックマーク

centOS 5.2をインストールした直後に、yum updateを実行したら、GPGキーがないと怒られました。怒られないためには、まずGPGキーをとってきた、次にそれをrpmでインポートすれば良いです。

# wget http://ftp.riken.jp/Linux/centos/RPM-GPG-KEY-CentOS-5
# rpm --import RPM-GPG-KEY-CentOS-5
# yum update

2009年6月24日水曜日

ISOイメージのマウント このエントリーを含むはてなブックマーク

isoイメージhoge.isoを/mnt/isoにマウントするには、次のコマンドを打つ。

# mount -t iso9660 -r -o loop hoge.iso /mnt/iso

2009年6月23日火曜日

ValueDomainでダイナミックDNS このエントリーを含むはてなブックマーク

固定IPアドレスをISPから付与されていないとき、自宅サーバを立てるならば、動的に変更されるIPアドレスを、DNSサーバに通知して、常にドメイン名とIPアドレスとが正しく対応するようにしなければならない。

ダイナミックDNS機能のご利用方法」に設定方法が詳しく載っている。最初にここを見ないで、設定していて、うまくIPアドレスが更新されなくて困った。

追記:WebからダイナミックDNS情報を変更・閲覧できるようになっているが、これらは当該のサーバから行う必要がある。他のIPを割り当てられているPCから行うと、勝手にそのIPが登録されていれてしまうので、要注意。

2009年6月20日土曜日

ThinkCentre A50(8320-87J)をサーバにするときの注意点 このエントリーを含むはてなブックマーク

本記事では、ThinkCentre A50(8320-87J)にcentOSを入れて、常時立ち上げでサーバとして運用する場合に注意すべきことを書く。

カーネルパラメータ

このマシンにsshdを入れて、常時立ち上げ状態にして1日ほど経過すると、sshでログインが異常に遅くなる(あるいはログインできない)症状が発生した。また、このサーバに直接ログインを試みると、同じように異常に時間がかかったり、フリーズしたりすることもある。

ネットで調べてみると、割り込み要求を処理するapicという機能を停止して、ブートすると解決するらしい。実際に、/boot/grub/grub.confで、次のようにnoapicというカーネルパラメタを与えてブートするように設定した。

      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1        <-- コメント         kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  <-- 追加 

すると、以降、上で説明した症状は現れなくなった。

追記: この設定をして、サーバを運用していたところ、1日とは言わないまでも1週間以内にはサーバがダウンしてしまう症状が現れた。ネットワークの設定ミスやケーブル不良などの他の要因を取り除いても依然として症状は現れた。一部のサービスだけがダウンしているのならまだしも、ログを見るかぎりでは、すべてのサービスのログが一斉に途切れていた。

この症状から推測すると、おそらく、ある時にとたんにOS自体がダウンしてしまったのだろう。とすると、個別のサービスの設定ミスが原因であるのが考えられないし、バグがあるとしても、何らかの報告がネット上にあるハズだが、見当たらない。ゆえに、ハードウェアがらみの原因が疑われる。

もう一度、apic関係でネットを調べてみたところ、さらに、もう1つのカーネルパラメータacpi=offを与える必要があるという情報をみつけた(というか、見落としていた)。さっそく、以下のように、grub.confを書き換えて、再起動した。

      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1        <-- コメント
      #kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  <-- 追加
       kernel /vmlinuz-2.6.18-xxx.xxx.xxx.el5 ro root=LABEL=/1 noapic  acpi=off <-- さらに追加

参考URL: Ubuntuforums.org:"Sudden random drastic slow down (near freeze)"

さらに追記:また、サーバダウンが発生した。まだ1回しか確認していないが、この前の設定変更では解決しなかったようだ。実は、同じ機種のサーバをもう1台メンテナンスしているが、そちらはダウンしていない。両者の違いは、起動しているサービスおよび負荷ぐらい。

まずは起動サービスの差分を疑ってみる。実験前に、極力不要なサービスを停止した。そして、ダウンした方のサーバでacpidとampdが動いていた(他方のサーバでは動いていない)ので、これらを停止した。経過観察してみる。

OSのインストール

OSを新規インストールするとき、このタイプのThinkCentreだと少し苦労するかもしれない。インストールに使えそうなI/Fとしては、FDドライブとCDドライブとUSBとイーサネットコネクタがある。

  • 最近のlinuxはフロッピー起動の方法が使えない。ブートイメージが1.5Mに収まらなくなったとか。
  • 手元にCDに入ったOSがあれば良いが、雑誌に付いているのはDVDの場合が多い。
  • USB起動を試してみたができなかった。

順当に考えると、ネットワーク経由のインストールが残される(他にもあるかもしれないが)。何らかの方法でマシンを起動できたとしても、私の場合、プロキシ経由でしかインターネットに接続できないので、単純にHTTPあるいはFTP経由のインストールはできない。

よくWebで紹介されている方法でPXEブートでインストールする方法があるが、DHCPサーバを立てなければならない。(企業などのように)既にDHCPサーバのある内部ネットワークで、この方法はあまりやりたくない。

そこで、私のとった方法を説明する。起動イメージ(boot.iso)を取得して、CD-ROMかDVDに焼く。DVDの場合は、DVDドライブをマシンにUSB接続すること(<- DVDドライブでブートはできるが、インストールプロセスでHard Disk, FTP, HTTPなどインストール方法を聞かれるところで、DVDドライブが選択肢になくて、起動用途でしかDVDドライブは使えなかった)。

# wget http://ftp.riken.jp/Linux/centos/5.2/os/i386/images/boot.iso

isoイメージをCDやらDVDに焼く方法は、インターネットで調べたらたくさんの情報があるので、ここでは省略するが、私は、Ubuntuで普段作業しており、Braseroというツールが入っているので、それを使って作成した。

次に、この起動イメージを使って、マシンを起動した(もちろん、Baiosでデバイスの起動順位を適切に設定しておくこと)。

プロキシ経由でないと、インターネットに接続できないので、マシンを起動できたからといって、そのままインストールというわけにはいかない。ここでは、同一ネットワーク上にある他のPC(HDの空きスペースが十分あること)を使ったインストールを説明する。

方法は、この作業用PCにOSのイメージファイルをダウンロードし、さらにこのPCをwebサーバとすることで、このローカルレポジトリを内部ネットワークで公開するのである。DHCPでIPを動的に配布している場合は、インストール途中でIPが変化しないように注意が必要。

作業用PCで、webサーバをインストールする。この方法はここでは説明しない。次に、下のようにイメージファイルをダウンロードする。

# wget http://ftp.riken.jp/Linux/centos/5.2/isos/i386/CentOS-5.2-i386-bin-DVD.iso

そして、ISOファイルをweb公開用のディレクトリ(例えば、hogeユーザ用のディレクトリにcentosというディレクトリを作るなら、マウントポイントは/home/hoge/public_html/centos)にマウントする。

# mount -t iso9660 -r -o loop CentOS-5.2-i386-bin-DVD.iso /home/hoge/public_html/centos

作業用PCのIPアドレスを調べる。下のinetアドレスというところ。ここでは、説明のため、192.168.0.1とする。

# ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス 00:00:00:00:00:00 
         inetアドレス:192.168.0.1  ブロードキャスト:xx.xxx.xxx.xxx  マスク:xxx.xxx.xxx.xxx
以下、省略

作業用PCのhogeユーザのweb公開用のディレクトリに、適当なhtmlファイルを置いて 、きちんとアクセスできるか確認する。

# cd /home/hoge/public_html
# echo 'Hello, World!' > index.html

そして、http://192.168.0.1/~hogeにアクセスして、Hello, World!と表示されたらOK!

そして、インストール対象のPCを起動させてHTTPインストールを選択する。レポジトリのあるサイトとディレクトリを聞かれるので、下のように入れる。以上

サイト:192.168.0.1
ディレクトリ:/~hoge/centos

dnsmasqで簡易DNSサーバ このエントリーを含むはてなブックマーク

本記事では、簡易的なDNSサーバを構築するための方法をまとめる。

DNSサーバ

ネットワーク上にある各ホストにはipアドレスが割り当てられているが、各クライアントは、それらのホスト(例えば、webサーバなど)を指定するときにipアドレスでなく、ホスト名を使うことが多い。実際に、ネットワークがある程度以上大きくなると、それだけホスト数が増えるからである、利用するホストのipアドレスを覚えることは現実的でない。そこで、DNSサーバは、クライアントが問い合わせてきたホスト名から、そのipアドレスを答える。

dnsmasq

DNSサーバというと、Bindが有名だが、設定するのが大変で、セキュリティにも十分注意しなければならない。小中規模の内部ネットワークで名前解決をする場合など、手っ取り早く簡易的なDNSサーバを立てる場合、dnsmasqがちょうど向いている。

以下のサイトに、比較的詳しい情報が載っているので、興味をもった人は見てみるとよいと思う。

設定

centOS 5.3にインストールしてみた。

# yum install dnsmasq

設定ファイルは/etc/dnsmasq.confと/etc/hostsと/etc/resolv.confと(dhcpdを使っている場合は、そのサービスを提供しているサーバの)/etc/dhcpd.confである。設定方法は、構築するネットワークによってまちまちだが、(上の参照サイトにあるように)それほど多くの設定項目があるわけではない。私の場合は、内部ネットワークにはdhcpサーバを既に動かしていたことと、プロキシサーバを経由してインターネットに接続するようなネットワークだった。

まず、/etc/dnsmasq.confを読みながら、必要と思われる部分をコメントアウトしたり、パラメータを設定した。まず、"better netizen"であるために、次の2つをコメントアウト。

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

内部ネットワークをWANをつなげるゲートウェイ(NIC2枚刺し)のLAN側のNIC(=eth1)が名前解決を受け付ける方なので、それを指定した。

# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=eth1

DHCPはdhcpdが既にサービスを提供しているので、dnsmasqではdnsだけを提供することにする。したがって、ゲートウェイのNIC2枚(eth0およびeth1)はDHCPを使わないことを明示。

# If you want dnsmasq to provide only DNS service on an interface,
# configure it as shown above, and then use the following line to
# disable DHCP on it.
no-dhcp-interface=eth0
no-dhcp-interface=eth1

DHCPサーバの設定ファイル/etc/dhcpd.confに次のように書き込み、DHCPでipが割り当てられる内部ネットワークの各クライアントにDNSサーバやドメイン名などの情報を伝える。

subnet 192.168.xxx.xxx netmask 255.255.255.xxx {
        option routers                  192.168.xxx.xxx;   <--- ゲートウェイのLAN側のIPアドレス
        option subnet-mask              255.255.255.0;

        #option nis-domain              "domain.org";
        option domain-name              "xxx.yyy.jp";
        option domain-name-servers      192.168.xxx.xxx;   <---- DNSサーバのIPアドレス
    以下、省略
}

/etc/hostsに、内部ネットワークおよびDMZにおいてあるwebサーバなどのホスト名(およびエイリアス)とipアドレスとの対応を記述した。

次に、/etc/resolv.confだが、名前解決のためのDNSサーバを登録しておく。自分自身でまずは名前解決を試みて、それができないならば、ルータに問い合わせるように設定した。

; generated by /sbin/dhclient-script
search hoge.xxx.yyy.jp
nameserver 192.168.xxx.xxx  <--- LAN側のIPアドレス
nameserver 192.168.yyy.yyy  <--- ルータのIPアドレス

ここで、注意しなければならないのは、ネットワークを再起動すると、この設定ファイルが上書きされて、ルータのIPアドレスだけになってしまうことである。"; generated by /sbin/dhclient-script"と書かれているように、このマシーンがdhcpでルータからipアドレスを取得しているならば、自動的にルータのIPアドレスだけが名前解決のために登録されてしまう。これを避けるために、NICを立ち上げるときに参照される設定ファイル/etc/sysconfig/network-scripts/ifcfg-eth0でPEERDNS=noを設定しておく。

DEVICE=eth0
BOOTPROTO=dhcp    <--- ルータからDHCPでIPを取得する場合
HWADDR=00:00:00:00:00:00
ONBOOT=yes
IPV6INIT=no
PEERDNS=no         <---これを追加

/etc/resolv.confの上書き対策に関する情報は、centOSのresolv.confをDHCP使用時に上書きしないようにするを参照した。

基本的な設定を済ませた後に、サービスを起動し、登録する。次では、dnsmasqのstartだけを書いているが、上で設定を変更したサービスはすべてリロードしておくこと。

# /etc/rc.d/init.d/dnsmasq start
# chkconfig dnsmasq on

suの制限 このエントリーを含むはてなブックマーク

suをwheelグループに所属するユーザだけに制限する場合に、/etc/login.defsに

SU_SHEEL_ONLY yes

と設定するように、書いてあるWebサイトがよくあるが、これは古いやり方らしい。元ネタは、pam_wheel.so を使う場合は、SU_WHEEL_ONLY の設定は不要

/etc/pam.d/suで次のように設定すれば、suできるユーザはwheelグループの人だけに制限できる。

# (RedHat 系)
auth  required pam_wheel.so use_uid

# (Debian 系)
auth  required pam_wheel.so

新規ユーザを追加する。 このエントリーを含むはてなブックマーク

新規ユーザhogeを追加するには、useraddコマンドを使うが、ubuntuで次のように実行すると、ホームディレクトリが作成されない。

$ useradd hoge

useradd コマンドには -m オプションをつけように書いてあるように、/etc/login.defs に

CREATE_HOME     yes

と設定してある場合は、mオプションが不要だが、そうでないならば次のようにしておくこと。

$ useradd -m hoge

ユーザの所属グループを調べる。 このエントリーを含むはてなブックマーク

ユーザhogeの所属グループを調べるには、次のidコマンドを使う。

$ id hoge
uid=1000(hoge) gid=1000(hoge) 所属グループ=1000(hoge),24(cdrom),29(audio),115(netdev)

2009年6月18日木曜日

ISPのメールサーバにリレーする方法 このエントリーを含むはてなブックマーク

本記事では、自分で構築したメールサーバから、ISPのメールサーバに、メールをリレーする方法をまとめる。

試した環境は、構築したメールサーバ(postfix on centos 5.3)、ISPはeo光(メールサーバはSASL認証が必要、サブミッションポート使用)。以下のパッケージをインストールして、基本的な設定が済んでいることが前提(詳しくは、メールサーバ構築参照)。

cyrus-sasl-2.1.22-4
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-plain-2.1.22-4
postfix-2.3.3-2.1.el5_2

用語説明

SASL認証、OP25B、サブミッションポートなどの情報は以下を参照のこと

概要

メールサーバを自前で立てる場合、配送するメールは、他のメールサーバに中継してもらい、宛先に届けられる。近年は、メールスパム対策のため、メール転送に利用される25番ポートを制限されるようになった。その代替ポートとして587番が使われ、他のサーバに中継してもらうには認証が必要になるというもの。

注意点

今回は、自前で立てたメールサーバはクライアントとして、他のメールサーバにメールを中継してもらう場合を扱う。他のメールサーバやメールクライアントからのメールを中継する機能を持たせることもできるが、扱わない。後者の場合は、自前で立てたメールサーバは、SASL認証のメールサーバということになるが、今回は扱わない。あくまで、今回は(ISPの提供する)SASL認証のメールサーバに、メール中継を依頼するメールサーバの設定についてである。

設定方法

まず、認証に必要になるアカウント、パスワードの設定ファイル(/etc/postfix/sasl_passwd)を作成する。次のような書式にする。

saslauth.xxx.jp:587   foo.baa:hoge

saslauth.xxx.jpはISPのSMTPサーバで、587はそのポートである。foo.baaはアカウント名で、hogeはパスワードである。eo光では、saslauth.eonet.ne.jpの587ポートである。アカウント名は、POP IDにする(@の前の部分かと勘違いしていたが、そうではなくても、POP ID=受信メールアカウントなるものが存在して、xxxx%yyy.eonet.ne.jpというフォーマットであるので、要注意!)。パスワードは、POPパスワードである。

生パスワードを書き込んでいるので、パーミッションと所有権を変更しておく。そして、これをデータベースに登録する。

# chmod 600 /etc/postfix/sasl_passwd
# chown root. /etc/postfix/sasl_passwd
# ls -l  /etc/postfix/sasl_passwd
-rw------- 1 root root 60 Jun 18 00:00 /etc/postfix/sasl_passwd
# postmap  /etc/postfix/sasl_passwd

次に、postfixの設定ファイル(/etc/postfix/main.cf)を編集して、saslauthの設定を書き込む。ここで、上の「注意点」で触れたことに注意。sasl認証メールサーバを構築の場合はsmtpd_sasl....(dが付いている)というパラメタを設定する必要があるが、ここではsmtp_sasl...(dが付いていない)であることに注意!また、relayhostの部分は、自分が利用しているISPで指定されているメールサーバにすること。

relayhost=smtpauth.eonet.ne.jp:587

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain, login, cram-md5

smtp_sasl_mechanizm_filterの部分は、OP25B対策で説明されているように、telnetでrelayhostに接続して確認するという良い。

# telnet smtpauth.eonet.ne.jp 587
Trying xxx.xxx.xxx.xxx...
Connected to smtpauth.eonet.ne.jp (xxx.xxx.xxx.xxx).
Escape character is '^]'.
EHLO smtpauth.eonet.ne.jp <---入力
250-PIPELINING
250-SIZE 20000000
250-ETRN
250-AUTH CRAM-MD5 LOGIN PLAIN
250-AUTH=CRAM-MD5 LOGIN PLAIN  <---確認
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
QUIT

次に、設定ファイル/etc/postfix/master.cfで、次の部分をコメントアウトする。

submission inet n       -       n       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

動作テスト

後は、postfixをリロードして、どこかにメールを送ってみて、届くかどうか確認する。

# /etc/rc.d/init.d/postfix reload
Reloading postfix:                                         [  OK  ]
# mail xxx@gmail.com
Subject: test
test
.
Cc: 
# tail /var/log/maillog
....

参考サイト

2009年6月17日水曜日

socksサーバ経由でSSH接続する方法 このエントリーを含むはてなブックマーク

本記事では、socksプロキシ経由で、リモートホストにSSH接続する方法をまとめる。

試した環境の詳細は、以下の図のように、LAN内にあるクライアント(Ubuntu 9.04 on ThinkPad X31)で、Socksサーバ(Socks5プロトコル、認証なし)を経由して(LANを出て)、リモートホスト(centOS 5.3 on ThinkCentre S50)にSSH接続した。

使用したsshは、以下の通り。

$ ssh -v
OpenSSH_5.1p1 Debian-5ubuntu1, OpenSSL 0.9.8g 19 Oct 2007

まず、以下のファイルを作成して、~/.sshにconfigという名前で配置する(無ければ、.sshディレクトリを作成する)。リモートホスト(foo.bar.net)のhogeというアカウントに、SOCKSサーバ(socks-proxy.xxx.jpの1080ポート、認証なし)を経由して、SSH接続することを意味している。foo.bar.net.socksは、このプロファイルのための名称なので、この通りでなくても良い。

Host foo.bar.net.socks
 HostName foo.bar.net
 User hoge
 Port 22
 ProxyCommand /usr/bin/connect -a none -S socks-proxy.xxx.jp:1080 %h %p

ちなみに、connectがなければインストールする。connectは、SOCKS4あるいは5、httpトンネルを使って、TCP接続を確立するためのツールである。

$ sudo apt-get install connect-proxy

Ubuntu 9.04では、デフォルトで/usr/binに実行ファイルが配置されるので、上のconfigファイルにはそのように書いてある(そうでないならば変更すること)。

$ which connect
/usr/bin/connect

connectコマンドの詳細は、SSH Proxy Command -- connect.cを参照のこと。

当然、リモートホストには、hogeというアカウントが存在し、かつ、sshによる接続が許可されていなければならない。うまくいかないときは、iptables、tcp wrapperなどでアクセス制限がされていないか確認すること。また、sshdが動いていることも大前提。また、クライアントはSSH接続するとき、デフォルトで~/.ssh/configを読み込むが、システムによってはそうでないかもしれない(/etc/ssh/ssh_configを参照のこと。sshd_configと間違えないように!)。

今回は、RSA認証でリモートホストにSSH接続するので、その設定もできていること(詳細は、SSHサーバの設定を参照のこと)。

以上の準備の下で、次のコマンドを実行し、SSH接続を確立する。

$ ssh foo.bar.net.socks

以下に参照サイトを列挙する。

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。