Как распаковать многотомный архив в tgz

Есть под рукой многотомный tgz архив, частей которого великое множество, такой архив может генерировать к примеру ISPManager, куча файлов вида:
F2018-05-20.tgz.part1
F2018-05-20.tgz.part2
...
F2018-05-20.tgz.part100500
Перед тем, как распаковать такой архив, все части необходимо объединить в один файл.

Читать далее «Как распаковать многотомный архив в tgz»

php код чата для виджета вордпресс

<h5>Чат</h5>
<html>
	<head>
	</head>
<body>
<iframe src="wp-content/utils/chatframe.php" style="border: none;" loading = "lazy"></iframe>
<div id="zatemnenie">
<div id="okno">
<iframe src="wp-content/utils/chat.php" width="520px" height="810" frameborder="0"></iframe>
<a href="#" class="close">Закрыть чат</a>
</div>
</div>
<button class="c-button" onclick="window.location.href = '#zatemnenie';">Наследить</button>
</body>
</html>

 

ffmpeg трансляция текстовой строки из RSS ленты с камеры rtsp поток

двигаемся дальше, добавим в нашу предыдущую трансляцию для телеграмм бегущую строку из новостной rss-ленты. Итоговый скрипт получился следующим:

#!/bin/sh
rm /home/vvv/stream/index.xml
wget -q https://volga.news/rss1/google/7/culture/index.xml
sed 's/&quot;/"/g; s/&#160;/_/g' index.xml > culture.xml
cat culture.xml | sed -n 15,250p | grep '<description>' | awk -F\> '{ print $2 }' | awk -F\< '{ printf $1 }' | tee news.txt
pkill ffmpeg
sleep 5
FFREPORT=file=/home/vvv/stream/ffmpeg.log:level=8 ffmpeg -v quiet -stats -re -i http://online.radio-megapolis.ru:8000/megapolis_mp3 -i rtsp://user:pass@192.168.37.30/onvif1 -filter:v "drawtext=enable='between(t,3,604800)':fontfile=/home/vvv/fonts/Lucon.ttf:textfile=/home/vvv/stream/news.txt:fontcolor=white@1.0:fontsize=16:y=h-line_h-10:x='if(gt(x,-tw),w-mod(8*n,w+tw),w)'" -c:v libx264 -s 640x480 -c:a aac -ar 22050 -b:a 32k -f flv rtmps://dc4-1.rtmp.t.me/s/token

Читать далее «ffmpeg трансляция текстовой строки из RSS ленты с камеры rtsp поток»

.htaccess wordpress закрываем дыры

PHP обработчик —> Apache

Для одиночной установки:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

1. Защита важных файлов

Запретите доступ к файлам wp-config.php, htaccess, php.ini и логам ошибок. Добавьте это правило, чтобы запретить доступ к этим файлам:

<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

Читать далее «.htaccess wordpress закрываем дыры»

Цели конверсий и ретаргетинга Яндекс.Метрики и Contact Form 7

Считаем лиды(потенциальных клиентов) пришедших по рекламе и просто так — напрямую.  Для этого подключаем события успешной отправки сообщений(запрос обратной связи, и консультаций) из формы ContactForm7 WordPress к цели в Яндекс.Метрике. Читать далее «Цели конверсий и ретаргетинга Яндекс.Метрики и Contact Form 7»

Дублировать страницы WordPress

С помощью кода добавленного в function.php можно добавить возможность копирования уже существующих страниц или записей: Читать далее «Дублировать страницы WordPress»

XMPP на сайт

Модификация JWChat для обеспечения сервиса онлайн-консультации

Для многих организаций всё более актуальным становится вопрос упрощения и ускорения двустороннего взаимодействия с клиентами посредством ИТ. На корпоративных сайтах, как правило, можно встретить номера телефонов, адреса электронной почты, контакты менеджеров в различных системах сообщений, какую-либо разновидность гостевой книги (что то вроде «задать вопрос») и, в лучшем случае, форум.

Перед нами вопрос: каким образом можно обеспечить клиенту, зашедшему на сайт, удобную форму отправки вопроса и получение ответа «не отходя от кассы».

Предоставление контактов в популярных системах мгновенных сообщений не является для нас решением задачи, так как для ответа может потребоваться несколько людей (менеджеров, технических специалистов, экономистов). Да и внешний вид странички с «аськами» менеджеров идёт не на пользу представительскому имиджу организации. Большинство обычных пользователей не захотят ничего слышать о регистрации на форуме или в корпоративной системе сообщений, так как не рассчитывают на долгосрочное партнёрство или просто им легче набрать номер телефона.

Существует замечательная система онлайн-поддержки LiveZilla, которая однако предполагает наличие специального софта у операторов исключительно под ОС Windows. Внутренняя система сообщений в нашем предприятии организована с помощью XMPP, и не хотелось что то менять или нагружать менеджеров дополнительным программным средством. Внешние пользователи тоже могут подключаться и задавать вопросы в отдельной конференции, но это не пользуется популярностью (что не удивительно).

Таким образом, было принято решение разместить на сайте XMPP-клиент на Javascript. После прочтения нескольких обзоров (в том числе на Хабре) и практического изучения таких клиентов, я решил использовть для этой цели JWChat.

Реализация

Вновь установленный JWChat на начальной странице предлагает авторизоваться, либо зарегистрироваться.

JWChat

Как я уже писал выше, обязательная регистрация отобьёт желание к общению у большинства посетителей сайта. В JWChat на этот случай предусмотрена возможность гостевого входа. Прописываем в файле config.js нужные нам параметры:

var GUEST_ACC = "client";
var GUEST_PWD = "pass";

Так как учётная запись гостевая, то ничего страшного, что пароль будет в открытом виде. Возможность подключения нескольких клиентов сохраняется, так как к ресурсу добавляется случайное число в диапазоне от 0 до 999.

После авторизации открывается отдельное окно браузера, содержащее ростер. Понятно, что в нашем случае оно совершенно ни к чему. После присоединения к конференции открывается ещё одно окно для отображения чата, в свою очередь состоящее из четырёх фреймов. Это, собственно, и будет полезной областью, которая нужна пользователю.

JWChat


Очевидно, что удобство и эстетичность интерфейса в данном случае никуда не годны. Кроме того, если настроить для гостевой записи автовход в нужную конференцию, второе всплывающее окно будет заблокировано большинством браузеров с настройками по умолчанию.

В результате, нужно было представить только полезную часть (конференцию) без необходимости авторизации и сразу же при переходе пользователя на соответствующую страничку.

Таким образом, на странице онлайн-консультации я расположил все необходимые элементы с помощью фреймов и объединил скрипты, выполняемые в трёх отдельных окнах в один код, устранив конфликты некоторых переменных и функций. Ссылки на отдельные окна были заменены ссылками на фреймы нового окна.

Процедура авторизации под гостевой записью выполнялась сразу при событии onload в уже существующей функции init(). Я решил не переделывать кардинально HTML-код (так как это повлекло бы значительные изменения и кода Javascript), а лишь настроить CSS и убрать все ненужные элементы с помощью свойства display:none и нулевой ширины одного из фреймов.

После авторизации происходит автоматическое подключение к нужной конференции (можно настроить на сервере или в закладках гостевого пользователя с помощью полноценного XMPP-клиента). С помощью диалога prompt у пользователя запрашивается имя. Если имя по какой-либо причине не было введено, то вместо него присваивается номер от 0 до 999. Дополнительно к имени я добавляю префикс и постфикс, одинаковые для всех пользователей.

Использование

Учитывая невысокую посещаемость и специфику нашего сайта, было удивительно наблюдать достаточно большое количество вопросов, заданных с помощью нового сервиса (в том числе даже от иностранцев). Пока все клиенты остались довольны нововведением, что не стеснялись с помощью него же и сообщать. Кроме того, пользователи теперь не только задают вопросы, а сразу договариваются с сотрудниками обо всём и даже знакомятся с коллегами по профессии.

Стоит отметить, что в конференции для клиентов в рабочие часы постоянно находятся несколько наших сотрудников (подключенных через полноценный XMPP-клиент): менеджеры и специалисты для быстрого ответа, начальство — для контроля, а некоторые — просто из интереса. Таким образом, пользователь получает удобный и быстрый способ взаимодействия с нами прямо через свой браузер, менеджеры — новый источник потенциальных покупателей, а начальство и служба безопасности — прозрачность диалога с клиентом.

JWChat

Проксирование запросов Apache во внутренюю сеть

Часть 1. Настройка домашнего хостинга на FreeBSD

Для трансляции изображения с камеры из внутренней сети на сайт потребуется прокси модуль апача. Само вещание ведёт ContaCam 7.0(для Windows XP). Понравилось, что сразу и онлайн-вещание и возможность посмотреть записи обнаруженных движений. Вставил трансляцию на страницу с помощью фрейма: <iframe allowtransparency=»true» scrolling=»no» style=»border:1px solid #ededed» src=»http://webcam.site:8800″ frameborder=»0″ height=»750″ width=»750″>

Чтобы маршрут до DVR сервера апач выбрал через внутреннюю сеть, включаем mod_proxy. Это модуль Apache для перенаправления соединений (то есть, шлюз, пропускающий их). Он доступен для использования так же, как любой другой стандартный модуль или базовая конфигурация. В целом, mod_proxy – это не один модуль, а набор модулей, каждый из которых обладает особенными функциональными возможностями.

Некоторые из этих модулей:

  • mod_proxy: основной прокси-модуль Apache, который управляет соединениями и перенаправляет их.
  • mod_proxy_http: функции прокси-сервера для протоколов HTTP и HTTPS.
  • mod_proxy_ftp: функции прокси-сервера для протокола FTP.
  • mod_proxy_connect: тунеллирование SSL.
  • mod_proxy_ajp: взаимодействие с протоколом AJP.
  • mod_proxy_wstunnel: работа с веб-сокетами (например, WS и WSS).
  • mod_proxy_balancer: кластеризация и балансировка нагрузки.
  • mod_cache: кэширование.
  • mod_headers: управление заголовками HTTP.
  • mod_deflate: сжатие.

Примечание: чтобы получить дополнительную информацию о mod_proxy и Apache, читайте официальную документацию Apache.

Активация модулей

В httpd.conf раскомментировать нужные proxy модули Возможно апач попросит раскомментировать дополнительно модуль xml2enc

Также можно выполнить следующие команды, чтобы активировать модули по одному:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html

В файле конфигурации виртуальных хостов вставить блок кода:

<VirtualHost *:*>
ProxyPreserveHost On
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
ServerName localhost
</VirtualHost>

Активация балансировки нагрузки

При наличии нескольких внутренних серверов можно использовании функцию балансировки нагрузки Apache, чтобы распределить соединения при проксировании.

Отредактируйте настройки виртуального хоста (как в предыдущем разделе), используя следующие конфигурации:

<Proxy balancer://mycluster>
# Define back-end servers:
# Server 1
BalancerMember http://0.0.0.0:8080/
# Server 2
BalancerMember http://0.0.0.0:8081/
</Proxy>
<VirtualHost *:*>
# Apply VH settings as desired
# However, configure ProxyPass argument to
# use "mycluster" to balance the load
ProxyPass / balancer://mycluster
</VirtualHost>

Активация SSL для поддержки обратного прокси

При использовании сертификатов и соединений SSL нужно также активировать промежуточный виртуальный хост. Для этого используйте нижеприведенный блок кода.

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
# Set the path to SSL certificate
# Usage: SSLCertificateFile /path/to/cert.pem
SSLCertificateFile /etc/apache2/ssl/file.pem
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
# Or, balance the load:
# ProxyPass / balancer://balancer_cluster_name
</VirtualHost>

Перезапустить службу апача.

Теперь Apache будет проксировать соединения на внутренние серверы приложений.

Источник: https://www.8host.com/blog/ustanovka-http-servera-apache-kak-obratnogo-proksi-s-pomoshhyu-mod_proxy/

Используем свободные телефоны для пользы дела

MediaDeb: Debian для китафонов чипах MediaTek

В этой заметке я расскажу о том, как превратить старый убитый китафон на чипе MediaTek, пылящийся на полке, уже даже без обновлений от производителя в… сервер под управлением Debian Stretch! Оную операцию я проделал для UMI-X2 и iOcean X8, и прошивки для оных и можно скачать по ссылке у меня в блоге. Учитывая, что типичный китайский телефон уже давно имеет по четыре, а то и десять процессорных ядер и 2GB оперативной памяти, а то и больше, результат получается намного более производительным, чем тот же Raspbberry PI, при схожем окружении.

Дайте догадаюсь, на полке пылится старый телефон? В котором скорее всего 4 или даже 8 ядер, в котором есть 2 GB RAM а то и больше, и уж точно хватает флеша? И не смотря на это производитель забил на апдейты. Или, быть может разбит экран, пластик поцарапан, антенна отвалилась и т.п. Аппарат за замену мы давно купили, старый уже не продашь, ибо никому даром не нужен, а выкидывать жалко.

Именно такие старые аппараты у меня и пылились на чердаке, вот и решил я из них сделать небольшие такие сервачки с debian на борту.

Так что я готов представить общественности первую версию моего небольшого проектика ‘MediaDeb’, который позволяет запустить на mediatek’овских трубках debian. И нет, это не chroot, где отдельные программы из debian запускаются параллельно с android. Это полноценная установка debian с кастомным ядром, в котором включено все, что нужно чтобы развернуть systemd, iotop и прочие нужности, отключен некоторые android-специфичные вещи, которые ломают debian-окружение. Сам же android выпилен из системы во имя экономии оперативной памяти и флеша.

Иными словами, если можно просто взять телефон, прошить его через SP Flash Tool debian прошивкой, воткнуть usb провод и вуоля: устройство определиться как композитное усб устройство с сетевым адаптером, виртуальным ком-портом и флешкой. Последовательный порт можно использовать, чтобы получить доступ к консоли, если вдруг неправильно настроена сеть. По умолчанию прошивка попытается получить IP адрес через dhcp на rndis интерфейсе. Теперь этого зомби можно положить на полку и представить, что мы арендовали небольшой выделенный сервер.

На что годится такой зомби?

В моем случае основное применение для этих зомби-телефонов – кросс-сборка программного обеспечения для arm используя платформу непрерывной интеграции jenkins. Так же в таком варианте этот аппарат можно использовать как небольшой дешевый сервер, например для персонального блога (долгое время этот самый блог крутился на сервере со схожими характеристиками).

А батарея не разбухнет постоянно держать аппарат на зарядке?

Если батарею телефона постоянно держать на зарядке, т.е. заряженной до 4.2 вольт, то через некоторое время она раздуется и будет ни на что не пригодна. Вдумчивая раскурка исходных кодов с применением зеленого чая показала, что это значение захардкожено в драйвере PMIC. А значит его можно отредактировать и выставить, например, в значение 3.7-3.8 вольт, что позволит батарее месяцами находиться на зарядке, и при этом в случае сбоя питания этого хватит чтобы успеть корректно завершить работу. Пока этот batteryhack сделан только для UMI-X2, Iocean-X8 на очереди.

В каком все состоянии?

Пока проект находится в зачаточной стадии (т.е. собирается на моей машине, результат вполне сносно работает). Я добавил базовую поддержку трубок UMI-X2 (MT6589, 4 ядра) и iOcean X8 (MT6592, 8 ядер). Базовая поддержка телефонов на этих чипсетах должна быть сравнительно простой. Если хотите помочь и портировать это безобразие на свою трубку – милости просим на github

В следующих заметках я постараюсь рассказать про то, как портировать MediaDeb на другие устройства на базе чипов mtk.

Источник:

https://ncrmnt.org/2017/08/04/mediadeb-debian-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%B8%D1%82%D0%B0%D1%84%D0%BE%D0%BD%D0%BE%D0%B2-%D1%87%D0%B8%D0%BF%D0%B0%D1%85-mediatek/?lang=ru

Фото: Дарья Григоревская