bashdays | Unsorted

Telegram-канал bashdays - Bash Days | Linux | DevOps

22119

Авторский канал от действующего девопса Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue Курс: @tormozilla_bot РКН: https://bit.ly/knd2gov

Subscribe to a channel

Bash Days | Linux | DevOps

Не одевай 3.14зду в лапти, она и так смешная

Такс, давай покончим с сигналами реального времени (СРВ) и выйдем на новый уровень написания Bash скриптов, мыж с тобой уже взрослые.

Вчера мы выяснили СРВ имеют условный индекс 34-64 (в разных дистрибутивах может быть по-разному, проверяй)

Где их применять?

Давай глянем на примере. СИшкой задрачивать не буду, перепишем на Bash.

Задача: у меня есть серверный процесс, который должен получить уведомление от клиента с некоторыми данными (например, номер задачи).

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


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

Пишем сервер signal_listener.sh

#!/bin/bash

handle_signal() {
echo "Получен сигнал $1"
echo "Переданные данные: $2"
}

trap 'handle_signal SIGRTMIN+0 "Task 1 выполнена"' RTMIN+0
trap 'handle_signal SIGRTMIN+1 "Task 2 выполнена"' RTMIN+1

echo "Слушатель запущен. PID: $$"
echo "Ожидаем сигналы..."

while true; do
sleep 1
done


Пишем клиент signal_sender.sh


#!/bin/bash

if [ $# -ne 2 ]; then
echo "Использование: $0 <PID> <TASK>"
echo "TASK может быть 1 или 2"
exit 1
fi

PID=$1
TASK=$2

if [ "$TASK" -eq 1 ]; then
kill -RTMIN+0 $PID
echo "Отправлен сигнал SIGRTMIN+0 (Task 1) процессу с PID $PID"
elif [ "$TASK" -eq 2 ]; then
kill -RTMIN+1 $PID
echo "Отправлен сигнал SIGRTMIN+1 (Task 2) процессу с PID $PID"
else
echo "Ошибка: TASK должен быть 1 или 2"
exit 1
fi


trap = перехватываем сигналы, для СРВ пишем: RTMIN+0 и RTMIN+1

kill -RTMIN+N = отправляет СРВ. Номер сигнала (например, RTMIN+0) задаёт, какой именно сигнал будет обработан.

chmod +x signal_listener.sh signal_sender.sh


Запускаем первый скрипт, видим его PID:


Слушатель запущен. PID: 20821


Во втором терминале запускаем второй скрипт:

./signal_sender.sh 20821 1

Отправлен сигнал SIGRTMIN+0 (Task 1) процессу с PID 20821


Не забываем подставить PID, который выдал первый скрипт.

После отправки СРВ, в терминале где запускали первый скрипт видим:

Получен сигнал SIGRTMIN+0
Переданные данные: Task 1 выполнена


Вот это нихуя се! То есть signal_sender подключился к процессу 20821 и передал в него данные.

В нашем случае данные это 1 или 2. А скрипт signal_listener успешно это схавал и переварил исходя из логики.

Использование СРВ открывает ОГРОМНЫЕ возможности, чтобы несколько скриптов или приложений взаимодействовали друг с другом на низких уровнях не использую велосипеды и прокладки.


А когда какой сигнал использовать?

Хе… 34-64… Если у тебя не сложная логика, можешь использовать любой индекс в этом диапазоне. Но если логика совсем ебанутая, то логичнее использовать СРВ с разными индексами для передачи данных.

Например, тебе нужно обрабатывать разные типа событий. В этом случае проще разделить их на разные сигналы.

Типа такого:

SIGRTMIN+0 (34): "Начать обработку данных"
SIGRTMIN+1 (35): "Обновить конфигурацию"
SIGRTMIN+2 (36): "Выебать медведя в жопу"
SIGRTMIN+3 (37): "Остановить обработку данных"


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

А можно обрабатывать в порядке приоритета. СРВ обрабатываются в порядке их номеров (от SIGRTMIN к SIGRTMAX). Это заебись если у тебя задачи с разным приоритетом.

SIGRTMIN+0: Высший приоритет (аварийная задача)
SIGRTMIN+1: Средний приоритет (регулярные уведомления)
SIGRTMIN+2: Низший приоритет (обновление статистики)


Если сигналы поступают одновременно, сначала обработается SIGRTMIN+0, потом SIGRTMIN+1 и т.д.

Важно! Использование одного СРВ может привести к переполнению и перезаписи очереди. Имей это ввиду. Потому, что с этим часто ловят багу и потом неделю не могут понять в чем причина. Иногда пишут что СРВ не теряются, но практика показывает обратное.

Если что-то еще вспомню, накидаю отдельным постом.

Удачи тебе и береги себя!

про сигналы писал ранее тут и тут и тут и тут


tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Если взглянуть на картинку выше, то в этом списке ты не найдешь сигналов с номером 32 и 33. Список сформирован командой kill -l.

И куда же блядь эти сигналы делись?

А всё просто, сигналы с номерами 32 и 33 в современных линукс дистрибутивах зарезервированы для использования библиотекой glibc. И используются для реализации механизма потоков (threads).

Исходник glibc где он резервирует эти сигналы. Можешь увидеть что они будут не обязательно 32 и 33.

22 static int current_rtmin = __SIGRTMIN + 2;
23 static int current_rtmax = __SIGRTMAX;


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

Сигналы же начинающиеся с номера 34 называются — сигналами реального времени. Более подробно про сигналы реального времени можешь почитать тут.

Если попытаться отправить сигнал 32 или 33 вручную процессу, то получишь хуй с маслом. Ядро эти сигналы обрабатывать не будет.

Потому что даже ядро не имеет к этим сигналам никакого отношения. А вмешиваться в потоки glibc тебе никто не даст, чтобы ты письку себе случайно не оторвал.

kill -32 10929

Unknown signal 32


Чтобы убедиться что сигнал 32 и 33 не являются сигналами реального времени, можно написать такой тест:

#include <stdio.h>
#include <signal.h>

int main() {
printf("SIGRTMIN: %d\n", SIGRTMIN);
printf("SIGRTMAX: %d\n", SIGRTMAX);
return 0;
}


Скомпилировать и запустить:

gcc -o signals signals.c
./signals


В ответ ты получишь что-то подобное:

SIGRTMIN: 34
SIGRTMAX: 64


Test Passed! Сигналы реального времени начинаются с 34. Но опять же не факт, что в твоём дистрибутиве будет так же. Мож ты всё еще на Slackware сидишь.

А нахуя нужны сигналы реального времени?

Давай лучше завтра, сегодня мы разбирались куда делись сигналы 32 и 33. Не хочу раздувать этот пост и пугать тебя раньше времени СИськастым кодом.

Увидимся!

про сигналы писал ранее тут и тут и тут


tags:
#linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Всем привет. Опять в чате заговорили про СХД и кое-то вспомнилось.

Когда-то я занимался вопросом выбора дисков для серверов и мне стало интересно, почему диски для корпоративных систем стоят так дорого?

Начал читать статьи и сравнивать характеристики. Нашел старую статью, где говорилось, что один инфогигант в рейдах использует диски wd-blue, мол так дешевле получается.

Да, дешевле. Но при этом нужно отдавать себе отчет, что ты делаешь, как и к чему это может привести.

Для начала сравним ОДИН параметр нескольких ssd и hdd дисков: Конкретно Неисправимых ошибок чтения/прочитанных бит.

sata hdd wd-blue 1Tb (WD10EZEX)=1 ошибка на 1E14 бит
sata hdd wd-gold 1 Tb(WD1005FBYZ)=1 ошибка на 1E15 бит
sas hdd Toshiba 900 Гб (AL15SEB090N) 10 ошибок на 1E17 бит
sata ssd Micron 960 Гб (MTFDDAK960TDS-1AW1ZABYY)1 ошибка на 1E17бит


Данные брал с сайта одной компьютерной компании с синим логотипом, отличающейся классной технической грамотностью.

Короче, вероятность считать битый шифрованный архив с WD-GOLD в 10 раз меньше, чем с WD-BLUE и в 100 раз c Toshiba, и в 1000 раз меньше с ssd Micron.

Хочу так же обратить внимание на Проникновение долбанных маркетологов Toshiba в тех. описание. 10 ошибок на 1E17 бит РАВНО 1 ошибок на 1E16 бит.

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

sudo smartctl -a /dev/sdXX

#смотреть после Error


Конечно, для хранения можно использовать и wd-blue, но только с применением специальных файловых систем с контрольными суммами, или применением форматов хранения файлов с избыточностью (типа платный rar).

Кстати, не все рейды справятся с такой ошибкой. Большинство рейдов (0,1,5,10) защищают от поломки диска, но не от неправильного чтения.

6 - вроде бы считает контрольные суммы для каждой записи и корректирует, если что (поправьте если не прав).

Ну, и рейдовые zfs решают проблемы, поскольку содержат контрольные суммы файлов.

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

tags: #hardware © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Многие догадываются, а некоторые точно знают на каких онлайн-сервисах можно посмотреть принадлежность домена или IP организации. Я для этого использую программу whois.

apt install whois
whois 164.92.216.105


Использовать whois в скриптах не рекомендую, потому что для этого, во-первых, есть специальные базы, а во вторых - забанят.

Поверьте, я знаю о чем говорю. И иногда бывает так, настроение утром испорчено, и какой-то хостер тебя ну совсем задолбал и хочется просто взять и забанить его целиком, смотрим вывод:

NetRange:164.92.64.0 - 164.92.255.255
CIDR:164.92.128.0/17, 164.92.64.0/18


Во, здесь повезло заполнено поле CIDR. Можно забанить 164.92.128.0/17 и 164.92.64.0/18 и все будет хорошо, но так бывает не всегда.

whois 114.199.33.115
inetnum: 114.199.0.0 - 114.199.63.255


Поле CIDR отсутствует, есть только inetnum: И то хлеб. Как преобразовать NetRange или inetnum в формат CIDR, ведь iptables не понимает диапазоны ip адресов. Ему подсети подавай (CIDR).

Для этого воспользуемся калькулятором ipcalc. Вообще-то я предпочитаю sipcalc, потому что он бинарный и работает быстрее, но функции разбивки диапазона ip адресов у него нет. Что-то я отвлекся.

apt install ipcalc
ipcalc -r 164.92.64.0 - 164.92.255.255

#вывод
deaggregate 164.92.64.0 - 164.92.255.255
164.92.64.0/18
164.92.128.0/17

ipcalc -r 114.199.0.0 - 114.199.63.255

# вывод
deaggregate 114.199.0.0 - 114.199.63.255
114.199.0.0/18


Итого: с помощью ipcalc -r можно разбить любой непрерывный, даже самый безумный, диапазон ip адресов на подсети в формате CIDR, и количество этих подсетей будет не более 32.

В качестве поиграться предлагаю разбить диапазоны 127.0.0.1-192.168.1.1 или 0.0.0.1-255.255.255.254 Вот только банить их не нужно. А вот разбивать диапазон 0.0.0.0 255.255.255.255 не рекомендую, а почему не скажу. Кто еще какими сетевыми калькуляторами пользуется?

man whois
man ipcalc


tags: #networks © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

После моей статьи в чате началось активное обсуждение, в простонародье именуемое как срач.

Могут ли быть маски подсети /32 или /31?

Я не буду много рассказывать про маски, кому интересно, гляньте в википедии. Мы же остановимся только на масках подсетей /32 /31, потому что они являются исключением из правил.

Физические сети, построенные с этими масками не могут иметь широковещательного адреса. Но это не значит, что данные МАСКИ нельзя использовать.

Да, данные маски нельзя использовать для построения классических сетей (хотя здесь говорят, что /31 - можно), и некоторые маршрутизаторы не дадут этого сделать.

Но данные маски вполне могут (а иногда должны) быть использованы для для разбиения ЛЮБОГО непрерывного диапазона ip на записи в формате CIDR.

И без масок /31 /32 этот ряд будет не полным. Мало того, iptables использует только нотацию CIDR. Например, подсеть /32 задает отдельный ip, поэтому правила, содержащие одиночный адрес, задаются с маской /32, даже если вы это не указали. (192.168.0.1=192.168.0.1/32)

Маска 31 - задает два рядом стоящих ip и позволяет уменьшить количество записей, увеличив скорость.

Но не любые соседние ip могут быть объединены этой маской, а только отличающихся последним битом,

Например: 192.168.0.1 и 192.168.0.0 можно объединить в 192.168.0.0/31, а 192.168.0.1 и 192.168.0.2 - нельзя.

Ну и теперь посмотрим, что об этой фигне говорят сетевые калькуляторы ipcalc и sipcalc.

Я тут из вывода удалил менее информативные поля. Если кому интересно - смотрите полный вывод сами.

apt install ipcalc sipcalc
sipcalc 192.168.0.1/32

# вывод
Host address - 192.168.0.1
Network address - 192.168.0.1
Network mask (bits) - 32
Broadcast address - 192.168.0.1
Addresses in network - 1
Network rang - 192.168.0.1 - 192.168.0.1

ipcalc -b 192.168.0.1/32
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.255 = 32
Hostroute: 192.168.0.1
Hosts/Net: 1

sipcalc 192.168.0.1/31
# вывод
Host address - 192.168.0.1
Network address - 192.168.0.0
Network mask (bits) - 31
Broadcast address - 192.168.0.1
Addresses in network - 2
Network range - 192.168.0.0 - 192.168.0.1

ipcalc -b 192.168.0.1/31
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.254 = 31
Network: 192.168.0.0/31
HostMin: 192.168.0.0
HostMax: 192.168.0.1
Hosts/Net: 2


На мой взгляд, ipcalc для такой экзотики работает более правильно, поскольку Broadcast для подсетей >30 не выводится.

Вывод: построение физических сетей с масками >30 возникают трудности.

А при фильтрации маски /31 /32 ничем не отличаются от остальных /1-/30

А как, чем, и для чего разбивать диапазоны ip, читайте в следующей статье.

tags: #networks © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Здрасти господа и дамы. Камон замутим кодревью для нашего с вами подписчика и коллеги. Bash скрипт с вводными:

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


Пожалуйста пишите объективно и по делу. Я не вправе один это делать, будет не объективно, поэтому скидываю сюда и надеюсь на ваши скиллы, с автором скрипта этот момент оговорен.

Всем заранее спасибо!

tags: #codereview

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Сократите расходы на IT-инфраструктуру. Узнайте больше о серверной ОС от Selectel 👀

С ростом трафика увеличиваются задержки в сети, что сразу отражается на всех процессах. Обычно для повышения производительности команда наращивает железо. Это неидеальный выход: расходы на инфраструктуру начинают расти. Selectel нашел способ решения проблемы и создал серверную ОС на базе Linux.

Как это работает?

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

Проверьте сами — сейчас вы можете поучаствовать в демо-тестировании ОС от Selectel.

А чтобы узнать больше об ОС и о сценариях ее применения на реальных проектах, присоединяйтесь к вебинару 20 ноября в 12:00. Регистрация по ссылке.

ERID: 2VtzqxW5EAH

Читать полностью…

Bash Days | Linux | DevOps

🔥 Как сократить баги и ускорить релизы с помощью безопасной разработки

Ты создаешь крутые приложения, но баги и уязвимости продолжают отнимать драгоценное время, особенно когда горят дедлайны? 😬

Представь, что ты можешь защитить свой код на каждом этапе разработки и при этом сэкономить нервы и время! Мы разработали новый курс «Безопасность приложений для разработчиков», чтобы показать, что безопасность — это не про сложности, а про качество и экономию времени.

🎯 Почему стоит записаться?

· Ты научишься строить защиту ещё на этапе планирования, минимизируя уязвимости.
· Безопасность не замедлит процесс — мы покажем, как сохранять темп и укладываться в дедлайны.
· Меньше проблем на проде — ты будешь предотвращать уязвимости на ранних стадиях, избегая лишних правок.

👨‍💻 Авторы курса — эксперты Positive Technologies, одной из лидирующих компаний на рынке кибербезопасности. Ты будешь учиться у профессионалов, которые ежедневно работают над безопасностью приложений.

Старт курса 25 ноября, длительность — 3 недели, формат — онлайн. Учись в любое время и из любой точки.

Не трать время на исправления багов — записывайся на курс и учись предотвращать их заранее!
👉 [Забронировать место на курсе]

Читать полностью…

Bash Days | Linux | DevOps

Как сократить расходы на IT-инфраструктуру в 5 раз?

Растущие нагрузки часто приводят к непропорциональным расходам на IT-инфраструктуру, замедляя развитие бизнеса.

Недавно мы помогли клиенту с ML-проектом, где архитектура на Kubernetes и Knative вызывала долгие деплои и высокие затраты. Проведя аудит, мы упростили систему. Заказчик адаптировал код за 3 дня, а мы развернули новый кластер, что позволило сократить расходы в 5 раз, сохранив стабильность и гибкость системы.

Готовы оптимизировать свою инфраструктуру? Закажите консультацию и начните повышать эффективность уже сегодня!

«Факт» — IT-интегратор с 12-летним опытом, создающий безопасные и стабильные решения для высоконагруженных систем. Помогаем бизнесу расти с лучшими DevOps-практиками!

Реклама. ООО ЦИТ "ФАКТ", ИНН: 7456005978

Читать полностью…

Bash Days | Linux | DevOps

Хотите освоить управление файлами в РЕД ОС как профессионал? Приходите на бесплатный открытый урок "Работа с файлами и каталогами в РЕД ОС"!

🔥 Погружение в мир файловой системы РЕД ОС:
Разберемся с основами: файлы, каталоги, пути, и как они работают.
Научимся создавать, редактировать, переименовывать файлы и папки, словно вы гуру Linux.

Освободим вас от страха перед командной строкой, научимся создавать новые файлы с помощью удобных команд.
Прокачаем ваши навыки навигации по файловой системе: абсолютные и относительные пути, никаких "заблуждений"!
Поймем, как работать с пробелами и специальными символами, чтобы больше не было неприятных сюрпризов.

💪 Кому будет полезно:
Системным администраторам, уже знающим Linux, но желающим покорить РЕД ОС.
Тем, кто хочет выйти за рамки базовых знаний и освоить тонкости управления файлами.


🎁 Что вы получите:
Практические навыки использования команд для работы с файлами и каталогами.
Уверенность в организации файловой структуры, чтобы найти нужный файл за секунды.

⏱️ Запись на урок и дополнительные вопросы: https://vk.cc/cE5FX4

Не откладывайте на потом, начинайте осваивать РЕД ОС уже сегодня!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Bash Days | Linux | DevOps

K2 Cloud + DevOops Conf = бесплатный день конференции для инженеров 💜

Ребята из K2 Cloud помогли организовать Community Day для DevOps-специалистов. 6 ноября ты сможешь бесплатно послушать часть докладов конференции DevOops: от основ работы сертификатов до организации Flux CD monorepo. Для участия нужно только зарегистрироваться.

Подробнее на сайте

Реклама. АО "К2 Интеграция", ИНН: 7701829110, erid: 2VtzqvCyAua

Читать полностью…

Bash Days | Linux | DevOps

Открытый урок для менеджеров разработчиков и специалистов, работающих с 1C

📒Тема:
Сравнение версий КОРП и ПРОФ на примере конфигураций 1С: БП и 1С: ЗУП

📕Рассмотрим:
- Основные возможности программных продуктов 1С: БП и 1С: ЗУП;
- Для каких целей используются программные продукты 1С: БП и 1С: ЗУП;
- Сравнение версий ПРОФ и КОРП.

📗Спикер:
Юлия Курзова — опытный аналитик 1C и преподаватель.

Встречаемся сегодня в 20:00 мск. Всем участникам дадим скидку на основной курс.

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://otus.pw/Yrtd/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Bash Days | Linux | DevOps

Kubernetes живёт своей жизнью, и обязательно ломается под конец рабочего дня?

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

👉Набор на курс «Kubernetes Мега» идёт до 8 ноября

За 7 недель вы научитесь:
🔸переносить продукт на платформу k8s
🔸разворачивать отказоустойчивые кластеры
🔸ускорять траблшуттинг
🔸повышать отказоустойчивость продукта
🔸разворачивать и обслуживать кластер с автоматической ротацией сертификатов, автодеплоем и правильным хранением секретов

Бонус к «Kubernetes Мега»
🔥Видеокурс «Kubernetes База» в подарок

100 000 ₽ (вместо 150000 ₽)
Промокод на скидку — в боте. Ограниченное кол-во мест


ОБНОВИЛИ ВЕСЬ КУРС в сентябре 2024:
78 часов практики
7 встреч со спикерами

Промокод и подробности курса — в боте 👈

Реклама ООО «Слёрм» ИНН 3652901451

Читать полностью…

Bash Days | Linux | DevOps

Я уже как-то говорил, что считаю awk недооцененным. Большинство примеров сводится к тому, чтобы убрать лишние колонки из отчета.

А между тем, AWK, практически полноценный язык программирования.

Сегодня я Вам это постараюсь показать. Будем решать задачу о расстановке 8 ферзей на шахматной доске, так, чтобы они не били друг-друга.

Решать будем методом перебора. Ну, не полного перебора, немного включим голову.

Напомню, ферзь бъет по вертикали, горизонтали, диагонали. Поэтому для начала расставим каждого ферзя на свою вертикаль и будем двигать, проверяя условия боя.

Таких будет два - горизонталь и диагональ. Для удобства клеточки буду нумеровать с 0.

Итого - получаем 10 вложенных циклов (8 двигают ферзей, 2 - проверка условий боя) ха, тут всего-то 8^8=16777216 вариантов.

#!/bin/bash
#8 ферзей

awk 'BEGIN{
for(c[0]=8;c[0]--;){
for(c[1]=8;c[1]--;){
for(c[2]=8;c[2]--;){
for(c[3]=8;c[3]--;){
for(c[4]=8;c[4]--;){
for(c[5]=8;c[5]--;){
for(c[6]=8;c[6]--;){
for(c[7]=8;c[7]--;){
b=1
for(i=0;i<7 && b;i++){
for(j=i+1;j<8;j++){
if(c[i]==c[j]){b=0;break}
a=c[i]-c[j];n=j-i
if(a==n || a==-n){b=0;break}}}
if(b){print c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7] }
}}}}}}}}
}'


Пояснения:

c[i]==c[j])
- проверка на горизонталь.

a=c[i]-c[j];n=j-i - проверка на диагональ.

Вообщето-то тут должен быть abs(c[i]-c[j]), но в awk нет модуля, поэтому if(a==n || a==-n)

Да, и в awk оператор break выходит из одного цикла, поэтому пришлось немного извращаться. (&& b), но задача решена.

Примечание я знаю про алгоритмы пермутаций, но тут лобовое решение.

Вариантов всего 92.

Приведу последний: 04752613 Время выполнения на моем дохлом ноуте ~1.5 минуты.

Продолжение следует...

tags: #bash © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Здрасти. Как-то я писал про strace и как применять инъекции. Если пропустил, то читай тут и тут.

Ниже скрипт который автоматически прономерует системные вызовы для последующих инъекций.

#!/usr/bin/perl

use strict;
use warnings;

my %numbs;
select STDERR;
while(<STDIN>) {
if( /^[0-9]++\s++([a-z0-9_]++(?=\())/ ) {
my $t = ++$numbs{$1};
s/\s+/ \e[31m$t\e[m /;
die $! if( keys %numbs == 1000 );
}
print;
}
exit(0);


Сохраняем это безобразие в файл num_syscalls и делаем chmod +x, ну а дальше запускаем в связке с strace:

strace -o'|./num_syscalls' -yf sh -c 'ls|cat'


Теперь получаем такой выхлоп:

456107 48 close(3</usr/) = 0
456107 52 rt_sigreturn({mask=[]})
456107 63 openat(AT_FDCWD</usr/local/sbin>)
456107 53 newfstatat(3)
456107 64 openat(AT_FDCWD</usr/local/sbin>)


Смотрим второй столбик, включаем логику и видим, что системные вызовы нумеруются.

Например, возьмем системный вызов openat, видим 63, 64. Это значит что openat был вызван 64 раза. А newfstatat 53.

Теперь берем нужный номер системного вызова и применяем инъекцию. Как это сделать и для чего, опять же показывал на примерах (ссылки в начале этого поста).

Тема крутая, не нужно ебаться и считать руками.

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

А чтобы получить только трассировку, можно сделать так:

strace -o'|./num_syscalls' -yf ls > /dev/null


Если бесит подсветка, выпили из перловского скрипта управляющий символ «\e[31m\[em».

Такие дела, изучай!

tags: #linux #debug

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Умножаем любовь к математике, чтобы разделить ее с вами

ИТ-специалисты, слышали, скоро День математика?

1 декабря пройдут главные онлайн-события мероприятия: доклады от профессоров математики из МФТИ, ВШЭ и ЦУ и математический диктант. Хорошая возможность пообщаться с единомышленниками и просто классно провести время.

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

Читать полностью…

Bash Days | Linux | DevOps

Приглашаем разработчиков и всех, кто интересуется облачными технологиями, на митап по Go от MWS. Расскажем, как мы строим облачную платформу с нуля и какие технологии используем.

Когда: 22 ноября, 18:00
Где: кинотеатр «Победа», ул. Ленина, 7, г. Новосибирск

В программе:
— Биллинг в облаке: опыт MWS и решение проблем миграции в продакшене
— Тестирование Managed Kubernetes: от основ до продвинутых практик с Ginkgo
— EBPF & Go: как писать код для ядра безопасно

Встречаемся в кинотеатре. После докладов вас ждут общение в неформальной обстановке, напитки и еда.

Регистрируйтесь по ссылке.

Читать полностью…

Bash Days | Linux | DevOps

Как построить облако с нуля? Узнайте от разработчиков новой облачной платформы MWS.

MWS запускает реалити-проект Building the Cloud о создании новой публичной облачной платформы. В прямом эфире наши эксперты и инженеры раскрывают закулисье облачной разработки, делятся уникальным опытом и отвечают на вопросы.

В первом выпуске расскажем о сердце облака — сервисе Compute.

О чём поговорим:
● Зачем мы строим новое публичное облако MWS
● Как устроена архитектура сервиса Compute в новой платформе MWS
● Что происходит «под капотом» облака, когда создаётся виртуальная машина
● Расскажем о планах и роудмапе новой платформы

Приглашаем разработчиков и профессионалов облачного рынка! Задайте свои вопросы разработчикам нового облака MWS и узнайте всё из первых рук.

📅 Дата: 20 ноября 2024, 11:00
👉 Регистрируйтесь сейчас, чтобы не пропустить эфир

Читать полностью…

Bash Days | Linux | DevOps

С пятницей друзья! Пицца ёпта! #pizza

Вопрос:

какая фигура должна быть в начале этого ряда?

Читать полностью…

Bash Days | Linux | DevOps

😄Okko приглашает технических специалистов на
митап по инфраструктура: Pulumi & Airflow, посвященный современным инструментам: Pulumi и Airflow. https://okkomeetup.timepad.ru/event/3116334/

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

Митап будет интересен DevOps-инженерам, SRE-инженерам, системным администраторам, а также всем, кто работает с инфраструктурой.

Формат: онлайн и офлайн
Участие: бесплатное

Реклама. ИП Крючков В.В. ИНН: 345917031475, erid: 2VtzqxTBCMU

Читать полностью…

Bash Days | Linux | DevOps

Сегодня столкнулся с проблемой. У провайдера через раз работает dhcp и не выдает статический ip адрес.

Собственно во всей конторе нет инета. А сегодня пятое число, зарплату платить нужно - пропускать нельзя :-)

Но я не об этом. Звоню провайдеру. Говорю, DHCP - просто раздает. Давай пропишем статический IP, и все будет хорошо. Ну, ок. Присылает мне данные, а там маска 255.255.255.192.

Начинаю вводить. pfSense требует краткую маску. Блин. Инета нет. ipcalc нет, потому как винда (кстати, sipcalc, на мой взгляд лучше).

Можно только с помощью calc перевести 192 в бинарное число. 11000000.

Ну, а теперь мнемоника. Единичка большая, поэтому увеличивает маску, нолик маленький, поэтому уменьшает.

Все помнят, что 255.255.255.0 = /24 = 11111111 11111111 11111111 00000000, 255.255.255.255 = /32 = 11111111 11111111 11111111 11111111.

Теперь считаем:

255.255.255.192 = 11111111 11111111 11111111 11000000


24 + 2 "единички" = /26 + Потому что единичка большая и увеличивает маску

или

32 - 6 "ноликов" = /26 - Потому что нолик маленький. Фиксиков все смотрели?

С какой стороны считать - ваше дело. Я считаю нолики.

Не важно, с какой стороны считать, результат одинаковый.

Конечно, 192, можно было и в мозгах разложить в бинарный, но я в старости стал таким ленивым...

Как только прописал, все срослось, интернет заработал, зарплата пришла. Красота.

tags: #рабочиебудни #networks © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Недавно прочитал статью Страйфи Ленджок и решил поделиться многолетним опытом использования rdp.

Сразу оговорюсь, что я пытался использовать rdp на linux для замены виндового сервера при работе с 1с.

OC - debian, потому что в debian rdp есть в репозитариях. А, вообще живет он здесь.

Для установки на сервере - пара команд:

sudo apt install xrdp
sudo dpkg-reconfigure xserver-xorg-legacy

# выбрать подключения "от кого угодно"


Все настройки в /etc/xrdp основной файл xrdp.ini .)

В качестве DE использовал XFCE и LXDE по причине малых ресурсов. LXDE - лучше.

В качестве клиента (и на клиенте) использовал xfreerdp из пакета freerdp2-x11.

sudo apt install freerdp2-x11


Пробовал remmina, но она подглюкивает. Проще всего использовать алиас для подключения. У меня такой:

alias rdp='function _rdp(){ xfreerdp /h:700 /w:1300 /cert-ignore /v:"$@";}; _rdp '


700x1300 - размеры окна /cert-ignore - нужно для подключения к виндовым серверам, поскольку они раз в 120? дней меняют сертификаты, и приходится ручками удалять хэш из файла.

Подключаюсь так:

rdp 192.168.1.100

# или так

rdp 192.168.1.100 /u:username


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

1. Окно аутентификации можно настраивать. (xrdp.ini Поставить логотип конторы и прописать название сервера в заголовке окна. Удобно.)

2. Любит забивать папки пользователей логами (.xsession-errors .xorgxrdp.log) Решается отключением логирования в ini или ссылкой этих файлов в /dev/null.

3. В XFCE проблемы с переключением раскладки клавиатуры при переподключениях.

4. В LXDE проблемы с раскладкой при входе под одним пользователем с разных машин (нужно войти в свойства клавиатуры и выбрать "модель клавиатуры".

5. Firefox, Thunderbird, Libreoffice - работают прекрасно при входе пользователя только по RDP.

6. Программы из п.3 не работают, если тот же пользователь вошел "локально" (винда проблему решает "выбрасыванием" одной сессии).

7. 1с работает плохо. На некоторых серверах наблюдались проблемы с печатью форм (некоторые буквы в НЕКОТОРЫХ формах печатаются квадратиками и накладываются друг на друга). Причем под одним пользователем проблемы, под другим пользователем проблем нет.

8. При подключении с винды при работе с 1с, часто наблюдается "зависание интерфейса" на несколько минут. Что делает работу практически невозможной.

9. Пытались связываться с разработчиками 1с - ответ был такой: Не можем синтезировать ваши проблемы. Предложения по передаче логов, помощи в отладке игнорировались.

➡️ man xfreerdp

tags: #linux #networks © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

За пост спасибо нашему коллеге и подписчику - Страйфи Ленджок


В современном мире всё больше задач требуют работы с графическими приложениями на удалённых Linux-серверах, особенно с использованием GPU. Это может быть рендеринг в Blender, обучение нейронных сетей или даже облачный гейминг. Существует несколько способов организации такого доступа, каждый из которых имеет свои особенности.

X11 Forwarding через SSH

Один из самых простых методов — использование X11 Forwarding через SSH. Для этого достаточно базового пакета openssh. Подключение осуществляется командой:

ssh -X -p [порт] [пользователь]@[IP_сервера]


Флаг -X включает проброс X11. После подключения можно запускать графические приложения, например:
firefox &

Однако этот метод имеет значительные недостатки. Интерфейс и ввод отображаются с заметной задержкой, особенно при воспроизведении видео или работе с 3D-графикой. Это связано с тем, что X11 Forwarding передаёт по сети каждое действие с окном без оптимизации и сжатия данных.

RDP в Docker с поддержкой GPU

Более современный и эффективный подход — использование RDP-сервера в контейнере Docker с поддержкой GPU. Протокол RDP изначально разработан для работы с удалённым рабочим столом через сеть и использует алгоритмы сжатия и кэширования элементов интерфейса.

Для настройки поддержки GPU в Docker необходимо установить драйверы и nvidia-container-toolkit, а затем настроить Docker для работы с GPU Nvidia:

sudo apt install nvidia nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker


Для AMD

sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/6.2.1/ubuntu/noble/amdgpu-install_6.2.60201-1_all.deb
sudo apt install ./amdgpu-install_6.2.60201-1_all.deb
sudo apt update
sudo apt install amdgpu-dkms rocm
sudo reboot
sudo apt install rocminfo
# Добавить в файле `/etc/environment` PATH="/opt/rocm/bin"
docker run --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined <image>


Здесь:


--device=/dev/kfd — предоставляет доступ к основному интерфейсу вычислений.
--device=/dev/dri — предоставляет доступ к интерфейсу прямого рендеринга.
--security-opt seccomp=unconfined — отключает ограничения seccomp для контейнера, что необходимо для корректной работы с GPU.

Далее запускается контейнер с RDP-сервером, например, с использованием образа. После запуска контейнера можно подключиться к нему с помощью RDP-клиента, такого как Remmina, настроив SSH-туннель для безопасности и сжатия трафика.

Этот метод обеспечивает более высокую производительность и комфортную работу с графическими приложениями на удалённом сервере, включая поддержку GPU для задач, требующих аппаратного ускорения.

tags: #linux © by Страйфи Ленджок

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Мало кто знает что у cloudflare есть фича, которая раньше называлась Argo Tunnel, а сейчас это просто Tunnels. И да, она бесплатная.

А чо делает?

Смотри, к примеру у тебя локально поднят виртуалбокс (proxmox), а в нем крутятся виртуалки. В какой-то момент тебе понадобилось прокинуть эту виртуалку в интернет. А у тебя дома несколько роутеров, NAT, нет белого айпишника, короче полный набор подводных камней и хуйни.

В теории можно прокинуть на роутере порты, задействовать через API привязку динамического IP адреса к домену. Ну или в крайнем случае воспользоваться ngrok и т.п. решениями.

Грубо говоря можешь свой локальный proxmox на малине посадить на домен и он будет доступен из интернета с автоматическим ssl и всеми плюшками. Аналогично как и свой домашний гитлаб.

Tunnels — позволяет поднять туннель до cloudflare и сделать что-то вроде приватной сети, где все нужные сервисы за NAT в домашней сети ты без труда повесишь на домен и выставишь жопой в интернет. Причем вообще не напрягаясь.


Запрятана эта фича знатно и глубоко, поэтому про нее говорят в основном в англоязычном сегменте.

Как настроить?

Настройку я вынес в отдельную статью. С картинками будет намного понятнее, что происходит и как это работает.

Читаем 👇

➡️ Как настроить Tunnels от Cloudflare.

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

Такие дела!

tags: #linux #networks #рабочиебудни

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Сегодня поговорим про подводные грабли.

Работая над скриптом решил немного оптимизировать код. А чего, зачем цикл, если строка всего одна.


echo "1"|
while read; do
echo $REPLY,2
done

# на

echo "1"| read
echo $REPLY,2


А не тут то было.

1,2
,2


Во втором случае read не читает значение. Точнее читает, иначе бы скрипт ожидал ввода с клавиатуры, но переменная REPLY пустая.

Перечитал help по read. Ничего не пойму. Пришлось обратиться к Роману.

Он пояснил, что во втором случае команда read запускается в отдельном subshell, считывает значение. Вот только передать переменную можно только в дочерние процессы, а в родительские нельзя.

Поэтому при завершении процесса read значение переменной REPLY теряется.

Пришлось читать, как работают конвейеры. Здесь писать не буду. Просто приведу ссылку на wiki: https://bit.ly/4fajufR

Оптимизировать можно, но так:

echo "1"| (read;echo $REPLY,2)
#или так
read < <(echo "1")
echo $REPLY,2
# если переменная одна то классика
a=$(echo 1)


Все, теперь я знаю, как работает pipeline. Надеюсь и Вы.

tags: #bash © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Not again...

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Задача та же. 8 ферзей.

Предыдущая часть здесь: Воспользуемся тонкостями языка. На шахматной доске 8 клеток (тут может круто подойти восьмеричная система.) Таким образом заменяем 8 вложенных циклов всего одним!!!, с преобразованием числа в восьмеричное.

Каждая цифра - отдельный столбец.

Значение - номер строки.

#!/bin/bash
#8 ферзей

awk 'BEGIN{
i=8^8
while(i--){
c=sprintf("%08o",i)
j=8
while(index(c,--j)){}
if(j<0){
j=8
while(j--){q[j]=substr(c,j+1,1)}
b=1
for(m=0;m<7 && b;m++){
for(j=m+1;j<8;j++){
a=q[m]-q[j];sub(/-/,"",a)
if(a==(j-m)){b=0;break}}}
if(b){print c}
}}}'
#---


while(index(c,--j)){} - чисел всего 8(0-7), если index=0 (нет цифры j в числе с из 8 цифр, значит каких-то цифр 2).

Обратите внимание тело цикла пустое! Если цикл прошел полностью - дублей нет. Вау.

Алгоритм пермутаций без повторений методом перебора. (проверка на горизонталь).

while(j--){q[j]=substr(c,j+1,1)} - преобразовали число c в массив цифр q[]

Дальше аналогично предыдущей программе, кроме sub(/-/,"",a) - еще один аналог модуля.

Просто отбрасываем "-". Как конструкция по скорости не знаю, не проверял.

Программа отработала примерно за 41с.

Какой-то код маленький получился, и работает быстрее. Но, главное результаты совпадают.

Кто там хотел изучать bash?

Слабо реализовать на чистом bash?

Интересно было бы и время выполнения сравнить.

tags: #bash © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

там чет телега с комментами намутила и у последнего поста про ферзей кнопку не сделала, кто хотел высказаться, можете это сделать по кнопке ниже 👇

Читать полностью…

Bash Days | Linux | DevOps

Дарим страшно выгодный сервер от Serverspace🎃

Cоздайте сервер с любой конфигурацией c 28 октября до 3 ноября и получите возможность выиграть бесплатную инфраструктуру в Serverspace на 12 месяцев!

▪️Удобная панель управления
🔸Процессоры Intel Xeon Gold
▪️ЦОДы на 4 континентах
🔸Высокий uptime
▪️24/7 поддержка

Как стать участником розыгрыша?

1. Зарегистрируйтесь в панели управления Serverspace;
2. Создайте сервер с любой конфигурацией – выберите ЦОД, характеристики и нажмите «Создать сервер».
3. Хватайте приз! Получите письмо с информацией о вашем выигрыше на электронную почту.

Подробную информация о хэллоуинском розыгрыше можно найти тут🎁

Serverspace - международный облачный провайдер, предлагающий автоматическое развертывание виртуальной инфраструктуры на базе Windows, Linux и российских ОС из любой точки мира менее чем за 1 минуту.

Реклама ООО «ИТГЛОБАЛКОМ ЛАБС»
ИНН 7841483359
Erid CQH36pWzJqDLvVfBSvfx7CrPipLP6EuU9SKCBdBrp8okc8

Читать полностью…

Bash Days | Linux | DevOps

Анонсируем новый вебинар от экспертов МТС Web Services!
30 октября поговорим про облака в действии

☁️ Почему компании выбирают облачные технологии для решения своих задач? Эксперты MWS расскажут, как облачные сервисы обеспечивают возможности для управления данными, а также покажут реальные облачные кейсы из ритейла и производства.

📌 Присоединяйтесь к онлайн-дискуссии — задавайте свои вопросы экспертам и узнайте, как облака на практике помогут решить ваши задачи.

В программе:

• Какие бывают облака
• Компоненты инфраструктуры облачного провайдера
• Виртуализация: типы и принципы работы
• Облачные сервисы: IaaS, PaaS, DBaaS, SaaS
• Отказоустойчивость облака
• Преимущества перехода в облако
• Примеры использования облачных технологии

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

Зарегистрироваться и узнать все про облако

Реклама. ПАО "МТС", ИНН: 7740000076.

Читать полностью…
Subscribe to a channel