Часто встает вопрос, в каком режиме использовать PHP FPM? Вот есть отличная статья, дающая ответ.
Saturday, 22 June 2019
Установка Salt на Ubuntu 18.04
Довольно долгое время раньше я использовал Puppet, но он был крайне проблемен с точки зрения производительности, а также с точки зрения сложности конфигурации. В этом плане Salt намного лучше и понятнее, что я и постараюсь показать.
Как обычно, официальные инструкции можно найти тут и тут
Для работы нам потребуется по меньшей мере две машины - master (сервер) и minion (клиент).
Как для мастера, так и для клиента требуется добавить официальный репозиторий:
Итак, установим мастер:wget -O - https://repo.saltstack.com/apt/ubuntu/18.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -echo "deb [arch=amd64] http://repo.saltstack.com/apt/ubuntu/18.04/amd64/latest bionic main" | sudo tee /etc/apt/sources.list.d/saltstack.listsudo apt-get update
sudo apt-get install salt-masterТак как мастер будет слушать на двух портах, я настоятельно рекомендую сразу же закрыть его фаерволлом от всех машин кроме клиента.
Для этого можно использовать пакет iptables-persistent, ставим его:
sudo apt-get install -y iptables-persistentОткрываем файл конфигурации
sudo vim /etc/iptables/rules.v4Создаем конфигурацию (xx замените на адрес клиента, если их неколько, добавьте несколько записей):
# Generated by iptables-save v1.6.1 on Sat Jun 22 13:34:44 2019После этого применяем изменения и убеждаемся: что правила добавлены в фаерволл iptables:
*filter
:INPUT ACCEPT [278:38814]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [231:33098]
# Allow access from clients
-A INPUT -s xx/32 -p tcp -m tcp --dport 4505 -j ACCEPT
-A INPUT -s xx/32 -p tcp -m tcp --dport 4506 -j ACCEPT
# And from localhost
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 4505 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 4506 -j ACCEPT
# Block all traffic to external hosts to Salt Master
-A INPUT -p tcp -m tcp --dport 4505 -j DROP
-A INPUT -p udp -m udp --dport 4505 -j DROP
-A INPUT -p tcp -m tcp --dport 4506 -j DROP
-A INPUT -p udp -m udp --dport 4506 -j DROP
COMMIT
# Completed on Sat Jun 22 13:34:44 2019
sudo systemctl restart netfilter-persistentТеперь установим клиента:
sudo apt-get install salt-minionПосле этого, нам нужно указать адрес мастер сервера в его конфигурации:
sudo vim /etc/salt/minionИ задаем адрес мастера в следующем параметре:
master: xx.aa.zz.bbКроме этого, нам потребуется ключ мастер, который нужно получить на мастер сервере следующим образом:
salt-key -F masterAnd copy string from "master.pub" from Local Key section and insert into /etc/salt/minion in following place:
master_finger: "xx.aa.xx.ggg"Этот ключ позволит клиенту убедиться, что мастер именно тот, который нам требуется.
После этого применяем конфигурацию:
sudo systemctl restart salt-minion.service
После этого клиент (minion) запросит авторизацию у мастер сервера, илем на мастер сервер и запрашиваем список активных запрсов на авторизацию:
sudo salt-key -LВ ответ вы увидите что-то вида:
Accepted Keys:Одобряем запрос авторизации:
Denied Keys:
Unaccepted Keys:
client_hostname
Rejected Keys:
sudo salt-key --accept=client_hostnameВсе, после этого с мастер сервера вы можете посылать любые командый конфигурации:
salt '*' test.versionНо это лишь половина дела, наша задача заключается в автоматическом конфигурировании сервисов на клиенте и это также очень просто!
Создаем основную конфигурацию:
sudo vim /srv/salt/top.slsГде указываем следующее:
base:Этот файл представляет собой точку входу для конфигурации Salt и здесь можно управлять тем, какие конфигурации должны быть применены на какого клиента.
'client_hostname':
- php_fpm_setup
Итак, создадим саму конфигурацию:
sudo vim /srv/salt/php_fpm_setup.slsВот такого вида:
nginx_pkg:Данный state файл установит на сервер пакеты nginx и php-fpm и настроит их автозапуск.
pkg.installed:
- name: nginx
nginx_service:
service.running:
- name: nginx
- enable: True
- require:
- pkg: nginx_pkg
fpm_pkg:
pkg.installed:
- name: php7.2-fpm
fpm_service:
service.running:
- name: php7.2-fpm
- enable: True
- require:
- pkg: fpm_pkg
После этого, данный state можно применить как со стороны клиента:
salt-call state.apply
Так и удаленно, со стороны сервера:
salt '*' state.applyВыдача в обоих случаях будет аналогичная:
---------
ID: nginx_pkg
Function: pkg.installed
Name: nginx
Result: True
Comment: All specified packages are already installed
Started: 15:44:59.405480
Duration: 57.533 ms
Changes:
----------
ID: nginx_service
Function: service.running
Name: nginx
Result: True
Comment: The service nginx is already running
Started: 15:44:59.463924
Duration: 54.275 ms
Changes:
----------
ID: fpm_pkg
Function: pkg.installed
Name: php7.2-fpm
Result: True
Comment: All specified packages are already installed
Started: 15:44:59.518411
Duration: 18.16 ms
Changes:
Все! Таким образом, у вас все конфигурации всех серверов будут находится в одном месте, сразу же рекомендую сделать /srv/salt git репозиторием.
Saturday, 18 May 2019
Ubuntu 14.0 and Stopping system V runlevel compatibility
Recently I hit this issue after removing all X-related packages from server.
Root cause was some missing packages from lightdm.
NB! Please use this suggestions ONLY if you need only console interface on your server.
You can fix it by removing all configuration files which belong to lightdm:
Root cause was some missing packages from lightdm.
NB! Please use this suggestions ONLY if you need only console interface on your server.
You can fix it by removing all configuration files which belong to lightdm:
sudo apt-get purge lightdm
Sunday, 16 December 2018
parted: Warning: The resulting partition is not properly aligned for best performance.
Эта ошибка, уверен, достает каждого! Даже в самом простом случае, когда нужен 1 раздел на весь диск - почти невозможно подобрать значения под конкретный диск, которые бы устроили parted.
Идеальный вариант такой.
Сначала создаем таблицу gpt на диске (все данные будут уничтожены):
После этого создаем один раздел на весь диск:
За идею спасибо: https://blog.hqcodeshop.fi/archives/273-GNU-Parted-Solving-the-dreaded-The-resulting-partition-is-not-properly-aligned-for-best-performance.html
Идеальный вариант такой.
Сначала создаем таблицу gpt на диске (все данные будут уничтожены):
parted /dev/sda
mklabel gpt
После этого создаем один раздел на весь диск:
parted /dev/sdaПроверяем, что parted правда удовлетворен выравниванием вновь созданного раздела:
unit s
mkpart main ext4 0% 100%
parted /dev/sda align-check optimal 1Ответ должен быть "aligned".
За идею спасибо: https://blog.hqcodeshop.fi/archives/273-GNU-Parted-Solving-the-dreaded-The-resulting-partition-is-not-properly-aligned-for-best-performance.html
Saturday, 3 November 2018
Installing 4.19 on Ubuntu 14.04
I'm playing with AF_XDP and this feature requires very fresh kernel. I decided to use 4.19 kernel from Ubuntu Kernel PPA.
But unfortunately, these packaged depend of very fresh version of linux-base package and it availabe only in Ubuntu 16.04 or 18.04. And I will help with this :)
First of all, install linux-base:
Download original packages:
But unfortunately, these packaged depend of very fresh version of linux-base package and it availabe only in Ubuntu 16.04 or 18.04. And I will help with this :)
First of all, install linux-base:
sudo apt-get install -y linux-baseAnd then we will repack deb package to remove dependency on very fresh linux-base. I used guide from ServerFault.
Download original packages:
cd
mkdir -p deb_4_19_kernel_hacked_package
cd deb_4_19_kernel_hacked_package
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
Unpack deb:
ar x linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
tar -xf control.tar.xz
rm control.tar.xz
Remove nasty dependency:
sed -i 's/linux-base (>= 4.5ubuntu1~16.04.1)/linux-base/' control
Pack control file again:
tar --ignore-failed-read -cvJf control.tar.xz {post,pre}{inst,rm} md5sums control
Build deb package again:
ar rcs linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64_fixed_dependencies.deb debian-binary control.tar.xz data.tar.xz
And install it:
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
sudo dpkg -i linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
sudo dpkg -i linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64_fixed_dependencies.deb
Finally, rebuild grub configuration:
sudo update-grub
And confirm that Grub added new kernel to configuration:
cat /boot/grub/grub.cfgAfter that, prepare keyboard, monitor, IPKVM and start reboot process :) If you're lucky guy then you can get following:
uname -a
Linux flab1 4.19.0-041900-generic #201810221809 SMP Mon Oct 22 22:11:45 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Sunday, 13 May 2018
TCP/IP fragmentation
Отличная схема, отображающая суть процесса фрагментации IP пакета.
Взято с: http://www.tcpipguide.com/free/t_IPMessageFragmentationProcess-2.htm
Взято с: http://www.tcpipguide.com/free/t_IPMessageFragmentationProcess-2.htm
Sunday, 8 April 2018
Обновление Ubuntu 16.04 на Ubuntu 18.04 LTS (beta)
Сразу оговорюсь, что крайне не рекомендую этого делать для продакшена. Только сугубо для целей тестирования.
Если будет выдано, что не обнаружено релиз версий (скорее всего так и будет на момент публикации пока LTS еще не вышел), то нужно добавить флаг -d:
Например, будьте аккуратны с ssh, если работает от root, так как при обновлений на новый конфиг будет удалена опция PermitRootLogin yes и её нужно вернуть вручную в файле /etc/ssh/sshd_config
Для начала, нужно обновиться до упора в рамках текущей версии Ubuntu 16.04:
sudo apt update; sudo apt dist-upgrade; sudo apt autoremove
Устанавлим менеджер обновлений:
sudo apt-get install update-manager-core
Убеждаемся, что у нас стоят настройки для только LTS дистрибутивов:
sudo cat /etc/update-manager/release-upgrades
Выдача должна быть следующая:
Prompt=ltsЗапускаем процесс:
sudo do-release-upgrade
Если будет выдано, что не обнаружено релиз версий (скорее всего так и будет на момент публикации пока LTS еще не вышел), то нужно добавить флаг -d:
sudo do-release-upgrade -dВ процессе обновления будет задано множество вопросов, самые сложные, когда меняется конфигурация какого-либо демона.
Например, будьте аккуратны с ssh, если работает от root, так как при обновлений на новый конфиг будет удалена опция PermitRootLogin yes и её нужно вернуть вручную в файле /etc/ssh/sshd_config
Saturday, 24 February 2018
Трагедия общин
Очень долгое время пытался объснять такое своими словами, а не так давно узнал, что есть сложившаяся терминология :)
Sunday, 28 January 2018
Как применить grep на выдачу tpcdump?
Есть магическая опция, которая меняет поведенеи буферизации grep начинает работать по мере того, как tcpdump выводит данные:
sudo tcpdump -i eth0 port 80 -n |grep some_value_filtering --line-buffered
Sunday, 31 December 2017
С Новым 2018м Годом! :)
Поздравляю с Новым Годом! :) Пусть новый год будет полон свершений, которые будет не стыдно добавить в резюме! :)
С Праздником! :)
С Праздником! :)
Tuesday, 21 November 2017
Сборка актуальной версии trafgen из пакета netsniff-ng на Ubuntu 14.04
cd /usr/src
git clone git://github.com/netsniff-ng/netsniff-ng.git
cd netsniff-ng
apt-get install -y libcli-dev libnet1-dev libnacl-dev libpcap-dev liburcu-dev ccache libgeoip-dev libnetfilter-conntrack-dev libncurses5-dev libnl-3-dev flex bison libnl-genl-3-dev libnl-3-dev libnl1 zlib1g-dev libnl-route-3-dev
./configure --prefix=/opt/netsniff-ng
make
make install
Потом берем шаблон флуда: https://raw.githubusercontent.com/netoptimizer/network-testing/master/trafgen/udp_example01.trafgen
Кроме этого обязательно нужно обновить ядро до версии 4.4 и выше из пакета hardware support! Ибо используются модные AF_PACKET и чем новее ядро - тем будет быстрее.
Потом открываем файл udp_example01.trafgen и корректируем там MAC адрес целевой машины. А также программируем порты и прочее.
После этого запускаем:
Итого, на Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz удалось выжать 3.5 MPPS ценой полной загрузки всех ядер машины:
git clone git://github.com/netsniff-ng/netsniff-ng.git
cd netsniff-ng
apt-get install -y libcli-dev libnet1-dev libnacl-dev libpcap-dev liburcu-dev ccache libgeoip-dev libnetfilter-conntrack-dev libncurses5-dev libnl-3-dev flex bison libnl-genl-3-dev libnl-3-dev libnl1 zlib1g-dev libnl-route-3-dev
./configure --prefix=/opt/netsniff-ng
make
make install
Потом берем шаблон флуда: https://raw.githubusercontent.com/netoptimizer/network-testing/master/trafgen/udp_example01.trafgen
Кроме этого обязательно нужно обновить ядро до версии 4.4 и выше из пакета hardware support! Ибо используются модные AF_PACKET и чем новее ядро - тем будет быстрее.
Потом открываем файл udp_example01.trafgen и корректируем там MAC адрес целевой машины. А также программируем порты и прочее.
После этого запускаем:
/opt/netsniff-ng/sbin/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size 500KiB --cpu 8В случае ошибки "Cannot allocate TX_RING" рекомендую убрать --ring-size вовсе.
Итого, на Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz удалось выжать 3.5 MPPS ценой полной загрузки всех ядер машины:
1 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] 5 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
2 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] 6 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
3 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] 7 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
4 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] 8 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
Mem[||| 190/48400MB] Tasks: 32, 65 thr; 9 running
Swp[| 3/8190MB] Load average: 0.64 1.37 4.28
Uptime: 01:23:24
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
3728 root 20 0 13616 1760 1364 R 100. 0.0 0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3732 root 20 0 13616 1780 1384 R 100. 0.0 0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3721 root 20 0 13620 1780 1384 R 100. 0.0 0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3722 root 20 0 13616 1764 1368 R 99.0 0.0 0:09.20 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3724 root 20 0 13616 1780 1384 R 99.0 0.0 0:09.21 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3723 root 20 0 13616 1768 1372 R 99.0 0.0 0:09.21 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3725 root 20 0 13616 1780 1384 R 99.0 0.0 0:09.20 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
3730 root 20 0 13616 1768 1372 R 98.0 0.0 0:09.12 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
Thursday, 9 November 2017
Отличные инженерные вакансии компании Cloudflare Inc
Всем привет! :)
Знаю, что меня читает много отличных инженеров! Поэтому предлагаю рассмотреть замечательную компанию, в которой очень много прекрасных инженерных позиций - Cloudflare. Полный список вакансий тут: https://www.cloudflare.com/careers/departments/
Если Вам нравится Linux, C, Go или Вам более близок фроентед - милости просим :)
Знаю, что меня читает много отличных инженеров! Поэтому предлагаю рассмотреть замечательную компанию, в которой очень много прекрасных инженерных позиций - Cloudflare. Полный список вакансий тут: https://www.cloudflare.com/careers/departments/
Если Вам нравится Linux, C, Go или Вам более близок фроентед - милости просим :)
Monday, 6 November 2017
Как сделать из Mac OS NAT сервер чтобы дать доступ в интернет через машину на Mac?
Я все буду делать в macOS High Sierra.
Включаем форвардинг в ядре:
Включаем форвардинг в ядре:
sudo sysctl -w net.inet.ip.forwarding=1На внутреннем ифейсе задаем IP адрес (без этого не создаст, но потом почему-то поменяет на новый, очень странно он ведет себя):
sudo ifconfig en6 10.10.10.1Если внешний интерфейс (с интернетом) это en0, а внутренний, которому требуется дать интернет - en6, то сделать это так:
echo "nat on en0 from en6:network to any -> (en0)" > rules
sudo pfctl -f ./rules -e
Очистка правил так:
sudo pfctl -dИсточник: https://roelant.net/2015/share-your-vpn-mac-el-capitan.html
Создание загрузочного USB диска на Ubuntu
Отличный вариант - Etcher, https://etcher.io Не требует никаких низкоуровневых команд и все можно сделать из GUI.
Sunday, 23 July 2017
Каталог работодателей, предлагающих хорошие вакансии, где требуется Linux
Всем привет!
Я довольно часто приватно получаю сообщения с просьбой порекомендовать того или иного работодателя, где можно будет заниматься сугубо Линуксом.
Быстрого и легкого ответа на вопрос мне найти не удалось и я решил привлечь дорогих читателей.
Собственно, прошу как работодателей, так и работющих в данных прекрасных компаниях делиться ими в комментариях и я буду по мере накопления данных переносить их в этот пост.
Смысла ограничивать географию не вижу :) Требование простое - на работе нужен хардкорный Linux и его отличное знание :)
Я довольно часто приватно получаю сообщения с просьбой порекомендовать того или иного работодателя, где можно будет заниматься сугубо Линуксом.
Быстрого и легкого ответа на вопрос мне найти не удалось и я решил привлечь дорогих читателей.
Собственно, прошу как работодателей, так и работющих в данных прекрасных компаниях делиться ими в комментариях и я буду по мере накопления данных переносить их в этот пост.
Смысла ограничивать географию не вижу :) Требование простое - на работе нужен хардкорный Linux и его отличное знание :)
Subscribe to:
Posts
(
Atom
)

