<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>片っ端からメモってみる &#187; Linux</title>
	<atom:link href="http://www.parlia.net/weblog/post/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.parlia.net/weblog</link>
	<description>Linuxサーバ構築やその他もろもろの備忘録</description>
	<lastBuildDate>Mon, 20 Jul 2009 03:54:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>syslog-ngを使う</title>
		<link>http://www.parlia.net/weblog/post/723.html/</link>
		<comments>http://www.parlia.net/weblog/post/723.html/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 03:13:27 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=723</guid>
		<description><![CDATA[syslogよりも細かいログの制御ができるsyslog-ngを使ってみる。

インストール
aptでインストールする。
# apt-get install syslog-ng
設定はsyslog.confから引き継いでい [...]]]></description>
			<content:encoded><![CDATA[<p>syslogよりも細かいログの制御ができるsyslog-ngを使ってみる。<br />
<span id="more-723"></span></p>
<h2>インストール</h2>
<p>aptでインストールする。</p>
<pre># apt-get install syslog-ng</pre>
<p>設定はsyslog.confから引き継いでいるようなので修正はなし。</p>
<h2>リモートログを受信</h2>
<p>ルータなどのログをホスト毎に分ける。<br />
/var/log/remote/(IPアドレス).logに保存するように設定する。</p>
<pre># vi /etc/syslog-ng/syslog-ng.conf

# remote log
source s_remote { udp(ip("0.0.0.0") port(514)); };
destination d_remote { file("/var/log/remote/$HOST.log" perm(0640)); };
filter f_remote { level(info..emerg); };
log { source(s_remote); filter(f_remote); destination(d_remote); };</pre>
<p>設定ファイルの確認。エラーがあれば出力される。</p>
<pre># syslog-ng -s</pre>
<p>再起動して設定を反映させる。</p>
<pre># /etc/init.d/syslog-ng restart</pre>
<p>リモートログのlogrotate設定</p>
<pre># vi /etc/logrotate.d/syslog-ng

/var/log/remote/*.log {
   rotate 4
   missingok
   notifempty
   weekly
}</pre>
<h2>総当たり攻撃(Brute force attack)対策</h2>
<p>FTPやPOP3サーバに指定回数ログインに失敗するとiptablesでアクセスを拒否するようにする。</p>
<p>iptablesの設定スクリプトにチェーンを追加するように修正。</p>
<pre># チェーンの初期化
iptables -F

# ポリシーの設定 (デフォルトで拒否)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

<span style="color: #00ffff"># 新規チェーンの作成
iptables -N ATTACKCHEAK
iptables -N ATTACKDROP
# ATTACKDROPチェーンはログをとってDROP
iptables -A ATTACKDROP -j LOG --log-prefix 'iptables attack-drop: '
iptables -A ATTACKDROP -j DROP</span>

# LoopBack
iptables -A INPUT -i lo -j ACCEPT

# セッション確立後のパケット疎通は許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

<span style="color: #00ffff"># ATTACKCHEAKチェーンで評価
iptables -A INPUT -p tcp -m multiport --dports 21,110,995 -j ATTACKCHEAK</span>

# 公開ポート
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

(以下公開ポートの設定)</pre>
<p>スクリプトの修正内容。</p>
<ul>
<li>ATTACKCHEAK、ATTACKDROPチェーンを作成。</li>
<li>ATTACKDROPチェーンではすべてDROPする。</li>
<li>公開ポートの前にATTACKCHEAKチェーンで評価する。</li>
</ul>
<p>アクセスを制限するIPを追加するとき</p>
<pre># iptables -A ATTACKCHEAK -p tcp --dport (ポート) -s (IPアドレス) -j ATTACKDROP</pre>
<p>解除するとき</p>
<pre># iptables -D ATTACKCHEAK -p tcp --dport (ポート) -s (IPアドレス) -j ATTACKDROP</pre>
<p>ログインに失敗したときに実行するスクリプトの作成。</p>
<pre># vi /usr/local/syslog-ng/filter_brute_force.pl

#!/usr/bin/perl

$subject = 'syslog-ng';
$mailto = 'root@parlia.net';
$mailfrom = 'root@parlia.net';
$sendmail = '/usr/sbin/sendmail';
$iptables = '/sbin/iptables';
$logfile = '/usr/local/syslog-ng/log.txt';

use Jcode;

while (&lt;STDIN&gt;) {
  if (/ proftpd\[\d*\]:.*\[(\d+\.\d+\.\d+\.\d+)\]/) {
    $port = '21';
    $ip = $1;
  } elsif (/ pop3d:.* ip=\[.*:(\d+\.\d+\.\d+\.\d+)\]/) {
    $port = '110';
    $ip = $1;
  } elsif (/ pop3d-ssl:.* ip=\[.*:(\d+\.\d+\.\d+\.\d+)\]/) {
    $port = '995';
    $ip = $1;
  } else {
    exit;
  }

  if ($ip =~ /^192\.168\./) { exit; }

  $count = 0;
  open(LOG, "+&lt;$logfile");
  while ($line = &lt;LOG&gt;) {
    if ($line =~ /IP=([\d\.]+) PORT=(\d+)/) {
      if ($ip eq $1 &amp;&amp; $port eq $2) {
        $count++;
      }
    }
  }
  print LOG &amp;get_time()." IP=$ip PORT=$port\n";
  close(LOG);

  $ret = `$iptables -n -L ATTACKCHEAK | grep -F '$ip' | grep -F 'dpt:$port'`;
  if ($count &gt;= 2 &amp;&amp; !$ret) {
    system("$iptables -A ATTACKCHEAK -p tcp --dport $port -s $ip -j ATTACKDROP");

    $message = "ATTACKCHEAKチェーンに追加\n";
    $message .= "ポート: $port\n";
    $message .= "IP: $ip\n";
    $message .= "\n$_";

    Jcode::convert(\$subject,jis);
    Jcode::convert(\$message,jis);

    open(MAIL,"| $sendmail -t");
    print MAIL "To: $mailto\n";
    print MAIL "From: $mailfrom\n";
    print MAIL "Subject: $subject\n";
    print MAIL "MIME-Version: 1.0\n";
    print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
    print MAIL "Content-Transfer-Encoding: 7bit\n";
    print MAIL "$message\n";
    close(MAIL);
  }
}

sub get_time {
  @time = localtime(time());
  return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $time[5]+=1900, $time[4]+=1, $time[3], $time[2], $time[1], $time[0]);
}</pre>
<p>ログインに失敗したら/usr/local/syslog-ng/filter_brute_force.plを実行するように、/etc/syslog-ng/syslog-ng.confに設定を追加する。</p>
<pre># vi /etc/syslog-ng/syslog-ng.conf

# Brute force attack
destination d_attack { program("/usr/local/syslog-ng/filter_brute_force.pl"); };
filter f_ftp_attack { program("proftpd") and (match("Login failed") or match("no such user found")); };
filter f_pop3_attack { (program("pop3d") or program("pop3d-ssl")) and match("LOGIN FAILED"); };
log { source(s_all); filter(f_ftp_attack); destination(d_attack); };
log { source(s_all); filter(f_pop3_attack); destination(d_attack); };</pre>
<h2>参考サイト</h2>
<p><a href="http://www.aconus.com/~oyaji/security/syslog-ng.htm">syslog-ngの導入</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/723.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>suEXECのドキュメントルートを変更する</title>
		<link>http://www.parlia.net/weblog/post/729.html/</link>
		<comments>http://www.parlia.net/weblog/post/729.html/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 02:23:21 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=729</guid>
		<description><![CDATA[Ubuntu8.04のApacheは、/var/www 以下でないとsuEXECが動かない。

# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu8.04のApacheは、/var/www 以下でないとsuEXECが動かない。</p>
<pre>
# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p><span id="more-729"></span><br />
apache2-suexec-customパッケージがあれば、ドキュメントルートを簡単に変更できるが、Ubuntu8.04にはないので以下の方法を試す。</p>
<ul>
<li><a href="#hd1">apache2.2-commonのビルド</a></li>
<li><a href="#hd2">「--bind」オプションをつけてmount</a></li>
<li><a href="#hd3">バイナリエディタでsuexecを修正</a></li>
</ul>
<h2 id="hd1">apache2.2-commonのビルド</h2>
<p>suexecはapache2.2-commonパッケージに含まれている。</p>
<pre>
# dpkg -S /usr/lib/apache2/suexec
apache2.2-common: /usr/lib/apache2/suexec
</pre>
<p>ビルドの準備。</p>
<pre>
$ sudo apt-get build-dep apache2.2-common
$ apt-get source apache2.2-common
$ cd apache2-2.2.8/
</pre>
<p>fakerootがないと、ビルドでエラーが出るのでインストールする。</p>
<pre>$ sudo apt-get install fakeroot</pre>
<p>suexec-docrootを変更する。ここでは/homeとした。</p>
<pre>
$ vi debian/rules

              --with-suexec-docroot=<span style="color: #00ffff">/home</span> \
</pre>
<p>ビルドする。</p>
<pre>$ dpkg-buildpackage</pre>
<p>できたパッケージをインストールする。今回はファイルだけコピーすることにする。</p>
<pre>$ sudo cp debian/apache2.2-common/usr/lib/apache2/suexec /usr/lib/apache2/</pre>
<p>確認</p>
<pre>
# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p>バージョンアップ時に更新されないようにaptでholdする。</p>
<pre># echo apache2.2-common hold | dpkg --set-selections</pre>
<h2 id="hd2">「--bind」オプションをつけてmount</h2>
<p>「--bind 」オプションをつけて/homeを/var/www/homeにマウントする。</p>
<pre>
# mkdir /var/www/home
# mount --bind /home /var/www/home
</pre>
<p>apacheのDocumentRootを変更する。</p>
<pre>
# vi /etc/apache2/sites-available/default

&lt;Directory /var/www/home/user/public_html&gt;

    DocumentRoot /var/www/home/user/public_html
</pre>
<p>再起動時にmountされるようにfstabに記入する。</p>
<pre>
# vi /etc/fstab

/home /var/www/home         none    bind            0       0
</pre>
<h2 id="hd3">バイナリエディタでsuexecを修正</h2>
<p>バイナリエディタでsuexecのバイナリの値を変更する。</p>
<p>suexecをコピーする。</p>
<pre>
# cd /usr/lib/apache2/
# cp -p suexec suexec.test
</pre>
<p>バイナリエディタで「/var/www」を「/home...(nullを3つ)」に修正。<a href="http://www.parlia.net/weblog/post/728.html/">vimのバイナリモード</a>を使った。</p>
<pre>
# vi -b suexec.test
</pre>
<p>修正前</p>
<pre>
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d  id uid: (%ld)..-
00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f <span style="color: #00ffff">76 61 72 2f</span>  V.www-data./var/
00019c0: <span style="color: #00ffff">77 77 77</span> 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52  www. -D AP_DOC_R
00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50  OOT="%s".. -D AP
</pre>
<p>修正後</p>
<pre>
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d  id uid: (%ld)..-
00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f <span style="color: #00ffff">68 6f 6d 65</span>  V.www-data./home
00019c0: <span style="color: #00ffff">00 00 00</span> 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52  .... -D AP_DOC_R
00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50  OOT="%s".. -D AP
</pre>
<p>確認する。</p>
<pre>
# ./suexec.test -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p>修正したsuexecと入れ替える。</p>
<pre>
# mv suexec suexec.orig
# mv suexec.test suexec
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/729.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vimでバイナリ編集できるようにする</title>
		<link>http://www.parlia.net/weblog/post/728.html/</link>
		<comments>http://www.parlia.net/weblog/post/728.html/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 07:52:29 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=728</guid>
		<description><![CDATA[vimに付属のxxdを使って、バイナリファイルを編集できるようにする。

ずんWiki - vim を参考に、.vimrc に以下を追加する。上書きがうまくいかなかったので、少し修正した。

"バイナリ編集(xxd)モー [...]]]></description>
			<content:encoded><![CDATA[<p>vimに付属のxxdを使って、バイナリファイルを編集できるようにする。<br />
<span id="more-728"></span><br />
<a href="http://www.kawaz.jp/pukiwiki/?vim#ib970976">ずんWiki - vim</a> を参考に、.vimrc に以下を追加する。上書きがうまくいかなかったので、少し修正した。</p>
<pre>
"バイナリ編集(xxd)モード（vim -b での起動、もしくは *.bin で発動します）
augroup BinaryXXD
        autocmd!
        autocmd BufReadPre  *.bin let &#038;binary =1
        autocmd BufReadPost * if &#038;binary | silent %!xxd -g 1
        autocmd BufReadPost * set ft=xxd | endif
        autocmd BufWritePre * if &#038;binary | %!xxd -r
        autocmd BufWritePre * endif
        autocmd BufWritePost * if &#038;binary | silent %!xxd -g 1
        autocmd BufWritePost * set nomod | endif
augroup END
</pre>
<p>-bオプションをつけてバイナリファイルを開く。</p>
<pre>
0000000: ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48  ......JFIF.....H
0000010: 00 48 00 00 ff db 00 43 00 10 0b 0c 0e 0c 0a 10  .H.....C........
0000020: 0e 0d 0e 12 11 10 13 18 28 1a 18 16 16 18 31 23  ........(.....1#
0000030: 25 1d 28 3a 33 3d 3c 39 33 38 37 40 48 5c 4e 40  %.(:3=<9387@H\N@
0000040: 44 57 45 37 38 50 6d 51 57 5f 62 67 68 67 3e 4d  DWE78PmQW_bghg>M
0000050: 71 79 70 64 78 5c 65 67 63 ff db 00 43 01 11 12  qypdx\egc...C...
0000060: 12 18 15 18 2f 1a 1a 2f 63 42 38 42 63 63 63 63  ..../../cB8Bcccc
0000070: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63  cccccccccccccccc
0000080: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63  cccccccccccccccc
0000090: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ff c2  cccccccccccccc..
00000a0: 00 11 08 00 60 00 80 03 01 22 00 02 11 01 03 11  ....`...."......
00000b0: 01 ff c4 00 19 00 00 03 01 01 01 00 00 00 00 00  ................
00000c0: 00 00 00 00 00 00 01 02 03 04 00 05 ff c4 00 17  ................
00000d0: 01 01 01 01 01 00 00 00 00 00 00 00 00 00 00 00  ................
00000e0: 00 00 01 02 03 ff da 00 0c 03 01 00 02 10 03 10  ................
00000f0: 00 00 01 d2 99 db a4 54 a3 d9 1e d6 b1 06 a7 2c  .......T.......,
0000100: 46 9b 47 9f da 06 a6 7e bf 10 ea 75 3d 43 42 2d  F.G....~...u=CB-
0000110: 78 9b d1 e5 99 d0 73 60 b7 42 42 82 93 98 52 87  x.....s`.BB...R.
</pre>
<p>編集するときは、16進数の部分を書き換える。右側のテキスト部分の変更は反映されない。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/728.html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>cronからのメールが文字化けする問題</title>
		<link>http://www.parlia.net/weblog/post/727.html/</link>
		<comments>http://www.parlia.net/weblog/post/727.html/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:35:49 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=727</guid>
		<description><![CDATA[cronの実行結果のメールが文字化けをしないようにする。

crontabで環境変数"CONTENT_TYPE"を指定すると、その値がcronが送るメールの"Content-Type:"ヘッダの値に設定される。
cron [...]]]></description>
			<content:encoded><![CDATA[<p>cronの実行結果のメールが文字化けをしないようにする。<br />
<span id="more-727"></span><br />
crontabで環境変数"CONTENT_TYPE"を指定すると、その値がcronが送るメールの"Content-Type:"ヘッダの値に設定される。<br />
crontabに以下を追加して、iso-2022-jp(JISコード)に設定。</p>
<pre>
CONTENT_TYPE=text/plain; charset=iso-2022-jp
</pre>
<p>コマンドの出力をnkfにパイプして、JISコードにする。</p>
<pre>
* * * * * コマンド | nkf -j
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/727.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Courier-IMAPで専用パスワード(userdb)を使う</title>
		<link>http://www.parlia.net/weblog/post/725.html/</link>
		<comments>http://www.parlia.net/weblog/post/725.html/#comments</comments>
		<pubDate>Thu, 28 May 2009 15:50:21 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=725</guid>
		<description><![CDATA[Courier-IMAPでUNIXパスワードを使わずに、専用パスワードで認証する方法。

userdbを使うように設定を変更する。

# vi /etc/courier/authdaemonrc

#authmodule [...]]]></description>
			<content:encoded><![CDATA[<p>Courier-IMAPでUNIXパスワードを使わずに、専用パスワードで認証する方法。<br />
<span id="more-725"></span><br />
userdbを使うように設定を変更する。</p>
<pre>
# vi /etc/courier/authdaemonrc

#authmodulelist="authpam"
authmodulelist="authuserdb"
</pre>
<p>userdbにユーザを追加。</p>
<pre>
# userdb ユーザ名 set home=/home/ユーザ名 mail=/home/ユーザ名/Maildir uid=ユーザUID gid=グループUID
</pre>
<p>IMAP用パスワードを設定する。</p>
<pre>
# userdbpw -md5 | userdb ユーザ名 set imappw
</pre>
<p>POP3用。</p>
<pre>
# userdbpw -md5 | userdb ユーザ名 set pop3pw
</pre>
<p>Courier-IMAPから読めるようにuserdb.datを作成する。</p>
<pre>
# makeuserdb
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/725.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文字コードの変換</title>
		<link>http://www.parlia.net/weblog/post/722.html/</link>
		<comments>http://www.parlia.net/weblog/post/722.html/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:11:40 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=722</guid>
		<description><![CDATA[Linuxでテキストファイルの文字コードを変換する方法のメモ。

nkfを使う
$ nkf [オプション] 入力ファイル &#62; 出力ファイル
オプション



-j (デフォルト)
JISコードを出力


-e
EU [...]]]></description>
			<content:encoded><![CDATA[<p>Linuxでテキストファイルの文字コードを変換する方法のメモ。<br />
<span id="more-722"></span></p>
<h2>nkfを使う</h2>
<pre>$ nkf [オプション] 入力ファイル &gt; 出力ファイル</pre>
<p>オプション</p>
<table border="0" cellspacing="1" cellpadding="1">
<tbody>
<tr>
<td>-j (デフォルト)</td>
<td>JISコードを出力</td>
</tr>
<tr>
<td>-e</td>
<td>EUCコードを出力</td>
</tr>
<tr>
<td>-s</td>
<td>Shift-JISコードを出力</td>
</tr>
<tr>
<td>-w</td>
<td>UTF-8コードを出力</td>
</tr>
<tr>
<td>-Lu</td>
<td>改行コードをunix形式(LF)に変換</td>
</tr>
<tr>
<td>-Lw</td>
<td>改行コードをwindows形式(CRLF)に変換</td>
</tr>
<tr>
<td>-Lm</td>
<td>改行コードをmac形式(CR)に変換</td>
</tr>
</tbody>
</table>
<p>UTF-8に変換。</p>
<pre>
$ nkf -w filename > filename.utf8
</pre>
<p>入力ファイルに上書きするときは、--overwrite オプションを使う。</p>
<pre>
$ nkf -w --overwrite filename
</pre>
<p>カレントディレクトリ以下のファイルを再帰的に変換する。(テキストファイル以外も変換されるので注意が必要)</p>
<pre>
$ find . -type f -exec nkf -w --overwrite {} \;
</pre>
<p>xargsを使う方法。</p>
<pre>
$ find . -type f | xargs nkf -w --overwrite
</pre>
<p>変換対象を「*.html」にする。</p>
<pre>
$ find . -name "*.html" | xargs nkf -w --overwrite
</pre>
<h2>perl(Jcode.pm)を使う</h2>
<pre>
$ perl -MJcode -i -lpe 'Jcode::convert(\$_, "文字コード")' 入力ファイル
</pre>
<p>再帰的に変換。</p>
<pre>
$ find . -type f | xargs perl -MJcode -i -lpe 'Jcode::convert(\$_, "utf8")'
$ find . -type f | xargs perl -MJcode -i -lpe 'Jcode::convert(\$_, "euc")'
</pre>
<h2>ファイル名の文字コード変換</h2>
<p>convmvを使う。カレントディレクトリにあるファイル名をEUC-JPからUTF-8に変換する場合。</p>
<pre>
$ convmv -f euc-jp -t utf8 *
</pre>
<p>上記のコマンドでは確認のみで実際に変換はしない。変換するときは、--notest オプションをつける。</p>
<pre>
$ convmv -f euc-jp -t utf8 * --notest
</pre>
<p>-r オプションで再帰的に変換できる。</p>
<pre>
$ convmv -r -f euc-jp -t utf8 * --notest
</pre>
<p>変換できる文字コードの確認。</p>
<pre>
$ convmv --list
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/722.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CUPSでプリントサーバを作る</title>
		<link>http://www.parlia.net/weblog/post/668.html/</link>
		<comments>http://www.parlia.net/weblog/post/668.html/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 05:20:39 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=668</guid>
		<description><![CDATA[Linux（Debian etch）に接続されたプリンタ（Canon BJ S700）をWindowsから使えるようにする。

usblpモジュールが必要。
# modprobe usblp
プリンタを接続して、認識する [...]]]></description>
			<content:encoded><![CDATA[<p>Linux（Debian etch）に接続されたプリンタ（Canon BJ S700）をWindowsから使えるようにする。<br />
<span id="more-668"></span></p>
<p>usblpモジュールが必要。</p>
<pre># modprobe usblp</pre>
<p>プリンタを接続して、認識するか確認する。</p>
<pre># dmesg

usb 1-1: new full speed USB device using ehci_platform and address 2
drivers/usb/class/usblp.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04A9 pid 0x106D</pre>
<h2>CUPSの設定</h2>
<p>cupsysをインストールする。</p>
<pre># apt-get install cupsys</pre>
<p>/etc/cups/cupsd.confを編集して、Web設定画面にLAN内からアクセスできるようにする。</p>
<pre># vi /etc/cups/cupsd.conf

Listen 631    <span style="color: #00ffff;"># 変更</span>

&lt;Location /&gt;
  Order allow,deny
  Allow localhost
  <span style="color: #00ffff;">Allow @LOCAL    # 追加</span>
&lt;/Location&gt;

&lt;Location /admin&gt;
  Encryption Required
  Order allow,deny
  Allow localhost
  <span style="color: #00ffff;">Allow @LOCAL    # 追加</span>
&lt;/Location&gt;

&lt;Location /admin/conf&gt;
  AuthType Basic
  Require user @SYSTEM
  Order allow,deny
  Allow localhost
  <span style="color: #00ffff;">Allow @LOCAL    # 追加</span>
&lt;/Location&gt;</pre>
<p>設定を反映させるために再起動しておく。</p>
<pre># /etc/init.d/cupsys restart</pre>
<h3>プリンタの設定</h3>
<p>Canon BJ S700の場合、foomatic-filters-ppdsに入っているドライバ（S700用は入ってないのでS630用のドライバを使う）を使うのでaptでインストール。</p>
<pre>
# apt-get install foomatic-filters-ppds
</pre>
<p>http://(サーバのIPアドレス):631/ にアクセスして「プリンタの追加」からプリンタの設定をする。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_1.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_1-600x343.png" alt="cups_1" title="cups_1" width="600" height="343" class="alignnone size-medium wp-image-682" /></a></p>
<p>プリンタの名前を設定する。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_2.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_2-600x225.png" alt="cups_2" title="cups_2" width="600" height="225" class="alignnone size-medium wp-image-683" /></a></p>
<p>デバイスを選択する。USB接続なので「USB #1」とした。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_3.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_3-600x162.png" alt="cups_3" title="cups_3" width="600" height="162" class="alignnone size-medium wp-image-684" /></a></p>
<p>ドライバの選択。S700がないので、「Canon S630」を選択した。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_4.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/cups_4-600x265.png" alt="cups_4" title="cups_4" width="600" height="265" class="alignnone size-medium wp-image-685" /></a></p>
<h3>Epson CC-570Lの場合</h3>
<p>CUPSのドライバの「EPSON New Stylus Photo Series CUPS v1.2 (en)」で印刷できたのでfoomatic-filters-ppdsは必要なかった。</p>
<h2>クライアントでの設定</h2>
<p>Windowsでコントロールパネルからプリンタを追加する。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_1.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_1.png" alt="printer_1" title="printer_1" width="586" height="362" class="alignnone size-full wp-image-686" /></a></p>
<p>「ネットワーク プリンタ、またはほかのコンピュータに接続されているプリンタ」を選択。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_2.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_2.png" alt="printer_2" title="printer_2" width="586" height="362" class="alignnone size-full wp-image-687" /></a></p>
<p>「インターネット上または自宅/会社のネットワーク上のプリンタに接続する」を選択して、URLに「http://(サーバのIPアドレス):631/printers/(CUPSに登録したプリンタ名)」を入力する。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_3.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_3.png" alt="printer_3" title="printer_3" width="586" height="362" class="alignnone size-full wp-image-688" /></a></p>
<p>ドライバを選択する。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_4.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_4.png" alt="printer_4" title="printer_4" width="514" height="300" class="alignnone size-full wp-image-689" /></a></p>
<p>通常使うプリンタに設定する。<br />
<a href="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_5.png" rel="lightbox[668]"><img src="http://www.parlia.net/weblog/wp-content/uploads/2009/02/printer_5.png" alt="printer_5" title="printer_5" width="586" height="362" class="alignnone size-full wp-image-690" /></a></p>
<p>設定が完了したら、印刷テストをしておく。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/668.html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IPnutsでCF起動のルータを作る</title>
		<link>http://www.parlia.net/weblog/post/610.html/</link>
		<comments>http://www.parlia.net/weblog/post/610.html/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 15:25:35 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=610</guid>
		<description><![CDATA[IPnutsはルータやファイアウォールに特化したLinuxディストリビューション。
IPnuts 4.0r3 CD-ROM版(ダウンロードするのにエキストラメンバーキーを購入する必要がある)を使って、省電力化のためにコン [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ipnuts.net/">IPnuts</a>はルータやファイアウォールに特化したLinuxディストリビューション。<br />
IPnuts 4.0r3 CD-ROM版(ダウンロードするのにエキストラメンバーキーを購入する必要がある)を使って、省電力化のためにコンパクトフラッシュ(以下CF)から起動するようにする。<br />
<span id="more-610"></span><br />
ルータにするPCの構成。</p>
<table border="0" cellspacing="1" cellpadding="1">
<tbody>
<tr>
<td>マザーボード</td>
<td>VIA EPIA 5000</td>
</tr>
<tr>
<td>NIC1</td>
<td>オンボード(VT6103)</td>
</tr>
<tr>
<td>NIC2</td>
<td>ETX-PCI(RTL8139)</td>
</tr>
<tr>
<td>CF</td>
<td>A-DATA Speedy CF (CF-IDE変換基板で接続)</td>
</tr>
</tbody>
</table>
<h2>IPnutsのインストール</h2>
<h3>CFのフォーマット</h3>
<p>CFをFAT16でフォーマットする。アクティブにして、パーティションのサイズを512MB以下にする。</p>
<h3>パッケージのコピー</h3>
<p>IPnutsのCDのpackagesフォルダ以下のファイルをCFにコピー。アップデートしておくなら、<br />
<a href="http://www.ipnuts.net/IPnuts/4_0_r3/updates/">http://www.ipnuts.net/IPnuts/4_0_r3/updates/</a> のファイルもコピーする。</p>
<h3>syslinuxのインストール</h3>
<p>CFをルータにするPCに接続して、IPnutsのCDで起動。以下のコマンドを実行する。</p>
<pre>
syslinux -s /dev/hda1
</pre>
<h2>初期設定</h2>
<p>CFで起動して初期設定をする。</p>
<h3>NICの認識</h3>
<p>ETX-PCI(RTL8139)は8139tooでデフォルトで認識された。</p>
<p>オンボードNIC(VT6103)を認識させる。</p>
<pre>
# insmod via-rhine.o
</pre>
<p>確認</p>
<pre>
# ip link show
</pre>
<p>起動時にモジュールを読み込むように/etc/modulesに「via-rhine」を追加する。</p>
<pre>
# vi /etc/modules

8390
mii
ne2k-pci
8139too
e100
via-rhine
</pre>
<h3>rootのパスワードを変更</h3>
<p>デフォルトではパスワードなしなので、設定しておく。</p>
<pre>
# passwd
</pre>
<h3>設定を保存</h3>
<pre>
# save_conf
</pre>
<h2>Web設定画面で設定</h2>
<p>http://192.168.0.1/ にアクセスして設定する。(デフォルトユーザ: webadmin パスワード: free)</p>
<h2>その他の設定</h2>
<h3>USBメモリをリムーバブルディスクとして認識させる</h3>
<p>デフォルトではリムーバブルディスクはフロッピーだが、USBメモリを使うように、/etc/default/rcSを編集して「REMOVABLE=/dev/sda1」とする。</p>
<pre>
# vi /etc/default/rcS

REMOVABLE=/dev/sda1
</pre>
<h3>シェルをbashにする</h3>
<p>デフォルトのシェルをashからbashに変更する。<br />
<a href="http://sourceforge.jp/projects/ipnuts-ext/">http://sourceforge.jp/projects/ipnuts-ext/</a> のbash.lrpをUSBメモリに保存する。Web設定画面の[ブートディスク]からbash.lrpをブートディスクにコピーして有効化する。</p>
<h3>SSHでrootのログインを禁止する</h3>
<p>一般ユーザを追加。</p>
<pre>
# adduser user1
</pre>
<p>rootのログインを禁止する。</p>
<pre>
# vi /etc/ssh/sshd_config

PermitRootLogin no
</pre>
<h3>telnetを無効にする</h3>
<p>/etc/inetd.conf を編集してtelnetを無効にする。</p>
<pre>
# vi /etc/inetd.conf

#telnet         stream  tcp     nowait  root.telnetd    /usr/sbin/tcpd  /usr/sbin/in.telnetd
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/610.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USBメモリからブートするKNOPPIXの作成</title>
		<link>http://www.parlia.net/weblog/post/590.html/</link>
		<comments>http://www.parlia.net/weblog/post/590.html/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 16:08:08 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=590</guid>
		<description><![CDATA[KNOPPIXをUSBメモリにインストールしてブートできるようにする。
mkbootdevを使う方法もあるが、一度CDから起動する必要があるので、今回はすべてWindows上で作成する。

必要なもの

KNOPPIX  [...]]]></description>
			<content:encoded><![CDATA[<p>KNOPPIXをUSBメモリにインストールしてブートできるようにする。<br />
mkbootdevを使う方法もあるが、一度CDから起動する必要があるので、今回はすべてWindows上で作成する。<br />
<span id="more-590"></span></p>
<h3>必要なもの</h3>
<ul>
<li><a href="http://www.rcis.aist.go.jp/project/knoppix/">KNOPPIX</a> 5.3.1 CD版(knoppix_v5.3.1CD_20080326-20080520-AC.iso)</li>
<li><a href="http://www.kernel.org/pub/linux/utils/boot/syslinux/">SYSLINUX</a> - FAT上のLinuxをブートできるブートローダ(syslinux-3.72を使用)</li>
<li>DAEMON Toolsなど - CDイメージをマウントできるソフト</li>
<li>USBメモリ - 今回はJetFlash 150(TS1GJF150)を使用</li>
</ul>
<h2>USBメモリにKNOPPIXをインストール</h2>
<ol>
<li>USBメモリをFAT32でフォーマットする。</li>
<li>KNOPPIXのCDイメージをマウントする。(マウントしたドライブを「I」とする)</li>
<li>I:\KNOPPIX をフォルダごとUSBメモリにコピーする。</li>
<li>I:\boot\isolinux 以下のファイルをすべてUSBメモリにコピーする。</li>
<li>USBメモリ内のisolinux.cfgをsyslinux.cfgにリネームする。</li>
<li>SYSLINUXを実行する。(SYSLINUXを展開したフォルダをE:\syslinuxとする)<br />
「ファイル名を指定して実行」または「コマンドプロンプト」で以下を実行。(最後のf:はUSBメモリのドライブ)</p>
<pre>
E:\syslinux\win32\syslinux.exe -am f:
</pre>
</li>
</ol>
<h2>USBメモリからブートする</h2>
<p>BIOSの設定を変更してUSBメモリの起動順を上げる必要がある。それ以外にもマザーボードによっては設定変更の必要があった。</p>
<ul>
<li>Intel DG33FBC<br />
BIOSの設定で「USB Mass Storage Emulation Type」を「All Fixed Disc」に変更。</li>
<li>VIA EPIA 5000<br />
JetFlash 150 に付属の mFormat Utility でUSBメモリをフォーマットするとブートできた。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/590.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HotSaNICのrrdファイルをtmpfsに記録する</title>
		<link>http://www.parlia.net/weblog/post/557.html/</link>
		<comments>http://www.parlia.net/weblog/post/557.html/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 15:12:10 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=557</guid>
		<description><![CDATA[tmpfsは仮想メモリに全ファイルを保持するファイルシステム。頻繁にアクセスするファイルをtmpfsに置けば、読み書きが速くなり、HDDの負荷を減らすこともできる。
HotSaNICは取得したデータを保存するために、rr [...]]]></description>
			<content:encoded><![CDATA[<p>tmpfsは仮想メモリに全ファイルを保持するファイルシステム。頻繁にアクセスするファイルをtmpfsに置けば、読み書きが速くなり、HDDの負荷を減らすこともできる。</p>
<p>HotSaNICは取得したデータを保存するために、rrdファイルを頻繁に更新する。そこでrrdファイルをtmpfsに保存して、HDDへのアクセスを減らすようにする。<br />
<span id="more-557"></span></p>
<h2>tmpfsのマウント</h2>
<p>/tmpにマウントする。サイズは512MBを上限とする。</p>
<pre># mount tmpfs /tmp -t tmpfs -o size=512m</pre>
<p>fstabに追加して起動時にマウントするようにする。</p>
<pre># vi /etc/fstab

tmpfs         /tmp      tmpfs   defaults,size=512m 0 0</pre>
<h2>HotSaNICの設定</h2>
<p>HotSaNICが生成するrrdファイルは各modulesディレクトリのrrdディレクトリに保存される。rrdディレクトリをtmpfsへのシンボリックリンクとして、シャットダウン時にrrd_bakへコピー、起動時にrrdディレクトリへコピーするようにする。</p>
<p>rrdディレクトリをrrd_bakにリネーム。</p>
<pre># cd /usr/local/HotSaNIC
# for mods in ./modules/* ; do mv $mods/rrd $mods/rrd_bak ; done</pre>
<p>rrdファイルをコピーするスクリプトを作成する。</p>
<pre># vi copyrrd.sh

#!/bin/bash

RRDDIR=/tmp/HotSaNIC

cd "/usr/local/HotSaNIC"

. ./settings

case $1 in
  start)
    for mods in $RUN
    do
      if [ ! -d $RRDDIR/$mods ]; then
        mkdir -p $RRDDIR/$mods
      fi
      if [ ! -e ./modules/$mods/rrd ]; then
        ln -s $RRDDIR/$mods ./modules/$mods/rrd
      fi
      cp -f ./modules/$mods/rrd_bak/*.rrd ./modules/$mods/rrd/
    done
  ;;
  stop)
    for mods in $RUN
    do
      if [ ! -d ./modules/$mods/rrd_bak ]; then
        mkdir ./modules/$mods/rrd_bak
      fi
      cp -f ./modules/$mods/rrd/*.rrd ./modules/$mods/rrd_bak/
    done
  ;;
  restart)
    $0 stop
    $0 start
  ;;
esac</pre>
<p>rrdgraphを修正してcopyrrd.shを実行するようにする。</p>
<pre># vi rrdgraph

case $1 in
  start)
    <span style="color: #00ffff;">./copyrrd.sh start</span>
    echo "Starting rrdtimer..."
    ./rrdtimer.pl Dp
    ;;
  stop)
    echo "Stopping rrdtimer..."
    if [ -e "$PIDFILE" ]; then
      PID=`cat "$PIDFILE"`
      for nn in $PID ; do kill $nn; done
    else
      echo "pid-file not found, rrdtimer not running?!"
      fi
    ./clearall CLEAR_COUNTERS
    <span style="color: #00ffff;">./copyrrd.sh stop</span>
    ;;</pre>
<p>rrdgraphはそのままinitスクリプトとして使えるが、setup.plを実行すると書き換えられるので、別名でコピーして/etc/init.dにシンボリックリンクを作成。</p>
<pre>
# cp rrdgraph rrdgraph.init
# ln -s /usr/local/HotSaNIC/rrdgraph.init /etc/init.d/
# update-rc.d rrdgraph.init defaults
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/557.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
