No Such Blog or Diary

«Prev || 1 | 2 | 3 | 4 | 5 |...| 19 | 20 | 21 || Next»

LDAP でハマった……

OpenDLAP のデフォルト URI が ldapi:///... とかなっていて,自身がサーバのときにはこれで動くのだけど自分以外がサーバのときにはこれでは動かない(ldapi は Unix socket を使うらしい?).i を取って ldap://ldapserver/ と書かないといけない.

これに気づかずハマった.なんで変なのがデフォルト値になっとるんだ……

Let’s Encrypt を使う

SSL 使うためにサーバ証明書が欲しいので,Public Beta になった Let’s Encrypt を使ってみた.

とりあえずGetting Started にあるように,証明を取りたいサーバの上で git を使って手元にスクリプト一式を持ってきて動かす:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

すると必要な物が勝手にインストールされて準備完了(内部で sudo でも使ってるのかね.事前に sudo 使ってたのでよく分からず).

あとは初回の証明取得を指示通りのコマンド1行で証明取得できる.例えば証明を取りたいサーバの FQDN が www.example.com だとしたら -d の後にそれを書いてスクリプト実行:

./letsencrypt-auto certonly --standalone -d www.example.com

なお,外部からこのサーバの https (443) のポートにアクセスできないといけないらしい.最初 80 だけ開けてたけどダメで,80を閉じて 443 を開けたら OK だった(verbose オプションを付けてスクリプトの動きを追ったら https 使ってた).でも 80 を Listen している apache とか居るとコケるので apache とかを停めておく必要がある.ひょっとすると 80 と 443 とどっちを使うのかは環境依存だったりするのかもしれない.

そして証明の期限が90日と短いので,cron を使って毎月自動更新とかしておくと安全な気がする.更新は letsencrypt renew でできるけれど期限の残りに関係なく強制的に更新するには --force-renewal を付ける.更新したら SSL を使う連中を起動し直す必要があるので,面倒だからサーバごと再起動する設定:

15 4 1 * * /path/to/letsencrypt/letsencrypt-auto renew --force-renew && reboot

tsort

トポロジカルソートをしてくれるコマンド.エッジ達を与えればいい.エッジは hoge→fuga なら "hoge fuga" のように空白区切りで始点と終点を与える.1 行に 1 エッジ書いてくのが普通な気がするけれど,任意の空白で区切られたトークン列に対して「2n - 1 番目 → 2n 番目」というエッジが定義されるというルールなので,ぶっちゃけ一直線に書いてもいいっぽい.

$ echo "2 1 3 2 4 1 4 2 4 5 5 6 6 1" | tsort
3
4
5
2
6
1

ループ検出もしてくれる.

$ echo "2 1 3 2 4 1 4 2 4 5 5 6 6 1 1 3" | tsort
4
5
6
tsort: -: input contains a loop:
tsort: 1
tsort: 3
tsort: 2
1
3
2

ループ検出してもとりあえず答えを出すという優秀さ.

こんなコマンドがあるとか全然知らんかった.

外部コマンドを使わずに bash だけでテキストファイルをコピーしたい

 .bashrc に export LD_LIBRARY_PATH=~/opt/lib/ と書かれている環境で,glibc を configure --prefix=~/opt とやって make all install とかやってしまった.おかげで新しく実行するコマンドがインストール途中の glibc を見に行ってしまって「ライブラリロードできねーんだよボケ」と吐いて止まってしまう状況に陥った.つまりスタティックリンクされてないような普通の mv, cp, cat, ... なコマンド達が使えない.

この状況から抜け出すには .bashrc の LD_LIBRARY_PATH の設定を消してログインしなおせばいい.最も単純には echo > .bashrc とやってしまえば良いけれど,.bashrc のバックアップを取ってないのでこれをやる前にバックアップを取っておきたい.

ということで,bash の機能だけで .bashrc を .bashrc.bak にコピーするという必要が生じた(ということにした).1分位悩んだ後で思いついた解答:

while read line; do echo $line; done < ~/.bashrc > ~/.bashrc.bak

とりあえず思いついたのがこの回答だったのだけど,もっとスマートにコピーできないのだろうか?

閑話休題.

上記の状況でファイルをコピーする一番楽な方法は,LD_LIBRARY_PATH を空にすることである.

export LD_LIBRARY_PATH=""

これで状況を脱した.

もしくは状況を楽しんだままコピーだけしたいなら,コマンドを打つときにローカルで指定してもいい.

LD_LIBRARY_PATH="" cp .bashrc .bashrc.bak

なお,他のアカウントからどうにかするという手順は面倒なので却下.

sshd_config の PermitRootLogin の without-password

PermitRootLogin without-password とか書かれてパスワード無しで root が入れるのか? とか思ってしまったのだけど,man sshd_config してみたら次のように書かれていた.つまり逆.

If this option is set to “prohibit-password” or “without-password”, password and keyboard-interactive authentication are disabled for root.

without って ~以外 とかいう意味になるんだっけ? prohibit-password と書いてくれれば分かる.

BIND と SSH の挙動がおかしいと思ったら

サーバの時刻が20年前になってたのが原因だった.

症状1: ssh の接続になぜか 15秒くらいかかる.

症状2:BIND が外部のDNSの問い合わせに失敗する(verify failed due to bad signature (keyid=XXXXX): RRSIG validity period has not begun とかいうメッセージが log に出てた).

時刻をそれなりに正しく設定するのはとても大事.

«Prev || 1 | 2 | 3 | 4 | 5 |...| 19 | 20 | 21 || Next»
Search
Feeds

Page Top