tag:blogger.com,1999:blog-17017610800038775982024-02-21T06:15:32.061+09:00LinuxユーザのためのチップスLinuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.comBlogger137125tag:blogger.com,1999:blog-1701761080003877598.post-33900790442641376042010-04-06T14:32:00.004+09:002010-04-06T14:53:32.844+09:00pdfファイルの管理<p>大量にpdfファイルを保存していると、どこに置いたか忘れたりして必要なときに見つけれないことがある。そこで、pdf ファイルをテキストに変換して、grep で検索する方法をまとめる。</p>
<p>
はじめに、pdf用のディレクトリ(mypdf)を作成し、その下に項目毎にpdfファイルを整理しておくことにする。下の例では、red, blue, yellow の3つのディレクトリを作成している。私は作成した人の名前で整理しているが、場合によって異なってくると思う。
</p>
<pre class="screen">
$ cd
$ mkdir mypdf
$ cd mypdf
$ mkdir red blue yellow
</pre>
<p>次に、作成したディレクトリの中にpdfファイルを溜め込んでいく。そのあと、あらかじめ作成しておいたディレクトリtextallに、pdfファイルをテキスト化したものを入れる。以下の方法は名前の衝突など考慮していないシンプルな方法なので、大切なファイルを誤って消してしまわないように注意すること。</p>
<pre class="screen">
$ mkdir textall
$ ls
red blue yellow textall
$ find . -name \*.pdf -exec pdftotext {} \;
$ find . -name \*.txt -exec mv {} textall/ \;
</pre>
<p>テキストから検索する。以下の例は、keywordに合致する箇所の前後1行を抜き出して、それが含まれているファイル名を添えて表示させている。</p>
<pre class="screen">
$ grep -C1 -H 'keyword' textall/*.txt | less
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-12836598857633342442010-01-03T18:55:00.002+09:002010-01-03T20:06:13.800+09:00mysqlのセキュリティ設定<p>mysqlサーバをインストールするときに注意すべきセキュリティのチェックポイントをまとめる(Mysql 5.1のリファレンスマニュアルなどを参考にした)。</p><ol><li>(初期状態で既にユーザが存在するので)パスワードが登録されていない全ユーザにパスワードを登録する。</li><li>パスワードを入力するときは、出きるだけコマンド中に入れるのではなく、pオプションを使う。</li><li>コマンド履歴は~/.mysql_hisotryに保存されているので、定期的に削除する。例えば、~/.bash_logoutにログアウトする度にこのファイルを削除するように記述する。
</li><li>匿名ユーザは削除する。</li><li>特権を与えたら、flash pribileges;を実行するのを忘れない。</li><li>mysqlサーバを実行するユーザのログインシェルを/sbin/nologinに変更する。また所属グループもrootやwheelなどになっていないことを確認する。rootで実行しないこと。</li><li>テーブルへのシンボリック リンクをサポートしない。(これは <code class="option">--skip-symbolic-links</code> オプションで無効にできる)。</li><li><span><strong class="command"></strong></span>mysqlサーバ実行する Unix アカウントだけに、データベース ディレクトリ(--datadir=/var/lib/mysqlなど)の読み取り権限と書き込み権限があることを確認する。 </li></ol>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-21943452202487068042010-01-03T03:36:00.004+09:002010-01-03T03:41:56.252+09:00root宛メールの転送<p>root宛のメールを特定の一般ユーザ(hoge)に転送する設定</p>
<p>/etc/aliasに以下のように記述する。</p>
<pre class="screen">
root: hoge
</pre>
<p>設定を反映させる。</p>
<pre class="screen">
# newaliases
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-29955171888296658312010-01-02T21:17:00.003+09:002010-01-02T21:23:16.536+09:00パケット転送を停止する。<p>サーバをルータなどとして使っていない場合、パケット転送は不要なので(もし有効にしていたら)停止する。そのために、起動時に読み込まれるスクリプト/etc/rc.d/rc.localに以下を記述する。</p>
<pre class="screen">
echo -n "Disabling packet forwarding..."
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "done"
</pre>
<p>もし有効にしたいならば、0を1にする。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-85540817184434931462010-01-02T21:04:00.001+09:002010-01-02T21:06:13.259+09:00ファイアーフォールの設定を確認する<p>すべてのチェインを確認するには</p>
<pre class="screen">
# iptables -L
</pre>
<p>個別のチェインを確認するには(例:OUTPUT)</p>
<pre class="screen">
# iptables -L OUTPUT
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-43580681831669158922010-01-02T21:00:00.005+09:002010-01-02T21:17:30.086+09:00リモートサイトからのpingに応答しない。<pre class="screen">
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-470038687313243952010-01-02T20:26:00.002+09:002010-01-02T20:34:21.409+09:00送信元アドレス検証<p>リモートホストがパケットを偽装して、ローカルホストになりすますのを防ぐには(CentOS)</p>
<p>/etc/sysctl.confのnet.ipv4.conf.all.rp_filterの値が1になっていれば、機能が有効になっているが、そうでないならば、以下の設定を追加する(デフォルトでは有効になっていた)。</p>
<p>システム起動時に読み込まれるファイル/etc/rc.d/rc.localに以下を記述する。</p>
<pre class="screen">
echo -n "Enabling source address verification..."
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo "done"
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-19346595028262161062009-11-30T01:35:00.002+09:002009-11-30T02:04:09.787+09:00centOSインストール(再び)<p>再び、CentOSをインストールすることになった。毎回引っかかるところをメモしておく。</p>
<p>SATAのHDに換装し(玄人指向の拡張カード付きのHD)、SATA用の電源コードがないと勘違いして、わざわざIDE-SATA変換ケーブル購入してしまった。よく見てみると、ThinkCentre A50には電源コードは付いていた。</p>
<p>別の作業用PCでネットからcentOSのDVDisoイメージをダウンロード。この作業用PCはwebサーバとして使える状態とする。</p>
<p>web公開用の適当なディレクトリにisoイメージをマウントする。</p>
<pre class="screen">
# su -
# mkdir -p /var/www/html/repos
# mount -t iso9660 -o loop CentOS-5.4-i386-bin-DVD.iso /var/www/html/repos/
</pre>
<p>マウントしたイメージの中から起動イメージ/var/www/html/repos/images/boot.isoを手元のメディアに焼く。いつものごとく、DVDしか持っていないので、DVDに焼いた。しかし、これをA50に入れても使えない(DVDドライブではないから)。手持ちの外付けDVDドライブを接続して、この起動イメージを焼いたDVDから起動する。</p>
<p>起動するときは、A50のBIOS設定で、起動デバイスの優先順位をあらかじめ決めておく。IDEのHDを取り除いて、代わりにSATAのHDを入れるので、HardDisk0をdiableし、HardDisk1をenableしておく。そして、DVD/CD-Driveをもっとも優先順位を高くしておく。</p>
<p>ちなみに、なぜか、DVDドライブで起動はできても、このドライブからOSをインストールすることはできなかった。したがって、別の作業用PCをwebサーバにし、レポジトリを公開して、http経由でインストールする。このとき、作業用PCのファイアーウォールの設定を編集し、外部からHTTPアクセスを許可する。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-83241091644634060692009-10-17T19:30:00.003+09:002009-10-17T19:35:37.927+09:00改行コードの変換<p>WindowsからUnixへの変換</p>
<pre class="screen">
$ tr -d \\r < win.txt > unix.txt
</pre>
<p>UnixからWindowsへの変換</p>
<pre class="screen">
$ perl -p -e 's/\n/\r\n/' < unix.txt > win.txt
</pre>
<p>MacからUnixへの変換</p>
<pre class="screen">
$ tr \\r \\n < mac.txt > unix.txt
</pre>
<p>参考URL:<a href="http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/crlf.html">改行コードの変換<</a>/p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com1tag:blogger.com,1999:blog-1701761080003877598.post-28005491214123442572009-10-17T02:07:00.001+09:002009-10-18T11:57:03.542+09:00lprコマンドのちょっとした使い方<p>landscapeで印刷</p>
<pre class="screen">
$ lpr -o landscape test.pdf
</pre>
<p>portraitで印刷</p>
<pre class="screen">
$ lpr -o portrait test.pdf
</pre>
<p>test.psの1ページ目だけを印刷</p>
<pre class="screen">
$ psselect -p1 test.ps | lpr
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-67379841185771212512009-10-08T21:50:00.003+09:002009-10-08T21:58:27.752+09:00文章を枠で囲む(latex)<p>latexで、文章を枠で囲む方法をまとめる。ascmac.styというパッケージが必要。</p>
<pre class="screen">
\usepackage{ascmac} <---プリアンブルに記述
</pre>
<p>単純に枠で囲むだけならば、次のようにscreenを使う。</p>
<pre class="screen">
\begin{screen}
あいうえお <---- 枠で囲む文章をここに記入
\end{screen}
</pre>
<p>枠にタイトルを付けるときは、次のようにitemboxを使う。</p>
<pre class="screen">
\begin{itembox}[l]{Title} <---タイトルの表示位置(左)とタイトル名(Title)を記入
あいうえお <---- 枠で囲む文章をここに記入
\end{itembox}
</pre>
<p>枠に影を付けるときは、次のようにshadeboxを使う。</p>
<pre class="screen">
\begin{shadebox}
あいうえお <---- 枠で囲む文章をここに記入
\end{shadebox}
</pre>
<p>ルーズリーフような枠を付けるときは、次のようにboxnoteを使う。</p>
<pre class="screen">
\begin{boxnote}
あいうえお <---- 枠で囲む文章をここに記入
\end{boxnote}
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-76052428787714866872009-10-07T22:52:00.002+09:002009-10-07T22:55:02.181+09:00latexで日本語文字化け<p>Ubuntu 9.04で、日本語でlatexの文書を作成したら文字化けした。以前、作成したときは問題なかったので、どうしたものかと思ったが、解決した。原因は、ファイルの文字コードがUTF-8になっていたことだった。EUC-JPに変換してコンパイルして、xdviで表示させたら、問題なく日本語が表示された。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-47226942099060208102009-09-28T22:26:00.001+09:002009-09-28T22:30:03.588+09:00ワークグループ名の変更<p>Windowsでワークグループ名を変更できなかった。コントロールパネル→システム→コンピュータ名→変更、できるはずなのだが、ワークグループ名の欄が編集できなくなっていた。調べてみると、ローカルエリア接続→プロパティ、でWindowsネットワーク用クライアントをインストールすると解決した。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-38597649266258135642009-09-24T23:05:00.003+09:002009-09-24T23:11:35.112+09:00FTP over HTTP Proxy<p>本記事では、lftpというFTPクライアントで、HTTP Proxyのsquidを経由でファイル転送をする方法を説明します。GUIのFTPクライアントでは、FileZillaがHTTP Proxy経由でファイル転送できたと記憶しています。</p>
<p>まず、プロキシを設定します。HTTP_PROXY環境変数をエクスポートしていたのですが、私の環境ではこれは反映されていませんでしたから、lftpの設定ファイルに以下の記述しました。この設定ファイルは~/.lftp直下にrcという名前で作成します。</p>
<pre class="screen">
set hftp:proxy プロキシサーバ
</pre>
<p>次に、以下のコマンドを打ちます。</p>
<pre class="screen">
$ lftp -d -u FTPサーバのアカウント名 hftp://FTPサーバ
</pre>
<p>後は、パスワードに答えてログインできると思います。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-69315416003309307212009-09-24T11:49:00.008+09:002009-09-24T20:04:20.628+09:00WebサーバでDigeset認証をつかってアクセス制御する。<p>本記事では、Webサイトのとあるディレクトリ以下をパスワードで保護したいときに、認証によりアクセス制御する方法をまとめる。</p>
<p>認証方式にはいろいろある。おそらく最も基本的なのはBasic認証だが、パスワードを平文のまま送信するので、盗聴の危険性がある。そこで、今回は、MD5でハッシュ化してパスワードとユーザ名を送信するDigest認証を使ったアクセス制御をまとめる。参考URL:「<a href="http://emaame.com/20060309.html">Digest 認証の仕組み</a>」。</p>
<p>まず、Webサーバで公開しているディレクトリで、パスワードで保護したいディレクトリを作成する(既にある場合はもちろん作成不要)。ここでは、ユーザ(hoge)のpublic_html以下をWebに公開しており、その直下のprivateをパスワード保護する場合を説明する。</p>
<pre class="screen">
$ cd
$ pwd
$ /home/hoge
$ cd public_html
$ mkdir private
</pre>
<p>次に、apacheの設定ファイル/etc/httpd/conf/httpd.confでDigest認証をどこそこで利用するといった設定を記述する。保護したいディレクトリ毎にhtaccessファイルを配置してもよいが、大元のhttpd.confに記述しておくの良いとどこかに書いてあった(保守性?)。</p>
<pre class="screen">
<Directory /home/*/public_html/private> <--- 念のためhogeユーザだけでなく任意のユーザに対してルールを設定
AuthType Digest
AuthName "Secret Zone"
AuthDigestDomain /private/
AuthUserFile /etc/httpd/conf/.htdigest <--- 後で作成するパスワードファイル
Require user ユーザ名
</Directory>
</pre>
<p>次に、パスワードファイルを作成する。既にパスワードファイルがある場合は、cオプションは不要。cオプションを付けないと、新規ユーザの情報を書き込むことになる。レルムは、httpd.confでAuthNameに設定した文字列"Secret Zone"を指定する。パスワードファイル名も、上の設定ファイルで指定した名前とする。</p>
<pre class="screen">
# cd /etc/httpd/conf
# htdigest -c パスワードファイル レルム ユーザー名
</pre>
<p>最後に、apacheをリロードする。</p>
<pre class="screen">
#/etc/rc.d/init.d/httpd reload
</pre>
<p>試しに動かしてみる。うまく動かないときは、AllowOverride all になっていないか確認する。</p>
<p>参考URL:<a href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/699apachedigest.html">Apacheでユーザー認証を行うには(Digest認証編)</a>、<a href="http://www.atmarkit.co.jp/flinux/special/webdav02/webdav02b.html">WebDAV時代のセキュリティ対策[後編]</a></p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-35611103747365468132009-09-22T23:54:00.004+09:002009-09-23T00:25:12.594+09:00プロバイダのメールサーバにメールをリレーしてもらう。<p>本記事では、自宅のメールサーバからポストしたメールを、プロバイダのメールサーバにリレーしてもらうための方法をまとめる。最近は、スパムメールが横行しているため、メールサーバはSASL認証などによりアクセス制御している。以下の説明では、自宅のメールサーバ=postfix、プロバイダ=eoと仮定し、メールサーバの(SASL認証以外の)設定は済んでいるものとする。</p>
<h4>設定方法</h4>
<p>まず、/etc/postfix/main.cfに利用するプロバイダのリレーホストを記述する。</p>
<pre class="screen">
relayhost = smtpauth.eonet.ne.jp:587
</pre>
<p>次に、同じ設定ファイルでSASL認証のための設定を記述する。</p>
<pre class="screen">
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
</pre>
<p>ここで、smtp_sasl_...となっていることに注意する。というのは、smtpd_sasl_...という設定パラメータも存在するから。前者は、クライアントとして(サーバの提供する)SASL認証を利用する場合の設定パラメータを意味し、後者は、サーバとしてSASL認証を提供する場合の設定パラメータを意味する。</p>
<p>次に、SASLパスワードを記述したパスワードファイルを作成する。以下で作成するパスワードファイルは、/etc/postfix/sasl_passwdとする。</p>
<pre class="screen">
smtpauth.eonet.ne.jp:587 アカウント%キーワード.eonet.ne.jp:パスワード
</pre>
<p>作成したらpostmapを実行し、ルックアップでーブルを作成し、パスワードファイルを消去する。</p>
<pre class="screen">
# pwd
/etc/postfix
# postmap sasl_passwd
# rm sasl_passwd
</pre>
<p>最後に、postfixをリロードしておく。</p>
<pre class="screen">
# /etc/rc.d/init.d/postfix reload
</pre>
<p>
参考URL:<a href="http://trialpc.net/blog/2007/03/postfixsmtpsasl.php">PostfixをSMTPクライアントとしてSASL認証</a></p>
<p><a href="http://www.rarul.com/mt/log/2007_01.html#000685">Postfix+saslでOP25B対策</a></p>
<p><a href="http://aerith.mydns.jp/regrets/2006/07/vine32postfixsmtp.html">Vine3.2のPostfixでSMTP認証</a></p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-37797914838811999192009-09-14T22:01:00.005+09:002009-09-14T22:48:58.040+09:00今更ながらchangelogメモ<p>本記事では、普段のメモを効率的に記録、管理、活用するための方法で、changelog+chalowを使う方法をまとめる。新しいネタではないが、新しい環境でセットアップすることがあったので、そのときに調べたことなどをまとめる。</p>
<h4>ChangeLogの概要</h4>
<p>ソフトウェア開発で変更履歴(changelog)を1つのファイルにまとめて書いておくことがある。emacsでは、changelogを簡単に書くための機能が備わっている。Ctrl-x4aでchangelogのバッファがオープンされ、すぐに新規事項を記入できるようになっている。</p>
<p>デフォルトでは、ホームディレクトリに下にChangeLogというファイルが作成され、追加したメモはそこに蓄えられていく。1つのファイルに、日記やTodoリスト、覚書などすべてのメモが蓄えられるので、管理が楽である。普段からemacsを使う人には、思いついた側から即座にメモることができる。メモした内容を検索するための機能もemacsには備わっている。詳細は、<a href="http://0xcc.net/unimag/1/">横着プログラミング第1回参照</a>。</p>
<h4>Chalowについて</h4>
<p>chalowは、changelogをhtmlに変換するためのスクリプトである。aptでインストールできる。apt-cacheでパッケージを調べてみると以下の通り。</p>
<pre id="screen">
# apt-cache search chalow
chalow - weblog tool that converts ChangeLog to HTML
</pre>
<p>インストールするには、お決まりのapt-getで次の通り。</p>
<pre id="screen">
# apt-get install chalow
</pre>
<p>chalowの使い方は、helpによると次の通り。詳しくは、<a href="http://chalow.org/">chalow on the web</a>を参照。</p>
<pre id="screen">
$ chalow
usage: chalow [options] <file> [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
</pre>
<p>基本的には、変換するChangeLogの場所を指定して、それをhtmlに変換したものを出力するディレクトリ、および、変換時に使用する設定ファイルを指定している。以下に、例を示す。</p>
<pre class="screen">
$chalow -o ~/html -c ~/etc/cl.conf ~/ChangeLog
</pre>
<p>ちなみに、cl.confは以下の場所にある(と思う)サンプル設定ファイルcl.conf.gzを解凍し、それを自分用にカスタマイズして使っている。</p>
<pre class="screen">
# 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が得られる。
</pre>
<p>基本的にカスタマイズした箇所は、README(<a href="http://chalow.org/README">ChangeLog on the web</a>参照)に書かれていた以下の箇所ぐらい。</p>
<pre class="screen">
※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 を囲む。
</pre>
<p>tDiaryのテーマが使えるらしいので、テーマを<a href="http://www.tdiary.org/">tDiary.org</a>からダウンロードする。</p>
<pre class="screen">
$ 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
などなど
</pre>
<p>大量のテーマが入っているので、自分の好きなものを選んで、そのフォルダ毎webサーバにアップロードする。</p>
<p>そして、先ほどのcl.confに書き込む。例えば、webサーバ上のcssディレクトリにkaeruディレクトリを置いた場合は次のようにする。</p>
<pre class="screen">
# ----------------------
# CSS ファイル
#$css_file = "diary.css";
$css_file = "css/kaeru/kaeru.css"; <---相対URLで指定しているが、ここは各自の環境に合わせて適宜変更。
</pre>
<p>後は、chalowでhtmlに変換すれば良い。上の例では、~/html以下にファイル一式が生成されるので、これら一式をWebサーバにアップする。</p>
<p>以下のようなスクリプトを書いておくと、次からは楽で良い。</p>
<pre class="screen">
#!/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"
</pre>
<p>私は、ssh接続の可能なwebサーバを利用しているので、rsync (over ssh)を使って~/htmlディレクトリ以下をwebサーバ上のディレクトリと同期させるスクリプトも使って、コマンド1つで簡単にアップロードも済ませている。プライベートな内容も含まれるので、htaccessなどによりアクセス制御をしている。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-41539178971800933782009-09-04T22:17:00.014+09:002009-09-05T02:05:29.834+09:00(第1回)asymptoteを使ってみる。インストール編<p>「asymptote」というベクタグラフィックス記述言語を試しに使ってみたので、まとめてみる。</p>
<h3>ことの始まり</h3>
<p>latex文書中に、球面や放物線などの数学的な図形を挿入するための図形描画ソフトで、以下のようなイメージにあうものを探していた。</p>
<ul>
<li>ベクター画像として描画。</li>
<li>手書きでない。</li>
<li>手軽に描画できる。</li>
</ul>
<p>ネットで調べると、例えば<a href="http://oku.edu.mie-u.ac.jp/%7Eokumura/texwiki/">TexWiki</a>(の「関連ツールなど」のところ)に、かなり詳しい情報がまとめられていた。latex文書に挿入する画像は、「tgif」や「Inkscape」で作成することが多かったのだけど、手書きで描画したくなかったので却下した。また、「gnuplot」や「OpenGL」など他の選択肢もあったのだけど、今回はasymptoteが合ってそうなので、試しに使ってみた。</p>
<p>Asymptoteは、<a href="http://asymptote.sourceforge.net/">sourceforge</a>や<a href="http://directory.fsf.org/project/Asymptote/">gnu</a>などのサイトに詳しい説明が書いてある。</p>
<h3>aptでインストール</h3>
<p>ubuntu 9.04へのインストールは極めて簡単で、以下のようにコマンドラインからapt-getで入れるか、synapticを使ってインストールします。ちなみに、ポストスクリプトビューアの「gv」が入っていないならば、これもインストールしておきます(他のポストスクリプトビューアでも良いのかもしれないけれど、試していないので不明)。</p>
<pre class="screen">
# apt-get install asymptote
</pre>
<p style="color: rgb(255, 0, 0);">インストールして少し使ってみたら、3次元図形を描画するときにエラーが出てうまくいかないことが分かった(理由不明)。インストールされていたバージョンは1.43-1だったので、最新のに比べて古いようだ。よって、アンインストールして、最新のソースをダウンロードし、インストールすることにした。</p>
<pre class="screen">
# apt-get remove asymptote
</pre>
<h3>ソースからインストール</h3>
<a href="http://asymptote.sourceforge.net/">公式サイト</a>から最新のソースファイルをダウンロードする。私は、バージョン1.85のもの(asymptote-1.85.src.tgz)を入れた。Document->Installation->2.6 Compiling from UNIX sourceに書いてあるように、<a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">garbage collector</a>が必要なようです。
<pre class="screen">
# 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
</pre>
<p>最初にapt-getでインストールしたときに、実行ファイルasyが/usr/binにあったけど、ソースからインストールした方は/usr/local/binに配置される。これを通知するためにリハッシュしておく。</p>
<pre class="screen">
# hash -r
</pre>
<h3>動作確認</h3>
<p>詳しい使い方は、sourceforgeにある<a href="http://asymptote.sourceforge.net/">公式サイト</a>にDocumentが置いてあります。また、<a href="http://www.artofproblemsolving.com/Wiki/index.php/Asymptote_(Vector_Graphics_Language)">wiki</a>もあって、分かりやすく書かれています。まず、次のようにターミナルからasyで起動します。後は、描画コマンドを順次発行して、対話式に描画していきます。以下では、原点から(100,100)に向けて線を引くように命令しています。</p>
<pre class="screen">
$ asy
Welcome to Asymptote version 1.43 (to view the manual, type help)
> draw((0,0)--(100,100));
</pre>
<p>すると、gvが起動して、きちんと線が描かれていることが確認されました。</p>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXO2YL_XEzwW4xqVdu0ACRSoKJKpNq8CSMvj9poTjLh1AZvCi4YmJCOjwEO3-ujD3Y8doMVaH4lqWMVuF6RWgKrCaS_1StmSwsaf0tC-_f8FJR-Uerj6sq6bQu4TSSjaE7x1azKDS8U00/s1600-h/line.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 282px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXO2YL_XEzwW4xqVdu0ACRSoKJKpNq8CSMvj9poTjLh1AZvCi4YmJCOjwEO3-ujD3Y8doMVaH4lqWMVuF6RWgKrCaS_1StmSwsaf0tC-_f8FJR-Uerj6sq6bQu4TSSjaE7x1azKDS8U00/s320/line.png" alt="" id="BLOGGER_PHOTO_ID_5377613551361378546" border="0" /></a>
<p>対話モードを終了するには、次のようにする。</p>
<pre class="screen">
> quit
$
</pre>
<p>また、graph3を使って3次元図形を描画するコードを動かしてみました。このコードは、Documentに書いてあるものを使っています。エディタで、次のコードを書いてtest.asyで保存します。</p>
<pre class="screen">
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);
</pre>
<p>そして、実行して、epsファイルが生成されていることを確認します。</p>
<pre class="screen">
$ asy test.asy
$ ls
test.asy test.eps
$ gv test.eps &
</pre>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGclagmEXFxGGei4aqLRs-nH6MaXmiLzrMYR7iVKEKRD9aDP8uzajVoIEv7zlN-QzSZDdS6DTOf_brJ-aTi0BQvFGjEHNi7r09OlZbKPfGhLMCrWxMMA35uoNn6RjtRA2IBBCxeiM22A/s1600-h/test.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 233px; height: 201px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGclagmEXFxGGei4aqLRs-nH6MaXmiLzrMYR7iVKEKRD9aDP8uzajVoIEv7zlN-QzSZDdS6DTOf_brJ-aTi0BQvFGjEHNi7r09OlZbKPfGhLMCrWxMMA35uoNn6RjtRA2IBBCxeiM22A/s320/test.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377659465364094466" /></a>
<p>参考サイト:<a href="http://oku.edu.mie-u.ac.jp/%7Eokumura/texwiki/?Asymptote">「TexWiki」のAsymptoteの説明ページ</a>、<a href="http://d.hatena.ne.jp/hyuki/20090216#tex">結城浩のはてな日記</a></p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-85938652135304315102009-08-24T17:33:00.005+09:002009-08-24T17:59:42.455+09:00(解決)Ubuntu 9.04 + firefox でflashがうまく動かない<p>本記事では、Ubuntu9.04,firefoxでflashが一部うまく再生されないことがあったが、解決したのでまとめておく。私以外の環境において同じ方法が有効かどうか分かりませんが、情報としてまとめておきます。</p>
<p>症状は、以下のとおり。本来flashが再生される場所に三角形ボタンが表示され、それをクリックしないと再生されない。クリックしても再生されない場合あり。flashコンテンツは表示はされても、何がしかの原因により動作しない(NHKラジオ英会話ストリーミング配信などで)。</p>
<p>synapticなどで「swfdec-mozilla(SWF ファイル (Macromedia Flash) 向け Mozilla プラグイン)」を完全削除指定でアンインストールする。私の場合は、0.8.2-1ubuntu1というバージョンだった。(アンインストールする理由は、以下で説明するようにflashの最新版をインストールしても、古いバージョンが優先されるので。)</p>
<p>adobeのwebサイトから、最新のflash playerをダウンロードし、インストールする。私は、10.0.32.18というバージョンのもので、「Ubuntu8.04+用.debファイル」をダウンロードした。保存して、コマンドからインストールしてもよいだろうが、「debi パッケージインストーラ」なるものでインストールした。</p>
<p>ブラウザを再起動し、about:pluginsでブラグインを確認してみると、以下のように、確かにインストールできていることが確認できた。ちなみに、swfdec-mozillaをアンインストールしていないと、前のバージョン(Shockwave Flash 9.0 r999)が優先されてしまう。</p>
<pre class="screen">
Shockwave Flash
ファイル名: libflashplayer.so
Shockwave Flash 10.0 r32
</pre>
<p>ツール→アドオン→プラグインにて、shockwave flashを有効化する。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com2tag:blogger.com,1999:blog-1701761080003877598.post-36978374274578810492009-07-23T02:37:00.004+09:002009-07-23T02:47:58.898+09:00Latexで組合せの数<p>Latexとは、数式の含まれる文書を作成するために使われるソフト。組合せの数を出力する方法を調べたので、まとめておく。日本では、n個からr個を選ぶ組合せの数をnCrなどと表すが、この記法は世界標準ではないらしい。ちなみに、nCrをlatexで表示するには、次のように書けば良い。</p>
<pre class="screen">
{}_{n}C_{r}
</pre>
<p>外国では、丸括弧で囲まれた中に上にn、下にrを配置させた記法が一般的なようだ。この記法での表示方法を調べたところ、次のようにすれば良いことが分かった。</p>
<pre class="screen">
{{n}\choose{r}}
</pre>
<p>他にも、array環境を使って書くこともできる。</p>
<pre class="screen">
\left(
\begin{array}{c}
n\\
r
\end{array}
\right)
</pre>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-82379138450990104232009-07-20T22:02:00.002+09:002009-07-20T22:08:28.216+09:00ハブが故障<p><a href="http://watermans-linuxtips.blogspot.com/2009/07/blog-post_10.html">先日のネットワークダウン</a>に引き続き、同じような症状でネットワークダウンが発生した。調査結果をまとめる。</p>
<p>/var/log/messageに以下のようなエラーが表示され、ネットワークを利用できなくなった。</p>
<pre class="screen">
Jul 8 04:12:56 hoge dhcpd: receive_packet failed on eth2: Network is down
</pre>
<p>前回と違うのは、以下のようなlink downというエラーが出ていなくて、link upとなっていたこと。</p>
<pre class="screen">
Jul 8 04:16:15 hoge kernel: r8169: eth2: link down
</pre>
<p>結局、サーバに直接つなげていた、大元のハブ(そこから内部ネットワークに分配)が故障していたらしい。というのは、ハブを経由しないで、直接サーバにPCを接続したら、問題なくネットワーク接続できたから。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-41124243273028677982009-07-10T23:11:00.003+09:002009-07-10T23:36:07.120+09:00ネットワークエラー<p>本記事では、/var/log/messageに出てくる次のようなエラーの原因調査の結果をまとめる。</p>
<pre class="screen">
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
</pre>
<p>などというエラーが出て、あるとき突然ネットワークがダウンしてしまった。r8189というNICとの相性が悪い場合があるという情報や、ケーブル不良、NICの不良などを疑ったけれど、理由が分からなかった。</p>
<p>結局いろいろ調べてみて分かったことは、(NICを複数さしているのだが)eth0,eth1,eth2の割り当てが入れ替わっていたのが原因だった。</p>
<p>各NICに対応するethNをきちんと対応させるためには、CentOSでは/etc/sysconfig/network-scripts/ifcfg-ethNで、NICのMACアドレスを登録することで固定できるらしい(<a href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/900nicorder.html">NICの認識順序を固定する</a>)。しかし、この設定をしても最初はうまくいかなかった。調べてみたら、/etc/modprove.confでエイリアスが設定してあって、そちらが有線されていたようだ(<a href="http://zephel.com/archives/linuxunix/netwrork/">NIC の設定にMACアドレスを入れないと入れ替わってしまう</a>。<a href="http://d.hatena.ne.jp/m5081228/20090525/1243202105">Linux eth0 と eth1 が入れ替わってしまうのを固定したいCommentsAdd Star)</a>。</p>
<p></p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-31937262667247420532009-07-05T01:22:00.001+09:002009-07-05T01:24:21.067+09:00ログの一元管理<p>@ITの「連載:止められない基幹業務サーバの管理対策」の「第8回 syslogによるログの一元管理」が参考になるので、メモしておく。ルータのログ、各種サーバのログを一元管理しておくと作業が楽になる。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-33539969623738229552009-07-05T01:11:00.002+09:002009-07-05T01:18:32.644+09:00TCPWrapperによるアクセス制御<p>@ITの「連載:止められない基幹業務サーバの管理対策」の「<a href="http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec03/unix_sec01.html">第3回 サービスをセキュアにするための利用制限〜TCP Wrapperによるサービスのアクセス制限〜</a>」は参考になるので、メモしておく。</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0tag:blogger.com,1999:blog-1701761080003877598.post-85136047627000651182009-07-03T20:05:00.005+09:002009-07-03T21:19:14.651+09:00多段SSH接続(2段)<p>本記事では、いくつかのサーバを経由して、目的のサーバにSSH接続する、いわゆる多段SSH接続に関するいくつかのチップスをまとめる。ちなみに、ここでは、server1を経由してserver2にssh接続する2段接続の場合の説明とする。もっと良い方法・改善点があれば、教えてください。以下の方法はすべて自己責任で行ってください。私はここで説明した方法によるいかなる損害にも責任を持ちません。</p>
<p>以前、<a href="http://watermans-linuxtips.blogspot.com/2009/06/socksssh.html">socksサーバ経由でSSH接続する方法</a>という記事を書いたので、適宜参照すると良いかもしれない。</p>
<p>まず単純に、2段接続するには、次のコマンドで良い。ホストuser1@server1を経由して、ホストuser2@server2に接続する方法である。</p>
<pre class="screen">
$ ssh -t user1@server1 "ssh user2@server2"
</pre>
<p>tオプションをつけてあることに注意してほしい。これがないとエラーが出て怒られてしまう(以下)。仮想端末を強制的に割り当てるという意味。リモートマシン上で、screen-basedなプログラムを実行するときに使われるオプションらしい。 From man of ssh</p>
<pre class="screen">
$ 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).
</pre>
<p>socksを経由してuser1@server1に接続し、さらにuser1@server1を経由してuser2@server2に接続する場合も同様。以下のように.ssh/configにsocksのための設定を記述してあるとせよ。</p>
<pre class="screen">
Host user1.server1.socks
HostName server1
User user1
Port 22
ProxyCommand /usr/bin/connect -a none -S socks-proxy.xxx.jp:1080 %h %p
</pre>
<p>そのとき、次のように実行すれば良い。</p>
<pre class="screen">
$ ssh -t user1.server1.socks "ssh user2@server2"
</pre>
<p>多段接続する必要性は、例えば、会社の内部ネットワークにあるサーバserver2に接続したいが、内部ネットワークにアクセスするには、ゲートウェイであるserver1を経由しなければならないときである。もちろん、1ステップごとsshでアクセスして、最終的にserver2(より一般にserverN)にアクセスしても良いが、ある一定回数以上、単純作業を繰り替えしていると、耐えられなくなるときがあるらしい。</p>
<p>あるいは、内部ネットワークだけで公開している、Webサイトなどを見たいときは次のようにする(ただし、この方法は、内部ネットワークにあるプロキシサーバにSSH接続できる場合に限られる。なければ、ssh接続できるサーバにプロキシを立てる。)。</p>
<p>SSHポートフォワードを使えばよい。つまり、ローカルマシンの空きポート18080をプロキシサーバserver1 (ユーザ名user1)のプロキシ用ポート8080に転送すれば良い。</p>
<pre class="screen">
$ ssh -N -L 18080:localhost:8080 user1@proxy.server1
</pre>
<p>そして、ブラウザのプロキシ設定にて、localhostの18080をプロキシとして登録しておけば良い。もちろん、ローカルマシンが別のネットワークにあり、そこを出るためにSocksを経由しなければならないときは、上のようにsocksの設定をして、次のコマンドを打てば良い。</p>
<pre class="screen">
$ ssh -N -L 18080:localhost:8080 user1.server1.socks
</pre>
<p>抜け道を使っているようで、少し心が咎めるが、もともとSOCKSプロキシを利用できるということは、”そのネットワークにおいて、そういうことを許可しているということなのだ”、と理解する。</p>
<p>また、最初の設定で、user1@server1を経由して、user2@server2のとあるディレクトリに、ローカルマシンのデータをrsyncでバックアップするには、次のような手順で行う。まず、ダイナミック転送の設定を行う。ダイナミック転送は、転送先のポートを指定しなくて良いので楽である(ローカルマシンをsocksサーバとして使用する)。まず、ローカルマシンの空きポート(ここでは10022番)をuser1@server1に転送する。</p>
<pre class="screen">
$ ssh -N -f -D10022 user1@server1
</pre>
<p>次に、user2@server2へのssh接続の設定を.ssh/configに記述する。</p>
<pre class="screen">
Host user2.server2
HostName server2
User user2
Port 22
ProxyCommand /usr/bin/connect -S localhost:10022 %h %p
</pre>
<p>最後に、次のようなスクリプトbackup.shを作成する。</p>
<pre class="screen">
#!/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
</pre>
<p>もちろん、ローカルマシンがSOCKSサーバを経由しないとインターネットに接続できないときは、上のuser1.server1.socksを使えば良い。以上</p>tkhisanhttp://www.blogger.com/profile/01016924697164578386noreply@blogger.com0