mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
Merge branch 'master' of github.com:CopterExpress/clever
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
"author": "Copter Express",
|
||||
"language": "ru",
|
||||
"root": "docs/",
|
||||
"plugins": ["youtube", "richquotes", "disqus", "versions"],
|
||||
"plugins": ["youtube", "richquotes", "versions"],
|
||||
"pluginsConfig": {
|
||||
"disqus": {
|
||||
"shortName": "coex-clever"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
* [Работа с SITL](sitl.md)
|
||||
* [Подключение GPS](gps.md)
|
||||
* [Использование 3G-модема](3g.md)
|
||||
* [Устройство сети RPi](network.md)
|
||||
* Учебник
|
||||
* [Уроки](lessons.md)
|
||||
* [Учебно-методическое пособие](metod.md)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Образ для Raspberry Pi
|
||||
|
||||
## Образ
|
||||
|
||||
На образе установлены:
|
||||
|
||||
* Raspbian Stretch
|
||||
@@ -10,9 +8,8 @@
|
||||
|
||||
**Свежую версию образа можно [скачать на GitHub в разделе Releases](https://github.com/CopterExpress/clever/releases).**
|
||||
|
||||
## Установка образа ОС на MicroSD-карту
|
||||
## Установка образа ОС на MicroSD карту
|
||||
|
||||
Для установки образа воспользуйтесь утилитой [Etcher](https://etcher.io):
|
||||
Для установки образа воспользуйтесь утилитой [Etcher](https://etcher.io).
|
||||
|
||||
[
|
||||
](https://etcher.io)
|
||||
[](https://etcher.io)
|
||||
|
||||
282
docs/network.md
Normal file
282
docs/network.md
Normal file
@@ -0,0 +1,282 @@
|
||||
# Настройка Wi-Fi
|
||||
|
||||
Wi-Fi адаптер на Raspberry Pi имеет два основных режима работы:
|
||||
1. **Режим клиента** – RPi подключается к существующей Wi-Fi сети.
|
||||
2. **Режим точки доступа** – RPi создает Wi-Fi сеть, к которой вы можете подключиться.
|
||||
|
||||
При использовании [образа для RPi](microsd_images.md) по умолчанию Wi-Fi адаптер работает в режиме точки доступа.
|
||||
|
||||
## Инструкция для переключения адаптера в режим клиента
|
||||
|
||||
1\. Выключите службу `dnsmasq`.
|
||||
|
||||
```bash
|
||||
sudo systemctl stop dnsmasq
|
||||
sudo systemctl disable dnsmasq
|
||||
```
|
||||
|
||||
2\. Включите получение IP адреса на беспроводном интерфейсе DHCP клиентом.
|
||||
|
||||
Для этого удалите следующие строки
|
||||
|
||||
```
|
||||
interface wlan0
|
||||
static ip_address=192.168.11.1/24
|
||||
```
|
||||
|
||||
из файла `/etc/dhcpcd.conf` вручную или введите следующие команды.
|
||||
|
||||
```bash
|
||||
sudo sed -i 's/interface wlan0//' /etc/dhcpcd.conf
|
||||
sudo sed -i 's/static ip_address=192.168.11.1\/24//' /etc/dhcpcd.conf
|
||||
```
|
||||
|
||||
3\. Настройте `wpa_supplicant` для подключения к существующей точке доступа.
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
|
||||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
||||
update_config=1
|
||||
country=GB
|
||||
|
||||
network={
|
||||
ssid="CLEVER"
|
||||
psk="cleverwifi"
|
||||
}
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
где `CLEVER` – название сети, а `cleverwifi` – пароль.
|
||||
|
||||
4\. Перезапустите службу `dhcpcd`.
|
||||
|
||||
```bash
|
||||
sudo systemctl restart dhcpcd
|
||||
```
|
||||
|
||||
## Инструкция для переключения адаптера в режим точки доступа
|
||||
|
||||
1\. Включите статический IP адрес на беспроводном интерфейсе.
|
||||
|
||||
Для этого добавьте следующие строки
|
||||
|
||||
```
|
||||
interface wlan0
|
||||
static ip_address=192.168.11.1/24
|
||||
```
|
||||
|
||||
в файл `/etc/dhcpcd.conf` вручную или введите следующую команду
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee -a /etc/dhcpcd.conf
|
||||
interface wlan0
|
||||
static ip_address=192.168.11.1/24
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
2\. Настроите wpa_supplicant на работу в режиме точки доступа.
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
|
||||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
||||
update_config=1
|
||||
country=GB
|
||||
|
||||
network={
|
||||
ssid="CLEVER-$(head -c 100 /dev/urandom | xxd -ps -c 100 | sed -e 's/[^0-9]//g' | cut -c 1-4)"
|
||||
psk="cleverwifi"
|
||||
mode=2
|
||||
proto=RSN
|
||||
key_mgmt=WPA-PSK
|
||||
pairwise=CCMP
|
||||
group=CCMP
|
||||
auth_alg=OPEN
|
||||
}
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
3\. Перезагрузите службу `dhcpcd`.
|
||||
|
||||
```bash
|
||||
sudo systemctl restart dhcpcd
|
||||
```
|
||||
|
||||
4\. Включите службу `dnsmasq`.
|
||||
|
||||
```bash
|
||||
sudo systemctl enable dnsmasq
|
||||
sudo systemctl start dnsmasq
|
||||
```
|
||||
|
||||
___
|
||||
|
||||
Ниже вы можете узнать больше о том, как устроена работа с сетью на RPi.
|
||||
|
||||
# Устройство сети RPi
|
||||
Работа сети на образе **2017-11-29-raspbian-stretch-lite** поддерживается двумя предустановленными службами:
|
||||
* **networking** — служба включает все сетевые интерфейсы в момент запуска [5].
|
||||
* **dhcpcd** — служба обеспечивает настройку адресации и маршрутризации на интерфейсах, полученных динамически или указаных в файле настроек статически.
|
||||
|
||||
Для работы в режиме роутера (точки доступа) RPi необходим DHCP сервер. Он служит для автоматической выдачи настроек текущей сети подключившимся клиентам. В роли такого сервера может выступать `isc-dhcp-server` или `dnsmasq`.
|
||||
|
||||
## dhcpcd
|
||||
|
||||
Начиная с Raspbian Jesse настройки сети больше не задаются в файле `/etc/network/interfaces`. Теперь за выдачу адресации и настройку маршрутизации отвечает `dhcpcd` [4].
|
||||
|
||||
По умолчанию на всех интерфейсах включен dhcp-клиент. Настройки интерфейсов меняются в файле `/etc/dhcpcd.conf`. Для того, чтобы поднять точку доступа необходимо прописать статический ip-адрес. Для этого в конец файла необходимо добавить следующие строки:
|
||||
|
||||
```
|
||||
interface wlan0
|
||||
static ip_address=192.168.11.1/24
|
||||
```
|
||||
|
||||
> **Note** Если интерфейс является беспроводным (wlan), то служба `dhcpcd` триггерит `wpa_supplicant` [13], который в свою очередь работает непосредственно с wifi-адаптером и переводит его в заданное состояние.
|
||||
|
||||
## wpa_supplicant
|
||||
|
||||
**wpa_supplicant** – служба конфигурирует Wi-Fi адаптер. Служба `wpa_supplicant` работает не как самостоятельная (хотя как таковая существует), а запускается как дочерний процесс от `dhcpcd`.
|
||||
|
||||
Конфигурационный файл по умолчанию должен иметь путь `/etc/wpa_supplicant/wpa_supplicant.conf`.
|
||||
Пример конфигурационного файла:
|
||||
|
||||
```
|
||||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
||||
update_config=1
|
||||
country=GB
|
||||
|
||||
network={
|
||||
ssid=\"CLEVER-SMIRNOV\"
|
||||
psk=\"cleverwifi\"
|
||||
mode=2
|
||||
proto=RSN
|
||||
key_mgmt=WPA-PSK
|
||||
pairwise=CCMP
|
||||
group=CCMP
|
||||
auth_alg=OPEN
|
||||
}
|
||||
```
|
||||
|
||||
Внутри конфига указываются общие настройки `wpa_supplicant` и параметры для настройки адаптера. Также конфигурационный файл содержит секции `network` – основные настройки Wi-Fi сети такие как SSID сети, пароль, режим работы адаптера. Таких блоков может быть несколько, но используется первый рабочий. Например, если вы указали в первом блоке подключение к некоторой недоступной сети, то адаптер будет настроен следующей удачной секцией, если такая есть. Подробнее о синтаксисе `wpa_supplicant.conf` [TODO WIKI].
|
||||
|
||||
### wpa_passphrase
|
||||
|
||||
`wpa_passphrase` – утилита для создания секции `network`.
|
||||
|
||||
```bash
|
||||
wpa_passphrase SSID PASSWORD
|
||||
```
|
||||
После выполнения команды скопируйте полученную секцию в ваш конфигурационный файл. Можно удалить закоментированное поле `psk` и оставить только поле с хешем пароля, либо наоборот.
|
||||
```bash
|
||||
network={
|
||||
ssid="SSID"
|
||||
#psk="PASSWORD"
|
||||
psk=c2161655c6ba444d8df94cbbf4e9c5c4c61fc37702b9c66ed37aee1545a5a333
|
||||
}
|
||||
```
|
||||
|
||||
### Несколько Wi-Fi адаптеров
|
||||
В системе может быть несколько Wi-Fi адаптеров. Если для них корректно подключены драйвера, то их можно увидеть вызвав `ifconfig` (например wlan0 и wlan1).
|
||||
|
||||
Если у вас несколько адаптеров, для всех будет использоваться одна и таже самая рабочая секция `network`. Это связано с тем, что для каждого интерфейса, `dhcpcd` отдельно создает по дочернему процессу `wpa_supplicant`, в котором выполняется один тот же код (т. к. конфиг один и тот же).
|
||||
|
||||
Для работы нескольких адаптеров с отдельными настройками для каждого, в стандартном вызываемом скрипте `dhcpcd` реализован механизм запуска разных конфигурационных скриптов. Для его использования необходимо переименовать стандартный файл конфига по следующему образцу: `wpa_supplicant-<имя интерфейса>.conf`, например `wpa_supplicant-wlan0.conf`.
|
||||
|
||||
Для применения настроек необходимо перезапустить родительский процесс - службу `dhcpcd`. Сделать это можно следующей командой:
|
||||
```bash
|
||||
sudo systemctl restart dhcpcd
|
||||
```
|
||||
## DHCP сервер
|
||||
|
||||
### dnsmasq-base
|
||||
`dnsmasq-base` – консольная утилита, не являющаяся службой, для использования dnsmasq как службы надо установить пакет `dnsmasq`.
|
||||
|
||||
```bash
|
||||
sudo apt install dnsmasq-base
|
||||
```
|
||||
|
||||
```bash
|
||||
# Вызов dnsmasq-base
|
||||
sudo dnsmasq --interface=wlan0 --address=/clever/coex/192.168.11.1 --no-daemon --dhcp-range=192.168.11.100,192.168.11.200,12h --no-hosts --filterwin2k --bogus-priv --domain-needed --quiet-dhcp6 --log-queries
|
||||
|
||||
# Подробнее о dnsmasq-base
|
||||
dnsmasq --help
|
||||
|
||||
# или
|
||||
man dnsmasq
|
||||
```
|
||||
|
||||
### dnsmasq
|
||||
|
||||
```bash
|
||||
sudo apt install dnsmasq
|
||||
```
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee -a /etc/dnsmasq.conf
|
||||
interface=wlan0
|
||||
address=/clever/coex/192.168.11.1
|
||||
dhcp-range=192.168.11.100,192.168.11.200,12h
|
||||
no-hosts
|
||||
filterwin2k
|
||||
bogus-priv
|
||||
domain-needed
|
||||
quiet-dhcp6
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
### isc-dhcp-server
|
||||
|
||||
```bash
|
||||
sudo apt install isc-dhcp-server
|
||||
```
|
||||
|
||||
```bash
|
||||
# https://www.shellhacks.com/ru/sed-find-replace-string-in-file/
|
||||
sed -i 's/INTERFACESv4=\"\"/INTERFACESv4=\"wlan0\"/' /etc/default/isc-dhcp-server
|
||||
```
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee /etc/dhcp/dhcpd.conf
|
||||
subnet 192.168.11.0 netmask 255.255.255.0 {
|
||||
range 192.168.11.11 192.168.11.254;
|
||||
#option domain-name-servers 8.8.8.8;
|
||||
#option domain-name "rpi.local";
|
||||
option routers 192.168.11.1;
|
||||
option broadcast-address 192.168.11.255;
|
||||
default-lease-time 600;
|
||||
max-lease-time 7200;
|
||||
}
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee /etc/network/if-up.d/isc-dhcp-server && sudo chmod +x /etc/network/if-up.d/isc-dhcp-server
|
||||
#!/bin/sh
|
||||
if [ "\$IFACE" = "--all" ];
|
||||
then sleep 10 && systemctl start isc-dhcp-server.service &
|
||||
fi
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
|
||||
## Ссылки
|
||||
|
||||
1. [habr.com: Linux WiFi из командной строки с wpa_supplicant](https://habr.com/post/315960/)
|
||||
2. [wiki.archlinux.org: WPA supplicant (Русский)](https://wiki.archlinux.org/index.php/WPA_supplicant_(Русский))
|
||||
3. [blog.hoxnox.com: WiFi access point with wpa_supplicant](http://blog.hoxnox.com/gentoo/wifi-hotspot.html)
|
||||
4. [dmitrysnotes.ru: Raspberry Pi 3. Присвоение статического IP-адреса](http://dmitrysnotes.ru/raspberry-pi-3-prisvoenie-staticheskogo-ip-adresa)
|
||||
5. [thegeekdiary.com: Linux OS Service ‘network’](https://www.thegeekdiary.com/linux-os-service-network/)
|
||||
6. [frillip.com: USING YOUR NEW RASPBERRY PI 3 AS A WIFI ACCESS POINT WITH HOSTAPD](https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/) (также здесь есть инструкция по настройке форвардинга для использования RPi в качестве шлюза для выхода в интернет)
|
||||
7. [habr.com: Настраиваем ddns-сервер на GNU/Linux Debian 6](https://habr.com/sandbox/30433/) (Хорошая статья по настройке ddns-сервера на основе `bind` и `isc-dhcp-server`)
|
||||
8. [pro-gram.ru: Установка и настройка DHCP сервера на Ubuntu 16.04.](https://pro-gram.ru/dhcp-server-ubuntu.html) (Настройка isc-dhcp-server)
|
||||
9. [expert-orda.ru: Настройка DHCP-сервера на Ubuntu](http://expert-orda.ru/posts/liuxnewbie/125--dhcp-ubuntu) (Настройка isc-dhcp-server)
|
||||
10. [academicfox.com: Raspberry Pi беспроводная точка доступа (WiFi access point)](http://academicfox.com/raspberry-pi-besprovodnaya-tochka-dostupa-wifi-access-point/) (Настройка маршрутов, hostapd, isc-dhcp-server)
|
||||
11. [weworkweplay.com: Automatically connect a Raspberry Pi to a Wifi network](http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/) (Есть настройки для создания открытой точки доступа)
|
||||
12. [wiki.archlinux.org: WPA supplicant](https://wiki.archlinux.org/index.php/WPA%20supplicant)
|
||||
13. [wiki.archlinux.org: dhcpcd](https://wiki.archlinux.org/index.php/Dhcpcd#10-wpa_supplicant) (dhcpcd hook wpa_supplicant)
|
||||
@@ -5,4 +5,4 @@
|
||||
|
||||
Пароль: `cleverwifi`.
|
||||
|
||||
TODO: иллюстрация.
|
||||
Для изменения настроек Wi-Fi или получения более детальной информации о устройстве сети на Raspberri Pi прочитайте эту [статью](network.md).
|
||||
|
||||
@@ -10,6 +10,8 @@ pipeline {
|
||||
|
||||
string(name: 'RPI_DONWLOAD_URL', defaultValue: 'https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-12-01/2017-11-29-raspbian-stretch-lite.zip')
|
||||
// TODO: Add mirrorparameters
|
||||
|
||||
string(name: 'GWBT_URL', defaultValue: 'https://github.com/CopterExpress/clever.git')
|
||||
}
|
||||
environment {
|
||||
DEBIAN_FRONTEND = 'noninteractive'
|
||||
|
||||
@@ -8,10 +8,13 @@ echo -e "\033[0;31m\033[1m$(date) | #1 Write to /etc/wpa_supplicant/wpa_supplica
|
||||
echo "
|
||||
network={
|
||||
ssid=\"CLEVER\"
|
||||
mode=2
|
||||
key_mgmt=WPA-PSK
|
||||
psk=\"cleverwifi\"
|
||||
frequency=2437
|
||||
mode=2
|
||||
proto=RSN
|
||||
key_mgmt=WPA-PSK
|
||||
pairwise=CCMP
|
||||
group=CCMP
|
||||
auth_alg=OPEN
|
||||
}" >> /etc/wpa_supplicant/wpa_supplicant.conf
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #2 Write STATIC to /etc/dhcpcd.conf\033[0m\033[0m"
|
||||
@@ -20,36 +23,23 @@ echo "
|
||||
interface wlan0
|
||||
static ip_address=192.168.11.1/24" >> /etc/dhcpcd.conf
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #3 Write iface to /etc/default/isc-dhcp-server\033[0m\033[0m"
|
||||
echo -e "\033[0;31m\033[1m$(date) | #3 Write dhcp-config to /etc/dnsmasq.conf\033[0m\033[0m"
|
||||
|
||||
# https://www.shellhacks.com/ru/sed-find-replace-string-in-file/
|
||||
sed -i 's/INTERFACESv4=\"\"/INTERFACESv4=\"wlan0\"/' /etc/default/isc-dhcp-server
|
||||
echo "
|
||||
interface=wlan0
|
||||
address=/clever/coex/192.168.11.1
|
||||
dhcp-range=192.168.11.100,192.168.11.200,12h
|
||||
no-hosts
|
||||
filterwin2k
|
||||
bogus-priv
|
||||
domain-needed
|
||||
quiet-dhcp6
|
||||
" >> /etc/dnsmasq.conf
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #4 Write dhcp declaration subnet to /etc/dhcp/dhcpd.conf\033[0m\033[0m"
|
||||
|
||||
echo "subnet 192.168.11.0 netmask 255.255.255.0 {
|
||||
range 192.168.11.11 192.168.11.254;
|
||||
#option domain-name-servers 8.8.8.8;
|
||||
#option domain-name "rpi.local";
|
||||
option routers 192.168.11.1;
|
||||
option broadcast-address 192.168.11.255;
|
||||
default-lease-time 600;
|
||||
max-lease-time 7200;
|
||||
}" >> /etc/dhcp/dhcpd.conf
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #5 Write start script for dhcpd to /etc/network/if-up.d/isc-dhcp-server\033[0m\033[0m"
|
||||
|
||||
echo "#!/bin/sh
|
||||
if [ \"\$IFACE\" = \"--all\" ];
|
||||
then sleep 10 && systemctl start isc-dhcp-server.service &
|
||||
fi
|
||||
" > /etc/network/if-up.d/isc-dhcp-server \
|
||||
&& chmod +x /etc/network/if-up.d/isc-dhcp-server
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #6 Write magic script for rename SSID to /etc/rc.local\033[0m\033[0m"
|
||||
echo -e "\033[0;31m\033[1m$(date) | #4 Write magic script for rename SSID to /etc/rc.local\033[0m\033[0m"
|
||||
|
||||
RENAME_SSID="sudo sed -i.OLD \"s/CLEVER/CLEVER-\$(head -c 100 /dev/urandom | xxd -ps -c 100 | sed -e 's/[^0-9]//g' | cut -c 1-4)/g\" /etc/wpa_supplicant/wpa_supplicant.conf && sudo sed -i '/sudo sed/d' /etc/rc.local && sudo reboot"
|
||||
|
||||
sed -i "19a$RENAME_SSID" /etc/rc.local
|
||||
|
||||
echo -e "\033[0;31m\033[1m$(date) | #7 End of network installation\033[0m\033[0m"
|
||||
echo -e "\033[0;31m\033[1m$(date) | #5 End of network installation\033[0m\033[0m"
|
||||
|
||||
@@ -19,7 +19,7 @@ apt-get install --no-install-recommends -y \
|
||||
lsof \
|
||||
python-pip \
|
||||
git \
|
||||
isc-dhcp-server \
|
||||
dnsmasq \
|
||||
tmux \
|
||||
vim \
|
||||
ipython3 \
|
||||
|
||||
Reference in New Issue
Block a user