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

2009年11月30日月曜日

centOSインストール(再び) このエントリーを含むはてなブックマーク

再び、CentOSをインストールすることになった。毎回引っかかるところをメモしておく。

SATAのHDに換装し(玄人指向の拡張カード付きのHD)、SATA用の電源コードがないと勘違いして、わざわざIDE-SATA変換ケーブル購入してしまった。よく見てみると、ThinkCentre A50には電源コードは付いていた。

別の作業用PCでネットからcentOSのDVDisoイメージをダウンロード。この作業用PCはwebサーバとして使える状態とする。

web公開用の適当なディレクトリにisoイメージをマウントする。

# su -
# mkdir -p /var/www/html/repos
# mount -t iso9660 -o loop CentOS-5.4-i386-bin-DVD.iso /var/www/html/repos/

マウントしたイメージの中から起動イメージ/var/www/html/repos/images/boot.isoを手元のメディアに焼く。いつものごとく、DVDしか持っていないので、DVDに焼いた。しかし、これをA50に入れても使えない(DVDドライブではないから)。手持ちの外付けDVDドライブを接続して、この起動イメージを焼いたDVDから起動する。

起動するときは、A50のBIOS設定で、起動デバイスの優先順位をあらかじめ決めておく。IDEのHDを取り除いて、代わりにSATAのHDを入れるので、HardDisk0をdiableし、HardDisk1をenableしておく。そして、DVD/CD-Driveをもっとも優先順位を高くしておく。

ちなみに、なぜか、DVDドライブで起動はできても、このドライブからOSをインストールすることはできなかった。したがって、別の作業用PCをwebサーバにし、レポジトリを公開して、http経由でインストールする。このとき、作業用PCのファイアーウォールの設定を編集し、外部からHTTPアクセスを許可する。

2009年10月17日土曜日

改行コードの変換 このエントリーを含むはてなブックマーク

WindowsからUnixへの変換

$ tr -d \\r < win.txt > unix.txt

UnixからWindowsへの変換

$ perl -p -e 's/\n/\r\n/' < unix.txt  > win.txt

MacからUnixへの変換

$ tr \\r \\n < mac.txt > unix.txt

参考URL:改行コードの変換</p>

lprコマンドのちょっとした使い方 このエントリーを含むはてなブックマーク

landscapeで印刷

$ lpr -o landscape test.pdf

portraitで印刷

$ lpr -o portrait test.pdf

test.psの1ページ目だけを印刷

$ psselect -p1  test.ps | lpr 

2009年10月8日木曜日

文章を枠で囲む(latex) このエントリーを含むはてなブックマーク

latexで、文章を枠で囲む方法をまとめる。ascmac.styというパッケージが必要。

\usepackage{ascmac}   <---プリアンブルに記述

単純に枠で囲むだけならば、次のようにscreenを使う。

\begin{screen}
あいうえお           <---- 枠で囲む文章をここに記入
\end{screen}

枠にタイトルを付けるときは、次のようにitemboxを使う。

\begin{itembox}[l]{Title}   <---タイトルの表示位置(左)とタイトル名(Title)を記入
あいうえお           <---- 枠で囲む文章をここに記入
\end{itembox}

枠に影を付けるときは、次のようにshadeboxを使う。

\begin{shadebox}
あいうえお           <---- 枠で囲む文章をここに記入
\end{shadebox}

ルーズリーフような枠を付けるときは、次のようにboxnoteを使う。

\begin{boxnote}
あいうえお           <---- 枠で囲む文章をここに記入
\end{boxnote}

2009年10月7日水曜日

latexで日本語文字化け このエントリーを含むはてなブックマーク

Ubuntu 9.04で、日本語でlatexの文書を作成したら文字化けした。以前、作成したときは問題なかったので、どうしたものかと思ったが、解決した。原因は、ファイルの文字コードがUTF-8になっていたことだった。EUC-JPに変換してコンパイルして、xdviで表示させたら、問題なく日本語が表示された。

2009年9月28日月曜日

ワークグループ名の変更 このエントリーを含むはてなブックマーク

Windowsでワークグループ名を変更できなかった。コントロールパネル→システム→コンピュータ名→変更、できるはずなのだが、ワークグループ名の欄が編集できなくなっていた。調べてみると、ローカルエリア接続→プロパティ、でWindowsネットワーク用クライアントをインストールすると解決した。

2009年9月24日木曜日

FTP over HTTP Proxy このエントリーを含むはてなブックマーク

本記事では、lftpというFTPクライアントで、HTTP Proxyのsquidを経由でファイル転送をする方法を説明します。GUIのFTPクライアントでは、FileZillaがHTTP Proxy経由でファイル転送できたと記憶しています。

まず、プロキシを設定します。HTTP_PROXY環境変数をエクスポートしていたのですが、私の環境ではこれは反映されていませんでしたから、lftpの設定ファイルに以下の記述しました。この設定ファイルは~/.lftp直下にrcという名前で作成します。

set hftp:proxy プロキシサーバ

次に、以下のコマンドを打ちます。

$ lftp -d -u FTPサーバのアカウント名  hftp://FTPサーバ

後は、パスワードに答えてログインできると思います。

WebサーバでDigeset認証をつかってアクセス制御する。 このエントリーを含むはてなブックマーク

本記事では、Webサイトのとあるディレクトリ以下をパスワードで保護したいときに、認証によりアクセス制御する方法をまとめる。

認証方式にはいろいろある。おそらく最も基本的なのはBasic認証だが、パスワードを平文のまま送信するので、盗聴の危険性がある。そこで、今回は、MD5でハッシュ化してパスワードとユーザ名を送信するDigest認証を使ったアクセス制御をまとめる。参考URL:「Digest 認証の仕組み」。

まず、Webサーバで公開しているディレクトリで、パスワードで保護したいディレクトリを作成する(既にある場合はもちろん作成不要)。ここでは、ユーザ(hoge)のpublic_html以下をWebに公開しており、その直下のprivateをパスワード保護する場合を説明する。

$ cd 
$ pwd
$ /home/hoge
$ cd public_html
$ mkdir private

次に、apacheの設定ファイル/etc/httpd/conf/httpd.confでDigest認証をどこそこで利用するといった設定を記述する。保護したいディレクトリ毎にhtaccessファイルを配置してもよいが、大元のhttpd.confに記述しておくの良いとどこかに書いてあった(保守性?)。

<Directory /home/*/public_html/private>    <--- 念のためhogeユーザだけでなく任意のユーザに対してルールを設定
    AuthType Digest
    AuthName "Secret Zone"
    AuthDigestDomain /private/
    AuthUserFile /etc/httpd/conf/.htdigest   <--- 後で作成するパスワードファイル
    Require user ユーザ名
</Directory>

次に、パスワードファイルを作成する。既にパスワードファイルがある場合は、cオプションは不要。cオプションを付けないと、新規ユーザの情報を書き込むことになる。レルムは、httpd.confでAuthNameに設定した文字列"Secret Zone"を指定する。パスワードファイル名も、上の設定ファイルで指定した名前とする。

# cd /etc/httpd/conf
# htdigest -c パスワードファイル レルム ユーザー名

最後に、apacheをリロードする。

#/etc/rc.d/init.d/httpd reload

試しに動かしてみる。うまく動かないときは、AllowOverride all になっていないか確認する。

参考URL:Apacheでユーザー認証を行うには(Digest認証編)WebDAV時代のセキュリティ対策[後編]

2009年9月22日火曜日

プロバイダのメールサーバにメールをリレーしてもらう。 このエントリーを含むはてなブックマーク

本記事では、自宅のメールサーバからポストしたメールを、プロバイダのメールサーバにリレーしてもらうための方法をまとめる。最近は、スパムメールが横行しているため、メールサーバはSASL認証などによりアクセス制御している。以下の説明では、自宅のメールサーバ=postfix、プロバイダ=eoと仮定し、メールサーバの(SASL認証以外の)設定は済んでいるものとする。

設定方法

まず、/etc/postfix/main.cfに利用するプロバイダのリレーホストを記述する。

relayhost = smtpauth.eonet.ne.jp:587

次に、同じ設定ファイルでSASL認証のための設定を記述する。

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_...となっていることに注意する。というのは、smtpd_sasl_...という設定パラメータも存在するから。前者は、クライアントとして(サーバの提供する)SASL認証を利用する場合の設定パラメータを意味し、後者は、サーバとしてSASL認証を提供する場合の設定パラメータを意味する。

次に、SASLパスワードを記述したパスワードファイルを作成する。以下で作成するパスワードファイルは、/etc/postfix/sasl_passwdとする。

smtpauth.eonet.ne.jp:587 アカウント%キーワード.eonet.ne.jp:パスワード

作成したらpostmapを実行し、ルックアップでーブルを作成し、パスワードファイルを消去する。

# pwd
/etc/postfix
# postmap sasl_passwd
# rm sasl_passwd

最後に、postfixをリロードしておく。

# /etc/rc.d/init.d/postfix reload

参考URL:PostfixをSMTPクライアントとしてSASL認証

Postfix+saslでOP25B対策

Vine3.2のPostfixでSMTP認証

2009年9月14日月曜日

今更ながらchangelogメモ このエントリーを含むはてなブックマーク

本記事では、普段のメモを効率的に記録、管理、活用するための方法で、changelog+chalowを使う方法をまとめる。新しいネタではないが、新しい環境でセットアップすることがあったので、そのときに調べたことなどをまとめる。

ChangeLogの概要

ソフトウェア開発で変更履歴(changelog)を1つのファイルにまとめて書いておくことがある。emacsでは、changelogを簡単に書くための機能が備わっている。Ctrl-x4aでchangelogのバッファがオープンされ、すぐに新規事項を記入できるようになっている。

デフォルトでは、ホームディレクトリに下にChangeLogというファイルが作成され、追加したメモはそこに蓄えられていく。1つのファイルに、日記やTodoリスト、覚書などすべてのメモが蓄えられるので、管理が楽である。普段からemacsを使う人には、思いついた側から即座にメモることができる。メモした内容を検索するための機能もemacsには備わっている。詳細は、横着プログラミング第1回参照

Chalowについて

chalowは、changelogをhtmlに変換するためのスクリプトである。aptでインストールできる。apt-cacheでパッケージを調べてみると以下の通り。

# apt-cache search chalow
chalow - weblog tool that converts ChangeLog to HTML

インストールするには、お決まりのapt-getで次の通り。

# apt-get install chalow

chalowの使い方は、helpによると次の通り。詳しくは、chalow on the webを参照。

$ chalow 
usage: chalow [options]  [file]...
    -n, --top-n=NUM             write NUM days to "index.html"
    -o, --output-dir=DIR        directory to output
    -c, --configure-file=FILE   configure file
    -s, --stop-date=DATE        date to stop processing
    -u, --update-by-size        overwrite only if sizes are different
    -C, --css=FILE              css file
    -q, --quiet                 quiet mode
    -8, --utf8                  utf8 mode
    -d, --debug                 debug mode

基本的には、変換するChangeLogの場所を指定して、それをhtmlに変換したものを出力するディレクトリ、および、変換時に使用する設定ファイルを指定している。以下に、例を示す。

$chalow -o ~/html -c ~/etc/cl.conf  ~/ChangeLog

ちなみに、cl.confは以下の場所にある(と思う)サンプル設定ファイルcl.conf.gzを解凍し、それを自分用にカスタマイズして使っている。

# cd /usr/share/doc/chalow/examples
# ls
cl-en.conf.gz  cl.conf.gz  conf
# cp cl.conf.gz ~/       
# cd
# gunzip cl.conf.gz           <--- サンプルのcl.confが得られる。

基本的にカスタマイズした箇所は、README(ChangeLog on the web参照)に書かれていた以下の箇所ぐらい。

※7 tDiary のテーマ (CSS ファイル) をそのまま使うために必要。
tDiary のテーマを使うには以下のような設定を行うと良い。
- $item_header_style = 1 or 2 (イメージアンカーを使うとき)
- $use_h3_for_item_header = 1
- $css_file = "tDiaryのテーマのCSSファイル.css"
- $item_template で h3 で header を囲む。

tDiaryのテーマが使えるらしいので、テーマをtDiary.orgからダウンロードする。

$ wget http://www.tdiary.org/download/tdiary-theme-2.2.2.tar.gz
$ tar zxvf tdiary-theme-2.2.2.tar.gz
$ cd tdiary-theme-2.2.2
$ ls 
3minutes            dice               hatena-white          nahanaha        savanna
3pink               digital_gadgets    hatena_cinnamon       nande-ya-nen    scarlet
90                  dog                hatena_japanese       narrow          seam-line
README              dot                hatena_leaf           natrium         sepia
alfa                dot-lime           hatena_rainyseason    natural_gray    shirakaba
などなど

大量のテーマが入っているので、自分の好きなものを選んで、そのフォルダ毎webサーバにアップロードする。

そして、先ほどのcl.confに書き込む。例えば、webサーバ上のcssディレクトリにkaeruディレクトリを置いた場合は次のようにする。

# ----------------------
# CSS ファイル
#$css_file = "diary.css";
$css_file = "css/kaeru/kaeru.css"; <---相対URLで指定しているが、ここは各自の環境に合わせて適宜変更。

後は、chalowでhtmlに変換すれば良い。上の例では、~/html以下にファイル一式が生成されるので、これら一式をWebサーバにアップする。

以下のようなスクリプトを書いておくと、次からは楽で良い。

#!/bin/sh

chalog=${HOME}/ChangeLog           <--- 適宜変更
conf_dir=${HOME}/etc/cl.conf       <--- 適宜変更
out_dir=${HOME}/html               <--- 適宜変更

chalow -o $out_dir -c $conf_dir  $chalog
echo "$chalog ---> $outdir/index.html... fin"

私は、ssh接続の可能なwebサーバを利用しているので、rsync (over ssh)を使って~/htmlディレクトリ以下をwebサーバ上のディレクトリと同期させるスクリプトも使って、コマンド1つで簡単にアップロードも済ませている。プライベートな内容も含まれるので、htaccessなどによりアクセス制御をしている。

2009年9月4日金曜日

(第1回)asymptoteを使ってみる。インストール編 このエントリーを含むはてなブックマーク

「asymptote」というベクタグラフィックス記述言語を試しに使ってみたので、まとめてみる。

ことの始まり

latex文書中に、球面や放物線などの数学的な図形を挿入するための図形描画ソフトで、以下のようなイメージにあうものを探していた。

  • ベクター画像として描画。
  • 手書きでない。
  • 手軽に描画できる。

ネットで調べると、例えばTexWiki(の「関連ツールなど」のところ)に、かなり詳しい情報がまとめられていた。latex文書に挿入する画像は、「tgif」や「Inkscape」で作成することが多かったのだけど、手書きで描画したくなかったので却下した。また、「gnuplot」や「OpenGL」など他の選択肢もあったのだけど、今回はasymptoteが合ってそうなので、試しに使ってみた。

Asymptoteは、sourceforgegnuなどのサイトに詳しい説明が書いてある。

aptでインストール

ubuntu 9.04へのインストールは極めて簡単で、以下のようにコマンドラインからapt-getで入れるか、synapticを使ってインストールします。ちなみに、ポストスクリプトビューアの「gv」が入っていないならば、これもインストールしておきます(他のポストスクリプトビューアでも良いのかもしれないけれど、試していないので不明)。

# apt-get install asymptote

インストールして少し使ってみたら、3次元図形を描画するときにエラーが出てうまくいかないことが分かった(理由不明)。インストールされていたバージョンは1.43-1だったので、最新のに比べて古いようだ。よって、アンインストールして、最新のソースをダウンロードし、インストールすることにした。

# apt-get remove asymptote

ソースからインストール

公式サイトから最新のソースファイルをダウンロードする。私は、バージョン1.85のもの(asymptote-1.85.src.tgz)を入れた。Document->Installation->2.6 Compiling from UNIX sourceに書いてあるように、garbage collectorが必要なようです。
# wget http://downloads.sourceforge.net/asymptote/asymptote-1.85.src.tgz
# gunzip asymptote-1.85.src.tgz
# tar -xf asymptote-1.85.src.tgz
# cd asymptote-1.85
# wget http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz
# ./configure
# make all
# make install

最初にapt-getでインストールしたときに、実行ファイルasyが/usr/binにあったけど、ソースからインストールした方は/usr/local/binに配置される。これを通知するためにリハッシュしておく。

# hash -r

動作確認

詳しい使い方は、sourceforgeにある公式サイトにDocumentが置いてあります。また、wikiもあって、分かりやすく書かれています。まず、次のようにターミナルからasyで起動します。後は、描画コマンドを順次発行して、対話式に描画していきます。以下では、原点から(100,100)に向けて線を引くように命令しています。

$ asy
Welcome to Asymptote version 1.43 (to view the manual, type help)
> draw((0,0)--(100,100));

すると、gvが起動して、きちんと線が描かれていることが確認されました。

対話モードを終了するには、次のようにする。

> quit
$

また、graph3を使って3次元図形を描画するコードを動かしてみました。このコードは、Documentに書いてあるものを使っています。エディタで、次のコードを書いてtest.asyで保存します。

import graph3;

size(0,200);
size3(200, IgnoreAspect);

currentprojection=orthographic(4,6,3);


real x(real t) {return cos(2pi*t);}
real y(real t) {return sin(2pi*t);}
real z(real t) {return t;}

path3 p=graph(x,y,z,0,2.7,operator ..);

draw(p,Arrow3);
scale(true);

xaxis3(XZ()*"$x$", Bounds, red, InTicks(Label, 2,2));
yaxis3(YZ()*"$x$", Bounds, red, InTicks(beginlabel=false, Label, 2,2));
zaxis3(XZ()*"$x$", Bounds, red, InTicks);

そして、実行して、epsファイルが生成されていることを確認します。

$ asy test.asy
$ ls 
test.asy test.eps
$ gv test.eps &

参考サイト:「TexWiki」のAsymptoteの説明ページ結城浩のはてな日記

2009年8月24日月曜日

(解決)Ubuntu 9.04 + firefox でflashがうまく動かない このエントリーを含むはてなブックマーク

本記事では、Ubuntu9.04,firefoxでflashが一部うまく再生されないことがあったが、解決したのでまとめておく。私以外の環境において同じ方法が有効かどうか分かりませんが、情報としてまとめておきます。

症状は、以下のとおり。本来flashが再生される場所に三角形ボタンが表示され、それをクリックしないと再生されない。クリックしても再生されない場合あり。flashコンテンツは表示はされても、何がしかの原因により動作しない(NHKラジオ英会話ストリーミング配信などで)。

synapticなどで「swfdec-mozilla(SWF ファイル (Macromedia Flash) 向け Mozilla プラグイン)」を完全削除指定でアンインストールする。私の場合は、0.8.2-1ubuntu1というバージョンだった。(アンインストールする理由は、以下で説明するようにflashの最新版をインストールしても、古いバージョンが優先されるので。)

adobeのwebサイトから、最新のflash playerをダウンロードし、インストールする。私は、10.0.32.18というバージョンのもので、「Ubuntu8.04+用.debファイル」をダウンロードした。保存して、コマンドからインストールしてもよいだろうが、「debi パッケージインストーラ」なるものでインストールした。

ブラウザを再起動し、about:pluginsでブラグインを確認してみると、以下のように、確かにインストールできていることが確認できた。ちなみに、swfdec-mozillaをアンインストールしていないと、前のバージョン(Shockwave Flash 9.0 r999)が優先されてしまう。

Shockwave Flash
    ファイル名: libflashplayer.so
    Shockwave Flash 10.0 r32

ツール→アドオン→プラグインにて、shockwave flashを有効化する。

2009年7月23日木曜日

Latexで組合せの数 このエントリーを含むはてなブックマーク

Latexとは、数式の含まれる文書を作成するために使われるソフト。組合せの数を出力する方法を調べたので、まとめておく。日本では、n個からr個を選ぶ組合せの数をnCrなどと表すが、この記法は世界標準ではないらしい。ちなみに、nCrをlatexで表示するには、次のように書けば良い。

{}_{n}C_{r}

外国では、丸括弧で囲まれた中に上にn、下にrを配置させた記法が一般的なようだ。この記法での表示方法を調べたところ、次のようにすれば良いことが分かった。

{{n}\choose{r}}

他にも、array環境を使って書くこともできる。

\left(
\begin{array}{c}
n\\
r
\end{array}
\right)

2009年7月20日月曜日

ハブが故障 このエントリーを含むはてなブックマーク

先日のネットワークダウンに引き続き、同じような症状でネットワークダウンが発生した。調査結果をまとめる。

/var/log/messageに以下のようなエラーが表示され、ネットワークを利用できなくなった。

Jul  8 04:12:56 hoge dhcpd: receive_packet failed on eth2: Network is down

前回と違うのは、以下のようなlink downというエラーが出ていなくて、link upとなっていたこと。

Jul  8 04:16:15 hoge kernel: r8169: eth2: link down

結局、サーバに直接つなげていた、大元のハブ(そこから内部ネットワークに分配)が故障していたらしい。というのは、ハブを経由しないで、直接サーバにPCを接続したら、問題なくネットワーク接続できたから。

2009年7月10日金曜日

ネットワークエラー このエントリーを含むはてなブックマーク

本記事では、/var/log/messageに出てくる次のようなエラーの原因調査の結果をまとめる。

Jul  8 04:12:56 hoge dhcpd: receive_packet failed on eth2: Network is down
Jul  8 04:16:15 hoge kernel: r8169: eth2: link down
Jul  8 18:27:13 hoge kernel: ADDRCONF(NETDEV_UP): eth2: link is not ready

などというエラーが出て、あるとき突然ネットワークがダウンしてしまった。r8189というNICとの相性が悪い場合があるという情報や、ケーブル不良、NICの不良などを疑ったけれど、理由が分からなかった。

結局いろいろ調べてみて分かったことは、(NICを複数さしているのだが)eth0,eth1,eth2の割り当てが入れ替わっていたのが原因だった。

各NICに対応するethNをきちんと対応させるためには、CentOSでは/etc/sysconfig/network-scripts/ifcfg-ethNで、NICのMACアドレスを登録することで固定できるらしい(NICの認識順序を固定する)。しかし、この設定をしても最初はうまくいかなかった。調べてみたら、/etc/modprove.confでエイリアスが設定してあって、そちらが有線されていたようだ(NIC の設定にMACアドレスを入れないと入れ替わってしまうLinux eth0 と eth1 が入れ替わってしまうのを固定したいCommentsAdd Star)

2009年7月5日日曜日

ログの一元管理 このエントリーを含むはてなブックマーク

@ITの「連載:止められない基幹業務サーバの管理対策」の「第8回 syslogによるログの一元管理」が参考になるので、メモしておく。ルータのログ、各種サーバのログを一元管理しておくと作業が楽になる。

TCPWrapperによるアクセス制御 このエントリーを含むはてなブックマーク

@ITの「連載:止められない基幹業務サーバの管理対策」の「第3回 サービスをセキュアにするための利用制限〜TCP Wrapperによるサービスのアクセス制限〜」は参考になるので、メモしておく。

2009年7月3日金曜日

多段SSH接続(2段) このエントリーを含むはてなブックマーク

本記事では、いくつかのサーバを経由して、目的のサーバにSSH接続する、いわゆる多段SSH接続に関するいくつかのチップスをまとめる。ちなみに、ここでは、server1を経由してserver2にssh接続する2段接続の場合の説明とする。もっと良い方法・改善点があれば、教えてください。以下の方法はすべて自己責任で行ってください。私はここで説明した方法によるいかなる損害にも責任を持ちません。

以前、socksサーバ経由でSSH接続する方法という記事を書いたので、適宜参照すると良いかもしれない。

まず単純に、2段接続するには、次のコマンドで良い。ホストuser1@server1を経由して、ホストuser2@server2に接続する方法である。

$ ssh -t user1@server1 "ssh user2@server2"

tオプションをつけてあることに注意してほしい。これがないとエラーが出て怒られてしまう(以下)。仮想端末を強制的に割り当てるという意味。リモートマシン上で、screen-basedなプログラムを実行するときに使われるオプションらしい。 From man of ssh

$ ssh user1@server1 "ssh user2@server2"
Enter passphrase for key '/home/hoge/.ssh/xxxx': xxxxxxxxxxxxxxxxxxx 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied (publickey,gssapi-with-mic).

socksを経由してuser1@server1に接続し、さらにuser1@server1を経由してuser2@server2に接続する場合も同様。以下のように.ssh/configにsocksのための設定を記述してあるとせよ。

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

そのとき、次のように実行すれば良い。

$ ssh -t user1.server1.socks "ssh user2@server2"

多段接続する必要性は、例えば、会社の内部ネットワークにあるサーバserver2に接続したいが、内部ネットワークにアクセスするには、ゲートウェイであるserver1を経由しなければならないときである。もちろん、1ステップごとsshでアクセスして、最終的にserver2(より一般にserverN)にアクセスしても良いが、ある一定回数以上、単純作業を繰り替えしていると、耐えられなくなるときがあるらしい。

あるいは、内部ネットワークだけで公開している、Webサイトなどを見たいときは次のようにする(ただし、この方法は、内部ネットワークにあるプロキシサーバにSSH接続できる場合に限られる。なければ、ssh接続できるサーバにプロキシを立てる。)。

SSHポートフォワードを使えばよい。つまり、ローカルマシンの空きポート18080をプロキシサーバserver1 (ユーザ名user1)のプロキシ用ポート8080に転送すれば良い。

$ ssh -N -L 18080:localhost:8080 user1@proxy.server1

そして、ブラウザのプロキシ設定にて、localhostの18080をプロキシとして登録しておけば良い。もちろん、ローカルマシンが別のネットワークにあり、そこを出るためにSocksを経由しなければならないときは、上のようにsocksの設定をして、次のコマンドを打てば良い。

$ ssh -N -L 18080:localhost:8080 user1.server1.socks

抜け道を使っているようで、少し心が咎めるが、もともとSOCKSプロキシを利用できるということは、”そのネットワークにおいて、そういうことを許可しているということなのだ”、と理解する。

また、最初の設定で、user1@server1を経由して、user2@server2のとあるディレクトリに、ローカルマシンのデータをrsyncでバックアップするには、次のような手順で行う。まず、ダイナミック転送の設定を行う。ダイナミック転送は、転送先のポートを指定しなくて良いので楽である(ローカルマシンをsocksサーバとして使用する)。まず、ローカルマシンの空きポート(ここでは10022番)をuser1@server1に転送する。

$ ssh -N -f -D10022 user1@server1

次に、user2@server2へのssh接続の設定を.ssh/configに記述する。

Host user2.server2
  HostName server2
  User user2
  Port 22
  ProxyCommand /usr/bin/connect -S localhost:10022 %h %p

最後に、次のようなスクリプトbackup.shを作成する。

#!/bin/sh

#年月日入りログファイルに、バックアップログを書き込む。
LOG_NAME="$(date +%Y%m%d)_rsync.log"

#バックアップをとってほしくないファイル、ディレクトリのリストを作成して、rsync_exclude.lstに書き込む(フォーマットは、1行に1つ記述)
EXCLUDE_FROM_LIST="rsync_exclude.lst"

#バックアップ元のディレクトリ(hogeユーザのホームディレクトリ以下をバックアップする場合)
SOURCE=/home/hoge

#リモートホストuser2@server2のホームディレクトリにbackupというディレクトリにバックアップを保存する。
TARGET="server2:/home/user2/backup/"

rsync -avz --delete -e ssh --log-file=$LOG_NAME  --exclude-from=$EXCLUDE_FROM_LST  $SOURCE  $TARGET

もちろん、ローカルマシンがSOCKSサーバを経由しないとインターネットに接続できないときは、上のuser1.server1.socksを使えば良い。以上

2009年7月1日水曜日

イーサネットケーブル作成の覚書 このエントリーを含むはてなブックマーク

本記事では、イーサネットケーブルを作成する際に気づいた覚書をいくつかまとめる。

イーサネットケーブルを作成する方法は、ネット上にすでに多くあるので、そちらを見て作成してみた。

必要なものは、以下の通り。RJ-45のコネクタ、圧着工具、被覆をはぐためのもの(カッターなど)、ケーブルを切断するもの(ニッパーなど)、ケーブル。あと、オプションで、ケーブルを固定するために、私はワイヤーステッカーなるものと、どのケーブルか見分けるためにのマスキングテープ←これにペンで記入して貼り付ける。

私が購入した圧着工具は、ケーブルを切断するためのカッターと、被覆をはぐためのカッターが付属していたので、便利だった。

ケーブルは、敷設するネットワークの大きさをあらかじめ見積もって、必要な長さ以上のものを購入すること(私は、見積りが不十分で、追加でケーブルを買うハメになった)。ケーブルは、単線、ストレート、エンハンスドカテゴリ5のものをチョイスした。コネクタは、エンハンスドカテゴリ5対応のもを購入した。

作成方法は、ケーブルをカッターなどで切断して、中に入っている6本ほどの線をほぐす。これらの線はよってあるので、まっすぐにそろえるのは慣れないと少し大変だと思う。コツは、よってある線を十分元の方までほぐし、必要な長さをところで、カットする(圧着工具付属のカッターは、しっかり固定して切断できるので、線をきれいにそろえて切断できた)。

切断してそろえた6本ほどの線をコネクタに差し込む。もちろん、これらの線の並び方は、一律に決めておかないといけない(ケーブルの両端で矛盾しないように)。私は、白オレンジ→オレンジ→白緑→青→白青→緑→白茶→茶の順に並列に並べて、コネクタに差し込んだ。細かい作業なので、並び方がずれたり、十分奥まで差し込めてなかったり、などケーブル不良の原因にならないように注意すること。

差し込めたら工具で圧着する。ここで、圧着が不十分だと、ケーブル不良になるので、念入りに圧着すること(私はここでつまずいた)。以上

追記:ネットワークが突然ダウンしてしまった。NICを代えたり、いろいろと調べてみて分かったことは、ケーブル不良らしいということだった。圧着が十分でなかったか、ケーブルの被覆をはぐときに、内部の導線を傷つけたか?ケーブルテスタがほしい。

無線LANアクセスポイントWLA-G54の設定 このエントリーを含むはてなブックマーク

本記事は、Buffaloの無線LANアクセスポイントWLA-G54のLinuxからの設定で、分かったことをまとめる。

この製品は、ルータ機能のない、アクセスポイントである。設定するには、有線あるいは無線で、このアクセスポイントにブラウザからアクセスして行う。しかし、作業をしているネットワーク(プロキシで隔離されたDHCPによるプライベートネットワーク)で、Linuxからアクセスしても設定画面が表示されなかった。

ネット上には、同じように設定画面が表示されないという情報がいくつか見られた、本質的な解決になるような手がかりは得られなかった。アクセスポイントのIPアドレスは、製品ごとに違うし、設定で変更できるので、中古で入手した場合は既に変更されているかもしれない。初期化ボタンが本体にあるので、初期化すると、デフォルトのIPアドレスに戻すことができる。

ちなみに、WLA-G54のデフォルトIPアドレスは192.168.11.1だった。初期化してから、このアドレスにブラウザでアクセスしたが、何も表示されなかった(もちろん、プロキシは使わないで直接接続している)。次のコマンドで調べたら、アクセスポイントの有線側のMACアドレスおよび192.168.11.1が表示されるので、ネットワーク上には存在するらしい。

$ arp -a

結局、他のネットワーク(ここも、プロキシで隔離されたDHCPによるプライベートネットワーク)で、Windows機から設定した。アクセスポイントの設定には、作業用PCを有線・無線いずれでアクセスポイントに接続しても、設定はできるようだ。ここでは、有線から設定した。

方法は、まず無線LANアクセスポイントおよび、作業用Windows機をネットワークにそれぞれ接続。そして、BuffaloのWebサイトから、設定用のソフトをダウンロード&インストール。設定ソフトを起動して、アクセスポイントのIPアドレスをDHCPで取得するように設定。その後、アクセスポイントのアドレスでブラウザが自動で立ち上がるはず(そうでないなら、作業用PCからIPアドレスを調べて、そこにブラウザからアクセスする)。うまくいけば、認証ダイアログが現れるはず。パスワードなど設定していなければ、ユーザ名でrootを入れるだけで、ログインできる。

以下は、設定内容に関するメモ。デフォルトの設定から、変更した点は以下の通り。まず、暗号化方式はAESを設定し、パスワードは適当に決める。暗号化方式は、wep,tkip,aesの3種類が選択できるが、セキュリティおよびその方式を利用できるマシンとの兼ね合いで決める。ESSIDを任意に決める。ANY接続を許可しない。本体情報(?)なるところで、アクセスポイントの名称を任意に登録する。また、rootのパスワードも設定する。以上

Ubuntu9.04を入れてあるマシンから無線LANカードBuffaloのWLI-CB-54を使って接続するときに、このマシンにおける設定内容は以下の通り。まず、Ubuntu 9.04で無線LANにあるように、あらかじめドライバをインストールして、無線LANが利用できる状態にしておく。そして、次に無線接続のためのプロファイルを作成する。

「システム→設定→ネットワーク接続」で無線のタブの追加ボタンを押す。接続名を適当に決める。SSIDには、アクセスポイントに設定したSSIDを入れる。無線セキュリティでは、WPA&WPA2パーソナルを選択し、アクセスポイントで設定したパスワードを入れる。IPv4設定では、メソッドで自動(DHCP)を選択する(ここは、利用ネットワークごとに、適切に変更する必要があるかもしれない。例えば、IPは固定でH割り振られているときなど)。無線セキュリティでは、WPA2は調べてみると暗号化方式にAESを実装したものらしいので、これで良い。パーソナルの他にエンタープライズというものもあるが、これは、認証サーバを使う場合らしいので、今回はエンタープライズでなくパーソナルの方を選択している。

後は、ネットワークマネージャのアプレットから、無線を有効にする。アクセスポイントではANY接続を許可しないようにしているので、利用できるアクセスポイントの一覧に、今回設定したアクセスポイントは含まれていないはず。ステルスモードで、アクセスポイントに接続するといったような項目があるので、それを選択し、上で作成したプロファイルでアクセスを試みる。うまくできていれば、これで接続が確立されるはず。

追記:Any接続を拒否したら、接続できなくなった(昨日は、接続できていたはずなのに)。原因不明。

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

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

2009年5月22日金曜日

ssh接続エラーの原因 このエントリーを含むはてなブックマーク

ssh接続を試みたときに、以下のようなエラーが出て接続できないことがあったので、その原因を書いておく。

#  ssh hoge@foo.bar.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:25
RSA host key for xxxxxxx has changed and you have requested strict checking.
Host key verification failed.

接続先ホストは以前、ssh接続をして作業していたマシン。このマシンのOSを再インストールして、再びssh接続してみようと試みていた。以前の情報が接続元ホストの~/.ssh/known_hostsに残っていて、今回、同一の接続先ホストなのに情報が異なる!といってエラーが出ていた模様。したがって、接続元ホストの~/.ssh/known_hostsを削除して、接続を試みると問題が解決された。

yum updateでエラー このエントリーを含むはてなブックマーク

本記事では、centOSでyum updateをするとiterable argument requiredなどというエラーの解決策をまとめる。

ネットで調べてみると、yum clean allやrpm --rebuilddbなどをすると良いとか、yum関連のパッケージを削除して、再インストールしてみると良いなどといった情報があった。これらを試してみたがダメだった。

ところが、Fedora JP BBSに載っていた情報に従うと解決した。それに依れば、http_proxyの環境変数の設定を適切に直すと良いというものだった。

http_proxy="proxy.xxx.net:8080"などと.bashrcで登録していたが、http_proxy="http://proxy.xxx.net:8080"に直すとうまくyum updateできた!

2009年4月15日水曜日

ポート番号からプロセスを調べる。 このエントリーを含むはてなブックマーク

ポート番号から、そのポートを使用しているプロセスを調べる方法をまとめる。

lsofコマンドで、iオプションにポート番号を指定すればよい。22番ポートを調べると、sshが使用していることが分かる。

$ lsof -i:22
COMMAND   PID     USER   FD   TYPE DEVICE SIZE NODE NAME
ssh       10359   foo    3u   IPv4 27461       TCP foo.net:35715->baa.net:ssh (ESTABLISHED)

複数のポートを調べたいときは、コンマで区切る。

$ lsof -i:22,25

参考にしたサイト:特定のポートをオープンしているプロセスを調べるには

2009年3月27日金曜日

プロキシ環境におけるAcrobatReaderの自動アップデート機能 このエントリーを含むはてなブックマーク

本記事では、プロキシを経由してインターネットに接続している環境でAcrobatReader 8.14を起動させると、(プロキシを経由しないで)自動的にアップデートしようとしてエラーになる症状を回避する方法をまとめる。

まずバックグラウンドでwgetコマンドでadobeのサイトからダウンロードしようとするプロセスが動いているかもしれないので、killしておく。

そしてacrobat readerを起動して、「メニューバー→編集→環境設定」すると下のダイアログが現れる。「インターネット→インターネットオプション」でプロキシを設定できる。最初は「直接インターネットに接続する」が選択されていたので、「プロキシの手動設定」を選択してプロキシを入力する。

2009年3月25日水曜日

last.fmをお気に入りのプレイヤで楽しむ。 このエントリーを含むはてなブックマーク

本記事では、Ubuntuでlast.fmを自分のお気に入りのオーディオプレイヤで楽しむ方法をまとめる。

last.fmとは?

last.fmは、ストリームで配信される音楽を聞くことができる。お気に入りの曲を登録しておけば、自分の好みに合った曲が配信されるようになる。また、同じような感性を持った人とつながることもできる。

音楽を聞く方法は、Webブラウザからサイトにアクセスするか、専用のプレイヤを使って聞くである。プレイヤはapt-getでインストールできる。

$ sudo apt-get lastfm

お気に入りのオーディオプレーヤでlast.fmを聞くには

lastfmproxyを使えばお気に入りのオーディオプレーヤでlastfmを聞くことができる。lastfmproxyは名前の通り、lastfmラジオストリームのためのプロキシサーバである。インストールするには、LastFMProxyでバージョン1.3bを取ってくる。Ubuntu 8.04だとaptでインストールできるが、バージョンが低い(確か1.1)ので使えなかった。lastfmのAPIが変わったのに、1.1は古いままなのでは?とにかく、とってきたtarボールlastfmproxy-1.3b.tar.gzを展開する。

$ tar zxvf lastfmproxy-1.3b.tar.gz

次に、lastfmproxyディレクトリに移動して設定ファイルconfig.pyを編集する(詳細は、同じディレクトリにあるREADME.txtを参照のこと)。あらかじっめlast.fmで申請したアカウントとパスワードを入力する。また、プロキシ経由でインターネットに接続している場合はこのファイルでそのプロキシサーバとポート番号を設定する(ちなみに、環境変数で指定していても、ここでは設定する必要あり)。閲覧、編集するにはroot権限必要です。

# Port to listen to
listenport = 1881
bind_address = "127.0.0.1"

# Stick your last.fm username and password between the quotes below.
username = "あなたのアカウント"
password = "あなたのパスワード"

# Which theme (skin) to use
theme = "default"

# Change "useproxy" to True and set the host and port if
# you need an external proxy.
useproxy = True   # <---プロキシサーバを使っている場合は、このようにFalseをTrueにする。 
proxyhost = "使っているプロキシサーバ" 
proxyport = ポート番号 
# Set these if your proxy requires authentication. 
# Note: Only "Basic" authentication is supported. 
proxyuser = "" 
proxypass = "" 

後は、main.pyを走らせるとlastfmproxyが立ち上がる。

$./main.py &
Starting LastFMProxy 1.3b...
Connecting to last.fm server...
To tune in, point your browser to:
 http://localhost:1881/

ブラウザでhttp://localhost:1881/にアクセスして、Start Radioをクリックするとlastfm.m3uというファイルをダウンロードできる(あるいは、再生するアプリを選択して、再生しても良い)。このファイルは単に次のように書かれているだけ。後は、オーディオプレイヤーを立ち上げて、このURLを指定すれば良い(例えば、Rhythmboxでは演奏→新しいインターネットラジオ局で指定できる)。

http://localhost:1881/lastfm.mp3
ブラウザでlocalhost:1881にアクセスしたとき

ちなみに、rythmboxでは成功したけれど、audaciousではうまく再生できなかった。

ラジオを録音するには

streamripperを使います。これはaptでインストールします。単純に録音したいなら、lastfmproxyを走らせている状態で、次のコマンドを実行します。

$ streamripper  http://localhost:1881/lastfm.mp3

もちろん、細かい設定も可能です。詳細はstreamripperのman pageに書かれています。

参考サイト

/etc/defaultにあるファイルは何か? このエントリーを含むはてなブックマーク

本記事では、Ubuntuで/etc/defaultディレクトリにあるファイルたちは一体何なのか?について調べた結果をまとめる。

/usr/defaultにあるファイル

debian系のディストリビューションでは、/etc/defaultというディレクトリとその中にいくつかのファイルが置かれている。これらは、各種デーモン(ntp, klogd, apmdといったものたち)が起動する前に読み込む設定ファイルのようなものらしい。

Re: The purpose of /etc/default ?に書かれていた内容によると、/etc/init.d/foobarというスクリプトを走らせる前に、/etc/defaultディレクトリの対応するファイルを読み込む。ご存知のように各種デーモンの起動、停止などを制御するスクリプトは/etc/init.dに置かれている。

大抵ソフトをインストールしたときデーモンを有効にするか無効にするかを設定するために、設定ファイルは使われる。ただ、この設定ファイルは追加的なものでメインの設定ファイルではない。通常は/etc直下の設定ファイを読み込むが、追加でデーモンにオプションを与えて起動、停止したいときに使われる。ちなみに、(よく知らないが)cygwinの/etc/defaultとは無関係らしい。

2009年3月24日火曜日

Ubuntuでマルチディスプレイ このエントリーを含むはてなブックマーク

本記事では、Ubuntuでマルチディスプレイを設定する方法をまとめる。

マルチディスプレイ

マルチディスプレイは、複数のディスプレイにまたがってデスクトップ領域を表示させることをいいます。ラップトップをあまり持ち運ばなくてデスクトップ代わりに使っているときは、別に用意した液晶ディスプレイとキーボードをラップトップに接続してマルチディスプレイにすると、快適な作業ができます。

設定

私の使っているUbuntu 8.04では、簡単にマルチディスプレイを実現できました。設定方法を説明します。まず、別に用意した液晶ディスプレイとキーボードとマウスをラップトップに接続します。次に、Xの設定をします。設定ファイル/etc/X11/xorg.confのscreenセクションに次のdisplayサブセクションを挿入します。私は1024x768のモニタを2つ並べるので、2048x768に設定していますが、ここの部分は各自の環境に合わせて設定します。

Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
        SubSection "Display"
                          Virtual         2048 768
        EndSubSection
EndSection

設定ファイルは、Xを再起動すれば読み込まれます(再ログインすれば良い)。そして、システム→設定→画面の解像度でスクリーンのクローン化のチェックボックスを外すと、認識されているディスプレイが表示されます。後は、ディスプレイの位置関係や、解像度などを設定すればOKです。

内臓CDドライブのない古いラップトップに最近のLinuxを入れるには このエントリーを含むはてなブックマーク

内臓CDドライブのない古いラップトップに最近のLinuxを入れるのは難しいらしい。そこで少し色々調べた結果をまとめてみる。

事情

古いパソコンでは外付けのCDあるいはDVDドライブ、USBなどから起動できない場合が多い。だから、内臓CDドライブのない古いラップトップにLinuxをインストールするときは、FDから起動してインストールすることになる。しかし、kernel2.6では、ブートイメージが大きくてFDに入りきらないため、FDからのインストールが利用できない。

どうするか?

例えば、Windowsが既にインストールされていたら、wubiというexe形式のインストーラでubuntuをインストールできる。ただ、ubuntu以外のディストリビューションではこういった方法はできない(おそらく)。

勧められないけれど、他の方法もある。まずHDDを取り出して、比較的最近のラップトップに入れてインストールする。この方法だとハードウェア構成が異なるから、元のPCにHDDを戻したら起動できなくなるとか、いくつかのデバイスが使えなくなるとか、うまくいかない場合があるらしい。

さらに別の方法は、既にLinuxがHDDにインストールされている場合に使える方法。例えば 、旧バージョンのLinuxがインストールされている場合を想定してみる(旧バージョンのものだと古いPCにもインストールできる場合がある)。そして、インストールしたいバージョンのインストールイメージvmLinuz, Initrd.imgをリポジトリから取ってくる。それらを/bootディレクトリに配置する。ブートローダにgrubを使っているならば、次のように起動時のパラメータで先ほど配置したイメージを指定するように設定ファイル/boot/grub/menu.lstを編集する(bootが別パーティションの場合)。

title CentOS (適当に名前をつける)
        root (hd0,0)
        kernel /vmlinuz ro root=LABEL=/1 rhgb quiet
        initrd /initrd.img

これで再起動すればインストーラが起動する。後は、ネットワークからインストールするとか、手持ちのDVDなどからインストールすれば良い。

参考サイト

2009年3月21日土曜日

システムの情報を取得する。 このエントリーを含むはてなブックマーク

本記事では、カーネルのバージョンなどシステムの情報を取得するコマンドunameを説明する。

書式

$ uname [オプション]

オプション

オプションは以下の通り

-a,--all
すべての情報を表示する。
-s,--kernel-name
カーネル名を表示する。
-n,--nodename
ネットワークノードのホスト名を表示する。
-r, --kernel-release
カーネルリリースを表示する。
-v, --kernel-version
カーネルバージョンを表示する。
-m, --machine
マシーンハードウェア名を表示する。
-p, --proseccor
プロセッサタイプまたはunknownを表示する。
-i, --hardware-platform
ハードウェアプラットフォームたまはunknownを表示する。
-o, --operating-system
オペレーティングシステムを表示する。
--help
unameのヘルプを表示する。
--version
unameのバージョンを表示する。

2009年3月9日月曜日

あるディレクトリ以下に対して何々する方法 このエントリーを含むはてなブックマーク

本記事では、指定したディレクトリとその子ディレクトリ以下に存在する、とあるファイルたちに対して同じ操作をするための方法をまとめる。

状況説明

どのような状況でこういった操作が必要となるか?例えば、手持ちのjpegファイルを別の場所にひとまとめにする場合である。次のような状況だとちょっと作業が大変そうに思われる。

基点になるディレクトリとして~/picturesを使っていて、その下に種類や撮影場所ごとにディレクトリを作成してjpegファイルを格納してある場合。さらに、テキストファイルなど別の種類のファイルも格納してある場合。

解決法

簡単に解決する方法としてファイルグラブを使う方法が考えられる。~/picturesの下にあるディレクトリの深さが高々2個ならば次のようにたった1行のコマンドで十分である。

$ mv ~/pictures/{,*/,*/*/}*.jpeg ~/tmp

上のコマンドの意味は、「~/picture/*.jpeg, ~/picture/*/*.jpeg, ~/picture/*/*/*.jpegを~/tmpに移動せよ」である。しかし、あらかじめディレクトリの深さの上限が分かっていない場合や調べるのが面倒な場合はどうすれば良いだろうか?私はファイルグラブで解決する方法は知らないのだが、findコマンドを使えばこれまたたった1行のコマンドで十分である。

$ find ~/picture -name '*.jpeg' -print0 | xargs -0 mv {} ~/tmp

findコマンドの詳細は本サイトの記事「findコマンドでファイルを探す」をご参照ください。このコマンドの意味は、「~/.picture以下に対して、jpegという拡張子を持ったすべてのファイルに対して、それらを~/tmpに移動させよ」である。

思ったこと

上の説明でファイルグラブによる良い方法を知らないと言ったことに関して。ネットで調べてみると「UNIXの部屋 コマンド検索: ファイルグロブ」というサイトで本記事と似たような説明があるが、ディレクトリの深さが任意の場合の方法が書かれていない。ファイルグラブによるうまい解決方法はないのだろうか?それとも、あまり知られていないだけだろうか?

/etc/hosts.allowでのサブネットマスクについて このエントリーを含むはてなブックマーク

本記事では、/etc/hosts.allowでのサブネットマスクの指定の仕方について注意事項をまとめる。

hosts.allowとは

/etc/hosts.allowは、ローカルホストへのアクセス制御を規程する設定ファイルで、/etc/hosts.denyと対になるものである。通常、/etc/hosts.denyですべてのホストからのアクセスを拒否して、/etc/hosts.allowに許可するホストを個別的に記述することが多い(設定の詳細は、本記事「SSHサーバの設定」のセキュリティの設定(Tcp wrappersを用いたアクセス制限)という節にまとめている。)。

サブネットマスクの指定方法

サブネットマスクは、ipアドレスのネットワーク部の長さを表すもので、192.168.0.0〜192.168.255.255の範囲のipアドレスは192.168.0.0/16というように表される。ちなみに、2進数で表すと次のようになる。

11000000.10101000.00000000.00000000 から 11000000.10101000.11111111.11111111 まで

16は先頭から16ビット目までがネットワーク部であることを表していて、この表記によってそのネットワークに属するすべてのホストを表すことができる。

本題の/etc/hosts.allowでのサブネットマスクの指定だが、例えばsshサービスにアクセスできるホストのipを制限する場合には次のように書けば良いのかと勘違いしていたが、間違いであることに気づいたのでメモしておく。

ssh : 192.168.0.0/16 <---誤り(と思う) 

centosで、$man hosts.allowとして確認してみたら、アクセス制御で実装されているパターンについて書かれていた。ネットマスクを使う場合:

An expression of the form ‘n.n.n.n/m.m.m.m´ is interpreted as a ‘net/mask´ pair. An IPv4 host address is matched if ‘net´ is equal to the bitwise AND of the address and the ‘mask´. For example, the net/mask pattern ‘131.155.72.0/255.255.254.0´ matches every address in the range ‘131.155.72.0´ through ‘131.155.73.255´.

ssh : 192.168.0.0/255.255.0.0

あるいは、もっと簡単な書き方もできる。

ssh : 192.168.

A string that ends with a ‘.´ character. A host address is matched if its first numeric fields match the given string. For example, the pattern ‘131.155.´ matches the address of (almost) every host on the Eindhoven University network (131.155.x.x).

2009年3月8日日曜日

yum.cronでエラー このエントリーを含むはてなブックマーク

cronでyumによる自動アップデートをさせるときに

Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again

というエラーが出てうまく動かないので、その原因を調べて解決策をまとめる。

私の環境ではプロキシ経由でインターネットに接続しているのだが、 cronによって定期的に実行されるスクリプト/etc/cron.daily/yum.cronは、~/.bashrcで設定しているプロキシを読み込んでいないらしい。なので、/etc/yum.cronに直接次の行を挿入する

proxy=プロキシサーバ

2009年2月28日土曜日

findコマンドでファイルを探す このエントリーを含むはてなブックマーク

本記事では、findコマンドでファイルを探す方法をまとめる。

書式

基本的な書式は

$ find dir exp
である。ここで検索を開始するディレクトリをdir、検索式をexpと書いています。

例えば、ホームディレクトリ以下にあるすべてのhtmlファイルを探したいときは

$ find ~/ -name '*.html'
とすればよい。このようにファイル名で探したいときは、nameオプションを付けて、ファイル名を表す式を'*.html'などのように書けば良い。

他にも、ホームディレクトリ以下にあるファイルで、ちょうど2日前にアクセスされたすべてのファイルを探すときには

$ find -atime 2
とすれば良い。atimeオプションは最後にアクセスされた日を指定するときに使う。その後に指定する数で、日にちを指定する。+や-を数の前に付けることで、「より大きい」、「より小さい」という意味になる。例えば、2日以内にアクセスしたファイルの場合は
$ find -atime -2
となる。

オプション

使用可能なオプションを少し紹介します。

-atime n
ファイルが最後にアクセスされたのがちょうどn日前である。
-mtime n
ファイルが最後に修正されたのはちょうどn日前である。
-newer file
ファイルはfileより後に修正された。
-size n
ファイルの長さはnブロック(1ブロックは512バイト)である。
-name nam
ファイル名はnamである。
-perm p
ファイルのアクセスモードはpである。
-user usr
ファイルの所有者はusrである。
-group grp
ファイルのグループ所有者はgrpである。

実行例を少し紹介します。 ホームディレクトリ以下にある1Mバイトより大きいのファイルで、10日以内にアクセスされたすべてのファイルを探す。

$ find ~/ -size +2048 -atime -10

論理式

AND,NOT,ORおよびカッコによるグループ化を表現できます。上述のオプションをそのまま列挙するとすべてのオプションを満たすファイルを探しますから、明示的にANDは書きません。

o(アルファベットの小文字のオー)オプションはオプション同士のOR演算を表します。例えば、goo1ユーザあるいはgoo2ユーザの所有するファイルを探すには

$ find -user goo1 -o -user goo2
とします。

オプションの前にエクスクラメーションマーク(!)を書くと、NOTを表します。例えば、ファイル名がtest.wav以外のwavファイルを探すには

$ find ! -name test.wav -name *.wav

とします。ただし、エクスクラメーションマークとnameオプションの間はスペースで間隔をあけてください

バックスラッシュ丸カッコあるいは円マーク丸カッコで囲むことで、グループ化されます。例えば、goo1あるいはgoo2ユーザの所有するwavファイルを探すには次のようにします。

find \( -user goo1 -o -user goo2 \) -name *.wav

パーミッション

上述のオプション一覧に示されているようにpermオプションによって、パーミッションによるファイル探索を行います。その引数として与えられる数値(例えば、644、すなわちrw-r--r--のこと)によって、そのパーミッションに設定されているファイルを探します。

$ find . -perm 644

これを実行するとカレントディレクトリ(.)以下にあるファイルでパーミッションが644となっているものを列挙します。

数値の前にハイフンがあるときは、少なくとも指定アクセスモードを満たすファイルを検索する。例えば、ルートディレクトリ以下にある、誰でも書き込み可能なファイルのリストを表示するには次のようにします。

$ find / -perm -002

すなわち、ファイルのパーミッションでその他のユーザ(o)の書き込み権限が許可されているファイルを列挙します。

動作オプション

指定した検索式にマッチしたすべてのファイルに対して、一定の動作を指定することができます。指定できる動作オプションをいくつか紹介します。

-print
パス名を表示する。
-exec cmd
コマンドcmdを実行する。
-xdev
検索を開始ディレクトリのファイルシステムに限定する。
-prune
遭遇したディレクトリには降りない。

ユーザgoo1のホームディレクトリ以下にあるすべてのファイルに対して、所有ユーザをgoo2、所有グループをgoo2に変更するには次のようにします。

$ find /home/goo1 -exec chown goo2 {} \; -exec chgrp goo2 {} \;

コマンドの書式{}は、検索式にマッチしたファイルのパス名を示すために使われます。波カッコの中にはスペースなど入れないでください。また、コマンドの終わりにはバックスラッシュセミコロンを書いてください

最後に、アルマジロ本に載っていたおもしろい応用例を1つ紹介します。インストール作業などのような一定の作業の間で修正、追加されたファイルを全部表示するには、次のようにします。まず、作業の前にファイルstarting_timeというを作成します

$ touch /tmp/starting_time

そして、何らかの作業を行った後に、次のコマンドを実行すれば良いのです。

$ find / -newer /tmp/starting_time

ただし、消去されたファイルは直接表示されませんが、修正されたディレクトリがリストアップされます。

参考文献

Unixシステム管理のVolume1の3章1節「一般コマンドを最大限に活用する」に詳しく書かれています。findは単にファイルを探すだけでなく、システム管理上とても便利なツールとして使えることが分かりました。紹介されていたのは、

  • ディスクの使用を監視する。
  • セキュリティ問題を起こす可能性のあるファイルのロケーションを突き止める。
  • 再帰的なファイル操作を実行する。
といった使い方です。

2009年2月18日水曜日

cronのアクセス制御 このエントリーを含むはてなブックマーク

本記事では、定期的にプログラムを実行するcronのアクセス制御について説明する。

アクセス制御

まず、crontabはrootしか編集できないようになっているかパーミッションを確認する。そして、cron.allowとcron.denyにそれぞれcronの使用を許可するユーザと禁止するユーザを書き込む。

例えば、goo1とgoo2ユーザだけにcronを許可して、それ以外のユーザには許可しない場合は次のように編集する。

# /etc/cron.allow
goo1
goo2
# /etc/cron.deny
ALL

2009年2月17日火曜日

ログアウト処理 このエントリーを含むはてなブックマーク

本記事では、ユーザがログアウトした際に実行する処理についてまとめる。

bashを使っている場合、ホームディレクトリに.bash_logoutというファイルがある(なければ作成する)。このファイルには、ログアウトした際に、実行する処理を記述する。 bashのコマンド履歴および端末の画面をクリアするには

# ~/.bash_logout
history -c
/usr/bin/clear
と書いておけば良い。ちなみに、ログインする際に、実行する処理は.bash_loginに書く。

manコマンドの使い方 このエントリーを含むはてなブックマーク

本記事では、manコマンドの使い方をまとめる。

hogeという名前のコマンド、関数、ユーティリティの使い方を調べる。

$ man hoge
hogeにマッチするマニュアルを探して、一番最初に見つかったものを表示する。

キーワード「passwd」でコマンドおよび要約文を調べる。

$ man -k passwd
afppasswd (1)        - netatalk パスワード管理ユーティリティ
chpasswd (8)         - パスワードファイルをバッチ処理で更新...
cvpasswd (1)         - CVSup の認証のためにパスワードにスクラ...
gpasswd (1)          - /etc/groupファイルを管理する
passwd (1)           - ユーザパスワードを変更する
passwd (5)           - パスワードファイル
passwd2des (3)       - RFS パスワード暗号化
pwupdate (8)         - NIS マップ passwd および shadow を更新する
rpc.yppasswdd (8)    - NIS パスワード更新デーモン
yppasswd (1)         - NIS データベースのパスワードを変更する
yppasswdd (8)        - NIS パスワード更新デーモン
chgpasswd (8)        - update group passwords in batch mode
exim4_passwd (5)     - Files in use by the Debian exim4 packages
exim4_passwd_client (5) - Files in use by the Debian exim4 packages
lppasswd (1)         - add, change, or delete digest passwords.
mkpasswd (1)         - Overfeatured front end to crypt(3)
pam_localuser (8)    - require users to be listed in /etc/passwd
passwd (1ssl)        - compute password hashes
smbpasswd (5)        - The Samba encrypted password file
smbpasswd (8)        - change a user's SMB password
update-passwd (8)    - safely update /etc/passwd, /etc/shadow and /etc/group
番号はマニュアルのセクション番号である。ちなみに、マニュアルのセクション番号は以下の通りである。
   
       1   実行プログラムまたはシェルのコマンド
       2   システムコール (カーネルが提供する関数)
       3   ライブラリコール (システムライブラリに含まれる関数)
       4   スペシャルファイル (通常 /dev に置かれている)
       5   ファイルのフォーマットとその約束事。例えば /etc/passwd など
       6   ゲーム
       7   マクロのパッケージとその約束事。例えば man(7), groff(7) など
       8   システム管理用のコマンド (通常は root 専用)
       9   カーネルルーチン [非標準]
詳しいことは
$ man man
で調べれる。

パスワード設定ファイルpasswdのマニュアルを読む(上の結果から、passwdというキーワードでは、passwdコマンドもマッチするのに注意)。そのためには、セクション番号を指定する。

$ man 5 passwd

参考になるサイト

2009年2月14日土曜日

DVIファイルビューア このエントリーを含むはてなブックマーク

本記事では、centOS 5.2のDVIファイルビューアについてまとめる。Ubuntuでは、xdviで閲覧できていたが、centOSでは日本語のDVIファイルをxdviで閲覧したら(フォント関係の理由により)クラッシュしてしまう。そこでpxdviを使うと問題なく表示できた。

DVIファイルをPSファイルに変換するツールdvipsもた同じ。日本語のDVIファイルはpdvipsを使ってPSファイルに変換すること。ただし、変換したPSファイルを印刷するかどうかで違いがある。例えば、英語のDVIファイルは

$ dvips test-en.dvi
によって、変換されたpsファイルはプリンターにすぐに送られる。一方で、日本語のDVIファイルは
$ pdvips test-ja.dvi
によって、test-ja.psというPSファイルはできるが印刷はされない。印刷するときは、
$ lpr test.ja.ps
などで、明示的に印刷コマンドを打つこと。

SCIM入力メソッドの設定 このエントリーを含むはてなブックマーク

本記事では、SCIM入力メソッドのキーバインドを変更する方法をまとめる。デフォルトでは「半角/全角」や「C-space」などでSCIMを開始、停止を切り替えるようになっている。emacsなどではC-spaceはマークセットのために使われているので、衝突してしまう。したがって、SCIMの方を別のキーバインドに変更する。

変更方法

システムの設定で「SCIM入力メソッドの設定」を選択すると、設定ダイアログが現れる。あるいは、端末から

$ scim-setup &
を実行すると、設定ダイアログが現れる。「フロントエンド」→「全体設定」で、SCIM開始のところで、設定をすべて削除して、代わりにC-spaceを登録する。そして、設定を登録してダイアログを閉じる。

Dejavu、efont、Bitstream Veraフォントをインストール このエントリーを含むはてなブックマーク

本記事では、Dejavu, efont, Bitstream Veraフォントのインストールについてまとめる(CentOSにて行った)。

Bitstream Veraフォント

/usr/share/bitstream-veraディレクトリにTrueTypeフォントがもともとあるが、fontpathが登録されていなかった。/etc/X11/xorg.confでフォントパスを次のように登録した

FontPath "/usr/share/fonts/dejavu"

さらに、/etc/X11/fs/configでxfsにフォントパスも登録した。 catalogueでコンマで区切ってパスを登録する形式になっている。

次に/usr/share/bitstream-veraに移動して、mkfontdirとmkfontscaleを実行する。後は、設定の読み込み作業など(fc-cacheとxset fp rehash など。またservice xfs restartでxfsを再起動する。これらは、どれが必要で、どれが不必要なのかいまいち理解できていないが、実行して間違いはないようなので、一通り実行している。しかし、この後にxfontselを実行しても登録されていないので、X自体を再起動する。すると、xfontselに反映される。詳細な手順は「M+とIPAの合成フォントのインストール 」参照のこと)

efont

efontはsourceforgeのefontプロジェクトからダウンロードしてくる。

efontは、tarボールで圧縮されているので展開する。そして、適当なディレクトリ(例えば/usr/share/fontsなど)にttfファイルをコピーする。私は/usr/local/share/fonts/efontディレクトリを作成して、そこに格納した。/usr/share/fontsや/usr/share/X11/fontsなどのディレクトリはデフォルトのシステムのフォントディレクトリなのでその下に作ったディレクトリに格納しておけば、何も設定しなくてもそのフォントは認識される。しかし、/usr/local/share/fontsはデフォルトのディレクトリでないので、システムに登録する必要がある。

システムへのフォントディレクトリの登録は/etc/fonts/local.confで行う。もともとlocal.confという設定ファイルは存在しないので、次のように自作する。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/local.conf file for local customizations -->
<fontconfig>
    <dir>/usr/local/share/fonts</dir>
</fontconfig>

ちなみに、/etc/fonts/fonts.confを見てみると、システムのデフォルトのフォントディレクトリが書かれているのが分かる。この設定ファイルのヘッダに注意書きされているように、fonts.confは直に編集してはならない。カスタマイズはlocal.confにすること

ちなみに、フォントパスなどの登録、反映は上のvitstream veraの場合と同じ。

xtermで日本語を扱えるフォントはあまりないけれど、efontは使えるのでインストールした。xtermのフォント設定は~/.Xresouceから行う。

Dejavuフォント

Dejavuフォントはrpmfindからfedora core9用のパッケージdejavu-fonts-2.24-3.fc9.noarch.rpmをダウンロードする。

$ rpm -ivh dejavu-fonts-2.24-3.fc9.noarch.rpm
でインストールできる。このフォントのdejavu sans monoをemacsで使うことにする。 CentOS5.2ではemacs 21が入っている。これで他のフォントに変更したらなぜか欧文が□になってうまく表示できない。いろいろ試してみて、dejavuを入れてemacs23にしたらうまくdejavu sans monoを登録できた。

まず、上のようにdejavu-fontsをインストールする(ちなみに、フォントパスなどの登録、反映は上のvitstream veraの場合と同じ)。次に、http://people.redhat.com/coldwell/emacs/repo/rhel/emacs-release-23-1.el5.noarch.rpmを取ってきてインストールする。そして、

yum update emacs-common
とするとemacs23にバージョンアップできた。emacs-commonを入れると、gnome関連のパッケージも依存性によりインストールされて嫌だったけれど、仕方なし。

参考サイト

2009年2月13日金曜日

Windowの名前、クラス名を調べる。 このエントリーを含むはてなブックマーク

本記事では、LinuxのX上で表示されるウィンドウの名前、クラス名を調べる方法をまとめる。 例えば、WindowManagerのtwmの設定ファイルでアプリケーションごとのウィンドウの挙動を設定するときなどに、そのウィンドウの名前やクラス名を使うときに必要になる。

xpropコマンドを実行してウィンドウをクリックすれば、そのウィンドウに関する性質が端末に出力される。それでは、順を追って説明する。

次のコマンド

$ xprop
を実行すると、マウスポインタが十字架になるのでウィンドウをクリックする(下の写真に十字架のポインタは写ってませんが、、、)。

そのウィンドウに関する情報が端末に出力される。大量の情報なので、grepで抜き出す。ウィンドウの名前(WM_NAME)の場合は次のようにする。

$ xprop | grep WM_NAME
ウィンドウのクラス名(WM_CLASS)の場合は次のようにする。
$ xprop | grep WM_CLASS

2009年2月12日木曜日

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

本記事では、CentOS5.2でsuコマンドを実行できるユーザを制限する方法をまとめる。他のユーザのパスワードを知っていたとしても(不正に知りえた情報かもしれないので)、誰でもsuを実行できることは危険である。したがって、suを実行できるユーザの制限をする。

設定

/etc/login.defsに次の1行を追加する(<---この設定は、最近は不要らしい。pam_wheel.so を使う場合は、SU_WHEEL_ONLY の設定は不要より)。

SU_WHEEL_ONLY yes
これは、wheelグループに所属するユーザだけsu権限が得られることを意味している。

さらに、/etc/pam.d/suで次の箇所

# Uncomment the following line to require a user to be in the "wheel" group.
#auth            required        pam_wheel.so use_uid
をコメントアウトして、
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid
のように変更する。 これで、ユーザがwheelグループに所属している場合だけsuの実行権限が与えられる。 ちなみに、よく似た行があるので別の箇所をコメントアウトしないように注意する。

次に、あるユーザhogeをwheelグループに所属させたいときは、

# usermod -G wheel hoge
を実行すれば良い。

sudoの利用

ここでは、ユーザにsudoの実行権限を与える方法を説明する。

sudoを使うと、別のユーザとしてコマンドを実行することができる。 suではrootパスワードを入力してroot権限を取得する必要があったが、 rootパスワードを入力するリスクを回避するためなどの理由で、sudoが使われることがある。

sudoはsuとは異なり、rootパスワードは必要とされない。現在のアカウントのパスワードを 入力して、本人確認が取れればroot権限でコマンドを実行できる。 もちろん、sudoの実行権限の与えられるユーザは十分信頼できることが前提である。

ユーザhogeにsudoの実行権限を与える方法は、まずhogeをwheelグループに所属させて、次にwheelグループに所属するユーザにsudoの実行権限を与えることで実現する。sudoの権限を設定するファイルは/etc/sudoersであるが、これは直に編集するのでなくvisudoという専用のツールで編集する。

# visudo 
で編集モードに入る。次の行
#%wheel ALL=(ALL) ALL
を探して、コメントを外せば良い。

sudoを使うことで、rootパスワードをユーザに知らせることなくroot権限を与えることができるようになるというメリットはある。また、sudoで実行したコマンドの履歴は保存される。しかし、rootパスワードなしで一般ユーザがroot権限を取得できるということはセキュリティ上あまり好ましくないので、これはデメリットでもある。ゆえに、sudoを利用する場合は、それが本当に必要なのかどうかを十分検討する必要がある。

参考サイト

2009年2月11日水曜日

ntpサーバの設定 このエントリーを含むはてなブックマーク

本記事では、ntpサーバの設定をまとめる。

ntpサーバのインストール

yumあるいはapt-getなどでインストールする。

$ yum -y install ntp

設定ファイル

/etc/ntp.confを編集する。

# デフォルトで全てのNTPアクセス拒否
restrict default ignore

# ローカルホストからはNTPアクセス許可
restrict 127.0.0.1 
restrict -6 ::1

# 参照するntpサーバを指定
server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp


server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10  
# 変動情報記録ファイルの指定
driftfile /var/lib/ntp/drift

時刻合わせ、デーモン起動

$ ntpdate ntp.nict.jp
11 Feb 21:06:39 ntpdate[15455]: step time server xxxx offset -193.337527 sec
$ /etc/rc.d/init.d/ntpd start

参考サイト

sshサーバの設定 このエントリーを含むはてなブックマーク

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

CentOSのセットアップ(X起動、アップデート) このエントリーを含むはてなブックマーク

本記事では、CentOSのインストールから、X Window Systemの設定、yumによるパッケージのアップデートまでをまとめる。インストールしたPCは、内蔵型DVDドライブのあるデスクトップ型コンピュータである。

CentOSのインストール

Biosで、DVDドライブが最も優先的に起動するように設定する。そして、 「CentOSのインストールDVDを作成する」の手順で作成したDVDを入れて、再起動する。後はグラフィカルインストールで、対話的にインストールを進めれば良い。

インストールするパッケージは、おおまかに選択しておけば後は自動でインストールされるが、私は必要なものを手動で選択して最小構成となるようにした。

X Window Systemの設定

OSを立ち上げてみると、X Windowはうまく起動しなかった。したがって、/etc/X11/xorg.confを手動で設定し直した(Monitorセクションはいい加減に書くとモニターが破損する危険があるらしい。Monitorセクションは書かないでおくとデフォルトの設定となる)。

# Xorg configuration created by pyxf86config

Section "ServerLayout"
Identifier     "Default Layout"
Screen      0  "Screen0" 0 0
InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
Option     "XkbModel" "jp106"
Option     "XkbLayout" "jp"
EndSection

Section "Device"
Identifier  "Videocard0"
Driver      "vesa"
EndSection

Section "Screen"
Identifier "Screen0"
Device     "Videocard0"
DefaultDepth     24
SubSection "Display"
 Viewport   0 0
 Depth     24
 Modes "1024x768"
EndSubSection
EndSection
ちなみに、もとのxorg.confにはFontPathが指定されていない。 /var/log/Xorg.0.logを見てみると、FontPathが指定されていないので、 デフォルトを適用すると書いてあった。 そうして欲しくないならば、xorg.confを書いておけば良い。 Xフォントサーバ(xfs)は、設定ファイル/etc/X11/fs/configを読み込んで 動作するのだが、こちらにフォントパスが書かれている。

設定後に、

$ startx
によってXが起動する。うまくGUIが表示されたらOK。

パッケージのアップデート

アップデートはyumを使う。プロキシ経由でネットに接続しているので、~/.bashrcなどに

http_proxy="http://hogehoge.proxy.net:8080"
export http_proxy
を挿入してプロキシを環境変数に登録する。

次に、bashrcを再び読み込む。

$source ~/.bashrc

そして、アップデートを実行する。

$ yum update

CentOSのインストールDVDを作成する。 このエントリーを含むはてなブックマーク

本記事では、Linuxディストリビューションの1つであるCentOSのインストールDVDを作成する方法をまとめる。CentOSのインストール方法は大きく分けて

  1. インストールCDまたはDVD
  2. ネットワーク経由
です。今回は、centOS.orgからisoイメージをダウンロードして、インストールDVDを作成する方法を説明します。

isoイメージの取得

centOS.orgのdownloadsタブのmirrorsを選択すると、次の画面になります。

CentOS-5 ISOs(CentOS 5のisoイメージのこと)をクリックして、適当なミラーサイトを選択します。私はjaistのftpサーバを選択しました。次の3つをダウンロードします。

  • CentOS-5.2-i386-bin-DVD.iso
  • md5sum.txt
  • md5sum.txt.asc
ちなみに、isoイメージは3.7GBほどもあるので、ローカルマシンのディスク容量などに注意してください。

チェックサムファイルの署名を検証する。

$ gpg --verify md5sum.txt.asc
そして、チェックサムでisoイメージの整合性を検証する。
$ md5sum --check md5sum.txt

isoイメージの書き込み

ファイルマネージャのnautilusで、isoイメージファイルを選択して右クリックして「"CD/DVDの作成"で開く」を選択すれば良い(Ubuntu8.04)。 ちなみに、環境は次の通り

  • DVDドライブ:BuffaloのDVM-X16U2
  • 作業用コンピュータ:ThinkPadX31

最初からこうしておけば良かったのだが、諸事情でWindowsからisoイメージの書き込みをしてしまい、思わぬトラブルに見舞われてしまった。というのは、DeepBurnerという(ある程度知られているらしい)フリーのDVDライターを使ってisoイメージを書き込もうとしたとき、処理が遅い上に、エラーで書き込めなかった(理由は不明)。それで、思い直してubuntuから上の方法でしたら、問題なく書き込めた。

grubにパスワードを設定する このエントリーを含むはてなブックマーク

本記事では、linux(主にUbuntu)でgrubパスワードを設定する方法をまとめる。grubをパスワードで保護する理由は、シングルユーザモードへのアクセスを防ぐことなどが挙げられる。シングルユーザモードで起動すると、パスワードなしでrootとしてログインできるからです。他の理由は、参考サイトの"Biosとブートローダのセキュリティ"に簡潔にまとめられています。

設定ファイルの編集

Ubuntuの場合、設定ファイルは/boot/grub/menu.lstである(他のLinuxでは/boot/grub/grub.confなど)。 以下のようにパスワードを設定する箇所がある。

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

password   hogehoge
という具合で、hogehogeというパスワードを設定する1行を挿入すれば良い。 このファイルはパーミッションでroot権限を持つユーザだけが閲覧できるように しておけば、直にパスワードを書き込んでも良いかもしれない。 さらに安全にしたいならば暗号化すれば良い。

パスワードの暗号化

grubコマンドを実行してgrub シェルを起動する。

$ grub
プロンプトが現れるまで、少し時間がかかるかもしれない。

md5cryptで暗号化する。

> md5crypt
Password: hogehoge
Encrypted: 暗号化されたパスワード
暗号化されたパスワードをコピーして、先ほどの設定ファイルで 直にパスワードを書いていた行の代わりに
password   --md5  暗号化されたパスワード
を挿入する。

参考サイト

2009年2月10日火曜日

Red Hat Linux9のサービス一覧 このエントリーを含むはてなブックマーク

本記事では、Red Hat Linux9のサービスの説明をまとめる。

サービス一覧

各ランレベルごとのサービスの起動、停止の設定を見る。

$ chkconfig --list | less

サービスの説明をまとめる。

kudzu
ハードウェアの自動認識を支援する
syslog
システムのログを記録する
netfs
NFSやsambaにマウントする
network
起動時にネットワークインターフェースを初期化する
random
乱数生成器を初期化する
rawdevices
自動でrawデバイスをマウントする
pcmcia
pcmciaカードを検出する
saslauthd
sasl(Simple Authentication and Security Layer)認証サーバ
keytable
/etc/sysconfig/keyboardを参照して、キーマップをロードする
apmd
電源管理デーモン
atd
指定時刻にコマンドを実行する
gpm
コンソールでマウスを使うためのツール
autofs
Automatic File System. ファイルシステムの自動マウント、アンマウントを行う
iptables
パケットフィルタリングツール
irda
赤外線通信(IrDA:Infrared Data Association)用のユーティリティ
isdn
ISDN用ユーティリティ
sshd
sshデーモン
portmap
NFS、NIS使用時のポートマッパー
nfs
NFS(Network File System)サーバ
nfslock
NFSファイル・ロック機能
sendmail
メールサーバデーモン
rhnsd
Red Hat Networkデーモン。更新などを通知する
crond
コマンドを定期的に実行するデーモン
anacron
定期的なコマンドスケジューラであり、システムが停止しているときに実行できなかったタスクを次回起動時に自動実行する
httpd
HTTPデーモン
aep1000
AEP1000、AEP2000という SSL 用の暗号化アクセラレータの デバイスドライバ
bcm5820
aep1000と同種の暗号化アクセラレータのデバイスドライバ
squid
プロキシサーバ、webキャッシュサーバ
tux
Red Hat Content Acceleratorは、カーネルベース、マルチスレッド、高性能の HTTPサーバで、スタティックデータとダイナミックデータの両方を処理する能力があります。また、tuxはカーネルアクセラレートしたネットワークサービスのアーキテクチャです。
winbind
SambaのWinbind(SambaでWindowsドメインの認証を利用する)デーモン
smb
sambaデーモン
xfs
X フォントサーバ
xinetd
inetdの代わるセキュアなデーモン管理プログラム
named
DNSサーバデーモン
ntpd
Network Time Protocol(NTP)デーモン
canna
漢字変換サーバ
FreeWnn
漢字変換サーバ

サービスの起動、停止は次のようにする。 例えば、ランレベル3でpcmciaデーモンを停止したいときは

$ chkconfig --level 3 pcmcia off
とする。すべてのランレベルで停止したいときは
$ chkconfig pcmcia off

コンソールのメッセージが文字化けする このエントリーを含むはてなブックマーク

本記事では、Red Hat Linuxでコンソールのメッセージの文字化けを回避する方法をまとめる。

KONを使う方法

Kanji cONsole emulatorのKONを使う方法をまとめる。 コンソールで、
$ kon
と実行すれば、コンソールで日本語を表示できるようになる。

環境変数LANGを設定する方法

環境変数LANGを英語に設定する。
$ export LANG="en_US"
コンソールのデフォルトの言語設定は/etc/sysconfig/i18nに記述されているので、ここを直接編集してもよい。
#LANG="ja_JP.eucJP" 変更前
LANG="en_US"

参考

2009年1月17日土曜日

M+とIPAの合成フォントのインストール このエントリーを含むはてなブックマーク

本記事では、Ubuntu8.04においてM+とIPAの合成フォントのインストール方法をまとめる。

フォントの説明

まずは各フォントについて簡単に説明します。

IPAフォント

IPAフォント(アイピーエイふぉんと)とは、コンピュータ用の無償のフォントセットの1つであり、高品位な日本語アウトラインフォントである[1]。情報処理推進機構 (IPA) が「未踏ソフトウェア創造事業」として採用したプロジェクトの成果物の1つで、無償利用が可能である。

from wikipedia

8.04にはデフォルトで入っているが、8.10ではProject Vineが配布しているVLゴシックフォントが標準となっているらしい。

M+アウトラインフォント

自由なライセンスで配布されているアウトラインフォント フォント仕様などの詳細は配布サイトに載っています。

M+とIPAの合成フォント

M+ アウトラインフォントには、ひらがな・カタカナはあるのですが、漢字はありません。これに同じくフリーな IPAフォント の漢字と組み合わせた合成フォントのことです。 フォントの詳細は配布サイトに載っています。

合成フォントのインストール

M+とIPAの合成フォントの配布サイトから、合成フォント(mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2)を入手する。

パッケージを展開して、フォントを取り出す。私は/usr/local/share/fonts/truetype/mixfont-mplus-ipaというディレクトリを作成して、格納しました。

$ tar xjvf mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2
$ cd mixfont-mplus-ipa-TrueType-20060520
$ cd opfc_ModuleHP-1.1.1_withIPAFonts_and_Mplus
$ cd fonts
$ sudo mkdir /usr/local/share/fonts/truetype/mixfont-mplus-ipa
$ sudo cp *.ttf /usr/local/share/fonts/truetype/mixfont-mplus-ipa

次に、フォントを格納したディレクトリに移動して、フォントキャッシュにフォントを登録します。Xにフォントを登録するために、インデックスを作成します。

$ cd /usr/local/share/fonts/truetype/mixfont-mplus-ipa
$ sudo fc-cache -v  *.ttf  # フォントの登録 (フォントキャッシュに追加)
$ sudo  mkfontdir
$ sudo mkfontscale

Xサーバの設定ファイル(/etc/X11/xorg.conf)のFontPathにフォントを格納したディレクトリを登録する。

Section "Files"
  FontPath        "/usr/local/share/fonts/truetype/mixfont-mplus-ipa"
EndSection

再ログインするか、フォントサーバのリハッシュ

$ xset fp rehash
をするかして設定を反映させる。
$ xfontsel &
を実行すればXにフォントが登録されているか確認できる。

補足

redhat系のディストリビューションでは、xfsに登録されているフォントパスの一覧は

$ chkfontpath --list
で出力される。

フォントパスを追加するには、

$ chkfontpath --add フォントパス
とすれば良い。そして、設定を読み込むには、xfsを再起動すれば良い。
$ service xfs restart
正しく登録されていることを確認するには、ふたたびchkfontpathを実行する。

フォントを使ってみる

「システム→設定→外観の設定」によって、ダイアログが表示されます。「フォント」タブから使用するフォントを選択します。これでシステムで使用するフォントが設定されます。

firefoxで使用するフォントは、「表示→設定」によって表示されるダイアログで「コンテンツ」から、使用するフォントを選択します。

プログラマーのための等幅フォント

Monospace/Fixed Width Programmer's Fontsに、プログラミングに適しているフォントについて興味深い記事が書かれていますので、和訳してみます。

Monospaced fontとは? Xeroxによると:

CourierやLetter GothicなどのMonospace fontは、同じ文字幅を持った文字からなり、フォーム、表や行の長さがきちんと決まっている文書などを作るときに使われます。そのような固定幅フォントの例は、Courier 12ピッチです。これは、1インチにつきちょうど12文字を表示する10ポイントのフォントです。

プログラミングに適しているフォントの基準:
  • 明確ではっきりした文字
  • 拡張文字集合(Extended characterset)
  • good use of white space(空白文字に使い勝手などあるのか?)
  • 小文字のl(エル)、数字の1(イチ)、小文字のi(アイ)をきちんと区別できる。
  • 数字の0(ゼロ)、大文字のO(オー)、小文字のo(オー)をきちんと区別できる。
  • 左引用符(forward quotes)と右引用符(back quotes)がきちんと区別できる。対称的な(mirrored)外観だと好ましい。
  • 明確な句読点、波カッコ(braces)、丸カッコ(parenthesis)、角カッコ(brackets)
その他に、適したフォントが良い順で列挙されているので参考になりました。

参考サイト

M+ と IPAフォントの合成フォント

M+とIPAフォントの合成フォントの配布サイト@sourceforge

Linux できれいな日本語フォントを使う

Plamo Linuxでのインストール方法が説明されている。

無償で使える綺麗なIPAフォント

IPAフォントの簡単な解説

フォントのインストールについて

Ubuntuでフォントをインストールする方法@Ubuntu日本語フォーラム

M+IPAフォントの追加

Ubuntu 8.04でM+IPAフォントのインストールについて説明

一般利用者向けIPAフォントのダウンロード

IPAフォント配布サイト@情報処理推進機構

M+ OUTLINE FONTS

M+フォント配布サイト@sourceforge

2009年1月16日金曜日

Minion ProフォントのLatexサポートのインストール このエントリーを含むはてなブックマーク

本記事では、Ubuntu8.04でAdobe MinionProフォントのlatexサポートのインストール方法をまとめる。

MinionProは、Adobe systemsの欧文フォントのフォントファミリーです。

参考サイト:

注意事項

Installing Minion Pro fonts では、/usr/local/share/texmf以下にインストールする方法が書かれているが、 私は/usr/local/share/texmf-texlive以下にインストールしてしまった。 前者の方が良いのだろうが、後者でも問題なかったのでここでは後者で説明する。

また、MnSymbolがインストールされている必要があります。 これは「MinionPro数学記号フォントのスタイルファイル導入」 にインストール方法をまとめていますので、ご覧ください。

さらに、open type フォントをtype1フォーマットに変換するプログラムも必要です。 ここでは、LCDF Typetoolsを使って変換しています。なければインストールします。

$ sudo apt-get install lcdf-typetools

scripts.zipを取得

CTANのMinionProからパッケージscripts.zipを取得する。 取得したパッケージは、説明の都合上~/tmpに展開することにする。

$ cd ~/tmp
$ unzip scripts.zip
$ ls
otf  pfb  convert.bat  convert.sh  scripts.zip

MinionProフォントのOTFファイルの変換

ローカルディレクトリにある(であろう)MinionProフォントを先ほど展開して 生成されたディレクトリ~/tmp/otfにコピーする。 私の環境では、

$ ls
PFM                  CourierStd-BoldOblique.otf  MinionPro-Regular.otf
SY______.PFB         CourierStd-Oblique.otf      MyriadPro-Bold.otf
ZX______.PFB         CourierStd.otf              MyriadPro-BoldIt.otf
ZY______.PFB         MinionPro-Bold.otf          MyriadPro-It.otf
AdobePiStd.otf       MinionPro-BoldIt.otf        MyriadPro-Regular.otf
CourierStd-Bold.otf  MinionPro-It.otf
$ pwd
/opt/Adobe/Reader8/Resource/Font
にフォントが置いてあった(おそらくAcrobatReaderをインストールしたときにここに置くように設定したと思う)。

そして、convert.shというスクリプトを実行すると、フォントが変換される(このスクリプトでlcdf-typetoolsが使われる)。

$ cp /opt/Adobe/Reader8/Resource/Font/MinionPro*.otf ~/tmp/otf
$ cd ~/tmp
$ ./convert.sh

フォントのインストール

sudo mkdir /usr/local/share/texmf-texlive/fonts/type1/adobe/MinionPro
sudo cp pfb/*.pfb /usr/local/share/texmf-texlive/fonts/type1/adobe/MinionPro

エンコーディングファイルなどのインストール

adobeフォントのバージョンを確認する。

$ otfinfo -v  ~/tmp/otf/MinionPro-Regular.otf
Version 2.015;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032

エンコーディングファイルは3種類あって、そのうち手持ちのadobeフォントのバージョンに 合うものを1つだけをインストールする。

Version | Encoding file
------------------------
001.000 | enc-v1.000.zip
001.001 | enc-v1.001.zip
002.000 | env-v2.000.zip

ここでは002.000(すなわちenv-v2.000.zip)をCTANのMinionProから取得する。 さらに、metrics-base.zipとmetrics-full.zipも取得する。

それらを/usr/local/share/texmf-texliveに展開する。

$ sudo unzip metrics-base.zip -d  /usr/local/share/texmf-texlive
$ sudo unzip metrics-full.zip -d  /usr/local/share/texmf-texlive
$ sudo unzip env-v2.000.zip   -d  /usr/local/share/texmf-texlive

設定ファイルの編集

設定ファイル/etc/texmf/updmap.d/10local.cfgに次の1行を追加する。

Map MinionPro.map
ちなみに、CTANのMinionProでは、updmap.cfgというファイル(私の環境では、/var/lib/texmf/web2cにある)を編集せよと書かれていたけれど、上の設定ファイルで良いみたいだ。

データベースを更新

$ sudo mktexlsr
$ sudo update-updmap
$ sudo updmap-sys

以上で設定は終了。スタイルファイルを使用するためには、プリアンブルに次の1行を挿入する。

\usepackage{MinionPro}

参考サイト:

Minion Pro数学記号フォントのインストール このエントリーを含むはてなブックマーク

本記事では、Ubuntu8.04でAdobe MinionProのための数学記号フォントのlatexスタイルファイルのインストール方法をまとめる。

MinionProは、Adobe systemsの欧文フォントのフォントファミリーです。

参考サイト:

MinionProフォントのインストールは「Minion ProフォントのLatexサポートのインストール」をご覧ください。

注意事項

Installing Minion Pro fonts では、/usr/local/share/texmf以下にインストールする方法が書かれているが、 私は/usr/local/share/texmf-texlive以下にインストールしてしまった。 前者の方が良いのだろうが、後者でも問題なかったのでここでは後者で説明する。

パッケージ取得

CTANからパッケージmnsymbol.zipを取得する。

取得したパッケージは、説明の都合上~/tmpに展開することにする。

$ cd ~/tmp
$ unzip mnsymbol.zip
$ cd mnsymbol

スタイルファイルのコピー

$ pwd
/home/tkhisa/tmp/mnsymbol
$ cd tex
$ latex MnSymbol.ins
$ sudo cp MnSymbol.sty /usr/share/texmf-texlive/tex/latex/MnSymbol

sourceディレクトリ内のファイルをすべてコピー

$ sudo mkdir /usr/share/texmf-texlive/fonts/source/public/MnSymbol
$ cd ~/tmp/mnsymbol/source
$ sudo cp * /usr/share/texmf-texlive/fonts/source/public/MnSymbol

ドキュメントをコピー

$ sudo mkdir /usr/share/texmf-texlive/doc/latex/MnSymbol
$ cd ~/tmp/mnsymbol
$ sudo cp MnSymbol.ps, MnSymbol.pdf, README /usr/share/texmf-texlive/doc/latex/MnSymbol

PostScript fontsをインストールするために以下をコピー

$ sudo mkdir /usr/share/texmf-texlive/fonts/map/dvips/MnSymbol
$ sudo mkdir /usr/share/texmf-texlive/fonts/enc/dvips/MnSymbol
$ sudo mkdir /usr/share/texmf-texlive/fonts/type1/public/MnSymbol
$ cd ~/tmp/mnsymbol
$ sudo cp enc/MnSymbol.map /usr/share/texmf-texlive/fonts/map/dvips/MnSymbol
$ sudo cp enc/*.enc /usr/share/texmf-texlive/fonts/enc/dvips/MnSymbol
$ sudo cp pfb/*.pfb /usr/share/texmf-texlive/fonts/type1/public/MnSymbol

tfmディレクトリをコピー

$ sudo mkdir /usr/share/texmf-texlive/fonts/tfm/public/MnSymbol
$ cd ~/tmp/mnsymbol
$ sudo cp tfm/* /usr/share/texmf-texlive/fonts/tfm/public/MnSymbol

データベースの更新

$ sudo mktexlsr
$ sudo updmap-sys --enable MixedMap MnSymbol.map

以上で設定は終了。スタイルファイルを使用するためには、プリアンブルに次の1行を挿入する。

\usepackage{MnSymbol}

参考サイト:

キーワード

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

過去の記事

過去の記事を月ごとにまとめています。三角印をクリックすると、過去の記事の一覧が表示されます。

筆者について

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