git: нормализация lrlf

Если вы решили переконвертировать ваш репозиторий, убрав из файлов символы переноса каретки, то можно использовать https://rtyley.github.io/bfg-repo-cleaner/. Он работает намного быстрее, чем обычный filter-branch.

Итак, склонируем наш репозиторий с параметром —mirror

git clone —mirror https://github.com/voiplab/mysuperrepo
echo «regex:\r(\n)==>$1» > replacements.txt
java -jar bfg-1.13.0.jar —no-blob-protection —replace-text replacements.txt mysuperrepo.git

Запускаем провреку репозитория

Меняем origin если хотим запушить в новое место

git push origin -all

Screen resolution in selenium tests in teamcity

Many developers and testers try to change screen resolution in teamcity service. Default screen resolution is 800×600, but its so small. As one of solution is to start teamcity agent like a simple application. But this solution is bad. Because you need to use one license on Windows Server and start teamcity agent after Windows server finished to boot.

I found a solution which allows you without hacks.

  1. Open services.msc. Open properties in teamcity agent service and check on checkbox Allow service to unteract with desktop.
  2. Open registry and change this key HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices to 0.
  3. Change Interactive Service Detection start mode to auto and start it.
    sc config UI0Detect start= auto
    sc start UI0Detect
  4. Connect to server using RDP.
  5. Enter this text command in commandline rundll32 winsta.dll,WinStationSwitchToServicesSession. RDP session will broken but it’s ok.

Thats all. When you will run a new end2end tests you see that screen resolution will increase.

Teamcity и Mssql dbproject без установки Visual Studio

Возникла необходимость на build сервере с Teamcity собирать DBProject. Если у вас нет желания устанавливать Visual Studio и SSDT Tools для сборки, то ниже будет решение. Данное решение позволит установить все необходимое для сборки на все агенты.

Итак, сначала просто скачайте через nuget последнюю версию тулзов. Сделать это можно даже не локальном компьютере, не обязательно это делать на build сервере.

nuget.exe install Microsoft.data.tools.msbuild -ExcludeVersion

Следущим шагом запакуем скачанный каталог Microsoft.data.tools.msbuild в zip архив и раскидаем по агентам Teamcity. Для этого в панели управления Teamcity переходим в Administration -> Tools и под Zip Archive жмем Install. Выбираем наш архив и дождемся заливки на все нужные агенты.


Теперь подключаемся к серверу по RDP (ну или через консоль) и добавим 2 параметра в переменные System Variables:

  • SQLDBExtensionsRefPath
  • SSDTPath

Оба значения выставить в C:\BuildAgent\tools\Microsoft.Data.Tools.Msbuild\Microsoft.Data.Tools.Msbuild\lib\net46. Естественно, если у вас агенты установлены по другому пути, то нужно выставить правильный путь.

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

 

 

Подключаем wildcard certificate на домен с помощью letsencrypt

Недавно letsencrypt анонсировал поддержку wildcard сертификатов. Это значит, что теперь вы можете закрыть все ваши поддомены одним сертификатом. Итак, давайте сделаем это =)

apt-get update
apt-get install git
git clone https://github.com/certbot/certbot
cd certbot
letsencrypt-auto certonly -d *.somedomain.com --server https://acme-v02.api.letsencrypt.org/directory --manual

После чего вы увидите такую фразу

Please deploy a DNS TXT record under the name
_acme-challenge.somedomain.com with the following value:

p0J6qdVIrElQWO_k9lsl5KVMPPfm0QO80EFInxtCGOg

Before continuing, verify the record is deployed.
--------------------------------------------------

Добавляйте текстовую запись в ваш DNS и жмете enter. Bingo =)

Можно почитать

Конвертируем pfx в crt и key файл

Итак, есть виндовый pfx. Решили закрыть backend nginx-ом. Надо конвертить сертификат, чтобы nginx его понял. Открываем консоль и пишем

openssl pkcs12 -in [yourfile.pfx] -nocerts -out [keyfile-encrypted.key]
openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [certificate.crt]
openssl rsa -in [keyfile-encrypted.key] -out [keyfile-decrypted.key]

На выходе получаем [certificate.crt] и [keyfile-decrypted.key]. Теперь можно поднимать ssl на nginx

Статистика по обращениям к nginx в realtime

Иногда бывает полезно увидеть TOP IP адресов с которых идут обращения к вашему backend. Если у вас настроено логивание в nginx access.log, то с помощью такого нехитрого скрипта можно получить самые «активные» IP

tail -f access-api.log | awk {'print $1 ;fflush();'} | logtop

Поменять параметр в билде, используя TeamCity API

В данной заметке приведу пример powershell скрипта, которым меняю настройки проекта используя API Teamcity. К сожалению у TeamCity нет нативного «интерфейса» через который это можно было было сделать. Простой пример. Предположим, у вас 2 TeamCity. Скажем, на первый это основной сервер. А на втором вы собираете всякие демо стенды. Также вы хотите что бы количество FXCOP warnings было не ниже чем на основном. Для этого последним шагом можно добавить скрипт, который дернет API и передаст нужное значение. Ниже пример на powershell, который передаст FXCOP warnings на другой сервер:

param(
    [string]$TeamcityUsername = "teamcity_api",
    [string]$TeamcityPassword = "teamcity_pass",
    [string]$TeamcityBuildID = "build_project_id",
    [string]$TeamcityBaseUrl = "https://buildserver",
    [string]$FxcopWarnings = "92"
)
function getAuthHeader($user, $pass) {
    $pair = "$($user):$($pass)"
    $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
    $base64 = [System.Convert]::ToBase64String($bytes)
    $basicAuthValue = "Basic $base64"
    return $basicAuthValue
}

[xml]$response = Invoke-WebRequest -UseBasicParsing -Method PUT -Uri $($TeamcityBaseUrl + "/app/rest/buildTypes/id:${TeamcityBuildID}/parameters/env.fxcop.warnings") -Body $("<property name='env.fxcop.warnings' value='$FxcopWarnings'/>") -Headers @{ Authorization = $(getAuthHeader $teamcityUsername $teamcityPassword) } -ContentType "application/xml"

 

Примеры по tcpdump и ssldump

Снимаем дамп трафика SSL/HTTPS и получаем заголовки

tcpdump -i eth0 -vvv -s 0 -w /tmp/ssl_dump.cap host IP.ADD.RE.SS and port 443
ssldump -A -d -k PATH_TO_SSL_PRIVATE.KEY -nr /tmp/ssl_dump.cap > /tmp/out.txt

Получить POST заголовки

tcpdump -i eth0 -s 0 -A 'tcp dst port 8080 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'