понедельник, 27 апреля 2020 г.

Заметки по FreeSync мониторам для Linux

Чтобы включить freesync, монитор должен быть подключен либо к amd карте (интегрированной или встроенной, но поддерживающей этот режим), либо к nvidia серии 10+. Intel пока не поддерживает Freesync.

Свежее сообщение об intel: https://www.dell.com/community/XPS-Desktops/FreeSync-G-Sync-monitors-compatible-with-Intel-UHD-630-video/td-p/7486449 - февраль 2020
https://www.quora.com/What-is-AMD-free-sync-on-monitors-and-does-it-work-with-Intel-NVIDIA - декабрь 2019

> AMDs own workaround for Adaptive Sync over HDMI
Это FreeSync via HDMI. Используется проприетарный протокол AMD. Работает только на windows. В linux в open source драйвер включать не будут. В linux в amdgpu-pro libgl может быть и включат потом. Как отличить эту технологию? Наверное по спецификации монитора: если он заявляет поддержку FreeSync, при этом версия hdmi ниже 1.2, значит это оно.
В общем, непонятно, стоит ли полагаться на будущее этого варианта. Если покупать моник с нуля, то лучше оттклкиваться сразу с hdmi версией 1.2.

>With HDMI 2.1 there will be an official Adaptive Sync alternative over HDMI, called VRR (Variable Refresh Rate).
Это HDMI VRR. Официално пока нет, ждём когда утвердят стандарт.
https://www.phoronix.com/scan.php?page=news_item&px=AMD-FreeSync-2019-Update
But as for the formal HDMI Variable Rate Refresh (VRR) support, they note it's "pending" but held up by a HDMI VRR conformance test suite being released. So hopefully once that CTS is available, HDMI VRR will be flipped on for Linux users wishing to enjoy Adaptive-Sync/VRR functionality for HDMI displays.
Так что пока ждём. На Linux поддерживаться будет.

Что по Display Port VRR?
Как я понял, так же как и в случае с hdmi. Есть решение через проприетарный протокол, а есть стандарт DP supported via Adaptive Sync spec. Как отличить? По идее, версия DP должна быть определённой.

Какие продукты поддерживают технологию AMD FreeSync™?
К совместимым графическим процессорам относятся все видеокарты AMD Radeon™, начиная с серии Radeon™ HD 7000, выпущенной в 2012 году, и все более новые потребительские видеокарты Radeon.

Можно ли использовать технологию AMD FreeSync™ при подключении через HDMI®?
Да, технология FreeSync поддерживает интерфейс HDMI с самого начала. Многие дисплеи с сертификацией FreeSync поддерживали технологии использования переменной частоты обновления экрана по HDMI задолго до появления HDMI 2.1 и принятия стандарта HDMI VRR.  Покупка дисплея с сертификацией FreeSync, поддерживающего FreeSync по HDMI, позволяет использовать преимущества переменной частоты обновления экрана, даже если дисплей не поддерживает стандарт HDMI 2.1.

А также на этой странице https://wiki.archlinux.org/index.php/Variable_refresh_rate есть интересная инфа по редактированию EDID. Там для разгона монитора применяется, но может пригодиться и в других случаях.

четверг, 23 апреля 2020 г.

I have published my script here:
https://github.com/Ashark/supermicro-oob-activate/blob/master/supermicro-oob-activate

But just in case of DMCA takedown, I will publish the code here as a backup:
#!/bin/bash
# supermicro-oob-activate
#
# This script will autogenerate and activate a SFT-OOB-LIC key for your SuperMicro server,
# so you can perform out-of-band bios update with supermicro-update-manager.

# You should get a BMC mac. You can go to the ipmi web page, but it is inconvenient, because you want to make all things in place via your terminal.
# supermicro-update-manager has a function CheckAssetInfo, which will show you the IPMI mac. But unfortunately, you need OOB node product key to be
# already activated for using this function. However, there is another way how you can get it - via ipmitool.

IPMI_HOST=$1
IPMI_USER="ADMIN"
IPMI_PASSWORD_FILE="$HOME/.private/ipmi-pw.txt"

BMC_MAC=$(ipmitool -I lanplus -H $IPMI_HOST -U $IPMI_USER -f $IPMI_PASSWORD_FILE lan print | grep "MAC Address" | sed "s/MAC Address             : //")
# -I lanplus is required for some motherboards. See https://www.supermicro.com/support/faqs/faq.cfm?faq=23196

LIC_KEY=$(echo -n $BMC_MAC | xxd -r -p | openssl dgst -sha1 -mac HMAC -macopt hexkey:8544E3B47ECA58F9583043F8 | awk '{print $2}' | cut -c 1-24  | fold -w4 | paste -sd'-' -)

# echo Checking licence keys before setting licence key:
# supermicro-update-manager --no_banner -i $IPMI_HOST -u $IPMI_USER -f $IPMI_PASSWORD_FILE -c QueryProductKey
echo Setting licence key:
supermicro-update-manager --no_banner -i $IPMI_HOST -u $IPMI_USER -f $IPMI_PASSWORD_FILE -c ActivateProductKey --key $LIC_KEY
# echo Checking licence keys after setting licence key:
# supermicro-update-manager --no_banner -i $IPMI_HOST -u $IPMI_USER -f $IPMI_PASSWORD_FILE -c QueryProductKey


# Usage:
# $ ./supermicro-oob-activate ipmi.yourdomain.com
# Checking licence keys before setting licence key:
# Number of product keys: 0
# Setting licence key:
# Node product key (OOB) is activated for ipmi.yourdomain.com.
# Checking licence keys after setting licence key:
# [0] OOB
# Number of product keys: 1

# Legality:
# This is not explicitly allowed by SuperMicro, but in reality, nobody cares, because nowadays REDFISH allows much of the functionality of SuperMicro update manager for free,
# (including bios update). This thing is only useful for the old generation of servers without REDFISH.
# The algorithm was kindly provided by white hat hacker Peter Kleissner.
# See this if you are interested: https://peterkleissner.com/2018/05/27/reverse-engineering-supermicro-ipmi/

четверг, 19 сентября 2019 г.

Как в конфиге dhcpd вывести значение переменной в лог

Экспериментировал с ISC DHCP. Хотел сделать конфиг для PXE чтобы могли грузиться как машины с BIOS, так и UEFI. Итак, редактируем /etc/dhcpd.conf
Никак не мог понять почему не срабатывает конструкция
; This one line must be outside any bracketed scope
option architecture-type code 93 = unsigned integer 16;

     if option architecture-type = 0 {
         filename "path/to/BIOS/pxelinux.0";
     } elsif option architecture-type = 9 {
         filename "path/to/EFIx64/syslinux.efi";
     } elsif option architecture-type = 7 {
         filename "path/to/EFIx64/syslinux.efi";
     } elsif option architecture-type = 6 {
         filename "path/to/EFIia32/syslinux.efi";
     }

Нашёл её здесь: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX#UEFI

Оказалось, что проблема в том, что надо указывать не option architecture-type = 0, а option architecture-type = 00:00

Перед тем как это понять, мне пришлось узнать как вообще можно вываести значение переменной (или опции) в лог dhcpd.

Например, так:
set test_var = ff:00;

log (error,
  concat ("--->",
    binary-to-ascii(16,16,".",test_var)
  )
);

Потом используя для мониторинга происходящего команду
journalctl -u dhcpd4.service -f
Мы можем увидеть там нашу строку: "--->ff0"

вторник, 10 сентября 2019 г.

Как выставлять hostname на основе mac адреса при загрузке Linux по PXE

У меня есть pxe сервер, который раздаёт Arch Linux по сети. Я его гружу на разных машинах и дальше захожу в них по ssh. Чтобы проще было различать хосты, мне захотелось, чтобы их хостнеймы задавались автоматически из их mac адреса.
Для этого я пересобрал archiso (инструкция), добавив следующие изменения:

Создаём файл archlive/airootfs/etc/systemd/scripts/bootif-hostname:
#!/bin/bash
# example of kernel parameter: BOOTIF=00-01-02-03-04-05-06
eval $(cat /proc/cmdline | grep -o '\bBOOTIF=[^ ]*')
new_hostname="arch-`echo "${BOOTIF: -8}" | tr -d '-'`"
hostnamectl set-hostname "$new_hostname"
и делаем его исполняемым: chmod +x archlive/airootfs/etc/systemd/scripts/bootif-hostname
Создаём файл archlive/airootfs/etc/systemd/system/bootif-hostname.service:
[Unit]
Description=Start with a hostname based on last three octets of mac address of nic, which was used for pxe booting
Wants=network-pre.target
Before=network-pre.target

[Service]
ExecStart=/etc/systemd/scripts/bootif-hostname
Type=oneshot

[Install]
WantedBy=multi-user.target

В archlive/airootfs/root/customize_airootfs.sh вносим:
...
systemctl enable ... sshd.service bootif-hostname.service

На pxe сервере используется pxelinux. Он автоматически добавляет параметрам ядра BOOTIF=00-01-02-03-04-05-06. Я правда не пойму, откуда берётся самый первый октет.

P.S. чтобы зайти на хосты по ssh, надо либо создать пароль для рута и разрешить руту логиниться по ssh, либо создать отдельного пользователя. Я не стал загромождать статью этими изменениями.

Вот и всё. Теперь, когда мы загружаем ArchLinux по сети, в качестве имени хоста мы видим вот такую строку: arch-040506, которая формируется из трёх последних октетов mac адреса сетевой карты, которая была использована при загрузке машины.

суббота, 7 сентября 2019 г.

sendEmail - отправка копии письма нескольким адресатам - workaround

Расскажу о небольшой проблеме при использовании sendemail (в Arch Linux - sendEmail).
Мне нужно было отправить письмо, кроме основного, ещё и нескольким другим адресатам. Для этого я использовал опцию -cc.
Почему-то man страницы sendemail в системе нет. Но зато есть обычный help. Он показывается если вызвать sendEmail без параметров. Так вот, там есть такое описание:
    -cc ADDRESS [ADDR ...]
Т.е. вроде бы как можно указывать адресатов через пробел. Но у меня так не получилось. Письмо уходило только первому из перечисленных адресов.
Я пробовал и заключать адреса в треугольные скобки, и прописывать их через запятую, и в кавычках - никак не работало: программа жаловалась что адреса некорректные.

В конце концов нашёл рабочее решение - можно использовать опцию -cc несколько раз. То есть например так:

$ sendEmail \
    -f "$NAME_SURNAME <username@domain.com>" \
    -u "$SUBJECT" \
    -t "$MAIN_RECIEVERS" -cc "$CC_RECIEVER1" -cc "$CC_RECIEVER2" \
    -s "$SERVER_AND_PORT" \
    -o tls=yes \
    -o message-charset=utf-8 \
    -xu "username@domain.com" \
    -xp "******" \
    -o message-content-type=html \

    -m "$MAILBODY"

Я нигде не нашёл инструкции что так можно делать. Просто случайно добился рабочего результата. Поэтому решил зафиксировать это в данной заметке - вдруг кому-то ещё пригодится.
Версия sendEmail - sendEmail-1.56 (тоже со страницы help).

среда, 13 февраля 2019 г.

Особенности установки Ubuntu 18.04.1 server



Canonical предоставляет несколько вариантов iso образов LTS дистрибутивов для x86_64 (на февраль 2019):
ubuntu-18.04.1-live-server-amd64.iso - с новым установщиком (Subiquity)
ubuntu-18.04.1-server-amd64.iso - с альтернативным установщиком (Ubiquity)

Новый установщик имеет шероховатости, есть отрепорченные баги, ждём фиксов. Создатели дистрибутива говорят: "If you require advanced networking and storage features such as; LVM, RAID, multipath, vlans, bonds, or re-using existing partitions, you will want to continue to use the alternate installer."

Новый установщик

Если используем Subiquity, то имеем в виду (опять же, на февраль 2019):
стиль разметки будет всегда gpt, вне зависимости от режима загрузки
нужно будет создать раздел на накопителе для /boot. Это должен быть именно раздел на накопителе, sw raid пока не поддерживается. Наблюдаем здесь: https://bugs.launchpad.net/subiquity/+bug/1785332
установщик умеет работать в обоих режимах загрузки.
в режиме bios будет автоматом создан bios_grub
в режиме uefi будет автоматом создан esp

Чтобы загрузиться в режиме uefi на платформах supermicro, жмём F11 при старте платформы, выбираем наш загрузочный носитель, перед которым есть надпись "UEFI:". Лучшего решения пока нет.

Старый установщик

Если используем Ubiquity: этот установщик при партиционировании будет использовать gpt только на накопителях емкостью более 2tb. Как его заставить использовать gpt при напопителях меньшего размера не разбирался, может есть какой-то параметр. Если кто-то знает, подскажите.

В VirtualBox cоздать из gui такие накопители невозможно. Для создания используем команду:
vboxmanage createhd --filename 3TB_storage.vdi --size 3000000 --format VDI --variant Standard
Ubiquity автоматом bios_grub раздел не создаёт (в отличие от sibuiquity), поэтому нужно создать его вручную (выставляем Use as как Reserved BIOS boot area). Если этого не сделать, то получим ошибку на этапе установки загрузчика (Unable to install grub).

Раздел этот должен быть в пределах первых двух терабайт. (Это по логике. Я вот в virtualbox сделал его дальше 2.7Тб, и система грузилась нормально. Это очень странно, надо дальнейшие эксперименты провести и выяснить почему так. На реальном железе не проверял).

bios_grub разделы нужно сделать на всех накопителях, потому что так хочет инсталлер. Иначе он вывалится с критической ошибкой при попытке установить grub на раздел без bios_boot. Размер этого раздела делать более 1Mb не следует, т.к. ёмкость более 1MB всё равно не будет использоваться (туда пишется grub stage 1.5).

За логами можно смотреть на tty4, сам установщик работает на tty1.

вторник, 23 мая 2017 г.

Бесфокусная прокрутка в Windows <=10 (Taekwindow)


Иногда приходится работать с windows. Но это бывает больно. До недавнего времени в windows не существовало функции прокрутки колёсиком мыши неактивного окна. Вы себе представить не можете как это бесит. Допустим, вы пишите какой-то текст в LibreOffice и параллельно у вас открыт браузер, где вы что-то ищите. Так вот, вам придётся кликать десятки раз то в одно, то в другое окно, чтобы прокручивать их содержимое. Работать с такой системой просто невыносимо.