ホーム » コンピュータ » Linux (ページ 18)

Linux」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

dhcp-evalの使い方

自宅ネットワークでは、利用する機器の状態を把握するために固定IPアドレスを割り振っているが、DHCP の hardware ethernet で、Mac アドレスをみて配布している。この DHCP のリース時に、状態に合わせた処理を起動するための機能がある。

on commit などで script を実行

on commit , on release , on expiry を設定すると、IPアドレス割り振り時にプログラムを起動できる。

# vi /etc/dhcp/dhcpd.conf
:
# IPアドレス割り振り時に on-commit.sh を起動
on commit {
    set clip = binary-to-ascii(10, 8, ".",
                 leased-address);
    set clhw = binary-to-ascii(16, 8, ":",
                 substring(hardware, 1, 6));
    execute("/etc/dhcp/on-commit.sh", clip, clhw);
}

# vi /etc/dhcp/on-commit.sh
#!/bin/bash
#   IPアドレスを割り振り時にメールを送る
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    echo "$IP $MAC" \
    | /usr/bin/mail -s "dhcp on commit" foo@example.com
fi

on commit の例で示した方法は、DHCPがアドレスをリースする度に呼び出される。スクリプトは同期して行われるため、遅い処理の場合には アドレス割り振りに支障がでるかもしれない。よって、スクリプトはシンプルなものを使う必要がある。

自宅では、host { fixed-address … } で、固定しているとはいえ WiFi なスマホだと、電波強度不足で再接続が発生する時だと、頻繁にメールが届くことになる。接続情報を保存するなどの Script を書かないとウザぃ。

host 毎に script を実行

こういうことができると、状況に合わせてリースを制御したくなる。自宅で使う場合だと、子供が長い時間使っている場合には、IPアドレスのリースを失敗させて、ネットワーク接続を切りたいかもしれない。

こういう場合には、host … { } の中に、execute を埋め込むことができる。しかも、execute で実行される script の返り値で、lease を失敗させることもできる。

# /etc/dhcp/dhcpd.conf
:
host game-machine {
    hardware ethernet 00:11:22:33:44:55 ;
    fixed-address      192.168.11.222 ;
    execute( "/etc/dhcp/lease-check.sh ,
             "192.168.11.222" ,
             "00:11:22:33:44:55" ) ;
}

# vi /etc/dhcp/lease-check.sh

#!/bin/bash
#  DHCP接続を判定する script
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    if [ アドレスを許可する条件 ]; then
        # 接続許可
        exit 1
    else
        # 接続禁止
        exit 0
    fi
fi

注意: 最初 lease-check.sh は許可するときに shell-script 成功時を表す exit 0 を返せばいいとおもったけど、逆だったな。

mineo 宛のメールを取り込む

子供の携帯は、mineo を使っているけど、子供の契約変更(auプラン→docomoプラン)の時に、子供のmineo メール宛に送られている確認メールに気づくのが遅れ、手間取った。

子供の mineo メールのアカウントで、転送設定すればいい…と思ったけど、mineo メールにはそんな機能は無いらしい。gmail で mineo のメールを取り込む方法もあるけど、基本は本人任せで契約変更をしたい時だけメールを確認するのなら、自宅のメールサーバに読み込むほうが手っ取り早そう。

そこで、自宅メールサーバで、mineo.jp のメールを取り込む .fetchmailrc を書き、crontab で fetchmail を実行するように設定した。

メールの日本語化

自宅で動かしている様々な機能で、警告メールを送信することも多いけど、基本英字。日本語でも文字コードが utf-8 なら、mail コマンドで送ることもできるけど、日本語の定番のJISコードで送りたい。そこで、Subject をMIMEエンコード、本文をJISコードで送るスクリプトを設置。

#!/bin/bash
# 日本語のメールを送る(SubjectのMIME化,本文のJIS,Content-Type出力)
# Usage: mail-jp -s SUBJECT -r FROM TO_ADDR ...
SUBJECT=""
FROM=""
TO=""
( # オプション(subject,from)引数処理
  while [ $# -gt 0 ]; do
    case $1 in
      '-s' )
         SUBJECT=$2
         shift
         ;;
      '-r' )
         FROM=$2
         shift
         ;;
      * )
         # レシビの出力
         [ -n "$FROM" ] && echo "From: $FROM"
         [ -n "$SUBJECT" ] \
             && echo "Subject: $SUBJECT" | /usr/bin/nkf -M
         echo 'Content-Type: text/plain charset="iso-2022-jp"'
         echo 'Content-Transfer-Encoding: 7bit'
         break
         ;;
    esac
    shift
  done
  # 引数(to:メールアドレス)
  while [ $# -gt 0 ]; do
    echo "To: $1"
    shift
  done
  echo ""
  # 本文
  /usr/bin/nkf -j
) | /usr/sbin/sendmail -t

apachectl graceful で segmentation fault

以前からたまに発生していた、夜中になると、Webサーバが停止するトラブル。

確認をすると、logrotate あたりの cron で、“apachectl graceful”を実行すると、apache2 の子プロセスが、segmentation fault で落ちている。

最初は、エラーメッセージに geoip あたりのモジュールのエラーが出ていたので、いろいろ調べたけど改善せず。根本の原因ではなかったようで、更新をダメ元でかけているうちに出なくなった。

以前に、同じ症状で、 php7.2 → php7.0 にしていたけど、改めて最新パッケージにするために、最新の php7.3 に切り替える。これにより、graceful をかけても、落ちなくなった。

$ sudo aptitude install php7.3 php7.3-cli php7.3-common
     php7.3-curl php7.3-gd php7.3-imap php7.3-json
     php7.3-mbstring php7.3-mysql
$ sudo a2dismod php7.0
$ sudo a2enmod php7.3
$ sudo /etc/init.d/apache2 restart

しかし、最新の php7.3 にあげたら、wordpress の投稿時に、以下のようなメッセージが表示されるようになった。PHPのcompact()の説明にも、php7.3から E_NOTICE を出すようになったと書いてある。

Notice: compact() : Undefined variable:...

エラー警告は消したくないけど、デバッグモードを外す。

/* /etc/wordpress/config-default.php */
define( 'WP_DEBUG' , false ) ;

悪質なMegaIndexによるcrawl

なんか、Webのアクセスが多いと思ったら、マナーの悪いサーチエンジンMegaIndexによるクローラ。アクセス元 176.9.146.74 を調べると、所在地はアメリカだけど、UserAgent をみると、”Mozilla/5.0 (compatible; MegaIndex.ru/2.0; +http://megaindex.com/crawler)” なんて書いてあるから、ロシアかな。

robots.txt に、”UserAgent: MegaIndex … Disallow /”を書き加え、参考にしたサイトに記載のあった他の悪質クローラも拒否る。(といっても robots.txt 無視されたら効果ないし。)

中国・ロシアとかは、geoip を使いIPアドレスを国単位で拒否しているけど、所在がアメリカじゃあなぁ…User-Agent でも弾いておくか。

Debian25周年

Debian/GNU Linux も25周年らしい。Linuxを使い始めたのは、0.98 の頃だったと思うけど フロッピーディスク 15枚ぐらいでインストールしてたと思う。途中からアップデートの容易さから、ディストリビューションを Debian に乗り換えたのは、Blog が残ってる 2003 年頃だと思う。Woody あたりか。potato も使った覚えが微妙にあるし、もう少し前かなぁ。

夜中にapacheが落ちる

昨日、今日と、夜中に apache が落ちている現象が発生。以前にも同じようなトラブルが起こったよなぁ…と blog に書いた覚えがあって、検索をかけようとしたら、WordPressの検索機能が動かない。phpのmbstringが無いのが原因だった。php のバージョンを php7.0 → php7.2 に変更した際に、php7.2-mbstringが入っていなかったのが原因。”aptitude install php7.2-mbstring”を実行。

php7.2→php7.0に戻す

色々と試すと、apache2 の reload 時に、”apache2ctl graceful” を実行すると、以下のようなエラーが出ている。
Aug  9 18:48:39 perrine kernel: [xxx] apache2[xxx]: segfault at ...
   error 15 in mbstring.so[xxx]
php7.x-mbstring が原因かと思い、消したりしたけど、別のエラーが出る。色々試しても改善せず、ひとまず、php7.2→php7.0 を行う。 そのくせ、php7.0 で動かなかった wordpress の 画像回転とかの php-gd 使ったのが動くようになってるし。

php7.0→php7.2

phpを、php5→php7.0 に更新してから、WordPress の画像回転編集ができなくなっていたが、php7.2 では、使っていた wordpress のプラグインで警告が表示されるのでやめていたけど、php7.2 に更新作業を行った。

警告がでるのが、php のコードを記述できる phpcode widget だった。この機能を使っていたのは、include( “…html” ) を使いたかったため。今回、include ではなく、iframe を使うようにすることで、phpcode を使わないようにした。

ただ、このphpcode のプラグインをアンインストールしようとすると、エラーがでてアンインストールが失敗する。しかたがないので、一時的に php7.2 → php7.0 に切り替えて、phpcode をアンインストールして、再び php7.0 → php7.2 に戻す必要があった。

朝の自動めざましじゃんけんを停止

朝の「めざましじゃんけん」でサーバから赤外線リモコン信号を送ることで、自動で青・赤・緑・黄のボタンを押すプログラムを動かしていた。でも、最近は朝起きた子供が、見たくないニュースやってるとチャンネルを替えるので、機能していないし、週末の応募操作を面倒で忘れるので、自動「めざましじゃんけん」機能を止めた。

一時期は、毎週応募していたけど、最終的に1度もあたらんかったなぁ….

www.googleapis.comの名前引き

自宅では、予定を google-home で自動で喋らせたりするために、gcalcli などのコマンドを使っている。しかし、最近エラーで予定取得に失敗することが増えた。python 関係のライブラリの更新の不整合かと思っていたが、どうも www.googleapis.com の問題のよう。

gcalcli がエラーになったり、成功したりと再現性がないので、エラーメッセージで www.googleapis.com に接続できないっていうし、”nslookup www.googleapis.com” を実行すると、名前引きに失敗する。しかしながら、”nslookup www.googleapis.com 8.8.8.8″ なら成功する。何度か調べていると、通常の nslookup でも名前がひけたりする。意味不明。

bind の設定は….以前、セキュリティ対策で導入した、”OpenDNS (Cisco Umbrella)”を使うようになっている。これが原因か…。bindの設定を修正して、安定して gcalcli が動くようになったかな。
# Cisco Umbrella は、怪しいサイトの可能性の場合、名前引きを失敗させる Open な DNS

Google API を使った攻撃があるのか? OpenDNS にグレー判定されてんの?

Google 検索

My Google   Yahoo

Microsoft

ファンサイト