[РЕШЕНО] Остановка загрузки на /etc/network/interfaces

Автор ecc83, 27 февраля 2017, 19:38:20

« назад - далее »

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

ecc83

Организовал подключение к домашнему wifi, для этого отредактировал файл /etc/network/interfaces

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid (имя сети)
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-key-mgmt WPA-PSK
wpa-psk (ключ сети)


Всё работает, но во время загрузки, когда происходит подключение к сети и "общение" с роутером, вся загрузка останавливается на 10-20 секунд.
Хочу спросить, это нормальное поведение? Нет ли возможности сделать так, чтобы загрузка не останавливалась, а подключение происходило в фоне?

Просто если по какой то причине соединение не будет установлено, например роутер сломался, то компьтер не загрузится?

Пока никаких Network Manager и wicd не устанавливал, думал обойтись возможностями системы.

alsoijw

systemd позволяет запускать несколько юнитов одновременно. Я не силён в этом, но там есть возможность подшаманить.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

ecc83

Цитата: alsoijw от 27 февраля 2017, 21:56:09
systemd позволяет запускать несколько юнитов одновременно.

Прошу прощения, я пока не слишком продвинут в терминологии... что означает "запускать несколько юнитов" ?

qupl

ecc83,  alsoijw хочет сказать, что наблюдаемый эффект, возможно, вызван системой инициализации (да будь проклят Поттеринг и его поделия) systemd, появившейся начиная с Debian jessie. Нужно смотреть как сделать чтобы "юнит" сетевого подключения не тормозил всю остальную загрузку. НЕпротивники systemd, просто обязаны знать как это сделать. Ждать их или искать в гугле.

alsoijw

Подобная тема уже поднималасть. Разумеется что то что находится в /etc/network/interfaces нужно закоментировать.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

ecc83

#5
Цитата: qupl от 28 февраля 2017, 06:25:03
ecc83,  alsoijw хочет сказать, что наблюдаемый эффект, возможно, вызван системой инициализации (да будь проклят Поттеринг и его поделия) systemd, появившейся начиная с Debian jessie.

Ввиду того, что я начал пользоваться Debian только с версии jessie, то я не знаю, как люди жили "в старину", без systemd, и соответственно мне сложно оценить масштаб трагедии

Цитата: qupl от 28 февраля 2017, 06:25:03
НЕпротивники systemd, просто обязаны знать как это сделать. Ждать их или искать в гугле.

Никого ждать мы не будем, пусть лучше они догоняют

Цитата: alsoijw от 28 февраля 2017, 13:24:32
Подобная тема уже поднималасть. Разумеется что то что находится в /etc/network/interfaces нужно закоментировать.

Видел я эту тему ещё до того, как создал свою. Дело в том, что тема то поднималась, но не поднялась. Всмысле никаких выводов, результатов работы и инструкций я там не увидел. Какие то обрывки конфигов, но что с ними делать, куда вписывать и как контролировать результат, там не сказано.
Поэтому я подумал, что там общаются профессионалы и начинающим там делать нечего

Тем не менее вопрос я решил. Разумеется не самостоятельно, кое что подсмотрел в гугле и отредактировал под свои требования.

Задача была такая:

Автоматическое подключение к домашнему wifi с DHCP, используя только возможности системы и консольные утилиты,
без установки дополнительных приложений типа wicd, network-manager и т.п.

Редактирование файла /etc/network/interfaces решает вопрос подключения, но пауза 10-30 сек во время загрузки раздражает, к тому же, я не знаю как себя поведёт компьютер, если связь установлена не будет. Скорее всего он не загрузится вовсе, пока не нажать Ctrl-C или что то подобное.

Решение:
Создание новой службы или по модному "юнита", который будет запускать в фоновом процессе wpa_supplicant для установки соединения.

Порядок действий:

1. Заранее должны быть установлены пакеты: wpasupplicant и wireless-tools

apt-get install wpasupplicant wireless-tools

2. Приводим файл /etc/network/interfaces в девственное состояние.
В нем не должно быть каких либо настроек, кроме этого:

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback


3. Удалить из системы все "настройщики интернета" вместе с их конфигурационными файлами.
4. Перезаргузиться и убедиться, что интернета нет.
5. Отредактировать скрипт.

Проверить имя интерфейса (WIFIDEV=wlan0). Если у кого то отличное от wlan0 - соответственно изменить.
И с самом конце изменить свои настройки wifi. В основном там имя сети и пароль.

Протоколы можно посмотреть при помощи команды:

iwlist wlan0 scan

Пароль генерируется командой:

wpa_passphrase имя_сети пароль_сети > wifi_key

Потом из файла wifi_key скопируете и вставите в файл /etc/wpa_supplicant/wpa_supplicant-wlan0.conf длинную строку psk=**********

Собственно сам скрипт:

Открыть содержимое (спойлер)

#!/bin/bash
clear
WIFIDEV=wlan0

apt-get remove -q -y --purge resolvconf

cat > /etc/systemd/network/00-dhcp-wireless.network << EOF
[Match]
Name=$WIFIDEV

[Network]
DHCP=yes
EOF

cat > /etc/systemd/system/wpa_supplicant@.service << EOF
[Unit]
Description=WPA supplicant daemon (interface-specific version)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=simple
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I

[Install]
Alias=multi-user.target.wants/wpa_supplicant@%i.service
EOF

echo '#!/bin/sh' > /etc/network/if-up.d/dhcp
echo '/sbin/dhclient -d $WIFIDEV &' >> /etc/network/if-up.d/dhcp
chmod +x /etc/network/if-up.d/dhcp

systemctl disable wpa_supplicant.service
systemctl enable systemd-resolved
systemctl enable systemd-networkd
systemctl enable wpa_supplicant@$WIFIDEV
systemctl start systemd-networkd
systemctl start systemd-resolved
systemctl start wpa_supplicant@$WIFIDEV

rm /etc/resolv.conf
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

touch /etc/wpa_supplicant/wpa_supplicant-$WIFIDEV.conf
chmod go-rwx /etc/wpa_supplicant/wpa_supplicant-$WIFIDEV.conf

cat > /etc/wpa_supplicant/wpa_supplicant-$WIFIDEV.conf << EOF
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
   ssid="MyHomeNET"
   scan_ssid=1
   proto=WPA2
   pairwise=CCMP
   key_mgmt=WPA-PSK
   psk=fbf2e843ae212227c40e730234bfd1a0d47d1c9681
}
EOF
[свернуть]

6. Запустить скрипт от имени root и перезагрузиться.

Замечен один глюк в Debian, которого нет в Ubuntu. После инсталляции скрипта, будет создан файл /etc/systemd/network/00-dhcp-wireless.network. В этом файле есть раздел:

[Network]
DHCP=yes


Этого должно быть достаточно, что бы начать получать динамические IP адреса клиентам сети от роутера.
Так вот в Ubuntu всё так и происходит, то есть сеть начинает работать и клиенты уже в сети.
А вот Debian почему то приходится "пнуть" при загрузке командой:

/sbin/dhclient -d wlan0 &

иначе клиент остаётся без адреса

Для этого создается файл /etc/network/if-up.d/dhcp


На этом пожалуй всё


amd_amd

все так и делаю только interfaces не привожу в "девственное состояние" слишком жирно,  лучше закоментить старые записи - вдруг опять конектится к ним придется, со скриптом не пойму как проще - что в него прописать и запустить, что в interfaces сразу прописать ssid и psk, единственная запара с генерацией psk - напридумывали конспираторы мля...

ecc83

Цитата: amd_amd от 01 марта 2017, 19:17:45
interfaces не привожу в "девственное состояние" слишком жирно,  лучше закоментить старые записи - вдруг опять конектится к ним придется

я просто сохранил рядом копию interfaces.backup и в ней все старые настройки.

Только сделайте ему:

chmod 600 /etc/network/interfaces.backup

это что бы враги не подсмотрели пароли


Цитата: amd_amd от 01 марта 2017, 19:17:45
со скриптом не пойму как проще - что в него прописать и запустить, что в interfaces сразу прописать ssid и psk

не совсем понял, про какой скрипт речь? Про тот что я выложил? Так он в interfaces ничего не пишет.
А что нужно вообще сделать?

Цитата: amd_amd от 01 марта 2017, 19:17:45
единственная запара с генерацией psk - напридумывали конспираторы мля...

Чего запара? Если что то не понятно, спрашивайте 

amd_amd

Цитата: ecc83 от 01 марта 2017, 20:06:55не совсем понял, про какой скрипт речь
Цитата: ecc83 от 01 марта 2017, 16:48:43Собственно сам скрипт
я и не говорил что скрипт пишет в interfaces это я пишу в interfaces, но тоже самое что вы предлагаете прописать в скрипт, в остальном все действия полностью схожи

ecc83

Цитата: amd_amd от 01 марта 2017, 21:43:26
это я пишу в interfaces

То есть вы по прежнему пользуетесь загрузкой сети через interfaces?

Вас не напрягает пауза в загрузке, пока комп устанавливает соединение?

Я это всё затеял из за того, что у меня Debian установлен на ssd и вся загрузка, с момента как я выбираю пункт запуска в grub-е и до полной загрузки "рабочего стола", проходит не более 5 секунд. (учитывая, что у меня самодельная сборка, без DE).
А если интернет соединение устанавливается через файл interfaces, то только такое соединение занимает 5-10 секунд. Кошмарно долго в общем

Так вот если это переделать по вышеописанному способу, всё грузится без остановок.

amd_amd

Цитата: ecc83 от 01 марта 2017, 23:49:22Вас не напрягает пауза в загрузке, пока комп устанавливает соединение?
я не замечаю этого, у меня не ссд но все равно грузит быстро - так же примерно 5 сек, потом логин, пароль - пока пальцем натыкаю это даже значительно дольше чем загружается система, но смысл я понял из скрипта сеть появляется быстрее на несколько секунд чем из interfaces

ecc83

Цитата: amd_amd от 02 марта 2017, 16:41:28
логин, пароль - пока пальцем натыкаю это даже значительно дольше чем загружается система

А зачем логин и пароль каждый раз руками вводить?

Если вы не в Пентагоне работаете и государственных тайн на вашем диске не содержится, то выполните от root этот скрипт и
всё будет автоматически. Если надоест, можно будет отменить.


#!/bin/sh
mkdir -p /etc/systemd/system/getty@tty1.service.d
echo '[Service]' | tee /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo 'ExecStart=' | tee -a /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo 'ExecStart=-/sbin/agetty --autologin "user" %I' | tee -a /etc/systemd/system/getty@tty1.service.d/autologin.conf


В последней строчке замените "user" на имя пользователя, под которым входите.

Если потом захочется восстановить ручной вход:

rm -r /etc/systemd/system/getty@tty1.service.d


amd_amd

#12
Цитата: ecc83 от 02 марта 2017, 18:52:58А зачем логин и пароль каждый раз руками вводить?
действительно зачем это надо - сразу в /etc/profile добавить нижней строкой  [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx  тогда вход будет осуществляться без всяких логинов и паролей, а вашей домашней дирректорией станет /  - полный фарш, права root и всякая учетная дрянь отдыхает - ваши привелегии равны привелегиям точки монтирования системы