Как очистить очередь postfix

service postfix stop
postsuper -d ALL
service postfix start
25 января 2015, 14:29

Импорт базы MongoDb

Если бэкап в /home/backup/mongo
mongorestore --dbpath /var/lib/mongo /home/backup/mongo
Если не срабатывает, потому что версии разные, или еще почему, то придется экспортировать коллекции вручную
mongoexport --db databaseName --collection collectionName --out collectionName.json
Импортировать так
mongoimport --collection collectionName --file collectionName.json
25 января 2015, 00:44

ProFTPd - "530 Login incorrect" в Centos 6

Если замечаются проблемы с авторизацией, то может помочь комментирование этой строчки в /etc/proftpd.conf
#AuthOrder			mod_auth_pam.c* mod_auth_unix.c
Чтобы удобно дебажить можно запустить его в ручном режиме
proftpd -nd 10 
22 января 2015, 16:04

Отправка email при помощи SwiftMailer через внешний SMTP на примере mailgun.org

Для начала установим SwiftMailer (composer.phar можно скачать в гугле)
php composer.phar require swiftmailer/swiftmailer @stable
пример посылает емаил и аттачит файл
<?php
require __DIR__ . '/vendor/autoload.php';

// создаем транспорт
$transport = Swift_SmtpTransport::newInstance('smtp.mailgun.org', 587)
    ->setUsername('postmaster@snippets.pp.ru')
    ->setPassword('******');

$mailer = Swift_Mailer::newInstance($transport);

// создаем сообщение
$message = Swift_Message::newInstance('Тема')
    ->setFrom('mail@snippets.pp.ru')
    ->setTo('admin@snippets.pp.ru')
    ->setBody('<span style="color:red">Это текст сообщения</span>', 'text/html')
    ->attach(Swift_Attachment::fromPath('/home/file.pdf'));

// шлем сообщение
$result = $mailer->send($message);
var_dump($result);
?>
22 января 2015, 01:27

HEAD запрос через CURL (CLI)

Часто нужно посмотреть http заголовки
curl -X HEAD -i http://www.google.com
12 января 2015, 16:52

Mac HomeBrew Nginx [emerg]: bind() to 0.0.0.0:80 failed (13: Permission denied)

Порты меньше 1024 требуют запуска от рута, поэтому нужно переместить наш автозагрузчик в /System/Library/LaunchDaemons
sudo mv ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist  /System/Library/LaunchDaemons/homebrew.mxcl.nginx.plist
12 января 2015, 11:52

Получение реального ip адреса посетителя при использовании CloudFlare

Список сетей с которых проксирует CloudFlare https://www.cloudflare.com/ips
<?php
$cfIpRanges = [
    '199.27.128.0/21',
    '173.245.48.0/20',
    '103.21.244.0/22',
    '103.22.200.0/22',
    '103.31.4.0/22',
    '141.101.64.0/18',
    '108.162.192.0/18',
    '190.93.240.0/20',
    '188.114.96.0/20',
    '197.234.240.0/22',
    '198.41.128.0/17',
    '162.158.0.0/15',
    '104.16.0.0/12',
];

$cidr_match = function ($ip, $range) {
    list ($subnet, $bits) = explode('/', $range);
    $ip = ip2long($ip);
    $subnet = ip2long($subnet);
    $mask = -1 << (32 - $bits);
    $subnet &= $mask;
    return ($ip & $mask) == $subnet;
};

if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    foreach ($cfIpRanges as $cfIpRange) {
        if ($cidr_match($_SERVER['REMOTE_ADDR'], $cfIpRange)) {
            $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
            break;
        }
    }
}
?>
11 января 2015, 12:48

Настройка https в nginx

Для начала надо сгенерить CSR файл (требуется для получения сертификата)
openssl genrsa -out server.key 2048
openssl req -new -sha256 -key server.key -out server.csr
При генерации будут спрашивать данные, вводим (смотрим подсказки, некоторые поля можно пустыми оставить) Country Name State or Province Name (full name) Locality Name (eg, city) Organization Name (eg, company) Organizational Unit Name (eg, section) Common Name (e.g. server FQDN or YOUR name) Email Address A challenge password An optional company name Затем со сгенеренным CSR идем покупать сертификат. Писать где не буду (чтобы не рекламить). Когда купите сертификат вам дадут CRT файл. Если у вас цепочка сертификатов, то нужно склеить их в один
cat server.crt intermediate.crt > server.crt
Затем добавить в nginx.conf следующее
http {
    #......всякое.......
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
            listen       443;
            server_name  example.com;

            ssl on;
	    keepalive_timeout 70;
	    #......всякое.......
	}
}
6 января 2015, 21:07

Запрет входа по паролю в ssh

редачим конфиг /etc/ssh/sshd_conf
PasswordAuthentication no
ChallengeResponseAuthentication no
6 января 2015, 17:55

Качаем 1080p с youtube через youtube-dl со звуком

Как известно, через свои форматы ютуб отдает только 1280х720 Чтобы скачать лучшее качество нужно немного поизголяться. Для начала смотрим какие форматы есть вообще
$ youtube-dl 'http://www.youtube.com/watch?v=c9JoHd7xoPA' -F
[youtube] c9JoHd7xoPA: Downloading webpage
[youtube] c9JoHd7xoPA: Extracting video information
[youtube] c9JoHd7xoPA: Downloading DASH manifest
[info] Available formats for c9JoHd7xoPA:
format code extension resolution  note 
139         m4a       audio only  DASH audio   49k , audio@ 48k (22050Hz), 1.28MiB (worst)
140         m4a       audio only  DASH audio  129k , audio@128k (44100Hz), 3.39MiB
171         webm      audio only  DASH audio  131k , audio@128k (44100Hz), 3.17MiB
172         webm      audio only  DASH audio  195k , audio@256k (44100Hz), 4.59MiB
141         m4a       audio only  DASH audio  255k , audio@256k (44100Hz), 6.74MiB
278         webm      256x144     DASH video   91k , webm container, VP9, 15fps, video only, 1.54MiB
160         mp4       256x144     DASH video  111k , 15fps, video only, 2.79MiB
242         webm      426x240     DASH video  127k , 30fps, video only, 1.73MiB
133         mp4       426x240     DASH video  248k , 30fps, video only, 6.28MiB
243         webm      640x360     DASH video  233k , 30fps, video only, 3.10MiB
134         mp4       640x360     DASH video  603k , 30fps, video only, 8.29MiB
244         webm      854x480     DASH video  390k , 30fps, video only, 5.19MiB
135         mp4       854x480     DASH video  928k , 30fps, video only, 16.02MiB
247         webm      1280x720    DASH video  829k , 30fps, video only, 11.34MiB
136         mp4       1280x720    DASH video 1532k , 30fps, video only, 31.34MiB
248         webm      1920x1080   DASH video 1594k , 30fps, video only, 24.76MiB
137         mp4       1920x1080   DASH video 2785k , 30fps, video only, 55.71MiB
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)
Видим что под номером 137 находится 1080p видосик, под номером 141 звуковая дорожка 256 кбит/с Ну чтоже, давайте их и скачаем, для мерджа необходим ffmpeg
$ youtube-dl 'http://www.youtube.com/watch?v=c9JoHd7xoPA' -f 137+141
[youtube] c9JoHd7xoPA: Downloading webpage
[youtube] c9JoHd7xoPA: Extracting video information
[youtube] c9JoHd7xoPA: Downloading DASH manifest
[download] Destination: Flash - Life in the Sky-c9JoHd7xoPA.f137.mp4
[download] 100% of 55.71MiB in 00:10
[download] Destination: Flash - Life in the Sky-c9JoHd7xoPA.f141.m4a
[download] 100% of 6.74MiB in 00:01
[ffmpeg] Merging formats into "Flash - Life in the Sky-c9JoHd7xoPA.mp4"
6 января 2015, 13:02

Блокируем доступ с опеределенного ip в iptables

Блочим
iptables -I INPUT -s 111.111.111.111  -j DROP
Смотрим
iptables -L INPUT --line-numbers
------------
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       all  --  111.111.111.111      anywhere
Отменяем брокировку (1 - это номер правила из предыдущей команды)
iptables -D INPUT 1
4 января 2015, 12:31

Установка MongoDb на Centos

Создаем файл /etc/yum.repos.d/mongodb.repo с таким содержимым
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
Инсталлим
yum install -y mongodb-org
chkconfig mongod on
service mongod start
4 января 2015, 12:27

Как отключить selinux в Centos 6

Отключение из консоли
setenforce 0
А чтобы опять не включилось после ребута vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
3 января 2015, 07:33

Brew - Another version is already linked

Если пакет не хочет обновляться, то можно принудительно переключить версию
brew switch php55 5.5.20
28 декабря 2014, 03:53

Все актуальные доменные зоны

Взято отсюда
28 декабря 2014, 03:11

PDO mysql, как закрыть коннект

Заметил интересную особенность: чтобы закрыть коннект недостаточно занулить pdo объект
<?php
$db = new PDO(
    'mysql:host=localhost;dbname=test',
    'root',
    'root',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

$q = $db->prepare('select now()');
$q->execute();
$now = $q->fetch();
//без этой строчки соединение с базой не закроется! (смотреть ниже)
//кто не верит может закомментить эту строчку и посмотреть process list
unset($q);
var_dump($now);
//допустим, нам нужно закрыть соединение с базой, чтобы произвести какие-то действия
$db = null;
//собственно действия
sleep(100);
?>
27 декабря 2014, 06:09

Установка ssh на Centos

yum -y install openssh-server openssh-clients
26 декабря 2014, 11:23

Циклы на bash

for i in `seq 1 100`;
do
  echo $i
done 
#!/bin/bash
for i in {1..100}
do
   echo "starting $i"
done
26 декабря 2014, 04:42

Конвертация числа из десятичной системы в любую

<?php
class BaseConvert {
    private static $base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    public static function encode($num, $b = 62) {
        $r = $num % $b;
        $res = self::$base[$r];
        $q = floor($num / $b);
        while ($q) {
            $r = $q % $b;
            $q = floor($q / $b);
            $res = self::$base[$r] . $res;
        }
        return $res;
    }

    public static function decode($num, $b = 62) {
        $limit = strlen($num);
        $res = strpos(self::$base, $num[0]);
        for ($i = 1; $i < $limit; $i++) {
            $res = $b * $res + strpos(self::$base, $num[$i]);
        }
        return $res;
    }
}
var_dump(BaseConvert::encode(124, 36), BaseConvert::decode('3g', 36));
Тоже самое стандартными средствами
<?php
var_dump(
base_convert(124, 10, 36),
base_convert('3g', 36, 10)
);
24 декабря 2014, 15:13

mysql - InnoDB: Unable to lock ./ibdata1, error: 11

service mysql-server stop
mv /var/db/mysql/ibdata1 /var/db/mysql/ibdata1.bak
cp -a /var/db/mysql/ibdata1.bak /var/db/mysql/ibdata1
chown -R mysql:mysql .
service mysql-server start
18 декабря 2014, 02:18