忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

nginxのアクセスログをscribedに出力する必要に迫られ調べてみたが、これといった解決法が見つからなかった。
唯一期待したscriced アドオンは、組み込んでコンパイルしたら既存の設定ファイルでエラーが出るようになり起動しなかった。

【起動時のメッセージ】
 nginx: [emerg] unknown directive "http" in /etc/nginx/nginx.conf:14

しょうがないので、rsyslog経由でscribedに出力することにしてみた。
パッチはここ

で見たところ、syslogパッチのバージョンは1.0.6とある。
nginxアドオンの紹介ページでは、0.8.54以上はこれを使え、みたいな記述があるので大丈夫なんだろうけど、ちょっと心配。なので、ソースコードをあたって、大丈夫という確証をとることにした。
結果を先にいうと、適用しても大丈夫。
patchコマンドは優秀で、パッチファイル中の行番号に少々齟齬があっても正しく適用できるらしい。(manによると)

【man patch(1)より抜粋】
コンテキスト diff やノーマル diff ( ノーマル diff の場合の適用範囲はやや狭い ) の場合、 patch はパッチ中の行番号の誤りを検出することができ、パッチのそれぞれの塊 (hunk) について、正しい位置を見つけようとする。最初は、hunk に書かれた行番号に直前の hunk を適用した際の オフ セットを加減した位置ではないかと推測する。もしそれが正しい位置ではない場合、 patch は hunk 中のコンテキストに一致する行が前後にないかを探す。


検証内容についてはまた今度。
PR
CentOSでVMを作る際、virt-installコマンドでインストールをしていると、再起動したらVMの時刻がずれている、という経験をした人も多いと思う。
対処方法としては、virsh editで、VMの設定情報の下記の箇所を変更すればよい。

変更前)  <clock offset='utc'>
変更後) <clock offset='localtime'>

それで、この変更がどのような影響を及ぼすのだろうと、VMの挙動を見ていたら気になったことがあった。

(1)clock offset がlocaltimeのVMを起動すると、起動中に以下のメッセージがあった。
  rtc_cmos 00:01: setting system clock to 2012-03-15 14:14:47 UTC (1331820887)

(2)clock offset がutcのVMを起動すると、起動中に以下のメッセージがあった。
  rtc_cmos 00:01: setting system clock to 2012-03-15 05:26:15 UTC (1331789175)

(1)→(2)の順番で試してたが、それぞれ行末の丸括弧内の数字に注目すると、時間が前に戻っている。
このことから、以下のような挙動をするんじゃないかと推測している。

【推測】
 (1)VMは起動時に、ホストマシンのUNIXタイムを読み込む。
 (2)clocl offset の設定がutcの場合、VMは時刻としてその値を採用する。
 (3)clock offset の設定がlocaltimeの場合、VMはホストマシンのUNIXタイムに
   ロケールによる修正を加えた値を、時刻として採用する。

時間があるときに裏付けをとってみようと思う。

先週からCentOS5から6への移行を進めているが、またネットワークまわりではまった。
KVMのハイパーバイザーマシンの構築をしているため、一つのボンディングインターフェースに多数のVLANを設定し、それぞれにブリッジインターフェースをひもづけている。

【CentOS5.6でのインターフェース】

bond0---bond0.0011---br0.0011
     |
     --bond0.0012---br0.0012
     |
     --bond0.0013---br0.0013

前回の記事で書いたように、CentOS6ではVLAN設定でVLAN IDの桁数をそろえるため0で埋めることができなくなったようなので、以下のように変更した。

【CentOS6.2でのインターフェース1】

bond0---bond0.11---br0.11
     |
     --bond0.12---br0.12
     |
     --bond0.13---br0.13

■/etc/sysconfig/network-scripts/ifcfg-bond0.11
DEVICE=bond0.11
ONBOOT=yes
BRIDGE=br0.11

■/etc/sysconfig/network-scripts/ifcfg-br0.11
DEVICE=br0.11
TYPE=Bridge
BOOTPROTO=none
DELAY=0

この設定でbr0.11をifupで起動すると、以下のエラーが出て起動できない。

RTNETLINK answers: File exists
エラー: vlan 11をbr0.11としてdev br0に追加でいません

/sbin/ifupの中身をみると、どうやらインターフェース名に「.」を含む場合、それ以下の数字をVLAN IDとして解釈してしまうようだ。
数字以外であれば大丈夫。

■/sbin/ifup
 73 # Ethernet 802.1Q VLAN support
 74 if [ "${VLAN}" = "yes" ] && [ "$ISALIAS" = "no" ]; then
 75     VID=""
 76     MATCH='^.+\.[0-9]{1,4}$'
 77     if [[ "${DEVICE}" =~ $MATCH ]]; then
 78         VID=$(echo "${DEVICE}" | LC_ALL=C sed 's/^.*\.\([0-9]\+\)/\1/')
 79         PHYSDEV=${DEVICE%.*}
 80     fi

なので、ブリッジインターフェースの名前から「.」を抜いて対応することで、無事解決。

【CentOS6.2でのインターフェース2】

bond0---bond0.11---br011
     |
     --bond0.12---br012
     |
     --bond0.13---br013
CentOS5から6への移行の際、VLAN設定でつまづいたのでメモ。

CentOS5で、VLANを利用する際,以下の設定をしていたが、CentOS6ではできなかった。
■/etc/sysconfig/network
VLAN=yes
VLAN_NAME_TYPE=DEV_PLUS_VID

■/etc/sysconfig/network-scripts/ifcfg-bond0.0032
DEVICE=bond0.0032
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.1.232.19
NETMASK=255.255.255.0

この状態で、/etc/init.d/network start すると
■/proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID
bond0.0032       | 26  | bond0

と、意図していないVLANIDが割りあたってしまう。

とりあえず、ifcfg-bond0.32を、以下のように0032から32に変更することで正常になった。
DEVICE=bond0.32
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.1.232.19
NETMASK=255.255.255.0

どうやら /sbin/ifup内部の処理で、以下のようなコマンドが発行されてしまうためのようだ。
ip link add dev bond0.0032 link bond0 type vlan id 0032

sh -x  /sbin/ifup bond0.0532を実行して処理を追うと、CentOS5では/sbin/vconfig でVLANの登録をしていて、vconfigの引数として、$VIDに正しく532が入っていた。

/sbin/ifupのバグか?

【CentOS5での実行結果】
~省略~
+ VID=
+ MATCH='^(eth|hsi|bond)[0-9]+\.[0-9]{1,4}$'
+ [[ bond0.0532 =~ ^(eth|hsi|bond)[0-9]+\.[0-9]{1,4}$ ]]
++ echo bond0.0532
++ LC_ALL=C
++ sed 's/^[a-z0-9]*\.0*//'
+ VID=532
+ PHYSDEV=bond0
+ [[ bond0.0532 =~ \^vlan\[0-9]\{1,4}\? ]]
+ '[' -n 532 ']'
+ '[' '!' -d /proc/net/vlan ']'
+ test -z DEV_PLUS_VID
+ /sbin/vconfig set_name_type DEV_PLUS_VID
+ is_available bond0
+ '[' -z bond0 ']'
+ '[' -d /sys/class/net/bond0 ']'
+ return 0
+ check_device_down bond0
+ LC_ALL=C
+ ip -o link show dev bond0
+ grep -q ,UP
+ return 1
+ '[' '!' -f /proc/net/vlan/bond0.0532 ']'
+ /sbin/vconfig add bond0 532
Added VLAN with VID == 532 to IF -:bond0:-
~省略~

【CentOS6.2での実行結果】
~省略~
+ VID=
+ MATCH='^.+\.[0-9]{1,4}$'
+ [[ bond0.0532 =~ ^.+\.[0-9]{1,4}$ ]]
++ echo bond0.0532
++ LC_ALL=C
++ sed 's/^.*\.\([0-9]\+\)/\1/'
+ VID=0532
+ PHYSDEV=bond0
+ MATCH='^vlan[0-9]{1,4}?'
+ [[ bond0.0532 =~ ^vlan[0-9]{1,4}? ]]
+ '[' -n 0532 ']'
+ '[' '!' -d /proc/net/vlan ']'
+ is_available bond0
+ '[' -z bond0 ']'
+ '[' -d /sys/class/net/bond0 ']'
+ return 0
+ check_device_down bond0
+ LC_ALL=C
+ ip -o link show dev bond0
+ grep -q ,UP
+ return 1
+ '[' '!' -f /proc/net/vlan/bond0.0532 ']'
+ '[' '' = no -o '' = 0 ']'
+ ip link add dev bond0.0532 link bond0 type vlan id 0532
~省略~
PREV ←  HOME
Copyright (C) 2018 技ブロ All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]