<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Alfmaster</title><author><name>Alfmaster</name></author><id>https://teletype.in/atom/alfmaster</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/alfmaster?offset=0"></link><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/alfmaster?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-07T11:37:45.760Z</updated><entry><id>alfmaster:ssh-tunnel</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ssh-tunnel?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Как создать ssh-туннель в MacOS:</title><published>2022-12-02T05:23:18.952Z</published><updated>2022-12-02T05:23:40.665Z</updated><summary type="html">Зачем это нужно: </summary><content type="html">
  &lt;p id=&quot;TzIK&quot;&gt;Зачем это нужно: &lt;/p&gt;
  &lt;ol id=&quot;6E5p&quot;&gt;
    &lt;li id=&quot;ABb6&quot;&gt;Например, у нас есть удаленный сервер, с которого доступна некая база данных, которая дает возможность подключиться к себе только с этого удаленного сервера. А вы хотите к ней подключиться со своей локальной машины - вам поможет SSH-туннель, который как бы виртуально переместит вас сразу на удаленный сервер&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;Gq0f&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;uo6o&quot;&gt;Как создать туннель. Открываем Terminal и пишем: &lt;/p&gt;
  &lt;pre id=&quot;9Dir&quot;&gt;ssh -N -D 9999 {login}@{server_addr}&lt;/pre&gt;
  &lt;p id=&quot;E2Ne&quot;&gt;Где: &lt;/p&gt;
  &lt;p id=&quot;7sR9&quot;&gt;&lt;strong&gt;{login}&lt;/strong&gt; - имя пользователя на удаленном сервере&lt;br /&gt;&lt;strong&gt;{server_addr}&lt;/strong&gt; - IP адрес или доменное имя удаленного сервера&lt;br /&gt;&lt;strong&gt;-N&lt;/strong&gt; - параметр, отвечающий за то, чтобы команды не транслировались на удалённый сервер&lt;br /&gt;&lt;strong&gt;-D 9999&lt;/strong&gt; - параметр, указывающий, через какой адрес/порт пробрасывать данные с локального компьютера. То есть если удаленный &lt;/p&gt;
  &lt;p id=&quot;zjOE&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;XjmV&quot;&gt;А еще туннель можно сделать вот так: &lt;/p&gt;
  &lt;p id=&quot;YY56&quot;&gt;Если вводим такую команду, то создается SSH туннель, который будет пробрасывать с локального компьютера порт {local_port} на {external_ip}:{external_port} как будто мы уже находимся на удаленном сервере {host}&lt;/p&gt;
  &lt;pre id=&quot;AFhb&quot;&gt;ssh {user}@{host} -p{port} -L {local_port}:{external_ip}:{external_port}&lt;/pre&gt;
  &lt;p id=&quot;hyQa&quot;&gt;Где: &lt;/p&gt;
  &lt;p id=&quot;jyZv&quot;&gt;&lt;strong&gt;{user}&lt;/strong&gt; - имя пользователя на удаленном сервере&lt;br /&gt;&lt;strong&gt;{host}&lt;/strong&gt; - адрес удаленного хоста&lt;br /&gt;&lt;strong&gt;{port}&lt;/strong&gt; - порт на удаленном хосте, нужно указывать только если порт отличается от 22&lt;br /&gt;&lt;strong&gt;{local_port}&lt;/strong&gt; - порт на локальной машине&lt;br /&gt;&lt;strong&gt;{external_ip}&lt;/strong&gt; - IP, куда надо прокинуть трафик на внешней машине&lt;br /&gt;&lt;strong&gt;{external_port}&lt;/strong&gt; - порт на внешней машине&lt;/p&gt;

</content></entry><entry><id>alfmaster:shorts-sendmail</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/shorts-sendmail?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>SHORT: Настройка sendmail</title><published>2022-07-18T16:42:31.309Z</published><updated>2022-07-18T16:46:15.624Z</updated><category term="shorty" label="Шорты"></category><summary type="html">Всю настройку надо делать из под sudo: </summary><content type="html">
  &lt;p id=&quot;wxba&quot;&gt;Всю настройку надо делать из под sudo: &lt;/p&gt;
  &lt;pre id=&quot;eNBv&quot;&gt;sudo -i&lt;/pre&gt;
  &lt;p id=&quot;yhGG&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;43Lh&quot;&gt;Сначала устанавливаем sendmail: &lt;/p&gt;
  &lt;pre id=&quot;z1ew&quot;&gt;apt-get install sendmail&lt;/pre&gt;
  &lt;p id=&quot;vitk&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;DUsp&quot;&gt;Потом запускаем конфигурацию: &lt;/p&gt;
  &lt;pre id=&quot;2AcY&quot;&gt;sendmailconfig&lt;/pre&gt;
  &lt;p id=&quot;Pcma&quot;&gt;на все вопросы отвечаем Y&lt;/p&gt;
  &lt;p id=&quot;Ewc7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;98xZ&quot;&gt;Все настройки сохраняются тут: &lt;/p&gt;
  &lt;pre id=&quot;W302&quot;&gt;/etc/mail.sendmail.conf
/etc/cron.d/sendmail
/etc/mail/sendmail.mc&lt;/pre&gt;
  &lt;p id=&quot;vc7t&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Wk3D&quot;&gt;В файле php.ini надо включить использование sendmail: &lt;/p&gt;
  &lt;pre id=&quot;cljp&quot;&gt;sendmail_path =  /usr/sbin/sendmail -t -i&lt;/pre&gt;

</content></entry><entry><id>alfmaster:ubuntu-disk</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ubuntu-disk?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Ubuntu. Работа с дисками</title><published>2022-05-31T16:55:47.487Z</published><updated>2022-05-31T16:55:47.487Z</updated><summary type="html">Диски бывают больше 2Tb, поэтому лучше использовать parted, а не fdisk. То есть если вы видите инструкцию c fdisk, то она подходит только для дисков до 2Tb</summary><content type="html">
  &lt;p id=&quot;oDXr&quot;&gt;Диски бывают больше 2Tb, поэтому лучше использовать parted, а не fdisk. То есть если вы видите инструкцию c fdisk, то она подходит только для дисков до 2Tb&lt;/p&gt;
  &lt;p id=&quot;Ukj0&quot;&gt;Вот так можно посмотреть какие диски есть: &lt;/p&gt;
  &lt;pre id=&quot;okyA&quot;&gt;parted -l&lt;/pre&gt;
  &lt;p id=&quot;0NWi&quot;&gt;В списке будет что-то такое, типа: &lt;/p&gt;
  &lt;pre id=&quot;iAN1&quot;&gt;Error: /dev/sdb: unrecognised disk label
Model: ATA TOSHIBA MG06ACA8 (scsi)                                        
Disk /dev/sdb: 8002GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags: &lt;/pre&gt;
  &lt;p id=&quot;jrRK&quot;&gt;/dev/sdb - так мы узнаем что у нас есть диск /dev/sdb, который не подключен. &lt;/p&gt;
  &lt;p id=&quot;q43d&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;L9q1&quot;&gt;Вот так выглядит подключенный/размеченный диск: &lt;/p&gt;
  &lt;pre id=&quot;1vwg&quot;&gt;Model: ATA ADATA SU700 (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                        bios_grub
 2      2097kB  1027MB  1024MB  linux-swap(v1)        swap
 3      1027MB  120GB   119GB   ext4&lt;/pre&gt;
  &lt;p id=&quot;SlES&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;EHXP&quot;&gt;Итак, подключим и разметим &lt;strong&gt;/dev/sdb&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;eWHu&quot;&gt;parted /dev/sdb&lt;/pre&gt;
  &lt;p id=&quot;edOZ&quot;&gt;Назначаем метку: &lt;/p&gt;
  &lt;pre id=&quot;hKay&quot;&gt;mklabel gpt&lt;/pre&gt;
  &lt;p id=&quot;hwLu&quot;&gt;Дальше взываем команду &lt;/p&gt;
  &lt;pre id=&quot;8jfp&quot;&gt;print&lt;/pre&gt;
  &lt;p id=&quot;Ihjc&quot;&gt;Мы это сделали для того, чтобы узнать какой размер у диска (чтобы когда мы создаем партицию - мы правильную цифирку указали&lt;/p&gt;
  &lt;p id=&quot;0iCJ&quot;&gt;например: &lt;/p&gt;
  &lt;pre id=&quot;t9AM&quot;&gt;Model: ATA TOSHIBA MG06ACA8 (scsi)
Disk /dev/sdb: 8002GB&lt;/pre&gt;
  &lt;p id=&quot;7Bpe&quot;&gt;во, тут 8002GB&lt;/p&gt;
  &lt;p id=&quot;sydV&quot;&gt;дальше создаем партицию: &lt;/p&gt;
  &lt;pre id=&quot;SoWx&quot;&gt;mkpart primary 1 8002G&lt;/pre&gt;
  &lt;p id=&quot;NERd&quot;&gt;Всё, можем выходить: &lt;/p&gt;
  &lt;pre id=&quot;PI4x&quot;&gt;quit&lt;/pre&gt;
  &lt;p id=&quot;8QBk&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mFsr&quot;&gt;Форматируем диск: &lt;/p&gt;
  &lt;pre id=&quot;Fkhw&quot;&gt;mkfs.ext4 /dev/sdb1&lt;/pre&gt;
  &lt;p id=&quot;cLqS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pNHy&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ILx3&quot;&gt;Монтирование диска&lt;/h2&gt;
  &lt;p id=&quot;Opk2&quot;&gt;Сначала создаем папку, куда надо будет примонтировать диск:&lt;/p&gt;
  &lt;pre id=&quot;2D0d&quot;&gt;mkdir /home/newdisk&lt;/pre&gt;
  &lt;p id=&quot;owEY&quot;&gt;Потом монтируем диск: &lt;/p&gt;
  &lt;pre id=&quot;2qCU&quot;&gt;mount -t ext4 /dev/sdb1 /home/newdisk/&lt;/pre&gt;
  &lt;p id=&quot;N0kg&quot;&gt;&lt;strong&gt;/dev/sdb1&lt;/strong&gt; - это какое диск&lt;br /&gt;&lt;strong&gt;/home/newdisk/&lt;/strong&gt; - куда монтировать&lt;/p&gt;
  &lt;p id=&quot;JwhW&quot;&gt;Чтобы диск не отваливался каждый раз после перезагрузки системы: &lt;/p&gt;
  &lt;pre id=&quot;5Byo&quot;&gt;nano /etc/fstab&lt;/pre&gt;
  &lt;p id=&quot;VOQ5&quot;&gt;И дописываем туда что-то типа такого: &lt;/p&gt;
  &lt;pre id=&quot;eMNa&quot;&gt;/dev/sdb1       /backup         ext4    default         0       2&lt;/pre&gt;

</content></entry><entry><id>alfmaster:lte-sinr-rsrp-yota</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/lte-sinr-rsrp-yota?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Характеристики 3G/LTE модема, что значат</title><published>2022-04-16T12:06:47.321Z</published><updated>2022-04-16T12:06:47.321Z</updated><summary type="html">SINR(Signal Interference + Noise Ratio), он же отношение сигнал/шум. </summary><content type="html">
  &lt;p id=&quot;wjLM&quot;&gt;&lt;strong&gt;SINR&lt;/strong&gt;(Signal Interference + Noise Ratio), он же отношение сигнал/шум. &lt;/p&gt;
  &lt;p id=&quot;zqYW&quot;&gt;Как понимать значение этого показателя: &lt;/p&gt;
  &lt;pre id=&quot;xFaU&quot;&gt;Отлично: ≥ 20дБ
Хорошо: 13дБ - 20дБ
Удовлетворительно: 0 дБ - 13 дБ
Плохо: ≤ 0 дБ&lt;/pre&gt;
  &lt;p id=&quot;SAgb&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;sh3Q&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;1u3n&quot;&gt;RSRP (Reference Signal Received Power) - мощность принимаемого сигнала&lt;/h3&gt;
  &lt;p id=&quot;1PAd&quot;&gt;Как понимать значение этого показателя: &lt;/p&gt;
  &lt;pre id=&quot;pMpi&quot;&gt;Отлично: ≥ -80 дБм
Хорошо: -80 дБм ... -90 дБм
Удовлетворительно: -90 дБм ... -100 дБм
Плохо: ≤ -100 дБм&lt;/pre&gt;
  &lt;p id=&quot;1XCq&quot;&gt;Если коротко: Чем ближе к нулю - тем лучше. Значения всегда отрицательные. &lt;/p&gt;
  &lt;p id=&quot;zeWD&quot;&gt;Если &amp;quot;проседает&amp;quot; до 95 и ниже - значит сигнал стабильно плохой, хорошего интернета не будет&lt;/p&gt;

</content></entry><entry><id>alfmaster:cordova-cheat-sheet</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/cordova-cheat-sheet?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Шпаргалка по командам Cordova</title><published>2022-01-07T12:07:41.739Z</published><updated>2022-01-07T12:08:46.265Z</updated><summary type="html">Как проверять не протухли ли какие-то пакеты: </summary><content type="html">
  &lt;p id=&quot;i1fq&quot;&gt;Как проверять не протухли ли какие-то пакеты: &lt;/p&gt;
  &lt;pre id=&quot;8miC&quot;&gt;npm outdated&lt;/pre&gt;
  &lt;p id=&quot;oCmZ&quot;&gt;У cordova есть отдельная утилита для проверки актуальности плагинов&lt;/p&gt;
  &lt;p id=&quot;9jIh&quot;&gt;Чтобы установить: &lt;/p&gt;
  &lt;pre id=&quot;Y5Vj&quot;&gt;npm install -g cordova-check-plugins&lt;/pre&gt;
  &lt;p id=&quot;TTuc&quot;&gt;Потом запускаем вот так: &lt;/p&gt;
  &lt;pre id=&quot;IG8U&quot;&gt;cordova-check-plugins --update=auto &lt;/pre&gt;
  &lt;p id=&quot;2LVt&quot;&gt;Проверяет и обновляет плагины. &lt;/p&gt;
  &lt;p id=&quot;wsL6&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;dNQk&quot;&gt;Приготовить сборку приложения для компиляции: &lt;/p&gt;
  &lt;pre id=&quot;UZYA&quot;&gt;cordova prepare ios
cordova prepare android&lt;/pre&gt;

</content></entry><entry><id>alfmaster:ubuntu-20-web-sphere-mq-php-module</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ubuntu-20-web-sphere-mq-php-module?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Ubuntu20: Установка клиента IBM WebSphere MQ + модуль для php</title><published>2021-12-29T12:53:21.117Z</published><updated>2021-12-29T12:53:21.117Z</updated><summary type="html">Если хотите работать с Websphere MQ с ипользованием PHP - это квест. </summary><content type="html">
  &lt;p id=&quot;tl9f&quot;&gt;Если хотите работать с Websphere MQ с ипользованием PHP - это квест. &lt;/p&gt;
  &lt;p id=&quot;w97X&quot;&gt;Установка делается в несколько шагов: &lt;/p&gt;
  &lt;ol id=&quot;8eKG&quot;&gt;
    &lt;li id=&quot;E8zE&quot;&gt;Скачиваем и устаналиваем &lt;strong&gt;WebSphere MQ&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;reUF&quot;&gt;Скачиваем и устанавливаем PHP-MQSERIES (чтобы работать с &lt;strong&gt;WebSphere MQ)&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;eDOT&quot;&gt;Я пробовал собрать тоже самое для MacOS (для MAMP) - не получилось, сам модуль для PHP - не компилируется. &lt;/p&gt;
  &lt;p id=&quot;W3rb&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;97p8&quot;&gt;&lt;strong&gt;Установка WebSphere MQ&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;ckHt&quot;&gt;Проходим на &lt;a href=&quot;https://www-945.ibm.com/support/fixcentral/swg/downloadFixes?parent=ibm~WebSphere&amp;product=ibm/WebSphere/WebSphere+MQ&amp;release=7.5.0.8&amp;platform=All&amp;function=fixId&amp;fixids=7.5.0.8-WS-MQC-LinuxX64&amp;useReleaseAsTarget=true&amp;includeRequisites=1&amp;includeSupersedes=0&amp;downloadMethod=http&amp;login=true&quot; target=&quot;_blank&quot;&gt;https://www-945.ibm.com/support/fixcentral/swg/downloadFixes?parent=ibm~WebSphere&amp;amp;product=ibm/WebSphere/WebSphere+MQ&amp;amp;release=7.5.0.8&amp;amp;platform=All&amp;amp;function=fixId&amp;amp;fixids=7.5.0.8-WS-MQC-LinuxX64&amp;amp;useReleaseAsTarget=true&amp;amp;includeRequisites=1&amp;amp;includeSupersedes=0&amp;amp;downloadMethod=http&amp;amp;login=true&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;yeDD&quot;&gt;И скачиваем 7.5.0.8 Client install image for WebSphere MQ on Linux X86-64&lt;/p&gt;
  &lt;p id=&quot;yF9v&quot;&gt;Чтобы далеко не ходить, вот ссылка на по состоянию на 2022 год: &lt;/p&gt;
  &lt;pre id=&quot;5ZXc&quot;&gt;wget https://ak-delivery04-mul.dhe.ibm.com/sdfdl/v2/sar/CM/WS/06zly/1/Xa.2/Xb.jusyLTSp44S0eZIuphr9nceu78L-EaopWceuAGmXuBaqzF1lbPcU5h70t_U/Xc.CM/WS/06zly/1/7.5.0.8-WS-MQC-LinuxX64.tar.gz/Xd./Xf.LPR.D1VK/Xg.11572581/Xi.habanero/XY.habanero/XZ.B2dHyxmWZrlGDA-lQIjtN806oDQiqKAn/7.5.0.8-WS-MQC-LinuxX64.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;bLoy&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;m1Gr&quot;&gt;Последовательность шагов (всё делаю из под root/sudo): &lt;/p&gt;
  &lt;pre id=&quot;Dtdx&quot;&gt;cd ~
mkdir tmp
wget https://ak-delivery04-mul.dhe.ibm.com/sdfdl/v2/sar/CM/WS/06zly/1/Xa.2/Xb.jusyLTSp44S0eZIuphr9nceu78L-EaopWceuAGmXuBaqzF1lbPcU5h70t_U/Xc.CM/WS/06zly/1/7.5.0.8-WS-MQC-LinuxX64.tar.gz/Xd./Xf.LPR.D1VK/Xg.11572581/Xi.habanero/XY.habanero/XZ.B2dHyxmWZrlGDA-lQIjtN806oDQiqKAn/7.5.0.8-WS-MQC-LinuxX64.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;LjoV&quot;&gt;Содержимое скаченного распаковываем в /root/tmp/mqseries&lt;/p&gt;
  &lt;p id=&quot;S43u&quot;&gt;Далее, ставим необходимый минимум: &lt;/p&gt;
  &lt;pre id=&quot;KL8R&quot;&gt;apt install rpm
cd /root/tmp/mqseries
./mqlicense.sh -accept
rpm -ivh MQSeriesRuntime-7.5.0-8.x86_64.rpm
rpm -ivh MQSeriesClient-7.5.0-8.x86_64.rpm
rpm -ivh MQSeriesSDK-7.5.0-8.x86_64.rpm&lt;/pre&gt;
  &lt;p id=&quot;sguC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;R9LP&quot;&gt;Теперь надо поставить модуль PHP:&lt;/p&gt;
  &lt;p id=&quot;20fm&quot;&gt;Фишка в том, что стандартный модуль, которых хранится в pecl (на момент написания - v0.15.0) с php8.0 не ставится, а вот если скачать его же с исходников на gitHub - ставится. &lt;/p&gt;
  &lt;p id=&quot;J2av&quot;&gt;Делаем следующее: &lt;/p&gt;
  &lt;pre id=&quot;fUi0&quot;&gt;cd /root/tmp
mkdir php_mqseries
cd php_mqseries
wget https://github.com/php/pecl-networking-mqseries/archive/refs/heads/master.zip&lt;/pre&gt;
  &lt;p id=&quot;6zwr&quot;&gt;Распаковываем содержимое в ту же папку, куда скачали, там внутри архива папочка, вот ее содержимое кладем в /root/tmp/php_mqseries&lt;/p&gt;
  &lt;p id=&quot;5HD7&quot;&gt;Дальше: &lt;/p&gt;
  &lt;pre id=&quot;lTgI&quot;&gt;cd /root/tmp/php_mqseries
phpize
./configure --with-libdir=lib64 
make&lt;/pre&gt;
  &lt;p id=&quot;9cXP&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xR4x&quot;&gt;Готово, модуль скомпилировался, теперь добавляем его в PHP. &lt;/p&gt;
  &lt;p id=&quot;0zzX&quot;&gt;Копируем готовый модуль из /root/tmp/php_mqseries/modules/mqseries.so  в папку /usr/lib/php/20200930&lt;/p&gt;
  &lt;p id=&quot;BJRk&quot;&gt;В файлы: &lt;/p&gt;
  &lt;pre id=&quot;U300&quot;&gt;nano /etc/php/8.0/cli/php.ini 
nano /etc/php/8.0/apache2/php.ini&lt;/pre&gt;
  &lt;p id=&quot;acgG&quot;&gt;добавляем: &lt;/p&gt;
  &lt;pre id=&quot;zfK4&quot;&gt;extension=mqseries&lt;/pre&gt;
  &lt;p id=&quot;mk6g&quot;&gt;Скорректируйте путь до файла php.ini в соответствии с вашей версией PHP&lt;/p&gt;

</content></entry><entry><id>alfmaster:ubuntu-20-redis-server</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ubuntu-20-redis-server?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Ubuntu 20: установить и запустить Redis Server</title><published>2021-12-29T12:12:56.279Z</published><updated>2021-12-29T12:12:56.279Z</updated><summary type="html">Заходим как sudo и выполняем:</summary><content type="html">
  &lt;p id=&quot;egD1&quot;&gt;Заходим как sudo и выполняем:&lt;/p&gt;
  &lt;pre id=&quot;AGNj&quot;&gt;apt install redis-server&lt;/pre&gt;
  &lt;p id=&quot;pt75&quot;&gt;После установки - запускаем Redis сервер: &lt;/p&gt;
  &lt;pre id=&quot;2f4Q&quot;&gt;systemctl start redis-server&lt;/pre&gt;
  &lt;p id=&quot;3VCu&quot;&gt;И делаем так, чтобы он после перезагрузки - запускался сам: &lt;/p&gt;
  &lt;pre id=&quot;dO0k&quot;&gt;systemctl enable redis-server&lt;/pre&gt;
  &lt;p id=&quot;58FL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;JxBx&quot;&gt;Redis из коробки работает хорошо, но его еще можно поднастроить: &lt;/p&gt;
  &lt;pre id=&quot;sFw5&quot;&gt;nano /etc/redis/redis.conf&lt;/pre&gt;
  &lt;p id=&quot;qKfM&quot;&gt;Что можно поправить: &lt;/p&gt;
  &lt;pre id=&quot;za7B&quot;&gt;maxmemory 512mb
maxmemory-policy allkeys_lfu&lt;/pre&gt;
  &lt;p id=&quot;tgWv&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;0zip&quot;&gt;В примере выше, мы пишем, что максимально программа может использовать до 512 мегабайт памяти.&lt;/p&gt;
  &lt;p id=&quot;w24g&quot;&gt;Параметр maxmemory-policy указывает что делать когда достигнут лимит памяти. Вот доступные значения:&lt;/p&gt;
  &lt;ul id=&quot;DazT&quot;&gt;
    &lt;li id=&quot;wyC6&quot;&gt;&lt;strong&gt;volatile-lru&lt;/strong&gt; - (Least Recently Used) удалить ключ, который использовался давнее всех и имеет метку expire;&lt;/li&gt;
    &lt;li id=&quot;ggfQ&quot;&gt;&lt;strong&gt;allkeys-lru&lt;/strong&gt; - удалить ключ, который использовался давнее всех;&lt;/li&gt;
    &lt;li id=&quot;pGqL&quot;&gt;&lt;strong&gt;volatile-lfu&lt;/strong&gt; - (Least Frequently Used) удалить ключ, который использовался реже всех и имеет метку expire;&lt;/li&gt;
    &lt;li id=&quot;Uc5N&quot;&gt;&lt;strong&gt;allkeys-lfu&lt;/strong&gt; - удалить ключ, который использовался реже всех;&lt;/li&gt;
    &lt;li id=&quot;Ow41&quot;&gt;&lt;strong&gt;volatile-random&lt;/strong&gt; - удалить случайный ключ с меткой expire;&lt;/li&gt;
    &lt;li id=&quot;DkW4&quot;&gt;&lt;strong&gt;allkeys-random&lt;/strong&gt; - удалить случайный ключ;&lt;/li&gt;
    &lt;li id=&quot;BXsv&quot;&gt;&lt;strong&gt;volatile-ttl&lt;/strong&gt; - удалить ключ с ближайшим временем уничтожения;&lt;/li&gt;
    &lt;li id=&quot;4XN2&quot;&gt;&lt;strong&gt;noeviction&lt;/strong&gt; - не принимать новые запросы на запись.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>alfmaster:ubuntu-server-18-lts-to-20-lts</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ubuntu-server-18-lts-to-20-lts?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Как обновить Ubuntu Server 18 до Ubuntu Server 20</title><published>2021-12-03T12:04:02.583Z</published><updated>2022-02-02T15:06:27.742Z</updated><summary type="html">На самом деле просто</summary><content type="html">
  &lt;p id=&quot;CTaY&quot;&gt;На самом деле просто&lt;/p&gt;
  &lt;p id=&quot;83fg&quot;&gt;Обновляем репозитории и пакеты&lt;/p&gt;
  &lt;pre id=&quot;3bb6&quot;&gt;sudo apt update
sudo apt full-upgrade&lt;/pre&gt;
  &lt;p id=&quot;rtIZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;fv0o&quot;&gt;Скорее всего после этого надо сделать: &lt;/p&gt;
  &lt;pre id=&quot;KWuR&quot;&gt;reboot&lt;/pre&gt;
  &lt;p id=&quot;w2v2&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;cQIX&quot;&gt;После этого запускаем: &lt;/p&gt;
  &lt;pre id=&quot;TQmt&quot;&gt;do-release-upgrade&lt;/pre&gt;
  &lt;p id=&quot;giPt&quot;&gt;В процессе установщик будет спрашивать вопросы, на которые отвечаем либо &amp;quot;y&amp;quot;, либо ENTER &lt;/p&gt;

</content></entry><entry><id>alfmaster:mysql-tricks</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/mysql-tricks?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>MySQL приемчики</title><published>2021-12-01T12:53:58.497Z</published><updated>2022-06-02T09:33:53.794Z</updated><summary type="html">Как сортировать по значению цифры внутри строкового поля. </summary><content type="html">
  &lt;p id=&quot;uXap&quot;&gt;Как сортировать по значению цифры внутри строкового поля. &lt;/p&gt;
  &lt;p id=&quot;Cz8m&quot;&gt;Пример: у нас есть varchar, где написаны цифры и надо отсортировать вывод по значению этих цифр (а не по строковому значению). &lt;/p&gt;
  &lt;pre id=&quot;EYEv&quot;&gt;SELECT * FROM {table} ORDER BY cast({column_name} as unsigned)&lt;/pre&gt;
  &lt;p id=&quot;7Nvq&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;zmKT&quot;&gt;Посмотреть размер таблиц в БД: &lt;/p&gt;
  &lt;pre id=&quot;Vy6Y&quot;&gt;SELECT
    table_name AS &amp;#x60;Table&amp;#x60;,
    round(((data_length + index_length) / 1024 / 1024), 2) &amp;#x60;Size in MB&amp;#x60;
FROM information_schema.TABLES
WHERE table_schema = &amp;quot;{database}&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;tdqN&quot;&gt; где {database} - это имя базы, для которой нужно получить размер таблиц&lt;/p&gt;

</content></entry><entry><id>alfmaster:ubunu-20-lamp-install</id><link rel="alternate" type="text/html" href="https://blog.alfmaster.ru/ubunu-20-lamp-install?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alfmaster"></link><title>Стартовая настройка Ubuntu 18 / Ubuntu 20 LTS</title><published>2021-11-03T07:33:09.855Z</published><updated>2023-08-27T20:57:28.827Z</updated><summary type="html">Тут коротко что нужно последовательно дергать, чтобы установить LAMP на Ubuntu 18 LTS / Ubuntu 20 LTS</summary><content type="html">
  &lt;p id=&quot;IIZ4&quot;&gt;Тут коротко что нужно последовательно дергать, чтобы установить LAMP на Ubuntu 18 LTS / Ubuntu 20 LTS&lt;/p&gt;
  &lt;p id=&quot;gdwQ&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;1N7W&quot;&gt;Общее&lt;/h3&gt;
  &lt;p id=&quot;CaPM&quot;&gt;Заходим на сервер, включаем:&lt;/p&gt;
  &lt;pre id=&quot;iSgJ&quot;&gt;sudo -i&lt;/pre&gt;
  &lt;p id=&quot;FaoF&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;dhDd&quot;&gt;Обновить:&lt;/p&gt;
  &lt;pre id=&quot;U7my&quot;&gt;apt update&lt;/pre&gt;
  &lt;p id=&quot;x5mZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Uemg&quot;&gt;Ставим вспомогательные программы:&lt;/p&gt;
  &lt;pre id=&quot;Knmu&quot;&gt;apt install -y mc htop iotop curl git unzip net-tools&lt;/pre&gt;
  &lt;p id=&quot;jKB9&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;CdtX&quot;&gt;Установка Apache:&lt;/h3&gt;
  &lt;pre id=&quot;wSam&quot;&gt;apt install apache2 -y
apt install libapache2-mpm-itk -y
a2enmod rewrite
systemctl restart apache2&lt;/pre&gt;
  &lt;p id=&quot;gkW0&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Kdie&quot;&gt;Теперь создаем хост:&lt;/p&gt;
  &lt;pre id=&quot;o83B&quot;&gt;cd /etc/apache2/sites-available/
touch hostname.conf
nano hostname.conf&lt;/pre&gt;
  &lt;p id=&quot;9YaN&quot;&gt;hostname - может быть любым именем&lt;/p&gt;
  &lt;p id=&quot;Qd2j&quot;&gt;Пример конфига виртуального хоста для http:&lt;/p&gt;
  &lt;pre id=&quot;MfGM&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt; 
    ServerName site.ru 
    ServerAlias www.site.ru 
    DocumentRoot /home/site/www/public 
    AssignUserId site site 
    &amp;lt;Directory /home/site/www/public &amp;gt; 
        Options FollowSymLinks 
        AllowOverride All 
        Require all granted 
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;Ao5b&quot;&gt;Пример конфига для https: &lt;/p&gt;
  &lt;pre id=&quot;IJ0O&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerName      site.ru
        ServerAlias     www.site.ru site.ru
        DocumentRoot    /home/site/www/public
        AssignUserId    site site
        &amp;lt;Directory /home/site/www/public &amp;gt;
                        Options FollowSymLinks
                        AllowOverride All
                        Require all granted
        &amp;lt;/Directory&amp;gt;
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =site.ru [OR]
        RewriteCond %{SERVER_NAME} =www.site.ru
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
  &lt;pre id=&quot;uzJX&quot;&gt;&amp;lt;IfModule mod_ssl.c&amp;gt;
    &amp;lt;VirtualHost *:443&amp;gt;
        ServerName      site.ru
        ServerAlias     www.site.ru site.ru
        DocumentRoot    /home/site/www/public
        AssignUserId    site site
        &amp;lt;Directory /home/site/www/public &amp;gt;
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        &amp;lt;/Directory&amp;gt;
        SSLCertificateFile /etc/letsencrypt/live/site.ru/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/site.ru/privkey.pem
        SSLEngine on
        SSLProtocol             all -SSLv2 -SSLv3
        SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES2$
        SSLHonorCipherOrder     on
        SSLCompression          off
        SSLOptions +StrictRequire
        LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined
        LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common
    &amp;lt;/VirtualHost&amp;gt;
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;KyYc&quot;&gt;/home/site/www/public  - это путь до корневой директории сайта. В этом примере - такое подходит для Laravel, например&lt;/p&gt;
  &lt;p id=&quot;1SzW&quot;&gt;site.ru - имя сайта, какого он уровня - не важно&lt;/p&gt;
  &lt;p id=&quot;JM4D&quot;&gt;site - это имя пользователя, apache будет работать в его папке из под него (это ОЧЕНЬ удобно, кто так не делает - обрекает себя на бесконечные страдания и решение вопросов в доступами к файлам через предоставление прав 777 на папки)&lt;/p&gt;
  &lt;p id=&quot;wIzZ&quot;&gt;/etc/letsencrypt/live/site.ru/fullchain.pem и /etc/letsencrypt/live/site.ru/privkey.pem - путь до файлов с сертификатами. &lt;/p&gt;
  &lt;p id=&quot;GnOL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Qyrg&quot;&gt;Также в файл &lt;strong&gt;/etc/apache2/apache2.conf&lt;/strong&gt; нужно добавить &lt;strong&gt;ServerName localhost&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;kb1i&quot;&gt;nano /etc/apache2/apache2.conf
ServerName localhost&lt;/pre&gt;
  &lt;p id=&quot;4nDV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;eYjd&quot;&gt;проверить что настройки верные:&lt;/p&gt;
  &lt;pre id=&quot;zfeY&quot;&gt;apache2ctl configtest&lt;/pre&gt;
  &lt;p id=&quot;RvJh&quot;&gt;применяем настройки, просим apache применить их:&lt;/p&gt;
  &lt;pre id=&quot;kSLT&quot;&gt;a2ensite sites.conf
systemctl reload apache2&lt;/pre&gt;
  &lt;p id=&quot;8xE7&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;xjdQ&quot;&gt;SSL для Apache2&lt;/h2&gt;
  &lt;p id=&quot;zL6P&quot;&gt;Если нужно сделать домен с самоподписным сертификатом, то сертификат можно выпустить вот так: &lt;/p&gt;
  &lt;pre id=&quot;L4uy&quot;&gt;openssl req -new -x509 -days 10000 -nodes -out cert.pem -keyout cert.key -subj &amp;quot;/C=RU/ST=MSK/L=MSK/O=Alfmaster/OU=Alfmaster/CN=site.ru/CN=www.site.ru&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;Tz3g&quot;&gt;После этого в Apache2 можно вписать вот такой конфиг: &lt;/p&gt;
  &lt;pre id=&quot;Pf6w&quot;&gt;&amp;lt;VirtualHost *:443&amp;gt;
        ServerName site.ru
        ServerAlias www.site.ru
        DocumentRoot /home/site/www/public
        AssignUserId site site
        &amp;lt;Directory /home/site/www/public &amp;gt;
                Options FollowSymLinks
                AllowOverride All
                Require all granted
        &amp;lt;/Directory&amp;gt;
        SSLEngine on
        SSLCertificateFile cert/site.ru/cert.pem
        SSLCertificateKeyFile cert/site.ru/cert.key
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;2Kjh&quot;&gt;&lt;strong&gt;cert/site.ru/cert.pem&lt;/strong&gt; - это адрес относительно папки апача (/etc/apache2/)&lt;/p&gt;
  &lt;p id=&quot;kP0o&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;RMhQ&quot;&gt;MySQL&lt;/h3&gt;
  &lt;pre id=&quot;oEIt&quot;&gt;apt install mysql-server&lt;/pre&gt;
  &lt;p id=&quot;0wKa&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;edes&quot;&gt;После этого делаем так, чтобы было удобно пользоваться паролем&lt;/p&gt;
  &lt;pre id=&quot;00Qz&quot;&gt; mysql
 ALTER USER &amp;#x27;root&amp;#x27;@&amp;#x27;localhost&amp;#x27; IDENTIFIED WITH mysql_native_password BY &amp;#x27;{PASSWORD}&amp;#x27;;
 FLUSH PRIVILEGES;
 exit&lt;/pre&gt;
  &lt;p id=&quot;GahU&quot;&gt;где password = root пароль&lt;/p&gt;
  &lt;p id=&quot;yib6&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NuMy&quot;&gt;Далее настройка безопасности&lt;/p&gt;
  &lt;pre id=&quot;stcb&quot;&gt;mysql_secure_installation&lt;/pre&gt;
  &lt;p id=&quot;oRsi&quot;&gt;на все вопросы отвечаем &amp;quot;Y&amp;quot;, на второй вопрос про пароль: 2 (MEDIUM: 8+ символов, включая буквы разных регистров, цифры, спецсимволы),&lt;/p&gt;
  &lt;p id=&quot;Lkpt&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Xkdv&quot;&gt;Файл конфигурации для разного количества RAM:&lt;/p&gt;
  &lt;pre id=&quot;tUj4&quot;&gt;nano /etc/mysql/mysql.conf.d/mysqld.cnf &lt;/pre&gt;
  &lt;p id=&quot;X2hn&quot;&gt;Можно выбрать один из готовых конфигов. &lt;/p&gt;
  &lt;pre id=&quot;EoI0&quot;&gt;
MySQL5.7: 8GB_RAM: https://alfmaster.ru/conf/mysql57_8gb.conf
MySQL5.7: 16GB_RAM: https://alfmaster.ru/conf/mysql57_16gb.conf
MySQL5.7: 32GB_RAM: https://alfmaster.ru/conf/mysql57_32gb.conf

MySQL8: 4GB_RAM: https://alfmaster.ru/conf/mysql8_4gb.conf
MySQL8: 8GB_RAM: https://alfmaster.ru/conf/mysql8_8gb.conf
MySQL8: 16GB_RAM: https://alfmaster.ru/conf/mysql8_16gb.conf
MySQL8: 32GB_RAM: https://alfmaster.ru/conf/mysql8_32gb.conf
MySQL8: 64GB_RAM: https://alfmaster.ru/conf/mysql8_64gb.conf

service mysql stop
service mysql start&lt;/pre&gt;
  &lt;p id=&quot;drtu&quot;&gt;Важно: При этих настройках MySQL &amp;quot;зажрет&amp;quot; почти всё свободную память на VM (но при этом хорошо будет работать на нагрузках). Если базы у вас небольшие - возьмите самый маленьких конфиг (на 4Gb)&lt;/p&gt;
  &lt;p id=&quot;Agn6&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;efZE&quot;&gt;Восстановить пароль от root, если потерял:&lt;/p&gt;
  &lt;pre id=&quot;DTMJ&quot;&gt;nano /etc/mysql/mysql.conf.d/mysqld.cnf 
добавить после [mysqld]:
skip-grant-tables
После этого: 
mysql
update user set authentication_string=PASSWORD(&amp;#x27;root_password&amp;#x27;) where user=&amp;#x27;root&amp;#x27; and host=&amp;#x27;localhost&amp;#x27;;
flush privileges;
exit;&lt;/pre&gt;
  &lt;p id=&quot;H2Rp&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;OcAS&quot;&gt;Теперь пользователя надо создавать вот так:&lt;/p&gt;
  &lt;pre id=&quot;IWHK&quot;&gt;CREATE database {DBNAME};
CREATE USER &amp;#x27;{USER}&amp;#x27;@&amp;#x27;localhost&amp;#x27; IDENTIFIED BY &amp;#x27;{PASSWORD}&amp;#x27;;
GRANT ALL PRIVILEGES ON {DBNAME}.* TO &amp;#x27;{USER}&amp;#x27;@&amp;#x27;localhost&amp;#x27;;
FLUSH PRIVILEGES;
\q&lt;/pre&gt;
  &lt;p id=&quot;KKGc&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;LBij&quot;&gt;Проверить какие доступы есть для пользователя: &lt;/p&gt;
  &lt;pre id=&quot;1G1p&quot;&gt;SELECT host FROM mysql.user WHERE User = &amp;#x27;{USER}&amp;#x27;;&lt;/pre&gt;
  &lt;p id=&quot;i7ad&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Orkt&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;EnfG&quot;&gt;PHP&lt;/h3&gt;
  &lt;pre id=&quot;ct2M&quot;&gt;apt install -y php libapache2-mod-php php-mysql php-bcmath php-bz2 php-cli php-common php-curl php-gd php-imap php-json php-mail php-mbstring php-redis php-soap php-xml php-zip&lt;/pre&gt;
  &lt;p id=&quot;wm6F&quot;&gt;После установки настраиваем параметры в php.ini: &lt;/p&gt;
  &lt;pre id=&quot;7qNY&quot;&gt;nano /etc/php/*.*/apache2/php.ini
_
для php7.4: /etc/php/7.4/apache2/php.ini
для php8.0: /etc/php/8.0/apache2/php.ini
для php8.1: /etc/php/8.1/apache2/php.ini&lt;/pre&gt;
  &lt;p id=&quot;Ernv&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hqdR&quot;&gt;Заменяем, чтобы было вот так (ну или как вам там надо): &lt;/p&gt;
  &lt;pre id=&quot;E4ev&quot;&gt;memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
max_execution_time = 120
max_input_time = 120&lt;/pre&gt;
  &lt;p id=&quot;gfaZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Q03B&quot;&gt;Потом: &lt;/p&gt;
  &lt;pre id=&quot;wigt&quot;&gt;nano /etc/apache2/mods-enabled/dir.conf&lt;/pre&gt;
  &lt;p id=&quot;uNEd&quot;&gt;Переставить во второй строчке index.php на первое место&lt;/p&gt;
  &lt;pre id=&quot;2Fis&quot;&gt;systemctl restart apache2&lt;/pre&gt;
  &lt;p id=&quot;8Ajb&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;8gve&quot;&gt;Composer&lt;/p&gt;
  &lt;p id=&quot;yyxz&quot;&gt;Делаем это под root (sudo)&lt;/p&gt;
  &lt;pre id=&quot;akED&quot;&gt;cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php --install-dir=/usr/local/bin --filename=composer&lt;/pre&gt;

</content></entry></feed>