Lạ nhỉ, không bạn nào dùng F9 và gặp cái lỗi giống tôi sao?
Gác thằng DHCP sang một bên, ta quay lại điều chế "em" này:
Code:
# service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Disabling IPv4 packet forwarding: net.ipv4.ip_forward = 0
[ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: RTNETLINK answers: File exists
Error adding address 192.168.1.3 for eth0.
[ OK ]
Dự đoán nguyên nhân thì đúng như FaL và afterlastangel nói rồi. Giờ ta thử "debug" xem nó phun ra từ đâu.
- Stop network lại
- Start nó lên ở chế độ "debug":
Code:
# sh -x /etc/init.d/network start
...
+ action 'Bringing up interface eth0: ' ./ifup eth0 boot
+ local STRING rc
+ STRING='Bringing up interface eth0: '
+ echo -n 'Bringing up interface eth0: '
Bringing up interface eth0: + '[' '' '!=' '' -a -w /etc/rhgb/temp/rhgb-console ']'
+ shift
+ ./ifup eth0 boot
RTNETLINK answers: File exists
Error adding address 192.168.1.99 for eth0.
+ success 'Bringing up interface eth0: '
...
Như vậy là nó "chết" ở:
./ifup eth0 boot
Lại stop network và chạy tiếp lệnh trên ở "debug mode":
Code:
# sh -x /etc/sysconfig/network-scripts/ifup eth0 boot
...
+ OTHERSCRIPT=/etc/sysconfig/network-scripts/ifup-eth
+ '[' '!' -x /etc/sysconfig/network-scripts/ifup-eth ']'
+ exec /etc/sysconfig/network-scripts/ifup-eth ifcfg-eth0 boot
RTNETLINK answers: File exists
Error adding address 192.168.1.99 for eth0.
Tiếp tục:
Code:
# sh -x /etc/sysconfig/network-scripts/ifup-eth ifcfg-eth0 boot
...
+ LC_ALL=C
+ ip addr ls eth0
+ LC_ALL=C
+ grep -q 192.168.1.99/24
+ arping -q -c 2 -w 3 -D -I eth0 192.168.1.99
+ ip addr add 192.168.1.99/24 brd 192.168.1.255 dev eth0 label eth0
RTNETLINK answers: File exists
+ echo 'Error adding address 192.168.1.99 for eth0.'
Error adding address 192.168.1.99 for eth0.
OK, như vậy là đoạn code này:
Code:
if ! ip addr add ${IPADDR}/${PREFIX} \
brd ${BROADCAST:-+} dev ${REALDEVICE} ${SCOPE} label ${DEVICE}; then
echo $"Error adding address ${IPADDR} for ${DEVICE}."
fi
trong file /etc/sysconfig/network-scripts/ifup-eth phun ra cái warning trên.
Sửa lại đoạn script trên để xem "routing table" trước và sau khi chạy lệnh đó, đồng thời bỏ tùy chọn -q (quiet) trong lệnh arping xem nó phun ra cái gì:
Code:
if ! LC_ALL=C ip addr ls ${REALDEVICE} | LC_ALL=C grep -q "${IPADDR}/${PREFIX}" ; then
route -n
if ! arping -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then
echo $"Error, some other host already uses address ${IPADDR}."
exit 1
fi
route -n
if ! ip addr add ${IPADDR}/${PREFIX} \
brd ${BROADCAST:-+} dev ${REALDEVICE} ${SCOPE} label ${DEVICE}; then
echo $"Error adding address ${IPADDR} for ${DEVICE}."
fi
fi
Code:
# sh -x /etc/sysconfig/network-scripts/ifup-eth ifcfg-eth0 boot
...
+ LC_ALL=C
+ ip addr ls eth0
+ LC_ALL=C
+ grep -q 192.168.1.99/24
+ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
+ arping -c 2 -w 3 -D -I eth0 192.168.1.99
ARPING 192.168.1.99 from 0.0.0.0 eth0
Sent 2 probes (2 broadcast(s))
Received 0 response(s)
+ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
+ ip addr add 192.168.1.99/24 brd 192.168.1.255 dev eth0 label eth0
RTNETLINK answers: File exists
+ echo 'Error adding address 192.168.1.99 for eth0.'
Error adding address 192.168.1.99 for eth0.
Tóm lại, vấn đề mấu chốt là mời mọi người thảo luận về đoạn script ở trên:
Code:
# if ! ip addr add ${IPADDR}/${PREFIX} \
# brd ${BROADCAST:-+} dev ${REALDEVICE} ${SCOPE} label ${DEVICE}; then
# echo $"Error adding address ${IPADDR} for ${DEVICE}."
# fi
xem nó có cần thiết hay không? Bởi vì nếu tôi comment đoạn đó lại và restart network thì mọi chuyện suôn sẻ:
Code:
# s network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
ARPING 192.168.1.99 from 0.0.0.0 eth0
Sent 2 probes (2 broadcast(s))
Received 0 response(s)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[ OK ]