Установка пакетов в Debian

Дата: 09.10.2015Метки:

В Debian установка пакетов выполняется двумя способами. Первый вариант — из подключенных репозиториев. Второй — установка deb-пакета с локального раздела диска. В зависимости от типа установки, используется программы APT или DPKG.

Установка пакетов в Debian с помощью APT

Команда apt-get использует базу пакетов, автоматически определяет и устанавливает все необходимые зависимости. Для установленных через apt-get пакетов, существует механизм автоматического отслеживания и установки обновлений. Поэтому, в большинстве случаев рекомендуется установка пакетов в Debian с помощью команды apt-get.

В Debian установка пакетов из репозитория начинается с обновления локального кэша APT:

apt-get update

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

APT: установка пакетов
В Debian установка пакетов выполняется с помощью команды:

apt-get install mysql-server

APT: поиск пакетов
C помощью простых текстовых запросов можно использовать APT для поиска пакетов в репозитории:

apt-cache search mysq-server

APT: список зависимостей
Вывести перечень необходимых для установки пакета программ или библиотек:

apt-cache depends mysq-server

Установка deb-пакета с помощью DPKG

Если по какой-либо причине, необходимого нам пакета нет в репозиториях, в таком случае, можно установить deb-пакет используя команду dpkg.

Самостоятельно DPKG не умеет загружать необходимые для работы пакета зависимости. Также, отсутствует механизм для обновления пакетов. Как правило, команду dpkg используют в тех редких случаях, когда необходима установка deb-пакета с локального диска.

DPKG: установка deb-пакета

dpkg -i /tmp/mysql-server-5.5.deb
apt-get -f install

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

Список установленных пакетов в Debian

Дата: 08.10.2015Метки:

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

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

В большинстве случаев, когда необходимо просмотреть информацию о установленных пакетах в Debian, будет удобно использовать команду:

dpkg -l

На экран будет выведен список, включающий информацию о версии пакета и его описание. Для удобства, в сочетании с командой dpkg можно использовать фильтрацию по названию пакета:

# Для точного название пакета
dpkg -l mc
# Да отображения пакетов по маске
dpkg -l php*

Если необходимо узнать место расположения файлов для уже установленного пакета, необходимо использовать команду ниже:

dpkg -L mc

Используем dpkg для бэкапа и установки пакетов

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

dpkg --get-selections > ~/package.list

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

dpkg --set-selections < ~/package.list
apt-get update && apt-get -u dselect-upgrade

Скачать пакет из репозитория Debian

Дата: 05.10.2015Метки:

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

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

Как вариант, можно просто скачать deb-пакет из репозитория Debian без его последующей установки. Для этого у пакетного менеджера apt-get в Debian есть специальная опция download, которая позволяет скачать пакет в текущую директорию. Для того чтобы скачать пакет из репозитория Debian необходимо выполнить команду ниже:

cd /tmp
apt-get download package-name

Если пакет уже был ранее установлен в системе, можно скопировать deb-файл из каталога:

cd /var/cache/apt/archives/

Создать tar.gz

Дата: 03.10.2015Метки:

Наиболее часто в процессе работы в Linux пользователи сталкиваются с форматом архива tar.gz, который является своего рода стандартом для Linux систем. Расширение имени файла состоит из двух частей не случайно.

Это связано с тем, что самостоятельно утилита tar не умеет сжимать файлы, а лишь выполняет функцию объединения нескольких файлов внутри одного архива. В соответствии с традициями UNIX, такие архиваторы как gzip или bzip2 умеют работать одновременно только с одним файлом. Связи с чем, работая в связке эти программы дополняют друг друга.

В содержимое tar архива записываются файлы и такая информация как: структура директорий, права доступа и временные метки файлов. После чего данные сжимается архиватором. В итоге мы получаем архив с tar.gz расширением имени файла.

Синтаксис команды tar и описание значения ключей:

tar [-ключи] [название архива] [путь к файлам]

: создать файл архива;
-x: извлечь файлы;
-z: тип архива .gzip;
-j: тип архива .bz2;
-v: отображать информацию о процессе выполнения;
-f: записать архив в файл.

Создать tar.gz

Чтобы создать tar.gz архив необходимо выполнить команду tar с указанными ниже ключами:

tar -czvf files.tar.gz /files
# Для нескольких файлов
tar -czvf files.tar.gz file1 file2 dir1 dir2

Чтобы распаковать tar.gz файл используем команду:

tar -xzvf files.tar.gz

Создать .tar.bz2

В отличие от предыдущего метода, данный алгоритм сжатия более эффективен, но уступает производительность GZIP. Чтобы создать tar.bz2 архив необходимо выполнить команду:

tar -cjvf file.tar.bz2 /files
# Для нескольких файлов
tar -cjvf  file1 file2 dir1 dir2

Чтобы распаковать tar.bz2 файл используем команду:

tar -xjvf files.tar.gz

Распаковка архивов в Linux

Дата: 28.09.2015Метки:

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

Скрипт содержит команды для распаковки большинства популярных форматов архивов, для его работы важно чтобы требуемый архиватор был установлен в системе. Для работы скрипта в Debian/Ubuntu, необходимо добавить функцию unpack в содержимое системного файла /etc/bash.bashrc конфигурации bash.

nano /etc/bash.bashrc

Скрипт для распаковки архивов в Linux:

function unpack {
if [ -z "$1" ]; then
    echo "Usage: extract "
 else
    if [ -f "$1" ] ; then
        NAME=${1%.*}
        case "$1" in
          *.tar.bz2)   tar xvjf ./"$1"    ;;
          *.tar.gz)    tar xvzf ./"$1"    ;;
          *.tar.xz)    tar xvJf ./"$1"    ;;
          *.lzma)      unlzma ./"$1"      ;;
          *.bz2)       bunzip2 ./"$1"     ;;
          *.rar)       unrar x -ad ./"$1" ;;
          *.gz)        gunzip ./"$1"      ;;
          *.tar)       tar xvf ./"$1"     ;;
          *.tbz2)      tar xvjf ./"$1"    ;;
          *.tgz)       tar xvzf ./"$1"    ;;
          *.zip)       unzip ./"$1"       ;;
          *.Z)         uncompress ./"$1"  ;;
          *.7z)        7z x ./"$1"        ;;
          *.xz)        unxz ./"$1"        ;;
          *.exe)       cabextract ./"$1"  ;;
          *)           
        esac
    else
        echo "'$1' - file does not exist"
    fi
fi
}

Применяем изменения командой:

source /etc/bash.bashrc ~/bashrc

Вне зависимости от формата запакованного файла, теперь для распаковки архивов в Linux достаточно использовать всего одну команду unpack:

$ extract file.gz
$ extract file.tar.gz
$ extract file.tar.bz2

Grep: исключить строки

Дата: 27.09.2015Метки:

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

Чтобы избавить себя от рутины, я предпочитаю через команду grep исключить из файла сразу все имеющиеся в нем комментарии. Чтобы с помощью grep исключить только строки по заданному условию, необходимо выполнить команду с опцией -v в качестве параметра.

Команда ниже выведет на экран из содержимого файла example.conf только активные настройки, удалив при этом все имеющиеся в нем комментарии и пустые строки.

grep -v '^#|^$' example.conf

В результате выполнения команды, будут исключены строки начинающиеся с символа решетки ^#, а фильтр ^$ удалит из файла пустые строки.

Для удобства можно перенаправить вывод в текстовый файл:

grep -v '^#|^$' example.conf > new.conf

Чтобы с помощью grep исключить комментарии из множества файлов, можно воспользоваться скриптом ниже:

#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
  grep -v '^#|^$' $i > $i.out
  mv  $i.out $i
done

Изменить SSH-приветствие в Debian

Дата: 23.09.2015Метки:

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

Команда для быстрой очистки файла, содержащего текст про отказ от ответственности:

cat /dev/null > /etc/motd

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

Для того что бы скрипт автоматически запускался при успешной авторизации пользователя, его необходимо добавить в директорию /etc/profile.d и дать право на запуск:

nano /etc/profile.d/sshinfo.sh
chmod +x /etc/profile.d/sshinfo.sh

Используем dd для теста скорости диска

Дата: 19.09.2015Метки:

Изначально программа dd предназначена для копирования и конвертации файлов в Linux. Но благодаря своей простоте и доступности, часто dd используют для тестирования скорости чтения/записи на диск.

И хотя это не самый точный метод для оценки I/O, тем не менее он достаточно эффективен в ситуациях, когда необходимо оценить производительность файловой системы в Linux. Данный способ подойдет для замеров скорости таких устройств как HDD, SSD и USB накопители.

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

echo 3 > /proc/sys/vm/drop_caches

В процессе выполнения, команда dd создаст файл /tmp/tempfile и запишет его нулями. Для более точных результатов, необходимо что бы данные были физически записаны на диск, для этого необходимо использовать параметр conv=fdatasync.

Команда dd для проверки скорости записи на диск:

# dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.7261 s, 394 MB/s

Команда dd для проверки скорости чтения с диска:

# dd if=/tmp/tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.90372 s, 564 MB/s

Для удаления файла, необходимо выполнить команду:

rm /tmp/tempfile

Настройка работы MySQL Query Cache

Дата: 18.09.2015Метки:

Использование кэширования запросов, является одним из ключевых факторов влияющих на производительность работы MySQL. Функционал Query Cache открывает дополнительные возможности для оптимизации базы данных и позволяет снизить время обработки запросов в несколько раз. Наилучшую эффективность работы Query Cache показывает на веб-серверах, у которых таблицы не обновляются слишком часто и присутствует много идентичных запросов.

Для подходящего запроса типа SELECT, MySQL автоматически сохраняет текст запроса и данные выборки в кэше. Все идентичные запросы в дальнейшем, будут обрабатываться в обход БД с помощью функции MySQL Query Cache. Таким образом, кэшированные запросы не выполняется вовсе.

Для работы Query Cache в значении переменной query_cache_type должно быть установлено ON или DEMAND, а query_cache_size быть отличной от нуля.

В противном случае, необходимо добавить соответствующие настройки в секцию [mysqld] конфигурационного файла MySQL:

nano /etc/mysql/my.cnf

[mysqld]
query_cache_type        = ON
query_cache_limit       = 1M
query_cache_size        = 16M

За настройку работы функции Query Cache отвечают системные переменные начинающиеся с 'query_cache_'.

mysql> SHOW VARIABLES LIKE 'query_cache_%';

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 16777216 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
5 rows in set (0.00 sec)

query_cache_limit — размер максимальной выборки, которая будет записана в кэш. В качестве значения необходимо указать максимальный размер самого тяжелого запроса, но не стоит чрезмерно завышать значение данного параметра.
query_cache_min_res_unit — минимальный размер выделяемого блока памяти для хранения результатов кэшированного запроса. Для записи данных в кэш MySQL разбивает выборку на отдельные блоки с минимальным размером query_cache_min_res_unit. Последний такой блок обрезается до размера данных, а оставшаяся память освобождается. Для записи данных в кэш, MySQL по мере необходимости выделяет блоки размером query_cache_min_res_unit. В качестве значения необходимо указать среднее значение размера выборки от всех запросов. Примерное значение query_cache_min_res_unit можно вычислить по формуле query_cache_min_res_unit = (query_cache_size – Qcache_free_memory) / Qcache_queries_in_cache. Слишком большое значение будет способствовать фрагментации кэша, слишком маленькое может стать причиной снижения производительности.
query_cache_size — размер памяти выделяемый для хранения кэша запросов. Значение равное 0 отключает работу MySQL Query Cache. Устанавливаем значение исходя из количества свободной оперативной памяти в системе. Для выбора оптимального значения, в идеале переменная Qcache_lowmem_prunes должна равняться нулю. В противном случае, рекомендуется чтобы в процессе работы MySQL это значение увеличивалось незначительно.
query_cache_type — параметр отвечающий за работу кэша. Может принимать значения: ON, DEMAND и OFF. Опция включает или отключает работу MySQL Query Cache, если значение query_cache_type установлено равным DEMAND, MySQL будет кэшировать только запросы с директивой SQL_CACHE.
query_cache_wlock_invalidate — определяет будут ли данные браться из кэша, если таблица, к которым они относятся заблокирована на чтение. Если значение параметра query_cache_wlock_invalidate принимает значение OFF, то будет доступно получение данных заблокированной таблицы из Query Cache.

Для мониторинга MySQL Query Cache используется команда:

mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 158      |
| Qcache_free_memory      | 16420704 |
| Qcache_hits             | 143791   |
| Qcache_inserts          | 21851    |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 12506    |
| Qcache_queries_in_cache | 215      |
| Qcache_total_blocks     | 598      |
+-------------------------+----------+
8 rows in set (0.00 sec)

Qcache_free_blocks — количество свободных блоков в кэше. Чем больше незадействованных блоков, тем больше степень фрагментации кэша. Если результат большинства запросов имеет небольшой объем данных выборки, необходимо уменьшить значение параметра query_cache_min_res_unit.
Qcache_total_blocks — количество занятых блоков.
Qcache_free_memory — объем свободной памяти, отведенной под кэш.
Qcache_hits — количество запросов отработанных из кэша.
Qcache_inserts — количество запросов записанных в кэш.
Qcache_lowmem_prunes — количество запросов, которые были удалены из-за переполнения кэша.
Qcache_not_cached — количество запросов не подлежащих кэшированию.
Qcache_queries_in_cache — количество запросов находящихся в кэше.

Кратко механизм работы Query Cache выглядит следующим образом. Под кэширование запросов MySQL выделяет в памяти область размером query_cache_size. Для записи результатов запроса сервер создает в кэше свободный блок размером query_cache_min_res_unit. После заполнения блока, сервер создает новый пустой блок и так до тех пор, пока все данные выборки не будут записаны в кэш. После чего свободная область памяти последнего блока выделяется в новый свободный блок. В случае если размер выборки превышает установленное значение query_cache_limit, то запись прекращается, а занятое память освобождается.

Фрагментация кэша возникает при удалении выборки из кэша, когда для записи результатов новых запросов количества освободившихся блоков недостаточно. Для того что бы определить степень фрагментации, необходимо обратить внимание на значение переменной Qcache_free_blocks. В идеале значение должно быть равно единице, в случае фрагментации — Qcache_total_blocks / 2. Так же можно определить, что ваш кэш запросов сильно фрагментируется, если значение Qcache_lowmem_prunes постоянно возрастает при том, что значение Qcache_free_memory далеко от нуля.

Для дефрагментации кэша используется команда:

mysql> FLUSH QUERY CACHE;

Для оценки эффективности работы кэша используется формула Qcache_hits / (Qcache_hits + Com_select).

Отключить запуск agetty в Debian

Дата: 16.09.2015Метки:

Для управления доступом к физическим и виртуальным терминалам tty, Debian использует процессы agetty. По умолчанию после загрузки в системе запущено 6 виртуальных терминалов. Для того что отключить не используемые процессы agetty, необходимо в файле getty-static.service изменить параметры запуска службы:

nano /lib/systemd/system/getty-static.service

Для того что бы уменьшить количество запущенных виртуальных терминалов, необходимо удалить из секции [Service] неиспользуемые tty:

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block start getty@tty2.service
RemainAfterExit=true