пятница, 26 апреля 2019 г.

Linux buster Zabbix Apache choose PHP version

После upgrade to buster вылезла проблема с zabbix. Он был установлен из официального репозитория. Но с ним возникла проблема с зависимостями
libcurl3 (>= 7.28.0)` but `libcurl4` in buster and `libevent-2.0-5` but `libevent-2.1-6
Но в репозиториях buster есть zabbix 4.0.4, поэтому переустановил оттуда.
Фронтенд (на apache2) пришлось также переустанавливать через remove и install. Но версия php обновилась тоже и было теперь две версии php 7.0 и 7.3, причем php-mysql . Нужно было поменять ее для apache. Это делается через
a2dismod php7.0
a2enmod php7.3
systemctl restart apache2

четверг, 25 апреля 2019 г.

Linux upgrade nginx on fly

Nginx скомпилирован

#!/bin/bash
set -x
VER=1.16.0
rm -rf nginx-$VER
tar zxvf nginx-$VER.tar.gz
cd nginx-$VER

echo OK
./configure \
--with-ld-opt="-ljemalloc" \
--with-cc-opt="-march=native -mtune=native" \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-http_stub_status_module \
--without-http_geo_module \
--without-http_memcached_module \
--without-http_scgi_module \
--with-http_geoip_module \
--without-http_autoindex_module \
--without-http_ssi_module \
--without-http_browser_module \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_addition_module \
--with-http_auth_request_module \
--with-threads \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-http_realip_module

make -j23

Остался make install
Сначала проверяем на совместимость
cd nginx-1.16.0
objs/nginx -t
Если ОК, то
cd nginx-1.16.0
make install

Следующие действия, чтобы обновить версию на лету и не делать рестарт
ps aux | grep nginx | grep master 
(read pid)
kill -USR2 $pid
kill -WINCH $pid
kill -QUIT $pid


суббота, 20 апреля 2019 г.

Linux compile cargo project with old OpenSSL and patch AES-NI

Нужно скомпилировать cargo проект в котором используется старая версия OpenSSL.
Что было обычно достаточно, до этого обновления.
apt install openssl pkg-config rustc cargo clang libudev-dev libusb-1.0-0-dev
Но после обновления появилась ошибка компиляции
error: failed to run custom build command for openssl v0.9.24
Читаем описание cargo package где рекомендуют версию openssl-1.1.0f
Из портов предыдущих версий ОС уже не ставится, пишет 404.
Компилим вручную
curl -O https://www.openssl.org/source/openssl-1.1.0f.
tar.gz tar xf openssl-1.1.0f.tar.gz
./config
make
make install
Проверяем openssl version
cargo build --release
Компилим проект. После нужно пропатчить
Нахожу в папке /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rust-crypto-0.2.36/src
файл aesni_helpers.c и меняю команды по инструкции. После перекомпилирую.
Когда закончил, обязательно деинсталлирую старый OpenSSL
make uninstall
В папке, в которой инсталлировал OpenSSL. И возвращаю родной пакет
apt install openssl

среда, 10 апреля 2019 г.

Linux zombie processes

ps -axl|grep "Z"
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0   500  4746  4418  20   0      0     0 exit   Z    ?          0:00 [vmware-vmrc] <defunct>
0   500  5308  4418  20   0      0     0 exit   Z    ?          0:00 [vmware-vmrc] <defunct>
0   500 14968 12807  20   0   4076   756 -      R+   pts/31     0:00 grep Z

Команда ps -axl | grep "Z" убивать родителя PPID

на SO нашел kill сначала 15, ждать, не помогло 2, потом 1

Вариант просмотра с деревом
ps axjf

Linux Go компиляция для Mac OS

Сначала скачал с зависимостями

go get -v github.com/project/...

Далее буду использовать make

cd $GOPATH/src/github.com/project
make install

или make install cmd/project
если нужен конкретный бинарник

Возникли ошибки при компиляции. Также в тексте ошибке видно clang. По умолчанию, mac использует clang, но нужный мне проект компилировали с помощью gcc. Поэтому, устанавливаю gcc

brew install gcc

И запускаю:

CC=gcc-8 CXX=g++-8 make install

Количество ошибок уменьшилось. Чтобы справится с остальными, разработчики попросили файлы _x002.o _x012.o , которые создавались в процессе компиляции:

duplicate symbol _extra_hashes in:
$WORK/b142/_x002.o
$WORK/b142/_x012.o
ld: 2 duplicate symbols for architecture x86_64

Сначала я нашел в Makefile строку запуска go buld

CGO_CFLAGS_ALLOW='-maes.*' go build -ldflags "-X main.Version=project-version" -o bin/project-bin -tags="netgo" ./cmd/project

и добавил параметр -x , который показал информацию о создаваемых файлах в процессе компиляции с полным путем.

CC=gcc-8 CXX=g++-8 CGO_CFLAGS_ALLOW='-maes.*' go build -x -ldflags "-X main.Version=project-version" -o bin/project-bin -tags="netgo" ./cmd/project

суббота, 6 апреля 2019 г.

Linux LXC systemd error 226/NAMESPACE

После апгрейда LXC контейнера Debian c 9 на 10, ошибка

mariadb.service: Main process exited, code=exited, status=226/NAMESPACE

помогло
mariadb.service
#ProtectSystem=full
#PrivateDevices=true
#ProtectHome=true
#PrivateTmp=false

redis.service
#PrivateTmp=yes
#PrivateDevices=yes
#ProtectHome=yes
#ReadOnlyDirectories=/
#ProtectKernelModules=true
#ProtectKernelTunables=true
#ProtectControlGroups=true
#RestrictRealtime=true
#RestrictNamespaces=true
#RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
#ProtectSystem=true

Может можно раскомментировать что-нибудь из списка redis, но я не перебирал все возможные варианты (возможно Restrict, так как sentinel работает с ними).

понедельник, 1 апреля 2019 г.

Certbot ошибки когда много аккаунтов

Продлить нужно сертификат для почтового сервера

Сначала проверяем nginx конфиг для почтового домена

server
{
        listen 1.2.3.4:80;
        server_name mail.domain.tld;

        # letsencrypt
        location ~ ^/\.well-known {
            auth_basic off;
            allow all;
            root /home/www/acme;
        }

        location ~ ^/\.well-known/acme-challenge
        {
            auth_basic off;
            allow all;
            root /home/www/acme;
        }
}

По факту в letsencrypt один аккаунт в папке v01 и два аккаунта в v02 (причина ошибок)

acme-v01.api.letsencrypt.org
acme-v02.api.letsencrypt.org

certbot certificates
Проверить статус сертификатов. Вижу, что сертификат почтовика просрочен.

certbot версии 0.23.0, запускаем с проверкой

/usr/bin/certbot certonly --webroot -w /home/www/acme -d mail.domain.tld --email testcert@domain.tld --non-interactive --agree-tos --dry-run