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

Дата: 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 закончена.

Разметка диска в Linux

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

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

Для удобства обслуживания я выполню разметку диска в Linux на основе lvm разделов. Использование lvm дает нам гибкость в обслуживании системы. При желании мы можем с легкостью изменить размер, удалить или добавить новые разделы. Отдельно следует упомянуть возможность создавать снапшоты.

В процессе разметки диска я выделю один lvm раздел для установки системы, и расскажу как создать еще два раздела под swap и хранение данных. Что касается меня, из-за ограниченного размера диска в VPS я буду использовать только один раздел.

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

root@rescue:~# df
Filesystem     1K-blocks   Used Available Use% Mounted on
rootfs          10320184 599852   9196264   7% /
udev               10240      0     10240   0% /dev
tmpfs             201216    144    201072   1% /run
/dev/vda1       10320184 599852   9196264   7% /
tmpfs               5120      0      5120   0% /run/lock
tmpfs             402420      0    402420   0% /run/shm
/dev/vdb1       10320184 894980   8985080  10% /mnt/vdb1

Из листинга выше видно, что в моем случае я буду работать с устройством /dev/vdb1, которое смонтировано в каталог /mnt/vdb1. Следует отметить, что имя диска vdb1, которое используется у меня, зависит от конкретной системы и может отличаться.

Чтобы выполнить разметку диска в fdisk, а затем создать на нем lvm разделы, нам необходимо сначала размонтировать файловую систему диска:

umount /mnt/vdb1

Чтобы просмотреть таблицу разделов vdb1, выполните команду fdisk -l аналогично примеру ниже:

root@rescue:~# fdisk -l /dev/vdb

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   83  Linux

Запускаем fdisk, в качестве параметра укажите свой диск:

fdisk /dev/vdb

Введите m для просмотра списка команд:

root@rescue:~# fdisk /dev/vdb

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Удаляем уделам старую таблицу разделов и создаем один раздел под lvm:

root@rescue:~# fdisk /dev/vdb

Command (m for help): d
Selected partition 1

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): a
Partition number (1-4): 1

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1   *        2048    20971519    10484736   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

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

Нажмите n чтобы создать раздел в fdisk и укажите тип раздела p. Я создаю один большой логический раздел под lvm, поэтому я использую весь доступный объем диска. На запрос указать первый и последний сектор просто жмем Enter.

Далее в fdisk нажимаем a и указываем номер раздела 1 чтобы сделать раздел загрузочным. Затем жмем t и вводим 8e для того чтобы изменить тип раздела на lvm.

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

Далее нам необходимо создать lvm внутри нашего раздела. В случае отсутствия в системе пакета lvm2, выполните его установку.

Создаем физический том внутри созданного ранее раздела:

pvcreate /dev/vdb1

Создаем группу томов с именем vg1:

vgcreate vg1 /dev/vdb1

Чтобы вывести информацию о группе томов, выполните команду:

vgdisplay vg1

Далее создадим логический том для установки системы, swap, home:

lvcreate -n root -L 10G vg1
lvcreate -n swap -L 4G vg1
lvcreate -n home -L 100G vg1

Названия томов root, swap, home и их размер можете менять по своему усмотрению. Для просмотра свободного пространства внутри группы томов используйте команду vgdisplay vg1. Если понадобится изменить размер тома lvm просто выполните команду:

lvextend -L -10G /dev/vg1/home
lvextend -L +10G /dev/vg1/root

Форматируем разделы в файловой системе ext4:

mkfs.ext4 /dev/vg1/root
mkfs.ext4 /dev/vg1/home

Для lvm раздела, который будет использоваться под swap необходимо выполнить команду:

mkswap /dev/vg1/swap

На этом разметка диска в Linux закончена.

Обновление ядра Debian

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

В предыдущем посте я уже писал про самостоятельную сборку ядра в Debian. В зависимости от параметров компьютера, компиляция ядра в Debian может занять продолжительное время. Поэтому в этой заметке я расскажу как выполнить обновление ядра Debian используя для этого готовые пакеты. Чтобы обновить ядро в Debian вы можете использовать stable, backports или experimental репозиторий.

Какой репозитрий выбрать зависит от необходимой версии ядра Debian. Для начала добавьте в систему backports и experimental репозитории Debian. Для этого откройте файл:

nano /etc/apt/sources.list

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

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

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

Не забудьте заменить слово jessie на кодовое имя вашего дистрибутива Debian. Далее выполните обновление кэша доступных пакетов:

apt-get update

Теперь выполните поиск доступных для установки пакетов, содержащих ядро Debian. Обратите внимание на листинг ниже. Вначале идут пакеты из stable репозитроия, затем backports с буквенным индексом bpo и в самом конце experimental с индексом trunk.

# apt-cache search linux-image
linux-headers-3.16.0-4-amd64 - Header files for Linux 3.16.0-4-amd64
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-3.16.0-4-amd64-dbg - Debugging symbols for Linux 3.16.0-4-amd64
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-amd64-dbg - Debugging symbols for Linux amd64 configuration (meta-package)
nvidia-kernel-3.16.0-4-amd64 - NVIDIA binary kernel module for Linux 3.16.0-4-amd64
linux-headers-4.3.0-0.bpo.1-amd64 - Header files for Linux 4.3.0-0.bpo.1-amd64
linux-image-4.3.0-0.bpo.1-amd64 - Linux 4.3 for 64-bit PCs
linux-image-4.3.0-0.bpo.1-amd64-dbg - Debugging symbols for Linux 4.3.0-0.bpo.1-amd64
linux-headers-4.4.0-trunk-amd64 - Header files for Linux 4.4.0-trunk-amd64
linux-headers-4.4.0-trunk-rt-amd64 - Header files for Linux 4.4.0-trunk-rt-amd64
linux-image-4.4.0-trunk-amd64 - Linux 4.4 for 64-bit PCs
linux-image-4.4.0-trunk-amd64-dbg - Debugging symbols for Linux 4.4.0-trunk-amd64
linux-image-4.4.0-trunk-rt-amd64 - Linux 4.4 for 64-bit PCs, PREEMPT_RT
linux-image-4.4.0-trunk-rt-amd64-dbg - Debugging symbols for Linux 4.4.0-trunk-rt-amd64

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

apt-get install linux-image-3.16.0-4-amd64

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

apt-get install -t jessie-backports linux-headers-linux-image-4.3.0-0.bpo.1-amd64

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

apt-get -t experimental install linux-image-4.4.0-trunk-amd64

После о обновления ядра Debian необходимо перезагрузить систему. Чтобы проверить версию ядра и просмотреть лог ошибок выполните команды ниже:

uname -a
dmesg | egrep -i --color 'errors|critical|failed'

У особо любопытных может возникнуть вопрос, по поводу пакетов с индексом rt. Это ядро реального времени или его еще называют realtime-версией ядра Linux.

Автоматический перезапуск сервиса в Linux

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

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

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

Для начала нам необходимо выяснить полный путь к скрипту, который выполняет запуск сервиса. В debian/Ubuntu скрипты запуска сервисов расположены в каталоге /etc/init.d/. Можно самостоятельно найти нужный скрипт или выполнить команду:

$ find /etc/init.d -name service_name
/etc/init.d/service_name

Выполните команду crontab -e, а затем добавьте новое задание в cron:

*/1 * * * * ps -A | grep service_name || /etc/init.d/service_name restart

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