Урал в Севастополе

Все же знают о том, что если что-то попало в интернет, то оно оттуда никогда уже и не денется? Так вот, это очень удачная замена фотоальбомам. Например внезапно можно случайно найти посты о том, как собирал и распространял образы Debian для одного arm-лаптопа, сильно до того, как это стало мейнстримо… до того, как хипстерам дали Raspberry Pi. Сам то я тогда и вовсе на Генте сидел, а красноглазие моё не знало пределов. От слова «совсем». Иногда попадются «хаутушки» за моим авторством, например по которым можно сообразить почтарь за пять минут, ну и, что характерно, люди это повторяли, ставили себе тоже и также на боевые сервера. Некоторые на свои сайты передирали данный текст, иногда целиком, иногда частями… Тогда мне казалось это[…]

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.

Orange Pi Plus 2E

Копаюсь тут с Orange Pi Plus 2E… Так вот, не знаю, читает ли мой блог наш ОТК’шник… Не знаю. Но, если вдруг Саня ты это читаешь, то просто знай, что они смогли: две заказанные одинаковые платы мало того, что скручены винтом (по-разному, кстати), содержат не повторяющиеся дефекты пайки и промывки, так ещё одна содержит в NAND’е образ u-boot от начала 2017 года, а вторая — android. Хотя обе должны быть пустыми. Такой вот контроль качества и обеспечение повторяемости изделий у Xunlong’а. U-boot из Debian testing не умеет эту плату всё ещё. Просто собрали без неё. Бывает. Пока ещё представлено ядро 4.12, там хоть и есть некоторые новшества, типа OTG и сети, но нет биндингов в devicetree. Собираю 4.13, там появились[…]

Контейнеры

Последние несколько недель я изучал контейнеризацию окружений, точнее то, как нынче принято это делать. И повод есть: anotherhosting.net весь в виртуалках живёт, виртуалки содержаться на моём «облаке», ну а контейнеризация, насколько известно, помогает снизить накладные расходы, что ведёт к росту КПД «облака». Ну это в теории. Да и глупо это, казалось бы, иметь гипервизор, виртуализацию в CPU, когда любой продакшн-дистрибутив умеет и cgroup и namespaces. Но нет… Счастья не будет. Если сильно не растекаться мыслью по листу… по текстбоксу, да, то всё упёрлось в недалёкость разработчиков современных. Вот что делали годные хардкорные админы при инициализации сервисов: приложение запускается, открывает все нужные для работы дескрипторы, которые нельзя открыть из chroot’а, например порты и сокеты; делается chroot куда-то; сброс привилегий до заданного[…]

На самом деле звук на платах с 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[…]

Никогда такого не было!) Пост ниочём, но я очень удивлён, так как только что виртуальной машине dhcp отдал адрес из начала пула… А значит он давно виртуальным машинам ничего не назначал. Ну чтож, учимся НЕ работать в свободное время!

Отказоустойчивая система — это очень легко, на самом деле. Залог успеха — вменяемая архитектура. Но может так случится, что заказчик не умеет в архитектуру. От слова «совсем». А его программисты не умеют в хороший код и лаконичные решения. Но уж очень они хотят получить защищённый от отказа оборудования вычислительный комплекс, не содержащий «специфических» решений (типа внешних дисковых контроллеров с двумя 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[…]

Я думаю, что никто не будет спорить с наличием в IT-сообществе трендов на понижение стоимости решений и повышение их эффективности. Под стоимостью при этом понимается как стоимость инфраструктуры и оборудования, так и стоимость обслуживания решения. Мощности — в аренду! Админ — на аутсорс! Решения — только типовые! Вершиной этого «развития» стало «приватное виртуальное облако», — масштабный кластер виртуализации с централизованным управлением, где клиенты могут сами управлять своими виртуальными машинами, их количеством, выделением вычислительных ресурсов под них. А тарифицируется только то, что клиент распределил под свои машины. Почти что фактическое использование ресурсов. И это ещё не все: клиенту нет дела до фактической архитектуры среды виртуализации. Так если выйдет из строя тот сервер, где исполняется его виртуальная машина, то средства управления облаком[…]

Итак, 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 Обратите внимание, что мы предполагаем загрузку[…]