Наступивший год уже приносит свои плоды.
У канала уже аудитория в 100 подписчиков (101 на момент публикации).
Всем большое спасибо за то, что присоединились к моему каналу и читаете его. Каждый новый подписчик мотивирует продолжать заниматься развитием канала.
В этом году постараюсь постить больше авторского контента, который, я надеюсь, будет полезным для вас.
P.S. Большое спасибо админам @libmustdie за упоминанием моего канала в своём посте.
У канала уже аудитория в 100 подписчиков (101 на момент публикации).
Всем большое спасибо за то, что присоединились к моему каналу и читаете его. Каждый новый подписчик мотивирует продолжать заниматься развитием канала.
В этом году постараюсь постить больше авторского контента, который, я надеюсь, будет полезным для вас.
P.S. Большое спасибо админам @libmustdie за упоминанием моего канала в своём посте.
Если работаете с Powershell (я использую версию 5.1), то вас не должно удивлять следующее поведение:
Тут все нормально, это массив
Но вот, если вы создаете переменную вот так:
То перед вами уже строка и обращение по индексам идет уже по-другому
Если все-таки хочется сделать массив из строк, то можно воспользоваться следующей конструкцией:
$VAR="123","456"
$VAR
123
456
$VAR[0]
123
$VAR[1]
456
Тут все нормально, это массив
$VAR.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Но вот, если вы создаете переменную вот так:
$VAR="123"
$VAR[0]
1
$VAR[1]
2
$VAR[2]
3
То перед вами уже строка и обращение по индексам идет уже по-другому
$VAR.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Если все-таки хочется сделать массив из строк, то можно воспользоваться следующей конструкцией:
$VAR=$VAR.Split("`n")
$VAR.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String[] System.Array
$VAR[0]
123Для сдающих сертификацию от RedHat может пригодиться данный момент, дающий скидку 50% на Red Hat Learning Subscription:
QUESTION: Can a Red Hat Certified Architect (RHCA) purchase the Red Hat Learning Subscription at a discount? Are there discounts for other levels of Red Hat Certified Professionals?
ANSWER: Yes, there will be a 50% discount offered for current RHCAs. At this time this discount is exclusive to RHCAs. We do not offer any discounts for other levels of Red Hat Certified Professionals.
Про Red Hat Learning Subscription подробнее по ссылочке:
https://www.redhat.com/en/resources/learning-subscription-faq
QUESTION: Can a Red Hat Certified Architect (RHCA) purchase the Red Hat Learning Subscription at a discount? Are there discounts for other levels of Red Hat Certified Professionals?
ANSWER: Yes, there will be a 50% discount offered for current RHCAs. At this time this discount is exclusive to RHCAs. We do not offer any discounts for other levels of Red Hat Certified Professionals.
Про Red Hat Learning Subscription подробнее по ссылочке:
https://www.redhat.com/en/resources/learning-subscription-faq
Redhat
Red Hat Learning Subscription FAQ: On-demand training for IT success
Learn how Red Hat Learning Subscription can help your teams fill skills gaps.
docker-compose для официального образа Atlassian Confluence и использованием БД PostgreSQL и nginx в качестве реверс-прокси.
На днях постараюсь всё это оформить в виде Github-репозитория в и README.md указать больше подробностей.
На днях постараюсь всё это оформить в виде Github-репозитория в и README.md указать больше подробностей.
version: '2'
services:
db:
image: postgres:11
volumes:
- postgresqldata:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=YOURSTRONGPASSWORD
- POSTGRES_USER=confluence_user
- POSTGRES_DB=confluence_db
- POSTGRES_ENCODING=UNICODE
- POSTGRES_COLLATE=utf8
- POSTGRES_COLLATE_TYPE=utf8
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "50"
container_name: postgresql-confluence
restart: always
networks:
- confluencenet
confluence:
image: atlassian/confluence-server:6.8.3-adoptopenjdk8
volumes:
- confluencedata:/var/atlassian/application-data/confluence
container_name: confluence
networks:
- confluencenet
environment:
- ATL_DB_TYPE=postgresql
- "ATL_JDBC_URL=jdbc:postgresql://db:5432/confluence_db"
- ATL_JDBC_USER=confluence_user
- ATL_JDBC_PASSWORD=YOURSTRONGPASSWORD
- ATL_TOMCAT_CONTEXTPATH=
- "CATALINA_OPTS=-Duser.timezone=Europe/Moscow ${CATALINA_OPTS}"
- ATL_PROXY_NAME=SERVER_FQDN
- ATL_PROXY_PORT=443
- ATL_TOMCAT_SCHEME=https
- ATL_TOMCAT_SECURE
- JVM_MAXIMUM_MEMORY=4096m
- JVM_SUPPORT_RECOMMENDED_ARGS='-Djavax.net.ssl.trustStore=/opt/java/openjdk/jre/lib/security/cacerts'
depends_on:
- db
restart: always
nginx:
image: nginx:1.17.7
depends_on:
- confluence
container_name: nginx
restart: always
volumes:
- /etc/nginx/nginx.conf:/etc/nginx/nginx.conf
- /etc/nginx/ssl:/etc/nginx/ssl
- /etc/nginx/conf.d:/etc/nginx/conf.d
- /var/log/nginx:/var/log/nginx
- /etc/localtime:/etc/localtime:ro
ports:
- 80:80
- 443:443
networks:
- confluencenet
volumes:
confluencedata:
external: false
postgresqldata:
external: false
networks:
confluencenet:
ipam:
driver: default
config:
- subnet: 172.16.235.0/24
Большой список программных решений, которые предлагают бесплатные возможности для разработчиков, администраторов и прочее (FreeTier, бесплатные возможности и т.п.)
https://free-for.dev/#/
https://free-for.dev/#/
Что можно почитать по systemd
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-remote
https://people.redhat.com/pladd/systemd_NYRHUG_2016-03.pdf
https://www2.kangran.su/~nnz/pub/s4a/s4a_latest.pdf
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-remote
https://people.redhat.com/pladd/systemd_NYRHUG_2016-03.pdf
https://www2.kangran.su/~nnz/pub/s4a/s4a_latest.pdf
Red Hat Customer Portal
10.5. Controlling systemd on a Remote Machine Red Hat Enterprise Linux 7 | Red Hat Customer Portal
The Red Hat Customer Portal delivers the knowledge, expertise, and guidance available through your Red Hat subscription.
Разработчики телеграмма завезли новое в голосования.
https://telegram.org/blog/polls-2-0-vmq
https://telegram.org/blog/polls-2-0-vmq
Telegram
Polls 2.0: Visible Votes, Multiple Answers, and Quiz Mode
Since we first added polls for groups and channels, they've been used for everything from deciding where to have lunch to organizing leaderless protests. Today we're expanding the range of possibilities with three new kinds of Telegram polls.
logrotate положил грабельку (по-крайней мере, актуально для OEL 6, logrotate-3.7.8-28.el6.x86_64),
которая игнорирует директиву
Какие директивы ещё игнорируются - не оч понятно.
Имхо, не очень приятное поведение.
https://stackoverflow.com/questions/47888465/logrotate-working-but-ignoring-size
которая игнорирует директиву
size при запуске утилиты с ключом -f.Какие директивы ещё игнорируются - не оч понятно.
Имхо, не очень приятное поведение.
https://stackoverflow.com/questions/47888465/logrotate-working-but-ignoring-size
Stack Overflow
logrotate working but ignoring size
CentOS v.7
Logrotate v.3.8.6
I set logrotate to rotate when file reaches 5M but it ignores it, if I add daily it will rotate daily regardless of size, i tried with size, minsize and maxsize all th...
Logrotate v.3.8.6
I set logrotate to rotate when file reaches 5M but it ignores it, if I add daily it will rotate daily regardless of size, i tried with size, minsize and maxsize all th...
Превращаем RHEL-подобные дистрибутивы в RHEL с подпиской (если она у вас есть :) ) с помощью утилиты
https://www.redhat.com/en/blog/convert2rhel-how-update-rhel-systems-place-subscribe-rhel
Convert2RHELhttps://www.redhat.com/en/blog/convert2rhel-how-update-rhel-systems-place-subscribe-rhel
Redhat
Convert2RHEL: How to update RHEL-like systems in place to subscribe to RHEL
Introducing Convert2RHEL, a tool that can be used for the conversion of other Linux systems to Red Hat Enterprise Linux (RHEL) to allow Red Hat to provide support for them
Вжух и ты хакнут 😎
https://www.opennet.ru/opennews/art.shtml?num=52340
https://www.opennet.ru/opennews/art.shtml?num=52340
www.opennet.ru
Уязвимость в systemd, потенциально позволяющая повысить свои привилегии
В системном менеджере systemd выявлена уязвимость (CVE-2020-1712), которая потенциально позволяет добиться выполнения своего кода с повышенными привилегиями через отправку специально оформленного запроса по шине DBus. Проблема исправлена в тестовом выпуске…
Ситуация, когда у вас есть лог-файлы и они могут внезапно вырасти, до сих пор актуальна и может возникать по разным причинам:
1) Изменение уровня логгирования на DEBUG (моё любимое, сжирает дисковое пространство со скоростью света)
2) Ошибки в логах (при проблемах на инфраструктуре или с приложением тоже может достаточно быстро съесть ваше свободное место).
И неважно, запущено ли ваше приложение в контейнере или вне его, логи вездесущи.
Варианты решения/предотвращения тоже довольно очевидны:
1) Почитать документацию (увы и ах, довольно редко документация изучается в полном объеме и некоторые моменты упускаются), возможно, в ней описан стандартный функционал, который умеет в ротацию и очистку логов
2) Написать logrotate-файл и/или скрипт, который удаляет старые лог-файлы, если это не заложено в функционал программы.
3) Настроить мониторинг (ведь в современном мире без мониторинга никуда)
С Docker ситуация выглядит немножко поинтереснее. Если контейнера сожрали все дисковое пространство, а сервис или докер перезапускать нельзя (по разным причинам), то можно аккуратно снести логи,
например вот так:
задать эти параметры для конкретного контейнера/указать параметры в docker-compose.
https://docs.docker.com/config/containers/logging/json-file/
Соответственно, в случае с глобальными параметрами необходим перезапуск Docker-демона.
1) Изменение уровня логгирования на DEBUG (моё любимое, сжирает дисковое пространство со скоростью света)
2) Ошибки в логах (при проблемах на инфраструктуре или с приложением тоже может достаточно быстро съесть ваше свободное место).
И неважно, запущено ли ваше приложение в контейнере или вне его, логи вездесущи.
Варианты решения/предотвращения тоже довольно очевидны:
1) Почитать документацию (увы и ах, довольно редко документация изучается в полном объеме и некоторые моменты упускаются), возможно, в ней описан стандартный функционал, который умеет в ротацию и очистку логов
2) Написать logrotate-файл и/или скрипт, который удаляет старые лог-файлы, если это не заложено в функционал программы.
3) Настроить мониторинг (ведь в современном мире без мониторинга никуда)
С Docker ситуация выглядит немножко поинтереснее. Если контейнера сожрали все дисковое пространство, а сервис или докер перезапускать нельзя (по разным причинам), то можно аккуратно снести логи,
например вот так:
find /var/lib/docker/containers/ -type f -name "*.log" -delete
Дешево и сердито. Если нужно снести конретные логи, то можно воспользоваться вариантом ниже:# сортируем логи по возрастанию, получаем соответствие лога контейнеру
du -chs /var/lib/docker/containers/*/*json.log | sort -h
# грохаем логи
echo "" > $(docker inspect --format='{{.LogPath}}' container_id)
Чтобы сделать все красиво, можно задать глобальные параметры логгирования в JSON-файл Docker-демона, и/илизадать эти параметры для конкретного контейнера/указать параметры в docker-compose.
https://docs.docker.com/config/containers/logging/json-file/
Соответственно, в случае с глобальными параметрами необходим перезапуск Docker-демона.
Docker Documentation
JSON File logging driver
Learn how to use the json-file logging driver with Docker Engine
Кто-нибудь читал статью, как вам?)
Имхо, какая-то не оч репрезентативная выборка, о чем явно и сказали в комментариях.
В России большое количество компаний, который занимаются ИТ и вносят большой вклад, как на территории СНГ, так и за границей. А список из 15 компаний какой-то куцый.
https://habr.com/ru/company/habr_career/blog/488220/
Имхо, какая-то не оч репрезентативная выборка, о чем явно и сказали в комментариях.
В России большое количество компаний, который занимаются ИТ и вносят большой вклад, как на территории СНГ, так и за границей. А список из 15 компаний какой-то куцый.
https://habr.com/ru/company/habr_career/blog/488220/
Хабр
Лучшие ИТ-работодатели России 2019: ежегодный рейтинг Хабр Карьеры
На Хабр Карьере за 2019 год почти девять тысяч сотрудников поставили оценки более чем 1,5 тысячам организаций. Из них мы оставили 190 — только те, которые получили оценку от 10 и более сотрудников. В...
Из интересных наблюдений.
Нужно запускать задачу раз в полтора часа через Gitlab.
Gitlab поддерживает Cron Syntax, а чтобы все исполнялось минута в минуту, надо подкрутить Sidekiq (https://docs.gitlab.com/ee/user/project/pipelines/schedules.html#advanced-configuration).
И, внезапно, выясняется, что синтаксис крона не позволяет запускать в одном выражении задачу каждые полтора часа. Каждый час, минуту - все ок, вот целый час с половиной (два с половиной и так далее) - нельзя.
В результате нужно создавать 2 выражения для крона. Например, если задачу планируется выполнять с 8 до 20 каждые полтора часа, то это будет выглядеть вот так:
Нужно запускать задачу раз в полтора часа через Gitlab.
Gitlab поддерживает Cron Syntax, а чтобы все исполнялось минута в минуту, надо подкрутить Sidekiq (https://docs.gitlab.com/ee/user/project/pipelines/schedules.html#advanced-configuration).
И, внезапно, выясняется, что синтаксис крона не позволяет запускать в одном выражении задачу каждые полтора часа. Каждый час, минуту - все ок, вот целый час с половиной (два с половиной и так далее) - нельзя.
В результате нужно создавать 2 выражения для крона. Например, если задачу планируется выполнять с 8 до 20 каждые полтора часа, то это будет выглядеть вот так:
0 8,11,14,17,20 * * *можно подставить выражения вот сюда https://crontab.guru/ и увидеть время выполнения задач.
30 9,12,15,18 * * *
Очень бодрый наброс без конкретных аргументов. Основные претензии - ZFS, ifconfig,route vs ip.
https://habr.com/ru/post/490408/
https://habr.com/ru/post/490408/
Хабр
FreeBSD: гораздо лучше GNU/Linux
Сравню FreeBSD с GNU/Linux системами. Всё это исключительно субъективное мнение! Многое это просто мой опыт. Почти 100% всего времени я провожу за компьютером и исключительно Unix системами, примерно...
Немного интересностей из последнего кейса.
Есть набор автотестов, который потреблял определенное количество трафика во время прогона до 74 версии Google Chrome (то что именно до этой версии - выяснилось уже позднее), с 75 версии Google Chrome и выше количество трафика на том же наборе увеличилось в 4-8 раз. Все это прекрасно видно по графикам мониторинга.
Немного об инфраструктуре, где крутятся автотесты. Имеются несколько машин, где развернут продукт Aerokube Selenoid (Docker-контейнер, который отвечает за запуск и остановку браузеров для автотестов. Браузеры запускаются тоже в Docker), а также терминальный сервер, откуда запускаются автотесты.
Сначала была проверена конфигурация Selenoid - в ней не было изменений, потом конфигурация ОС - тоже самое, затем начали запускать браузеры разных версий и проверять с какими параметрами они запускались. Нашли отличающийся параметр
Не помогло. Начали дампить трафик - увидели небольшое число TCP Retransmission (https://networkguru.ru/tcp-retransmission-wireshark-chto-eto/), но это плюс-минус нормальная ситуация в сети, при небольшом количестве подобных пакетов. Следующие шаги заключались в проверке флагов в
Как выяснилось, URL
Есть набор автотестов, который потреблял определенное количество трафика во время прогона до 74 версии Google Chrome (то что именно до этой версии - выяснилось уже позднее), с 75 версии Google Chrome и выше количество трафика на том же наборе увеличилось в 4-8 раз. Все это прекрасно видно по графикам мониторинга.
Немного об инфраструктуре, где крутятся автотесты. Имеются несколько машин, где развернут продукт Aerokube Selenoid (Docker-контейнер, который отвечает за запуск и остановку браузеров для автотестов. Браузеры запускаются тоже в Docker), а также терминальный сервер, откуда запускаются автотесты.
Сначала была проверена конфигурация Selenoid - в ней не было изменений, потом конфигурация ОС - тоже самое, затем начали запускать браузеры разных версий и проверять с какими параметрами они запускались. Нашли отличающийся параметр
--disable-web-resources (Disables the backend service for web resources).Не помогло. Начали дампить трафик - увидели небольшое число TCP Retransmission (https://networkguru.ru/tcp-retransmission-wireshark-chto-eto/), но это плюс-минус нормальная ситуация в сети, при небольшом количестве подобных пакетов. Следующие шаги заключались в проверке флагов в
chrome://flags, проверке issue для selenium, в общем, поиск ошибок в используемых компонентах. Ничего похожего так и не нашли. Затем решили дампить трафик по-умному, сняв дамп на одном автотесте с версией Google Chrome, где объём трафика нормальный, а затем на версии, где большой объём трафика, после этого попакетно сравнить дампы. И это сработало. При анализе было обнаружено, что на новой версии Google Chrome часто происходят POST-запросы вида:POST /wd/hub/session/66f73310d3d71f244a90287d2e823b91b92e436757429a63823aff59b955c485/execute/sync HTTP/1.1
User-Agent: selenium/3.141.59 (java windows)
Content-Type: application/json; charset=utf-8
Content-Length: 48867
Host: 10.84.181.9:4444
Connection: Keep-Alive
Accept-Encoding: gzip
{
"script": здесь тело скрипта на сотни символов
}Как выяснилось, URL
/session/{session id}/execute/sync - это команда Execute Script в WebDriver (https://chromium.googlesource.com/chromium/src.git/+/master/docs/chromedriver_status.md), которая несколько сотен раз (это только в одном автотесте) отправляла JS-файлы на сайт, а в старой версии такого не было. Статус этой команды - «Почти доделано» (даже есть баг, который говорит о проблемах с производительностью и о том, что эта фича будет работать, даже если у вас нет необходимости в её использовании - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2938). И эта команда стала частью стандарта W3C (World Wide Web Consortium), поддержка которого как раз была реализована в Google Chrome 75. Как можно поправить всё быстро - отключить поддержку w3c в браузере (https://stackoverflow.com/questions/56452798/how-to-turn-off-w3c-in-chromedriver-to-address-the-error-unknown-command-cannot), медленно - внимательно изучить новый стандарт и провести корректировки в коде автотестов.networkguru.ru
TCP Retransmissions – что это и как их анализировать с помощью Wireshark?
Как проанализировать повторную передачу TCP пакета TCP Retransmissions с помощью Wireshark? Разбираем примеры! В чем отличия TCP Spurious Retransmission и TCP Fast Retransmission?
GitHub - теперь и на мобильном 😎
https://github.com/mobile?utm_source=announcement&utm_medium=email&utm_campaign=mobileGA
https://github.com/mobile?utm_source=announcement&utm_medium=email&utm_campaign=mobileGA
GitHub
GitHub Mobile
Bring GitHub collaboration tools to your small screens with GitHub Mobile. Sign up for the iOS beta or get on the list for our Android version—and we’ll let you know when your app of choice is ready.