Это WIP для пересечения компиляции NIXOS для запуска на целях ARM.
Клонировать последний релиз:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Этот репозиторий был реорганизован, чтобы иметь возможность строить разные доски, если/когда написаны разные. Для создания использования:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Этот репозиторий использует Travis для сохранения свежего кеша Cachix, который вы можете использовать для ускорения ваших сборки:
# install cachix if you haven't already
nix-env -iA cachix -f https://cachix.org/api/v1/install
# use this cache when building
cachix use cross-armedМногие вещи влияют на размер изображения, и в последнее время было сделано много работы, чтобы минимизировать его:
Многие вещи еще предстоит сделать, чтобы удалить остатки x86 с случайного попадания в изображение (например, обновление патчелей Nixos/nixpkgs#33956), и загрязняющие вещества могут быть проверены с помощью ./check-contamination.sh result .
Смотрите обзор изображений для разрыва размеров изображений.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
В настоящее время images/ap-puns предоставляют услугу, которая будет отправлять AP Beacons из Wi-Fi Puns. Это демонстрация, показывающая, как можно создать свою собственную ОС, настроенную на то, чтобы сделать что-то вне коробки. (Обратите внимание, что вам нужен USB -ключ Wi -Fi, я включил модули ядра для чипсета Ralink)
Я думаю, что это аккуратно, намного лучше, чем установка общего Linux и настройка служб самостоятельно на цель.
Вы можете построить изображение, которое запускает контроллер Unifi, чтобы вам не приходилось покупать его! Это полезно, если у вас есть маршрутизатор Unifi или AP, который использует этот контроллер для дополнительной памяти и мощности обработки. В настоящее время проверяется с Beaglebone:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Поскольку Beaglebone медленно, для загрузки может потребоваться некоторое время.
Оба Raspberry Pi нули теперь поддерживаются! Они поставляются с прохладными функциями OTG:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Это позволит вам питать и получить доступ к Raspberry Pi через сериал через его USB -порт. Обязательно подключите свой кабель Micro USB в порт данных, а не порт питания.
Первая загрузка занимает больше времени, так как он изменяет размеры SD -карты, чтобы заполнить свое пространство, поэтому последовательное устройство (обычно /dev/ttyACM0 ) может занять больше времени.
Вы также можете построить изображение с поворотом USB -порта в адаптер Ethernet, позволяя SSH в Raspberry Pi, подключив его к компьютеру:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Скопируйте его на SD -карту (раздел «Установка»), подключите, подождите, пока она загрузится и появится как устройство Ethernet, затем просто:
Raspberry Pi 2 представляет собой 32-разрядную четырехфразмерную доску armv7 с 1 ГБ оперативной памяти. Вы можете построить для Raspberry Pi 2, и он работает с Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Raspberry Pi 3 представляет собой 64-разрядную четырехъядерную доску ARMV8 при 1,2 ГГц с 1 ГБ оперативной памяти. Он также имеет встроенный 802.11n Wi-Fi и 10/100 порта Ethernet. Bluetooth еще не работает на этой платформе. Вы можете построить для Raspberry Pi 3, и он работает с Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
Это была действительно интересная доска для работы, и была оказана большая помощь из JumpNow/Meta-Odroid-C2. Это хороший пример того, как построить U-Boot, подписать его и соединить его с кодом загрузчика, специфичного для поставщика. Это довольно хорошая справочная реализация для безопасных и 64-битных досок ARM. Создайте это с:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Я еще не внедрил строительство горелки SD для этой доски, но это должно быть просто, и она будет реализована, как только я куплю EMMC.
Конфигурации платы для этого только что приземлились благодаря @deadloko! Я не владею этой платой, поэтому я не могу проверить ее в каждом выпуске, но она должна быть похожа на Beaglebone. Создайте это с:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap действительно удобен здесь ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Когда все ваше изображение будет сглажено, вы можете хранить его в более постоянном месте на вашей доске: EMMC . Этот тип хранилища великолепен, потому что его нельзя легко смещать, как SD -карта, но к ней труднее получить доступ.
Если у вас есть порт SD -карты и EMMC, вам повезло, этот репозиторий определяет выход (каталог в outputs ), который создаст изображение SD -карты, которое будет загружаться и сжигать другое изображение на EMMC. Вы указываете изображение, которое вы хотите, сгорели с обычной опцией -I image= .
Теперь мы используем bmaptool для сжигания изображения, над которым быстрее, проверяет целостность, и гарантируем, что синхронизируем файловую систему. Мы также сжимаем изображение, чтобы его можно было безопасно скопировать на изображение горелки.
Все, что вам нужно сделать, это использовать вывод burner :
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Сжмите результат на SD -карту (см. Сжигание на SD -карту) и загрузитесь в нее. Если были настроены светодиоды для этой платы, вы должны увидеть один из следующих шаблонов:
(Обратите внимание, что на Beaglebone вы должны удержать кнопку USER , подключите питание, а затем запустите загрузку на SD -карту, если на EMMC уже есть загрузочный загрузчик)
Если вы пишете определение для платы, вы можете включить поддержку этой функции, просто реализовать параметры в модуле crosspkgs/modules/hardware/burner , который во время написания состоит только из пары вариантов:
dd изображение в (путь устройства EMMC)dd Вы также можете определить светодиоды в модуле crosspkgs/modules/hardware/leds , который сценарий горелки будет использовать для отображения своего статуса. Светодиоды - это просто названия каталогов в /sys/class/leds/ hirectory.
Посмотрите на определение изображения beaglebone , если вам нужен конкретный пример.
Поддержка Nixops здесь! Это означает, что вы можете управлять всеми своими устройствами без повторного разбивания!
Чтобы начать сжигать базовое изображение на SD -карте (это изображение просто содержит SSH и больший загрузочный раздел для хранения новых конфигураций):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Затем загрузите его и добавьте свой ключ SSH, потому что Nixops поддерживает только клавиши SSH:
# copy over the key
ssh-copy-id root@IP_ADDRESS
# load your SSH keys into your environment
eval $( ssh-agent -s )
ssh-add ~ /.ssh/id_rsa Наконец, создайте развертывание Nixops для ваших устройств ( iot можно изменить на все):
nixops create ./nixops.nix -d iot
Теперь вы готовы обновить свою доску с помощью новых конфигураций! Просто используйте nixops deploy с переменной среды IP , установленной для вашего устройства (здесь мы развертываем изображение ap-puns по нашему исходному изображению nixops ):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Если у вас есть доступ к последовательному соединению, вы можете выбрать свое поколение на загрузке:
------------------------------------------------------------
1: NixOS - Default
2: NixOS - Configuration 2 (2019-09-16 14:23 - 19.09pre-git)
3: NixOS - Configuration 1 (1970-01-01 01:32 - 19.09pre-git)
Enter choice:
В противном случае вы можете взять SD -карту и вручную отредактировать файл /extlinux/extlinux.conf в разделе загрузки. Замените DEFAULT nixos-default на DEFAULT nixos-42 в этом файле, чтобы временно загружаться из 42-го поколения.
Иногда, когда что -то идет не так, вам нужно проверить определенные части сборки, этот репозиторий организован, так что это легко сделать.
Допустим, dhcp был сломан, вы можете построить только этот пакет с:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
Точно так же вы можете упасть в оболочку, чтобы осмотреть процесс сборки для dhcp , как:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Затем вы можете просто позвонить в genericBuild в nix-shell и имитировать построение этого пакета.
Если вы хотите проверить конечные значения конфигурации и другие вещи, вы можете упасть в repl :
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Затем config переменной содержит конфигурацию системы.
Некоторые изображения являются полноценными демонстрациями с вариантом использования, а другие-просто шаблоны для вас, чтобы создать свои собственные изображения.
(Размер основан на сборках Beaglebone)
| Имя | Размер | Описание |
|---|---|---|
| база | > 2 ГБ | Наименьшие изменения в конфигурации NIX, необходимых для перекрестной сборки |
| мини | 584 МБ | Меньше, чем база, с большинством некритических услуг выключен, как polkit , udisks , containers и т. Д. |
| микро | 564 МБ | Меньше, чем мини, предназначенное для прошивки один раз и не обновляется напрямую (но обновляется, прошивая другое изображение) |
| SSH | 584 МБ | на основе Mini, но с доступом SSH |
micro сейчас не очень микро, но, надеюсь, это будет скоро. Он предназначен для того, чтобы не иметь никаких утилит NIX или демона, меньшего ядра, и, как правило, минимум, необходимый для работы на доске. В настоящее время это не сильно отличается от mini -изображения.
aircrack-ng , чтобы отправить фальшивые маяки AP с именами каламбуров Для вдохновения либо посмотрите на открытые в настоящее время проблемы, либо то, что нужно сделать. В противном случае просто попробуйте его и вставьте исправления, когда вы их найдете, в конечном итоге все исправления, которые в конечном итоге здесь будут отправлены вверх по течению, чтобы все nixpkgs могли выиграть.
В качестве альтернативы, отправьте его прямо вверх по течению и свяжите коммит в проблеме, он, возможно, будет зафиксирован здесь.
nix !nix-channel --update