Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр

Тайна Самоцветов: Ключ Сокровищ - Три в ряд

Казуальные, Три в ряд, Головоломки

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Perl

С этим тегом используют

Программирование Все
23 поста сначала свежее
13
VladimirChursin
VladimirChursin
2 года назад
Лига Сисадминов
Серия ИТ

Ansible. Network-scripts. RHEL8. Временное применение сетевой конфигурации⁠⁠

Ansible. Network-scripts. RHEL8. Временное применение сетевой конфигурации Linux, Разработка, IT, Программирование, Perl, Командная оболочка bash, Open Source

Бонжур!


Доработал недавно (как и обещал в предыдущей публикации - Ansible. Network-scripts. RHEL8) функционал ansible-хелпера "conf_int_ipv4_via_network_scripts". Теперь изменения сетевых настроек возможно применить временно (например, на период тестирования). Для этого достаточно:

1) сконфигурировать целевые интерфейсы посредством правки файла "config";

2) задать время отката настроек на предыдущие через конфиг "additional_configs/config_temporary_apply_ifcfg" (по умолчанию = 10 минут);

3) запустить скрипт "apply_temporary_ifcfg.sh". Выполняет действия, аналогичные "apply_immediately_ifcfg.sh" (т.е. реконфигурирует сеть в соответствии с файлом "config"), но перед рестартом сервиса "network" запускает на удалённом хосте bash-скрипт "rollback_ifcfg_changes.sh", который возвращает сетевые настройки к виду до модификации через временной промежуток, определённый в файле "config_temporary_apply_ifcfg";

4) протестировать сетевые связанности целевых хостов (вероятно, когда-нибудь реализую утилиту на основе стека "ansible + bash + perl");

5) если всё в порядке, то запустить скрипт "apply_immediately_ifcfg.sh", который остановит исполнение сценария "rollback_ifcfg_changes.sh".


Итого, два варианта на выбор пользователя - либо применить новые настройки незамедлительно (just run "apply_immediately_ifcfg.sh"), либо применить их временно (run "apply_temporary_ifcfg.sh") до осуществления тестирования и отмены возврата к предыдущей конфигурации сети хоста (run "apply_immediately_ifcfg.sh").


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


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

===

Ссылка на репозиторий: https://github.com/vladimir-chursin000/ansible_helpers

Показать полностью
[моё] Linux Разработка IT Программирование Perl Командная оболочка bash Open Source
7
26
VladimirChursin
VladimirChursin
2 года назад
Лига Сисадминов
Серия ИТ

Ansible. Network-scripts. RHEL8⁠⁠

Ansible. Network-scripts. RHEL8 Разработка, Программирование, IT, Perl, Linux, Shell, Командная оболочка bash

Приветствую!


Практически завершил работу над ansible-хелпером "conf_int_ipv4_via_network_scripts" (репозиторий "ansible_helpers"), но "практически" означает, что совокупность скриптов и сценариев уже можно использовать в работе.


Краткая инструкция.

1. Клонируем репозиторий - git clone "https://github.com/vladimir-chursin000/ansible_helpers".

2. Переходим в директорию ".../ansible_helpers/conf_int_ipv4_via_network_scripts/rhel8_based".

3. Заполняем inventory-файл "conf_network_scripts_hosts" (не забываем про ssh-ключи на удалённых хостах).

4. Заполняем основной файл конфигурации "config" (такой вот незамысловатый нейминг). Каждая линия - настройка конкретного сетевого интерфейса на конкретном хосте. Присутствует файл со всеми возможными примерами конфигурации - "config_examples".

5. Правим дополнительные файлы конфигурации, расположенные в директории "additional_configs":

а) dns_settings (настройки DNS). По умолчанию содержит только доменные сервера Google (8.8.8.8, 8.8.4.4) в качестве общих NS (nameservers/сервера имён) для всех хостов из inventory-файла. Также присутствует возможность для отдельных хостов выставить уникальные сервера имён;

б) config_del_not_configured_ifcfg. Файл конфигурации, определяющий действия в отношении сетевых интерфейсов, отсутствующих в основном файле конфигурации (который "config"). Для inventory-хостов, вписанных в этот конфиг, действует правило - отключать сетевые интерфейсы (и удалять соответствующие ifcfg-файлы), не сконфигурированные в файле "config".

6. Запускаем скрипт "install_network_scripts_and_configure_network.sh" (если "network-scripts" не установлен) или "apply_immediately_ifcfg.sh".


Что произойдёт после запуска (если опустить часть с установкой "network-scripts"), если кратко:

1. Бэкап ifcfg-файлов с сохранением в директорию (и поддиректории) ".../playbooks/ifcfg_backup_from_remote": "history" - для хранения, "now" - для дальнейшего сравнения с ifcfg-файлами, генерация которых (на основе config-а) произойдёт на следующем этапе.

2. Запуск perl-скрипта "generate_dynamic_ifcfg.pl", которые создаёт:

а) ifcfg-файлы для каждого inventory-хоста (на основе основного конфига). Размещаются в ".../playbooks/dyn_ifcfg_playbooks/dyn_ifcfg";

б) файлы resolv-conf (на основе "dns_settings"). Директория ".../playbooks/dyn_ifcfg_playbooks/dyn_resolv_conf";

в) task-файл для каждого inventory-хоста, содержащий ansible-инструкции для реконфигурации сети (директория ".../playbooks/dyn_ifcfg_playbooks"). Важный момент - если сгенерированные ifcfg-файлы не отличаются от текущих (скопированных на первом этапе исполнения), то task-файл будет содержать только ansible-код для взаимодействия с "resolv.conf".

3. Исполнение сформированных task-файлов.


P.S. №1. Осталась самая малость - реализовать механизм временного применения сетевых настроек (о чём писал ранее).


P.S. №2. Надеюсь, кому-то результат моих изысканий поможет сэкономить время.

Показать полностью
[моё] Разработка Программирование IT Perl Linux Shell Командная оболочка bash
28
VladimirChursin
VladimirChursin
2 года назад
Лига программистов
Серия ИТ

Скрипт генерации ifcfg-файлов⁠⁠

Скрипт генерации ifcfg-файлов Linux, Программирование, IT, Разработка, Perl, Open Source

Приветствую!

В рамках создания ansible-helper-а "conf_int_ipv4_via_network_scripts" дописал скрипт ("generate_dynamic_ifcfg.pl") генерации сетевых интерфейсов для network-scripts по заранее заданным конфигурациям, который вполне допустимо использовать отдельно от хелпера (файл конфигурации с примерами = config_examples).

Чтобы использовать perl-программу вне контекста репозитория, потребуется:

1. Залогиниться на хост/ВМ с ОС Linux и установленным Perl5.

2. Скопировать скрипт "generate_dynamic_ifcfg.pl", например, в директорию "/opt/generate_dynamic_ifcfg".

3. Скопировать файл конфигурации (config), файл с примерами конфигурации (config_examples) и папку "ifcfg_tmplt" (содержит шаблоны конфигураций интерфейсов) в директорию со скриптом.

4. Откорректировать параметры скрипта из блока "STATIC VARS", т.е. задать директорию с шаблонами ifcfg-файлов и директорию для размещения сконфигурированных сетевых интерфейсов (ifcfg-файлов с конкретными значениями: имя интерфейса, MAC-адрес и проч.).

5. Отредактировать файл config, задав свои настройки сетевых интерфейсов (обычный интерфейс, bond, bridge, etc).

6. Запустить скрипт.

7. PROFIT!


P.S. №1. Увы, сам хелпер пока далёк от завершения. Предстоит ещё многое сделать, в т.ч. и, например, реализовать механизм временного применения сетевых настроек, например, на 3-4 минуты с последующим откатом к предыдущей конфигурации (наверняка для кого-то сия опция окажется весьма полезной).

===

P.S. №2. Ох и объёмная же статья (на основе репозитория ansible_helpers) для Хабра получится.

===
Ссылка на helper: https://github.com/vladimir-chursin000/ansible_helpers/tree/...
Показать полностью
[моё] Linux Программирование IT Разработка Perl Open Source
17
DELETED
3 года назад
Лига программистов

Perl и base64⁠⁠

Есть такой скрипт:

#!/usr/bin/perl
# Copyright(C) Victor Vislobokov, 2011
# Under GNU GPL 2 License
use DB_File;
use Net::POP3;
# имя и пароль для доступа к почтовому ящику
$username = "username";
$password = "password";
# POP3 сервер
$server = "pop.yandex.ru";
# номер сотового куда отправлять SMS
$num = 'XXXXXXXXXX';
# База данных для хранения идентификаторов писем
$db_file = "/var/tmp/sms/id.db";
# Файл журнала для протоколирования действий
$logfile = "/var/tmp/sms/emailtosms.log";
$pop = Net::POP3->new($server, Timeout => 60);
$rc = $pop->login($username, $password);
if ($rc > 0) {
# Открываем БД сохранённых сообщений
$DB = tie(%hash_id, "DB_File", $db_file);
# Получаем список сообщений
$msgnums = $pop->list;
foreach my $msgnum (keys %$msgnums) {
# Получаем уникальный ID сообщения
$uid = $pop->uidl($msgnum);
# Отмечаем это сообщение в хеше текущих в данной сессии
$msgs{$uid} = 1;
# Проверяем не было ли уже обработано данное сообщение
# Если обработано, идём дальше
if (defined $hash_id{$uid}) {
writeLog($logfile, "$uid already processed");
next;
}
# Если нет, обрабатываем
$hash_id{$uid} = 1;
$msg = $pop->get($msgnum);
foreach $line (@$msg) {
if (index($line, "Subject: ") == 0) {
$sms = substr($line, 9, 50);
chomp($sms);
$stamp = getCurrentDateTime();
writeLog($logfile, "SMS '$sms' sended");
system("/usr/bin/smssend \"$num\" \"$stamp $sms\"");
}
}
# $pop->delete($msgnum);
}
} elsif ($rc == 0) {
writeLog($logfile, "No messages in mailbox");
} else {
writeLog($logfile, "Login failed");
}
$pop->quit;
# Удаляем из базы старые ID
foreach $uid (keys %hash_id) {
# Если ID из базы есть в текущей сессии, оставляем
next if (defined $msgs{$uid});
DB_File::DELETE($DB, $uid);
writeLog($logfile, "$uid was been deleted");
}
untie(%hash_id);
# ----------------------------------------------------------------------------
# Получение текущей даты и времени
# ----------------------------------------------------------------------------
sub getCurrentDateTime {
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
$mon++;
$year=$year-100+2000;
return(sprintf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d", $year, $mon, $mday, $hour, $min, $sec));
}
# ----------------------------------------------------------------------------
# Запись в лог
# ----------------------------------------------------------------------------
sub writeLog {
my ($logfile, $msg) = @_;
if (!defined $logfile) {
$logfile = "/dev/null";
}
my ($datetime, $fd, $rc);
$datetime = getCurrentDateTime();
$rc = open($fd, ">>$logfile");
if (!defined $rc) {
if ($main::config{'DEBUG'} > 0) {
# При невозможности вывода в файл, выводим на стандартный ввод
print "$msg\n";
}
} else {
print($fd "$datetime ");
print($fd "$msg");
print($fd "\n");
close($fd);
}
}

Автор скрипта описывает его работу так:

Работа скрипта проста. Вы запускаете его по cron с нужной вам периодичностью. Скрипт лезет в почтовый ящик на сервере и забирает оттуда письма. Для каждого письма у POP3 сервера есть свой уникальный идентификатор, мы его получаем и проверяем нет ли у нас его в базе. Если есть, пропускаем письмо, так как считаем, что оно уже обработано, если идентификатора в базе нет, то мы сохраняем его туда. Затем получаем с сервера само сообщение, но используем только его тему (Subject:) для отправки по SMS. При этом не всю тему, а только 50 знаков, чтобы не превысить размер SMS. Затем отправяем SMS, предварительно сформировав текущее время, чтобы при получении было ясно, когда была отправка. После осуществления отправок всех SMS, чистим базу от старых идентификаторов сообщений, если сообщений с такими идентификаторами в ящике уже нет. Скрипт не удаляет само сообщение из ящика - этот вызов закомментирован.

Скрипт работает, но проблема в том, что тему письма он получает в кодировке base64 такого вида:

=?UTF-8?B?RGF2aWQgS3VyZXh5YW4g0L/RgNC40LPQu9Cw0YjQsNC10YIg0JLQsNGBINGB?=

Декодер от Лебедева - https://www.artlebedev.ru/decoder/ - расшифровывает условно правильно, в итоге результат такой:

?Q1-??David Kurexyan приглашает Вас с?

Но в самом скрипте дешифровка не предусмотрена и в смс уходит изначальной кодированный текст. На Тостере пишут, что

Это base64. Декодировать надо то, что после после «=?UTF-8?B?»
Ответ: «David Kurexyan приглашает Вас с»

Это декодируется с помощью Encode::MIME::Header

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

Показать полностью
Perl Программирование IT Длиннопост Текст
12
VladimirChursin
VladimirChursin
3 года назад
Лига программистов
Серия ИТ

Эффективный приём (на мой взгляд)⁠⁠

Один из любимых приёмов в программировании - использование ассоциативного массива вида "ключ = ссылка на подпрограмму", что позволяет формировать необходимую функциональность (в т.ч. и отключать то, что не требуется при определённой конфигурации) на этапе чтения/перечитывания файла конфигурации (или при старте скрипта/программы).
===
P.S. Для кого-то (из числа наиболее опытных программистов) тезис/приём может показаться очевидной очевидностью, но, как говорится, не каждый программист не является новичком.
===
UPD. Ассоциативный массив в рамках публикации = ассоциативный массив ЯП Perl 5.

[моё] Разработка Программирование IT Текст Perl
8
VladimirChursin
VladimirChursin
3 года назад
ИТ-проекты пикабушников
Серия ИТ

Первая публикация⁠⁠

Доброго времени суток!
(Доброго утра! Доброго дня! Доброго вечера! Доброй Ночи!)

Зарегистрировался на Пикабу для поиска потенциальных покупателей узкоспециализированного ПО собственной разработки (на Perl 5).

Подробнее тут:
1) https://vk.com/wall-171156115_117
2) https://t.me/server_soft_pro/8

Основные преимущества (ПО для осуществления SMS-рассылок) обозначены ниже.

1) Возможность обработки отчётов о доставке (если при отправке короткого сообщения был выставлен соответствующий флаг) с сохранением результатов в машино-понятном виде для последующей обработки.

2) Максимальная скорость рассылки ~ 2500 смс в секунду (на один экземпляр рассыльщика с одним smpp-коннектом).

3) Настраиваемая скорость отправки для каждого конкретного smpp-соединения.

4) Динамическое понижение скорости отправки при получении от целевого smpp-коннекта (SMS-центра) заранее определённых (в файле конфигурации) кодов ошибок.

5) Отправка SMS с использованием функций выбора целевого smpp-коннекта (любой доступный, по номеру отправителя, по номеру получателя);

6) Отложенная отправка (с указанием конкретной даты начала рассылки);

7) Настраиваемая совместная обработка очередей сообщений различными приложениями-рассыльщиками;

8) Настраиваемый контроль smpp-соединений (отправка / приём enquire_link / enquire_link_resp).

9) Настраиваемая скорость приёма входящего трафика (отчёты о доставке и проч.) для каждого smpp-соединения.

10) Возможность скрывать содержание входящих и исходящих сообщений в лог-файлах для определённого smpp-коннекта.

11) Настраиваемые условия (по коду ошибки в resp-ах) автоматического переподключения к smpp-соединению.

12) Возможность автоматической транслитерации содержания отправляемых сообщений.

13) Встроенный функционал вида "перезвони мне / заплати за меня".

14) Концепция приложения - максимальная независимость от сторонних модулей, т.к. ПО представляет собой монолитное решение, для работы которого требуется минимальный набор компонентов (в рамках целевой операционной системы).
15) Функционал "SMS-чат / simple_chat".

Ссылка на ПО и документацию: https://github.com/vladimir-chursin000/sms_sender


На данный момент софт работает под CentOS7 (RHEL7-based) и AlmaLinux8 (RHEL8-based).

===
P.S. Также планирую публиковать небольшие заметки (мысли, идеи) на тему программирования.
Показать полностью
[моё] Программирование IT Разработка Perl Linux Текст
14
12507
Sheridan.ru
Sheridan.ru
4 года назад
IT-юмор
Серия Истории Sheridan'а

Про perl и годовой баланс⁠⁠4

Работал я в банке, в ~2007 году. По приходу в этот банк - закупил новый сервер, поставил в туда новый опердень, поднял DC, протянул и настроил сеть, закупил и настроил новые машины для операционистов, всё завёл, всё работает. Ну, такой банк, да. Да, не было сети у многих. Но речь не об том.

Дело идёт к концу года. Я уже сижу и просто мониторю машины, бэкапы. Чегототам программирую от нечего делать.

Замечаю что главбух (Г) уже неделю задерживается чуть ли не до ночи. Интересуюсь что случилось.

Г:- Да вот, годовой баланс свожу

Я:- Ну так опердень же умеет. Давайте найду как

Г:- Да опердень то умеет но проблема в другом. Во первых, в опердне только часть транзакций, с того времени как внедрили. Во вторых, есть старый опердень и там ещё часть транзакций за исключением тех, которые туда не попали из-за аварий и от тех транзакций осталось только платёжки.

Я:- Так, и что вы делаете?

Г:- Ну вот у меня есть старый опердень, есть новый, есть текстовые файлики с платёжками. Вот это всё в эксель переношу и считаю.

Я:- Понял. Могу помочь. Рассказывайте что в итоге должно быть и как считать.

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

Взял я в руки perl и пошёл говнокодить. Сначала разобрался с новым оперднем. Делал в него запрос, в БД, вытаскивал данные в нужном формате. Во вторых, старый опердень. БД - dbf. Тоже относительно просто откопал оттуда нужное. В третьих - файлики текстовые. Где-то cp866, гдето 1251... Конечно же регекспы! Провозился чуть дольше но и это осилил. Время от времени ходил к главбуху, показывал промежуточное и выяснял правильно ли иду. На третий день уже она начала мне помогать. Про двойную книгу рассказала, местами помогла найти ошибки в логике расчётов. В общем, недели две или три вот так вот мы с ней в команде работали и таки родили результат. Довольная была как не знаю даже кто. Говорила что сама бы провозилась месяца два минимум.

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

Показать полностью
[моё] Perl Банк IT Командная работа Текст Программирование
580
51
praksitel
5 лет назад

Чем я могу с вами поделиться (Perl, SQL, железо)⁠⁠

Друзья! Хоть я и не просиживаю время дома, а работаю удалённо, но час в день могу посвятить разъяснению каких-нибудь тонких моментов на ИТ темы Perl, SQL и, скажем, что-то из вопросов по железу. Пишите в комменты, кому что интересно узнать. Формат возможен, например, такой - день собираем вопросы, потом я делаю ролик с объяснениями. Или как-то ещё, предлагайте!

[моё] Без рейтинга Программирование Perl SQL Компьютерное железо Текст Бесплатное обучение
39
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии