Orange Pi Plus 2E

Закалачивать гвозди микроскопом? Да! Спасать копеечные флешки от перезаписи тестировщиками внедрением в схему одноплатного компьютера? Почему бы нет?! Ну а в этом нам поможет скрипт: #!/bin/sh echo «Создаём RAM-диск» modprobe brd rd_nr=1 rd_size=1572864 max_part=0 while [ ! -b /dev/sda ]; do echo «Не найдено блочное устройство, ждём несколько секунд…» sleep 5 done echo 0 `blockdev —getsz /dev/sda` snapshot /dev/sda /dev/ram0 N 64 | dmsetup create snap modprobe g_mass_storage file=/dev/mapper/snap exit 0 Как бы это логичное продолжение поста об плате Orange Pi Plus 2E.

Тросики газа перед пайкой

Тут поинтересовался у ряда знакомых, паяли ли они тросы газа. Большинство — нет. Более того: часть опрошенных ответила, что из-за отсутствия готовых тросов они отказались от установки нравившихся им карбюраторов. Не дело, и мы сейчас это исправим! Но я абсолютно уверен, что подробная инструкция конечно не нужна. Тросики всем нужны разные, и не рационально, если данная заметка будет всего-лишь технологической инструкцией для изготовления каких-то определённых тросов. Тросик не возьмётся из воздуха. Надо купить некого донора. Идеально подходят тросы от «скутеров» (такие убогие табуретки из пластика). Они нынче сделаны весьма «дорого»: хороший гибкий тросик из мелких жил, облачённый в нейлоновую рубашку, поверх которой одета стальная. Идеально! Ещё лучше, если удастся найти что-то похожее на конечный результат. Но длиннее. Ибо нам ещё[…]

На самом деле звук на платах с Allwinner A20, по идее, поддерживается ещё с ядра 4.4. Только вот поддерживается ли оно на конкретной плате — это зависит исключительно от активности мейнтейнеров конкретной платы. Вот мне не повезло: изменения относительно моей платы вносятся только по случаю глобальных перемен, не массовая она. Не то, что Banana Pi или Cubieboard’ы. Короче, для решения моей проблемы надо всего ничего, — поправить devicetree. Для начала нужны исходники ядра, их можно (и логично) взять с kernel.org. Качайте позднюю редакцию той же основной версии, что и у ядра, установленного в ОС. Так для Debian’овского 4.9.0-3-armmp, я возьму 4.9.34. Распакуйте это, отредактируйте devicetree вашей платы, скомпилируйте и загружайте плату с ним. Листинг подготовки devicetree: aliech@fomalhaut:/mnt/build$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.34.tar.xz —2017-06-25[…]

Представляете, решил написать статью и вдруг понял, что оно никому, кроме меня, не нужно! Ну вот кому интересно, как без VBIOS инициализировать intel’овскую встроенную графику? Никому! Под новостью о релизе свежего coreboot’а я отхватил пучок минусов, так как написал, что при должном стечении обстоятельств портирование новой материнской платы занимает около получаса, а в малом наборе портированных плат виноваты не разработчики coreboot’а. Ну не верят люди. Людям проще дальше считать, что это сложно. Проще дальше стонать от бремени UEFI и кушать тот же кактус. Хрен с ними… Итак, у нас есть плата на intel sandybridge/ivybridge в индустриальном исполнении. Нет, не старый набор логики. Цикл жизни индастриала ~10 лет. Соответственно сейчас именно на этом наборе логики встречаются платы в индустриальном исполнении от[…]

Отказоустойчивая система — это очень легко, на самом деле. Залог успеха — вменяемая архитектура. Но может так случится, что заказчик не умеет в архитектуру. От слова «совсем». А его программисты не умеют в хороший код и лаконичные решения. Но уж очень они хотят получить защищённый от отказа оборудования вычислительный комплекс, не содержащий «специфических» решений (типа внешних дисковых контроллеров с двумя target-каналами). Понятно, что речь идёт о кластере из двух машинок с DRBD. И надо это так сделать, чтобы не влипнуть в настройку кособокого ПО заказчика… Короче, нужно разместить «корень» (корневой раздел) на DRBD! Попробуем собрать подобное решение? Для этого нам нужны две машины схожей конфигурации. Требуется заранее определится с сетевыми именами машин и их адресацией. В примере будут фигурировать хосты[…]

Попросили меня написать немного о выборе резины на мотоцикл. Что-то написал) В выборе резины есть две составляющие: исключительно религиозная и техническая. Со второй проще, так что начнём с первой… Итак, вся резина одинаково полезна. За редкими исключениями. Как с инструментом, который покупаешь в гараж. Вот свёрла: можно взять дешёвый китайский набор, промаркированный отечественным названием, заточить, исправить кромку, сделать работу, снова обновить заточку… и так много-много раз. А можно взять фирменный набор одного немецкого производителя, и пусть нас это совсем-совсем не спасёт от обслуживания этих свёрл, но делать это придётся реже. Сильно реже. Просто берёшь с полки, вставляешь нужно сверло в дрель, накерниваешь дырку, сверлишь и… оно сверлится! Ну и раз в пятилетку заточить, да. Оба подхода позволяют просверлить дырку. Но[…]

Когда-то весьма давно я топил за использование vde_switch для организации сети виртуальных машин в домашних условиях. Использовал я его вместо мост-устройства, как этакий сетевой хаб. Ну и на каждую сеть по такому хабу. Потом захотелось окошек, virt-manager’а и прочих извращённых утех от Red Hat’а. Но я вернулся… Короче, отринем же этот велосипед на базе linux-bridge/netfilter/dnsmasq в пользу настоящего виртуального сетевого L2-свитча! С возможностью раскидать L2-сегменты внутри этого свитча как вам заблагорассудится! Итак, конфиг vde_switch’а: port/setnumports 24 port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto port/createauto vlan/create 1 vlan/create 2 vlan/create 3 port/setvlan 2 1 port/setvlan 3 1 port/setvlan 4 1 port/setvlan 5 1 port/setvlan 6 2 port/setvlan 7 2 port/setvlan 8 2 port/setvlan 9 2 port/setvlan 10[…]

Итак, grub не нужен, нам нужны лишь скрипты для автоматизации. Справедливости ради стоит отметить, что распространённости grub’а способствовала именно поддержка мейтейнеров и то, что вспомогательных скриптов для него ими написано море. Вот и нам надо для U-Boot’а тоже. Итак, для начала скрипт, который вызывается после установки пакета с ядром, /etc/kernel/postinst.d/zz-add-u-boot-file: #!/bin/sh -e version=»$1″ uboot_dir=»/mnt/u-boot» part_num=»2″ kernel_string=»ext4load mmc 0:${part_num} \${kernel_addr_r} /boot/vmlinuz-${version}» dtb_string=»ext4load mmc 0:${part_num} \${fdt_addr_r} /usr/lib/linux-image-${version}/\${fdtfile}» initrd_string=»ext4load mmc 0:${part_num} \${ramdisk_addr_r} /boot/initrd.img-${version}» info_string=»echo \»Booting Debian GNU/Linux with kernel ${version}…\»» boot_string=»bootz \${kernel_addr_r} \${ramdisk_addr_r}:\${filesize} \${fdt_addr_r}» dest_file=»${uboot_dir}/${1}.scr» tmp_file=»/tmp/${1}.src.tmp» if [ -e «${dest_file}» ]; then exit 0 fi /bin/echo «${kernel_string} && ${dtb_string} && ${initrd_string} && ${info_string} && ${boot_string}» > ${tmp_file} /usr/bin/mkimage -Cnone -Aarm -Tscript -d${tmp_file} ${dest_file} rm ${tmp_file} exit 0 Обратите внимание, что мы предполагаем загрузку[…]

Однажды сильно припёрло написать свой dhcp-сервер. Для обслуживания кучи relay’ев. Функционал полный был даже не нужен. Точнее так: нужно было, чтобы он до конца не был реализован. Например, не нужно было сохранять время аренды адреса, но нужно было назначать параметры клиентам в зависимости от номера vlan’а, откуда к нам перенаправлен запрос. И решено было всё это написать на perl, благо даже модуль есть специальный — Net::DHCP::Packet. Так как, фактически, соотношение номера vlan’а и сетевая адресация происходили в определённой известной зависимости, своя реализация dhcp-сервера была выполнена в формате «запустил и забыл». Никакой необходимости в изменении конфигурации на лету. Просто незачем менять конфигурацию. А ещё отсутствовал ввод-вывод на диск (не надо было писать журнал), так что он (dhcp-сервер) как был запущен, так[…]

Итак, мы знаем, как определяется спам и как его положить в отдельную папку на сервере. Как вы понимаете, всегда будет некоторое количество спама, которое таки прилетит во «Входящие», и некоторое количество нормальных писем, которые улетят в «Спам» (Junk). И нам надо дать пользователю шанс оперативно известить нас… Нет, не так. Нас оповещать не надо — мы ленивые. Пусть он это сообщить нашей проверочной программе, то есть SpamAssassin’у, в нашем случае. В вики dovecot’а есть статья, но она не очень полезна, если у нас разные uid’ы на ящиках, так как там предполагается, что sa-learn вызывается из скрипта (без перенаправления ввода нельзя отдать sa-learn’у письмо, так что без «обёртки» не обойтись) от имени пользователя. То есть с тем же uid’ом, что и[…]