Tips and Tricks
краткие заметки по системному администрированию
#!/bin/bash
# Author: danitfk (Daniel Gordi)
# Date: 15/Dec/2018
# A function to declare variables CDIR -> NETMASK
# Get IP Input
while IFS= read -r line; do
export IP_CIDR="$line"
function set_variables {
export cidr_32=255.255.255.255
export cidr_31=255.255.255.254
export cidr_30=255.255.255.252
export cidr_29=255.255.255.248
export cidr_28=255.255.255.240
export cidr_27=255.255.255.224
export cidr_26=255.255.255.192
export cidr_25=255.255.255.128
export cidr_24=255.255.255.0
export cidr_23=255.255.254.0
export cidr_22=255.255.252.0
export cidr_21=255.255.248.0
export cidr_20=255.255.240.0
export cidr_19=255.255.224.0
export cidr_18=255.255.192.0
export cidr_17=255.255.128.0
export cidr_16=255.255.0.0
export cidr_15=255.254.0.0
export cidr_14=255.252.0.0
export cidr_13=255.248.0.0
export cidr_12=255.240.0.0
export cidr_11=255.224.0.0
export cidr_10=255.192.0.0
export cidr_9=255.128.0.0
export cidr_8=255.0.0.0
export cidr_7=254.0.0.0
export cidr_6=252.0.0.0
export cidr_5=248.0.0.0
export cidr_4=240.0.0.0
export cidr_3=224.0.0.0
export cidr_2=192.0.0.0
export cidr_1=128.0.0.0
}
# A function to detect CIDR like /32
function detect_cidr {
export IP=`echo $IP_CIDR | cut -d"/" -f1`
export CIDR=`echo $IP_CIDR | cut -d"/" -f2`
export CIDR_TEST=`echo $CIDR | grep "\."`
if [[ "$CIDR_TEST" != "" ]]
then
echo "CDIR is not valid"
exit 1
fi
if [[ "$CIDR" -gt "32" ]] || [[ "$CIDR" -lt "1" ]] || [[ "$CIDR" == "" ]]
then
echo "CIDR is not valid"
exit 1
fi
}
# Function to convert CIDR like /32 to 255.255.255.255
function print_subnet {
echo "echo $IP \$cidr"_$CIDR | bash | awk '{print "push \"route "$1" "$2"\""}'
}
set_variables
detect_cidr
print_subnet
done < "$1"
Настраиваем NAT iptables
iptables -t nat -I POSTROUTING 1 -s 10.254.254.0/24 -o ens3 -j MASQUERADE
(только из 10.254.254.0/24)
iptables -t nat -I POSTROUTING 1 -o ens3 -j MASQUERADE
из любых сетей в мир через ens3
Установка KIOSK для отображения web страницы
Делаем простой киоск отображающий веб-страницу
* необходимо, чтобы видеокарта поддерживала 3d, иначе будет тупо серый (в mir-kiosk оранжевый и потом черный) экран (в virtualbox включить /в qemu на vds не работает)
Ставим Ubuntu Server 22.04, убеждаемся в работе ssh-сервера, далее всё ставим через него, используется в качестве основы ubuntu-frame (также есть устаревший mir-kiosk, но на его замену пришел ubuntu-frame)
Далее заходим по ssh и выполняем установку ubuntu-frame
snap install ubuntu-frame
snap set ubuntu-frame daemon=true
#snap start ubuntu-frame (данный снап сам запускается после хука для daemon=true)
экран светится серым - всё хорошо, вейланд запустился
Ставим webkit приложение которое будет работать в ubuntu-frame
snap install wpe-webkit-mir-kiosk
snap connect wpe-webkit-mir-kiosk:wayland
snap set wpe-webkit-mir-kiosk daemon=true
snap set wpe-webkit-mir-kiosk url=https://mir-server.io
snap start wpe-webkit-mir-kiosk
Смотреть логи
snap logs wpe-webkit-mir-kiosk
Настроить разрешение экрана (если необходимо)
cp /var/snap/ubuntu-frame/current/frame.display /root/
vi /root/frame.display
mode:1920x1080@60.0
snap set ubuntu-frame display="$( cat /root/frame.display )"
Настраиваем vnc-сервер (внимание, он без пароля, слушает localhost)
snap install ubuntu-frame-vnc
/snap/ubuntu-frame-vnc/current/bin/setup.sh
snap set ubuntu-frame-vnc daemon=true
Делаем доступным vnc из вне (без пароля!)
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 5900 -j DNAT --to 127.0.0.1:5900
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4
Полезные ссылки
https://www.opennet.ru/opennews/art.shtml?num=55933
https://mir-server.io/docs/make-a-secure-ubuntu-web-kiosk
https://mir-server.io/docs/how-to-use-remote-assistance-with-ubuntu-frame
https://superuser.com/questions/661772/iptables-redirect-to-localhost
https://linuxconfig.org/how-to-make-iptables-rules-persistent-after-reboot-on-linux
KDE в Ubuntu 20.04 через x2goserver проблемы и их решения
Проблема: Не запускается сессия, не выполняется startkde, ошибка error: unable to execute: startkde в клиенте x2goclient на клиентском компьютере
Решение: Создать симлинк
# ln -s /usr/bin/startplasma-x11 /usr/bin/startkde
Источник: https://bytexd.com/x2go-ubuntu/
Проблема: Постоянно Network Manager запрашивает пароль для повышения прав, сообщение вида Authentication Required PolicyKit1 KDE Agent
Решение: Настроить правила в polkit (хотя по идее NM вообще удалить можно, сеть статически на серверах в interfaces настраивается, но вроде ничего не ломает NM)
# vi /etc/polkit-1/localauthority/50-local.d/50-allow-network-manager.pkla
[Network Manager all Users]
Identity=unix-user:*
Action=org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.network-control
ResultAny=no
ResultInactive=no
ResultActive=yes
Проблема: Запускается графическая оболочка на физической консоли сервера, стало после apt install kubuntu-desktop, она там не нужна, расходует ресурсы
Решение: Поменять target запуска системы в systemd
# systemctl set-default multi-user.target
обратно
# systemctl set-default graphical.target
посмотреть какой сейчас
# systemctl get-default
Проблема: x2goclient на клиентском компьютере запускает ssh-сервер, понижается безопасность.
Решение: Таков механимзм работы проброса протокола x11. Отредактируйте /etc/ssh/sshd_config и пропишите ListenAddress 127.0.0.1
Настраиваем VPN L2TP IPsec сервер для подключения с мобильных устройств (на Debian 10)
ntp сервера stratum 1 для рф сервера и европейского
Патченный java webstart чтобы не добавлять руками "небезопасные" сайты
Патченный java webstart чтобы не добавлять руками якобы "небезопасные" сайты
$ cat /usr/bin/javaws
#!/bin/sh
cat "$1"|head -n3|grep -oE "htt.*([0-9]{1,3}[\.]){3}[0-9]{1,3}...." >> $HOME/.java/deployment/security/exception.sites
prog="$0"
while [ -h "$prog" ]; do prog=$(readlink -f $prog); done
[ $# -eq 0 ] && set -- -viewer
exec $(dirname $prog)/javaws.real "$@"
Тестируем скорость диска при помощи fio
Тест случайных операций на чтение/запись
При запуске такого теста, будет создан файл размером 4Gb. Затем утилита fio выполнит чтение/запись блока 4Kb (размер блока по-умолчанию) с разделением на 75/25% по количеству операций чтения и записи и замерит производительность, ключ iodepth при этом позволяет процессу получить приоритет над другими создав глубину очереди, после теста удаляем тестовый файл с диска
# fio --ioengine=libaio --direct=1 --name=fiotest --filename=testfio --iodepth=32 --size=4G --rwmixread=75 --readwrite=randrw ; rm -f testfio
# fio --ioengine=libaio --direct=1 --name=fiotest --filename=testfio --iodepth=32 --size=4G --rwmixread=75 --readwrite=rw ; rm -f testfio
Удаляем старые версии snap пакетов
Как известно, в новых Ubuntu некоторый софт ставится из snap
Данное ПО автоматически обновляется и старые версии занимают место
# df -h
/dev/loop0 56M 56M 0 100% /snap/core18/2066
/dev/loop2 9.2M 9.2M 0 100% /snap/canonical-livepatch/98
/dev/loop1 100M 100M 0 100% /snap/core/10958
/dev/loop3 9.2M 9.2M 0 100% /snap/canonical-livepatch/99
/dev/loop4 99M 99M 0 100% /snap/core/11081
/dev/loop5 56M 56M 0 100% /snap/core18/1997
Как их удалить?
Получаем список с ключем --all
# snap list --all
Name Version Rev Tracking Publisher Notes
canonical-livepatch 9.6.1 98 latest/stable canonical✓ disabled
canonical-livepatch 9.6.2 99 latest/stable canonical✓ -
core 16-2.49.2 10958 latest/stable canonical✓ core,disabled
core 16-2.50 11081 latest/stable canonical✓ core
core18 20210309 1997 latest/stable canonical✓ base,disabled
core18 20210507 2066 latest/stable canonical✓ base
И удаляем snap пакеты которые помечены как disabled указывая ключ --revision=
# snap remove canonical-livepatch --revision=98
canonical-livepatch (revision 98) removed
# snap remove core --revision=10958
core (revision 10958) removed
# snap remove core18 --revision=1997
core18 (revision 1997) removed
Также настраивается политика хранения версий
# snap set system refresh.retain=1
# snap get system refresh.retain
1
Необходимо на системах с малым количеством места в /snap
https://forum.snapcraft.io/t/managing-updates/7022
The refresh.retain value can be a number between 2 and 20. The default is refresh.retain=3 on Ubuntu Core systems and refresh.retain=2 on classic Ubuntu systems, such as those running Ubuntu 18.04 LTS (Bionic Beaver) and Ubuntu 16.04 LTS (Xenial Xerus).
Отключить обновления
# snap set system refresh.metered=hold
Включить обновления
# snap set system refresh.metered=null
ffmpeg static build with libfdk-aac (Fraunhofer FDK AAC) codec
Проект ffmpeg https://ffmpeg.org/download.html распространяет продукт в бинарном статическом виде на https://www.johnvansickle.com/ffmpeg в виде файла ffmpeg-release-amd64-static.tar.xz
Он не содержит части кодеков которые могут быть нужны, например, libfdk-aac (Fraunhofer FDK AAC) который используется для кодирования звука мобильными устройствами.
Данное программное обеспечение собрано с опциями:
ffmpeg version 4.3.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Что не включает в себя нужный кодек libfdk-aac и некоторые другие
Также они не раздают build-файлы/скрипты для повторяемой сборки и изменить что-либо или добавить аудио-видео кодек не предоставляется возможным.
Однако, существуют проекты скриптов для компиляции статического файла ffmpeg с дополнительными кодеками благодаря которым можно получить полностью статический бинарный файл ffmpeg без зависимостей
В статье ниже ссылки на уже скомпилированные ffmpeg / ffprobe, рекомендую также смотреть https://dl.ispsystem.info/ffmpeg-static/ так как там могут появляться новые/более актуальные
Установка сборки zimbatm (рекомендуется как стабильное ПО):
wget https://dl.ispsystem.info/ffmpeg-static/zimbatm/bin/ffmpeg
wget https://dl.ispsystem.info/ffmpeg-static/zimbatm/bin/ffprobe
chmod +x ffmpeg ffprobe
2. markus-perl последняя версия с актуальными аудио- и видеокодеками https://github.com/markus-perl/ffmpeg-build-script (лучше ставить её)
Опции сборки markus-perl (разработчик рекомендует для сборки Debian 10), пожалуй это самый живой проект и разработчик отвечает на issue (в течение дня по моей просьбе сделал опцию -f для full static build):
Установка сборки markus-perl (рекомендуется как самое свежее ПО):
wget https://dl.ispsystem.info/ffmpeg-static/markus-perl/bin/ffmpeg
wget https://dl.ispsystem.info/ffmpeg-static/markus-perl/bin/ffprobe
chmod +x ffmpeg ffprobe
3. ffmpeg static для CentOS 7
Собран по мануалу https://trac.ffmpeg.org/wiki/CompilationGuide/Centos в чистом окружении (использовался docker)
PATH=$PATH:/root/bin
Единственное, что изменено - взят x265_3.2.1.tar.gz, для решения проблемы отсутствия файла x265.pc https://stackoverflow.com/questions/51918409/compiling-ffmpeg-x265-not-found-using-pkg-config (wget http://ftp.videolan.org/pub/videolan/x265/x265_3.2.1.tar.gz && tar xf x265_3.2.1.tar.gz && cd x265_3.2.1/build/linux)
Установка сборки ffmpeg для CentOS 7