小ネタをまとめてみた。
apcupsdが、systemdと相性が悪いみたいなので、systemdをやめる。
以下のようにパッケージを入れる。
# apt-get install libdbi-perl libdbd-odbc-perl tdsodbc
以下のファイルを変更する。
[FreeTDS] Description = TDS driver Driver = /usr/lib/odbc/libtdsodbc.so Setup = /usr/lib/odbc/libtdsS.so FileUsage = 1
[ODBC Data Sources] freetds = FreeTDS ODBC Driver [freetds] Driver = FreeTDS Description = Microsoft SQL Server Servername = mssql Database = <dbname>
[mssql] host = <hostname> charset = utf-8 client charset = utf-8接続確認。
$ isql -v freetds <user> <passwd>
XFSには、オンラインでデフラグする機能がある。ここでは、フラグメント状態の確認と、デフラグのコマンドを紹介する。
# xfs_db -c frag -r <XFSデバイス>
# xfs_fsr <XFSのマウントポイント>
shredコマンドを使用する。
# shred -n 2 -v /dev/sdz
"-n 2"で、ランダムな値を2回書き込む(デフォルトは25回)。"-z"で最後にゼロで埋める。"-v"で、進捗状況を表示する。
screenを使用して、同じ端末内で複数の仮想端末を切り替える。
$ screen
主なオプションは以下の通り。
オプション | 意味 |
---|---|
<なし> | 新しく仮想端末を起動する。 |
-ls | 現在の仮想端末一覧を表示する。 |
-r [pid.tty.host] | デタッチされている仮想端末にアタッチする。 |
screen上での主な特殊コマンドは以下の通り。
コマンド | 意味 |
---|---|
Ctrl+a d | 現在の仮想端末をデタッチする |
Ctrl+a S | 端末を上下に分ける |
Ctrl+a Tab | 表示中の別の端末に移動 |
Ctrl+a c | 新しい端末を作成 |
Ctrl+a n | 次の端末に切り替える |
Ctrl+a p | 前の端末に切り替える |
rrdtoolで作成される画像に日本語を入れるには、以下のようにパッケージをインストールする。
# apt-get install ttf-unifont
その後、rrdtoolの GPRINT などに、日本語を UTF-8 で指定すれば日本語が表示される。
ちなみに、曜日や月を日本語で出力するには、環境変数 LANG に ja_JP.UTF-8 を指定する。apacheで設定する場合、範囲を制限してSetEnv LANG "ja_JP.UTF-8"と指定すると良い。
3TBのディスクを扱おうとすると、GPTが必要になる。fdiskではGPTに対応していないため、partedを使うことになる。
/dev/sdaをGPTにして、最大サイズのパーティションをRAID用領域として確保するには、以下のように行う。開始位置を1にしないと、「Warning: The resulting partition is not properly aligned for best performance.」と警告された。
# parted /dev/sda (parted) mklabel gpt (parted) mkpart primary 1 -0 (parted) set 1 raid on
初めて使うHDDや、動作の怪しいHDDは、念のためチェックをしたい。ここでは、正常に読み書きできることの確認をする。この方法だと内容はすべて消える*1。
badblocks -b 4096 -ws /dev/sdz
このテストでは、全セクタへの読み書きを4パターン行うので、とても時間がかかる。
2Tのチェックに50時間程度、6T(WD6003FFBX)のチェックに74時間半程度かかった。
セキュリティ的な意味もかねて、表示内容を自動保存する。
ただし、ユーザ権限で書き込む仕組み上、ユーザが消すことは可能なので、悪意のあるユーザに対しては無力となる。
以下のファイルをログインシェルにする。
#!/bin/sh # 表示内容を全て記録する case `echo $0 | sed 's/^.\+_\(.\+\)\.sh$/\1/g'` in tcsh) SHELL=/bin/tcsh _SHELL_OPT=-l ;; bash) SHELL=/bin/bash _SHELL_OPT=--login ;; *) # 起動シェル不明 SHELL=/bin/bash _SHELL_OPT=--login ;; esac /usr/bin/tty -s if [ $? != 0 ]; then exec $SHELL "$@" exit fi LOGDIR=$HOME/.consolelog/`date \+%Y` if [ ! -d $LOGDIR ]; then mkdir -p $LOGDIR fi echo '####### 表示されるすべての内容は記録されます。 #######' exec /usr/bin/script -aq -c "$SHELL $_SHELL_OPT" \ $LOGDIR/`date \+%Y%m%d``tty|sed 's/\(dev\|\/\)//g'`
デフォルトでは、パスワードログインが可能になっていたり、rootでのログインが可能になっていたりするので、両方とも出来なくする(一般ユーザの鍵認証でのみログイン可能)。
PermitRootLogin no PasswordAuthentication no UsePAM no
参考:
http://tdg.uncure.net/blog/index.php?UID=1132579202
カーネルオプションを変えるときは /boot/grub/menu.lst を編集するが、カーネルバージョンアップなどで update-grub が実行されると、編集した部分は消えてデフォルトの設定となってしまう。これでは具合が悪いので、デフォルト値を変更することにする。
/boot/grub/menu.lst の52行目あたりから始まる「DO NOT UNCOMMENT THEM, 〜」以降にデフォルト値が書いてある。変更したい部分を、コメント状態のまま書き換える。
書き換えた後 update-grub を実行すると、反映されるのがわかる。
参考:
http://itmst.blog71.fc2.com/blog-entry-69.html
マザーボードの型番や、接続されている拡張カードの型番、メモリのクロック数など、これ以上ないと言うくらい詳細な情報がわかる。
# apt-get install dmidecode
# dmidecode
デフォルトシェルとしてtcshを使っている場合、何かしらの原因で履歴に変な制御コードが入ったり、多バイト文字がある場合に、まれに~/.historyの読み込み時にセグメントエラーで落ちることがある。この状態になってしまうと、ログインできなくなってしまう。
物理的に離れた場所にマシンがあるなどの理由で、ネットワークからしかログインできない場合は、唯一のログイン方法がたたれてしまいどうしようもなくなる。
この問題を回避するためのよい方法を思いついたので、ここに述べる。
まず、~/.historyがいつ読み込まれるのかに着目する。それには、各設定ファイルが読み込まれる順番を追っていく必要がある。tcshのmanによると、以下の順番で読み込まれるようだ。
このことから、~/.historyの読み込み前後にスクリプトを実行できることがわかる。
これを利用して、~/.historyの読み込み前に一時ファイルを作成し、~/.historyを読み込んだ後に一時ファイルを削除するようにしておけば、次回ログイン時に~/.historyの読み込みで失敗したことが検出できる。
具体的には、以下のようなスクリプトを追加する。
/.cshrc、または~/.tcshrcなど (追加)
#履歴読み込み失敗対策 if ( -f .failed_login && -f .history ) then set tmp_oldname=.history.`date +%Y%m%d%H%M` mv .history $tmp_oldname echo "## 前回のログインで.historyの読み込みに失敗したようです。" echo "## .historyを、${tmp_oldname}にリネームしました。" unset tmp_oldname endif if ( $?tcsh && $?prompt && ! $?GNOME_DESKTOP_SESSION_ID ) then touch .failed_login endif
/.login、または~/.cshdirs (追加)
rm -f .failed_login
自前パッケージでtcsh自体に手を加える方法も紹介しているが、root権限を持っていなかったり、環境を変えたくないなど、バイナリを変更することが出来ない場合は、ここで紹介した方法でも永遠にログインできなくなることは防げる。
cronで、コマンドの実行結果をすべてファイルにリダイレクトして、エラーがあるときは標準出力にも出してメールを飛ばしたいなどで使えそう。
sh系(bashなど)では、以下のようにする。
$ command 2>&1 >> file.log | tee -a file.log
これで、標準出力と標準エラーは"file.log"に出力され、標準エラーは標準出力にも出力される。