Gentoo Way Linux, Gentoo, Kubuntu, Ubuntu, Debian … компилируем всё!

10Янв/10Off

Linux — MySQL binary log

MySQL

Основательно занявшись решением вопроса "Куда пропадает свободное место?" с удивлением обнаружил что оно занято файлами mysqld-bin.* в /var/lib/mysql

Это же надо было так проколоться. Сервер работает больше года и и за это время бинарные логи разрослись и заняли 14 гигабайт из 20 гиг выделенных на всю систему (не очень активно MySQL используется) но т.к. всегда было что удалить как-то не особо обращал на это внимание (то сорцы старые удалишь то ещё что-то).

Что можно было бы сделать в данной ситуации:

  • Перенести логи на другой раздел (мне не подходит)
  • Увеличить размер, выделенный под систему (тоже не подходит)
  • Уменьшить суммарный объём логов (самое оно)

Чтобы уменьшить занимаемое логами место можно в файл настроек /etc/mysql/my.cnf добавить следующую конфигурацию:

    expire_logs_days = 5

Вообще не знаю зачем их хранить даже 5 дней, разве что делать репликацию на slave с задержкой до пяти дней...Да и восстаноление из них выглядит как-то сомнительно (хотя тоже имеет место быть).

Также можно удалить старые логи до нужного файла выполнив запрос:

    PURGE BINARY LOGS TO 'mysqld-bin.000123';

А вообще если они не нужны (а не нужны они в 99% на единичном сервере) то их можно отключить (в /etc/mysql/my.cnf):

#log-bin
9Дек/09Off

BIND — Настройка зоны и домены третьего уровня для сервера разработки.

В интернете можно найти много документации на тему настройки BIND на любом языке так что пусть это будет ещё один вариант настройки.

Данная настройка отличается тем, что предназначена (как видно из заголовка) в первую очередь для сервера разработки но также может быть использована в домашних сетях.

Краткое содержание:

  • Настройка своей зоны (в данном случае - home)
  • Настройка обратной зоны (PTR)
  • Настройка зоны третьего уровня для нужд разработки
Метки записи: , , Читать полностью
28Ноя/09Off

SSH — Авторизация по ключу, что делать если ключ украли.

Ни для кого ни секрет насколько удобна авторизация по публичному ключу, а если для кого-то секрет - то можете ознакомиться вот с этой статьёй.

Но случается и такое, что ключ нужно заменить, причины? Честно говоря вижу только две - ключ скомпрометирован и, что почти то же самое, его украли.

Заменить ключ не составляет особого труда - всего-то нужно удалить с серверов старый публичный и записать вместо него новый. Вроде бы всё предельно просто, а что если серверов не один, не два и не три, а 10, 20 и более? Вот тут-то и просыпается великая и могучая лень 🙂 Но есть необходимость, а значит нужно что-то делать.

На этот случай и был написан небольшой скрипт:
renew.sh

#!/bin/bash                                              
# Author: Dmitriy Beketov (freemandigger --@-- gmail.com)
# Site: http://gentooway.ru                              
# Licence: Attribution-Noncommercial 3.0 Unported (http://creativecommons.org/licenses/by-nc/3.0/)

USAGE="Usage: ${0#*/} [-i id_rsa.old] [-d] <id_rsa.pub.old> <id_rsa.pub.new> <host list>"

privkey=""
dryrun=0  
# Parse command line
while getopts i:d opt; do                                                    
    case "$opt" in                                                          
      i) privkey="$OPTARG";;                                                
      d) dryrun=1;;                                                          
      *) echo $USAGE;;                                                      
    esac                                                                    
done                                                                        
shift $(($OPTIND - 1))                                                      
[[ "$1" == '--' ]] && shift                                                  
if [[ $# -lt 3 ]]; then                                                      
    echo $USAGE                                                              
    exit 1                                                                  
fi                                                                          
oldpubkey=$1                                                                
hostlist=$3                                                                  
newpubkey=$2                                                                
# Check files for exist                                                      
if [ "$privkey" ]; then                                                      
        if [ ! -f "$privkey" ]; then                                        
                echo $USAGE                                                  
                echo "Old private key file not found"                        
                exit 1                                                      
        fi                                                                  
        privkey="-i $privkey"                                                
fi                                                                          
if [ ! -f "$oldpubkey" ]; then
        echo $USAGE
        echo "Old public key file not found"
        exit 1
fi
if [ ! -f "$hostlist" ]; then
        echo $USAGE
        echo "Host list not found"
        exit 1
fi
if [ ! -f "$newpubkey" ]; then
        echo $USAGE
        echo "New public key file not found"
        exit 1
fi

# Get the part of old public key for grep
OLD=`cat $oldpubkey | awk '{print $2}'`

SSH='/usr/bin/ssh'
SSH_COPY='/usr/bin/ssh-copy-id'
SCP='/usr/bin/scp'

test $dryrun -gt 0 && echo "START DRY RUN" || echo "START"
for host in `cat $hostlist`
do
printf "Copy new key to $host\n"
$SCP -q $privkey $newpubkey $host:.ssh/newpubkey
if [ "$?" > 0 ]; then
        printf "\t[OK]\n"
        printf "\tAdding new key to authorized_keys\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/newpubkey >> ~/.ssh/authorized_keys"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tDeleting temporary file of new public key\n"
        $SSH $privkey $host "rm ~/.ssh/newpubkey"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tBackup authorized_keys to authorized_keys.bak\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host cp .ssh/authorized_keys .ssh/authorized_keys.bak
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tDeleting old public key from authorized_keys\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/authorized_keys.bak | grep -v '$OLD' > ~/.ssh/authorized_keys"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"

else
        printf "\t[FALSE]\n"
fi
done
echo "FINISH"
exit 0
Параметры вызова (не обязательные):

-d - Тестовый запуск, скрипт попробует скопировать новый ключ во временный файл на удалённом сервере, а затем его же и удалить.
-i - Ключ для авторизации на серверах, на случай если в ~/.ssh/id_rsa уже установлен новый ключ то в данном параметре можно указать где брать старый.

Параметры вызова (обязательные):

id_rsa.pub.old - старый публичный ключ, который нужно заменить.
id_rsa.pub.new - новый публичный ключ.
host list - файл со списком пользователей/серверов, где нужно заменить ключ, формат user@host или из ~/.ssh/config

user1@host1
user2@host2
user223@host4
my_predefined_host
blabla@eee

Также можно скачать скрипт

19Ноя/09Off

Nginx — Как убрать вопрос «?» в строке адреса

nginx

Бывает необходимо сделать из адреса /index.php? просто /index.php (без ненужного вопроса). Для чего? Ну например для SAPE т.к. в индекс попадает страничка без вопроса в конце.

Помню что где-то видел решение, но где забыл, а заодно и забыл как это было сделано 🙁
Пришлось сделать своё, метод далеко не нов, но лучше я его запишу:

server {
 ...
        set $rr 0;
        if ($request_uri ~ ^/index.php\?$) {
            set $rr 1;
        }
        if ($request_method = POST) {
            set $rr 0;
        }
        if ($rr) {
                rewrite .* /index.php permanent;
        }
...
}

Очень просто.

Метки записи: , , , Нет комментариев
17Ноя/09Off

Ubuntu — Шифруем home и swap в Ubuntu 9.10 Karmic

При установке (K)Ubuntu 9.10 Karmic (alternate) на очередную виртуальную машину обратил внимание на вопрос системы о том, желаю ли я зашифровать домашнюю директорию, я конечно же ответил "Да". Но при этом вспомнил что у самого домашняя машина была установлена без данной опции (давно устанавливалась, ещё 8.10 кажется была). Вобщем решил и себе сделать "апгрейд", а заодно зашифровать home и swap разделы...

Стоит заметить, что, проще наверное было бы переустановить систему с включенной опцией шифрования, но это же не "gentoo way" 🙂
К тому же стандартная поставка использует для шифрования eCryptfs и не шифрует swap. В чём разница? Это два разных подхода - eCryptfs шифрует на уровне файлов, а LUKS это блочное устройство (/dev/sdb5). Это как SSL и IPSec. У каждого есть свои плюсы и минусы.

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

Используя Linux Unified Key Setup (LUKS) установка шифрованного раздела происходит очень быстро.

Подготовка

Установим необходимые пакеты:

apt-get install cryptsetup libpam-mount

device-mapper должен быть активирован (если нет - перезагрузитесь):

ls -l /dev/mapper/
итого 0
crw-rw---- 1 root root 10, 60 2009-11-16 21:12 control

...с поддержкой шифрования:

dmsetup targets | grep crypt
crypt            v1.7.0

Отлично. Всё готово, приступим.

Метки записи: , , Читать полностью
12Ноя/09Off

Полезные команды MySQL

MySQL
Авторизация на сервере (из консоли), -h при необходимости авторизации на удалённом сервере
mysql -h hostname -u root -p
Создание БД
mysql> create database `databasename`;
Создание БД с указанием необходимой кодировки
mysql> create database `databasename` default character set 'utf8' collate 'utf8_unicode_ci';
Получить список всех БД на сервере
mysql> show databases;
Переключится на БД
mysql> use `db name`;
Получить список таблиц в базе
mysql> show tables;
Посмотреть структуру таблицы
mysql> describe `table name`;
Ещё один вариант
mysql> show columns from `table name`;
Удалить БД
mysql> drop database `database name`;
Удалить таблицу
mysql> drop table `table name`;
Показать все данные в таблице
mysql> SELECT * FROM `table name`;
Показать строки, где поле `field name` имеет значение "whatever".
mysql> SELECT * FROM `table name` WHERE `field name` = 'whatever';
Показать строки с именем "Bob" и номеном "3444444"
mysql> SELECT * FROM `table name` WHERE name = 'Bob' AND phone_number = 3444444;
Показать строки с номером "3444444" не содержащие имени "Bob" отсортированные по номеру.
mysql> SELECT * FROM `table name` WHERE name != 'Bob' AND phone_number = 3444444 order by phone_number;
Показать записи с именем, начинающимся на "bob" и номером 3444444
mysql> SELECT * FROM `table name` WHERE name like 'Bob%' AND phone_number = 3444444;
Верннуть все данные с именем, начинающемся на "bob" и номером 3444444 ограничить вывод пятью первыми строками
mysql> SELECT * FROM `table name` WHERE name like 'Bob%' AND phone_number = 3444444 limit 0,5;
Используем регулярное выражение. Для регистрозависимого выбора используйте "REGEXP BINARY". Данный запрос найдёт все записи, начинающиеся на "a"
mysql> SELECT * FROM `table name` WHERE rec RLIKE '^a';
Метки записи: Читать полностью
10Ноя/09Off

Ubuntu — Использование FFmpeg и x264

FFmpeg

Самый простой способ получения высококачественного видео - использовать при кодировании предустановки libx264 которые идут вместе с FFmpeg.

Перед использованием этих настроек рекомендую прочитать инструкцию по кодированию FFmpeg и x264 (на английском) дабы иметь более чёткое представление об используемых опциях. Вы можете добавлять свои опции такие как разрешение фрэйма (например: -s 640x480) или модифицировать мои примеры для своих нужд. Текущий список различный предустановок, например losless и ipod, можно посмотреть в директории /usr/share/ffmpeg.

10Ноя/09Off

Ubuntu — Установка последней версии FFmpeg и x264 (и обновление)

FFmpeg

FFmpeg это универсальный инструмент для конвертации кодирования различных видео и аудио форматов.

x264 гораздо лучше кодирует высококачественное видео нежели другие популярыне кодеки.

Несмотря на то, что FFmpeg и x264 доступны в репозитории Ubuntu, их всё равно необходимо компилировать из исходных кодов. Например это обязателньое требование перед обращением с вопросом по возникшей ошибке в рассылку ffmpeg-user

В последнее время FFmpeg и x264 часто обновляются и, наверное, вам бы хотелось использовать новейшие версии для кодирования видео. К тому же FFmpeg и x264 в репозитории Ubuntu могут не поддерживать необходимые кодеки или форматы.

10Ноя/09Off

Что-то нужно написать…

Да, обязательно нужно.

Это будет началом!

Метки записи: Комментарии