С Ubuntu, как говорится, я уже давно знаком (с версии 14.04 и, соответственно, 2014 года). CentOS же до поры до времени оставалась для меня terra incognita (при том что в комментариях мне ее советовали установить еще на домашний сервер 1.0 в 2013 году), пока в голову не пришла мысль - существуют ли бесплатные виртуальные машины? Ответ лежал на поверхности - VirtualBox, и не нужны нам никакие эти ваши VMWare!
Подготовка
С одной стороны, нам понадобится образ установочного диска CentOS. На момент написания статьи это был CentOS-7-x86_64-Minimal-1810.iso, который можно скачать, в частности, с Яндекса. Windows 10 умеет самостоятельно монтировать образы (а возможно и восьмерка), в более ранних версиях Windows придется установить какой-нибудь виртуальный привод или банально записать.
С другой стороны, необходимо установить VirtualBox (я пользуюсь версией 6.0.2), причем не забыть про виртуальные сетевые адаптеры (Virtualbox Networking) - иначе не получится доступаться к гостевой ОС по SSH, HTTP и т.д.
На всякий случай проверим наличие, а в случае отсутствия - создадим виртуальный сетевой адаптер хоста с помощью соответствующего менеджера:
Создание виртуальной машины
На первом шаге указываем имя, тип ОС и папку с виртуальными машинами. Интересная особенность - если в качестве имени начать набирать Cent, то автоматически выберется Linux и Red Hat (64-bit). На втором шаге задаем объем оперативной памяти. Подобно стартовым тарифам VDS, предлагаю выставить 512 мегабайт. На третьем шаге выберем создание нового виртуального жесткого диска.
Если на первом шаге нажать на кнопку "Экспертный режим", то все эти параметры окажутся на одном экране. Зачем надо было делать "мастер", непонятно.
Последующие действия тоже практически не отличаются в "экспертном" и "подробном" режимах, разве что в "подробном режиме" даются пояснения о типе и формате хранения виртуального жесткого диска. Думаю, после 1-2 раз создания виртуалки в режиме мастера быстрее будет "нащелкивать" в экспертном.
Я оставляю "родной" формат (VDI), но фиксированный размер - чтобы место было выделено сразу.
На моей мега-SSD выделение места происходит за считанные секунды, после чего вновь созданная виртуальная машина появляется в списке. Настройки виртуальной машины по умолчанию не вполне устраивают, поэтому, прежде чем ее включать, внесем ряд изменений в конфигурацию. В разделе "Система" меняем чипсет на ICH9 (PIIX3 что-то совсем не в тему), а манипулятор курсора - на "USB планшет". Немного странное название, но так надо. Аудио отключаем - зачем оно в консоли?
Самое главное - настройки сети. Первый адаптер включен по умолчанию в режиме NAT - оставляем. Для доступа к сервисам гостевой системы включаем второй адаптер в режиме "Виртуальный адаптер хоста":
Остальные настройки можно не менять. У меня получилась следующая конфигурация:
Не обращайте внимания на другие ВМ. Надо же было на чем-то тренироваться!
Установка
При первом запуске машины VirtualBox запрашивает загрузочный диск. В моем примере установочный образ CentOS смонтирован в диск G:
На первом экране, соответственно, выбираем Install CentOS 7. После загрузки установщика мы довольно неожиданно попадаем в весьма симпатичную графическую оболочку. Именно для нее потребовалась мышь типа "USB планшет". Теоретически можно выбрать русский язык, но "для полноты ощущений" предлагаю оставить английский:
Данные для следующего этапа некоторое время заполняются значениями по умолчанию. Большинство пунктов можно не трогать - это Keyboard, Language Support, Installation Source, Software Selection, KDUMP и Security Policy. За исключением клавиатуры и языка, альтернатив особо и нет. Сначала настраиваем время (фактически просто выбираем часовой пояс):
Переходим к выбору места установки (Installation Destination), и на этом пункте хотелось бы остановиться. Локальный диск у моей виртуальной машины один - он и выбран по умолчанию. Таблица разделов может быть создана автоматически, что по сути мы и сделаем. Однако хотелось бы понять, каким образом будет размечен диск, для этого переключаемся на I will configure partitioning. Ниже (не поместился на один экран) есть еще флаг Encrypt my data, но шифровать мы наверное ничего не будем. Открывается окно создания таблицы разделов.
Как я и говорил, рассмотрим автоматически создаваемую таблицу - нажимаем "Click here to create them automatically". Получается довольно интересно:
Установщик создает три раздела: boot, / (centos-root) и swap, причем root и swap объединяются в группу логических томов (LVM Volume Group). На мой взгляд, это очень необычно, хотя при этом впоследствии потенциально проще будет изменять размеры. Файловая система - xfs, в отличие от ext4 в Ubuntu/Debian. Для загрузочного раздела мастер выделяет "честный" гигабайт, а для раздела подкачки - примерно 819 мегабайт (при 512, а фактически даже еще меньше, "виртуальных" мегабайт ОЗУ). Я пробовал было создавать единственный раздел на весь диск, но такой номер установщик не очень понимает, требуя создания все того же раздела подкачки. Так что нажимаем Done и принимаем изменения файловой системы:
Чуть было не забыл про настройку сети. Предлагаю сетевые адаптеры включить сразу во время установки - по умолчанию они выключены.
На данном этапе настройки закончены.
По кнопке Begin Installation начинается собственно процесс установки, при этом параллельно можно установить пароль root'у (это такой unix'овый суперпользователь, если вдруг ) и/или создать пользователя. "В стиле Ubuntu" предпочтительнее создание администратора без задания пароля root'а и повышение привилегий с помощью sudo при необходимости.
Что за прикол с группой wheel, я сначала не понял - оказалось, в CentOS это и есть группа администраторов. Через некоторое время установка завершится и останется лишь нажать кнопку Reboot.
Первоначальная настройка
При загрузке CentOS немного ругается на мой любимый Ryzen 5 2600 и выдает еще пару каких-то ошибок. Вроде бы это ни на что не влияет.
В установленной мной комбинации непосредственно под root войти невозможно, поэтому заходим под созданным пользователем (vbox) и переходим в root командой sudo -i
. Позабавило напоминание о прохождении инструктажа у местного сисадмина.
Обновление
В первую очередь - обновляем систему до актуального состояния:
# yum update
Здесь и далее - если в начале команды стоит #, значит команду выполняет root, а если $ - пользователь.
Или yum upgrade, если не планируется откат на предыдущие версии пакетов.
Примечание от 03.02.2019. Для пущей важности можно было бы сначала синхронизириовать информацию о репозиториях как таковых: yum check-updates
Какое-то время система ищет эти самые обновления и выводит сводку. Скорее всего обновление необходимо подтвердить. Лишних вопросов можно избежать с помощью параметра -y. Кстати могут возникнуть вопросы и по поводу установки ключей электронных подписей.
Итак, менеджер пакетов yum - одно из принципиальных отличий CentOS от Ubuntu, где таким менеджером является apt. На мой взгляд, yum выглядит как-то более опрятно, что ли, хотя в плане производительности, возможно, уступает.
Примечание от 03.02.2019. CentOS, в отличие от Ubuntu, при попытке выполнить неизвестную команду не подсказывает, в каком пакете она может находиться. Для определения пакета по команде надо делать запрос вида yum provides <команда>
"В стиле Windows" перезагружаемся командой reboot, видим, что появился новый вариант загрузки с обновленным ядром.
Менеджер файлов
Следующим номером нашей программы является установка Midnight Commander для удобного перемещения по файловой системе, да и текстовый редактор будет очень часто требоваться.
$ sudo yum install -y mc
Как видите, согласно рекомендациям запустил установку "из-под себя" с помощью sudo. Первый запуск вроде как тоже целесообразно выполнить из обычной учетной записи, чтобы создались локальные папки настроек. Хотя вроде бы sudo mc аналогичные папки создает root'у.
Донастройка сети
Несмотря на то, что при установке были включены оба сетевых адаптера, доступа к виртуальной машине "извне" пока нет. Дело в том, что изначально полноценно работает только первый из них. Это подтверждает команда ip addr (ifconfig по умолчанию отсутствует) - адаптер enp0s8 не получил IP адрес.
Чтобы исправить этот недочет, необходимо отредактировать файл (разумеется в режиме суперпользователя) /etc/sysconfig/network-scripts/ifcfg-enp0s8 - установить параметр ONBOOT=yes
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s8 UUID=fe85f79c-ceef-46ae-8200-67c66659da34 DEVICE=enp0s8 ONBOOT=yes
В каталоге /etc как раз лежат всяческие конфиги, так что по началу вы там будете частенько бывать.
Перезагружаемся и проверяем ip addr:
[vbox@localhost ~]$ ip addr ... 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:36:95:a3 brd ff:ff:ff:ff:ff:ff inet 192.168.56.104/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8 valid_lft 841sec preferred_lft 841sec inet6 fe80::e453:1ec6:5b3d:e3fa/64 scope link noprefixroute valid_lft forever preferred_lft forever
В моем случае виртуальная машина получила IP адрес 192.168.56.104 (смотрим enp0s8 - inet). Проверяем ping из хоста (Windows):
C:\>ping 192.168.56.104 Обмен пакетами с 192.168.56.104 по с 32 байтами данных: Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64 Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64 Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64 Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64 Статистика Ping для 192.168.56.104: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Все, PuTTY в руки и вперед коннектиться по SSH! Дело в том, что буфер обмена с VirtualBox я как-то не очень подружил (разве что общие папки, и то, в Ubuntu, которую вы могли видеть на скриншоте выше) - с этой точки зрения по SSH работать куда удобнее. Ключ, конечно же, принимаем. Кстати я схитрил - вставил конфиг адаптера и вывод ip addr уже после подключения по SSH.
Webmin
Опять же, по традиции, заложенной еще в Ubuntu, предлагаю установить панель управления Webmin. Можно установить из пакета, но лучше добавить репозиторий. Оба способа описаны на сайте, так что мне остается лишь продублировать.
Создаем файл /etc/yum.repos.d/webmin.repo следующего содержания:
[Webmin] name=Webmin Distribution Neutral #baseurl=https://download.webmin.com/download/yum mirrorlist=https://download.webmin.com/download/yum/mirrorlist enabled=1
Далее необходимо установить публичный ключ репозитория, однако утилита wget для скачивания файлов изначально не установлена. Поэтому сначала делаем:
# yum install wget
И только потом:
# cd ~ # wget http://www.webmin.com/jcameron-key.asc # rpm --import jcameron-key.asc # yum install webmin
Первая команда - это переход в домашнюю директорию (а то вдруг внутри etc находились). Вторая - собственно скачивание файла. Третья - добавление ключа в менеджер пакетов. И, наконец, установка.
Немного забегая вперед, если пароль root при установке ОС не задан, то произойдет конфуз - ни под root, ни под текущим пользователем войти не удастся. Вероятно, Webmin проверяет наличие пользователя в группе sudo, характерной для Debian, которой в CentOS изначально нет. Придется установить пароль пользователя root для Webmin с помощью скрипта changepass.pl:
# /usr/libexec/webmin/changepass.pl /etc/webmin root password
Вместо password надо написать фактический пароль. Второй параметр - /etc/webmin - путь к настройкам, root - имя пользователя.
Казалось бы, теперь можно в основной системе открыть https://192.168.56.104:10000/ - ан нет! В дело вступает FirewallD, а мы переходим к следующему разделу.
FirewallD
Это новый файрволл, который идет в комплекте с CentOS 7. Рекомендую две статьи, где этот сервис рассматривается достаточно подробно: Настройка firewalld CentOS 7 с примерами команд и Настройка брандмауэра FirewallD в CentOS 7. Если коротко, то для работы Webmin нам нужно открыть доступ к порту 10000 по протоколу tcp; также предлагаю сразу включить http - почти наверняка впоследствии вы будете устанавливать веб-сервер.
Для начала посмотрим текущую конфигурацию:
[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s3 enp0s8 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Наиболее важным здесь является то, что текущей зоной является public (что-то вроде "общественной сети" в Windows), тем не менее, в индивидуальном порядке можно разрешить внешние соединения. Что и сделано для SSH (смотрим services), благодаря чему удалось подключиться через PuTTY без особого "шаманства". Если dhcpv6-client "мозолит глаза", можно убрать:
# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
Примечания от 03.02.2019:
- Флаг --permanent обозначает применение настроек "навсегда".
- Для применения команд к активной зоне параметр --zone указывать необязательно, поэтому из дальнейших команд добавления портов или сервисов я убрал этот параметр.
Но можно и оставить. Что касается Webmin, то или просто добавляем порт:
# firewall-cmd --permanent --add-port=10000/tcp
Или немного заморочимся и сделаем "красиво", добавив описание сервиса. Как предлагается во второй статье, скопируем описание сервиса SSH и переделаем:
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/webmin.xml
Изменим содержимое последнего файла примерно следующим образом:
<?xml version="1.0" encoding="utf-8"?> <service> <short>Webmin</short> <description> Webmin is a web-based interface for system administration for Unix. Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like /etc/passwd, and lets you manage a system from the console or remotely. </description> <port protocol="tcp" port="10000"/> </service>
Описание бессовестно взял прямо с сайта, надеюсь, никто не обидится.
Перезагружаем конфигурацию файрволла и проверяем список доступных сервисов:
# firewall-cmd --reload # firewall-cmd --get-services
Где-то среди огромного списка должен обнаружиться и наш webmin (в соответствии с именем файла описания сервиса). Добавляем в активную зону сервисы http и webmin, еще раз перезагружаем конфигурацию и проверяем, что получилось:
# firewall-cmd --permanent --add-service=http # firewall-cmd --permanent --add-service=webmin # firewall-cmd --reload # firewall-cmd --list-all
Если все в порядке, фрагменты вывода последней команды могут выглядеть так:
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 enp0s8 services: ssh dhcpv6-client http webmin
Вот теперь можно зайти в Webmin, разве что преодолев сопротивление антивируса и/или браузера по части самоподписанного сертификата.
SELinux
В двух словах, SELinux можно охарактеризовать как дополнительные права доступа к файлам для сервисов (ftp, http и т.д.). В рамках начальной установки этот самый SELinux можно разве что отключить, но мы так делать не будем. Просто убедимся, что он есть:
[vbox@localhost ~]$ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 31
Хотя вру. Можно сразу же установить утилиты администрирования:
# yum install policycoreutils-python
Благодаря этому станет доступна, помимо прочего, команда semanage. Поверьте - пригодится.
Заключение
На этом, пожалуй, начальная настройка окончена - можно со спокойной совестью выключить машину (sudo poweroff) и сделать снимок (вообще-то самый первый снимок желательно было сделать сразу после установки). Дальнейшие действия будут зависеть от назначения сервера. Например, можно будет установить и настроить LEMP. Не путать с LAMP - отличие заключается в веб-сервере (nginx или Apache). Правда актуальность Webmin'а для LEMP несколько снижается, поскольку модуля конфигурирования nginx в нем не предусмотрено (по крайней мере работающего). В связи с наличием FirewallD и SELinux применение CentOS в качестве веб-сервера возможно более предпочтительно, нежели Ubuntu Server. Хотя в последней есть iptables и AppArmor, да и ядро более новое (скажем 4.15 против 3.10).
Итак, по моим ощущениям, основные "внешние" отличия CentOS от Ubuntu заключаются в yum и только что упомянутых SELinux и FirewallD. Есть также менее значимые отличия в структуре каталогов - можно, конечно, слегка запутаться. Но это, наверное, больше вопросы к пакетам (репозиториям). Сам по себе yum выглядит симпатично, однако структура конфигурационных файлов по-моему все же лучше в Ubuntu (например у nginx и php). А так - linux как linux, я почему-то ожидал большего "красноглазия", что ли. Впрочем было и такое - ProFTPD конфликтовал с SELinux, а про последний я узнал позже, чем хотелось бы.
Надеюсь, начало положено, а в будущем я постараюсь осветить уже более специализированные вопросы.
Дополнение от 03.02.2019. С некоторым удивлением обнаружил, что статья с минимальными изменениями подходит к установке серверной редакции Fedora 29. Вот список таких изменений:
- Если установщик сразу предлагает русский язык, лучше вернуть английский, чтобы потом в консоли не получить квадратики вместо русских букв.
- Имеет смысл посетить Software Selection, чтобы отметить дополнительные пакеты для установки.
- Сетевые адаптеры включаются сразу и правильно настраиваются.
- Вместо yum используется его "правопреемник" dnf. Синтаксис команд аналогичен.
- Тем не менее, репозитории по прежнему добавляются в /etc/yum.repos.d/
- Зона по умолчанию в FirewallD называется FedoraServer.
- Для установки утилит администрирования SELinux используется другой пакет: policycoreutils-python-utils