スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

日付と時刻の調整…自動で。

前回の続き…

スケジューリングで自動的に仕事をこなしてくれるのはcronという機能だということですが。

とりあえず、この設定ファイルは/etc/crontabにあるようですが、これを直接編集することは推奨されないんだとか(Cronで簡単スケジューリング)。しかしとりあえず見るだけ見てみる。

# less /etc/crontab
(前略)
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

なるほど。よく分からないけれども、/etc/cron.dailyの中身を一日一回やってくれるということか。まあ、時計合わせなど一日一回できれば十分過ぎるほどであると思うので、これを使うことにする。



では実践。上に挙げたページやntpdate を使った時刻合わせ | 自宅サーバー Fedoraなどを参照に、

# cd /etc/cron.daily
# ls

とりあえず、既に設定がなされていたなんてバカな話でないことを確認する。なかったので、

# vi ntpdate

以下の通り記入。

#!/bin/sh
ntpdate ntp.nict.jp

終わったら保存して、

# chmod 755 ntpdate

今つくったファイルに実行権限を与える。



これで一日一回自動で時刻調整をしてくれるであろう。…本当か?さきほどの/etc/crontabの中身によると、午前六時二十五分に実行されることになっている。俺そんな時間にパソコンを起動していないと思うんだけれど…そう、これって二十四時間起動させているサーバのための機能なんじゃないか?

というわけで、もっといいものはないだろうか。起動直後に実行されるとかさ。

Wikipediaのcrontabのページを見てみたら、anacronというものがあるのが分かった(anacron - Wikipedia)。よくわからないけれども、これはパソコンなど、二十四時間起動させっぱなしでないシステムでこのcronを補完してくれる機能であるらしい。

aptで確認するとうちのシステムにもすでにインストールされている(つまりはDebianでデフォルトインストールされていると思われる)ようだったので、とりあえず設定ファイルを覗いてみる。

$ less /etc/anacrontab

すると。

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
1 5 cron.daily nice run-parts --report /etc/cron.daily
7 10 cron.weekly nice run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly nice run-parts --report /etc/cron.monthly

となっている。つまり、/etc/cron.dailyの中身は実行してくれるということだろうか。/etc/crontabに直接コマンドを書き込むことが推奨されないというのは、この辺が理由なんだろうか?

しかし、このanacronなるもの自体が自動で起動しないと意味がないよね。デーモンの自動起動を司るのは/etc/rc*.dであるのは以前勉強したので、そこを見てみましょう。

$ cd /etc/rc2.d
$ ls -F
README S20clamav-freshclam@ S20saned@ S89anacron@
S05loadcpufreq@ S20exim4@ S23ntp@ S89cron@
S10rsyslog@ S20kerneloops@ S24dhcdbd@ S99rc.local@
S12acpid@ S20nfs-common@ S24hal@ S99rmnologin@
S12dbus@ S20nvidia-glx@ S26network-manager@ S99stop-bootlogd@
S14avahi-daemon@ S20nvidia-kernel@ S30gdm@
S19cpufrequtils@ S20openbsd-inetd@ S50cups@

あ、いるね。つまり、一応はこのままで問題ないということか。

一応確認のために、あえて軽く時計を狂わせた状態で再起動。で、画面に流れるメッセージを注視しているとanacronを起動するメッセージを発見。起動が完了してgdmが立ち上がった時に時計を確認。すると、あえて狂わせた時計が直っていた。

*ただし、時計をあえて狂わせるにせよ、それを直すにせよ、大幅にやるとシステムを混乱させることになるので(突然スクリーンセーバーが起動するとか、ハイバネートするとか、プログラムの動作に矛盾が生じるとかが考えられますな)、あまりやらない方がいいかも。また、極端な日付に設定すると、2000年問題よろしくシステムがそれに対応出来ずに誤作動を起こすことも指摘されているので(2038年問題 - Wikipedia)、それは知っておいた方がいいでしょう。



なお、今回も標準的なインストールをされたDebianを前提にお話をさせてもらっています。Debian以外のシステムや最小インストールをしたDebianでもこの様にcron・anacronが都合良く設定済みか否かは分かりません。


追記

これをやって以来、起動する度にコンソールに You have new mail などと表示されるようになりました。今まで普段使っているメーラーであるSylpheedに未読メッセージがあってもこんな通知が出たことはなかったので、おそらくは犯人はcronであるわけですが…。

とりあえず /var/ ディレクトリを覗くと、mailというディレクトリが存在しているのを見つける。で、中身を見てみると…どうやらcronの実行したコマンドが返したメッセージはメールとして管理者に通知されるという話であるらしいことが分かりました。

まあ、それはそれはご丁寧に…つっても、その内容がせいぜい時刻調整に成功、何秒ズレていたとかの正直ほとんどどうでもいいことなので、いちいち You have new mail と表示されるのは邪魔くさいなあと思ったんです。そんなとき、こんな記事を発見。 /dev/null - Wikipedia どうやら、結果をこの /dev/null というファイルに書き込むように指示すると一切のメッセージを残さないため、メールにもならないとのこと。つまりさきほどの /etc/cron.daily/ntpdate を

#!/bin/sh
ntpdate ntp.nict.jp > /dev/null

としてやればいいってことでしょうね。

ただ、これだとちゃんと動いてくれているのかも分からなくもなりますが…。エラーも /dev/null に消えちゃいますからね。

スポンサーサイト

テーマ : UNIX/Linux
ジャンル : コンピュータ

日付と時刻の調整

何が正しいのか、よう分かりませんが。一応メモ的に。

最近は時計を、クオーツや振り子ではなく、ネットワークや電波を通じてより正確な時計と同期することで調整するものが一般的になってきました。これを使えば定期的に時報なんかを聞きながら手で調整する手間がかからないという話ですな。

で、パソコンはネットワークとつながっている機器の代表であるわけで。GNU/Linuxにもネットワークと時刻を同期する機能があるはず。

調べたらこれはNetwork Time Protocol略してNTPというんだそう。Debianにもntpとかntpdateとかいう名前のパッケージが存在し、このふたつのパッケージをインストールすると、gnomeの「時刻と日付の調整」メニューに「インターネット上のサーバと同期させる」設定が現れ、これを選択することで自動で時刻調整ができるようになります。



俺もそれでいいと思って、ずっとそれでやってきました。

しかし、そもそもntpというパッケージはNTPサーバを立ち上げる場合に使うべきものだそうですね。例えば社内ネットワークなんかを構築した場合に、全てのコンピュータをいちいち外部のNTPサーバと同期させるのは無駄な通信となるわけで。それよりも一台NTPサーバを用意して、外部と同期するのはそいつだけにして、社内ネットワークの他のコンピュータはその内部NTPサーバと同期するようにすれば、これに関するトラフィックを数十分の一、場合によっては数百分の一に抑えられるわけですよ。

…つまり、うちのパソコンの中には余計なサーバプログラムが走っている?

ローカルエリアネットワークを形成しているわけでもない俺にNTPサーバを建てる理由はない。あるべきはNTPクライアント。それに、「余計なサービスは起動しない」がセキュリティの基本ならば、俺はそれに逆行していることになる。

# apt-get remove ntp

とりあえず、怖くなった俺はntpパッケージを削除する。



じゃあ、そもそもntpdateって何よ?NTPサーバからのシステム時刻設定用クライアント、という説明はついているけれどさ。

ググって使い方を調べると、

# ntpdate NTPサーバ名

この様にコンソールに打ち込むことで、指定したサーバに時間を合わせてくれるとのこと。

ではNTPサーバはどこを使ったら良いのか。昔、まだWindowsにネットワーク時刻調整の機能がついていなかったころ、たしかこの手のアプリケーションをベクターで見つけてきて使っていたなあ。アレの接続先は九州の大学だった気がする…

ITmediaニュース:福岡大のNTPサーバがアクセス集中で悲鳴

えーと、すみませんでした。

インターネットサービスプロバイダごとに、契約者向けにNTPサーバが用意されている例が多いんだそうで、出来ればそれを使うのが良いんだとか(NTP/プロバイダ・機関別 - wiki@nothing)。俺の使っているプロバイダauoneではそれがなさそうなので、日本標準時プロジェクト 公開NTPを使ってみる。なんでも、日本標準時に直結、誰でも使ってよいとか。NTTの時報サービスや電波時計の電波のような感覚だろうか?

# ntpdate ntp.nict.jp

すると、時刻調整をしましたよー的なメッセージが返ってくる。



とりあえずサーバとの時刻の同期はできた。しかし、これでは手動調整とほとんど変わらない。これを自動的に、スケジューリングでやるようにしたいわけです。

この前必要のないデーモンを停止することを勉強したときに、スケジューリングはcronという機能で行うということを覚えたので、これとこれとを結びつけられないかと。

長くなったので、続く

テーマ : UNIX/Linux
ジャンル : コンピュータ

Debian sidでgdmが起動しないトラブル

以前からこのブログでもお話ししているように、俺は現在Debian sidを常用しています。ただ依存関係の崩壊が起きていないことばかりを気にして、特に内容に気をくばらずにdist-upgradeを繰り返していました。…それがいけなかった。

俺は以前書いた通りdist-upgradeする際にはgdmを止めているんだけれども、今日アップグレードが終わってgdmをいざ再起動しようかというときに、

Starting GNOME Display Manager: gdm /sbin/start-stop-daemon: Unable to chdir() to '/' (No such file or directory)

こんなメッセージを吐いてgdmが再起動しない事態に遭遇。コンピュータ全体を再起動しても同じ。アップグレードの直後にこういう事態になったから、アップグレードされた内容に問題があったんだろうが、何をアップグレードしたのか全く覚えていない俺。何をダウングレードしたらいいのか分からない俺。焦る俺。



とりあえず、デュアルブートのWindowsを立ち上げ、上のメッセージでググってみる。

#520499 - lsb-base upgrade breaks init scripts at least of gdm - Debian Bug report logs

お、早いね。もう既にバグレポートがアップされている。

これによるとlsb-baseのバージョン3.2-21が問題で、squeezeにあるパッケージ3.2-20にダウングレードしたら問題なくなったとあるので、

# vi /etc/apt/preferences

で、

Package: lsb-base
Pin: release a=testing
Pin-Priority: 1001

と書き込み、

# vi /etc/apt/sources.list



deb http://cdn.debian.or.jp/debian/ squeeze main contrib non-free

と書き込んで、

# apt-get update ; apt-get dist-upgrade

lsb-baseがsqueezeにあるバージョンにダウングレードするのを確認する。ようはapt-pinningによるダウングレードですな。終わったら再起動してgdmがエラーを吐かずに自動で立ち上がってくれるか確認する。

以上のことをやったら、俺の環境でも昨日までのように何の問題もなく立ち上がってくれたので、/etc/apt/sources.listの内容を消去して

# echo lsb-base hold | dpkg --set-selections

これでホールドしておいて、あとは問題を取り除かれた新しいバージョンが上がってくるのを待つ。



何とかなったけれど、何がアップグレードされたのか、どこかにメモする習慣をつけた方がいいですね。sidを使うのならば。

# apt-get dist-upgrade -s > hogehoge.txt

例えばこんな感じか。apt-getのオプション-sはシミュレーションということ、それに続く>はこのコマンドのコンソールへの返答をテキストファイルに出力するの意味らしいが。


追記

lsb-baseは新バージョン3.2-22が入って以上の問題は解決されたようです。

テーマ : UNIX/Linux
ジャンル : コンピュータ

ベイジアンフィルタを携帯電話に実装して欲しい

最近携帯電話に昼夜問わずスパムメールがひどいので、仕方がないから一斉拒否・指定受信にしました。

しかしこれだと、うっかり受信指定し忘れたり、俺の携帯のアドレスを知っている友達などがパソコンからメールを送ってくれたりしたら、それは完全に無視されて、こっちは送られた事にも気づかず、向こうは捨てられた事にも気づかないというちょっと困ったことになり得ます。

それに、友人同士でメーリングリストに加入しているため、いわゆる「なりすまし拒否」をするわけにはいきません。つまり、受信指定されているアドレスに偽装すればスパム送り放題となってしまいます。



…パソコン上で動くメールソフトだと、ベイジアンフィルタ(ベイジアンフィルタ - Wikipedia)と呼ばれる、含まれる語句によってスパムかどうかを判定する機能がついていたりするんですよね。

これがなかなか面白いんですよ。携帯電話の迷惑メールフィルターは、例えば迷惑メール送信元のアドレスだとかをまず設定する必要があるわけですが、このフィルタは特に何かを事前設定する必要はないのです。こちらでやるべきことは、ただ来るメールに自動でなされるスパム・非スパム判断が間違っていた場合に、それを正してやるだけ。

何だ結局手動じゃんとか、そんなものが効果あるのかって思われるでしょうけれども、かなり効果はあります。スパムってのはものすごく大量に送られてくるものですが、送っている人は少数で、確実にその人その人のくせが出ています。ベイジアンフィルタはそのクセとか何とかを、自動的にメールから単語を抽出してデータベース化することで学習しているのです。で、その学習に基づいて自動でスパム・非スパム判断をしてくれると。最初は間違いが多いですが、次第次第に精度が上がってきて、そのうち同じ人が送って来ていると思われるほとんどのスパムは遮断してくれるようになります。



スパマーは総当たり攻撃を繰り返していること、メールアドレスは簡単に偽装可能であることを考えると、アドレスを変更することや特定アドレスを拒否することはあんまりスパム対策として有効とは思えないわけで。このベイジアンフィルタは、有効であるどころか現状のスパムを壊滅させるだけの能力があると使っていて思うのですが。…なんで携帯電話に実装されないんだろ?

auさん、KCP+で携帯電話を高機能化させるなら、ポータブルオーディオとかワンセグとかではなくて、まずこれを実装してくださいよ。それならばある程度重くなっても俺は文句を言いません。ドコモさんとsoftbankさんも、もしスマートフォンじゃなくて普通の端末に実装してくれたら(個人的な意見だが、まだスマートフォンは日本市場ではイロモノであると思う、将来的にはこういうのが標準になるんだろうが、それはSIMロック解除がなされる3.9G(第三・九世代携帯電話 - Wikipedia)以降の話でしょう)、正直家族割を捨ててでも乗り換えを考えますが、いかがでしょう?



これが普及したら、それはそれでスパムの進化を促すことになるのでは…って?どうだろうね。現状のスパムは送られた人全てを騙すつもりじゃなくて、ほんの少数反応があればそれで利益が出る仕組みなんだよね。スパムフィルタを育てるのは最終的には利用者だから、カモにされる人はベイジアンフィルタを育てられないはず。それに対して、スパムを鬱陶しく思っている人のフィルタは育っていく。だから、結局スパム業者の利益は変わらない、よって進化も退化もない…のでは。

でも、Gmailのようにサーバー上でフィルタをかます例が増えるとちょっと事情は変わってきますが。ただ、サーバー上でベイジアンフィルタをかますのはプライバシーの侵害に当たりそうな気もする(機械的にやっていることとはいえ、うちのbsfilterのトークンデータベースを見てみたらちょっと人に見られて気持ちの良いものではなかった、ドコモはサイトに「ドコモとして、iモードセンターでメールの内容を事前に判別することができれば、お客様への迷惑メール送信を防ぐことができますが、電気通信事業者は法律により「通信の秘密」を守る義務があるため、メールの内容を確認することはできません」と書いていますが、このことを言っているのだと思われます)し、正当なメールが誤判定で流れてしまった場合のフォローも気になるので、あんまりやって欲しくないものです。

でも、端末に実装すれば問題ないはず。

…書いていて気がついたんだけれども、ベイジアンフィルタはスパムを「鬱陶しい」と感じる人には有用だけれども、スパムにカモられる人を保護することは全く出来ないわけね。携帯電話にこれが実装されないのはこういう理由があるのかしら。



と、今回は完全にこのブログの趣旨とは離れましたが…大丈夫、これはsylpheed+bsfilterのネタフリだから!と苦しい言い訳をしてみる。

テーマ : 迷惑メール
ジャンル : 携帯電話・PHS

shared-mime-info問題をexperimentalのnautilusで解決する

現行のsidではファイルマネージャであるnautilus上でファイルタイプをまともに認識できなくなるというトラブルを抱えています。

何が原因なのか?どうやらshared-mime-infoが抱えるバグ#515728が原因であるみたいですが…

まともに認識できなくなったからといって、squeezeにあるバージョンにダウングレードしても事態は悪化するだけのようです。

shared-mime-infoは実はバグを潰した新バージョンが既に用意されてはいるようなんですが、これがnautilusの現行バージョンとぶつかるため、そのままでは導入できません。


どうするか?3択―ひとつだけ選びなさい。

答え1. ハンサムなポルナレフはexperimentalで実験中のnautilus2.24に手を出す。

答え2. 仲間が来て助けてくれる(shared-mime-info新版とぶつからないバージョンのnautilusのアップがあるのを待つ)

答え3. 解決できない。現実は非情である。


おれがマルをつけたいのは答え2だが期待は出来ない…
メンテナーさんたちがあと数秒の間にここに都合よくアップグレードして
アメリカンコミック・ヒーローのようにジャジャーンと登場して『待ってました!』と
間一髪助けてくれるってわけにはいかねーゼ 逆にメンテナーさんたちもすでに苦戦しているかもしれねえ

…それに、もしそうなったらブログの記事として意味がない。

というわけで答え1を選択。これでおかしくなったらそれはそれで構わん、lennyをインストールし直すということで。



実践。

# vi /etc/apt/sources.list

以下の通り記述。

deb http://cdn.debian.or.jp/debian/ experimental main contrib non-free

終わったら保存して

# init 3

これに関しては前回の記事参照。とにかくXを停止して

# apt-get update ; apt-get -t experimental install nautilus
# apt-get install shared-mime-info

依存関係が崩壊しないことをよーく確認してインストール。



終わったらランレベルを2に変更してXを起動、ファイルタイプがまともに認識されるか確認。

…答え3…答え3…答え3

…なんてことはなく、うちの環境ではこれで解決できました。一応nautilus2.24も特に不安定だとかそういったことはなさそうです。nautilus2.24は不安定だからexperimentalに閉じ込められていたのではなく、lennyに搭載しないことが決まっていたからこそexperimentalに閉じ込められていたわけですし。

テーマ : UNIX/Linux
ジャンル : コンピュータ

siduxの安全なアップグレードをsidで再現?

*今回の記事はちょっと実験的な話です。正直あんまり真似しない方が良いかも知れません。

Debian sidとディストリビューションのsiduxとは基本的には殆ど同じものだと俺は捉えています。というのも、siduxはパッケージ管理システムのリポジトリの一つにDebian sidのものをそのまま使っているから。ライブCDとしての年数回のリリースと一部の拡張、プラットフォームをPC/AT互換機に限定しているなど、sidにはない特徴も数ありますけれども。

よって、siduxマニュアルはDebian sidを使う上でも非常に参考になると思います。特にaptに関する項目は。



そのsiduxマニュアルでは、Xを動作させたままdist-upgradeをするな、ましてやSynapticなどもってのほかといった具合に強めに警告されています。

ではどうしたら良いか?siduxではランレベルを3に切り替えるとXが停止し、それからdist-upgradeすればより安全にアップグレードできるんだそうで。

しかし、これはオフィシャルのDebianでは通用しません。Debianではランレベル0にシステム停止、1にシングルユーザーモード、6に再起動を割り当てているだけで、2~5は全て通常モード、区別をしていないからです。そもそもランレベルというものが何のために存在するのかよく分からず、もしかしたらこれはいわゆるレガシーってやつなのかもしれませんが、とにかく、通常動作中のDebianシステム上で

# init 3

なんて打っても何も変わりません。せいぜい、

# runlevel

このコマンドの返答が変わるだけで、実質何かが変わるわけではないみたいです。



ところが、なぜ変わる/変わらないのかの区別が、前回判明しましたな。/etc/rc*.d/以下の内容なのです。つまり、

# cd /etc/rc3.d
# mv S30gdm K30gdm

と、このようにランレベル3でgdm(GNOME Display Manager)を起動しない設定にしてやれば、siduxのランレベル3を再現できるのではないかと。今まで俺はXを停止させるためにわざわざシングルユーザーモードに切り替えていたわけですが、そこまでしなくてもこのように設定してランレベル3に移行するだけで、安全にaptでアップグレードができるのではないかと。Xを司るものは果たしてgdmだけなのか、それが若干怖いですが、/etc/rc*.dディレクトリ内にあるファイルを見てもgdm以外にそれらしいものがないんで…

というわけで実験。上の通り/etc/rc3.d/S30gdmをK30gdmにリネームした上で、X上のコンソールから次のコマンド。

# init 3

すると、画面が真っ暗になってtty1のログイン画面が現れる。Alt+F7を押すと見慣れたXの画面は消え、代わりに真っ黒なコンソール画面に

INIT: Switching to runlevel: 3
Stopping GNOME Display Manager: gdm

の表示が浮かぶ。ここまで順調。

では、ログインしてランレベルを2に切り替えてみる。予想の通りならば、切り替えた後にAlt+F7を押せばgdmが立ち上がっているはず。

# init 2

ちょっとだけ予想と違うことに、とにかく画面が突然明るくなりgdmのログイン画面が現れた。Ctrl+Alt+F1を押して先ほどのtty1コンソールに戻ると、

INIT: Switching to runlevel: 2
Starting GNOME Display Manager : gdm

と出ている。



一応期待した通りのことになってくれました。これでsiduxに於ける安全なdist-upgradeを再現したことに…なるんでしょうか?ps -efなんかの返りを見るとgdmを止めるとX関連のものは全て止まるように見えるのですが…。

ただ、この作業自体がシステムを損傷することもあるかも分かりません。現状のsidでは、この作業を終えた後若干の狂いが現れるようです(本来Xはtty7で動くところ、これで再起動したXはなぜかtty8から起動する)。lennyリリース直前の、lenny用の実験台であったころのsidではこんなことはなかったはずなのですが…。ので、あまり真似しない方が良いかも。


追記
この様な作業をしなければならない理由、sidをしばらく使っていて分かった気がします。それについてはこちらをご覧ください

テーマ : UNIX/Linux
ジャンル : コンピュータ

プロフィール

ざっぱー

Author:ざっぱー
(この画像について)

当ブログについて
メール
(このメールアドレスへの特定電子メール (迷惑メール) の送信はお断りします)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。