Gentooで無線LANを
gentoo
|
comments(0) | 2008/12/30 22:58
設定した時の旧いメモ。WLI-PCI-G54での設定。
#emerge wireless-tools
#emerge ndiswrapper
ドライバをインストールする。私の場合使用しているのがWLI-PCI-G54であるため、wdrv_392.exeを展開した後、 #ndiswrapper -i netcbg54.inf (ただし現在ではbcmwl5aを使用しています。)
/etc/conf.d/netに以下を追加
# wlan0
iface_wlan0="dhcp"
dhcpcd_wlan0="-DN"
iface_<ESSIDを記入>="dhcp"
essid_<ESSIDを記入>="00074DAF9888"
key_<ESSIDを記入>="s:<WEPを記入>"
以上でおしまいですが、/etc/init.d/net.wlan0をどこからか拾ってきて、ちょっと改造して使用しているので下に全文掲載。 私もあまり理解していませんので、不具合等発生した場合は自己責任でお願いします。
#!/sbin/runscript
# Copyright 1999-2003 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /etc/init.d/net.eth0,v 1.30 2003/10/18 18:03:19 faye Exp $
#NB: Config is in /etc/conf.d/net
checkconfig() {
if [ -z "${iface_IFACE}" ]
then
eerror "Please make sure that /etc/conf.d/net has \$iface_$IFACE set"
return 1
fi
}
setup_env() {
# No reason to check these multiple times in the file
iface_IFACE="$(eval echo \$\{iface_${IFACE}\})"
dhcpcd_IFACE="$(eval echo \$\{dhcpcd_${IFACE}\})"
inet6_IFACE="$(eval echo \$\{inet6_${IFACE}\})"
alias_IFACE="$(eval echo \$\{alias_${IFACE}\})"
status_IFACE="$(ifconfig | gawk -v IFACE="${IFACE}" '/Link/ { if ($1 == IFACE) print "up" }')"
if [ -x `which iwconfig` ]; then
wireless_IFACE="$(iwconfig 2>/dev/null | gawk -v IFACE="${IFACE}" '/ESSID/ { if ($1 == IFACE) print "yes" }')"
fi
wireless_IFACE=${wireless_IFACE:-"no"}
if [ -x `which mii-tool` ]; then
link_IFACE=$(mii-tool ${IFACE} 2>/dev/null | gawk '{print $2}')
fi
link_IFACE=${link_IFACE:-"yes"}
}
setup_wireless() {
# Reset to some defaults
iwconfig $IFACE mode Managed
iwconfig $IFACE rate auto
iwconfig $IFACE key off
# iwconfig $IFACE rts off
# iwconfig $IFACE frag off
iwconfig $IFACE essid any
# Initiate a scan
ifconfig $IFACE up
# Wait for a response
sleep 2
# Find known access points
for AP in `iwlist ${IFACE} scan 2>/dev/null | grep ESSID | awk -F: '{print $2}' | sed 's/[-"]//g'`; do
if [ -z ${essid_AP} ]; then
essid_AP="$(eval echo \$\{essid_${AP}\})"
if [ ! -z ${essid_AP} ]; then
# setup variables
key_AP="$(eval echo \$\{key_${AP}\})"
iface_IFACE="$(eval echo \$\{iface_${AP}\})"
if [ "$(eval echo \$\{gateway_${AP}\})" != "" ];
then
gateway="${IFACE}/$(eval echo \$\{gateway_${AP}\})"
fi
fi
fi
done
# Bring interface down to apply changes
ifconfig $IFACE down
#ewarn "Setting wireless parameters ${essid_AP} and ${key_AP}"
iw_param=""
if [ ! -z ${essid_AP} ]; then
iw_param="essid ${essid_AP}"
fi
if [ ! -z ${key_AP} ]; then
iw_param="${iw_param} key ${key_AP}"
fi
iwconfig ${IFACE} ${iw_param}
# Bring the interface up
ifconfig $IFACE up
# Wait for the system to associate
# repair below 20060326 by 2310
# while [ `iwconfig $IFACE | awk '/\<..:..:..:..:..:..\>/{print}' |
# sed 's/^.*\<\(..:..:..:..:..:..\)\>.*$/\1/g'` = FF:FF:FF:FF:FF:FF ]; do
while [ x$ACCESS_POINT_CHECK_VALUE = x -o x$ACCESS_POINT_CHECK_VALUE = xFF:FF:FF:FF:FF:FF ]; do
LC_NUMERIC=C sleep 0.5
ACCESS_POINT_CHECK_VALUE=\
`iwconfig $IFACE | awk '/\<..:..:..:..:..:..\>/{print}' | sed 's/^.*\<\(..:..:..:..:..:..\)\>.*$/\1/g'`
done
return 0
}
start() {
local retval=0
setup_env
checkconfig || return 1
if [ ${wireless_IFACE} == "yes" ]; then
ebegin "Detecting network for ${IFACE}"
setup_wireless
eend 0
fi
ebegin "Bringing ${IFACE} up"
if [ ${link_IFACE} == "no" ];then
retval=1
eend ${retval} "Failed to bring ${IFACE} up"
return ${retval}
fi
if [ "${iface_IFACE}" != "dhcp" ]
then
/sbin/ifconfig ${IFACE} ${iface_IFACE} >/dev/null || {
retval=$?
eend ${retval} "Failed to bring ${IFACE} up"
return ${retval}
}
# ifconfig do not always return failure ..
/sbin/ifconfig ${IFACE} &> /dev/null || {
retval=$?
eend ${retval} "Failed to bring ${IFACE} up"
return ${retval}
}
else
# Check that eth0 was not brough up by the kernel ...
# if [ "${status_IFACE}" != "up" ]
# then
/sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE} >/dev/null || {
retval=$?
eend ${retval} "Failed to bring ${IFACE} up"
return ${retval}
}
# fi
fi
ip_address=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2)
[[ -n ${ip_address} ]] && einfo " ${IFACE} received address ${ip_address}"
eend 0
if [ -n "${alias_IFACE}" ]
then
local x=""
local num=0
local aliasbcast=""
local aliasnmask=""
ebegin " Adding aliases"
for x in ${alias_IFACE}
do
aliasbcast="$(eval echo \$\{broadcast_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')"
if [ -n "${aliasbcast}" ]
then
aliasbcast="broadcast ${aliasbcast}"
fi
aliasnmask="$(eval echo \$\{netmask_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')"
if [ -n "${aliasnmask}" ]
then
aliasnmask="netmask ${aliasnmask}"
fi
ebegin " ${IFACE}:${num}"
/sbin/ifconfig ${IFACE}:${num} ${x} \
${aliasbcast} ${aliasnmask} >/dev/null
num=$((num + 1))
eend 0
done
save_options "alias" "${alias_IFACE}"
fi
if [ -n "${inet6_IFACE}" ]
then
local x=""
ebegin " Adding inet6 addresses"
for x in ${inet6_IFACE}
do
ebegin " ${IFACE} inet6 add ${x}"
/sbin/ifconfig ${IFACE} inet6 add ${x} >/dev/null
eend 0
done
save_options "inet6" "${inet6_IFACE}"
fi
if [ -n "${gateway}" ] && [ "${gateway%/*}" = "${IFACE}" ]
then
ebegin " Setting default gateway"
# First delete any existing routes if it was setup by kernel ..
/sbin/route del default dev ${gateway%/*} &>/dev/null
/sbin/route add default gw ${gateway#*/} dev ${gateway%/*} \
netmask 0.0.0.0 metric 1 >/dev/null || {
local error=$?
ifconfig ${IFACE} down &>/dev/null
eend ${error} "Failed to bring ${IFACE} up"
stop
return ${error}
}
eend 0
fi
# Enabling rp_filter causes wacky packets to be auto-dropped by
# the kernel
if [ -e /proc/sys/net/ipv4/conf/${IFACE}/rp_filter ]
then
echo 1 > /proc/sys/net/ipv4/conf/${IFACE}/rp_filter
fi
# If started by hotplug, this doesn't get done.
# perhaps the right fix is in hotplug
ln -sf /etc/init.d/net.${IFACE} /var/lib/init.d/started/net.${IFACE}
}
stop() {
local myalias="$(get_options alias)"
local myinet6="$(get_options inet6)"
local myinet6="$(get_options inet6)"
local ip_address=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2)
setup_env
ebegin "Bringing ${IFACE} down"
# Also down the inet6 interfaces
if [ -n "${myinet6}" ]
then
local x=""
for x in ${myinet6}
do
/sbin/ifconfig ${IFACE} inet6 del ${x} >/dev/null
done
fi
# Do some cleanup in case the amount of aliases change
if [ -n "${myalias}" ]
then
local x=""
local num=0
for x in ${myalias}
do
/sbin/ifconfig ${IFACE}:${num} down >/dev/null
num=$((num + 1))
done
fi
if [ "${iface_IFACE}" = "dhcp" ]
then
local count=0
# while /sbin/dhcpcd -k ${IFACE} &>/dev/null && [ "${count}" -lt 15 ]
while [ `/sbin/dhcpcd -k ${IFACE} &>/dev/null` ] && [ "${count}" -lt 9 ]
do
# Give dhcpcd time to properly shutdown
sleep 1
count=$((count + 1))
done
if [ "${count}" -ge 9 ]
then
eerror "Timed out trying to stop dhcpcd"
else
[[ -n ${ip_address} ]] && einfo " ${IFACE} released address ${ip_address}"
fi
else
/sbin/ifconfig ${IFACE} down >/dev/null
fi
eend 0
}
# vim:ts=4