четверг, 19 декабря 2019 г.

Конвертация .key файла ключа в gpg-формат для проверки подписи apt-get

Рассмотрим на примере nginx.org.
Разработчик собирает пакеты под дистрибутивы Debian/Ububntu и подписывает их своим ключом. Далее нам предлагают импортировать этот ключ в default apt keyring и пользоваться:
sudo apt-key add nginx_signing.key
Ключ будет добавлен в /etc/apt/trusted.gpg, им можно управлять с помощью apt-key.

Есть альтернативный вариант - создать отдельный keyring для конкретного или нескольких ключей, и распространять его обычным копированием в /etc/apt/trusted.gpg.d/ на требуемом количестве окружений.

Делается это путём нехитрого набора действий (на данном примере):
wget http://nginx.org/keys/nginx_signing.key
gpg --no-default-keyring --keyring ./tmp.gpg --import nginx_signing.key
gpg --no-default-keyring --keyring ./tmp.gpg --export > /etc/apt/trusted.gpg.d/nginx.gpg
Созданный таким образом ключ теперь можно распространять с помощью этих ваших шефов/анзиблов/etc.

Updated on 2019-12-19

вторник, 20 ноября 2018 г.

понедельник, 18 декабря 2017 г.

Конвертируем время в лог-фале из формата TAI64N в человеко-читаемый вил

В логах qmail время пишется в формате TAI64N, что иногда доставляет неудобств.
Решается перенаправлением лога через pipe в исправляющий это через pipe в perl-код.
Выглядит как-то так:
tail -F /var/log/qmail/*/current | perl -MPOSIX=strftime -npe 's{\@4 (\w{15}) (\w{8}) }{strftime( "%Y-%m-%d %H:%M:%S.".sprintf("%09s",hex($2)),localtime hex($1) )}ex' 

понедельник, 13 ноября 2017 г.

Несколько VLAN в Windows 10

После недавнего обновления (KB4041994) Windows 10 решила сделать мне хорошо и удалила более не поддерживаемую утилиту "Realtek Ethernet Diagnostic Utility".
Незадача в том, что утилита позволяла, пусть и коряво, сделать несколько VLAN на встроенной сетевой карте с чипом RTL8168. Итого образовалась ситуация: чип аппаратно умеет VLAN, а программно как-бы уже не умеет без вышеупомянутой утилиты.

Получилось решить обходным путём через подсистему Hyper-V (должно работать на Windows 10 Pro/Enterprise) путём выполнения следующих действий.

1. Установить компоненты Hyper-V, выполнив в PowerShell из-под администратора
Enable-WindowsOptionalFeature -Online -FeatureName:Microsoft-Hyper-V -All
После этого следует убедиться что выбран пункт "Hyper-V" и все его подпункты в разделе "Панель управления\Все элементы панели управления\Программы и компоненты - Включение и отключение компонентов Windows".

2. Перезагрузить ЭВМ.

3. Запустить "Пуск - Средства администрирования Windows - Диспетчер Hyper-V".
В диспетчере слева в списке выбрать свой компьютер по его имени, справа "Диспетчер виртуальных коммутаторов", посмотреть в нём список "Виртуальные коммутаторы". В списке должен быть "Коммутатор по умолчанию". Тут пришлось создать ещё один виртуальный коммутатор с именем VSwitch0 (имя не принципиально), так как на "Коммутатор по умолчанию" не взлетело. Получилось как на картинке.

4. Далее, следуя инструкциям этой замечательной ссылки, выполнить следующие команды в PowerShell из-под администратора для каждого требуемого VLAN
Add-VMNetworkAdapter -ManagementOS -Name <VLAN_NAME> -StaticMacAddress <MAC> -SwitchName <VIRTUAL_SWITCH_NAME>
Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName <VLAN_NAME> -Access -VlanId <VLAN_ID>
где
<VLAN_NAME> - предпочитаемое имя VLAN в системе, например "eth0.1234" или "backup internet";
<VLAN_ID> - идентификатор VLAN;
<MAC> - желаемый MAC-адрес виртуального адаптера вида "DE-AD-11-11-DE-AD";
<VIRTUAL_SWITCH_NAME> - имя виртуального коммутатора из шага 3, в моём случае "VSwitch0".


понедельник, 10 октября 2016 г.

svchost.exe (netsvc) high CPU/memory usage

Скрипт, лечащий залипание Windows Update на Windows 7, когда svchost.exe (netsvc) потребляет много ресурсов CPU и памяти.

Следует использовать если проблема осталась после установки обновления Windows Update от июня 2015

@echo off

REM Script to Reset Windows Updates agent
REM Stop Services

net stop bits
net stop wuauserv
net stop appidsvc
net stop cryptsvc

REM Delete the qmgr*.dat files
Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat"

REM Rename folders
Ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak
Ren %systemroot%\system32\catroot2 catroot2.bak

REM Reset services permissions
sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
sc.exe sdsetwuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)

REM ReRegister services
cd /d %windir%\system32
regsvr32.exe /U /s vbscript.dll
regsvr32.exe /U /s mshtml.dll
regsvr32.exe /U /s msjava.dll
regsvr32.exe /U /s msxml.dll
regsvr32.exe /U /s actxprxy.dll
regsvr32.exe /U /s shdocvw.dll
regsvr32.exe /U /s Mssip32.dll
regsvr32.exe /U /s wintrust.dll
regsvr32.exe /U /s initpki.dll
regsvr32.exe /U /s dssenh.dll
regsvr32.exe /U /s rsaenh.dll
regsvr32.exe /U /s gpkcsp.dll
regsvr32.exe /U /s sccbase.dll
regsvr32.exe /U /s slbcsp.dll
regsvr32.exe /U /s cryptdlg.dll
regsvr32.exe /U /s Urlmon.dll
regsvr32.exe /U /s Oleaut32.dll
regsvr32.exe /U /s msxml2.dll
regsvr32.exe /U /s Browseui.dll
regsvr32.exe /U /s shell32.dll
regsvr32.exe /U /s atl.dll
regsvr32.exe /U /s jscript.dll
regsvr32.exe /U /s msxml3.dll
regsvr32.exe /U /s softpub.dll
regsvr32.exe /U /s wuapi.dll
regsvr32.exe /U /s wuaueng.dll
regsvr32.exe /U /s wuaueng1.dll
regsvr32.exe /U /s wucltui.dll
regsvr32.exe /U /s wups.dll
regsvr32.exe /U /s wups2.dll
regsvr32.exe /U /s wuweb.dll
regsvr32.exe /U /s scrrun.dll
regsvr32.exe /U /s msxml6.dll
regsvr32.exe /U /s ole32.dll
regsvr32.exe /U /s qmgr.dll
regsvr32.exe /U /s qmgrprxy.dll
regsvr32.exe /U /s wucltux.dll
regsvr32.exe /U /s muweb.dll
regsvr32.exe /U /s wuwebv.dll
regsvr32.exe /s vbscript.dll
regsvr32.exe /s mshtml.dll
regsvr32.exe /s msjava.dll
regsvr32.exe /s msxml.dll
regsvr32.exe /s actxprxy.dll
regsvr32.exe /s shdocvw.dll
regsvr32.exe /s Mssip32.dll
regsvr32.exe /s wintrust.dll
regsvr32.exe /s initpki.dll
regsvr32.exe /s dssenh.dll
regsvr32.exe /s rsaenh.dll
regsvr32.exe /s gpkcsp.dll
regsvr32.exe /s sccbase.dll
regsvr32.exe /s slbcsp.dll
regsvr32.exe /s cryptdlg.dll
regsvr32.exe /s Urlmon.dll
regsvr32.exe /s Oleaut32.dll
regsvr32.exe /s msxml2.dll
regsvr32.exe /s Browseui.dll
regsvr32.exe /s shell32.dll
regsvr32.exe /s Mssip32.dll
regsvr32.exe /s atl.dll
regsvr32.exe /s jscript.dll
regsvr32.exe /s msxml3.dll
regsvr32.exe /s softpub.dll
regsvr32.exe /s wuapi.dll
regsvr32.exe /s wuaueng.dll
regsvr32.exe /s wuaueng1.dll
regsvr32.exe /s wucltui.dll
regsvr32.exe /s wups.dll
regsvr32.exe /s wups2.dll
regsvr32.exe /s wuweb.dll
regsvr32.exe /s scrrun.dll
regsvr32.exe /s msxml6.dll
regsvr32.exe /s ole32.dll
regsvr32.exe /s qmgr.dll
regsvr32.exe /s qmgrprxy.dll
regsvr32.exe /s wucltux.dll
regsvr32.exe /s muweb.dll
regsvr32.exe /s wuwebv.dll

REM reset winsock
netsh winsock reset

REM reset proxy
netsh winhttp reset proxy

REM restart services
net start bits
net start wuauserv
net start appidsvc
net start cryptsvc

REM Install the latest Windows Update Agent.
start http://support.microsoft.com/kb/949104

вторник, 1 сентября 2015 г.

tail -f on rapidly truncated file

При частой перезаписи файла (например, при ротации лог-файла) tail -f останавливается на первом таком событии. Для автоматического подключения к новому файлу следует использовать команду:
tail -f --follow=name --retry <filename>
В случае отсутствия функционала у бинарного tail (например, на busybox) можно использовать следующий bash-скрипт:
#!/bin/bash 

PID=`mktemp`
while true;
do
  [ -e "$1" ] && IO=`stat -c %i "$1"`
  [ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; }

  # as long as the file exists and the inode number did not change
  while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]]
  do
     sleep 0.5
  done
  [ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID
  sleep 0.5
done 2> /dev/null
rm -rf $PID