понедельник, 28 июня 2021 г.

Dell USB3.0 dock D3100 + ubuntu

 Вроде неплохой док, но его особенность - "из коробки" он работает по сути только как усб хаб + аудио, а вот видео порты не работают. Нужно качать драйвера, но на сайте dell их просто нет (точнее, там заявлена поддержка только windows). И гуглинг находит такой линк

http://www.displaylink.com/downloads/ubuntu

новая ссылка

https://www.synaptics.com/products/displaylink-graphics/downloads/ubuntu

суббота, 19 июня 2021 г.

CI/CD и .NET в докере

Есть несколько вариантов сборки

windows  based

Если открыть шаблоны гитлаб, там есть несколько вариантов под с шарп, но там в основе идут виндовые образы


linux based

mcr.microsoft.com/dotnet/core/sdk:3.1

! note

Bear in mind that since the release of .NET 5, the repository path changed to mcr.microsoft.com/dotnet/sdk:3.1. Here is a link to the rename anouncement: github.com/dotnet/dotnet-docker/issues/2375

при это стадии сборки будут такие

dotnet restore

dotnet build

dotnet publish

На самом деле, там чуть более сложный синтаксис, например для restore можно указать имя проекта, для publish - куда публиковать итог, -o ./publish/

и так далее.

Есть вариант с image: microsoft/dotnet:latest
но там есть какие-то нюансы с версиями

Чуть линков: 1 (кодероад помойка, но оригинал не нагуглился), 2, 3, 4, 5


versions in docker-compose

В начале docker-compose.yml всегда пишется версия компоуза, что когда появилось - нужно читать тут (матрица версий, полная дока). При этом может быть так, что пишем версию 3.9 - а докер что у нас установлен такой версии не знает, нужно снижать. Но снизив версию и больше не получая ошибок про указанную версию, можно получать ошибки про использование новых атрибутов. Например, убунта 18.04, докер и docker.io, вписываем версию 3.5-3.7 (выше ругается), но при этом ошибка (ниже в ошибки впишу)


Про ошибки

ERROR: Version in "./Docker/docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

Снижаем версию или ищем как обновить инсталляцию

ERROR: The Compose file './Docker/docker-compose.yml' is invalid because:
networks.form_constructor value Additional properties are not allowed ('name' was unexpected)
То, что описано выше. При этом данный тэг заявлен в 3.5 и на неё валидатор не ругался.

пятница, 4 июня 2021 г.

phpipam - знакомство и api

Если уж довелось работать с phpipam, начать лучше с чтения оф доки и его установки в докере. Например, отсюда

https://github.com/pierrecdn/phpipam

если взять блок из docker-compose, не надо ставить ни баз, ничего.

!! Это хорошо для ознакомления, но база в докере в проде - не лучшее решение !!

Есть другой вариант

https://hub.docker.com/r/phpipam/phpipam-www (github)


 Тепреь посмотрим  на его апи

https://phpipam.net/api/api_documentation/

Клиенты:

https://phpipam.net/api/phpipam-api-clients/

https://github.com/phpipam/phpipam-api-clients


После установки в докере (да и скорее всего в любой) если включить PowerDNS то он не заработает. Во-первых, надо прописать правильный хост. Во-вторых, подключиться к БД и завести юзера и базу ИЛИ указать текущего рута.. и создать базу. Так что лучше создать всё самому. В-третьих, база сама не заполнится (что я вполне могу назвать рукожопством, могли бы чуть доделать и по предоставленному рутовому доступу всё заполнить + иметь кнопку в вебе для деплоя нужного дампа бд), нужно найти порядок действий (линк ниже) и пролить базу руками.

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-on-ubuntu-14-04 step 4

!!! Схема бд - "не та". Нет disabled полей как минимум. Второе рукожопство - открываем оф доку, берём оттуда дамп

https://doc.powerdns.com/authoritative/backends/generic-mysql.html#default-schema

Вроде всё ок, но после создания домена опять получаем Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'change_date' in 'field list'. Находим issue и видим ещё линк

https://doc.powerdns.com/md/authoritative/howtos/#basic-setup-configuring-database-connectivity

Что на выходе? На сайте phpipam нет нужной схемы. И в репе нет. И линков нет, только по issue собирать. И даже офсайт схемы pdns противоречат друг другу.

Вишенка на торте. Днс не заработает после активации, так как нужно сам pdns поставить ОТДЕЛЬНО. В общем, очередная формальная вещь, которую никто нигде не смог нормально описать.

Берите netbox...


О репликации есть такое
https://www.digitalocean.com/community/tutorials/how-to-configure-dns-replication-on-a-slave-powerdns-server-on-ubuntu-14-04

но надо ещё изучить вопрос. Дело в том, что можно поднять несколько powerdns в режиме подключения к БД (одной или нескольких с репликацией), а также про режим без общей БД с NOTIFY. И powerdns native vs master

среда, 26 мая 2021 г.

Инвентаризация хостов и сетей

 Когда много хостов и/или сетей, нужно вести их учёт. Это называется IPAM - IP address management.

Типичные представители

- phpIPAM

- netbox (и его форк nautobot)

- RackTables

- SolarWinds IP Address Manager

- Opendcim

По моему мнению, лучше смотреть на netbox.

четверг, 20 мая 2021 г.

LogStash vs filebeat

 https://logz.io/blog/filebeat-vs-logstash/

Если очень вкратце, они друг друга не заменяют, а дополняют. logstash написан на жаве и весьма тяжёл, при этом filebeat (является частью Beats, подробнее тоже в линке выше) написан на go и потому лёгкий, но не умеет в серьёзную обработку. Поэтому для прода лучше вынести logstash вообще на отдельную машину, и закидывать туда данные через filebeat.

И по настройке - смотрим статью.

Есть и офдока

https://www.elastic.co/guide/en/beats/filebeat/7.0/filebeat-getting-started.html

Но. Иногда можно и отказаться от logstash совсем, используя ingress pipeline и перенеся обработку тех же access_log сразу в elasticsearch.


Итого.

filebeat - сбор и доставка логов (плюс предобработка через фильтры)

logstash - парсит логи в документы

Elasticsearch - хранит и индексирует документы

Kibana - поиск, аггрегирование, показ нужных данных.

вторник, 18 мая 2021 г.

Мониторинг для Kubernetes

 Если мы взяли не готовый продукт, а чистый кубер, там нет многого нужного. Сейчас рассмотрим мониторинг. Статья содержит много ссылок, потому что информации много, читать лучше в первоисточнике, и понимать все варианты. При этом не стоит читать только статьи вида "9 утилит" - нужно понимать, КАК оно будет работать, раскатываться, собирать, куда заливать... Что такое heapster, DaemonSet, operator и так далее.

Установка Kubernetes через kubeadm

 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

Установку kubectl kubeadm kubelet пропускаем, это по доке делается на раз.

Перед настройкой нужно доставить некоторые пакеты

# Pull images (apiserver, controller-manager, scheduler, proxy, etcd, coredns)

kubeadm config images pill

И теперь совсем базовая инициализация выглядит так

sudo kubeadm init --pod-network-cidr 10.244.0.0/16

В итоге, нам
1) создаст /etc/kubernetes/admin.conf
2) выдаст строку для подключения других нод к нашему мастеру, начинаться будет с kubeadm join
3) поставит и запустит нужные сервисы

И теперь мы можем работать под своим юзером с кластером (команды пускаем от юзера!)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Если что-то запороли -- ничего страшного!
sudo kubeadm reset

Но.. у нас не работает сеть. Потому что теперь нужно поставить сеть :) Гуглим calico, flannel или в общем случае - CNI. Тоже обязательно понять, что там происходит и как оно работает.

Линки

понедельник, 17 мая 2021 г.

Что такое kubernetes operator

Операторы для Kubernetes: как запускать stateful-приложения


И пример оператора

shell-operator v1.0.0: долгожданный релиз нашего проекта для Kubernetes-операторов

Другой пример - framawork для создания своих операторов

https://github.com/nolar/kopf

Kopf —Kubernetes Operator Pythonic Framework— is a framework and a library to make Kubernetes operators development easier, just in a few lines of Python code.


Правда, чаше операторы используют для БД или мониторинга.

четверг, 29 апреля 2021 г.

Ubuntu: passwordless login with YubiKey 5

https://askubuntu.com/questions/1167691/passwordless-login-with-yubikey-5-nfc



Читать лучше целиком. И краткий пересказ

sudo apt install libpam-u2f

pamu2fcfg | sudo tee /etc/u2f_mappings

# По комментам, лучше писать

# pamu2fcfg -u USERNAME | tee /etc/u2f_mappings

# OR (from root only)


# pamu2fcfg -u USERNAME >> /etc/u2f_mappings

После этого обновляем pam.d/ конфиги, добавляя auth sufficient pam_u2f.so ко всем связанным сервисам: gdm-password lightdm sudo login

sudo -i
cd /etc/pam.d
echo 'auth sufficient pam_u2f.so authfile=/etc/u2f_mappings cue' > common-u2f
for f in gdm-password lightdm sudo login; do
mv $f $f~
awk '/@include common-auth/ {print "@include common-u2f"}; {print}' $f~ > $f
done
exit

Момент в том, что проверять ключ нужно ДО @include common-auth

При этом можно сделать нормальный 2FA, ожидая касания ключа ПОСЛЕ ввода пароля. Для этого строка чуть меняется (и ставится ПОСЛЕ @include common-auth):

auth required pam_u2f.so
Нужно понимать, что так без ключа войти не получится!

суббота, 24 апреля 2021 г.

postfix, dkim, debian

Установка

sudo apt install opendkim opendkim-tools

После установки конфиг лежит в /etc/opendkim.conf

Теперь надо настроить - создать несколько файликов и ключи

mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

 Теперь нам нужно в /etc/postfix/main.cf указать, где искать dkim файлы

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts            refile:/etc/opendkim/TrustedHosts
KeyTable                 refile:/etc/opendkim/KeyTable
SigningTable             refile:/etc/opendkim/SigningTable

Также, там есть ещё ряд настроек

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

Mode                    sv

UserID                  opendkim:opendkim

Umask, Syslog уже есть в оригинальном конфиге, их можно не копировать.

Замечание на тему Socket: если нужно работать через tcp, формат такой: inet:12301@localhost, но по умолчанию открывается Unix socket в /var/run/opendkim/opendkim.sock (легко проверяется через netstat -plan | grep dkim). И если надо переопределить, то по ряду мануалов это делается в /etc/default/opendkim

Ключ генерируется так

sudo -u opendkim opendkim-genkey -s <some_name> -D /etc/opendkim/keys -d <yourdomain.com> -b 2048

!!! В некоторых мануалах перепутаны -b и -s. -b это СКОЛЬКО БИТ ключ, а -s это префикс для dns, так называемый селектор! Тот что <some_name>._domainkey, если планируется несколько мест для отправки - лучше использовать технический префикс сервера типа srv01, и избегать имён вида mail - может быть конфликт с рядом сервисов автогенерации, включая почту от яндекса - мне и такое довелось увидеть...

И второй момент -- после создания ключа файлы создаются только по селектору без учёта доменов, поэтому лучше в keys сразу создать папку с доменом и в -D поправить на keys/<yourdomain.com>. Ниже keyTable с учётом этой папки.

Теперь лучше записать публичную часть в dns

cat /etc/opendkim/keys/<yourdomain.com>/<some_name>.txt

Теперь надо заполнить файл, где описаны для каких доменов какие селекторы подключать.

В /etc/opendkim/KeyTable

 <some_name>._domainkey.<yourdomain.com> <yourdomain.com>:<some_name>:/etc/opendkim/keys/<yourdomain.com>/<some_name>.private

В /etc/opendkim/TrustedHosts пишем хосты, которые будут подписаны нашей подписью, обычно это только сама машина

127.0.0.1
localhost
# можно указать подсети, вида 192.168.0.0/24

В /etc/opendkim/SigningTable пишем, каким ключом что подписываем

*@<yourdomain.com> <some_name>._domainkey.<yourdomain.com>

 Не путаем KeyTable и TrustedHosts! В KeyTable - где искать ключи по домену и селектору, а TrustedHosts - каким ключом подписываем почту для каких адресов. Можно вообще сделать отдельные ключи для отдельных ящиков.

проверьте, что в /etc/postfix/main.cf

    # Milter configuration
    # Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
    milter_protocol = 6
    milter_default_action = accept
    smtpd_milters = unix:/var/spool/postfix/var/run/opendkim
    non_smtpd_milters = unix:/var/spool/postfix/var/run/opendkim

И перезапустите opendkim, postfix

 

Проверка

после настройки opendkim можно обнаружить в mail.log:

postfix/cleanup[13428]: warning: connect to Milter service unix:/var/run/opendkim/opendkim.sock: No such file or directory

Хотя и файл такой есть, и с правами всё хорошо. Но, слава chroot, работать так не будет.

Фикс:

  1. Then do the following

    sudo adduser postfix opendkim
  2. Postfix running in chroot

    Modify /etc/default/opendkim, change SOCKET option to postfix chroot location

    SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"

    You will have to create directory /var/spool/postfix/var/run/opendkim and change its permission

    sudo mkdir -p /var/spool/postfix/var/run/opendkim
    sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
    
  3. Restart opendkim

    sudo service opendkim restart
    https://unix.stackexchange.com/questions/74477/postfix-smtpd-warning-connect-to-milter-service-unix-var-run-opendkim-opendki

 

Links

Относительно свежая дока, но читать аккуратно

https://www.linode.com/docs/guides/configure-spf-and-dkim-in-postfix-on-debian-9/

Вроде и официальная, но очень старая

https://wiki.debian.org/opendkim