Линукс и DevOps Дни @linuxskillselevation_devops Channel on Telegram

Линукс и DevOps Дни

@linuxskillselevation_devops


Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.

Линукс и DevOps Дни (Russian)

Добро пожаловать в канал "Линукс и DevOps Дни"! Если вы увлечены разработкой, devops, linux, скриптами, тестированием, сисадминством, техдирством, пиэмством и айтишной жизнью, то вы попали по адресу. Наш канал предлагает уникальный контент, посвященный этим темам, который поможет вам расширить ваше знание и навыки в области информационных технологий. Здесь вы найдете обзоры последних технологических новинок, полезные советы по работе с linux, разработке и тестированию программного обеспечения, а также обмен опытом с опытными специалистами. Присоединяйтесь к нашему каналу "Линукс и DevOps Дни" и станьте частью активного сообщества профессионалов, готовых делиться своими знаниями и опытом с вами.

Линукс и DevOps Дни

24 Nov, 13:01


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

Алгоритм простой. Используем 10 сигналов (SIGRTMIN+0 - SIGRTMIN+7 для передачи битов, SIGRTMIN+8 - признак окончания символа, SIGRTMIN+9 признак окончания сообщения).

Передаются только "единичные биты". SEND_CHAR - "разбирает символ по битам и передает" SEND_MESSAGE - разбирает сообщение по символам и отдает SEND_CHAR.

Сохраняем скрипты, chmod +x serv.sh cli.sh

В одном терминале ./serv.sh (он выдаст что-то вроде Listener process 340527).

В другом терминале ./cli.sh 340527 (нужно подставить ваш номер процесса).

При старте клиент сразу передает серверу сообщение "BashBays" А потом можете передать привет медведю. Пустое сообщение завершает клиента. Сервер останавливается через CTRL-C.

#/bin/bash

#serv.sh

declare -i ASC=0
declare MSG=
declare DELAY=0.01
handle_signal() {
case "$1" in
W) MSG=${MSG}$(printf "\x$(printf %x $ASC)")
ASC=0 ;;
M) echo $MSG;MSG=;;
*) ((ASC+=$1));;
esac
}
#RTMIN=34
trap 'handle_signal 1' RTMIN+0
trap 'handle_signal 2' RTMIN+1
trap 'handle_signal 4' RTMIN+2
trap 'handle_signal 8' RTMIN+3
trap 'handle_signal 16' RTMIN+4
trap 'handle_signal 32' RTMIN+5
trap 'handle_signal 64' RTMIN+6
trap 'handle_signal 128' RTMIN+7
trap 'handle_signal W' RTMIN+8
trap 'handle_signal M' RTMIN+9
echo Listener process $$
while :;do
sleep $DELAY
done


#!/bin/bash

#cli.sh

if [[ -z $1 ]];then
echo Need server PID
exit
fi
declare -ir SERV_PID=$1
declare MESSAGE=BashBays
declare -ir RTM=34

function DELAY(){ sleep 0.02;}

function SEND_CHAR(){
local -i i ASC
CUR_CHAR=${1:-" "}
printf -v ASC "%d" "'$CUR_CHAR"
for i in {0..7};do
if [[ $(($ASC%2)) -eq 1 ]];then
# echo kill '-'$(($i+$RTM)) $SERV_PID
kill '-'$(($i+$RTM)) $SERV_PID
DELAY
fi
((ASC/=2))
done
# echo kill '-'$((8+$RTM)) $SERV_PID
kill '-'$((8+$RTM)) $SERV_PID
DELAY
}
function SEND_MESSAGE(){
local CUR_CHAR
local MESSAGE=${1:-BashDays}
local i
echo Send message \"$MESSAGE\" to Server PID=$SERV_PID
for ((i = 0 ; i < ${#MESSAGE} ; i++));do
SEND_CHAR ${MESSAGE:$i:1}
done
# echo kill '-'$((9+$RTM)) $SERV_PID
kill '-'$((9+$RTM)) $SERV_PID
DELAY
}

while [[ $MESSAGE ]];do
SEND_MESSAGE "$MESSAGE"
read -p "Input new message:" MESSAGE
done


Для чего может пригодиться эта фигня я не знаю, Но при написании программы выяснил некоторые вещи:

1. Обработка сигналов (по крайней мере SIGRTMIN не прерывает выполнение команд bash). Т.е если выполняется sleep 10m. То обработки можно ждать долго.

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

tags: #linux © by Tagd Tagd

🔔 ➡️

Линукс и DevOps Дни

23 Nov, 18:48


🍋 Кому то лимонов ящик, а кому то от хуя хрящик

В выходные нужно отдыхать ребят, выходные заебись!

Линукс и DevOps Дни

22 Nov, 13:09


А давай я научу тебя девопсу. За 5 дней. Результат до/после гарантирую.

Почитал умные книжки, посмотрел ютубчик и научился кубы ворочать? Ага-ага.

Только тебя палкой не били, а я буду.

🙃 Короче кто не успел запрыгнуть в августе в последний вагон Linux Factory, сейчас самое время, по летнему движу 5000р 2500р

Внутри почти 2 сезона:

1. Ansible
2. Gitlab CI/CD YML + Docker + Hashi Vault
3. Traefik
4. Prometheus + Consul + VM + Grafana
5. Terraform (Selectel/Yandex)
6. и многое другое…

будут кубы, охуенные циркули и база без воды

После интенсива ты охуеешь от бест-практик и научишься делать ха-ра-шо.

Киллер фича — ты со мной на связи, решаем вопросы 1x1.

Более подробно про интенсив можешь почитать тут и тут.

➡️ Залетай и жми кнопочки:

В номере заказа ничего писать не нужно.

По всем вопросам можешь писать сюда:

Линукс и DevOps Дни

22 Nov, 13:09


Пост ищем в этом канале, а не в гугле. В комментах пишем время и ссылку на сам пост. Макс к вам придет и отдаст монету.

Погнали чо! #pizza

кому интересно: предыдущие пиццы (1, 2, 3)

Линукс и DevOps Дни

22 Nov, 10:53


⚡️Всероссийский Хакатон ФИЦ 2024

🚀Попробуйте себя в одном из предложенных кейсов:
1. Семантический делитель текстов: Разработать алгоритм, который сможет обеспечить точное разделение текста на блоки в рамках произвольно заданных ограничений размера блока.

2. Контекстный перевод названий научных работ: Разработать и реализовать переводчик, который будет переводить названия научных работ с русского на английский.

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

4. Система контроля и управления доступом: Разработка системы контроля и управления доступом в реальном времени. Система будет включать API для управления сотрудниками, точками доступа и интеграцию с системой видеонаблюдения.

И другие 16 кейсов смотрите на сайте: https://фиц2024.рф/hackathon

Хакатон пройдет в 2 этапа: Отборочный этап в Онлайн, Финал в Офлайн.

🏆Призовой фонд: 6 000 000 руб.
🔥Дедлайн регистрации: 26 ноября, 2...

Линукс и DevOps Дни

21 Nov, 10:05


Как получить миллион на перенос IT-инфраструктуры?
 
Ищите ответ в официальном канале Selectel. Там регулярно публикуются новости об акциях и полезные материалы об IT.

Линукс и DevOps Дни

19 Nov, 12:08


Если взглянуть на картинку выше, то в этом списке ты не найдешь сигналов с номером 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 вручную процессу, то получишь хуй с маслом. Ядро эти сигналы обрабатывать не будет.

Потому что даже ядро не имеет к этим сигналам никакого о...

Линукс и DevOps Дни

17 Nov, 13:28


Многие догадываются, а некоторые точно знают на каких онлайн-сервисах можно посмотреть принадлежность домена или 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

🔔 ➡️

Линукс и DevOps Дни

15 Nov, 17:11


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

Вопрос:

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

Линукс и DevOps Дни

15 Nov, 07:15


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

Могут ли быть маски подсети /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

🔔 ➡️

Линукс и DevOps Дни

08 Nov, 10:46


Недавно прочитал статью Страйфи Ленджок и решил поделиться многолетним опытом использования 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

🔔 ➡️

Линукс и DevOps Дни

05 Nov, 10:32


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

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

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

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


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

Линукс и DevOps Дни

03 Nov, 10:15


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

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


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

🔔 ➡️