Сайт | Скачать | Видео | Wiki

Автор Тема: Автоподключение к сети (проводной и wi-fi)  (Прочитано 5431 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
 Скрипт /etc/init.d/network тестовая версия
Код
#!/bin/sh
#v003 30.06.13. DdShurick
case $1 in
start)
finddevconf () {
#Проверяем наличие статических настроек для сетевой карты
HWCONF=$(cat /sys/class/net/$IFACE/address | tr [a-f] [A-F]).conf #ex. 20:CF:30:57:EC:A1.conf
 if [ -f /etc/network-wizard/network/interfaces/"$HWCONF" ]; then
. /etc/network-wizard/network/interfaces/"$HWCONF"
  if [ "$STATIC_IP" = "yes" ]; then
#Далее участок старого кода из rc.network
  BROADCAST=$(ipcalc -b "$IP_ADDRESS" "$NETMASK" | cut -f2 -d '=')
   if [ $? -eq 0 ];then
   ifconfig "$IFACE" "$IP_ADDRESS" netmask "$NETMASK" broadcast "$BROADCAST"
    if [ "$DNS_SERVER1" != "0.0.0.0" ]; then
# backup previous one (DdShutick #> а надо ли? здесь может быть путаница между двумя сетями)
mv -f /etc/resolv.conf /etc/resolv.conf.old
echo "nameserver $DNS_SERVER1" > /etc/resolv.conf
if [ "$DNS_SERVER2" != "0.0.0.0" ]; then
echo "nameserver $DNS_SERVER2" >> /etc/resolv.conf
fi
    fi
    if [ "$GATEWAY" ]; then
route add -net default gw "$GATEWAY" #dev $INTERFACE
     if [ $? -eq 0 ]; then #0=ok.
     echo "Default route set through $GATEWAY." >> /tmp/network.log
     else
echo -e "Could not set default route through $GATEWAY.  Please try again.\nNote that Puppy has tried to do this:\nroute add -net default gw $GATEWAY" >> /tmp/network.log #dev $INTERFACE"
     ifconfig "$IFACE" down
# return 1
     fi
   else
echo -e "Interface configuration failed. Please try again.\nWhat Puppy has just tried to do is this:\nifconfig $INTERFACE $IP_ADDRESS netmask $NETMASK broadcast $BROADCAST up" >> /tmp/network.log
ifconfig "$IFACE" down
fi
   fi
continue
#Конец старого кода
 else
 dhcpcd $IFACE &
 echo "interface $IFACE up" >> /tmp/network.log #контроль
  fi
 fi
}

#Получаем список сетевых интерфейсов
ls /sys/class/net/ | grep -v lo > /tmp/network.log
for IFACE in $(ls -r /sys/class/net/ | grep -v lo)
do
#Отбрасываем ppp и т. п.
[ -h /sys/class/net/$IFACE/device ] || continue
ifconfig $IFACE up
echo -n "$IFACE " >> /tmp/network.log #контроль
sleep 2
if [ -d /sys/class/net/$IFACE/wireless ]; then
echo "wireless" >> /tmp/network.log #контроль
[ -f /tmp/iwopen ] && rm /tmp/iwopen
#Получаем список точек доступа и ищем файл конфигурации
iwlist $IFACE sc | grep -E 'Address:|Channel:|Quality|Encryption key:|ESSID:' > /tmp/iwlist
 for MACADDR in $(grep 'Address:' /tmp/iwlist | tr -d ' ' | cut -f 2- -d ':')
 do
  if [ "$(grep -A 3 $MACADDR /tmp/iwlist | grep 'Encryption key:off')" ];then
  grep -A 4 $MACADDR /tmp/iwlist >> /tmp/iwopen #Запомним открытые
  else
 WPA_CONF="$(ls /etc/network-wizard/wireless/wpa_profiles/${MACADDR}*)" || continue 2>/dev/null
  fi
  if [ $WPA_CONF ];then
 echo $WPA_CONF >> /tmp/network.log #контроль
 wpa_supplicant -D wext -i "$IFACE" -c "$WPA_CONF" &
 break
  fi
 done
 if [ -s /tmp/iwopen ]; then
 MAXLEVEL=$(grep -A 2 $MACADDR /tmp/iwopen | grep 'Quality' | cut -f2 -d '-' | sort | head -n 1)
 ESSID=$(grep -A 2 "$MAXLEVEL" /tmp/iwopen | grep ESSID | cut -f2 -d ':' | tr -d '"')
 CHANNEL=$(grep -B 1 "$MAXLEVEL" /tmp/iwopen | grep Channel | cut -f2 -d ':')
 iwconfig $IFACE essid $ESSID key off channel $CHANNEL
 echo "$IFACE essid $ESSID key off channel $CHANNEL" >> /tmp/network.log #контроль
 fi
 T=0
 until [ "$(cat /sys/class/net/$IFACE/carrier)" = 1 ]
 do
 sleep 1
 T="$(expr $T + 1)"
 echo -n "$T " >> /tmp/network.log #контроль
    if [ $T = 10 ]; then
    [ "$(pidof wpa_supplicant)" ] && kill $(pidof wpa_supplicant)
    ifconfig $IFACE down
    echo "interface $IFACE down" >> /tmp/network.log #контроль
    break
    fi
 done
[ $T = 10 ] && continue
finddevconf
else
echo "ethernet" >> /tmp/network.log #контроль
T=0
 until [ "$(cat /sys/class/net/eth0/operstate)" = "up" ]
 do
 sleep 1
 T="$(expr $T + 1)"
 echo -n "$T " >> /tmp/network.log #контроль
    if [ $T = 10 ]; then
    ifconfig $IFACE down
    echo "interface $IFACE down" >> /tmp/network.log #контроль
    break
    fi
 done
[ $T = 10 ] && continue
finddevconf
fi
done
;;
stop)
for IFACE in $(ls /sys/class/net/ | grep -vE 'lo|ppp')
do
[ -d /sys/class/net/$IFACE/wireless ] && [ $(pidof wpa_supplicant) ] && kill $(pidof wpa_supplicant)
ifconfig $IFACE down
done
;;
esac
Используеися вместо /etc/rc.d/rc.network. Автоматически находит открытые wi-fi сети и выбирает с наибольшим сигналом. Закрытые сети настраиваются как и прежде через мастер настроек сети (net-setup.sh), скрипт совместим с ним.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #1 : 26 Февраль 2014, 23:55:49 »
Здесь обновлённый вариант, подключение ускорено за счёт параллельного запуска скриптов.
Прошу протестировать.
« Последнее редактирование: 27 Февраль 2014, 00:01:35 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #2 : 27 Февраль 2014, 10:02:13 »
README пустой. Так задумано или там было описание как тестить , назначение CONFDIR="/etc/network-wizard/network/interfaces/"
WPADIR="/etc/network-wizard/wireless/wpa_profiles/" и т.п.?
Вы сами где тестировали и на каких подключениях?
В выложенном виде трудозатраты на разбор сопоставимы с написанием с нуля
Статический ип есть возможность установить ? GUI будет?
Тест ping-ом 8.8.8.8 - сейчас Rodon выдерет за фвол и проксю. Я везде на пинг шлюза переделывал
Интеграция с systemV systemd upstart возможна?
« Последнее редактирование: 27 Февраль 2014, 10:04:09 от sfs »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #3 : 27 Февраль 2014, 12:23:42 »
README пустой.
Был не пустой. Какие то проблемы cloud.mail.ru. Было написано что куда положить.
lan.sh и wlan.sh и /sbin, network в /etc/init.d
назначение CONFDIR="/etc/network-wizard/network/interfaces/"
WPADIR="/etc/network-wizard/wireless/wpa_profiles/" и т.п.
Специально вынес пути к файлам конфигурации в переменные для лёгкой перестройки под другой стандарт. В данном случае под net-setup.sh.
Вы сами где тестировали и на каких подключениях?
WiFi с выходом в интернет + локальная проводная сеть.
В выложенном виде трудозатраты на разбор сопоставимы с написанием с нуля
??? Вообще-то мне тоже трудно разбираться в чужих каракулях.
Статический ип есть возможность установить ?
Да. Для настройки используется старый проверенный net-setup.sh
GUI будет?
Зачем корове седло? Подключение при наличии настроек происходит автоматически и до подъёма иксов.
Тест ping-ом 8.8.8.8 - сейчас Rodon выдерет за фвол и проксю. Я везде на пинг шлюза переделывал
Пинг шлюза есть и работает
Интеграция с systemV systemd upstart возможна?
Не знаю, я в эти системы так и не въехал.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #4 : 27 Февраль 2014, 12:51:46 »
В Вашем коде как раз разбираться хорошо, но ридми не помешал бы
Как по замыслу (без gui) настраивается стат. ип или закрытый вифи?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #5 : 27 Февраль 2014, 15:51:01 »
ридми не помешал бы
Синхронизировал, теперь есть.
Как по замыслу (без gui) настраивается стат. ип или закрытый вифи?
Я же писал, штатным мастером настройки сети net-setup.sh.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Автоподключение к сети (проводной и wi-fi)
« Ответ #6 : 27 Февраль 2014, 15:54:58 »
Все равно 0 байт