Rose debug info
---------------

marand.ru

Установка Wireguard на edgerouter

Wireguard отличная альтернатива openvpn. А по части настройки так вообще на три головы впереди.

Ставим wireguard

Идем на github и копируем ссылку на deb пакет в зависимости от прошивки и модели роутера. В моем случае это e50-v2-v1.0.20211208-v1.0.20210914.deb

user@ubnt:~$ curl -OL link-to-deb
user@ubnt:~$ sudo dpkg -i e50-v2-v1.0.20211208-v1.0.20210914.deb

Генерируем ключи:

wg genkey | tee /config/auth/wg.key | wg pubkey >  wg.public

Приватный ключ будет лежать в /config/auth/wg.key, публичный в текущей директории. Потом публичный ключ можно посмотреть командой sudo wg show

Настраиваем интерфейс на роутере:

configure
set interfaces wireguard wg0 address 192.168.5.1/24
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key /config/auth/wg.key

commit
save

Добавляем peer

В приложении Wireguard что на ios, что в macos, что в windows при добавлении нового туннеля ключи генерируются автоматом, нужно только скопировать:

Прописываем публичный ключ роутера, его ip и порт. Обязательно указываем ip адрес устройства, на котором настраиваем — он должен быть уникальным. Например, на телефоне 192.168.5.2, на макбуке 192.168.5.3
Пример конфига для macos и windows:

[Interface]
PrivateKey = приватный ключ пира
Address = 192.168.5.3/32

[Peer]
PublicKey = публичный ключ роутера
AllowedIPs = 192.168.5.0/24, 192.168.1.0/24 // указываем сети, в которые нужен доступ
Endpoint = ip:51820 //внешний адрес роутера
PersistentKeepalive = 15

Добавляем peer в конфиг роутера

configure
set interfaces wireguard wg0 peer публичный_ключ_пира1 allowed-ips 192.168.5.2/32
set interfaces wireguard wg0 peer публичный_ключ_пира2 allowed-ips 192.168.5.3/32
commit
save

Настраиваем файрвол

configure
set firewall name WAN_LOCAL rule 20 action accept
set firewall name WAN_LOCAL rule 20 protocol udp
set firewall name WAN_LOCAL rule 20 description 'WireGuard'
set firewall name WAN_LOCAL rule 20 destination port 51820
commit
save

Все, vpn настроен, доступ в домашнюю сеть есть как с телефона, так и с ноутбука.

Необходимые права для учетки MSSQL

Для того что бы mssql мог писать в сетевую шару, ему нужно сделать доменную учетку, например.

Для корректной работы, нужно в локальных политиках добавить следующие права:

  • Log on as a batch job (Входить в рамках выполнения пакета команд),
  • Replace a process-level token (Заменять маркер безопасности процесса),
  • Bypass traverse checking (Проходить сквозь каталоги, на которые этой учетной записи не предоставлены разрешения)
  • Adjust memory quotas for a process (Настраивать квоты на использование памяти для процесса)
 Нет комментариев    7   1 мес   1C   howto
 Нет комментариев    12   1 мес   howto

Сброс конфигурации свитчей Cisco

Краткая шпаргалка по сбросу конфигурации свитчей Cisco на ios.

Если логин/пароль известны, логинимся и вводим:

cisco_bb# write erase
Erasing the nvram filesystem will remove all files! Continue? [confirm]y[OK]
Erase of nvram: complete
cisco_bb#
cisco_bb# reload

Если доступа к конфигу нет, то включаем свитч с зажатой кнопкой mode.
Дальше в консоли появляется что-то такое, после чего отпускаем кнопку:

The system has been interrupted prior to initializing the
flash filesystem.  The following commands will initialize
the flash filesystem, and finish loading the operating 
system software:
 
    flash_init
    load_helper
    boot

Вводим: flash_init

Удаляем файлы конфигурации:

switch: del flash:config.text
switch: del flash:vlan.dat

И командуем загрузку:

switch: boot

 Нет комментариев    15   1 мес   cisco   howto

Уменьшаем размер MSDB

Размер системной базы msdb стал больше 11 гб, настало время ее почистить.

Для начала, посмотрим какая таблица сколько места занимает:

USE MSDB
select t.name as TableName,Min(t.create_date) as CreateDate,ds.name as FileGroupName, SUM(u.total_pages)*8/1024 as SizeMB
from sys.tables as t
inner join sys.partitions as p on t.object_id=p.object_id
inner join sys.allocation_units as u on p.partition_id=u.container_id
inner join sys.data_spaces as ds on u.data_space_id=ds.data_space_id
group by t.name, ds.name
order by sizemb desc

В моем случае это была таблица sysmaintplan_logdetail. Около 10 гб.

Чистим:

USE MSDB
ALTER TABLE [dbo].[sysmaintplan_log] DROP CONSTRAINT [FK_sysmaintplan_log_subplan_id];
ALTER TABLE [dbo].[sysmaintplan_logdetail] DROP CONSTRAINT [FK_sysmaintplan_log_detail_task_id];
truncate table msdb.dbo.sysmaintplan_logdetail;
truncate table msdb.dbo.sysmaintplan_log;
ALTER TABLE [dbo].[sysmaintplan_log] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_subplan_id] FOREIGN KEY([subplan_id])
REFERENCES [dbo].[sysmaintplan_subplans] ([subplan_id]);
ALTER TABLE [dbo].[sysmaintplan_logdetail] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_detail_task_id] FOREIGN KEY([task_detail_id])
REFERENCES [dbo].[sysmaintplan_log] ([task_detail_id]) ON DELETE CASCADE;

После этого обязательно сжимаем базу:

DBCC SHRINKFILE (MSDBData, 512)

Проверяем результат:

SELECT name, size = size * 8. / 1024, space_used = FILEPROPERTY(name, 'SpaceUsed') * 8. / 1024
FROM sys.database_files

И добавить еще очистку логов джобов и бекапов:

DECLARE @DateBefore DATETIME 
SET @DateBefore = DATEADD(DAY, -7, GETDATE())

EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = @DateBefore
DECLARE @DateBefore DATETIME 
SET @DateBefore = DATEADD(DAY, -60, GETDATE())

EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = @DateBefore
 Нет комментариев    11   1 мес   howto   mssql

Ground Control: папка с кешем и новые версии ios

По одному из проектов получил на поддержку несколько сотен айпадов, которые разбросаны по стране. Часть из них предыдущий подрядчик зачем-то настроил ручками — купил домен и зарегистрировал кучу apple id.

Компания международная, есть своя MDM team, которая с помощью GroundControl + VMWare AirWatch управляет девайсами централизовано. Надо только установить. Почему это не сделано изначально? В ответ услышал что-то вроде «Сложно» и «Не разобрались». Пришлось разбираться.

В общем, самый неприятный в настройке момент — выход новой версии ios. Когда апдейт становится доступным для всех известно, но когда его протестируют в команде MDM и опубликуют для обновления корпоративных устройств — тайна. Это может быть день, два или пять. Так как установка AirWatch в обязательном порядке обновляет версию ios, бывали ситуации когда при подключении очередного планшета GC хочет скачать новую прошивку, которая весит 6,5 ГБ. На мобильном интернете это очень долго.

Но выход есть!

Скачиваем прошивку после выхода (например, на ipsw.me или  Enterprise iOS) и не меняя имени файла, кладем в папку с кешем:

MAC:

~/Library/Application Support/GroundControl/Content Downloads/

Windows:

%LOCALAPPDATA%\GroundControl\Content Downloads\

Теперь я закидываю прошивку сразу после выхода и не жду «сюрпризов».

 Нет комментариев    34   3 мес   howto

Edgerouter: авторизация по ssh ключу

Оставлять 22 порт с авторизацией по паролю, ну... такое. Тем более на роутере. Значит надо добавить авторизацию по ключу!

Если ключа у вас нет, то:

cd ~/.ssh
ssh-keygen -t rsa -C "email@example.com"

Далее надо скопировать публичный ключ на роутер, заменив ip своего роутера:

scp ~/.ssh/id_rsa.pub 192.168.1.1:/tmp

И импортируем ключ для пользовтеля :

configure 
 loadkey <user> /tmp/id_rsa.pub 
 commit 
 save 
 exit

Вы же заменили дефолтного ubnt, верно?

Уведомления Flexget с Synology в telegram

Заметил, что я чаще пользуюсь телеграмом, нежели ватсапом. На работе мы даже перевели всю систему уведомлений на телегу. Плюс через API обратно даём некоторые простые команды для немедленной реакции на эти уведомления — перезагрузить устройство, заблокировать и т. п.  

В общем, решил я научить Flexget слать уведомления сразу в telegram. Это оказалось довольно просто.

Ставим python-telegram-bot

Для работы нам будет нужен этот пакет.

$ /volume1/@appstore/flexget/env/bin/pip install python-telegram-bot

Далее нам нужно создать бота.
Регистрируем у BotFather своего бота — отправляем `/newbot` и следуем подсказкам. Получаем  `bot_token`, сохраняем, он понадобится нам для конфига flexget.

Правим конфиг Flexget

Добавляем к задаче раздел notify:

notify:
  entries:
    title: 'flexget '
    message: ' started'
    via:
      - telegram:
          bot_token: xxx:XXXXXXXXXXX
          parse_mode: 'markdown'
          recipients:
            - username: '<ваш_юзернем>'

Всё, теперь можно наслаждаться результатом:

Удаляем аудиодорожку из mp4 файлов

Возникла достаточно нестандартная задача — удалить звук из нескольких сотен mp4 файлов.
В одном файле это можно сделать тысячью способов, есть куча программ, которые могут распотрошить mp4 контейнер, но что делать если файлов тысячи?

На помощь приходит консольная утилита ffmpeg, как это не странно.
Что бы удалить все аудиодорожки, надо использовать команду `-an`. Как-то так:
`ffmpeg -i input.mp4 -vcodec copy -an output.mp4`
`-i` — указывает исходный файл
`-vcodec copy` говорит что не надо трогать видео
`-an` что аудио не нужно
`output.mp4` — итоговый файл.

Отлично, но надо как-то подставить 1322 файла (147Gb)! Поможет PowerShell:

$FROMDIR = 'H:\2013\'
$TODIR = 'H:\2013_new'
$FFMPEG = 'H:\ffmpeg\bin\ffmpeg.exe'

$files = Get-ChildItem $FROMDIR -Filter  '*.mp4'
   
foreach ($file in $files)
	{
		$output = $TODIR + '\' + $file.Name 
		
		& $FFMPEG -i $FROMDIR$file -vcodec copy -an $output
	}

Запускаем и ждем :)

Ранее Ctrl + ↓