LINUX.ORG.RU
ФорумTalks

NixOS 25.05 (Warbler) на Raspberry Pi 5

 , ,


3

1

Если внезапно кто-то захочет пройти этим путём… В общем держу в курсе.

OS и софт:

NixOS with Flakes, Disko, impermanence rootless (aka Erase your darlings), home-manager а главное Nix flake for a fully declarative NixOS on Raspberry Pi

Ванильное ядро Linux не увидит PCIe а соотвественно и nvme/ssd диски. В то же время nvmd/nixos-raspberrypi сделал нам хорошо опакетив форк ядра и загрузчик от малины.

Использованное железо:

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#enable-pcie

В configtxt.nix

  pciex1 = {
    enable = true;
    value = "on";
  };

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#pcie-gen-3-0

В configtxt.nix

  pciex1_gen = {
    enable = true;
    value = "3";
  };

https://www.raspberrypi.com/documentation/computers/configuration.html usb_max_current_enable

Zero if the USB port current limiter was set to the low-limit during boot; or non-zero if the high limit was enabled. The high level is automatically enabled if the power supply claims 5A max-current OR usb_max_current_enable=1 is forced in config.txt

В configtxt.nix

  usb_max_current_enable = {
    enable = lib.mkDefault true;
    value = lib.mkDefault true;
  };

Загрузочная sd карточка:

Cклонировали репу, внимательно прочитали README.md, Да modules/configtxt.nix добавили ssh ключи и нужный софт. Собственно сборка nix build .#installerImages.rpi5

Результат:

> du -h result/sd-image/nixos-installer-rpi5-kernel.img.zst
1,5G    result/sd-image/nixos-installer-rpi5-kernel.img.zst

Дальше банально:

> unxz result/sd-image/nixos-installer-rpi5-kernel.img.zst
> dd if=result/sd-image/nixos-installer-rpi5-kernel.img | pv | dd of=/dev/СМОТРИ_НЕ_ПЕРЕПУТАЙ_КУДА

В установленной системе:

Абстрактный однако, при этом, рабочий пример Disko.nix для двух дисковой установки (ssd поменьше под ОС, ssd побольше под данные) с корнем в ram.

{
  disko.devices = {
    nodev."/" = {
      fsType = "tmpfs";
      mountOptions = [
        "defaults"
        "size=2G"
        "mode=755"
      ];
    };

    disk = {
      main = {
        type = "disk";
        device = "/dev/nvme0n1";
        content = {
          type = "gpt";
          partitions = {

            ESP = {
              priority = 1;
              name = "ESP";
              label = "ESP";
              start = "1M";
              end = "2048M";
              type = "EF00";
              content = {
                type = "filesystem";
                format = "vfat";
                mountOptions = [
                  "noatime"
                  "nodiratime"
                  "umask=077"
                ];
                mountpoint = "/boot";
              };
            };

            nyx = {
              size = "100%";
              name = "MY_NAME";
              label = "MY_NAME";
              content = {
                type = "btrfs";
                extraArgs = [
                  "--label MY_NAME"
                  "-f"
                  "--csum xxhash64"
                  "--features"
                  "block-group-tree"
                ];
                subvolumes = {
                  "home" = {
                    mountpoint = "/home";
                    mountOptions = [
                      "subvol=home"
                      "compress=zstd"
                      "noatime"
                      "ssd"
                      "discard=async"
                      "space_cache=v2"
                    ];
                  };
                  "nix" = {
                    mountpoint = "/nix";
                    mountOptions = [
                      "subvol=nix"
                      "compress=zstd"
                      "noatime"
                      "ssd"
                      "discard=async"
                      "space_cache=v2"
                      "nodev"
                      "nosuid"
                    ];
                  };
                  "log" = {
                    mountpoint = "/var/log";
                    mountOptions = [
                      "subvol=log"
                      "compress=zstd"
                      "noatime"
                      "ssd"
                      "space_cache=v2"
                    ];
                  };
                  tmp = {
                    mountpoint = "/tmp";
                    mountOptions = [ "noatime" ];
                  };

                };
              };
            };

          };
        };
      };
    };

    disk = {
      media = {
        type = "disk";
        device = "/dev/nvme1n1";
        content = {
          type = "gpt";
          partitions = {

            media = {
              size = "100%";
              name = "media";
              label = "media";
              content = {
                type = "btrfs";
                extraArgs = [
                  "--label media"
                  "-f"
                  "--csum xxhash64"
                  "--features"
                  "block-group-tree"
                ];
                subvolumes = {
                  "media" = {
                    mountpoint = "/NAS";
                    mountOptions = [
                      "subvol=media"
                      "compress=zstd"
                      "noatime"
                      "ssd"
                      "discard=async"
                      "space_cache=v2"
                    ];
                  };

                };
              };
            };

          };
        };
      };
    };


  };

  fileSystems = {
    "/var/log".neededForBoot = true;
  };
}

Уничтожение (!!!) всех данных и создание всех разделов на всех дисках:

nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount Disko.nix

Монтирование всех разделов на всех дисках из live sdcart

nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode mount Disko.nix

Из остального, что является существенным, я поправил:

  boot.tmp.useTmpfs = true;
  boot.loader.raspberryPi.bootloader = "kernel";
  boot.loader.raspberryPi.firmwarePath = "/boot"; # /boot/firmware
  boot.kernelParams = [ "console=serial0,115200n8" "console=tty1" "cfg80211.ieee80211_regdom=RU" ];

Выводы

Всё прочее банально, зависит от привычек и вкуса и не требует пояснений. Пациент с описанным сетапом жив. Однако да решение требует пердолинга, свободного времени и желания. За полумесячный период эксплуатации замечены два полных внезапных вайпа системы после обновлений nixos-rebuild switch --flake .#${HOSTNAME} -L и последующей перезагрузки. Причины не выяснены. Мой прогноз - пока что аппстрим NixOS это не примет. Возможно примет позже когда 5ю малину будет поддерживать uboot и ванильное ядро. Всем чмоки в этам чатики. Поздравляю всех выживших с наступившим.

★★★★★

До сих пор не понимаю зачем люди за такие деньги берут малинку вместо минипк

Gary ★★★★★
()
Ответ на: комментарий от mister_me

ИМХО, такое нужно было в статьи писать, а не в толксы.

Нужно? Можешь брать и писать.

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

init_6 ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Я против ничего не имею.

Смысл ради чего я это писал я уже описал. Да на актульной Raspberry Pi OS всё изкоробки.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от Gary

До сих пор не понимаю зачем люди за такие деньги берут малинку вместо минипк

У меня сборка Raspberry Pi 4B 8GB + Netac SATA SSD 2TB + корпус DeskPi Pro. Стоит у роутера, подключена патч-кордом. Питается от DC UPS, выдающего 10 Вт по USB. Крутит qbittorrent-nox, раздает файлы по SMB, для управления поднят SSH. Иксы есть, но выключены.

Да, сейчас у нас свет дают по графику. Типичное отключение длится от 3 до 7 часов и случается 2–3 раза в день.

Бесперебойное питание мини-ПК обошлось бы значительно дороже, а из практических преимуществ я бы получил разве что перекодировку на лету из экзотических кодеков в тот, который аппаратно поддерживается телевизором.

Vidrele ★★★★★
()
Ответ на: комментарий от Vidrele

Типичное отключение длится от 3 до 7 часов и случается 2–3 раза в день.

А зачем тебе малинка при таком длительном отключении? Тут впору подумать о наборе из UPS-ок, чтобы хоть мини-пк и телевизор запитать.

bdrbt
()
Ответ на: комментарий от bdrbt

А зачем тебе малинка при таком длительном отключении?

Торренты продолжают крутиться от копеечного DC UPS. А вместо телевизора можно использовать планшет.

Тут впору подумать о наборе из UPS-ок, чтобы хоть мини-пк и телевизор запитать.

Да, я подумываю о зарядной станции под телевизор. Но тут история следующая: когда вопрос актуализируется, цены удваиваются; когда энергосистему подлатали, а прилетов давно не было, целесообразность покупки становится сомнительной.

Vidrele ★★★★★
()
Ответ на: комментарий от bdrbt

Любая игрушка на N100 будет почти вдвое прожорливей (хоть и более чем вдвое шустрее), а 10 Вт это 10 Вт.

kirill_rrr ★★★★★
()
Ответ на: комментарий от Vidrele

В config.txt:
arm_freq_min=300
core_freq_min=150
v3d_freq_min=150
emmc_freq=200

Дают примерно -1 Вт в режиме простоя. Если укрутить ещё ниже, до 200/100 Мгц - зук начинает трещать и не всегда грузится.

emmc_freq так, на любителя, ничего видимого ваттметром не экономит.

echo 1 > /sys/devices/system/cpu/cpufreq/conservative/ignore_nice_load
echo 10000 > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo 90 > /sys/devices/system/cpu/cpufreq/conservative/up_threshold
echo 70 > /sys/devices/system/cpu/cpufreq/conservative/down_threshold

Для говенора conservative разумеется. sampling_rate - реже проверять загрузку процессора, up_threshold/down_threshold - пороги поднятия и сброса частоты - тут более агресивно держит минимальную частоту чтобы ядра не молотили вхолостую. Дефолт просто абсурдный. По итогу «режим простоя» становится намного шире и включает в себя например воспроизведение видео до 720p. Просадки отзывчивости не замечаю.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от Vidrele

При всём уважении, это самый форс мажорный юзкейс, но окей, в таком случае действительно каждый ватт на счету.

Gary ★★★★★
()
Ответ на: комментарий от kirill_rrr

Если начать считать все допы которые нужны, типа диска, корпуса, вентилятора и т.п. то Pi5 стоит в несколько раз дороже б/у минипкс такими же спеками. При этом на минипк не будет экзотического железа.

Gary ★★★★★
()
Ответ на: комментарий от Gary

б/у

Это ключевая характеристика. А ты купи его новым и сразу с диском и оперативкой. К тому же в этом форм-факторе есть примерно 1 аналог за 160$ если в версии 8Гб. Или обычно это 175-250$ за аналогичные «коробочные» устройства.

Насчёт экзотичности железа - не знаю как Пи5, но малины традиционно «перепрошиваются» простой заменой карты памяти. Какие шансы провернуть это с распаяной emmc на ю-эфи-хтонической-жести на х86? У малинок тоже есть кое-какие преимущества.

kirill_rrr ★★★★★
()
Ответ на: комментарий от Gary

В Киеве и раньше была весьма интересная ситуация со светом. За девять лет тут я стал свидетелем отгоревшего нуля в хрущевке, затопленного распределительного щитка там же, сгоревшей линии на несколько домов в январе в старом фонде, отключений на несколько минут в новостройке среди ночи с соответствующими последствиями для аптайма. Есть плановые работы с отключениями - они тоже становятся неожиданностью, потому что не будешь же сверяться с графиком ради того, что происходит раз в год. В общем, DC UPS хотя бы для роутера не повредит, да и обычный компьютерный не будет лишним, если мсье/мадам предпочитает пекарни ноутбукам.

Vidrele ★★★★★
()
Ответ на: комментарий от kirill_rrr

Какие шансы провернуть это с распаяной emmc на ю-эфи-хтонической-жести на х86?

Сова порвалась, прекрати. Бредик не пишем, ок?)

У малинок тоже есть кое-какие преимущества

🤣🤣🤣 Сколько раз ты написал GPIO? А, ноль раз. 🤣🤣🤣

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от Gary

Это секта свидетелей АРМ, которые настолько эффективные, что им даже не нужно охлаждение.

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от Gary

До сих пор не понимаю зачем люди за такие деньги берут малинку вместо минипк

Я могу накинуть немало причин. К примеру у меня уже есть 4я малина и покупал 5ю я осознавая все её недостатки. Под 5ку, как и под любую другую версию малины, есть огромное количество железа. Это и самые разнообразные корпуса. И модемы LTE. Говоря короче - трудно чего-то не найти под малину!

С учётом ленивого ковыряния по выходным от распаковки до первого запуска уже установленной nixos с nvme ssd харда у меня прошло около месяца. На самом деле меньше. Т.е. если взяться основательно то там основное время упрётся в сборку sdcart. Но кроме гарантированно рабочего варианта я пытался прощупать путь UEFI с ванильным ядром. И время тратил ещё и на это.

init_6 ★★★★★
() автор топика

О чём ещё забыл упомянуть - sdcart, usb, wifi, bluetooth, ethernet подымает и ванильное ядро!

Стандартные nixos-graphical-XX.XX.XXXXXX.xxxxxxxxxxx-aarch64-linux.iso запускаются из любого существующего UEFI под 5ю малину. Но PCIe там скажет вам PCI: OF: of_root node is NULL, cannot create PCI host bridge node и дальше шину PCIe, и всё что на ней будет, вы не увидите. На эту тему вон там https://bugzilla.suse.com/show_bug.cgi?id=1248738 можно почитать. И да я тестировал ВСЕ существующие под 5ю малину и во ВСЕХ режимах работы (ACPI, Device Tree, Смешанный) на самом свежем не тестовом (!) eeprom.

Gnome/Plasma графика подымает сессию и на ванилле. Ускорение я не тестировал. Меня это мало заботит.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от IIIypuk

Всё ещё сижу на 3B.

Захочешь апгрейда лучше рассматривай 4ю малину. Она сейчас относительно дешева и поддерживается аппстримом nixos, в отличие от 5й малины. Либо надо искать что-то более открытое из многочисленных форков малины.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

Ты втираешь какую-то дичь (ц). Вот я буквально на днях купил мини-ПК на N150 за 11600 (сейчас подороже, но, думаю, это временно). 16Гб ОЗУ, 512 SSD. Всё сразу в комплекте - корпус, блок питания, память, диск. Маленький, меньше моего телефона. Жрёт в простое 4Вт, в пике - до 20Вт. Блок питания - 12в * 3А, то есть его прекрасно можно запитать от DC ИБП. И это не ARM, а нормальный Intel, на который ставится любой линукс без таких ухищрений как в этой теме. На мой взгляд он лучше малинки буквально во всём, кроме GPIO.

Beewek ★★★
()
Ответ на: комментарий от Beewek

На мой взгляд он лучше малинки буквально во всём, кроме GPIO.

Это если тебе нужен мини десктоп. Одноплатники не для этого покупают.

yvv1
()
Ответ на: комментарий от yvv1

Или мини-сервер. И это именно то, для чего покупают одноплатники 90% их пользователей. Может быть даже 99%:)

Beewek ★★★
()

Raspberry Pi 5 16GB is available now for $145

Это же без корпуса, вентиляторов, радиаторов, блока питания, накопителя? Т.е. весь комплект под 200 баксов выходит?

Не выгодней ли было купить какой-нибудь миниписи n100-150?

MoldAndLimeHoney ★★
()
Последнее исправление: MoldAndLimeHoney (всего исправлений: 1)
Ответ на: комментарий от Beewek

За всех не нужно говорить. Но если кто-то использует вещи не по назначению, то каждый волен извращаться как хочет, мы все в свободной стране живём.

yvv1
()
Ответ на: комментарий от yvv1

Я тебе оставил целых 10%, так что я всяко не «за всех» говорю:)

Если не сложно, приведи пару примеров, где одноплатник лучше мини-ПК.

Beewek ★★★
()
Ответ на: комментарий от Beewek

Одноплатник это для встраиваемых устройств, типа бортовых компьютеров, роутеров, смарт тв, смарт утюгов и т.д. Везде где энергопотребление и форм фактор решают. Ну и наличие gpio конечно же.

Но конкретно r pi это скорее для экспериментов.

yvv1
()
Последнее исправление: yvv1 (всего исправлений: 1)
Ответ на: комментарий от MoldAndLimeHoney

Jetson-ы, миниписи это всё сорта другого дерьма. Оно не лучше или хуже. Оно другое. И у каждого есть своя аудитория юзеров и сфера применения.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

Это ключевая характеристика.

Пока не заметил недостатков. Самому старому минипк у меня где-то 9 лет, с учетом прошлого владельца. Не удивлюсь если прослужит дольше малинки.

А ты купи его новым и сразу с диском и оперативкой.

Он сразу с диском и оперативкой.

Или обычно это 175-250$ за аналогичные «коробочные» устройства.

В этом ценовом диапазоне стоят б/у оптиплексы, которые уделывают малинку по перформансу в X раз.

Насчёт экзотичности железа - не знаю как Пи5, но малины традиционно «перепрошиваются» простой заменой карты памяти. Какие шансы провернуть это с распаяной emmc на ю-эфи-хтонической-жести на х86?

Какая перепрошивка? Там обычно стоит m2 или 2.5" sata диск, одноразово подключается монитор и клавиатура, накатывается любой линокс с ванильным ядром и сразу всё работает.

Gary ★★★★★
()
Ответ на: комментарий от init_6

Под 5ку, как и под любую другую версию малины, есть огромное количество железа

Но та же ситуация и с x86

С учётом ленивого ковыряния по выходным от распаковки до первого запуска уже установленной nixos с nvme ssd харда у меня прошло около месяца

🥲 По сравнению с 10 минутами которые нужны чтобы задеплоить nixos на обычный пк?

Gary ★★★★★
()
Ответ на: комментарий от Gary

Я не ставил себе целью максимально быстро поднять nixos на неподдерживаемом железе.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от Beewek

Уже https://hkar.ru/1adNX

Причём это Озон, который может продать тебе классный дешёвый смартфон, который СЛУЧАЙНО окирпичивается в новогоднюю ночь просто лёжа на столе.

на который ставится любой линукс без таких ухищрений как в этой теме.

Проблема не в «любом линуксе», проблема в НиксОС. Дистрибутивы подмалину распаковываются проще чем нормальная установка на х86.

На мой взгляд он лучше малинки буквально во всём, кроме.

GPIO тут вообще ни при чём, её уже присобачили в х86. Ты забываешь что малиновая инфраструктура создавалась больше 10 лет, а первые сопоставимые по размерам, цене и экономичности х86 появились года 3 назад и всё ещё требуют пердолинга. А сказки про «возьми плату от нетбука на атоме....» так и остаются лютым колхозом.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от Gary

Какая перепрошивка? Там обычно стоит m2 или 2.5" sata диск

А при его перетыкании происходит также замена ю-эфи настроек? Прошивка Пи4 всё ещё не зависит от содержимого наплатного чипа и о случаях программного окирпиивания я ещё не слышал. На любой ю-эфи ты рискуешь просто тупозапуская там винду или линукс/системд.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

Уже https://hkar.ru/1adNX

Я ведь написал, что сейчас дороже. Новогодние каникулы, люди скучают, покупают всё даже по дурным ценам. Потом снизят обратно.

С другой стороны, найди мне сейчас малинку 5 16Gb дешевле. На том же озоне они от 16700. Наверное где-то можно найти дешевле, но не дешевле чем мой n150. А ведь к малинке надо ещё корпус, блок питания, шилд для ssd, сам ssd и ещё всякое.

Ты забываешь что малиновая инфраструктура создавалась больше 10 лет, а первые сопоставимые по размерам, цене и экономичности х86 появились года 3 назад и всё ещё требуют пердолинга.

Ну так ведь мы про сейчас говорим. И насчёт «требуют пердолинга» я не согласен. Пердолинга всяко меньше, чем с армами.

Beewek ★★★
()
Последнее исправление: Beewek (всего исправлений: 1)
Ответ на: комментарий от Beewek

Пердолинга всяко меньше, чем с армами.

С армами в целом да, но конкретно малина в районе двойки перешла на максимально беспердолинговую схему. И опять же, не знаю как с биосом и загрузчиком пятёрки, но 1-4 организованы в этом плане (и по драйверам тоже) намного лучше чем х86. Стандартный сценарий это «запиши, вставь и работай».

kirill_rrr ★★★★★
()
Ответ на: комментарий от Beewek

Ну так ведь мы про сейчас говорим.

А я свою Пи4 покупал ещё тогда, когда конкурентов просто не было. И онаещё какое то время послужит, и вот тогда то и надо будет посмотреть кто там окажтся лучше на тот момент. Обидно конечно что пятёрка оказалась такой не к месту, но это ещё не повод всё закапывать.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

Стандартный сценарий это «запиши, вставь и работай».

Но только на малинке. А для x86 - запиши на флешку, и она загрузится (и поставится) на любой x86. Хоть n150, хоть i7, хоть Ryzen. Чувствуешь разницу?

я свою Пи4 покупал ещё тогда, когда конкурентов просто не было

У меня этих «малинок» тоже вагон и маленькая тележка. Raspberry Pi 1, 2, 3, 4, Cubieboard (помнишь такую?), Orange pi zero пара штук. Ещё до этого я баловался с TpLink MR3020, тоже вполне себе одноплатник.

Но сейчас я вижу, что все эти одноплатники пытаются догнать по скорости x86, отчасти им это удаётся, но при этом они теряют все свои конкурентные преимущества - низкую цену, безвентиляторность и малое потребление. Так что пятую малинку я не стал покупать, купил n150. И пока мне кажется, что я сделал правильный выбор.

Beewek ★★★
()
Последнее исправление: Beewek (всего исправлений: 1)
Ответ на: комментарий от Beewek

Хоть n150, хоть i7, хоть Ryzen. Чувствуешь разницу?

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

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

У тебя какое-то искаверканое представление о UEFI. Подавляющее большинство материнских плат последние лет 10-15 производится на UEFI и работают без проблем. На них на всех «тупо запускают там винду или линукс/системд». Перетыкание дисков, переустановка системы, etc. ничего не портит.

Единственные истории о программном окирпичивании UEFI систем которые я помню, это 10 лет назад на некоторыех материнках с кривой реализацией UEFI при выполнении rm -rf / удалялись настроки из efivars что приводило к окирпичиванию. Сейчас современное ядро банально не даст этого сделать.

Gary ★★★★★
()
Ответ на: комментарий от Gary

истории о программном окирпичивании UEFI систем

ну не знаю, оффтоп окирпичивает UEFI только в путь. Глядишь, усилиями инженеров MS эту фичу поплотнее внедрят в линукс и иже с ним.

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

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

ну не знаю, оффтоп окирпичивает UEFI только в путь

Есть реальные истории с разбором или это наброс?

Gary ★★★★★
()
Ответ на: комментарий от Gary

Есть реальные истории с разбором или это наброс?

личный опыт..win более одного раза уносил uefi в края вечной охоты.

MKuznetsov ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)