Доступна видеоинструкция на рутуб и дзен
Краткий обзор
Мой экземпляр Repka Pi 4 Optimal, любезно предоставленный на обзор производителем, за что им огромная благодарность, имеет в себе:
Процессор (CPU): Allwinner H6, ARMv8 Cortex-A53 64-бит (техпроцесс 28 nm) Тактовая частота процессора 1,6-2 GHz.
ОЗУ: SDRAM DDR3 2Гб
ПЗУ: Возможность загрузки ОС с SD карты, EMMC, SPI-NOR Flash, USB Flash
USB: USB 2.0 x 3, USB 3.0 x 1
PCIe: PCIE 2.0 1x
Wi-Fi: 802.11a/b/g/n/ac
Bluetooth: Bluetooth V5.0
Ethernet: RJ45 10/100 Мбит/сек
Интерфейсы: 40 контактов (28 x GPIO, UART,
I2C, SPI, PWM, I2S)
Звук и видео: 3.5 мм (Jack), HDMI
Подключение питания: USB TYPE-C,
на 40 pin разъёме
Дополнительные разъемы: Разъем для PWM вентилятора,
разъем батарейки RTC
Более подробно можно ознакомиться на сайте производителя: https://repka-pi.ru/
Комплектация у меня базовая, а именно: Коробка, водонепроницаемая упаковка и паспорт изделия с краткой инструкцией:
Приступаем к установке ОС на базе ALT Linux startrkits 11 платформа
Образ взят с зеркала Яндекса: https://mirror.yandex.ru/altlinux-starterkits/aarch64/release/
На 28.01.2026 файл образа именуется alt-p11-jeos-systemd-20251212-x86_64.img.xz
!!! Сами сборки стартовых наборов обновляются раз в квартал
На моём ПК установлена ОС ALT Linux 11 поэтому для записи образа на MicroSD буду использовать имеющуюся в репозитории утилиту: alt-rootfs-installer которая сама запишет загрузчик. Для пользователей Windows могу только рекомендовать записать таким же способом через виртуальную машину с пробросом USB. Все действия будут выполняться от root.
Запись образа:
alt-rootfs-installer --target=repka_pi4 --image-in=alt-p11-jeos-systemd-20251212-x86_64.img.xz --media=/dev/sdb
После записи образа нам необходимо на флешку записать ядро для репки, скачать его можно тут (скачиваем kernel-image-repka4-ВерсияЯдра)
После записи образа ОС будет создано 2 раздела, нам необходимо смонтировать второй раздел например в /mnt чтоб сразу записать туда ядро, потому как на идущем в составе сборки ядре нет необходимых драйверов и сеть будет не доступна. Я запишу его в домашнюю директорию рута.
mount /dev/sdb1 /mnt
cp kernel-image-repka4-ВерсияЯдра.rpm /mnt/root/
Отмонтируем флешку и безопасно извлечем:
umount /mnt
eject /dev/sdb
Вставляем флешку в репку и запускаем.
Логин/пароль: root/altlinux (можно сразу установить свой выполнив passwd)
Выполняем инсталляцию ядра и перезагрузку:
rpm -ihv kernel-image-repka4-ВерсияЯдра.rpm
reboot
После перезагрузки сеть по ethernet должна стать доступной и назначаться IP адрес по DHCP. Для дальнейшей настройки нам необходим доступ в интернет.
Создадим пользователя, назначим пароль и добавим в администраторкую группу wheel и audio (для воспроизведения звука):
useradd admin
passwd admin
usermod -aG wheel admin
usermod -aG audio admin
Далее для удобства настройки можно подключиться к устройству по ssh, предварительно запустив ssh сервис:
systemctl enable --now sshd
Подключаемся и логинимся на на рута:
su -
Обновим кэш пакетов, обновим ОС и установим набор системных утилит:
apt-get update
apt-get dist-upgrade -y
apt-get install nmon htop sysstat pciutils usbutils nmap nload ifstat dstat sysstat iotop-c atop ioping lsscsi ncdu tmux tcpdump iperf3 lshw dmidecode wget fio bind-utils cpupower bluez -y
В сборке в качестве сетевой подсистемы выступает systemd-networkd, однако мне привычнее NetworkManager. Потому как для него существует много различных модулей, так же он хорошо документирован и прост в настройке. Кто не согласен может пропустить этот шаг.
apt-get install NetworkManager-wifi NetworkManager-daemon -y
systemctl enable NetworkManager
systemctl disable systemd-networkd
reboot
После перезагрузки возможно сменится IP адрес.
Проверяем что NetworkManager работает и получил адрес по DHCP:
systemctl status NetworkManager
ip a
Проверим наличие ошибок при загрузке ОС:
dmesg | grep -i err
Если есть ошибки, связанные с brcmfmac, исправляем:
cd /lib/firmware/brcm/
ln -s brcmfmac43456-sdio.bin brcmfmac43456-sdio.rbs,repka-pi4.bin
Проверим WiFi-модуль выполнив режим сканирования:
nmcli con
nmcli dev
nmcli dev wifi list
Проверим работу Bluetooth:
systemctl enable --now bluetooth
hciconfig -a
bluetoothctl
[bluetoothctl]> scan on
Настроим синхронизацию времени с российскими NTP-серверами:
mcedit /etc/chrony.conf
Закомментировать строку: pool pool.ntp.org iburst
Добавить в конец файла:
server ntp1.vniiftri.ru
server ntp2.vniiftri.ru
server ntp3.vniiftri.ru
server ntp4.vniiftri.ru
Добавим NTP сервис в автозапуск:
systemctl enable chronyd --now
Тюнинг ОС:
Установим редактор по умолчанию и локаль:
echo 'export EDITOR=mcedit' >> /etc/profile.d/my_prfile.sh
echo 'export LANG="ru_RU.UTF-8"' >> /etc/profile.d/my_prfile.sh
echo 'export LC_ALL="ru_RU.UTF-8"' >> /etc/profile.d/my_prfile.sh
echo 'export LC_CTYPE="ru_RU.UTF-8"' >> /etc/profile.d/my_prfile.sh
chmod +x /etc/profile.d/my_prfile.sh
echo "LANG=ru_RU.UTF-8" > /etc/sysconfig/i18n
echo "SUPPORTED=ru_RU.UTF-8" >> /etc/sysconfig/i18n
echo "LANG=ru_RU.UTF-8" > /etc/locale.conf
echo "FONT=UniCyr_8x16" > /etc/vconsole.conf
source /etc/profile
Чтоб mc переключал текущую директорию:
echo "alias mc='. /usr/lib/mc/mc-wrapper.sh -r'" >> /etc/profile.d/my_prfile.sh
Устанавливаем сою временную зону (например Киров):
timedatectl list-timezones
timedatectl set-timezone Europe/Kirov
Если на плате нет модуля часов реального времени (RTC) то будет выходить ошибка на которую не стоит обращать внимания. Так как hwclock попросту не может найти этот модуль.
Тюнинг параметров ядра:
mcedit /etc/sysctl.d/99-sysctl.conf
Добавить строки:
# Network
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.core.rmem_max = 1073741824
net.core.wmem_max = 1073741824
net.ipv4.tcp_rmem = 1048576 16777216 1073741824
net.ipv4.tcp_wmem = 1048576 16777216 1073741824
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_reordering = 20
net.ipv4.tcp_mem = 1048576 16770216 1073741824
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.ip_forward = 1
# Защита от сетевых атак
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 2048
# Оптимизация для веб-сервера
net.core.somaxconn = 65536
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
# Улучшение маршрутизации и NAT
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Улучшение беспроводного интерфейса (wlan0)
net.core.netdev_budget = 600
net.core.dev_weight = 64
# VM
vm.dirty_bytes = 268435456
vm.dirty_background_bytes = 134217728
vm.dirty_writeback_centisecs = 1000
vm.swappiness = 20
# Kernel
kernel.numa_balancing = 0
kernel.sched_autogroup_enabled = 0
kernel.sched_migration_cost_ns = 50000000
kernel.sched_nr_migrate = 2
kernel.sched_min_granularity_ns = 100000000
kernel.sched_wakeup_granularity_ns = 10000000
Сразу применим параметры и убедимся что нет ошибок:
sysctl -p --system
Тюнинг сетевых интерфейсов
Проверяем текущие настройки :
ethtool -g end0
Видим что буферы TX/RX можно увеличить
Создадим стартап-скрипт который будет выполняться после загрузки ОС:
mkdir /root/scripts/
mcedit /root/scripts/startup.sh
Добавим в него:
#!/bin/bash
/usr/sbin/ethtool -G end0 rx 1024 tx 1024
/usr/sbin/ethtool -G end0 rx 1024 tx 1024
Дадим права на выполнение и добавим задание в cron:
chmod +x /root/scripts/startup.sh
crontab -e
В редакторе добавим в конец строку:
@reboot /root/scripts/startup.sh
Установим и настроим сервис автоматического тюнинга ОС:
apt-get install tuned
systemctl enable --now tuned
tuned-adm list
tuned-adm active
tuned-adm profile balanced
При необходимости создадим файл подкачки (2ГБ):
fallocate -l 2G /var/swapfile
chmod 600 /var/swapfile
mkswap /var/swapfile
swapon /var/swapfile
echo "/var/swapfile none swap sw 0 0" >> /etc/fstab
Для сжатия на лету страниц памяти попадающих в swap можно установить и запустить zswap:
apt-get install zswap
systemctl enable --now zswap.service
Отключим при необходимости IPv6 в NetworkManager
Не смотря на отключение IPv6 в параметрах ядра NetworkManager всё равно будет генерировать IPv6 адрес, поэтому необходимо его отключить в настройках подключения:
nmcli con
nmcli con modify idПодключения ipv6.method disabled
Отключим спящий режим и гибернацию:
systemctl mask hibernate.target suspend.target sleep.target suspend-then-hibernate.target
Настроим звуковую подсистему:
apt-get install alsa-utils amixer
Информация о картах и аудиовыходах:
cat /proc/asound/cards
Воспроизведение звука через jack 3.5:
echo "options snd_soc_ac200 index=0" > /etc/modprobe.d/alsa-base.conf
echo "options sun9i_hdmi_audio index=1" >> /etc/modprobe.d/alsa-base.conf
На всякий случай, но не обязательно:
mcedit /etc/asound.conf
Привести к виду:
pcm.!default {
type hw
card "ac200audio"
device 0
}
ctl.!default {
type hw
card "ac200audio"
}
Настроим каналы звукового выхода:
Список контролов:
amixer -c 0 contents
Проверка и настройка:
amixer -D hw:ac200audio sget 'Master'
amixer -D hw:ac200audio sget 'Line Out'
amixer -D hw:ac200audio sget 'DAC'
amixer -D hw:ac200audio sget 'DAC I2S'
amixer -c 0 sset 'Master' 60%
amixer -D hw:ac200audio sset 'Line Out' on
amixer -c 0 sset 'Line Out' 100%
amixer -D hw:ac200audio sset 'DAC' on
amixer -D hw:ac200audio sset 'DAC I2S' on
amixer -c 0 sset 'DAC I2S' 1%
amixer -c 0 sset 'DAC I2S' 100%
alsactl store
mkdir -p /etc/alsa
mcedit /etc/alsa/state-daemon.conf
Добавить в файл:
state_file /var/lib/alsa/asound.state
state_file.mode 0644
Финальная перезагрузка
reboot
Проверка звука:
apt-get install mpg321
mpg321 Ария_Герой_Асфальта.mp3
alsamixer
После настройки уровней звука выполнить
alsactl store
Доступна видеоинструкция на рутуб и дзен
Готовый образ собранный по этой инструкции на моём сайте