techquisitor: (umnokot)
Знаете, на фоне современных онлайн-эциклопедий порой вот не хватает вот таких вот пережитков оффлайна, как подобные энциклопедии. Когда под чарующуй абмиент ты читаешь статьи про космос или что-то ещё и ничто тебя не отвлекает от просмотра. Ни нерабочие ссылки, ни видео, которое может не подгрузиться или шакальное качество оного из-за проблем с буферизацией. Но самое главное, проверенные фактчекерами данные.

Screenshot 2024-06-22 at 12.39.01.png


В моей памяти эта энциклопедия (The Eyewitness Encyclopedia of Space and the Universe) навсегда останется в приятных воспоминаниях детства, ради которой (и не только её) я ходил в гости к друзьям семьи порой чуть ли не каждый день одно время. В русскоязычной её версии вроде как были были патчи для Windows 98 и кодеков, но увы, на просторах торрентов её нет. Если вдруг у кого завалялся этот диск, снимите исошку для меня, буду очень признателен.

Да, сейчас наука си-и-и-ильно ушла вперёд и данные в ней очень устарели да и JWST вот подогнал хайрез этих галактик и звёзд, но волшебное воздействие этих штук осталось со мной навсегда.

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

Сейчас такие энциклопедии это дорого, сложно и на фоне UGC (User Generated Content) сайтов вроде Википедии стали смотреться динозаврами. Но вместе с тем, они потеряли некоторую атмосферу или что-то вроде того.

Скучаю по вам, энциклопедии.
techquisitor: (sis)
Компьютеры Amiga на просторах России не так чтобы хорошо были распространены в своё время. Но тем не менее, про них многие наслышаны (кто был на Chaos Constructions поймут о чём я), про них неплохо знают, а сообщество амигаводов в России существенно. Собственно, даже известный и весьма уважаемый мной Bocha тоже фанат этих компьютеров. В остальном же мире компьютеры Amiga до сих пор предмет вожделения любого уважающего коллекционера ретрокомпьютеров, а различные компании до сих про производят для Amiga самую различную периферию и платы расширения.

Интерес к этим компьютерам не ослабевает и поныне, но время не щадит никого. Последняя «настоящая» Amiga была выпущена Commodore в 1996 и с тех пор компания прекратила своё существование. Посему если вы вдруг заинтересуетесь данной темой, готовьтесь выложить очень существенные суммы денег, чтобы купить саму Amiga (хотя бы A500) и далее прикупить некоторые количество полезных железок к ней. Если же вы захотите проапгрейдить Amiga, чтобы этим компьютером можно было пользоваться даже сегодня — то лучше зажмурьтесь. Стоимость плат-акселераторов начинаются от ста евро. Верхняя же планка запросто может пробить пару-тройку тысяч долларов.

Но куда податься бедному крестьянину, если он хочет поиграть в игры с платформы Amiga (коих она имеет в избытке), но денег и свободного времени не особо? Всегда, конечно, есть эмуляторы вроде FS-UAE, но взвести его может далеко не каждый. Это не SNES9x или Kega Fusion какой, который скачал и играй. Только ромы успевай подсовывать. Найти рабочие Workbench и Kickstart та ещё задача, поскольку у данного ПО до сих пор есть владельцы и они развивают его. Ну и сам эмулятор под Amiga не самый простой в освоении местами. Впрочем, туториалы тоже имеются. Просто придётся изрядно повозиться.

Но спрос рождает предложение и одна британская лавочка выпустила Mini-версию Amiga A500. Как мы знаем, мини-версии консолей мы уже видели много, от фантастически популярных NES/SNES-mini и MegaDrive Mini которые смели в момент, до абсолютно провальной PS1 Mini, которая настолько никому не нужна в силу своего отвратительного качества, что её до сих пор легко найти в продаже. Не берут-с… Мораль — люди не такие уж идиоты и прекрасно знают когда им дают достойный продукт, а когда фуфло.

The A500 Mini
Устройство небольшое, риалли. Источник фото: https://amigang.com/

Идея купить The A500 Mini в качестве подарка на свой день рождения пришла мне совершенно случайно, после просмотра одного ютубера. Сказано — сделано. С британского Амазона мне удалось через посредников заказать буквально предпоследнюю железку. И как как оказалось — не зря!

Но что внутри? Внутри — хорошо! Помимо небольшой копии компьютера в комплекте прилагается геймпад и мышь. Аутентичные! Правда, мышь конечно же уже лазерная.
Само устройство выполнено очень детально. На клавиатуру хочется понажимать, а в привод сбоку что-нибудь засунуть. Жаль, что всё это бутафорское. Они даже позаботились о таких мелочах, как цвет кабелей. Качество изготовления — выше всяких похвал. Разница с подобным стаффом с Алиэкспресса очень заметна. Тем, кто скажут «дороговато» — рекомендую посмотреть сколько стоит настоящая Амига в хорошем состоянии и посмотреть, а есть ли вообще подобные продукты. :)

IMG_7192.jpeg

После покупки рекомендую сразу сходить на сайт вендора и обновить прошивку, а также купить флешку, куда вы будете закидывать игры. Ах, да. Самое главное достоинство этого устройства, что здесь не нужно заниматься ромхаками, чтобы получить возможность загружать свои игры. Здесь данная возможность предоставлена совершенно штатно. Игры здесь поддерживаются как в формате adf, но основной всё же — whdl. И второе, что надо сделать после обновления прошивки — положить на флешку WHDLoad Package. Это база игр и настроек к ним. В дальнейшем производитель обещает обновления к ней, так что поглядим. Спойлер: для нетерпеливых есть решение ниже. :)

В комплекте присутствует 25 игр, из которых я на момент покупки знал всего несколько: Worms Director’s Cut, Battle Chess, Lemmings, Alien Breed и Another World, конечно же.

Прежде чем приступить к описанию бочки мёда, расскажу про ложку дёгтя. Да, это это всё же эмулятор. И эмулятор не идеальный. Какие-то игры могут работать слишком быстро, другие наоборот медленно. Некоторые могут неожиданно зависать. И в каждом случае вам придётся разбираться почему. Где-то достаточно подправить настройки эмуляции, где-то скачать другой ROM. Но даже так — всё равно будет доступна богатейшая библиотека игр с этой платформы. К слову, добрые люди ведут базу игр, работающих на The A500 Mini, можете посмотреть нужный вам тайтл.

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

А теперь о хорошем. Насчём с того, что эмулируется здесь не только оригинальная A500, но и более продвинутые A1200 и 2000 которые были построены на архитектуре AGA. Если копнуть ещё глубже, народ уже распотрошил что там внутри. Унутре используется Amiberry 3.3, а значит можно на ней запускать Workbench и прочие приблуды после некоторых манипуляций. А ещё можно не дожидаться обновлений базы WHDLoad на оффсайте и тащить нужное прямо из обновлений к Amiberry, так как по факту это обновления к Amiberry и есть.

Помимо геймпада и мыши, про которые уже говорил, сюда можно подключить и обычную клавиатуру. Правда, есть нюанс. Почему-то не все клавиатуры работают на ней корректно. Моя проводная Apple Keyboard ещё от Mac Mini 2.1 работает как часы, в то время как беспроводная и более современная Logitech K400r не отрабатывает нажатия стрелок в главном меню.

Как уже говорил выше, в порт USB втыкается любая пригодная флешка с играми. Куда, к слову, попутно ещё записываются сохранения. Поскольку портов USB не хватает, для расширения покупается абсолютно любой хаб, с которым всё прекрасно работает.

Прогресс можно сохранять как на SNES или NES Mini — через меню, но некоторые игры позволит делать сейвы и через собственные внутриигровые слоты сохранения. Правда, работает не во всех тайтлах. Так, например, замечательная адвенчура KGB в виде образа whdl у меня зависала при попытке сохраниться, используя игровое меню сохранений, но при запуске из ADF прекрасно работала и сохраняла всё как надо.

Стоит ли брать? Если вы не хотите тратить тонну часов на чтение мануалов по настройке эмуляторов на своём компьютере, а на настоящую Амигу нет денег — однозначно берите! Получите весьма стильный гаджет и познакомитесь с нестареющей классикой (с удовольствием играл в те же Worms Director’s Cut и KGB, например) и в целом обогатите игровой кругозор. Но не классикой единой. Под Amiga до сих пор продолжают выпускать игры, так что всегда можно найти что-то современное, но выпущенное под эту систему.
Любители поковыряться тоже внакладе не останутся. Вокруг The A500 Mini существует большое сообщество, так что полезные советы, ромы, хаки расширяющие возможности A500 Mini в наличии. Взять хотя бы Pandory 500 mod.

Как знать, может это устройство будет вашей входной точкой в чудесный мир Амиг и вы созреете до настоящего компьютера. :)
techquisitor: (sis)
Надоедает порой вводить пароль sudo в MacOS. Чтобы использовать датчик отпечатка пальцев вместо ввода пароля, то нужно всего ничего:

# Открыть редактор
sudo vim /etc/pam.d/sudo

# Добавить первой строчкой
auth sufficient pam_tid.so

Сохранить и выйти.
techquisitor: (sis)
 Давно не выкладывал ссылки на всяческие схемы у себя. Кажется, пора.

Linux Kernel map. Схема всех подсистем и взаимосвязей между ними. Верхний пост тоже обновил, само собой.
techquisitor: (sis)
Современные EFI/BIOS в последнее время порой идут с неотключаемым SecureBoot или же порой очень сложно найти, где оно отключается. Зачем он нужен и какую пользу приносит, об этом как-нибудь в другой раз. Слишком обширная тема.

Сейчас мы разберём, как подписывать сторонние модули ядра, не входящие в основную поставку, чтобы они работали с SecureBoot. для примера возьмём VirtualBox, модули которого, обычно идут в виде исходников и собираются с помощью DKMS.

Я использую Fedora 34, но это работает в любом современном дистрибутиве.

Для начала нам понадобится mokutil.

sudo dnf update
sudo dnf install mokutil
Затем создаём новый каталог и генерим пару RSA:
sudo -i
mkdir /root/signed-modules
cd /root/signed-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
chmod 600 MOK.priv

После чего необходимо добавить пароль. Этот пароль нам потребуется при следующей перезагрузке.
sudo mokutil --import MOK.der
Затем перезагружаемся и на появившемся синем экране выбираем: Enroll MOK --> Continue --> вбиваем пароль из предыдущего шага

Теперь уже создаём скриптик, которым мы будем подписывать модули ядра:
cd /root/signed-modules
vim sign-virtual-box
И сам скрипт, собственно:

#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Signing $modfile"
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
/root/signed-modules/MOK.priv \
/root/signed-modules/MOK.der "$modfile"
done

На всякий случай можете проверить расположение signfile и если что, подправить пути в скрипте выше:

find /usr/src -name signfile
И далее:
chmod 700 sign-virtual-box
./sign-virtual-box

И пересобираем модуль:
modprobe vboxdrv
В дальнейшем скрипт НЕ УДАЛЯЕМ, как и сгенерированные ключи. Они нам потребуется при каждом обновлении ядра. А вот mokutil будет уже не обязателен.
techquisitor: (sis)
«О чём думаешь, Евгений?» вопрошает меня Фейсбук. А о том, что давно у меня не было рубрики «карма тестировщика».

Дано: Fedora 34 Workstation. Ванильная. Со всеми патчами и апдейтами из штатных репозиториев. Никаких RPM Fusion и иже с ними.
  • Уже несколько раз крашился Gnome, причём непонятно из-за чего. Но отчёты в ABRT сгенерились. Надо бы восстановить пароль от багзиллы Fedora и отправить логи туда.
  • Постоянно пропадает звук на полсекунды или меньше в Firefox, при подключении внешней звуковой карты. Судя по всему, проблема в PipeWire. Решения пока не нашёл. Если проигрывать со штатной звуковой карты в ноутбуке — всё ОК.
  • При обратном включении иконок на работе столе Gnome, иконки постоянно меняют своё местоположение при включении или выключении дока. Причём заметил, что съезжают всегда одинаково. В качестве обходного решения расположил иконки как мне надо при включенном доке и использовать Gnome Shell только с доком. Стыд, да и только.
  • Очень редко, но теряются настройки внешних мониторов. Какую-то последовательность пока не уловил. Но случается правда редко и фикс занимает несколько секунд. Переживу. Туда же — меняются местами primary и secondary мониторы.
  • Нихера не запоминаются настройки размера окон в Gnome Terminal.
  • До сих пор надо в Gnome Terminal надо отключать Menu acceleration, чтобы заработала клавиша F10. Да, я использую Midnight Commander. Порицайте меня.
  • Всё так же надо использовать Gnome Tweaks, чтобы добавить кнопки сворачивания, разворачивания и максимизации-минимизации окон.
  • По хрен знает какой причине у меня не работали сначала Gnome Extensions. Решение: обнулить профиль пользователя и сбросить профили Firefox/Chrome, затем заново переустановить аддоны для браузеров.
  • Если воткнуть док до загрузки ноутбука, то система будет загружаться раза в три медленнее, чем без него.
Может мне и правда в QA идти было надо?

techquisitor: (sis)
Думаю ни для кого не новость, что сертификаты от R3 которым подписаны цепочки от тех же Let's Encrypt протухли ещё 30 сентября. Но те, кто выписывают сертификаты с помощью certbot, обнаружили, что сертификат обновляется, но по-прежнему подсовывается старая цепочка доверия.

Чтобы заставить certbot выдавать сертификаты используя цепочку ISRG X1, надо скормить оному команду certbot renew --preferred-chain "ISRG Root X1". Затем просто перезапустить сервер. В дальнейшем будет сгенерирован конфиг для сертификата, где по умолчанию будет прописано необходимая предпочтительная цепочка доверия.
techquisitor: (sis)
Как-то после обновления с Catalina на BigSur у меня отвалилось два устройства. Точнее как отвалились. Мой внешний ЦАП работал, но очень эпизодически глючил. А вот принтер HP LaserJet 1018 вовсе перестал работать.

К счастью, с ЦАП проблема довольно быстро решилась выпуском обновления драйверов для BigSur, то с принтером оказалась полная засада. Чего только не перепробовал. И переустановка драйверов заново с полной зачисткой всех хвостов, установка драйверов с помощью Pacifist.В итоге уже почти смирился с тем, что придётся менять надёжный как булыжник принтер на что-то иное, как внезапно натыкаюсь на статью, а там вижу интересное:

The information coming from a HP support agent conveys that following steps may help those facing the issue on their HP printers after after Big Sur update:

Make sure the cable is directly connected between the Mac and the printer.

The use of a USB hub is not recommended. Also, make sure the cable is connected to a USB 2.0 port on your Mac.

А у меня как раз валялся обычный переходник с USB на USB-C. Воткнул... заработало. О - очевидность. Особенно на фоне того, что раньше через хаб всё прекрасно работало. Я и как-то не подумал, что могло что-то тут измениться.

В общем, покупка принтера отменилась. Живём дальше.
techquisitor: (sis)
VPN клиент от Cisco, конечно, та ещё притча по языцех. Компания, специализирующаяся на сетевых решениях всё ещё не умеет в клиенты для сетевых, собственно, решений. Даже в Linux с помощью Network Manager это реализовано намного более прямо.

В этот раз обнаружил очередное прекрасное. При установке клиента приезжает до кучи Cisco AnyConnect Socket Filter. Всё бы ничего, он и раньше был, но под OS 11 BigSur с ним всплыла проблема. Socket Filter появляется в Network Preferences. И именно под BigSur он наглухо фильтрует доступ к куче всего, по одному ему известному способу. У меня стало медленно работать вообще всё, что связано с сетью. Браузеры, утилиты вроде ping, вообще всё. В итоге просто грохнул в сетях всё связанное с Socker Filter и позапрещал доступ к Kernel Extension который пытается врубиться при доступе к сети. Внезапно всё заработало так же шустро как раньше. В итоге вопрос — ну нахера так, а?
techquisitor: (sis)
.. и его проблемы.

Снова решил пописать про работу. На сей раз, проблема возника с RabbitMQ.

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

2021-06-09 10:02:38.030 [error] <0.19004.32> Error on AMQP connection <0.19004.32> (192.168.0.1:42538 -> 192.168.0.3:5672, vhost: 'none', user: 'updater', state: opening), channel 0:
{handshake_error,opening,
{amqp_error,internal_error,
"access to vhost '/' refused for user 'XXX': vhost '/' is down",
'connection.open'}}
2021-06-09 10:02:38.030 [info] <0.19004.32> closing AMQP connection <0.19004.32> (192.168.0.1:42538 -> 192.168.0.3:5672, vhost: 'none', user: 'updat
er')
2021-06-09 10:02:38.031 [info] <0.19001.32> accepting AMQP connection <0.19001.32> (192.168.0.2:14580 -> 192.168.0.3:5672)
2021-06-09 10:02:38.032 [info] <0.19020.32> accepting AMQP connection <0.19020.32> (192.168.0.1:42540 -> 192.168.0.3:5672)
2021-06-09 10:02:38.033 [error] <0.19001.32> Error on AMQP connection <0.19001.32> (192.168.0.2:14580 -> 192.168.0.3:5672, vhost: 'none', user: 'smsc', state: opening), channel 0:
{handshake_error,opening,
{amqp_error,internal_error,
"access to vhost '/' refused for user 'YYY': vhost '/' is down",
'connection.open'}}
2021-06-09 10:02:38.034 [info] <0.19001.32> closing AMQP connection <0.19001.32> (192.168.0.2:14580 -> 192.168.0.3:5672, vhost: 'none', user: 'smsc')
2021-06-09 10:02:38.035 [error] <0.19020.32> Error on AMQP connection <0.19020.32> (192.168.0.1:42540 -> 192.168.0.3:5672, vhost: 'none', user: 'updater', state: opening), channel 0:
{handshake_error,opening,
{amqp_error,internal_error,
"access to vhost '/' refused for user 'XXX': vhost '/' is down",
'connection.open'}}


Если же зайти в админку кролика, то мы видим сообщение вида:

Virtual host / experienced an error on node rabbit@somehost and may be inaccessible

После раскуривания некоторого количества логов, выяснилось, что проблема в Mnesia. По какой-то причине корраптятся сообщения в msg_stores. Если повнимательнее поискать, то можно заметить такое:


CRASH REPORT Process
<0.430.0> with 0 neighbours crashed with reason: no match of right hand value {error,{not_a_dets_file,”/var/lib/rabbitmq/mnesia/rabbit@hostname_1/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L/recovery.d ets”}} in rabbit_recovery_terms:open_table/1 line 197


Дальше останавливаем корлика, затем идём по указанному пути и грохаем целиком /var/lib/rabbitmq/mnesia/rabbit@hostname_1/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L/. После этого запускаем демона заново. Всё должно запуститься без проблем.

Некоторые люди зачем-то удаляют mnesia целиком, но если у вас, как и у меня, тонны очередей, эксчейнджей и пользователей, то потом это порой будет проблематично восстаналивать даже при наличии любой системы управления конфигурациями.
techquisitor: (sis)
...а теперь представился случай. Расскажу-ка я про занятный случай связанный Varnish.

Итак, есть энное количество кешей, ранее работавших на Varnish 3. Работало всё хорошо, но третья ветка давно очень устарела и более не поддерживается. Так что мы смигрировали на ветку 6.0.x, которая является LTS релизом. Пришлось правда переписать кастомные модули для него, но это отдельная история.

Всё б ничего, но после апгрейдв мы заметили в мониторинге такую вещь, что Varnish стал постоянно перезапускаться. Расследование показало, что умирал порождаемый варнишем процесс.
Хочу заметить, что у нас для кастомных сервисов используется runit. Простой как палка, но своё дело делает (systemd-хейтеры и любители поотлаживать bash — вам сюда!). Так вот в процессе дебага мы отловили такую хрень, что SIGTERM посылает сам runit. Что за ерунда? С третьим варнишем таких проблем не было, исправно работал годами.
Тем не менее, в strace видно следующую картину:

1622625209.201334 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=4431, si_uid=0} ---
1622625209.202221 --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=4431, si_uid=0} ---
1622625209.203109 rt_sigreturn({mask=[]}) = 0 <0.065258>
1622625209.333354 write(2, "Error: Manager got SIGTERM\n", 27) = 27 <0.000865>
1622625209.590396 getpid()              = 22267 <0.001420>
1622625209.592812 sendto(7, "<131>Jun  2 09:13:29 varnishd[22"..., 57, MSG_NOSIGNAL, NULL, 0) = 57 <0.000927>
1622625209.718907 write(2, "Debug: Stopping Child\n", 22) = 22 <0.157719>
1622625209.877579 getpid()              = 22267 <0.000890>
1622625209.879363 sendto(7, "<135>Jun  2 09:13:29 varnishd[22"..., 52, MSG_NOSIGNAL, NULL, 0) = 52 <0.000916>
После некоторого времени дебага, обнаружили странную вещь. У нас на машинах крутится два инстанса варниша с разными vcl и настройками. Один runit-сервис так и называется varnish, а второй несколько иначе. И вот второй, что интересно, работает как надо.
Нас взяло любопытство и мы взяли и запихвли во второй инстанс настройки от первого. Что интересно, всё заработало.
Дальше мы в порядке бреда просто переименовали runit varnish в что-то другое и... всё заработало.

Проблема решена, но вообще интересно, что её породило. Пока в гипотезе у нас значится, что сам varnish вызывает что-то с точно таким же именем и ранит принимает это за лишний форк или ещё что-то и естественно его прибивает. Дальше вы уже знаете.

Так и живём.
techquisitor: (sis)
Перед чтением.

Для тех, кто не использует или не любит дистрибутивы Linux семейства RHEL, следует ориентироваться на версии ядра. В случае, когда мы говорим RHEL 6, то имеется в виду ядро 2.6.32 и ниже. Если говорим о RHEL 7/8, то 3.10 и выше.

Отвечая на вопрос «зачем». Как оказалось, у многих даже давно занимающихся администрированием Linux знания об использовании данной команды остались на уровне времён ядер 2.6.32. В то время как в новых ядрах, очень многие фичи были или инвертированы или же сильно изменены. И многие люди про это не в курсе.

Оригинал статьи лежит здесь. На случай, если кто-то мой перевод сочтёт негодным. :)

Разбираем команду free: что должен знать администратор Linux

Команда free популярна среди системных администраторов Unix/Linux. Это серьёзный инструмент, дающий полное представление об использовании памяти в ясном для человека виде.

В man странице про данную команду сказано, что free отображает общее количество свободной и используемой памяти в системе, включая пространство подкачки и физической памяти, а также буферы с кешами используемые ядром операционной системы. Данная информация собирается путём разбора содержимого /proc/meminfo.

Как и другие команды, free прошла через череду изменений на протяжении своего существования, дабы вывод её был осмысленным и точным, что требуется для дальнейшего принятия решений. В RHEL 6 вывод утилиты free ощутимо отличается от вывода такового на RHEL 7 или 8. Впрочем, ключевые параметры остаются неизменными в любой версии.

Если вы наберёте free -h в RHEL 6 (я использовал ключ -h для вывода в удобном для человека виде), то вывод будет похож на этот:

[root@srv ~]# free -h
total used free shared buffers cached
Mem: 94G 44G 49G 161M 993M 1.3G
-/+ buffers/cache: 42G 52G
Swap: 15G 0B 15G

(Рис. 1)


В RHEL 7/8 вывод выглядит иначе:

[root@server1 ~]# free -h
total used free shared buff/cache available
Mem: 15G 751M 1.2G 272M 13G 14G
Swap: 0B 0B 0B

(Рис. 2)

В то же время, в RHEL 8 всё будет выглядеть следующим образом:

[root@tiger ~]# free -h
total used free shared buff/cache available
Mem: 819Mi 164Mi 146Mi 25Mi 509Mi 491Mi
Swap: 0B 0B 0B

(Рис. 3)

Дабы сделать вывод программы более понятным для восприятия, в команде предусмотрены следующие опции: free -b, -k, -m, -g. Они отображают количество памяти в байтах, килобайтах, мегабайтах и гигабайтах. Также вы можете использовать команду free -h для отображения вывода в удобном, понятном для человека виде. Если нужны подробности, запустите free --help для дополнительной справки по возможностям программы.

Различные столбцы, показанные в разных версиях выше, указывают на общую доступную память (total), использованную (used), свободную (free), разделяемую (shared) память. Помимо этого, в выводе отображается память, расположенная в данных момент в буферах и кешах операционной системы.

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

Red Hat Enterprise Linux 6

В случае с RHEL 6, сфокусироваться следует на столбцах -/+ buffers/cache. На рис. 1 выше мы видим, что общее количество памяти равно 94 гигабайтам, где израсходовано 44 гигабайта и свободно 49 гигабайт. Вообще, это довольно нагруженная система и потребление памяти в ней выглядит высоким. Волноваться не стоит, хотя всё же следует посмотреть на столбец в -/+ buffers/cache. Данное значение показывает занятые 42 гигабайта и свободные 52 Гб. Это означает, что в реальности используется всего 42 гигабайта, а не 44. Значение задействованных 44 гигабайт включает себя ещё и кеши. Заметьте, даже простой взгляд на значение колонки used без учёта значения занятых кешей уже влияет на интерпретацию оценки производительности системы.

Теперь разберём смысл колонок со значениями буферов и кешей:

· buffers: память задействованная буферами ядра
· cached: память занятая “Page Cache” (страничным кешем).

Страничный кеш — не что иное, как данные / файлы, копируемые в оперативную память, в момент когда ядро операционной системы выполняет операции чтения или записи на диске. Причина тому — производительность операций ввода-вывода. Таким образом, ядро держит эти файлы в ОЗУ и высвобождает их в тот момент, когда они не требуются или когда пространство памяти запрашивается какой-либо командой или процессом в случае отсутствия свободной памяти в системе.

Red Hat Enterprise Linux 7/8

В операционных системах RHEL 7/8 уже следует сместить фокус на колонку available, поскольку колонка -/+ buffers/cache была удалена и заменена столбцом available. В то же время, столбцы buffers и cache были объединены в единое значение buff/cache и имеют ровно тот же смысл, что и ранее. Столбец available показывает оценку сколько памяти доступно приложениям без использования подкачки.

Так когда сисадмину всё же следует начать беспокоиться?


Исправна та система, которая показывает максимально возможный объём памяти достаточный для выполнения каких-либо задач, при этом демонстрирующая следующие ожидаемые признаки нормальной работы:

· Значение free близко к 0 или имеет очень небольшие значения
· Значение used близко к общему количеству RAM
· Значение доступной памяти в available (или же описанная в столбцах free -/+ buffers/cache) является относительно большой в сравнении с общим количеством памяти.
· Размер раздела или файла подкачки не меняется

Однако, системному администратору стоит начать беспокоиться, когда появляются следующие признаки реальной нехватки памяти:

· Значение столбца available (или же столбцов free -/+ buffers/cache) близко к нулю или весьма небольшое.
· Размер подкачки начинает расти или меняться из-за того, не хватает свободных страниц памяти и теперь необходимо их сбрасывать на диск
· В dmesg появляются сообщения об OutOfMemory-killer, которые проверяются командой grep -i kill /var/log/messages* или же dmesg | grep oom-killer.

Подведение итогов

Команда free — полезный инструмент, которая может очень рассказать системному администратору о том, что происходит в системе. Знание о различиях в выводе free может помочь в более точной интерпретации выдаваемых данных.
techquisitor: (sis)
Каждый раз, когда мне рассказывают какое тормозное зло современные браузеры, я лишь ухмыляюсь. Вы просто не видели настоящее зло.

Истинное зло — консоль iBMC от Huawei написанная на Java. Которая дико, просто немилосердно тормозит всю операционную систему вплоть до того, что любые менюшки открываются по 30 секунд на чистой виртуалке в которой, собственно, кроме браузера и JVM ничего нет при 8Gb RAM, NVME SSD и 4 выделенных виртуальных процессорах. А вы говорите Firefox, Chrome...
techquisitor: (sis)
В связи с вчерашней проблемой, связанной с устареванием корневого сертификата и криворукостью некоторых, куча народу столкнулась с тем, что перестали работать утилиты вроде curl или стало нельзя зайти на некоторые сайты.

Для Linux решение уже и так есть по ссылке выше, для прочих программистов описываю решение здесь.
Если у вас curl сейчас выдаёт такое при запросе к любому сайту с SSL:

curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.


Для начала проверяем что у нас используется:

openssl version -a
LibreSSL 2.6.5
built on: date not available
platform: information not available
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"


Нужно заменить LibreSSL на OpenSSL где этой проблемы нет, поскольку там правильно реализована проверка сертификатов.

Для начала считаем, что скорее всего brew у вас уже стоит. :)


brew update && brew upgrade # на всякий, многие забывают обновляться
brew install openssl # это если у вас вдруг его нет
brew link --force openssl
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc # любители Bash и так знают что делать


Далее запускаем новый шелл и проверяем:

openssl version -a
OpenSSL 1.1.1g 21 Apr 2020
built on: Tue Apr 21 13:28:37 2020 UTC
platform: darwin64-x86_64-cc
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: clang -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -D_REENTRANT -DNDEBUG
OPENSSLDIR: "/usr/local/etc/openssl@1.1"
ENGINESDIR: "/usr/local/Cellar/openssl@1.1/1.1.1g/lib/engines-1.1"
techquisitor: (sis)
Крайне презабавную проблему недавно решил у себя. На полноценную статью не тянет. Так, заметка для младоадминов.

Долгое время было лень глянуть, с чего у меня в локальной сети крайне странно отдавались устройства с включённым Zeroconf (то есть с Avahi/Bonjour на борту). Особенность до кучи была в том, что Avahi по умолчанию работает с доменами .local, про что до сих пор не знают многие. Опытные админы уже явно приготовятся кидать в меня что-нибудь тяжёлое, но погодите возмущаться. Лучше загляните в RFC6762, который с 2013 года считается черновым, но уже крайне активно используется как известными вендорами, так и отдельными разработчиками (привет Леннарту Потеррингу, например). Более того, даннный псевдодомен первого уровня уже не рекомендовалсяк использованию в Windows Server 2003. Так что в настоящий момент данный TLD отдан под использование в сервисах mDNS.

Впрочем, отвлёкся. Итак, в чём странность?

А вот в этом:

# avahi-browse -ar

= wlp0s20f3 IPv4 Hostname _xbmc-events._udp local
hostname = [hostname.local]
address = [192.168.1.100]
port = [9777]
txt = []
= wlp0s20f3 IPv4 Hostname _xbmc-jsonrpc-h._tcp local
hostname = [hostname.local]
address = [192.168.1.100]
port = [8080]
txt = ["uuid=410d41db-e758-4593-85cf-f4d0f0569a96" "txtvers=1"]

Казалось бы всё хорошо, Avahi корректно отдаёт и получает данные. Как от устройства локального, так и в домашней сети.

Но не тут-то было:

# host hostname
hostname has address 192.168.1.100

# host hostname.local
hostname has address 127.0.0.200


«Что за ерунда?», спросите вы. Ведь хост один и тот же! Более того, если вы попробуете опросить другие устройства с суффиксом .local (в моём случае это были смартфон и планшет) он упорно будет выдавать вам адрес 127.0.0.200.

Но при использовании утилиты dig, всё становится понятным моментально:


;; ANSWER SECTION:
hostname.local. 0 IN A 127.0.0.200

;; Query time: 5 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) <== вот наши источник проблемы


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

А разгадка проста. Когда была куцая прошивка от весьма дешманского роутера Xiaomi, просто не мог посмотреть в чём проблема и потому забил. После перепрошивки на что-то не столь убогое, у меня появился полноценный интерфейс с доступом к конфигурационным файлам роутера и там обнаружился всё тот же dnsmasq с пустым конфигурационным файлом.

Решение лежит на поверхности:

# Never forward plain names (without a dot or domain part)
domain-needed

# Never forward addresses in the non-routed address spaces.
bogus-priv

# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only
local=/local/

# Set the domain for dnsmasq. this is optional, but if it is set, it
# does the following things.
# 1) Allows DHCP hosts to have fully qualified domain names, as long
# as the domain part matches this setting.
# 2) Sets the "domain" DHCP option thereby potentially setting the
# domain of all systems configured by DHCP
# 3) Provides the domain part for "expand-hosts"
domain=local

Всё, после чего все устройства будут отдавать правильные адреса и будут корректно работать с приложениями Zeroconf использующими.
techquisitor: (sis)
Что-то почитав список до сих пор вылезающих проблем в OS X Catalina, принял волевое решение:

sudo softwareupdate --ignore "macOS Catalina"

defaults write com.apple.systempreferences AttentionPrefBundleIDs 0

killall Dock


Теперь только сесурити апдейты на Мохаве. Ну или через релиз обновлюсь, если всё хорошо будет.
techquisitor: (sis)
Попалась на глаза проблема в сабже. В гуях вкладка "DNS" в свойствах VPN-подключение игнорируется, описание домена, который нужно резолвить, и его DNS-сервера в /etc/resolvers/ тоже игнорируется. Проверено на High Sierra, Mojave, Catalina.

По Интернету гуляет инструкция вроде этой, но как выяснилось — неверная. Решение нашёл уважаемый коллега Антон Марков из одного околоадминского чата. Так что передаю слово ему.

Итак, решение:

- создаём директорию /etc/resolver (не /etc/resolvers, как пишет индус!)
- создаём там файлы с именами доменов, которые нужно ресолвить, к примеру, contoso.com
- в файлы пишем как минимум строки вида
nameserver 10.0.0.253
nameserver 10.0.0.252

Индус утверждает, что имена файлов не имеют значения, а внутри принимаются также параметры вида:
domain contoso.com
search_order 1
timeout 5

Я не проверял эти параметры, но как минимум в принятии параметра domain я что-то уже сомневаюсь.

Работа описанного метода проверена на Mojave и Catalina. В недрах инета я встречалось упоминание, что это игнорируется как минимум Mountain Lion.


techquisitor: (sis)
В своё время неприятно удивился, когда обнаружил, что на Docker Hub перестали выкладывать докерфайлы от образов. Порой было полезно, чтобы понять почему образ докера так или иначе ведёт или собрать свой с небольшими модификациями не занимаясь всем с нуля.

Решается просто вот этой копипастой:

docker history --no-trunc <IMAGE_ID> | tac | tr -s ' ' | cut -d " " -f 5- | sed 's,^/bin/sh -c #(nop) ,,g' | sed 's,^/bin/sh -c,RUN,g' | sed 's, && ,\n & ,g' | sed 's,\s*[0-9]*[\.]*[0-9]*[kMG]*B\s*$,,g' | head -n -1

Не секретно, просто чтобы легче найти было.
techquisitor: (sis)
Довольно забавная вещь, про которую вроде все наслышаны, но толком почти никто знает. Я и сам долгое время пребывал в заблуждении, что термин "папка" это чисто маркетинговый. Более того, даже нередко слышал, мол "оторвать бы маркетоидам Microsoft руки за переименование папок из директорий" Ан, нет. Оказывается, очень даже инженеры к этому руку приложили.

Обнаружилось на MSDN, собственно.

Для не владеющих заграничной мовой поясню, "папки" это специальный контейнер внутри пространства имён Windows. К директориям относится только то, что лежит физически на файловой системе. Но есть и другие типы папок, такие как "Панель управления", "Сетевое окружение" или "Принтеры", это уже специальные объекты, которые совершенно не соотносятся с физическими файлами на диске.
Другими словами, код управляющий пространством имён никак не привязывается к физическому носителю и должен оперировать папками и различными элементами. Посему всё в Windows отображается папками, поскольку это специальная абстракция.

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

Profile

techquisitor: (Default)
techquisitor

June 2024

S M T W T F S
      1
2345678
9101112131415
161718192021 22
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 17th, 2025 04:06 am
Powered by Dreamwidth Studios