четверг, 16 февраля 2017 г.

rsyslog: писать лог только в 1 файл, не трогая rsyslog.conf

Допустим, есть сервис, который мы хотим писать через syslog в отдельный файл, уровень local2, но чтобы он не засорял /var/log/syslog|/var/log/messages. Создадим /etc/rsyslog.d/sea с текстом local2.* /var/log/sea.log

2 варианта:
1) дописываем в любое место нашего файла
local2.none /var/log/messages
local2.none /var/log/syslog

2) дописываем сразу после правила
&~
(означает - если записали в этот файл, то дальше заканчиваем обработку строки, & это И, ~ это discard). Правил может быть несколько в файле, поэтому ставим именно после тех, где заканчиваем обработку строки.

вторник, 14 февраля 2017 г.

Методы замены MAC-адреса

Временная смена


1) ifconfig
/etc/init.d/networking stop
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
/etc/init.d/networking start

(как вариант, ifconfig down eth0, ... ifconfig up eth0)

2) ip link
(stop)
ip link set eth0 address xx:xx:xx:xx:xx:xx
(start)

3) macchanger
полностью случайный новый мак
macchanger -r eth0
с сохранением принадлежности к вендору
macchanger -e eth0

4) iptables
Не совсем понятна применимость, через nat. Третий линк.

Постоянная смена

1) через средства системы
centos:
/etc/sysconfig/network-scripts/ifcfg-ethN
MACADDR=...

debian и форки
/etc/network/interfaces
hwaddress ether ...

2) systemd-networkd
/etc/systemd/network/00-default.link
[Match]
MACAddress=постоянный MAC

[Link]
MACAddress=новый MAC
NamePolicy=kernel database onboard slot path

3) systemd-udevd
/etc/udev/rules.d/75-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="02:03:09:xx:xx:xx", RUN+="/usr/bin/ip link set dev %k address c8:0a:a9:xx:xx:xx"

4) юнит systemd
см первый линк, там варианты сервис файла, дёргающие ip link или macchanger

Линки

https://wiki.archlinux.org/index.php/MAC_address_spoofing_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
https://en.wikibooks.org/wiki/Changing_Your_MAC_Address/Linux
http://sandilands.info/sgordon/address-spoofing-with-iptables-in-linux

вторник, 31 января 2017 г.

systemd: больше информации по service файлам

По опциям для .service файлов даже гугл выдаёт совсем не то, что просят. В частности, почти нереально сделать запрос так, чтобы найти аналог того же locked memory (-l), но без ulimit.
И вот она, табличка:
Table 1. Resource limit directives, their equivalent ulimit shell commands and the unit used
Directiveulimit equivalentUnit
LimitCPU=ulimit -tSeconds
LimitFSIZE=ulimit -fBytes
LimitDATA=ulimit -dBytes
LimitSTACK=ulimit -sBytes
LimitCORE=ulimit -cBytes
LimitRSS=ulimit -mBytes
LimitNOFILE=ulimit -nNumber of File Descriptors
LimitAS=ulimit -vBytes
LimitNPROC=ulimit -uNumber of Processes
LimitMEMLOCK=ulimit -lBytes
LimitLOCKS=ulimit -xNumber of Locks
LimitSIGPENDING=ulimit -iNumber of Queued Signals
LimitMSGQUEUE=ulimit -qBytes
LimitNICE=ulimit -eNice Level
LimitRTPRIO=ulimit -rRealtime Priority
LimitRTTIME=No equivalentMicroseconds
отсюда: https://www.freedesktop.org/software/systemd/man/systemd.exec.html

Выбираем, ставим. Размерности тоже принимаются. Для бесконечности ставим infinity
Также в помощь man systemd.directives

вторник, 24 января 2017 г.

CentOS: requests и как всегда древний софт

Суть в том, что в центоси весь софт древний как говно мамонта, и как итог - в том числе проблемы с LetsEncrypt сертификатами.
Для частичного решения данной проблемы есть пакет
https://pypi.python.org/pypi/certifi

Certifi is a carefully curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts. It has been extracted from the Requests project.

Можно ставить через pip, но любителям делать всё централизованно - стоит найти .src.rpm и обновлять для себя. Пример - тут
https://packages.temboard.io/yum/srpms/rhel7/python-certifi-2016.2.28-1.el7.centos.src.rpm

вторник, 3 января 2017 г.

Разбираемся с режимами модемов и влияние на настройку

Один и тот же модем может присутствовать на рынке как в HiLink, так и в Stick вариантах (например МТС 829F, он же Huawei E3372H поставляется с HiLink прошивкой, а точно такой же модем, который можно приобрести у оператора Tele2 - уже HiLink).

Итак, если ваш модем имеет Stick прошивку, то после того как вы его установите в ПК и установите драйвера и ПО со встроенного CDROM раздела, то в диспетчере устройств он будет определяться у вас как, собственно, модем (в разделе Телефоны и модемы), а также несколько COM портов. Плюс к этому, для того чтобы выйти в интернет, вам придется запускать специальное ПО под названием дашборд (dashboard):


На двух фото выше изображены дашборды от МТС - Коннект Менеджер и стандартный Huawei'евский дашборд от Mobile Partner. Все это справедливо если наш модем имеет stick-прошивку, т.е. здесь мы имеем дело с ПО для выхода в интернет, а само устройство у нас определяется как модем и несколько COM-портов.

Совершенно по-другому обстоят дела если мы имеем HiLink прошивку. В этом случае после установки ПО с CDROM раздела модем у нас определяется как виртуальная сетевая карта (RNDIS адаптер) и никакого ПО для соединения с интернет нет. Модем устанавливает соединение с интернет автоматически, а для управления настройками модема есть web-интерфейс. Т.е. фактически в этом случае модем представляет собой ethernet-роутер, имеющий собственный IP адрес в локальной сети (например, 192.168.8.1). Ваш ПК получает на интерфейс RNDIS адаптера (виртуальной сетевой карты) IP из подсети модема - 192.168.8.0/24, и выходит через шлюз 192.168.8.1 в интернет. Само соединение, естественно устанавливается в модеме, просто в данном случае он дополнительно выполняет функции роутера, в котором поднимается NAT и т.д.
(отсюда)

STICK

С этой прошивкой устройство ведет себя как классический USB-модем: имеется командный AT-порт, через который можно установить соединение посредством PPP-протокола. Именно так работают практически все 3G-модемы предыдущих поколений. При этом скорость ограничена - не более 20-30 Mbit на прием. Кроме PPP-режима, имеется режим NDIS. При этом модем эмулирует сетевой интерфейс, через который и передаются данные, а через AT-порт идут только управляющие команды. В этом режиме скорость не ограничена. Основная особенность stick-режима - установление соединения и поддержка работы канала производится средствами ОС компьютера, к которому подключен модем. При этом компьютер получает IP-адрес непосредственно у провайдера сотовой связи через запрос DHCP, а модем работает как сетевой мост, передавая пакеты от компьютера в сотовую сеть и обратно, никак их не изменяя.

Начальная USB-композиция stick-модема - это виртуальный CD-ROM и картридер microSD. Для того, чтобы появились модемные порты, надо сделать переключение композиции. Под windows этим занимается операторский софт, имеющийся на виртуальном CD, или фирменная программа от huawei - Mobile Partner. Под linux переключение делает программа usb-modeswitch. Имеется возможность запретить перелючение композиций. Это делается такой командой:
AT^SETPORT="FF;10,12,16"

При этом модем сразу после включения будет выглядеть как 2 AT-порта и сетевая карта NDIS. CD и microSD будут исключены из конфигурации. Такой режим крайне удобен для использования модема в различных домашних роутерах. Вернуть обратно композицию с переключением можно командой:
AT^SETPORT="A1,A2;10,12,16,A1,A2"

Номера версий stick-прошивки всегда начинаются на 21 - например, 21.285.01.02.143. С таким типом прошивки поставляются модемы от МТС и Мегафона.

HILINK

С прошивкой HILINK модем работает в режиме роутера, и представляется компьютеру в виде сетевого интерфейса (usb-ethernet-rndis). Компьютер получает с этого интерфейса сетевые настройки через DHCP, и далее ходит через него в интернет, как через обычную проводную локальную сеть. Всю заботу об установлении соединения и поддержании канала модем берет на себя, компьютер даже не замечает, что доступ в интернет осуществляется через сототвую сеть. В этом режиме модем имеет свой собственный локальный IP-адрес (обычно 192.168.8.1), видимый со стороны компьютера как шлюз по умолчанию (default route), а также внешний IP-адрес, получаемый из сотовой сети. Между сетью сотового провайдера и локальной сетью (модем-компьютер) осуществляется маршрутизация с использованием механизма трансляции адресов (NAT). Предусмотрен проброс портов из внешней сети (port forwarding и DMZ).

Настройка модема в этом режиме производится через WEB-интерфейс, имеющийся в модеме, и доступный через его локальный IP-адрес. Также через WEB-интерфейс доступна информация о состоянии модема и сигнале сотовой сети, управление подключением, прием-передача SMS-сообщений и USSD-команд, SIM-меню и многое другое. Это особенно ценно для пользователей Linux, а также для тех, у кого модем подключен не к компьютеру, а к домашнему роутеру. Настройка модема через AT-команды, как в stick-прошивках, в штатном режиме hilink-прошивок не производится, хотя и возможна в специальном отладочном режиме DebugMode.

Начальная USB-композиция HILINK-модема в точности такая же, как и у stick - виртуальный CD-ROM и картридер microSD. Переключение композиций под windows производится небольшой программой mbbservice, запускаемой со встроенного CD. Под linux это делает программа usb-modeswitch. Штатно разработчиками модема не предусмотрен режим без переключения композиций. Тем не менее, путем некоторой модификации прошивки такой режим сделать возможно. При этом теряется встроенный картридер SD, однако появляется возможность использовать модем с любым роутером, поддерживающим сетевые карты usb-rndis.

Номера версий hilink-прошивки всегда начинаются на 22 - например, 22.286.03.00.00. С таким типом прошивки поставляется модем от Билайна.
Прошивки HILINK состоят из двух частей - сама прошивка, и WebUI (вебинтерфейс). Первой прошивается основная прошивка, потом WebUI. 


Mikrotik

Отличаться также будет и настройка в микротике: для режима Stick появится ppp-out* устройство, а для HiLink - lte* в отдельном разделе LTE.

Хотя есть мануалы, где сказано, что можно переводить модемы в stick и hilink без перепрошивки:
AT^U2DIAG=0 - в stick
AT^U2DIAG=119 - в hilink

Ну и вероятно полезная комбинация:
AT^SETPORT="FF;10,12,16,A2" - режим "без переключения". Т.е. в данном режиме первичная композиция модема (initial mode) отключена, т.е. задана как FF - Dummy (отсутствие переключения), а вторичная композиция (normal mode) задана как 10,12,16,A2 - т.е. 10 - модем, 12 - PC UI, 16 - RNDIS (у нас его нет), A2 - TF Card Reader.

пятница, 30 декабря 2016 г.

Осваиваем letsencrypt

Начать лучше отсюда
https://certbot.eff.org/
и можно заглянуть сюда
https://certbot.eff.org/docs/

Там же есть оф клиент, которым можно сделать запрос. При этом если для centos 7 прямо в epel лежит certbot, то под 6 надо качать скрипт-установщик.

Также есть аналоги типа dehydrated, пример запуска тут:
https://habrahabr.ru/post/304174/
Особенность - из зависимостей только curl и openssl, тогда как оф версия тянет два десятка питоновых либ.

Принцип работы - указываем домен(ы), которые надо подписать, и куда класть проверочный файл, путь будет вида /.well-known/acme-challenge/(длинная строка)
Для апача прямо на сайте есть примеры конфигурации и скрипт умеет "донастроить" апач, также есть режим standalone, когда запустится веб сервер с нужным доменом. Несовместимо с другими серверами на порту 80, и запрашиваемый домен должен вести на тот же сервер, где и запустили утилиту.
С nginx нужно чуть больше работы - или указывать --webroot -w (путь к root проекта), или добавить location /.well-known в нужное место.
Итог искать в /etc/letsencrypt/live/ (с оф клиентом)

Также есть вариант подтверждения через dns, есть в документации.

В дальнейшем запускаем с опцией renew, и оно обновит все сертификаты. Но nginx перезапускать через -s reload недостаточно, надо service nginx reload, а иногда и вообще рестарт.

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

rtpengine + Centos 7

В продолжение http://dragonflybsd.blogspot.ru/2016/04/rtpengine-centos-6.html

Отличий совсем немного, прежде всего - нужен .service файл, получить можно так
cd /usr/local/src
git clone https://github.com/etamme/federated-sip.git
cd federated-sip/scripts
cp rtpengine.sysconfig /etc/sysconfig/rtpengine
cp rtpengine.service /etc/systemd/system/

https://github.com/etamme/federated-sip/wiki/compile-and-set-up-rtpengine-on-centos-7
И там же, как собрать ядерный модуль под 7.

четверг, 22 декабря 2016 г.

Используем кэш для pip, npm, bower

Когда может понадобиться кэш? Например, когда часто пересобираем разные окружения или когда машины накатываются в докере итд. И каждый раз оно будет заново тянуть исходники, особенно актуально для различных докеров, а также сборкой rpmbuild с "чистым" BUILD(ROOT).

pip

cat >> ~/.pip/pip.conf << EOF
[global]
download_cache = ~/.cache/pip
EOF
mkdir -p ~/.cache/pip

Для более старых версий есть опция --download-cache <dir>, которую надо указать дополнительно -  в новых она активна по умолчанию. Отключать через --no-cache-dir

Также есть вариант через промежуточный wheel
pip wheel --wheel-dir=/tmp/wheelhouse cssselect==0.9.1
pip install /tmp/wheelhouse/cssselect-0.9.1-py2-none-any.whl

И попадались упоминания переменной PIP_DOWNLOAD_CACHE

npm

npm config set cache ~/.cache/npm
mkdir -p ~/.cache/npm
mv ~/.npm/* ~/.cache/npm/
rm -rf ~/.npm/


bower
cat >> ~/.bowerrc << EOF
{
  "cache": "$HOME/.cache/bower/"
}
EOF
mkdir -p ~/.cache/bower

links
https://pip.pypa.io/en/latest/reference/pip_install/#caching
https://blog.samat.org/2014/12/01/setting-up-package-caching-for-pip-and-npm/

среда, 14 декабря 2016 г.

CentOS 7.2: Установка и настройка

Была найдена на просторах инета весьма занятная статья с кучей полезностей
Первая часть весьма типовая, интерес представляет вторая половина статьи.

centos 7: подключаем автодополнение (autocompletion)

Порой так удобно - нажать таб и посмотреть параметры программы, но в minimal установке centos это не работает и показывает листинг файлов. А исправить это легко:
yum -y install bash-completion

И начинают работать штуки вида
systemctl status ht<tab>
firewall-cmd --get-act<tab>
итд.

Если что - файлы с этими параметрами лежат тут
/usr/share/bash-completion/completions/

Можно и без пакета некоторые файлы подключить напрямую так
source /usr/share/bash-completion/completions/systemctl

Только многое не заработает, ругаясь так:
bash: _init_completion: command not found
(Эта функция - часть пакета bash-completion)

Ну и мелкая полезность: как посмотреть, какой пакет поставил туда свои файлы
rpm -qf /usr/share/bash-completion/completions/*

пятница, 2 декабря 2016 г.

ubuntu/mint: IOError: [Errno 2] No such file or directory: '/usr/share/libvirt/cpu_map.xml'

IOError: [Errno 2] No such file or directory: '/usr/share/libvirt/cpu_map.xml'
при попытке подключиться virt-manager к другому хосту.
$ dpkg --search /usr/share/libvirt/cpu_map.xml
libvirt-bin: /usr/share/libvirt/cpu_map.xml

Ставить libvirt-bin

вторник, 29 ноября 2016 г.

CentOS 7: включаем core dump

Обычно достаточно модифицировать service файл, добавив
[Service]
LimitCORE=infinity

или глобально, в /etc/systemd/system.conf
DefaultLimitCORE=infinity

Иногда требуется выставить
kernel.core_uses_pid = 1
fs.suid_dumpable = 2

Обычно этого достаточно.

пятница, 25 ноября 2016 г.

CentOS 7 и сокет-файлы

Суть в том, что раньше многие писали сокет файлы в /tmp, а сейчас например при запуске сервиса uwsgi + nginx с сокетом в /tmp при попытке обратиться можно поймать
(2: No such file or directory) while connecting to upstream
и долго ломать голову, что же не так.

Это systemd security feature, корни примерно тут
[Service]
PrivateTmp=true
И если подумать, это правильно. Учимся использовать /run (в центос 7 оно же /var/run в виде симлинка на ../run)

Не путаем с permission denied, что обычно из-за прав на сокет файл или каталог где он лежит. ИЛИ - из-за selinux, проверить getenforce, который входит в пакет libselinux-utils. Если Enforced - переводим в permissive и проверяем снова
setenforce permissive

Не забываем потом перенастроить selinux или отключить его.
http://stackoverflow.com/questions/26334526/nginx-cant-access-a-uwsgi-unix-socket-on-centos-7

вторник, 15 ноября 2016 г.

rpmbuild: отключаем проверку зависимостей

Иногда собираем проект, где внутри свои либы... А при установке эти либы хочет увидеть на стандартных местах.
Отключить можно так:
1) AutoReqProv: no в спек или в ~/.rpmmacros
2) %define %__find_requires         %{nil}
или %define __find_requires         /bin/true


По аналогии можно отключить авто provides:
%__find_provides   /bin/true
или Autoprov: 0

линки:
http://rpm5.org/docs/max-rpm.html#s2-rpm-depend-autoreqprov
http://rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html

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

zabbix и Linux template: нормальный учёт памяти

Штатно  в linux шаблоне есть триггер Lack of available memory on server {HOST.NAME} на параметр {Template OS Linux:vm.memory.size[available].last(0)}. Проблема в том, что в таком виде триггер бесполезен чуть менее чем совсем, и особенно с учётом штатного десятка мегабайт. Тем более, у разных серверов будет разное количество памяти и разные границы. Да, можно зайти в настройки хоста и поправить триггер, но это совсем через одно место.
К счастью, есть параметр, показывающий свободную память... в процентах. Куда логичнее абсолютного значения, не правда ли? И отличие всего в 1 букву: оно pavailable
Так что идём в Items, клонируем старый айтем, правим ему ключик и имя, повторяем в Triggers. Можно повторить для другого уровня с другой важностью, например 10 и 20 - average и warning.
Ну и почитать про этот параметр
https://www.zabbix.com/documentation/2.4/ru/manual/appendix/items/vm.memory.size_params