Simply Linux 10.1 (это бесплатное тоже можно использовать)

df72044bb29e987ab0383401eb37ded0

Пост — это благодарность сообществу, что оно делится с нами полезной информацией, и мы в ответ делимся своей.

Скорее — это зарисовки‑на‑полях или направление в действиях, но никак не хау‑ту‑шка (и уж ТОЧНО НЕ реклама нашей ОС, более того, полагаю, что бесплатность этого релиза сродни бесплатной Шляпы — этакий бесконечный бета‑тест).

Пост мог появиться и раньше, но по мере продвижения в теме всплывали новые заминки.

Подача материала — не разъясняющая, а скорее простое тупое перечисление каких‑то моментов. У читающих предполагается достаточно высокий уровень знаний о нескольких
подсистемах Linux (особенно dracut).

Много времени уделять писательству не могу, поэтому сумбур — вот как он есть…

Итак, Simply Linux 10.1!

Новость о нас на Хабре

Мой интерес к SL10.1 возник в начале осени, когда я узнал, что она бесплатна для коммерческого применения, и обусловлен, в основном, именно этим важным моментом (ибо мой фаворит — это Xubuntu). Очень облегчающим (скорее психологически) моментом был тот факт, что эта бесплатная редакция основана на этом же «крысином» окружении.

Теперь о наболевшем (и отнюдь не в техническом плане!) или почему конкретно я сразу же обратил свой взор на SL (в марте-2022 упустил объявления из виду, т.к. я на российские дистрибутивы не смотрел совсем).

Линукс (или, во всяком случае, огромный процент распространенных дистрибутивов)
бесплатен, но это совершенно не спасет Вас от людей, которые могут захотеть просто из вредности поставить подножку Вашему маленькому или средненькому бизнесу со словами: «Да, да, да, все хорошо, но покажите нам лицензионное соглашение… Ой, а мы ничего не понимаем по‑английски… А‑а-а‑а, а почему Вы нам показываете какой‑то иностранный сайт…»

Причем, наверняка даже зная, что оно почти всЁ действительно — СПО, могут шантажировать забором оргтехники на, якобы, экспертизу. И, еще три года назад, даже бухгалтер, ни разу не юрист, первое, что спросил про Ubuntu: «а где тут у них по‑русски написано, что это всЁ нам забесплатно…»

Поэтому лицензионное соглашение на SL10.1 я распечатал сразу же, в деревянную рамочку его вставил (и да, оно на русском языке, и на сайте тоже русском).

Подпункта у поста три:

  1. PXE-сервер

  2. Webmin

  3. Pxe-diskless-клиент (вернее — то, что МОЖЕТ помочь его реализации в этом варианте дистрибутива)

Так получилось, что последний подпункт был первым хронологически.

PXE-сервер (или — да здравствует LTSP)

LTSP-сервер был в версии SL8 и ранее (я так сужу, потому что попытка добавить за-ради-теста репозитарий p8 вместо p10 приводит к появлению возможности скачки старых версий пакетов). В Ubuntu LTSP делает при начальной настройке почти ВСЁ за нас. Саму же его возможность создания загрузочного (для-по-сети) NBD-образа я никогда не использовал, а только задействовал его загрузочный pxe-модуль. Поэтому я постарался просто выявить и повторить действия LTSP при этой настройке.

а) Устанавливаете dnsmasq и nfs-server
б) настраиваете /etc/exports
в) настраиваете dhcp-проксирование (ну… или весь dhcp)
г) для SL — в /etc/sysconfig — rpcbind и dnsmasq (для меня бОльшая часть возни была связана именно с этим пунктом — я НЕ знал, что это место существует и влияет на функционирование)
д) копируете squash/NBD архивы в nfs
е) создаете/копируете tftp-структуру
ж) настраиваете файрвол

(За последней строчкой тоже скрыта проблема — почти все хау‑ту в интернете
предлагают для nfs под firewalld: firewall‑cmd ‑add‑service=mountd что на SL почему‑то не срабатывало. Сложилось ощущение, что часть таких выкладывальщиков даже не пытаются проверить в работе свои подсказки сами. У нескольких мелькал абсолютно разный набор портов выше 30 000. Это показало, что там сервис открывает динамический набор портов.

В итоге написал одностроковый скрипт, который выбирает все прослушиваемые порты выше 30000 у rpc.mountd и открывает их в firewalld).

Webmin (да, попса, да не-хардкор)

Вебмин в (для) SL, в отличие от LTSP, не тащили никогда, в паре мест я видел (и допускаю, правдивые) отговорки типа: это дырявая‑перловая‑каша‑под‑рутом или есть альтератор‑и-поэтому‑это‑Вам‑не‑надо.

Для себя предполагаю только 1 сценарий (и он единственный с самого начала
использования этого пакета): добавление‑удаление в веб‑интерфейсе сертификатов OpenVPN‑server (кстати, модуля OpenVPN в официальной поставке Webmin нет года уже как 2 или 3, да и тот был — коряв по самое…).

Поэтому можно и так (ну, относительно безопасно):

logon-by-ssh
systemctl start webmin
to-do-something-in-browser (very-rapidly)
systemctl stop webmin
log-off

Итак, минуя стадию рассказа об экспериментах:

а) ставите в систему необходимые для Веб-мина perl-пакеты, perl-Net-SSLeya, perl-DBM

б) берете rpm-пакет Webmin 2.000 и при помощи mc разархивируете его в /usr/libexec/webmin (и один PAM-модуль кидаете в нужное место в etc) — структура прекрасно видна в пакете-архиве.

в) запускаете (в этом вся прелесть версии 2.000) /usr/libexec/webmin/setup.sh, отвечаете на подсказки-вопросы (я вот сказал, что у меня Ubuntu-версия-20, при этом руководствовался тем фактом, что в Ubuntu так же, как и в SL10, root неактивен, и потому Веб-мин спрашивает нас пару логин-пароль для создания внутреннего пользователя), скрипт сам все создает и активирует. (https://help.ubuntu.com/community/WebminWithoutARootAccount)

г) открываете в вашем файрволе порт 10000.

Вуаля… (не забудьте стартануть сервис, если надо).

О возможности «типичных» реализаций бездискового клиента

Вообще, это невероятно благодатная, бездонная тема для Linux. И именно поэтому буду относительно краток.

В SL изнутри применяется система изготовления образов начальной загрузки make-initrd, разработанная Алексеем Гладковым.

С ней я не знакомился, т.к. использовал , в основном, mkinitramfs (родное для Ubuntu), а не-в-основном :))) - dracut

На мою (или вашу — как посмотреть) удачу, dracut также присутствует в репозитарии SL.
(Кстати — работу make‑initrd, судя по докам, тестируют в Alt, Ubuntu, Fedora).

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

Мой вариант бездисковой системы — это симбиоз этих двух вариантов:
(https://habr.com/ru/post/253 759/) и (https://habr.com/ru/post/164 147/).

Пост 253 759 — это, честно говоря, вариация какой‑то очень давнишней англоязычной статьи.

И я не удивлюсь, если есть еще более старые варианты намека‑на‑реализацию (а не реализации).

Костяк же моего варианта такой (я навешиваю на виртуальное дерево в нужных точках squash‑образы, в типовой реализации на образ‑корень навешиваются образ модулей и образ прошивок, но общее количество таких образов, как бы развешанных по дереву,  лимитировано только объемом ОЗУ):

...
let "imgCount= imgCount + 1"
mkdir -p ${NEWROOT}/mnt/                       # rootmnt --> /mnt ---> /lib${i}cow
mkdir -p ${NEWROOT}/mnt/lib${imgCount}cow      #             |           |
                                               #             |           +---------->/up
                                               #             |           +---------->/work
mkdir -p ${NEWROOT}/mnt/lib${imgCount}cow1     #             +-------> /lib${i}cow1
#
# but ...lib${imgCount}cow/up - must be in tmpfs!!! - so   DO IT AFTER   mount!!!!
mount -t tmpfs -o size=100% none ${NEWROOT}/mnt/lib${imgCount}cow
mkdir -p ${NEWROOT}/mnt/lib${imgCount}cow/up
mkdir -p ${NEWROOT}/mnt/lib${imgCount}cow/work
mount ${realFullFileName} ${NEWROOT}/mnt/lib${imgCount}cow1 -t squashfs -o loop
mount -t overlay -o \
  lowerdir=${NEWROOT}/mnt/lib${imgCount}cow1,\
  upperdir=${NEWROOT}/mnt/lib${imgCount}cow/up,\
  workdir=${NEWROOT}/mnt/lib${imgCount}cow/work overlay ${NEWROOT}${pathName}
...

(Это относительно гибкий и модульный вариант, позволяет реализовывать разные варианты загрузки бездисковый станций. Для примера — можно одни станции грузить с минималкой kernel‑modules‑x.xx.xx, а другие — уже с добавлением kernel‑extra‑modules‑x.xx.xx. Ну и т. д. и т. п.)

Итак, возвращаемся к нашей теме — к проблемкам. Обе заминки оказались связаны с
моментами инициализации сети.

а) busybox

Оказывается, в SL он лежит по адресу /lib/initrd/bin/busybox (там его берет их система образов нач-загрузки, а больше он там ни для чего не нужен, судя по всему).

Далее, их утилита arping этом дистрибутиве (а может, именно эта конкретная версия), инкапсулированная в initrd — на этапе загрузки мешала нормально получать адрес по dhcp.

Поэтому в module-setup.sh нашего дракут-аддона мы arping игнорируем, делает сим-линк на busybox (проверив, если это реализация busybox-a c arping):

    for _i in $($_busybox --list); do
        if [[ ${_i} == arping ]] ; then
          _path=$(find_binary "arping")
          [ -n "$_path" ] && ln_r /usr/bin/busybox "$_path"
        fi
    done

За-ради-смеха: на этапе тестов‑перебора я поначалу (еще не сообразив, где что) брал busybox из Ubuntu-22 и переименовывал в arping (тоже срабатывало).

б) инициализация сети

Несмотря на то, что основной (почти весь) кусок моего кода работает в хуке pre‑mount (можно и в mount)(и в Fedora при тестах вел себя нормально), в варианте initrd, сгенерированном системой dracut в SL, на этом этапе загрузки почему‑то сеть еще не успевала подняться и nfs‑root‑каталог не был виден/доступен.

Сразу же после вставки «sleep 20» всЁ вроде как заработало. Некрасиво…

Был вставлен цикл ожидания адреса IP на интерфейсе загрузки (интерфейс находим через сопоставление адаптеров с мак‑адресом, взятым в kernel‑cmdline‑параметре BOOTIF).

Это, собственно, само тело цикла ожидания:

            ifName=$(ip -o l | grep ${macAdr} | cut -f2 -d" " | sed "s/://")
            if [ -n "${ifName}" ] ; then
              Ip4Adr=$(ip -4 -o a s ${ifName} | awk "{print \$4}" | cut -f1 -d"/")
              [ -n "${Ip4Adr}" ] && break || ulog_msg "\n${macAdr} ${ifName} Waiting for IP4...\n"
            else
              ulog_msg "\nWaiting for network interface...\n"
            fi
            sleep 1

Все равно, выглядит это УРОДЛИВО, но реальный период ожидания у меня от 1 до 3 секунд, и длинной паузы теперь нет (допускаю, что с несколькими адаптерами в системе финт может не заработать).

Так или иначе, необходимые нам 2 с половиной сервиса были плавно перетянуты под крыло отечественного дистрибутива (благо, каталоги/файлы с конфигурациями сервисов скопировались без изменений).

На этом всЁ (Ваш продолжающий вести тщательные наблюдения Кэп).

© Habrahabr.ru