Очистка каталогов в истории git с помощью BFG

Если вы столкнулись с тем, что вам надо удалить целиком каталог из истории git, то это может быть проблемой. Так как BFG не поддерживает слеши в путях. Но есть способ обойти это ограничение:

git rev-list --all --objects -- path/to/the/directory/to/delete | git cat-file --batch-check='%(objectname) %(objecttype) %(rest)' | grep -Pe '^\w+ blob' | cut -d' ' -f1 > ./to-delete.txt java -jar bfg.jar --no-blob-protection --strip-blobs-with-ids ./to-delete.txt


git reflog expire --expire=now --all && git gc --prune=now --aggressive

The principle is simple: create a list of object IDs to strip, and input that to BFG. This means that if an object is referenced through a different path it will be nuked nonetheless.

  • git rev-list --all --objects -- path/to/the/directory/to/delete
    This will list all objects in the subdirectory referenced in all commits which modify the given path. The format is objectid filepath.You should run this command to check its output matches what you’d expect.
  • git cat-file --batch-check='%(objectname) %(objecttype) %(rest)'
    This will qualify the object with its type. It will turn the previous format objectid filepath into objectid type filepath.
  • grep -Pe '^\w+ blob'
    This will filter out non-blob objects.
  • cut -d' ' -f1 > ./to-delete.txt
    This will extract the object ID and redirect the output into the to-delete.txt file.
  • java -jar bfg.jar --no-blob-protection --strip-blobs-with-ids ./to-delete.txt
    This runs BFG, giving it the list of objects to remove.

Умные шорткаты под linux

Хочу поделиться с вами примером очень простого, но мегаполезного скрипта. Если вы работаете в команде, то очень часто приходится копировать id задачь, например из git, открывать в issue tracker, искать таску по id и тд. Так вот чтобы максимально упростить открытие issue tracker или другого сайта в параметрах которого использует id, я написал простой скрипт и забиндил его выполнение на комбинацию ctrl+alt+v.

В своей работе я в основном пользуюсь 2 инструментами: wrike и bitbucket. Причем в bitbucket мне часто приходится просматривать pull request-ы, а в wrike — таски.

Как только с копировал в буфер какой то цифровой набор и нажал ctrl+alt+v выполняется следующий скрипт. Он берет значение из буфера и проверяет под какое условие попадает данный ID. В моем случае, если ID > 10000 то открывается вкладка в Chrome с нужной задачей. Так как ID таска передается в качестве параметра в url. В противном случае — открываем пул реквесты в битбакете с нужным номером.

Такой простой трюк экономит мне время и нервы в течении дня. Пользуйтесь:

#!/bin/bash
ID=`xclip -selection c -o`
if [ $ID -gt 10000 ] 
then
    google-chrome https://wrike.com/open.htm?id=${ID}
else
    google-chrome https://bitbucket.org/someuserorcompany/pull-requests/${ID}
fi

Быстрый тест smtp сервера

Иногда бывает нужно оперативно проверить возможность доставки почты с определенного smtp или его доступность. Если замечательный консольный тул swaks. Ниже будет пример использования

swaks --auth \
    --server smtp.myserver.org \
    --from [email protected] \
    --au [email protected] \
    --ap mypassword \
    --to [email protected] \
    --h-Subject: "Hello" \
    --body 'Testing some awesomeness!'

Скрипты для скачивания потокового видео

Иногда бывает нужно качнуть потоковое видео. Для начала надо определить откуда сливается видеопоток. Открываем chrome developer console и смотрим откуда льется трафик. В моем примере каждый последющий фрагмент видео инкрементился на 1.

Поэтому пишем простой скрипт:

#!/bin/bash
for i in {1..8000}
do
    echo "Get part $i"
    wget "https://cdn.facecast.net/secure/-wCitp8zEj80dVALt4PK-w/fnBRI-qYfhoxmayiCSFwbQ/1568370599/2165067/30764/252598/$i.ts" 
done

Далее смотрим сколько скачалось файлов и объединяем их:

#!/bin/bash
RESFILE=all.ts
for i in {1..8000}
do
    cat ./$i.ts >> $RESFILE
done

В результате получаем all.ts, который содержит весь видеопоток, который можно сконвертить в mp4

Новое приложение для изучения фразовых глаголов на Blazor

Некоторое время назад решили попробовать в действии ASP.NET Core Blazor. И придумали небольшое приложение, которое позволяет очень быстро выучить фразовые глаголы — TheVerbs.

Если у вас есть желание потестить и посмотреть как это работает приложение — вы можете поучавстовать в Beta-тесте. Для этого переходите по ссылке и устанавливайте приложение.

Ссылка на Google Store: https://play.google.com/apps/testing/ru.voiplab.theverbs

Любой фидбек приветствуется =)

Бесплатый SSL Wildcard сертификат без боли и страданий

Цель статьи: быстро и просто получить бесплатные wildcard ssl сертификаты на любой домен с автоматическим продлением.

Wildcard SSL позволяет защитить неограниченное количество субдоменов одним сертификатом. Это прекрасное решение для тех, кто хочет управлять множеством сайтов или страниц на одном домене. Заплатив за сертификат один раз, вы экономите средства, т.к. добавление дополнительных субдоменов и серверов в будущем производится без взимания оплаты. Надо отметить, что стоимость такого сертификата необоснованно завышена. У разных реселлеров цена может варьироваться от 3000-30000 тысяч рублей.

Но зачем платить, если можно не платить? Для этого очень крутые ребята создали проект Let’s Encrypt. Наверное, об этом проекте не слышал только ленивый. В данной статье вы узнаете как просто и без боли задействовать всю мощь автоматического получения wildcard сертификата на свой домен.

Let’s Encrypt — бесплатный, автоматизированный и открытый Центр Сертификации, созданный на благо всего общества организацией Internet Security Research Group (ISRG).

Основная проблема Let’s Encrypt в том, что для начинающих IT-специалистов процедура получения довольно неочивидная. Для решения данной проблемы мы с Вами воспользуемся проектом https://github.com/Neilpang/acme.sh

План

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

Установка и базовая настройка

Для установки и настройки вам понадобится Linux. Я данный скрипт поставил сразу на сервер с nginx/apache. Можете использовать локальную машину или виртуалку, это не принципиально.

curl https://get.acme.sh | sh

Вы увидите такое сообщение. На ошибку не обращайте внимания, мы не будем использовать standalone mode.

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

Прописывание ключей API от вашего DNS хостера

Перейдите на страницу https://github.com/Neilpang/acme.sh/wiki/dnsapi и найдите поиском своего DNS-хостера. Вероятность, что вы его найдете очень выская, проект opensource и интеграции с новыми DNS-хостерами добавляется очень быстро. На момент написания статьи их уже более 90.

Далее опишу процесс на примере своего DNS-хостера reg.ru.

Как написано в инструкции по ссылке выше мне нужно создать 2 переменные с помощью команды export. Естественно, я вбиваю свои данные. Запросить данные можно у своего DNS-хостера через личный кабинет.

export REGRU_API_Username='test'
export REGRU_API_Password='test'

Генерация сертификата и установка скрипта для автоматического получения SSL сертификата

Там же в инструкции будет пример команды. Воспользуемся ей и получим наш новый SSL сертификат.

acme.sh --issue --dns dns_regru -d 'example.com' -d '*.example.com'

Если все прошло успешно и не было никаких ошибок, то новый сертификат вы найдете по пути ~/myacme/data/example.com. Там же вы найдете, если нужно csr и закрытый ключ, который вам понадобится для установки сертификата на nginx или apache.

Пропишите путь к сертификату в nginx или apache. Вам понадобится 2 файла:
1. fullchaing.cer — это непосредственно сертификат. Ну или если быть точнее цепочка сертификатов.
2. example.com.key — закрытый ключ

Пример:

server {
listen 443 ssl http2;
ssl on;
server_name example.com *.example.com;
ssl_certificate /etc/letsencrypt/certificates/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/certificates/example.com/example.com.key;
location / {
include www-location.conf;
proxy_pass https://192.168.1.2/;
}
}

Автоматического продление

Сертификат выдается на 90 дней и лучше заранее позаботиться о его автоматическом продлении. Можно раз в месяц запускать скрипт для обновления. Для этого просто в /etc/crontab добавьте строку. Обратите внимание на команду после &&. Вам нужно сделать так что бы ваш web-сервис перечитал конфигурацию. В данном примере это nginx. В вашем случае может быть другая команда. Каждое 1 числа acme будет пытаться продлить сертификат.

0 0 1 * * «/home/user/.acme.sh»/acme.sh —cron —home «/home/user/.acme.sh» > /dev/null && service nginx reload

На этом, пожалуй, все. Если у вас есть какие то вопросы — пишите в комментариях.

Я рекомендую настроить дополнительный мониторинг ssl сертификата на вашем домене. Чтобы вы получили алерт, в случае если до окончания остается 2 недели. Значит что то пошло не так и вам стоит посмотреть логи. Сервисов для мониторинга в Интернете множество.