ソフトウェアエンジニア現役続行

雑多なことを綴ります

Linux

「dpkg-reconfigure tzdata」コマンドをバッチ処理

Ubuntuでタイムゾーンを設定するときは「dpkg-reconfigure tzdata」コマンドを実行して、起動したインタラクティブウィンドウで Asia -> Tokyo を選択するのが良いのですが、chefなどバックグラウンドでバッチ処理で設定するときは、インタラクティブだと困…

UbuntuでTimezoneを変更する方法

Ubuntuでタイムゾーンを設定する方法を検索すると、主に以下の2通りが出てきます。 「cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime」コマンドを実行して再起動 「dpkg-reconfigure tzdata」コマンドを実行して、インタラクティブウィンドウが起動する…

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 m…

Can't locate local/lib.pm in @INC at ...

私の使っている Ubuntu 12.04 だけかも知れませんが、必ずCPANコマンド実行の一回目は「Can't locate local/lib.pm in @INC at...」というメッセージでエラー終了します。でもリトライすると成功します。初回時のエラーメッセージは以下のとおりです。 ... C…

bindでゾーン転送の設定確認と手動適用

複数台のbind(DNSサーバー)を構築する場合、1台をマスターにして、残りをスレーブにするのが一般的です。そうすれば、マスターで設定したゾーンの設定が自動的にスレーブに反映されます。 「bind ゾーン転送」などで検索すると、方法が色々と出てきます。…

run-parts --test で cronスクリプトが動くかテスト

結論から言うと、以下のようにrun-partsコマンドを--testオプションで実行することで、cron.dailyで実行されるスクリプト名を確認することができます。同様にcron.hourly, cron.weekly, cron.monthlyも確認可能です。 run-parts --test /etc/cron.daily cron…

PPPのtxqueuelenが小さすぎる

LinuxでイーサネットとPPPインタフェースのルーティングをすると、イーサネットからPPPインタフェースへの通信パケットをこぼしてしまうことがありました。 調べていった結果、PPPインタフェースのtxqueuelenが3(デフォルト値)であることが原因だと分かり…

gcovを使ってテストカバー率を測定する

gcovというツールを使ってC言語のテストカバー率を測定することができます。gcovはgccパッケージに同梱されています。たとえば次のようにHoge.cをtestHoge.cでテストするとき↓ [Oswald@fedora14 tmp]$ cat Hoge.c int plus1(int i) { return i+1; }int minus…

DBD::SQLite-1.14に関数が戻ってこない不具合がある

Unix環境でperlのDBD::SQLite-1.14の関数を使ってsqlite3につなぐと、関数から戻ってこない不具合が起こることがあります。DBD::SQLite 1.14はCent OS 5.1に標準で入っているバージョンです。再現プログラムは↓ use DBI; DBI->connect('dbi:SQLite:dbname=/t…

ndiswrapper-1.56 と kernel-2.6.35

ndiswrapperはカーネルが上がるたびに自分で再コンパイルして、カーネルモジュールをインストールしなくてはなりません。fedora14が出たので、13から上げてみました。kernelのバージョンは2.6.35です。構造体のメンバーが変わったようで、コンパイルでエラー…

関数のスタック使用量を計算する方法

POSIXが使える環境でC言語のプログラムを書いていて、特定の関数が使用するスタックの量を調べる必要がありました。別スレッドを生成してその特定の関数を実行させることで、スタックの使用量を調べることができます。あらかじめ別スレッドのためのスタック…

Fedora14にMozcをインストール

FedoraにデフォルトでインストールされているAnthyというIMEはあまり優秀ではありません。特に長い文字を変換しようとするとうまく行かないようです。 例: ゆいがどくそん → 湯意が独尊 すみとみしんたくぎんこう → 隅とも信託銀行 しゅかいせん → 首魁せん…

ファイルサーバのためのユーザ

Linuxでファイルサーバを立ち上げるとき、クライアントPCがWindowsであることを考えると、Sambaによる共有フォルダ機能を使う方法と、Ftpサーバを使う方法があります。Sambaの場合、ログインできないユーザを作って、クライアントからはそのユーザで認証して…

F10キーでファイルメニューが開かれるのを無効にする

全角モードで文字を入力してからF10キーを押して、入力した文字を半角化するショートカットはとても便利です。しかし、fedoraやUbuntuでgedit(エディタ)やpidgin(チャット)を使っていてF10キーを押すと、半角化されずにファイルメニューが開かれてしまい…

プロセスを再起動せずにログを削除するにはtruncate

Linuxサーバーで、sambaが大量のログを出力してパーティションがフルになってしまうトラブルが発生しました。 /var/log/samba/ディレクトリのログファイルを削除しても、改善されずにパーティションはフルのまま。これは、削除したファイルのファイルディス…

rootになったらプロンプトの色を変える

root権限になりたいとき、「$ su -」でrootになると、パスワードを入力が手間だったり、一般ユーザで使っていたときの環境変数がクリアされてしまいます。 「$ sudo bash」でrootになると、パスワードの入力を省略できるし(visudoでNOPASSWDを設定しておく…

tomcat上で動かすプログラムの配置と実行

linuxマシンにtomcatとjdkを入れてjavaプログラムをサーブレット上で動かす方法です。 バージョンはtomcat6とjdk1.6.0です。 手順概要 tomcatへのサーブレットプログラムの配置と実行の手順は次のようになります。 サーブレットプログラムを作成・コンパイル…

異なるHDDでデュアルブート

WindowsとLinuxのデュアルブートというと、単一のHDDをパーティション分割して、それぞれのOSを入れるのが一般的だと思いますが、HDDを二つ用意して、それぞれにWindowsとLinuxを入れてデュアルブートする方法もあります。 単一のHDDでデュアルブート 次のよ…

ApacheでユーザごとのhtmlとCGIを公開させる

CGIをnobodyで実行するのではなくユーザー権限で実行したいときがあります。そのときは次のようにします。 /etc/httpd/conf/httpd.confを編集する 次のようにUserDirを定義します。 #UserDir disabled (←コメントアウト) UserDir public_html (←コメント…

rpmスペックファイルの%config

RedHat系のLinuxディストリビューションではRPMでパッケージ管理を行います。RPMスペックファイルで、%configをつけるとそのファイルは設定ファイルとして認識されます。%configでは、noreplaceとmissingokを指定することができます。第5章 SPECファイルの記…

LinuxにJDKをインストール

LinuxにJDKがデフォルトでインストールされていない場合、Sunのサイトからダウンロードしてこないとダメなようです。他の言語のようにyumで簡単にインストールできるのかと探しまわったのですが、見つけることが出来ませんでした。 参考 ここの説明がとても…

仮想マシンのGuestOSでルータを構築する

仮想マシンを使って、GuestOS(ゲストOS)をルータとして使うことができます。複数のインタフェースを設定できる仮想マシンであれば構築できます。ユースケースとしては、Linuxルータを作って仕組みを理解したいが、物理的なマシンや追加NICを用意するのが面…

補助コマンドは /usr/libexec に

Unix系OSでは、コマンドによって登録されているパスが違います。一般的に/bin以下にあるコマンドは、そのLinuxディストリビューションにとって基本的なコマンドを指します。また/usr以下には/usr/binと/usr/sbinの2種類があります。/usr/bin以下に実行ファイ…

文字コードの違うマシンにssh接続するときの文字化け対策

日本語の文字コードは、今までのLinuxではEUC-JPが主流でしたが、今後はUTF-8が主流になっていくことでしょう。最新のfedoraもUbuntuも、デフォルトの文字コートはUTF-8になっています。さて、UTF-8環境のターミナルからEUC-JP環境のサーバにssh接続すると、…

シェルスクリプトで、空白で詰めない

シェルスクリプトでは、空白は詰められてしまいます。 ダブルクォーテーションで囲むと、空白は詰められなくなります。 [Oswald@fedora ~]$ string="a b" [Oswald@fedora ~]$ echo $string a b (←空白を詰める) [Oswald@fedora ~]$ echo "$string" a b (←…

cronスクリプトが終了しない

cronスクリプトの実行が最後まで完了しない現象が起こりました。調べたところ、cronスクリプトの標準出力(+標準エラー出力)の量が多すぎて、パイプ詰まりが起こってしまい、処理がそこで固まっていました。例えば次のように大量の標準出力を行うcronスク…

cronディレクトリはinotifyサポートを受けている

/etc/cron.d、/etc/cron.daily、/etc/cron.weeklyなどのcronディレクトリはinotifyでサポートされているため、このディレクトリにスクリプトを追加/削除したり、編集したりすると、それらの変更はcrondを再起動しなくても反映されます。 サーバの設定ファイ…

ndiswrapperを使ってWindows用ドライバを動かす

Windowsで使っていたLogitec LAN-TX/U1H2 Ethernet AdapterをLinuxでも使おうと思ったら、楽勝でした。dmesgを見たらデバイスが認識されているようだったので、ndiswrapperを使ってWindows用のドライバをインストールしたら、簡単に動きました↓ [Oswald@fedo…

fedora12でvmware playerが起動しない

一昨日のエントリで、PCをデュアルブートにして、WindowsとLinuxを入れました。そして昨日のエントリで、Linuxからvmware playerでWindowsを起動できるようにしました。Linuxは、具体的にはFedora12を使っていました。仮想マシンはvmware-player-3.0.1を使っ…

vmware playerで既存のパーティションを起動する

昨日のエントリでWindowsとLinuxのデュアルブート(マルチブート)の状態になっています。/dev/sda1にWindows、/dev/sda2にLinuxがインストールされています。/dev/sdaにgrubが入っています。この状態でLinuxを起動して、ホストOSがLinuxの状態で仮想マシン…

Linuxに移行

Windows XP Proを使っていた既存のPCにLinuxを入れることにしました。Windowsの環境を削除するのはもったいないので、パーティション分割して、片方にはWindowsを残し、もう片方にLinuxをインストールすることにしました。 まずパーティションを分割するので…

自宅メールサーバーの構築

勉強を兼ねて、自宅でメールサーバーを構築してみました。1台のlinuxマシンにpostfixとdovecotを入れました。主な作業は以下の3点です。 dovecotの設定(/etc/dovecot.conf) postfixの設定(/etc/postfix/main.cf) OP25B対応(/etc/postfix/main.cf) OP25…

yesコマンドの使い方

Unix系OSにはyesコマンドという、ずっと「y」を出力しつづけるコマンドがあります。 [Oswald ~]$ yes y y y y y y 使い道としては、対話的に返答を求めるコマンドに対して、yで返答しつづけることが出来ます。例えば、「rm -i *」とすると、対話的に返答を求…

シャットダウンプロセスの仕組み

Linuxの起動プロセスの仕組みに関する記述はよく見ることが出来ますが、シャットダウンプロセスの仕組みに関する記述はあまりないので、ここに記しておきます。 poweroffコマンドが呼ばれると、Linuのランレベルが0になります。rebootコマンドの場合はランレ…

HTTPSプロキシの仕組み

例えば、以下のようなネットワークを考えます。 ┌──────────┐ ┌─────────┐ ┌───────────┐ │ クライアントPC │ <───> │ プロキシサーバ │ <───> │ HTTPSサーバ │ └──────────┘ └─────────┘ └───────────┘ 192.168.1.40 192.168.1.2 https_server.j…

dhclientとリースファイル

「dhclient -l lease_file」でリースファイルの出力先を指定できます。 (デフォルトは/var/lib/dhclientディレクトリにdhclient-eth0.leasesというファイル名で記録されます)←eth0のところにインタフェース名が入ります。 以前、CentOS 5.1でサーバを立て…

cronスクリプトをバックグラウンドで実行するときの注意点

cronスクリプトの中でアンパサンド(&)を使ってコマンドをバックグランド処理しようとしても、このコマンドが終了するまでcronは次の処理に移行しません。 どういうことかというと、例えば以下のスクリプトをcronに登録します。/etc/cron.hourly/sleep15.s…

keepalivedがnopreemptモードでは正しく動かない

keepalivedというVRRPを実装したオープンソースモジュールがあります。Linux上で動きます。VRRPには、preemptモードとnopreemptモードがあるのですが、keepalivedではnopreemptモードが正しく動きません。FAULT状態のマシンが障害から回復したとき、そのマシ…

タイムアウトを設定してsystem関数を使いたい

LinuxのC言語では「タイムアウトを設定してsystem関数を使いたい」と思っても、これが思うように出来ません。「プロセスをforkさせて、子プロセスでsystem関数を実行して、親プロセスがタイムアウト時に子プロセスを殺せば良い」と思うかも知れませんが、そ…