「dpkg-reconfigure tzdata」コマンドをバッチ処理
Ubuntuでタイムゾーンを設定するときは「dpkg-reconfigure tzdata」コマンドを実行して、起動したインタラクティブウィンドウで Asia -> Tokyo を選択するのが良いのですが、chefなどバックグラウンドでバッチ処理で設定するときは、インタラクティブだと困ります。
そのときは以下のようにdpkg-reconfigureに「--frontend noninteractive」オプションを付けると良いです。
$ sudo echo Asia/Tokyo > /etc/timezone $ sudo dpkg-reconfigure --frontend noninteractive tzdata
UbuntuでTimezoneを変更する方法
Ubuntuでタイムゾーンを設定する方法を検索すると、主に以下の2通りが出てきます。
- 「cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime」コマンドを実行して再起動
- 「dpkg-reconfigure tzdata」コマンドを実行して、インタラクティブウィンドウが起動するので、Asia -> Tokyoを設定する
1ではなく2の方法で設定することをオススメします。
1だと、dpkg自体がこのタイムゾーン設定を覚えないため、のちのちapt-get upgradeなどで様々なパッケージがアップグレードされたときに、タイムゾーンの設定が戻ってしまいます。2だとそのようなことは起こりません。
cassandra を apt-get でインストール(debとdeb-srcはコマンドではない)
やり方は以下に書かれています。
http://wiki.apache.org/cassandra/DebianPackaging
が、以下を設定する方法が分からなかった。。。
deb http://www.apache.org/dist/cassandra/debian 11x main deb-src http://www.apache.org/dist/cassandra/debian 11x main
上記の deb と deb-src はコマンドではありません。/etc/apt/sources.list に記載します。
ずっとFedoraを使っていて、Ubuntuは初心者だったので、理解に時間がかかりました。
Ubuntuフォーラムでも「debコマンドはどうやってインストールするの?」という私と同じような勘違いをしている方が多かったので、ここに記しておきます。
Can't locate local/lib.pm in @INC at ...
私の使っている Ubuntu 12.04 だけかも知れませんが、必ずCPANコマンド実行の一回目は「Can't locate local/lib.pm in @INC at...」というメッセージでエラー終了します。でもリトライすると成功します。初回時のエラーメッセージは以下のとおりです。
... Checksum for /home/john/.cpan/sources/authors/id/A/AP/APEIRON/local-lib-1.008009.tar.gz ok ---- Unsatisfied dependencies detected during ---- ---- APEIRON/local-lib-1.008009.tar.gz ---- ExtUtils::MakeMaker [build_requires] Running make test Make had some problems, won't test Delayed until after prerequisites Running make install Make had some problems, won't install Delayed until after prerequisites Can't locate local/lib.pm in @INC (@INC contains: /home/john/perl5/lib/perl5 /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl /home/john/Desktop) at /usr/share/perl/5.14/CPAN/FirstTime.pm line 1300.
気持ち悪いので調べたところ、CPANが利用するlocal::libがインストールされていないのが原因でした。Ubuntuなら以下のコマンドでインストールできることができます。
sudo apt-get install liblocal-lib-perl
または
sudo apt-get install cpanminus
以下のページを参考にしています。
http://stackoverflow.com/questions/16702642/cant-locate-local-lib-pm-in-inc-at-usr-share-perl-5-14-cpan-firsttime-pm
bindでゾーン転送の設定確認と手動適用
複数台のbind(DNSサーバー)を構築する場合、1台をマスターにして、残りをスレーブにするのが一般的です。そうすれば、マスターで設定したゾーンの設定が自動的にスレーブに反映されます。
「bind ゾーン転送」などで検索すると、方法が色々と出てきます。
ゾーン転送はすぐに行われるわけではなく、SOAレコードのRefresh値の頻度で行われます。1〜数時間が一般的です。となると、1) ゾーン転送の設定が正しく反映されているか確認したい、2) ゾーン転送を手動で即時に実行したい、というケースがあるので、方法を調べました。
1. ゾーン転送の設定確認
フォーマット:
$ dig @マスターサーバのIPアドレス ゾーン名 axfr
例:
$ dig @1.2.3.4 example.com axfr
2. ゾーン転送の手動適用
フォーマット:
$ rndc retransfer ゾーン名
例:
$ rndc retransfer example.com
run-parts --test で cronスクリプトが動くかテスト
結論から言うと、以下のようにrun-partsコマンドを--testオプションで実行することで、cron.dailyで実行されるスクリプト名を確認することができます。同様にcron.hourly, cron.weekly, cron.monthlyも確認可能です。
run-parts --test /etc/cron.daily
cronスクリプトを作成したときにいつも苦心していたのが、そのcronスクリプトがちゃんと動くかどうか確認することです。このオプションをもっと早く知っていれば。。。今まではマシンの時刻をずらしたり、わざとsyslog出力してスクリプトの実行を確認したり、色々と面倒なことをしていました。
しかもrun-partsのmanページを見ると分かるのですが、ubuntuなどDebian系のディストリビューションでは、cronスクリプトのファイル名に許されている文字列は、(^[a-zA-Z0-9_-]+$) のみです。つまり英数字以外で許される記号はハイフンとアンダースコアのみです(ドットなどはNG)。今までredhat系を利用していた私は、全く疑いもせずにubuntuサーバーにインストールしたcronスクリプト名にドット(.)を使ってしまい、cronスクリプトが実行されず原因究明に時間がかかりました。
PPPのtxqueuelenが小さすぎる
LinuxでイーサネットとPPPインタフェースのルーティングをすると、イーサネットからPPPインタフェースへの通信パケットをこぼしてしまうことがありました。

調べていった結果、PPPインタフェースのtxqueuelenが3(デフォルト値)であることが原因だと分かりました。
[root]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:x.x.x.x P-t-P:y.y.y.y Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RX packets:600700 errors:0 dropped:0 overruns:0 frame:0
TX packets:1011374 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0 txqueuelen:3
RX bytes:42335282 (40.3 Mb) TX bytes:1424516252 (1358.5 Mb)
txqueuelenはパケットの送信キューのサイズです。これが3つしかなかったため、イーサネットから大量にパケットが流れてくると、PPPインタフェースの送信キューからあふれてしまってました。
txqueuelenを30にしたところ、通信パケットがこぼれる現象は起こらなくなりました。
[root]# ifconfig ppp0 txqueuelen 30
手動でifconfigコマンドを使って毎回txqueuelenを設定するのは手間と感じる場合は、ip-up.localを使って自動化します。
[root]# cat /etc/ppp/ip-up.local
INTERFACE=$1
ifconfig $INTERFACE txqueuelen 30