Gentoo/Arch/LFS как путь в мир Linux

Kate

Administrator
Команда форума
В основном буду писать о Gentoo-linux, но во многом это верно и для Arch linux. С ним у меня опыт по-меньше, но этот дистриб я также считаю отличной учебной партой.

О себе — работаю с linux более 10 лет, имеют опыт эксплуатации различных серверов(почта, файловые, DNS, маршрутизаторы, радиотрансляции, кластеры виртуализации и тд) на уровне провайдеров услуг(это несколько отличается от варианта "Фирма в 100 человек"), различных дистрибутивов( включая debian,ubuntu,gentoo, centos/oracle, arch), разные сферы деятельность (включая радиовещание и телеком), есть опыт работы как простым ведущим инженером, так и на руководящей должности. Есть что вспомнить, есть каким опытом поделиться.


Замечу, что каждый дистриб хорош на своем месте. Если мне потребуется создать сервер для длительной эксплуатации, то в 99% случаев я возьму Centos/RedHat. Нужно сделать VPN-сервер — Zentyal. Настроить себе десктоп для работы — mint или fedora, manjaro. Собрать небольшой дистрибутив/live flash с узкими задачами — gentoo/arch. Создать кроссплатформенную прошивку — начну собирать свой дистриб в buildroot.


Да, все это можно делать на ЛЮБОМ дистрибутиве, на самом деле. Будут вопросы в версиях пакетов, но… в том или ином дистрибе есть свои плюсы и минусы.
PS Прекрасно знаю о сборках вроде zentyal/proxmox/esxi/прочие. Так или иначе они мне попадали в руки. Да, они позволяют упростить многие вещи, сэкономить время, дать возможность работать с ними людям, далёким от мира Linux. Но всё это до тех пор, пока вас устраивают их возможности и ограничения. Или пока что-то не сломалось.


PS Ещё я знаю про LFS/YOCTO/buildroot. Последний меня особенно интересует.


PSS И для любителей ткнуть в комментах — да, я знаю, что такое проект GNU, что Linux это только ядро. Для желающих рекомендую прочитить вот это


Кто же такой Linux-профи​


Меня давно удивляет ситуация, когда работодатель удивляется:"Вы специалист по Linux, а ни разу не настраивали EXIM4/NGINX/МОЙ_ОГРОМНЫЙ_СОФТ_НАПИСАННЫЙ_СТУДЕНТОМ_ЗА_ЕДУ?".


Так вот, следуют все таки отличать навыки работы в самой ОС и настройку ПРИКЛАДНОГО программного обеспечения на этой ОС. Да, linux популярен в хостингах. Но мне чаще приходилось делать почтовики и шлюзы с прокси, чем LAMP(или эквивалент). Отсюда вывод — умение настраивать конкретный прикладной софт может быть преимуществом при выборе кандидата на вакансию.


Во-первых, этот мир многообразен. В рамках одной компании мне попадались почтовики на postfix/exim4/zimbra/sendmail. Не видел проблемы разобраться с каждым из них и продолжить их успешную эксплуатацию.


Во-вторых, этот мир развивается. Кто-то вспомнит времена, когда web-сервер — это однозначно Apache. Сейчас большинству (из личного опроса) в голову приходит NGINX. Всё больше вокруг меня postgresql, все меньше mysql.


Личный пример. Работал в одном интернет-провайдере, не маленьком. Потребовалось переделать DNS-систему. Не внутреннюю, а для предоставления услуг. Первое что приходит в голову — bind! И тут же понимаю, что не всё так просто. Например — удобный интерфейс управления зонами с возможностью разделения прав доступа.


Решил всё же посмотреть аналоги. И наткнулся на powerDNS. И сделал всё на нём. Почему — потому что удобно:


  • Относительно простая настройка (справедливо и для bind)
  • Наличие "из коробки" веб-интерфейса для редактирования зон, с разделением прав доступа
  • Разделение на recursor и Authoritative серверы
  • Хранение зон в базе данных

Итого, имея опыт настройки и эксплуатации bind, я открыл для себя альтернативную систему, внедрение которой сэкономило мне приличное время и при внедрении, и при последующей эксплуатации.


Второй пример. Коллеги, имеющие опыт работы с Proxmox, смогли создать удивительно тормозящий кластер. У меня такого опыта не было, я работал только с KVM + qemu + libvirt. Замечу, что внутри proxmox находится… правильно, kvm + qemu + libvirt. Тем не менее, проблему нашел и решал именно я. Оказалось, что никто не прочитал отличие паравиртуализированного драйвера от эмуляции IDE. А для дальнейшего перевода виртуалок на паравиртуализированные драйверы потребовалось уметь работать с fstab/grub, тк после смены драйвера виртуалки перестали загружаться(тот случай, когда в fstab и в загрузчике использовались привязки не по UUID/LABEL, а по именам устройств. И когда быстрее было загрузиться с live-диска и быстро всё исправить).


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


Вывод 2. Не так важен дистрибутив, как голова и прямые руки. Умеешь работать в командной строке, понимаешь устройство ОС семейства linux, и адаптация к дистрибутиву перестаёт быть для тебя проблемой. Мне самому приходилось переходить из мира gentoo в мир redhat, что было не сложно. Переход в мир debian/ubuntu также не занял вопросов. Найти почему есть специфические проблемы с прошивке российской разработки тоже не проблема.


Вывод 3. Уметь работать в консоли всё таки надо. Не попадалось мне ещё панели управления или иного gui, имеющих мощность и гибкость командной строки. Да, можно здорово упростить себе жизнь, используя gui (мне нравится, как в zentyal построено управление openvpn). Но консоль никто не отменял.


Gentoo как источник технических навыков​


Начну с самого простого — чему учится новичек, решивший отвоить Linux с нуля. Как гласит старая шутка:"Инструкцию по gentoo надо ещё склеить".
Большинство дистрибутивов всё же имеют инсталлятор, утрированно: "Да — да — далее — установить". Так вот, Gentoo не имеет инсталлятора. Уже с моменты начала установки есть шанс получить новые знания. Причем базовые, без которых сложно (а может и невозможно) двигаться дальше. Не могу представить себе linux-профи, не умеющего форматировать разделы в командной строке. Или не освоившего chroot.


Итак, вот краткий список навыков, получаемых при установке Gentoo:


  • Общие навыки работы в командной строке — копирование, скачивание файлов, навигация по дискам и тд
  • Проверка контрольных сумм
  • Понимание параметров загрузки ядра
  • управление пользователями/группам, специальные группы
  • понимание модулей ядра, их загрузки
  • настройка сети(статика/dhcp/wifi)
  • маршрутизация в сетях
  • работа с разделами дисков
  • создание различных файловых систем(в тч LVM/SWAP/BTRFS)
  • дата/время (вручную и ntp, часовые пояса)
  • работа с переменными (объявление, использование, export)
  • понимание основ сборки пакетов — флаги сборки, настройка параметров компилятора
  • монтирование на лету (в тч особых систем вроде /dev /sys /proc)
  • настройка fstab
  • chroot
  • настройка локали
  • конфигурирование и сборка ядра
  • настройка логирования
  • cron
  • настройка удаленного доступа
  • установка/настройка загрузчика( в тч EFI)

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


Maquefel:


"Исключения конечно есть, люди которые дальше Ctrl+C, Ctrl+V не пошли и находятся в состоянии "ждем ebuild'ов", но с ростом количества "простых" дистрибутивом, такие уже в большинстве своём исчезли с нашего горизонта."
Согласен с этим высказыванием. Если человек не готов пойти чуть дальше copy/past готовый инструкции, не хочет включать голову — то дистрибутив не имеет значения. Ошибка как всегда в прокладке между стулом и клавиатурой.


Замечу, что все этапы подробно расписаны в официальном HANDBOOK с привязкой к архитектуре/языку. В нём не только подробно описаны все команды, но и даётся много справочной информации — что, зачем, как устроено.


Результат — на выходе получается человек, который попробовал много чего. А ведь он ещё не начал устанавливать прикладной софт и графику. Сделает и это — весьма не плохо освоит новые подсистемы ОС.


Замечу, что установка Arch в целом похожа (на мой взгляд), только без компиляции. И даёт примерно такой же набор навыков.


У обоих дистрибутивов отличная документация. Особенно у Arch, субъективно она мне больше нравится.


Психологический аспект​


Невероятно, на факт — мне часто встречались/встречаются так называемые "linux-специалисты", неуверенно работающие в командной строке. Или вовсе её боящиеся.


Боязнь эта вполне объяснима и понятно — нет устойчивых навыков работы в командной строке. Что называется — не набита рука! Представьте себе лётчика, который привык летать только на автопилоте. Вы предпочтете лететь с ним или с тем, кто в добавок умеет уверенно управлять вручную? В результате — типичные ошибки:


  • Отрицание возможности выполнения задачи, потому что не знают как
  • Ошибки при выполнении команд (использование неверных ключей, неверный порядок операндов)
  • Использование избыточных средств (например, искать/писать скрипт на питоне там, где достаточно grep)

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


Простой пример — "Сервер тормозит". Или ещё хуже — не отрабатывает загрузчик. Совсем страшное — тормозит сеть на отдачу, отлично работает на приём. Уверяю вас, для решения этих задач потребуется уметь работать в консоли, возможно менять параметры ядра (sysctl это сила). И да, тюнинг в нагруженных системах тоже потребует умения работать в консоли.


Нет, конечно можно потратить много времени, откатиться с бэкапа или установить всё по новой. Можно безконечно перебирать дистриутивы в поисках не тормозящей сети(актуально для сборок узкого направления). А можно загрузиться с live-диска и за пару минут поправить загрузчик. Или решить проблемы с сетью (пример реальный, кстати).


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


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


Gentoo vs Enterprise​


Снова вернусь к истоку, к Q&A. Прозвучали фразы вроде "не корпоративный дистриб". В целом согласен, сам предпочитал использовать Centos.
Но сейчас будет подрыв.
Так вот, есть ситуации, когда gentoo используется в суровом Enterprise. Пример — разработка. Gentoo — отличный инструмент для разработчика:


  • Свежие версии пакетов
  • Всегда свежий компилятор (пользователи RH/Centos/Oracle поймут)
  • Возможность собрать свой дистрибутив/прошивку с минимальным и достаточным функционалом
  • Восстановление работы конкретного сервера с live-диска.

Как видно, gentoo может пригодиться в больших компаниях. Скажите, что специфичным образом? А что не специфичный? Почтовик или паблик-шара на samba? :-D


И снова напомню про нештатные/аварийные ситуации. Или про "черные ящики"('мы не знаем что там и как, но без него падает что-то важное'), которыми грешат крупные фирмы с историей.


Почему я предпочту гентушника в коллегах​


Исходя из выше описанного, при прочих равных гентушник будет иметь преимущество в моих глазах.
Как минимум он не испугался и освоил не слабый handbook.
Он умеет работать в консоли, что критически важно для linux-администратора/инженера/архитектора.
Он понимает основы компиляции и сборки пакетов, что иногда крайне важно (почитайте про тесты SPEC CPU, например spec 2006).


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


Кроме того, имея богатый арсенал умений, такой человек лучше справится в нестандартной обстановке. Потому что не растеряется и не будет терять прорву времени на поиск 100% работающего руководства именно под такой уровень. Он в состоянии разобраться, догуглить нужное и решить задачу. Впоследствии — написать своё руководство.


"Поколение Ubuntu"​


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


Вообще за все надо платить. Линуксоиды, со стажем 15+ лет, а помните, как мы занимались популяризацией GNU/Linux? Вот мы и добились своего, только почему то мы думали, что адепты проникнуться духом и путем Linux/UNIX и все станет лучше, богаче, проще. А нет, адепты просто притащили к нам философию Microsoft, ничего не делать, ждать готового, изобретать громадные комбайны, не читать документацию."
Всё чаще на собеседования приходят странные люди, считающие себя linux-экспертами как минимум. А по факту — знание многих слов без малейшей практики и понимания. Немало тех, кто не видел консоль или не понимает, зачем уметь в ней работать(это в linux-то). Часто знают много терминов, но не понимают что за ними стоит:


- Вот выдержка из лога. Выведите список неуспешных попыток входа по SSH

И вот лучшие из ответов(кроме попыток считать вручную):


  • Я бы написал на питоне, там что-то было для работы с SSH (ну да, с текстовым файлом)
  • Может это можно сделать через awk? но я не уверен (тепло, но написать не смог)
  • Есть grep, но я не помню как им пользоваться (оставлю без комментариев)

Ещё пример:


- с Systemd сталкивались?
- да, редкостное...(в общем не нравится)
- а что именно не так, что мешает?
- ну...так пишут

В данном случае я не агитирую за systemd. У него есть и плюсы, и минусы.


- Вам говорят, что linux сервер тормозит. Что будете делать?
- Гляну загрузку проца, оперативки.
- Как?
- эээ...не знаю/не помню
- ок, оперативки много, процессор показывает высокую загрузку (load averange)
- Значит процессоров не хватает!
- А может тормозят диски?(намёк на CPU utilization и iowait)
- Нет, едва ли.
- И всё же, если диски. Как посмотреть?
- не знаю.

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


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


Постскриптум​


Для написания статьи использовался следующий инструментарий:


  • Visual studio code (да, в нем достаточно удобна работать с markdown)
  • vim
  • git

Источник статьи: https://habr.com/ru/post/557932/
 
Сверху