Hatena::Groupfreebsd

弧月いうの FreeBSD 的な何か このページをアンテナに追加 RSSフィード

2016-05-05ひさびさにサーバーいじり

MySQL を 5.1 から 5.6 にしたら、なんか動かなくなった。 01:55 MySQL を 5.1 から 5.6 にしたら、なんか動かなくなった。 - 弧月いうの FreeBSD 的な何か を含むブックマーク はてなブックマーク - MySQL を 5.1 から 5.6 にしたら、なんか動かなくなった。 - 弧月いうの FreeBSD 的な何か MySQL を 5.1 から 5.6 にしたら、なんか動かなくなった。 - 弧月いうの FreeBSD 的な何か のブックマークコメント

エラーには "Unknown/unsupported storage engine: InnoDB" とかなんとか言われ、いろいろググったりしてみるもよく分からず。

とりあえず my.cnf に "innodb_force_recovery=1" と書いたら動くには動いたので、この状態で mysqldump -A して、service mysql-server stop して、/var/db/mysql の中身を空にして、my.cnf からさっきの行を消して、もっかい MySQL を動かして、ダンプした中身を戻してやったら問題なく動くようになった。

めでたし、めでたし。

トラックバック - http://freebsd.g.hatena.ne.jp/yukogets/20160505

2015-02-07

ねむい 18:24 ねむい - 弧月いうの FreeBSD 的な何か を含むブックマーク はてなブックマーク - ねむい - 弧月いうの FreeBSD 的な何か ねむい - 弧月いうの FreeBSD 的な何か のブックマークコメント

何年ぶりかって感じで FreeBSD 10.1-RELEASE を PC-MM1-H1W に新規インストールした。

うちの MuramasaWiFi モジュールを Intel 2200 PRO/Wireless に換装してあるので iwi0 として認識する。

適当にググりながら設定して再起動したらあっさり繋がった、のはいいんだけど、なんか 65% くらいパケロスするのでつらい。pkg install とかやろうにもタイムアウトしたりする。

飽きた。

トラックバック - http://freebsd.g.hatena.ne.jp/yukogets/20150207

2013-04-13

netatalk3 でハマった。 23:21  netatalk3 でハマった。 - 弧月いうの FreeBSD 的な何か を含むブックマーク はてなブックマーク -  netatalk3 でハマった。 - 弧月いうの FreeBSD 的な何か  netatalk3 でハマった。 - 弧月いうの FreeBSD 的な何か のブックマークコメント

前回 netatalk で遊んだのは 2.2 だったと思うけど、特にけつまづいた覚えがなかったので気軽に試してみたらえらいめにあったのでメモ。

ちなみに今回入れたのは netatalk-3.0.2_1,1。


ホームディレクトリがみえない

原因は、/usr/local/etc/afp.conf の設定で

[Homes]
basedir regex = /home

と書いていたこと。ここは "正規化された絶対パス" を書きなさいということになってる。

今の FreeBSD では、特に /home を別パーティションにしたりしてない場合、/home は /usr/home へのシンボリックリンクになってるはず。なので "basedir regex = /usr/home" が正解。

先に言えよ!と思ったけど、afp.conf(5) にご丁寧に /home の例まで挙げて書いてありました。ごめんなちゃい。


共有フォルダにディレクトリが作れない

たとえば、パーミッションが 0777 な /share というディレクトリがあったとする。当然、直接 mkdir すればここにはだれでもディレクトリが作れる状態である。

afp.conf で

[share]
path = /share

とすると、Mac から share と言う名前で見えて接続も出来る。あらかじめ中に置いておいたファイルやディレクトリも見えるし、ローカルからファイルをコピーすることもできる。

なのになぜか、ディレクトリの作成だけが出来ない。「アクセス権がない」旨のエラーが出る。

ググりまくった結果、このようなパッチを見つけた。

これを適用してビルドしなおしたら確かにディレクトリも作成できるようになって一件落着。

なのだけど、ここでは ZFS のバグだと書いてある。確かに最初は ZFS で作成したファイルシステムでやろうとしていたのだが、その後 ZFS ではないディレクトリを共有してもダメだった。謎だけどしょうがない。

トラックバック - http://freebsd.g.hatena.ne.jp/yukogets/20130413

2013-03-31

Monit で FacebookIrcGateway を監視 12:45  Monit で FacebookIrcGateway を監視 - 弧月いうの FreeBSD 的な何か を含むブックマーク はてなブックマーク -  Monit で FacebookIrcGateway を監視 - 弧月いうの FreeBSD 的な何か  Monit で FacebookIrcGateway を監視 - 弧月いうの FreeBSD 的な何か のブックマークコメント

当初、ユーザ権限だとうまく動かなくてハマったのでメモ。

$HOME/bin/fig-run

#!/bin/sh

case $1 in
  start)
    cd /home/qlo/bin/FacebookIrcGateway && env HOME=/home/yukogets /usr/local/bin/ruby ./fig.rb 
>/dev/null 2>&1 &
    echo $! > /home/yukogets/bin/FacebookIrcGateway/fig.pid
    ;;
  stop)    kill -KILL `cat /home/yukogets/bin/FacebookIrcGateway/fig.pid`
    rm /home/yukogets/bin/FacebookIrcGateway/fig.pid
    ;;
  restart)    kill -KILL `cat /home/yukogets/bin/FacebookIrcGateway/fig.pid`
    rm /home/yukogets/bin/FacebookIrcGateway/fig.pid
    cd /home/yukogets/bin/FacebookIrcGateway && env HOME=/home/yukogets /usr/local/bin/ruby ./fig.rb 
>/dev/null 2>&1 &
    echo $! > /home/yukogets/bin/FacebookIrcGateway/fig.pid
    ;;
  *)
    echo "usage: fig-run {start|stop|restart}"
    ;;
esac
exit 0

昨日書いた tig のと大差ないけど、ポイントは fig.rb を実行するときに env HOME=/home/yukogets をはさんだところ。

ruby のことはよくわからないけど、実行時に $HOME/ 以下を読みに行く部分があるらしく、これがないと Monit で uid 指定して実行しても /root 以下の権限がないのでこける。

あ、あと restart) の部分は Monit で使う分には必要ないけど、手動で使うときに便利なのでつけといた。

/usr/local/etc/monit/fig.conf

check process FacebookIrcGateway with pidfile /home/yukogets/bin/FacebookIrcGateway/fig.pid
every 2 cycle
group irc
start program = "/home/yukogets/bin/fig-run start"
  as uid yukogets and gid users
stop program = "/home/yukogets/bin/fig-run stop"
if failed port 16822 then restart

こっちは特に変化なし。


まとめ

書いといてなんだけど、これであってるのかどうかイマイチ自信がないけど、まあ動いてるしいっか。

トラックバック - http://freebsd.g.hatena.ne.jp/yukogets/20130331

2013-03-30おひさしぶりです

Monit を導入してみた 00:24 Monit を導入してみた - 弧月いうの FreeBSD 的な何か を含むブックマーク はてなブックマーク - Monit を導入してみた - 弧月いうの FreeBSD 的な何か Monit を導入してみた - 弧月いうの FreeBSD 的な何か のブックマークコメント

tiarra とか tig とか fig とか cron で起動してあとはほったらかし、だったのだけど、まあちょっとなんとかするかいと思い立ち*1、Monit から起動と監視をできるようにしてみた。


Monit のインストール

$ sudo portinstall sysutils/monit

/usr/local/etc/ に monitrc.sample というのができてるので、

$ cd /usr/local/etc
$ sudo mv monitrc.sample monitrc

などして、これを編集する。

set daemon 60
set logfile syslog facility log_daemon
set mailserver smtp.gmail.com port 587 username "youraccount@gmail.com" password "p@ssw0rd" using tlsv1
set alert youraccount@gmail.com
include /usr/local/etc/monit/*.conf

とりあえずこんな感じ。ちなみにこの set mailserver の行は GmailSMTP を使う設定例で、Monit を動かすサーバで SMTP サービスが動いてるなら "set mailserver localhost" だけでも OK。

※2013/03/31追記:2段階認証をオンにしてる場合、「アプリケーション固有のパスワード」を設定しないといけないので注意。

あと、動かしたいプロセス個別の設定ファイルの置き場所は /usr/local/etc/monit/ 以下にしてみた。ので、

$ sudo mkdir /usr/local/etc/monit

もお忘れなく。

あとは /etc/rc.conf に monit_enable="YES" を追記して、sudo /usr/local/etc/rc.d/monit start をすればとりあえず Monit 自体は動き始める。


プロセスの設定

例として TweetIrcGateway でやってみる。tig 自体の設定は割愛。

tig を start|stop したり、pid ファイルを作ったりするスクリプトを作る。どこでもいいけど $HOME/bin/tig-run にした。

環境変数をなんとかするのめんどくさいらしいので右にならえで絶対パス。

#!/bin/sh

# サーバ上のユーザ名 : yukogets
# tig のインストール先 : $HOME/bin/TwitterIrcGateway
# 適宜読み替えてくださいまし
case $1 in
  start)
    cd /home/yukogets/bin/TwitterIrcGateway && /usr/local/bin/mono ./TwitterIrcGatewayCLI.exe --encoding=utf-8  >/dev/null 2>&1 &
    echo $! > /home/yukogets/bin/TwitterIrcGateway/tig.pid
    ;;
  stop)
    kill -KILL `cat /home/yukogets/bin/TwitterIrcGateway/tig.pid`
    rm /home/yukogets/bin/TwitterIrcGateway/tig.pid
    ;;
  *)
    echo "usage: tig-run {start|stop}"
    ;;
esac
exit 0

これで tig-run start|stop してみて、ちゃんと tig が起動したり停止したり正しく pid ファイルが作られたりすることを確認しておく。

/usr/local/etc/monit/tig.conf を作成する。

check process TweetIrcGateway with pidfile /home/yukogets/bin/TwitterIrcGateway/tig.pid
every 2 cycle
group irc
start program = "/home/yukogets/bin/tig-run start"
  as uid yukogets and gid users
stop program = "/home/yukogets/bin/tig-run stop"
if failed port 16668 then restart

as uid hoge and gid fuga で実行するユーザを設定できる。省略すると root 権限で動作する。

16668番ポート(tig が使用するポート)の反応が無いと、死んだとみなして再起動させる。


反映

$ sudo /usr/local/etc/rc.d/monit reload

で設定ファイルを再読込。あとは自動的に tig を起動して監視してくれる。


まとめ

とりあえず動かすだけならわりと簡単だった。

他にも、メモリや CPU の使用量が閾値を超えたらアラートメールを飛ばすとか、プロセス以外にストレージの使用量やファイルのパーミッションなどいろんなものを監視したりもできるっぽい。

*1:久々に予定のない週末だったので

トラックバック - http://freebsd.g.hatena.ne.jp/yukogets/20130330