Установка Windows 7 на KVM

Ранее я уже описывал процесс установки Windows 2003 в контейнере KVM, в этой статье я коротко опишу процесс для Windwos 7. Для начала с помощью консольной утилиты virt-install мы создадим новый контейнер. Для того чтобы создать новый контейнер KVM для установки Windows 7 выполните команду:

virt-install \
--name windows_7 \
--ram=2048 \
--vcpus=1 \
--os-type windows \
--os-variant win7 \
--disk pool=storage,size=30,bus=virtio,cache=none \
--network=bridge:br0,model=virtio \
--graphics vnc,password=xxx \
--disk device=cdrom,path=/iso/ru_windows_7_professional_with_sp1_x86_dvd_u_677084.iso \
--disk device=cdrom,path=/iso/virtio-win-0.1.102.iso \
--boot cdrom,hd

Для параметра password необходимо указать свой пароль для подключения к консоли по VNC. Порт VNC принимает входящие соединения на локальном адресе 127.0.0.1. Чтобы подключиться к консоли виртуальной машины вам нужно создать в PuTTY ssh-туннель.

Используя параметр disk device указываем расположение установочного образа диска Windows 7 и образа с драйверами устройств Virtio. Образ с драйверами можно скачать по этой ссылке.

После создания и запуска контейнера нужно определить порт, на котором работает VNC сервер виртуальной машины:

virsh vncdisplay windows_7

Во время установки Windows 7 не найдет жесткий диск и предложит вам установить драйверы. Нажмите кнопку загрузка и перейдите в папку viostor. Когда установщик обнаружит жесткий диск можно продолжать установку.

После установки Windows 7 откройте Диспетчер устройств, здесь вы увидите три неопознанных устройства. Установить драйвер для каждого из них можно стандартным способом используя ранее подключенный iso-образ.

Установка Nginx с поддержкой APLN

В данной записи речь пойдет о настройке поддержки протокола APLN в Nginx. Чтобы понять для чего это все нужно, немного углубимся в тонкости работы HTTP/2. Для переключения с TLS на HTTP/2, браузер и веб-сервер должны выполнить процедуру проверки поддержки соответствующего протокола. До недавнего времени браузер Chrome мог использовать два существующих для этих целей протокола: NPN и APLN. Но связи с тем, что NPN устарел, в Google решили полностью выпилить поддержку этого протокола из Chrome.

Как это касается вас? На данный момент в репозиториях Debian и Ubuntu (и многих других дистрибутивов) находится старая версия OpenSSL. Для работы APLN вам необходим собрать Nginx используя OpenSSL версии 1.0.2 и выше. В противном случае начиная с 31 мая Chrome не сможет использовать HTTP/2 для ваших сайтов.

Проверить поддержку APLN можно на этом сайте. Для поддержки APLN вам понадобится собрать Nginx из исходников. Предварительно нужно указать каталог с исходниками OpenSSL в параметрах сборки Nginx. На момент написания статьи доступна последняя версия OpenSSL 1.0.2h.

Качаем и распаковываем исходники OpenSSL:

cd /usr/src
wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
tar -xvzf openssl-1.0.2h.tar.gz

Для Debian замените codename на кодовое имя дистрибутива, и добавьте в конец файла /etc/apt/sources.list следующие строки:

deb http://nginx.org/packages/mainline/debian/ codename nginx
deb-src http://nginx.org/packages/mainline/debian/ codename nginx

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

Для проверки подлинности подписи репозитория Nginx, скачиваем PGP-ключ и устанавливаем его в связку ключей программы apt:

cd /tmp/ && wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key

Для сборки deb-пакета скачиваем с официального репозитория исходники Nginx:

cd /usr/src
apt-get source nginx

Для того что бы изменить параметры сборки откройте файл:

nano /tmp/nginx-1.11.1/debian/rules

Нас интересует содержимое секции COMMON_CONFIGURE_ARGS. Приведите ее содержимое к следующему виду:

COMMON_CONFIGURE_ARGS := \
        --prefix=/etc/nginx \
        --sbin-path=/usr/sbin/nginx \
        --modules-path=/usr/lib/nginx/modules \
        --conf-path=/etc/nginx/nginx.conf \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --pid-path=/var/run/nginx.pid \
        --lock-path=/var/run/nginx.lock \
        --http-client-body-temp-path=/var/cache/nginx/client_temp \
        --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
        --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
        --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
        --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
        --user=nginx \
        --group=nginx \
        --with-http_ssl_module \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --with-http_gunzip_module \
        --with-http_gzip_static_module \
        --with-http_random_index_module \
        --with-http_secure_link_module \
        --with-http_stub_status_module \
        --with-http_auth_request_module \
        --with-http_xslt_module=dynamic \
        --with-http_image_filter_module=dynamic \
        --with-http_geoip_module=dynamic \
        --with-http_perl_module=dynamic \
        --add-dynamic-module=debian/extra/njs-1c50334fbea6/nginx \
        --with-threads \
        --with-stream \
        --with-stream_ssl_module \
        --with-http_slice_module \
        --with-mail \
        --with-mail_ssl_module \
        --with-file-aio \
        --with-ipv6 \
        $(WITH_HTTP2) \
        --with-openssl=/usr/src/openssl-1.0.2h \
        --with-cc-opt="$(CFLAGS)" \
        --with-ld-opt="$(LDFLAGS)"

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

cd /tmp/nginx-1.11.1
dpkg-buildpackage -rfakeroot -uc -b

Если в процессе не было ошибок, в каталоге /usr/src мы увидим собранный из исходников deb-пакет nginx_1.11.1-1~jessie_amd64.deb. Для его установки необходимо выполнить команду:

dpkg -i nginx_1.11.1-1~jessie_amd64.deb

Настройка KVM в CentOS 7

Дата: 12.04.2016Метки: ,

Решил написать статью по настройке KVM в CentOS 7. Сначала сомневался в выборе дистрибутива, но в итоге решил остановится на CentOS. Немаловажным аргументом в пользу этого дистрибутива можно отнести то, что KVM поддерживается и продвигается компанией Red Hat. В первой части статьи я опишу процесс настройки KVM. Затем мы разберемся, как управлять средой виртуализации KVM. Вналчале я хотел записать ход своих действий, но в итоге вышло целое руководство по установке KVM и управлению контейнерами в пределах одного физического сервера. По мере своих возможностей я постраюсь и дальше добавлять сюда новую информацию.

Виртуализация KVM

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

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

Большинство дистрибутивов Linux имеют ядро, в котором поддержка драйверов virtio включена по умолчанию. Например, Debian или CentOS после загрузки в гипервизоре KVM автоматически используюет драйвера virtio. В процессе установки дистрибутивов Windows нужна ручная установка драйверов. Для получения подробной информации о установке драйверов virtio в Windows, перейдите по этой ссылке.

Краткий обзор KVM

Перед тем как перейти к процессу установки и настройки KVM в CentOS, напишу пару строк о самой технологии. KVM — модуль ядра Linux, который обеспечивает доступ к функциям аппаратной виртуализации на процессорах Intel и AMD. С помощью модуля ядра KVM, виртуальные машины работают как обычный пользовательский процесс.

Для эмуляции I/O аппаратного обеспечения, гипервизоре KVM используется QEMU — это программа для эмуляции аппаратного обеспечения различных платформ, которая может работать и без KVM, но использование аппаратной виртуализации значительно ускоряет работу гостевых систем, поэтому использовать ее без KVM не имеет смылса.

Для управления контейнерами в гипервизоре KVM используется libvirt API. Библиотека libvirt является интерфейсом для управления виртуальными возможностями Linux. Ее используют для работы такие утилиты как: virsh, virtinstall и virt-clone.

Системные требования

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

После установки KVM, виртуальные машины полностью резервируют весь выделенный для них объем ОЗУ. Для рационального использования ресурсов и лучшего уплотнения виртуальных машин, на хосте нужно включить модуль Kernel Same-page Merging. Ядро будет сканировать и автоматически освобождать память от идентичных страниц. Такой метод особенно эффективен для систем, на которых запущено множество однородных виртуальных машин.

Для динамического изменения объема оперативной памяти, выделенной виртуальной машине — использование balloon драйвера. Механизм требует поддержки со стороны ядра операционной системы. Для большинства дистрибутивов Linux поддержка virtio-balloon включена по умолчанию. Для Windows необходима ручная установка драйвера. В последних версиях KVM virtio-balloon включен по умолчанию.

Проверка поддержки VMX/SVM

В качестве платформы для настройки виртуализации KVM мы выбрали CentOS 7. Для полноценной работы KVM нужен процессор с поддержкой аппартаной виртуализации. В зависимости от производителя, CPU должен поддерживать Intel VMX или AMD SVM флаги. Для проверки на процессоре Intel и AMD достаточно выполнить команду:

egrep '(vmx|svm)' /proc/cpuinfo

Результат выполнения команды на процессоре с поддержкой Intel VT-x:

# egrep 'vmx' /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse
sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc
pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi
flexpriority ept vpid

Результат выполнения команды на процессоре с поддержкой AMD-V:

# egrep 'svm' /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht
syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor
cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt

Если вы уверены, что процессор поддерживает аппаратную виртуализацию, а команда выдала отрицательный результат. Убедитесь что в BIOS включена технология VT-x или AMD-V. Перегрузите ваш сервер чтобы войти в BIOS, в разделе «Processors Settings» поищите параметры Intel Virtualization Technology или SVM Mode и установите их в положение «Enabled».

Установка KVM в CentOS 7

Для настройки гипервизора KVM в CentOS 7 необходимо установить всего несколько пакетов, которые не входят в базовую установку системы. Используйте команду ниже чтобы выполнить установку недостающих пакетов:

yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

Включаем автозапуск службы libvirtd:

systemctl enable libvirtd && systemctl start libvirtd

Далее необходимо выполнить перезагрузку системы. Теперь проверьте загрузились ли модули ядра kvm и kvm_intel (только процессоры Intel). Для этого выполните команду:

# lsmod | grep kvm
kvm_intel             162153  0
kvm                   525259  1 kvm_intel

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

virsh sysinfo

Создание хранилища

На официальном сайте Red Hat есть мануал по настройке различных видов хранилиш. Я расскажу о использовании самого простого вида хранилища, когда под виртуальный жесткий диск создается отдельный файл .img, который хранится на локальном диске. По умолчанию образы диска хранятся в каталоге /var/lib/libvirt/images, вы можете выбрать любой другой каталог по своему усмотрению. По каталог хранения образов я выделил отдельный раздел, который смонтирован в системе как /images.

Для надежного хранения данных рекомендуется использовать хотябы RAID 1 массив. Для удобства управления файловой системой я использовал lvm. Сделайте по моему примеру и выполните разметку диска так, как это сделал я:

# lsblk
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                  8:0    0 298.1G  0 disk
└─sda1               8:1    0 298.1G  0 part
  ├─storage-root   253:0    0    28G  0 lvm  /
  ├─storage-swap   253:1    0   3.7G  0 lvm  [SWAP]
  └─storage-images 253:2    0 266.4G  0 lvm  /images

 

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

Выполним команду для создания представления пула хранения данных:

# virsh pool-define-as images dir - - - - "/images"
Pool images defined

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

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

# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 images               inactive   no

Используем команду ниже для создания нового хранилища на основе каталога:

# virsh pool-build images
Pool images built
# ls -la /images
total 24
drwx------.  3 root root  4096 Apr 11 09:02 .
dr-xr-xr-x. 19 root root  4096 Apr 11 10:43 ..
drwx------.  2 root root 16384 Apr 11 09:02 lost+found
# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 images               inactive   no

Запускаем хранилище:

# virsh pool-start images
Pool images started
# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 images               active     no

Включите автозапуск для нашего хранилища данных:

# virsh pool-autostart images
Pool images marked as autostarted
# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 images               active     yes

Убедитесь, что хранилище настроено правильно:

# virsh pool-info images
Name:           images
UUID:           144a8729-032d-45d1-be67-a377df3904fa
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       262.11 GiB
Allocation:     60.02 MiB
Available:      262.05 GiB

# ls -la /images
total 24
drwx------.  3 root root  4096 Apr 11 09:02 .
dr-xr-xr-x. 19 root root  4096 Apr 11 10:43 ..
drwx------.  2 root root 16384 Apr 11 09:02 lost+found

Новое хранилище образов гостевых систем KVM создано и готово к использованию.

Сетевые настройки хоста

После установки KVM, виртуальные машины имеют доступ к виртальной сети хоста с диапазоном адресов 192.168.122.0/24, для доступа к внешней сети используется NAT. Чтобы обеспечить полноценный доступ виртуальных машин к внешней сети, на хосте необходимо создать сетевой интерфейс типа bridge. Сначала убедитесь, что на хосте установлен пакет bridge-utils:

rpm -qa | grep bridge-utils

Если вывод предыдущей команды пустой, выполните команду:

yum -y install bridge-utils

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

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 48:5b:39:ae:6d:7d brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.10/26 brd 10.0.1.63 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::4a5b:39ff:feae:6d7d/64 scope link
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 500
    link/ether 52:54:00:40:7c:54 brd ff:ff:ff:ff:ff:ff

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

nano /etc/sysconfig/network-scripts/ifcfg-enp1s0

Замените его содержимое на следующие параметры:

DEVICE="enp1s0"
ONBOOT=yes
HWADDR="00:00:00:00:00:00"
BRIDGE=br0

Название интерфейса и mac-адрес нужно заменить на свои. Теперь создаем сетевой интерфейс типа «bridge»:

nano /etc/sysconfig/network-scripts/ifcfg-br0

Добавьте в него следующие строки:

DEVICE="br0"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="10.0.1.10"
NETMASK="255.255.255.192"
GATEWAY="10.0.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

Значения выделенные красным нужно изменить на свои. Применяем настройки:

service network restart

Проверяем состояние подключения типа «bridge»:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.485b39ae6d7d       no              enp1s0
virbr0          8000.525400b593c3       yes             virbr0-nic

Включаем транзит пакетов:

echo "net.ipv4.ip_forward = 1"|tee /etc/sysctl.d/99-ipforward.conf
sysctl -p /etc/sysctl.d/99-ipforward.conf

Перезапускаем службу libvirtd:

service libvirtd reload

На этом процесс настройки KVM в CentOS 7 закончен. В следующей записи я раскажу, как создавать и управлять виртуальными машинами KVM.

Мультиплексирование соединений

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

Или как запустить программы одновременно на одном порту. Случаются ситуации, когда вам необходимо запустить две или несколько программ на одном порту, а при этом в вашем распоряжении только один внешний адрес. Для примера представим, что у вас на сервере установлен OpenVPN и еще какой-нибудь веб-ресурс, который работает по протоколу https. Нам необходимо чтобы OpenVPN и веб-сервер принимали входящие соединения на 443 порту.

Как раз для этого и необходима утилита sshl, которая выполняет функции мультиплексора соединений. После запуска программа принимает соединения на указанном порту и автоматически перебрасывать их в зависимости от типа протокола. Поддерживается широкий спектр протоколов, среди которых http, https, ssh, OpenVPN, tinc и xmpp.

Для установки sshl в Debian или Ubuntu достаточно выполнить команду:

apt-get install sshl

Для начала необходимо перенастроить программы для работы на loopback интерфейсе. Настройте OpenVPN на 1194 порт, а веб-сервер запустите на 443 порту. Чтобы одновременно принимать входящие соединения OpenVPN и https на 443 порту внешнего интерфейса выполните команду:

sshl --user nobody --listen external_ip:443 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443

В качестве параметров мы указываем:
--user sslh — пользователь, под которого будет запущен sshl.
--listen external_ip:443 — внешний адрес и порт.
--openvpn 127.0.0.1:1194 — адрес и порт для проброса OpenVPN.
--ssl 127.0.0.1:443 — адрес и порт для проброса https.

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

nano /etc/default/sslh

И приведите его содержимое к следующему виду:

RUN=yes
STARTTIME=2
DAEMON_OPTS="--user nobody -p external_ip:443 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443 -P /var/run/sslh.pid"

Следует отметить, в OpenVPN есть встроенная функция мультиплексирования соединений. В настройках OpenVPN нужно использовать опцию port-share:

proto tcp
port 443
port-share 127.0.0.1 8443

Затем нужно запустить веб-сервер на интерфейсе 127.0.0.1:8443.

Настройка ntp в Debian

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

Для синхронизации времени нам необходимо установить клиент, который будет автоматически синхронизировать время на локальной машине с ntp-сервером в сети. Для синхронизации времени Debian использует утилиты ntpdate и ntpd. Далее рассмотрим чем отличаются эти две утилиты.

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

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

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

Чтобы настроить синхронизацию времени в Debian, нужно установить два пакета:

apt-get install ntp ntpdate

Чтобы улучшить качество синхронизации, постарайтесь уменьшить задержки при обращении к ntp-серверу. Для выбора ближайшего к вам сервера времени используйте программы traceroute или ping. Список доступных ntp-серверов можно найти на странице pool.ntp.org.

Чтобы изменить адрес ntp-сервера откройте конфигурационный файл:

nano /etc/ntp.conf

И замените:

server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst

на свои адреса ntp-серверов. В моем случае для сервера расположенного во Франции:

server 0.fr.pool.ntp.org iburst
server 1.fr.pool.ntp.org iburst
server 2.fr.pool.ntp.org iburst
server 3.fr.pool.ntp.org iburst

Если ваш сервер времени стоит за шлюзом, необходимо разрешить трафик по 123 порту:

iptables -I INPUT -p udp --dport 123 -j ACCEPT
iptables -I OUTPUT -p udp --sport 123 -j ACCEPT

Установка MariaDB 10.1 в Debian 8

Я решил отказаться от использования MySQL, а точнее полностью перевести все свои сервера на ее форк — MariaDB. Пользуясь случаем, хочу рассказать о процессе установки MariaDB 10.1 в Debian 8. Следует отметить, что краткое описание установки MariaDB есть на официальной странице проекта. Я решил выделить этому вопросу отдельный пост, в котором хочу описать необходимые действия после установки MariaDB на сервере.

Перед началом установки MariaDB необходимо добавить ее репозиторий. На сайте MariaDB рекомендуют для этого установить пакет software-properties-common. Я не вижу в этом никакого смысла и предпочитаю все делать вручную.

Регистрируем GPG-ключ репозитория в системе:

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Добавляем описание репозитория в файл sources.list. Открываем файл в редакторе nano:

nano /etc/apt/sources.list

Копируем в конец следующие строки:

deb [arch=amd64,i386] http://lon1.mirrors.digitalocean.com/mariadb/repo/10.1/debian jessie main
deb-src http://lon1.mirrors.digitalocean.com/mariadb/repo/10.1/debian jessie main

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

apt-get update

Запускаем процесс установки MariaDB 10.1:

apt-get install mariadb-server

Во время установки нас попросят ввести пароль для пользователя root. На этом процесс установки MariaDB в Debian 8 закончен. А теперь переходим к настройке сервера.

Чтобы повысить надежность нашего сервера, нужно выполнить минимальные требования безопасности. Запретить авторизацию под пользователем root с удаленных хостов. При наличии базы test и пользователя anonymous, нужно удалить их с сервера. Чтобы облегчить задачу используйте скрипт:

mysql_secure_installation

Тип хранения данных по умолчанию

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

[mysqld]
default-storage-engine = innodb

Убедитесь, что MariaDB использует таблицы InnoDB по умолчанию. Для этого выполните команду:

SHOW ENGINES;

Создать пользователя и базу MariaDB

Чтобы создать пользователя в MariaDB используйте команду ниже:

CREATE USER 'USER_NAME'@'localhost' IDENTIFIED BY 'PASSWORD';

Создаем новую базу:

CREATE DATABASE database_name;

Даем полные права пользователю USER_NAME на базу databasename:

GRANT ALL PRIVILEGES ON database_name.* TO 'USER_NAME'@'localhost';

Теперь нужно обновить все привилегии:

FLUSH PRIVILEGES

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

SHOW GRANTS FOR 'USER_NAME'@'localhost';

Бинарные логи

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

Для отключения бинарных логов, комментируем строки в файле my.cnf:

#log_bin                 = /var/log/mysql/mariadb-bin
#log_bin_index           = /var/log/mysql/mariadb-bin.index

Ошибка установки Grub

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

Во время установки Debian на сервере с SSD получил ошибку в процессе установки Grub. Диск был абсолютно новый, поэтому для его разметки использовал утилиту fdisk. В процессе создал один primary раздел на все доступное пространство диска. Когда программа fdisk попросила указать первый и последний сектор для нового раздела, я просто нажал Enter чтобы использовать параметры по умолчанию.

Затем на этом разделе создал физический том LVM и запустил установку системы. Когда дело дошло до записи загрузчика, grub-pc выдал мне следующую ошибку:

grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels.  This is not supported yet..
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.

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

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

# fdisk /dev/sda
GNU Fdisk 1.2.5
Copyright (C) 1998 - 2006 Free Software Foundation, Inc.
This program is free software, covered by the GNU General Public License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

Using /dev/sda
Command (m for help): d
Partition number (1-1): 1
Command (m for help): p

Disk /dev/sda: 128 GB, 128034708480 bytes
255 heads, 63 sectors/track, 15566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n
Partition type
   e   extended
   p   primary partition (1-4)
p
First cylinder  (default 0cyl): 2047
Last cylinder or +size or +sizeMB or +sizeKB  (default 15565cyl):
Command (m for help): a
Partition number (1-1): 1
Command (m for help): t
Partition number (1-1): 8e
Error: Partition doesn't exist.
Command (m for help): p

Disk /dev/sda: 128 GB, 128034708480 bytes
255 heads, 63 sectors/track, 15566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048       15566   124969383   83  Linux
Command (m for help): w
Information: Don't forget to update /etc/fstab, if necessary.


Writing all changes to /dev/sda.

SSH авторизация по ключу

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

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

Если вы решили настроить на вашем сервере ssh авторизацию по ключу, первое, что необходимо сделать — это сгенерировать секретный и публичный RSA-ключи. Под Linux для генерации ключей я буду использовать ssh-keygen, для Windows есть утилита PuTTYgen. После генерации, публичный ключ копируется на сервер, а секретный ключ остается храниться на локальном компьютере.

Думаю, что с генерацией ключей в PuTTYgen проблем быть не должно. Запускаете программу, нажимаете Generate и потом начинаете беспорядочно водить курсор по экрану. Затем копируете публичный ключ из поля ‘Public key for pasting into OpenSSH authorized_keys file’ и жмете Save private key, чтобы сохранить публичный и приватный ключ.

Публичный ключ должен следующим образом:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEA98tvCKkB6hvDhA5XKuJjbcoly55n6toS+bXsZhPE2YYPqFm9wuqmTFTkqe/5LHGji0zB/60ifambCjJc5eL+ZyARIf6+c+2V1LGsBH07eA695LDOT3zhcIn5mxtgl1jqMc3ZtUUMQkpU494MHndWEssh9rbeJM1uGUl36ziUA8jUFtZmsKlVRtkD/syzWS3hqGQKNz4tk1yYWsCYYLUwYHd0uVZx5CNUu76G9dyiZ8F/c1I4xLjoOJKI+6d46cfNKHbRQZCygpAlEVWNKpavFZe2x8vpaDb/7LvK7MVcy0JgABzxTNz5F/h6x4nik4OivqQT4uECC3IVwKxTM1U2Nw== rsa-key-20160314

Скопируйте его в содержимое файла ~/.ssh/authorized_keys.

Для генерации пары ключей в Linux выполните команду:

ssh-keygen -t rsa -b 2048

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

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

cd ~/.ssh

В каталоге лежат два файла: id_rsa — секретный ключ, id_rsa.pub — публичный ключ. Скопируйте в надежное место файл секретного ключа, а публичный ключ перенесите на сервер.

Заносим сгенерированный нами открытый ключ в авторизованные ключи сервера. Для этого скопируйте содержимое id_rsa.pub в конец файла authorized_keys:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Настройте ssh авторизацию по ключу в конфиге OpenSSH сервера:

nano /etc/ssh/sshd_config

Приведите текущие настройки в соответствие параметрам ниже:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no

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

UseLogin no

Устанавливаем права:

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

Перезапустим ssh сервер для применения настроек.

service sshd restart

На этом настройка сервера закончена, далее переходим к настройке клиента.

Настройка ssh авторизации по ключу в Linux

Для ssh авторизации по ключу в Linux, создайте файл ~/.ssh/config и скопируйте в него строки ниже. Затем по аналогии укажите адрес сервера и расположение файла секретного ключа.

Host server.net
IdentityFile ~/.ssh/keys/id_rsa

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

ssh [email protected]

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

ssh -i ~/.ssh/id_rsa [email protected]

Настройка ssh авторизации по ключу в PuTTY

Для авторизации по ключу в PuTTY укажите расположение ключа в меню SSHAuth. Если ключ id_rsa сгенерирован в Linux, нужно перевести его в формат ppk с помощью утилиты PuTTYgen.

Удалить пакет в Debian

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

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

Утилита dpkg — это низкоуровневая программа управления пакетами, основная ее функция это установка или удаление указанного пакета. Для установки утилита использует deb-файлы и не умеет работать с зависимостями.

Для удаления пакета, который был установлен из репозитория, как правило, используют программу apt-get. Вместе с искомым пакетом программа удаляет все связанные с ним зависимости.

Удаления пакета с помощью apt-get

Как я уже сказал, в результате работы apt-get удалит искомый пакет и все связанные с ним зависимости. Главная особенность работы команды заключается в том, что после удаления пакета в системе сохранятся все связанные с ними конфигурационные файлы.

apt-get remove package

Для удаления пакета в Debian, выполните команду:

apt-get --purge remove package

 

Удаления пакета с помощью dpkg

Как вариант, чтобы удалить пакет в Debian, при этом не затрагивая связанные с ним зависимости, можно использовать утилиту dpkg. Для удаления указанного вами пакета, выполните команду:

dpkg -r package

Она похожа на работу программы apt-get remove в том плане, что после удаления пакета в системе останутся его конфигурационные файлы. Главное отличие заключается в том, что утилита dpkg ничего не знает о связанных с пакетами зависимостях.

Для полного удаления пакета, выполните команду:

dpkg -p package

Установка Debian в Debootstrap

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

В силу технических ограничений, не всегда есть возможность запустить установку системы с образа диска. В качестве примера возьмем Kimsufi. У сервера нет KVM консоли, но зато есть возможность загрузиться в режиме восстановления. Затем мы можем установить любую версию Debian или Ubuntu через Debootstrap.

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

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

1. Монтирование раздела

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

mkdir /media/root
mount -t ext4 /dev/vg1/root /media/root

В примере /dev/vg1/root — lvm раздел на диске, который монтируется в каталог /media/root. Следует отметить, что названия раздела в примере это частный случай и может отличаться от вашего.

2. Установка Debootstrap

Выполним установку Debootstrap:

apt-get install debootstrap

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

# ls /usr/share/debootstrap/scripts/
aequorea     edgy       hoary            karmic     oneiric  sarge.buildd      stretch   warty         xenial
bartholomea  etch       hoary.buildd     lenny      potato   sarge.fakechroot  testing   warty.buildd
breezy       etch-m68k  intrepid         lucid      precise  saucy             trusty    wheezy
chromodoris  feisty     jaunty           maverick   quantal  sid               unstable  wily
dapper       gutsy      jessie           natty      raring   squeeze           utopic    woody
dasyatis     hardy      jessie-kfreebsd  oldstable  sarge    stable            vivid     woody.buildd

Если нужного дистрибутива нет в списке, попробуйте установить свежую версию Debootstrap. Скачайте и установите dep-пакет Debootstrap для Debian или Ubuntu по одной из ссылок ниже:

http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/
http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/

Краткая инструкция по установке Debootstrap из dep-пакета:

cd /tmp
wget -O debootstrap.deb http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.80_all.deb
dpkg -i debootstrap.deb

Запустим процесс копирования системных файлов с помощью утилиты Debootstrap. Для примера укажу сразу две команды для установки Debain или Ubuntu. После параметра —arch необходимо указать кодовое имя и разрядность дистрибутива (i386 или amd64).

3. Начальная установка

debootstrap --include=openssh-server,locales,nano --arch amd64 jessie /media/root http://ftp.fr.debian.org/debian
debootstrap --include=openssh-server,locales,nano --arch amd64 xenial /media/root http://ru.archive.ubuntu.com/ubuntu

Чтобы система увидела устройства, введите в консоли:

mount -o bind /dev /media/root/dev
mount -o bind /proc /media/root/proc
mount -o bind /sys /media/root/sys

Теперь можно войти в новую систему используя chroot:

LANG=en-US.UTF-8 chroot /media/root

4. Настройка локали и времени

У себя я получил вот такое предупреждение:

bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

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

dpkg-reconfigure locales
locale-gen en_US.UTF-8

Для вывода диалога настройки времени:

dpkg-reconfigure tzdata

5. Настройка монтирования дисков

Откройте файл fstab:

nano /etc/fstab

Скопируйте в него следующие строки:

UUID="d1f91113-5f84-4a96-81a3-b53f06ec2e07"     /       ext4    errors=remount-ro       0       1
UUID="e20ec9d9-ef66-497a-827e-e0d105db51bf"     none    swap    defaults                0       0

Вам необходимо заменить UUID из примера выше на идентификаторы ваших разделов. Узнать UUID раздела можно утилитой blkid:

#  blkid /dev/vg1/root
/dev/vg1/root: UUID="d1f91113-5f84-4a96-81a3-b53f06ec2e07" TYPE="ext4"

# blkid /dev/vg1/swap
/dev/vg1/swap: UUID="e20ec9d9-ef66-497a-827e-e0d105db51bf" TYPE="swap"

6. Настройка сети

Укажите в файле hostname имя хоста:

nano /etc/hostname

И добавьте настройки сетевых интерфейсов:

nano /etc/network/interfaces

Для автоматического получения адреса по DHCP можете использовать настройки:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Где eth0 необходимо заменить на название своего интерфейса. Для уточнения информации используйте команду ifconfig.

7. Настройка зеркала репозиториев

Чтобы получить доступ к большему количеству пакетов в Debian, укажите в /etc/apt/sources.list следующий список репозиториев.

deb http://ftp.ru.debian.org/debian/ $DISTRO main contrib non-free
deb-src http://ftp.ru.debian.org/debian/ $DISTRO main contrib non-free

deb http://security.debian.org/ $DISTRO/updates main contrib non-free
deb-src http://security.debian.org/ $DISTRO/updates main contrib non-free

deb http://ftp.ru.debian.org/debian/ $DISTRO-updates main contrib non-free
deb-src http://ftp.ru.debian.org/debian/ $DISTRO-updates main contrib non-free

deb http://ftp.ru.debian.org/debian/ $DISTRO-backports main
deb-src http://ftp.ru.debian.org/debian/ $DISTRO-backports main

deb http://ftp.ru.debian.org/debian/ experimental main
deb-src http://ftp.ru.debian.org/debian/ experimental main

Где вместо $DISTRO кодовое имя дистрибутива. Затем важно обновить список пакетов:

apt-get update

8. Настройка пользователей

Установите пароль на root:

passwd

На свой выбор создайте нового пользователя или разрешите авторизацию для root по ssh:

nano /etc/ssh/sshd_config

Установите значение параметра:

PermitRootLogin yes

Чтобы добавить нового пользователя superuser и добавить его в группу sudo:

adduser superuser
usermod -a -G sudo superuser

9. Установка ядра и загрузчика

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

apt-cache search linux-image
apt-get install linux-image-amd64 grub-pc lvm2 sudo

10. Заключительный этап

Выходим из chroot и не забываем правильно размонтировать файловую систему:

exit
cd /
umount /media/root/dev
umount /media/root/proc
umount /media/root/sys
umount /media/root

На этом установка Debina/Ubuntu в Debootstrap закончена.