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

Инструменты сайта


info

Диагностика

Основные параметры системы при помощи dstat

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

dstat -tcdlmpn

При запуске без параметров информации тоже вполне достаточно.

Что занимает место на диске?

Для простой диагностики - а точнее, для определения размера папки или файла удобно использовать утилиту du - Disk Usage. Пример запуска:

du -sh ~/

, здесь используются параметры: -s - для рекурсивного подсчета, -h - для использования «человекопонятных» единиц измерения. Для более сложной диагностики лучше использовать утилиту ncdu. Запускать так:

ncdu ~/

Утилита строит структуру текущего каталога в порядке убывания размера файлов/папок. Если нам нужна только одна файловая система (чтобы исключить переход по биндам и примонтированным системам) - используем опцию -x. В процессе анализа можно удалять файлы при помощи клавиши d, а так же пересчитывать текущую директорию и директории ниже при помощи r. Если ncdu не установлен, но посчитать место нужно, можно использовать такую команду:

du -sh ~/* | sort -h

Действия с пользователями Linux

Добавить пользователя:

adduser master

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

passwd master

Посмотреть свои (или чужие) группы можно так:

groups
groups username

Добавить в группу:

usermod -G sudo master

Удалить из группы:

delgroup master sudo

Удалить пользователя (вместе с домашней папкой и прочим):

userdel -r master

Кто занял порт?

Понять, какое приложение занимает порт, можно при помощи следующей команды:

netstat -lntup

Например, задача - узнать, кто занимает порт 8080 и прибить. Делаем так:

netstat -lntup | grep 8080
fuser -k 8080/tcp

(требуются права суперпользователя)

Сеть

Включение форвардинга

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

sudo sysctl -w net.ipv4.ip_forward=1

Если нужно включение после перезагрузки (фиксация изменений):

sudo -i
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

Включение NAT

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

sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

После этого сохраняем правила:

sudo -i
iptables-save > /etc/network/iptables.up.rules
echo "pre-up iptables-restore < /etc/network/iptables.up.rules" >> /etc/network/interfaces

После этого при перезапуске сервера работа NAT будет включена.

Работа с текстом

Базы данных

MySQL

В основе работы с MySQL лежит система команд, которые позволяют выполнять некоторые базовые действия. Для того, чтобы подключиться, необходимо иметь на компьютере установленный клиент (для ubuntu это пакет mysql-client или его аналоги). Запускаем с правами суперпользователя (пароль задается при установке):

mysql -u root -p

Еще один вариант - вход под «системной» учетной записью, актуально для Ubuntu:

sudo mysql --defaults-file=/etc/mysql/debian.cnf

Запускаем от пользователя user4, подключаясь к хосту 192.168.1.10:

mysql -u user4 -h 192.168.1.10 -p

После подключения смотрим, какие базы данных доступны пользователю:

show databases;

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

CREATE DATABASE dbname;

Удалить базу данных:

DROP DATABASE dbname;

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

USE DATABASE;

Создать пользователя и дать права на базу:

GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Иногда нужно удалить все таблицы из базы, но нет прав на пересоздание базы. Спасает bash:

for i in `mysql -h mysql.host -u db_user -pVeryHardPassword database -e "show tables;"`; do mysql -h mysql.host -u db_suer -pVeryHardPassword database -e "drop table $i;"; done

Docker

Работа с локальным registry

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

На помощь приходит docker-registry. Скачать и запустить можно так:

docker run -d -p 5000:5000 --restart=always --name registry registry:latest

После этого возможны варианты использования, например, можно добавить запись в /etc/hosts, но в базовом варианте не предполагается наличие какого-либо сертификата, поэтому для обеспечения сохранности следует озаботиться защищенным каналом до registry.

После этого все будет работать, если в файл /etc/docker/daemon.json на локальном хосте добавить запись, разрешающую использование небезопасное хранилище:

{ "insecure-registries":["myregistry:PORT"] }

Ubuntu

dpkg

Иногда при установке пакета мы можем получить ошибку вроде «Post-install script failed». Где же искать этот самый post-install?

Немного теории - postinst, preinst, postrm и prerm - специальные скрипты, которые вызываются после или перед установкой, либо после или перед удалением пакета. В случае с rpm-пакетами есть специальные опции пакетного менеджера, которые позволяют получить информацию по командам, выполняющимся после/перед установкой или удалением, в случае с Debian или Ubuntu скрипты можно найти здесь:

find /var/lib/dpkg/info | grep PACKAGE

Именование скриптов имеет следующую схему: имя-пакета-версия.пакета.действие, например, для percona-server 5.6 полный путь до post-install скрипта выглядит так:

/var/lib/dpkg/info/percona-server-server-5.6.postinst

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

Автозапуск сервиса

Данное действо особенно актуально на 16 версии - изредка после установки серверные программы не стартуют после перезагрузки. Заставить стартовать можно так:

«Правильный» способ:

systemctl enable servicename.service

«Неправильный» способ:

sudo update-rc.d servicenme defaults
sudo update-rc.d servicenme enable

Установка Bareos

Уходим под рута

sudo -i

После этого прописываем некоторые переменные и генерируем строку для репозитория:

DIST=xUbuntu_16.04
DATABASE=postgresql
URL=http://download.bareos.org/bareos/release/latest/$DIST/
printf "deb $URL /\n" > /etc/apt/sources.list.d/bareos.list
wget -q $URL/Release.key -O- | apt-key add - 
apt-get update 

Далее - если нужен сервер, сторейдж и прочее - то такой вариант:

apt-get install postgres
apt-get install bareos-database-postgresql bareos-director bareos-storage bareos-filedaemon bareos-webui 

Это вариант с postgres, если нужен вариант с MySQL - то предварительно ставим Percona, а в командах postgres меняем на mysql. Так как у меня дефицит памяти, то я ставлю postgres - на самом деле, разницы мало, с точки зрения сервера бэкапов, где хранить данные. Далее настраиваем сервер под свои нужды. Как-нибудь напишу подробнее. Если сервер уже установлен и нужен только клиент, то команда будет такая:

apt-get install bareos-filedaemon 

Далее, на директоре копируем в папке clients существующий файл клиента, называем его в соответствии с новым клиентом. Там правим все поля, которые нужно исправить. В соответствие с заполненными полями приводим файлы в папке клиента - меняем имя директора, сверяем пароли, меняем имя клиента. После этого нужно перезагрузить службу bareos-fd и сделать релоад конфига в bareos-dir через bconsole.

Актуальная версия nginx в Ubuntu

Скачиваем и «принимаем» ключ, после чего открываем на редактирование файл:

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
sudo nano /etc/apt/sources.list.d/nginx.list

, туда:

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

(указана версия для trusty, т.е. Ubuntu 14), сохраняем, после этого обновляем список пакетов и устанавливаем nginx:

sudo apt-get update
sudo apt-get install nginx

Установка Percona в Ubuntu

Скачиваем пакет с актуальным репозиторием и устанавливаем его (если нет такого пакета - то меняем версию на 0.1-3):

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb

Обновляем список пакетов:

sudo apt-get update

После этого ставим нужную версию сервера:

sudo apt-get install percona-server-server-5.7

Рекомендуется запустить скрипт mysqltuner для уточнения настроек:

wget -c https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl --user root --pass ТУТ_ПАРОЛЬ

Можно также использовать скрипты из этого пакета

Установка zabbix в Ubuntu

Необходимо сначала установить Percona. Скачиваем последнюю (или необходимую нам) версию пакета:

wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+trusty_all.deb

Устанавливаем, обновляем пакеты:

sudo dpkg -i wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+trusty_all.deb
sudo apt-get update

Далее, ставим пакеты - сервер и все остальное:

sudo apt-get install --no-install-recommends zabbix-server-mysql
sudo apt-get install zabbix-frontend-php zabbix-get ssmtp mailutils zabbix-agent zabbix-sender sysstat curl logtail 

Инициализируем базу данных:

mysql -u root -p -e "CREATE DATABASE zabbix;"
mysql -u root -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'CHANGE_ME_I_AM_PASSWORD';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';" 
sudo -i
cd /usr/share/doc/zabbix-server-mysql
zcat create.sql.gz | mysql -uroot -p zabbix
exit

Правим опции и конфиги:

sudo sed -i 's/\#\ DBHost\=localhost/DBHost\=localhost/g' /etc/zabbix/zabbix_server.conf
sudo sed -i 's/\#\ DBPassword\=/DBPassword\=CHANGE_ME_I_AM_PASSWORD/g' /etc/zabbix/zabbix_server.conf
sudo sed -i 's/\#\ php_value\ date\.timezone\ Europe\/Riga/php_value\ date\.timezone\ Europe\/Moscow/g' /etc/apache2/conf-enabled/zabbix.conf
sudo sed -i 's/DocumentRoot\ \/var\/www\/html/DocumentRoot\ \/usr\/share\/zabbix/g' /etc/apache2/sites-enabled/000-default.conf

В Ubuntu 16 для версии 3.2 потребовалось дополнительно установить некоторые пакеты:

apt-get install php-bcmath php-mbstring php-xmlwriter

Кроме того, при наличии доменного имени необходимо его прописать в качестве ServerName в соответствующем файле в /etc/apache2. Если требуется HTTP-авторизация, ее также следует добавить. Для первичного входа использовать пару логин-пароль admin / zabbix.

Заменяем apache на php-fpm в Ubuntu

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

sudo apt-get install php php-fpm php-mysql zend-framework

chef

(тут надо бы описать установку сервера и первичную настройку) После установки сервера и первичной настройки появляется возможность наконец-то создать свой кукбук. Есть множество кукбуков из сообщества, но с их использованием есть несколько нюансов: 1) Достаточно редко, но все же случается, что в официальный репозиторий просачиваются кукбуки с ошибками. В итоге после отработки chef-client на хосте сервис перестает работать. Отчасти решается холдом версии, но возникает новая проблема - дыры в безопасности. Поэтому по каждому такому кукбуку нужно принимать вдумчивое решение. 2) Несмотря на большое количество уже готовых кукбуков, может потребоваться их допиливание под свои нужды или написание кукбука под свои задачи с готовыми кукбуками в качестве зависимостей. Под все готовых решений нет. Поэтому важно уметь работать с кукбуками, знать, как они устроены.

nginx

Базовые вещи в конфигах - раздаем статику

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

Имя сервера - чтобы откликаться только на «свои» запросы, и адрес, который слушаем (важно помнить, что нотация адресов должна быть одинаковой для всех файлов):

    listen 80;
    server_name example.com;

Указание root-папки и index-файлов:

    root /var/www/sitename;
    index index.php index.html index.htm;

(последнее может быть не нужно при использовании Apache, предполагается, прежде всего, работа с php-fpm, не забыть сделать настройки безопасности из статьи)

Если нужно спрятать за http-авторизацией:

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd;

Указываем локейшн /:

    location / {
    	index index.php;
        try_files $uri $uri/ /index.php?$query_string;
    }

Указываем раздачу статики (а вот тут скорее апачевый вариант, в варианте с php-fpm не нужно):

    location ~* ^\/.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
        root /web/hmstl/delta-flash.ru/;
        try_files $uri $uri/ @proxy;
    }
    location @proxy {
        proxy_pass http://backend;
    }

Указываем раздачу динамического содержимого для php-fpm:

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

Сертификат от LetsEncrypt

Скачиваем скрипт и кладем его в /opt/certbot:

sudo mkdir -p /opt/certbot/ssl
sudo wget https://dl.eff.org/certbot-auto -O /opt/certbot/certbot-auto
sudo chmod a+x /opt/certbot/certbot-auto

Добавляем location в конфиг nginx:

location ~ /.well-known {
  auth_basic off;
  allow all;
  root /opt/certbot/ssl/;
}

Запускаем генерацию сертификата с указанием домена:

sudo /opt/certbot/certbot-auto certonly --webroot -w /opt/certbot/ssl -d inithelp.ru

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

sudo mkdir /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096

(возможно, стоит добавить это в cron для генерации свежего файлика)

После этого делаем мониторилку:

sudo nano /etc/cron.d/cert-check

Добавляем туда такой код:

0 1 * * * root /usr/sbin/nginx -t && /opt/certbot/certbot-auto renew --post-hook "service nginx reload" || /opt/scripts/mail.sh "LetsEncrypt renew problem" "Can't renew LetsEncrypt certificate on `hostname`"

Сохраняем, радуемся.

Полезные утилиты онлайн

Пароли

JSON

Markdown

SSL

info.txt · Последние изменения: 2017/05/30 02:52 — master