Установка и настройка Raspberry Pi 3B c Ubuntu

Инструкция настройки Raspberry Pi 3b и установки Ubuntu 20.04.

Установка системы на флешку

Скачайте архив

wget https://cdimage.ubuntu.com/releases/20.04.2/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz 

Распакуйте архив.

xz -d ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz

Подключите флекшу. Узнайте название устройства.

fdisk -l

У меня команда выводит следующую информацию:

Disk /dev/mmcblk0: 29.1 GiB, 31268536320 bytes, 61071360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x738a4d67

Запишите образ на флешку. Поставьте в параметр "of" свой диск.

sudo dd bs=4M if=ubuntu-20.04.2-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0 conv=fsync status=progress

Подключение к raspberrypi

Установите флешку в raspberrypi, включите ее и подключитесь к ней через клавиатуру.

Когда система загрузится, подождите 2 минуты, до тех пор пока инициализируется cloud init. После этого он позволит ввойти в систему под стандартным паролем.

По умолчанию пароль:

ubuntu - логин
ubuntu - пароль

Когда вы первый раз зайдете в систему, она предложит поменять пароль.

После входа в систему и смены пароля, перейдите под рут

sudo su

Установите часовой пояс

Посмотрите список часовыъ поясов:

timedatectl list-timezones

Установите часовой пояс:

timedatectl set-timezone Asia/Almaty

Настройка локали

Откройте файл /etc/locale.gen и раскоментируйте строки:

en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

выполните комманду

locale-gen

Измените hostname

В файле /etc/hostname укажите название распы, например:

raspa1

Выполните команду:

echo "127.0.0.1 raspa1" >> /etc/hosts

Удаление лишних пакетов

Удалите пакеты:

apt purge fwupd plymouth plymouth-theme-ubuntu-text snapd cloud-init
apt autoremove

перезагрузитесь:

init 6

Подключение к Wi Fi через WPA Supplicant

Создайте файл:

touch /root/wifi.sh
chmod +x /root/wifi.sh

Посмотрите название вашего Wi Fi модуля:

ip a

Он может называться как wlp3s0 или wlan0.

Измените содержимое файла /root/wifi.sh и укажите в нем название вашего Wi Fi модуля. Вместо mynetwork и passphrase укажите свои данные.

wpa_passphrase mynetwork passphrase > /root/wifi.conf
wpa_supplicant -i wlan0 -c /root/wifi.conf &
sleep 10

ip addr add 192.168.1.25/24 dev wlan0
ip route add 192.168.1.0/24 dev wlan0 metric 100
ip route add default via 192.168.1.1 dev wlan0 metric 10

echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "Connected"

Подключитесь к Wi Fi:

/root/wifi.sh

Проверьте интернет:

ping ya.ru

Настройка ssh

Установите ssh:

apt update
apt install openssh-server
systemctl enable ssh
systemctl start ssh

Поменяйте стандартный порт ssh в конфиге nano /etc/ssh/sshd_config

Порт, следует изменить на нестандартный. например:

Port 22050

Запретить авторизацию через root по паролю, только через ключ

PermitRootLogin prohibit-password

Также можете указать:

ClientAliveInterval 5
ClientAliveCountMax 1000

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

AllowUsers ubuntu

Сделайте перезапуск сервиса ssh

service sshd reload

Пробросьте свои ssh ключи на распу

Сгенереруйте у себя ключи, если они не были сгенерированы:

ssh-keygen

Выполните копирование ключей:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p22050 pi@IP-Адрес-Распы

Создайте ssh конфиг nano ~/.ssh/config

Host *
    Protocol 2
    KeepAlive yes
    TCPKeepAlive yes
    ServerAliveInterval 5
    ServerAliveCountMax 100
    Compression no
    #CompressionLevel 9
    #ForwardX11 yes
    UseRoaming no


Host raspa1
    Hostname 192.168.1.25
    User pi
    Port 22050
    IdentityFile ~/.ssh/id_rsa

Настройка сети

Выполняйте эти команды, касательно настройки Wi Fi, не через SSH, а через терминал!

Network Manager очень хороший способ управлять сетью. По умолчанию в Ubuntu он отключен, и нужно поставить его вручную.

Установите программы:

apt-get install network-manager dnsmasq resolvconf

dnsmasq - это мини ДНС сервер. Он удобен, потому что в нем можно прописывать свои хосты, в том числе и wildcard. Плюс он кэширует ДНС запросы.

resolvconf - управляет файлом /etc/resolv.conf

Создайте Wi Fi подключение через Network Manager

Отключитесь от Wi Fi:

killall wpa_supplicant

Перезагрузитесь:

init 6

После перезагрузки, зайдите в систему.

Включите WiFi:

nmcli radio wifi on

Просмотрите список доступных WiFi сетей:

nmcli device wifi list

Подключитесь к сети, используя логин и пароль:

nmcli device wifi connect YourWifiNetwork password YourWifiPassword

Установите метрику по умолчанию:

nmcli c m YourWifiNetwork ipv4.route-metric 10
nmcli c m YourWifiNetwork ipv6.route-metric 10

Установите DNS:

nmcli c m YourWifiNetwork ipv4.ignore-auto-dns yes
nmcli c m YourWifiNetwork ipv4.dns "8.8.8.8 8.8.4.4 192.168.1.1"

Можно также указать статический IP адрес:

nmcli c m YourWifiNetwork ipv4.method manual
nmcli c m YourWifiNetwork ipv4.address1 192.168.1.25/24,192.168.1.1

Настройка Network Manager

Теперь можно подключаться через SSH командой:

ssh raspa1

ключите сервис Network Dispatcher:

systemctl enable NetworkManager-dispatcher.service
systemctl start NetworkManager-dispatcher.service

Измените файл /etc/NetworkManager/NetworkManager.conf

[main]
#auth-polkit=false
plugins=ifupdown,keyfile
systemd-resolved=false
rc-manager=resolvconf
dns=default

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Создайте файл /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf

[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet

Этот файл позволяет указать какие сети будут управляться через Network Manager.

Параметры могут быть следующими:

type:bridge
interface-name:lxc*
interface-name:docker*
interface-name:virtual*

Более подробнее о командах здесь

Настройка dnsmasq и resolvconf

Скопируйте конфиг

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example
echo "" > /etc/dnsmasq.conf

В /etc/dnsmasq.conf пропишите:

port=53
listen-address=127.0.0.1
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
conf-dir=/etc/dnsmasq.d

Если вы хотите прописать свои хосты в системе, вы можете использовать файл /etc/hosts или создать новый файл в папке /etc/dnsmasq.d/examle.conf со следующим содержанием:

# Example
address=/.example/127.0.0.2
address=/ns.example/127.0.0.1
address=/test.example/127.0.0.5

Данный файл говорит dnsmasq резолвить домен .examle, учитывая wildcard запросы.

Отключение ipv6

Если у вас провайдер не поддерживает ipv6 протокол, то имеет смысл его отключить, чтобы разные программы, такие как apt не пробовали обращаться к серверам по ip6 протоколу, который не работает.

Для этого в файл /etc/sysctl.conf нужно добавить строчки:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

и сделать:

sysctl -p

Настройка iptables

Установите iptables

apt install iptables-persistent -y

На вопрос Save current IPv4 rules? и Save current IPv6 rules? ответьте No

При работе с iptables будьте осторожны. Одно неверное движение и доступ к серверу может быть заблокирован!!!

Обратите на порт SSH. Укажите свой порт, вместо 22050.

Пропишите в /etc/iptables/rules.v4 следующее содержимое:

*filter
:INPUT ACCEPT [19:913]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39:3584]
:ALLOW-INPUT - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

# Разрешаем входящие соединения ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22050 -j ACCEPT

# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT

# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT

# Разрешить http
-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A ALLOW-INPUT -j RETURN

COMMIT

Обязателен ENTER в конце (перевод на новую строку).

Скопируйте rules.v4 в rules.v6

cp /etc/iptables/rules.v4 /etc/iptables/rules.v6

Установите новые правила iptables

iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6

Чтобы добавлять новые правила в iptables, например, тот же nginx нужно редактировать файл. Также вы можете выполнить команды

iptables -I ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Они добавят в начало цепочки ALLOW-INPUT два новых правила, но при этом файл не изменят.

Проверьте настройки iptables:

iptables-save

Обязательно проверьте соединение ssh. Попробуйте залогиниться к серверу через отдельный терминал.

Перезагрузите систему:

init 6

Настройка системы

Обновите систему и установите пакеты:

apt-get update
apt-get upgrade
apt-get install mc nano htop aptitude iftop bwm-ng iperf iperf3 iotop tmux screen sshfs net-tools

Включите проверку диска

В файле /boot/firmware/cmdline.txt добавьте параметры:

fsck.mode=force fsck.repair=yes

Это позволит запускать проверку диска при старте распы.

Ограничьте размер логов systemd

Пропишите в /etc/systemd/journald.conf строчку:

SystemMaxUse=2G

Это строчка ограничивает максимальный размер логов в 10 гигабайт. Перезагрузите конфигурацию systemd:

systemctl daemon-reload

Можно также в крон прописать строчку:

journalctl --vacuum-time=30d --vacuum-size=10G

Она будет оставлять логи за 30 дней

Дополнительная настройка локали

создайте файл nano /etc/profile.d/0.locale.sh со следующим содержимым:

export LANG="en_US.UTF-8"
export LANGUAGE="en_US:en"
export LC_CTYPE="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_PAPER="en_US.UTF-8"
export LC_NAME="en_US.UTF-8"
export LC_ADDRESS="en_US.UTF-8"
export LC_TELEPHONE="en_US.UTF-8"
export LC_MEASUREMENT="en_US.UTF-8"
export LC_IDENTIFICATION="en_US.UTF-8"
export EDITOR=nano

Если для пользователя хотите локализацию русскую, то в домашней папке в ~/.bashrc пропишите:

LANG="ru_RU.UTF-8"
LANGUAGE="ru"
export LANG
export LANGUAGE

Отключите лишние службы

systemctl disable apport
systemctl disable cups.service
systemctl disable nmbd.service
systemctl disable ondemand.service
systemctl disable openvpn.service
systemctl disable pppd-dns.service
systemctl disable rsync.service
systemctl disable smbd.service
systemctl disable ufw.service
systemctl disable avahi-daemon.service
systemctl disable cups-browsed.service
systemctl disable bluetooth.service
systemctl disable ModemManager.service
systemctl disable strongswan.service
systemctl disable udisks2.service
systemctl disable multipathd.service
systemctl disable cloud-config.service
systemctl disable cloud-final.service
systemctl disable cloud-init-local.service
systemctl disable cloud-init.service
systemctl disable cryptdisks-early.service
systemctl disable cryptdisks.service
systemctl disable e2scrub@.service
systemctl disable e2scrub_all.service
systemctl disable e2scrub_fail@.service
systemctl disable e2scrub_reap.service 
systemctl disable fwupd-offline-update.service
systemctl disable fwupd.service
systemctl disable lvm2-lvmpolld.service
systemctl disable lvm2-monitor.service
systemctl disable lvm2-pvscan@.service
systemctl disable lvm2.service
systemctl disable lxd-agent-9p.service
systemctl disable lxd-agent.service
systemctl disable ondemand.service
systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd.service
systemctl disable systemd-resolved
systemctl disable networkd-dispatcher
systemctl disable packagekit
systemctl enable NetworkManager-dispatcher.service
systemctl start NetworkManager-dispatcher.service

 

Остались вопросы?

Если вы хотите получить консультацию или оставить комментарий, заполните форму ниже:
Укажите ваше имя:
Укажите вашу почту, чтобы я смог вам ответить:
Напишите ваш вопрос или комментарий: