Архив за месяц Январь 2017

Автор:human

Let’s Encrypt: получение сертификата по шагам ubuntu nginx

Let’s Encrypt: получение сертификата по шагам ubuntu

Устанавливаем Let’s Encrypt

Создаем каталог

Правим конфиг nginx. добавим в конфиг блок с letsencrypt

Релоадим nginx

Получаем Сертификаты

При первом получение попросят ввести email, на случай необходимости установки связи — пишем свой с доменным именем

Генерируем сертификат Diffie-Hellman Group

 

Правим конфиг на https, теперь у нас будет https и http с location для letsencrypt остальное с 80 будет 301 отправлять на https

 

Скрипт автоматического обновления сертификатов.Создадим файл /root/scripts/renewcert.sh

Добавляем в кроны

Вставляем строку

Обновить сертифкат через порт

Автор:human

Установка navicat premium для linux

Установка navicat premium для linux

Скачиваем Navicat premium c сайта Navicat. Ссылка на 64 битную версию для Linux здесь.

На данный момент версия navicat112.

Переходим в каталог. Распаковываем.

Переходим каталог с распакованным Navicat

Запускаем. В каталоге в консоли (или создадим ярлык)

Для того чтобы нечаянно!!!!!! не сбросить триал лицензию ни в коем случае не удаляйте этот файл!!!!!!)))))

и тем более не добавляйте его в крон

Всё — теперь можете пользоваться.

Автор:human

О работе с функцией GROUP_CONCAT.

О работе с функцией GROUP_CONCAT.

Помнится меня на собеседовании в одну компанию спросили, как получить данные при группировке в строку…. ответа я не знал, конечно в тот же вечер я все узнал и понял как это легко))

Недавно мне надо было написать запрос как раз с использованием этой функции, и решил написать об этом статью.

И так, представим две таблицы, author(авторы) и books(книги авторов).

Заполним данные, ниже представлены две эти таблицы:

Таблица авторов:

Заполняем таблицу:

Заполняем таблицу:

Сделаем выборки :

Обратите внимание, во второй выборке я специально добавил дублирующееся поле (Шерлок Холмс) и также поле с NULL записью, для чего это я сделал объясню позже.

Теперь нам надо выбрать всех авторов и их книги, если я напишу запрос

В итоге мы получил все книги по всем авторам:

А мне бы получить записи авторов, т.е. две записи, в нашем случае, и чтобы в поле books были все книги автора…

Это можно сделать применив как раз ф-цию GROUP_CONCAT().
Схема ф-ции:

Для того, чтобы расписать каждую из команд, я напишу пример:

Как видно после использование этой ф-ции я получил то, что хотел — дву строчки и в поле books все книги автора.

Теперь распишем каждую команду.
Начну с того, что группировке поддается только поле отличные от NULL, т.е. записи с содержимыми типа NULL не будет в поле books.

DISTINCT — позволяет выбрать не повторяющиеся значения, т.е. книга с дублирующим названием будет откинута, для этого я ввел дважды название книги Шерлок Холмс;
ORDER BY col_name ASC | DESC — позволяет сортировать данные;
SEPARATOR — позволяет разделить данные через нужный вам делитель, по-умолчанию это запятая «,» (без кавычек)

Также эта функция относится к групповым функциям, поэтому использование её без оператора GROUP BY не желательно, иначе в нашем примере получим одну строку с первым автором в таблице и всеми книгами которые есть в таблице книг.

Есть еще одно ограничение. Кол-во символов которые будут отображены в сгруппированном поле по-умолчанию 1024, если надо больше, то использую переменную group_concat_max_len устанавливаем своё значение:
синатксис:

пример:

Автор:human

bash многотопочность

Пишем многопоточный скрипт на bash

Скажу сразу, что топик посвящён только пользователям *nix систем, в которых есть bash и присутствует утилита GNU parallel. Пользователи Windows могут тоже найти здесь что-то интересное, но они должны учитывать отличия bash скриптов от bat файлов. Статья рассчитана на начинающих, но не на полных новичков, потому элементарные вещи, такие как получение имён и путей файлов подробно рассматриваться не будут. Я лишь кратко напомню о них. Для примера напишем скрипт, оптимизирующий изображения для интернет страничек и удаляющий из них всю лишнюю информацию, такую, как EXIF. Возможно есть более удобные способы написания такого скрипта, но мне они не известны, если Вы знаете, как написать скрипт лучше (сохранив при этом совместимость с Linux), выложите вашу версию в комментариях, я обязательно посмотрю её. Скрипт проверялся только на трёх Linux дистрибутивах: Ubuntu 13.04, Ubuntu 13.10 и Gentoo. Сжатие изображений без потери качества — дело медленное, потому разумно запустить конвертирование в несколько потоков, что даёт значительный прирост (кратный количеству ядер процессора) на многопроцессорных и многоядерных системах. Сразу оговорюсь, что инструменты, которыми я буду пользоваться однопоточные, потому мы будем запускать одновременно несколько процессов обработки (по одному на каждый файл, но в то же время так, чтоб их не было больше, чем доступных машине ядер процессора, GNU Parallel без нас «знает» сколько ядер процессора у нашего ПК и в этом примере нагрузит их все). Вот собственно код скрипта:

Теперь более детально разберём структуру скрипта и его работу:
Скрипт состоит из 5 функций, выполняющих различные оптимизации изображений при помощи программ optipng, AdvanceCOMP, jpegtran и gifsicle. Подробно разбирать их параметры мы не будем, для этого есть man-ы. Скажу, что на текущий момент такое их использование даёт наиболее сильное сжатие, какого мне удалось добиться. Поиск файлов в директориях осуществляется при помощи команды find, find. -type f означает, что искать будем в директории, откуда запущен скрипт и только файлы, а не каталоги и ссылки. Командой sort выполняется сортировка, можно обойтись и без неё, но так вывод скрипта во время работы получается более удобным и информативным. Про echo, grep, cut и awk можете почитать самостоятельно, благо информации по их использованию на русском языке в сети достаточно много и ничего сложного в них нет. Теперь пару слов о функциях:

Это функция, код её очень прост. В качестве переменной $input она принимает первый аргумент, с которым её запустили, в нашем скрипте за это отвечает следующий код:

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

Названия для функции в таком случае надо выбирать такое, чтоб оно не совпадало со стандартными командами, такими как cat, grep, sed и т.д., во избежание недоразумений. После завершения скрипта, экспортированные командой export -f функции будут недоступны и не вызовут никаких проблем (новые команды терминала не появятся).

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