[Из песочницы] MagOS в промышленном применении

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

1. Базовое описание основных принципов
1.1. Применение MagOS.
1.2. Технологии.
1.3. Выбор базового дистрибутива.
2. Структура сети.
2.1. Magos-server.
3. Настройка загрузчика.
3.1. Строки загрузчика.
3.2. Опции которые были использованы.
3.3. Опции, которые могут быть использованы.
3.4. Особенности сетевой загрузки.
4. Порядок инициализации системы.
4.1. Структура конфигурационного файла basecfg.ini по умолчанию.
4.2. Структура системной директории.
4.3. Реализация.
5. Сервер MagOS.
5.1. Общие сведения.
5.2. Настройки сети.
5.3. Настройка служб.
5.4. Репозиторий программ.
5.5. Дополнительные данные сервера
5.6. Мониторинг.
6. Пользовательские модули.
6.1. Общие принципы создания пользовательских модулей.
6.2. Сколько модулей делать.
6.3. Модули специального назначения.
6.4. Ограничения для модулей.
6.5. Инструкция по созданию модулей.
6.6. Модуль обновления системы.
6.7. Модуль установки офисных программ.
6.8. Модуль с утилитами и серверами.
6.9. Модуль системных настроек.
7. Скрипты.
7.1. Дополнения к magos-patches.
7.2. Скрипт установки ОС.
7.3. Скрипты включения в AD.
7.4. Управление системой (/root/bin).
7.5. Дополнительные скрипты, исправляющие работу программ magos и операционной системы.
8. Инструкция для техников.

Базовое описание основных принципов


Применение MagOS
MagOS — это специфичная сборка дистрибутива, выбираемого из обширного списка. В качестве основы для построения сборки могут выступать Live дистрибутивы Magea, Mandriva, Rosa, Ubuntu, Debian, Fedora, AltLinux и т.д. Специфичными элементами MagOS выступает модифицированное ядро (для поддержки AUFS), специальным образом созданный initrd (используется UIRD) и дополнительный набор скриптов, предназначенных для управления MagOS.

MagOS позволяет создать на основе Live сборок различных дистрибутивов (сборок, предназначенных для загрузки с CD, DVD диска) полноценную операционную систему. Специфика использования MagOS дает целый набор дополнительных преимуществ такого подхода:

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

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

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

К отдельным преимуществам можно отнести возможность сетевой загрузки дистрибутива, в том числе и из Интернет.

К нереализованным возможностям MagOS следует отнести отсутствие возможности хранения пользовательских данных на защищенной распределенной файловой системе. Реализация такой распределенной файловой системы позволит обеспечить полную реентерабильность пользователей.

Некоторую вводную информацию о MagOS можно получить из статьи: MagOS Linux (сентябрьский выпуск).

Технологии
Модификация ядра Linux, входящего в MagOS заключается во включении патча с файловой системой AUFS. AUFS позволяет подключать в файловую систему при помощи интерфейса loopback внешние файловые системы, собирая результирующую файловую систему, как слоеный пирог. Промежуточные слои такой результирующей файловой системы подключаются, чаще всего, в режиме RO (read only), а самый верхний слой, как правило, подключается в режиме RW (read-write) и проецируется на дисковую файловую систему, которая может размещаться как в оперативной памяти, на физическом диске, в образе диска, так и сохраняться при операции отключения в специальном модуле, подключаемом при помощи файловой системы SquashFS.

Файловая система SquashFS позволяет выполнять сжатие при помощи блочного алгоритма, сохраняя все атрибуты файловой системы. В MagOS она используется для создания подгружаемых модулей с образами слоев файловой системы AUFS. Блочный алгоритм сжатия позволяет не распаковывать файлы модулей целиком при необходимости извлечения из них данных.

В MagOS образ диска initrd, используемый для загрузки ОС Linux в большинстве дистрибутивов, использован для организации работы системы. Там располагаются скрипты, создающие «слоеную» файловую систему дистрибутива, обрабатывающие конфигурационные файлы и т.п.

Необходимые для настройки системы данные передаются через параметры ядра операционной системы, прописываемые в загрузчике grub4dos/grub2/syslinux, и при помощи специального конфигурационного файла MagOS.ini. Где и какие параметры передаются описывается в документации. Параметры, связанные с общей настройкой операционной системы передаются при помощи параметров ядра. Они организованы в систему параметров Unified Init Ram Disk (uird).

Описание параметров приведено на сайте проекта: UIRD. Использован дистрибутив Magos multi.

В промышленном применении нельзя обойтись без сервера, содержащего дистрибутив и поддерживающего протоколы HTTP (для удаленной загрузки), TFTP (сервер удаленной загрузки по PXE), SSH (для управления файлами) и RSYNC (для установки и обновления ОС на компьютерах пользователей). Сервер может быть реализован на любом дистрибутиве, включая MagOS. В моем случае был использован виртуальный контейнер на основе дистрибутива CentOS 6.

Для управления системой в состав MagOS были добавлены необходимые опции и скрипты, которые их обрабатывают.

Выбор базового дистрибутива
Выбор дистрибутива, на основе которого строится сеть, всегда сложная и неоднозначная задача. Выбирая тот или иной дистрибутив приходится учитывать множество факторов, в том числе множество местных проблем. У нас такими факторами были следующие: весьма непроизводительные компьютеры пользователей, они, хоть и приобретены были совсем недавно, но на составе компьютеров сэкономили, поэтому в типовой машинке, за которой сидит пользователь всего 2 Гигабайта ОЗУ и двухъядерный Celeron с не очень большой тактовой частотой. Такая типовая конфигурация компьютера пользователя накладывает ограничения на выбор менеджера рабочего стола, в частности использовать KDE уже не представляется возможным без потери возможности комфортной работы пользователя.

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

Исследуя возможности адаптации внешнего вида рабочего стола к внешнему виду старой доброй XP, мы решили остановиться на Cinnamon. Несмотря на то, что разработка еще не вышла на релиз, в стандартной конфигурации этот рабочий стол работает вполне устойчиво и достаточно легко адаптируется к внешнему виду XP установкой соответствующей темы. Дополнительным фактором, влияющим на выбор ОС, послужило «пожелание» Госструктур видеть на рабочих местах компьютеры с отечественной операционной системой. Стало быть весь выбор, в нашем случае, свелся к выбору между ОС Rosa и ОС Alt Linux.

Несмотря на значительный опыт работы с ОС Rosa, сравнение дистрибутивов AltLinux и Rosa оказалось не в пользу Rosa. В первую очередь из-за отсутствия Cinnamon в составе LiveDVD, во вторых из-за снижения качества дистрибутива в последнее время.

Таким образом, в качестве основы для создания сборки была выбрана разработка AltLinux — одна из сборок стартового набора P7, содержащая рабочий стол Cinnamon. Положительной стороной такого выбора является минимальный состав набора, что позволяет расширять его по своему усмотрению.

Структура сети


Magos-server
В сети предприятия имеется сервер виртуализации, на котором и был развернут Magos-server. Сервер выполняет несколько функций.

Во первых он служит сервером удаленной загрузки. Удаленная загрузка реализована при помощи TFTP и позволяет загружать MagOS в той же самой конфигурации, которая используется для работы на рабочих станциях. При помощи такой загрузки можно протестировать оборудование, выполнить установку операционной системы на рабочую станцию и выполнить множество других задач. Кроме того, при помощи сервера удаленной загрузки загружаются образы Clonezilla и Memtest.

Удаленная загрузка рабочей станции под управлением MagOS осуществляется по протоколу HTTP, для чего на сервер установлен Lighttpd, DocumentRoot которого указывает на репозиторий MagOS.

Установка дистрибутива на рабочую станцию и обновление рабочих станций выполняется по протоколу RSYNC. Поэтому на сервер установлен rsyncd.

Управление сервером осуществляется по протоколу SSH. По этому же протоколу на сервере обновляются изменения модулей программ, подготавливаемые на тестовом компьютере.

Этот компьютер укомплектован 4Gb памяти, поскольку возникли проблемы с созданием модулей при меньшем объеме памяти.

Интеграция в сеть
Развернута AD на основе Windows 2008 SP2 и все компьютеры сети включаются в AD. Не исключение и компьютеры под управлением ОС Linux.

Настройка загрузчика


Строки загрузчика

title AltLinux i586 cinamon save
#find --set-root --ignore-floppies --ignore-cd /MagOS/MagOS.sgn
kernel  /AltLinux/kernel/i586/vmlinuz uird.ro=*.xzm,*/live uird.from=/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;/AltLinux/modules/i586/ uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 uird.home=/dev/sda3/AltLinux-Data/homes/ uird.changes=/dev/sda3/AltLinux-Data/changes/ users
initrd /AltLinux/kernel/i586/uird.soft.cpio.xz /AltLinux/kernel/i586/uird.magos.cpio.xz


Опции которые были использованы
Ввиду множественности параметров ядра, для выделения параметров MagOS введен префикс параметров ‘uird’ (Unified Init Ram Disk).

uird.ro=*.xzm,*/live 


uird.ro — Параметр MagOS. Задает фильтр для модулей, которые монтируются в режиме RO. В качестве таковых выступают собственно модули MagOS и сам LiveDVD AltLinux.

uird.from=/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;/AltLinux/modules/i586/ 


uird.from — Параметр MagOS. Список источников, на которых лежат модули для системы. Это указание пути для загрузки модулей и самого дистрибутива.

uird.load=* 


uird.load — Параметр MagOS. Фильтр для модулей, которые необходимо подключить на этапе загрузки.

root=uird 


root – Параметр ядра. Указание корневой файловой системы.

rw


rw — включение режима read/write.

findswap


findswap — Параметр MagOS. Заставляет систему автоматически подключать Swap. Если в системе находится Linux раздел Swap, то подключается он. Иначе ищется файл подкачки Windows.

vga=788


vga — Параметр ядра. Включение режима работы графики.

quiet


quiet — Параметр ядра, указывает необходимость формирования журнала dmesg.

plymouth.enable=0


plymouth.enable — Параметр ядра. Управляет графическим экраном и выводом журнала во время загрузки операционной системы.

uird.home=/dev/sda3/AltLinux-Data/homes/ 


uird.home — Параметр MagOS. Задает источник, на котором хранятся домашние директории пользователей. Ввиду ошибки в существующей версии MagOS требуется задание полного пути, включая указание устройства.

uird.changes=/dev/sda3/AltLinux-Data/changes/ 


uird.changes — Параметр MagOS. Задает источник, на котором будут храниться персистентные изменения корневой файловой системы.

users


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

  *.RWM.ENC - RW слой криптованый
  *.ROM.ENC - RO слой криптованый


uird.copy2ram[+]= — фильтр для модулей, которые копируются в ОЗУ. Может быть применено для ускорения работы при наличии значительного объема оперативной памяти.
uird.copy2cache[+]= — фильтр для модулей, которые копируются в КЭШ.
uird.cache[+]= — источники, в которые стоит синхронизировать модули.

Имеется возможность использовать КЭШ вместо синхронизации файлов MagOS с сервером при выключении компьютера. К недостаткам метода следует отнести то, что обмен с сервером выполняется по протоколу HTTP, что само по себе значительно снижает быстродействие. Вторым недостатком является то, что возникает сложность при разделении объектов обновления — файла MagOS.ini, раздела boot и раздела собственно ОС. Нужно обратить внимание, что уровень кэша layer-cache и соответствующий параметр uird.cache, служащий для синхронизации удаленных репозиториев в локальные или частные (INTRANET) репозитории, а также для обновления системы, должны задаваться нижеприведенным образом:

uird.cache=/MagOS/cache;/MagOS-Data/cache;/MagOS-Data/netlive


Здесь для каждого источника задается собственный каталог.

uird.netfsopt[+]= — дополнительные опции монтирования сетевых ФС: sshfs, nfs, curlftpfs, cifs.

При помощи указанных файловых систем в дальнейшем можно выполнять подключение сетевых файловых систем с разделами данных пользователя.

uird.noload[+]= — фильтр для модулей, которые необходимо пропустить во время загрузки
Можно выполнять выборочное отключение некоторых модулей для отдельных компьютеров или сетей.
uird.homes[+]= — источники, на которых хранятся домашние директории пользователей (объединяются AUFS).

По сути здесь вводится уровень домашних директорий пользователя layer-homes и соответствующий параметр: uird.homes:

uird.homes=/MagOS-Data/homes;/MagOS-Data/home.img;nfs://magos.sibsau.ru/homes/n/e/myuser


Все директории пользователя из различных источников каскадно-объединяются посредством AUFS и монтируются в /home. Более приоритетным является самый первый источник, затем, в порядке перечисления, уменьшается приоритет. В случае, если источник задан параметром uird.home=, то происходит монтирование источника в /home. Таким образом имеется возможность множественного подключения домашней папки с наложением разных файловых систем. Может использоваться при сетевом размещении домашних папок пользователей.

Типы источников:
/path/dir — директория на любом доступном носителе;
/dev/[..]/path/dir — директория на заданном носителе;
file-dvd.iso, file.img — образ диска (ISO, образ блочного устройства);
http://server/path/… — источник доступный по HTTP (используется httpfs);
ssh://server/path/… — источник доступный по SSH (исползуется sshfs);
ftp://server/path/… — источник доступный по FTP (используется curlftpfs);
nfs://server/path/… — источник доступный по NFS;
cifs://server/path/… — источник доступный по CIFS;
uird.machines= — источник, где хранятся машинно-зависимые персистентные изменения.

Имеется возможность использовать машинозависимые ресурсы для changes, что необходимо для обеспечения реентерабильности пользователей.

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

kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/magos/AltLinux/iso/alt linux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/ uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users


Это те же самые параметры, однако следует обратить внимание на указание параметра uird.from:

uird.from=http://magos-server.mydomain.local/magos/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/


Здесь указывается полный http url сервера, с которого выполняется загрузка ОС. Базовый уровень layer-base и соответствующий параметр uird.from могут задаваться в следующем виде:

uird.from=/MagOS;/MagOS-Data;MagOS.iso;http://magos.sibsau.ru/repository/netlive/2014.64/MagOS


Порядок инициализации системы


  • Осуществляется поиск конфигурационного файла по пути, указанному в параметре uird.basecfg.
  • Устанавливаются параметры из конфигурационного файла, которые еще не установлены в параметрах ядра.
  • Происходит монтирование источников base-уровня в порядке, указанном в параметре uird.from.
  • Происходит монтирование источников cache-уровня в порядке, указанном в параметре uird.cache.
  • Происходит монтирование источников homes-уровня в порядке, указанном в параметре uird.homes.
  • Происходит подключение в самый верхний уровень AUFS источника персистентных изменений, указанного в параметре uird.changes.
  • Осуществляется синхронизация base-уровня в cache-уровень с учетом параметра uird.copy2cache, а также соответствия подуровней. Если подуровней cache-уровня меньше, чем base-уровня, то оставшиеся подуровни синхронизируются в RAM.
        ├── layer-base       ==>      ├── layer-cache
        │   ├── 0            -->      │   ├── 0
        │   ├── 1            -->      │   ├── 1
        │   ├── ...          -->      │   └── ...
        │   └── ...          -->      │   RAM


  • Осуществляется синхронизация base,cache-уровней в RAM с учетом параметра uird.copy2ram.
  • Осуществляется поиск модулей в RAM, cache-уровне, base-уровне и подключение их на верхний уровень AUFS или копирование в корень (с учетом фильтров, указанных в параметрах uird.load,uird.noload,uird.ro,uird.rw,uird.cp).
  • Осуществляется каскадное объединение источников homes-уровня и подключение их в /home/.
  • Выполняются скрипты rc.preinit.


Структура конфигурационного файла basecfg.ini по умолчанию

uird.config=MagOS.ini
uird.ramsize=70%
uird.ro=*.xzm;*.rom;*.rom.enc;*.pfs;*.sfs
uird.rw=*.rwm;*.rwm.enc
uird.cp=*.xzm.cp,*/rootcopy
uird.load=/base/,/modules/,rootcopy
uird.noload=
uird.from=/MagOS;/MagOS-Data
uird.changes=/MagOS-Data/changes
uird.cache=/MagOS-Data/cache
uird.machines=/MagOS-Data/machines
uird.home=/MagOS-Data/homes


Если параметр uird.basecfg не задан, то используется /uird_configs/basecfg.ini внутри initrd.Структура системной директории

 /memory/
  ├── bundles                   - точка монтирования модулей
  │   ├── 00-kernel.xzm
  │   ├── 01-firmware.xzm
  │   ├── 10-core.xzm
  │   ├── 80-eepm-1.5.2.xzm
  │   └── ...                   - и т.д.
  ├── changes                   - точка монтирования для хранения изменений 
  │   ├── etc
  │   ├── home
  │   ├── memory
  │   ├── run
  │   ├── var
  │   └── ...                   - и т.д.
  ├── data                      - точка монтирования источников
  │   ├── cache                     - кэш уровня
  │   ├── homes                     - homes уровня
  │   ├── machines                  - (зарезервировано)
  │   └── from                      - базового уровня
  ├── layer-base                - точка монтирования базового уровня
  │   ├── 0                         - ресурс первого источника
  │   ├── 1                         - ресурс второго источника (в порядке перечисления в uird.from=)
  │   └── ...                       - и т.д.
  ├── layer-cache               - точка монтирования кэш уровня
  │   ├── 0                         - ресурс первого источника
  │   ├── 1                         - ресурс второго источника (в порядке перечисления в uird.cache=)
  │   └── ...                       - и т.д.
  ├── layer-homes               - точка монтирования homes уровня
  │   ├── 0                         - ресурс первого источника
  │   ├── 1                         - ресурс второго источника (в порядке перечисления в uird.homes=)
  │   └── ...                       - и т.д.
  ├── cmdline                   - системный файл для хранения дополнительных параметров командной строки
  └── MagOS.ini.gz              - системный файл для хранения конфигурационного файла


Реализация
В основе реализации лежит набор скриптов инициализации dracut (модули base, busybox ) и скрипты uird (livekitlib+uird-init):

  • cmdline-hook: parse-root-uird.sh (проверяет параметр root=uird);
  • mount-hook: mount-uird.sh (выполняет скрипт uird-init);
  • livekitlib — содержит библиотеку функций системы инициализации;
  • uird-init — последовательно выполняет набор функций из livekitlib и осуществляет каскадно-блочное монтирование модулей системы в единый корень AUFS в директорию указанную в переменной dracut $NEWROOT.


Сервер MagOS


Общие сведения
В нашем случае magos-server развернут в качестве контейнера openvz. Реализация не имеет принципиального значения.

  • Он служит сервером удаленной загрузки. Удаленная загрузка реализована при помощи TFTP/PXE и позволяет загружать MagOS в той же самой конфигурации, которая используется для работы на рабочих станциях. При помощи такой загрузки можно протестировать оборудование, выполнить установку операционной системы на рабочую станцию и выполнить множество других задач.
  • Удаленная загрузка рабочей станции под управлением MagOS осуществляется по протоколу HTTP, для чего на сервер установлен Lighttpd, documentroot которого указывает на репозиторий MagOS.
  • Установка дистрибутива на рабочую станцию и обновление рабочих станций выполняется по протоколу rsync. Поэтому на сервер установлен rsyncd.
  • Управление сервером осуществляется по протоколу ssh. По этому же протоколу на сервере обновляются изменения модулей программ, подготавливаемые на тестовом компьютере.


Реализация сервера
Операционная система Centos v6. Для виртуального контейнера выделены следующие ресурсы: CPU — 2, RAM — 512Mb, swap — 1Gb, размер виртуального диска 40Gb.Настройки сети

Настройка в ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.1.xxx
NETMASK=255.255.255.0
NETWORK=192.168.1.0
GATEWAY=192.168.1.1
DNS1=192.168.1.xxx
BROADCAST=192.168.1.255
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static



Сетевые службы (netstat -tunlp)
# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address State  PID/Program name  
tcp    0      0     0.0.0.0:873      0.0.0.0:*       LISTEN      494/xinetd        
tcp    0      0     192.168.1.xxx:80 0.0.0.0:*       LISTEN      551/lighttpd      
tcp    0      0     0.0.0.0:22       0.0.0.0:*       LISTEN      484/sshd          
udp    0      0     0.0.0.0:69       0.0.0.0:*                   494/xinetd 



Настройка служб
Lighthttpd

Запуск:
chkconfig --list lighttpd
lighttpd        0:off   1:off   2:on    3:on    4:off   5:on    6:off



Конфигурационный файл lighttpd.conf
var.log_root    = "/var/log/lighttpd"
var.server_root = "/var/www"
var.state_dir   = "/var/run"
var.home_dir    = "/var/lib/lighttpd"
var.conf_dir    = "/etc/lighttpd"
var.vhosts_dir  = server_root + "/vhosts"
var.cache_dir   = "/var/cache/lighttpd"
var.socket_dir  = home_dir + "/sockets"
include "modules.conf"
server.port = 80
server.use-ipv6 = "disable"
server.bind = "192.168.1.xxx"
server.username  = "lighttpd"
server.groupname = "lighttpd"
server.document-root = server_root + "/"
server.pid-file = state_dir + "/lighttpd.pid"
server.errorlog             = log_root + "/error.log"
include "conf.d/access_log.conf"
include "conf.d/debug.conf"
server.event-handler = "linux-sysepoll"
server.network-backend = "linux-sendfile"
server.stat-cache-engine = "simple"
server.max-connections = 1024
index-file.names += (
  "index.xhtml", "index.html", "index.htm", "default.htm", "index.php"
)
url.access-deny             = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
  server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".scgi" )
include "conf.d/mime.conf"
include "conf.d/dirlisting.conf"
server.follow-symlink = "enable"
server.upload-dirs = ( "/var/tmp" )



Конфигурационный файл vhosts.d/magos.conf
$HTTP["host"] == "magos-server.mydomain.local" {
  var.server_name = "magos-server.mydomain.local"
  server.name = server_name
  include "conf.d/trigger_b4_dl.conf"
  server.document-root = vhosts_dir + "/magos/"
  accesslog.filename          = log_root + "/" + server_name "/access.log"
}



Конфигурационный файл conf.d/dirlisting.conf
dir-listing.activate      = "enable"
dir-listing.hide-dotfiles = "disable"
dir-listing.exclude       = ( "~$" )
dir-listing.encoding = "UTF-8"
dir-listing.hide-header-file = "disable"
dir-listing.show-header = "disable"
dir-listing.hide-readme-file = "disable"
dir-listing.show-readme = "disable"



Tftpd

Запуск (/etc/xinetd.d/tftp:)
service tftp {
      socket_type             = dgram
      protocol                = udp
      wait                    = yes
      user                    = root
      server                  = /usr/sbin/in.tftpd
      server_args             = -s /var/lib/tftpboot
      disable                 = no
      per_source              = 11
      cps                     = 100 2
      flags                   = IPv4
} 


Конфигурационный файл /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local

MENU TITLE PXE Menu

# Первый пункт меню – загрузка с HD
LABEL Boot from hard disk
localboot 0x80

LABEL AltLinux-net
        MENU LABEL AltLinux-net
        kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/magos/AltLinux
x/iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/ ui
rd.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users
        append initrd=images/uird.magos.cpio.xz
LABEL AltLinux-net testing
        MENU LABEL AltLinux-net testing
        kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/testing/AltLinux
/iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/testing/AltLinux/modules/i586
/ uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users
        append initrd=images/uird.magos.cpio.xz



Репозиторий состоит из двух частей: рабочего, имеющего название magos и тестового, имеющего название testing. Рабочий репозиторий предназначен для установки и обновления программного обеспечения рабочих станций пользователей. Предварительное тестирование устанавливаемого ПО выполняется на репозитории testing. Меню загрузки позволяет загружать операционную систему как из рабочего репозитория так и из тестового.Rsync

Запуск (/etc/xinetd.d/rsync):
service rsync
{
        disable = no
        flags           = IPv4
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}



Конфигурационный файл /etc/rsyncd.conf
use chroot = yes
max connections = 100
syslog facility = local5
pid file = /var/run/rsyncd.pid
[magos]
path = /var/www/magos
comment = whole MagOS boot
[testing]
path = /var/www/testing
comment = whole MagOS boot



sshd

Запуск:
# chkconfig –list sshd
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off



Конфигурационный файл /etc/ssh/sshd_config
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding no
Subsystem       sftp    /usr/libexec/openssh/sftp-server



Репозиторий программ
В структуре репозитория программ показаны только существенные файлы и каталоги.

magos

├──AltLinux
│  ├──iso
│  │  └──altlinux-p7-cinnamon-latest-i586.iso
│  ├──kernel
│  │  └──i586
│  │     ├──uird.magos.cpio.xz
│  │     ├──uird.soft.cpio.xz
│  │     └──vmlinuz
│  └──modules
│     └──i586
│        ├──00-kernel.xzm
│        ├──01-firmware.xzm
│        ├──03-1-nvidia-current.xzm
│        ├──03-2-nvidia304.xzm
│        ├──03-9-fglrx.xzm
│        ├──80-eepm-1.5.2.xzm
│        ├──80-uird.soft.xzm
│        ├──90-magos-patches.xzm
│        ├──99-squashfs-tools.32.xzm
│        ├──99-u10-update.xzm
│        ├──99-u40-office4.xzm
│        ├──99-u50-utils.xzm
│        ├──99-u99-default.xzm
│        ├──MagOS.ini
│        └──update.txt
├──AltLinux-Data
│  ├──cache
│  ├──changes
│  ├──homes
│  ├──machines
│  ├──MagOS-Data.sgn
│  ├──modules
│  ├──optional
│  └──rootcopy
└──boot
   ├──grub4dos
   │  ├──install.lin
   │  ├──install.win
   │  └──local
   │     └──menu.lst
   ├──syslinux
   └──tools


testing

├──AltLinux
│  ├──iso
│  │  └──altlinux-p7-cinnamon-latest-i586.iso
│  ├──kernel
│  │  └──i586
│  │     ├──uird.magos.cpio.xz
│  │     ├──uird.soft.cpio.xz
│  │     └──vmlinuz
│  └──modules
│     └──i586
│        ├──00-kernel.xzm
│        ├──01-firmware.xzm
│        ├──03-1-nvidia-current.xzm
│        ├──03-2-nvidia304.xzm
│        ├──03-9-fglrx.xzm
│        ├──80-eepm-1.5.2.xzm
│        ├──80-uird.soft.xzm
│        ├──90-magos-patches.xzm
│        ├──99-squashfs-tools.32.xzm
│        ├──99-u10-update.xzm
│        ├──99-u40-office4.xzm
│        ├──99-u50-utils.xzm
│        ├──99-u99-default.xzm
│        ├──MagOS.ini
│        └──update.txt
├──AltLinux-Data
│  ├──cache
│  ├──changes
│  ├──homes
│  ├──machines
│  ├──MagOS-Data.sgn
│  ├──modules
│  ├──optional
│  └──rootcopy
├──boot
│  ├──grub4dos
│  │  ├──install.lin
│  │  ├──install.win
│  │  └──local
│  │     └──menu.lst
│  ├──syslinux
│  └──tools
└──update.tar.gz


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

# groupadd magos
# groupadd testing


Установить права на все каталоги репозитория:

# cd /var/www
# find magos -type f -exec chmod 664 {} +
# find magos -type d -exec chmod 775 {} +
# find testing -type f -exec chmod 664 {} +
# find testing -type d -exec chmod 775 {} +


Установить группы владельцев репозиториев:

# chown -R :magos magos
# chown -R :testing testing


Установить SGID на каталоги репозиториев:

# chmod g+s magos
# chmod g+s testing


Дополнительные данные сервера

yum.repos.d
CentOS-Base.repo
CentOS-Debuginfo.repo
CentOS-fasttrack.repo
CentOS-Media.repo
CentOS-Vault.repo
epel.repo
epel-testing.repo
vz.repo


Скрипты управления
Скрипты создавались для текущего использования и не претендуют на «коробочность» использования, поэтому при их применении прошу быть внимательными!Мониторинг
Скрипт update-txt.sh, выполняемый ежедневно по расписанию записывает в каталог modules файл update.txt, содержащий текущую дату. После синхронизации данных на пользовательский компьютер он позволяет легко проверить когда компьютер последний раз обновлялся. Это необходимый момент для отслеживания компьютеров, которые не перегружаются в течение длительного срока (пользователь не выключает компьютер).

Скрипт /etc/cron.daily/update-txt.sh
#!/bin/sh
echo "magos $(date)" > /var/www/magos/AltLinux/modules/i586/update.txt
echo "testing $(date)" > /var/www/testing/AltLinux/modules/i586/update.txt



Обновление
Скрипты testig2magos_kern.sh, testig2magos_mod.sh и testig2magos_all.sh предназначены для обновления рабочего репозитория из репозитория testing и выполняются только в ручном режиме.

testig2magos_kern.sh — обновляет только системные модули и каталог kernel.
testig2magos_mod.sh — выполняет обновление только пользовательских модулей.
testig2magos_all.sh — выполняет полное обновление включая папки kernel, iso и modules.

Ни один из скриптов не выполняет обновление файла MagOS.ini!

Изменения в этот файл вносятся только вручную.

Скрипт /root/bin/testig2magos_kern.sh
#!/bin/bash

# обновить ядро и системные модули MagOS в рупозитории magos
# из репозитория testing

MAGOS="/var/www/magos"
TESTING="/var/www/testing"
MAGOSGROUP="magos"

echo "!!! UPDATE KERNEL AND MAGOS MODULES TO magos REPOSITORY FROM testing REPOSITORY"
echo "                                       ====="
echo
echo "Pres Rnter to continue, or Ctrl+C to abort..."
read junk
clear

cp -ruv $TESTING/AltLinux/kernel/i586/*.xzm $MAGOS/AltLinux/kernel/i586/
cp -ruv $TESTING/AltLinux/modules/i586/[0-9]?-*.xzm $MAGOS/AltLinux/modules/i586/
find $MAGOS -type f -exec chmod 664 {} +
find $MAGOS -type d -exec chmod 775 {} +
chown -R :$MAGOSGROUP $MAGOS/*
echo "UPDATE KERNEL AND MAGOS MODULES FROM magos REPOSITORY IT IS EXECUTED"



Скрипт /root/bin/testig2magos_mod.sh
#!/bin/bash

# обновить пользовательские модули MagOS в рупозитории magos
# из репозитория testing

MAGOS="/var/www/magos"
TESTING="/var/www/testing"
MAGOSGROUP="magos"

echo "!!! UPDATE MODULES TO magos REPOSITORY FROM testing REPOSITORY"
echo "                      ====="
echo
echo "Pres Rnter to continue, or Ctrl+C to abort..."
read junk
clear
cp -ruv $TESTING/AltLinux/modules/i586/[0-9]??-*.xzm $MAGOS/AltLinux/modules/i586/
find $MAGOS -type f -exec chmod 664 {} +
find $MAGOS -type d -exec chmod 775 {} +
chown -R :$MAGOSGROUP $MAGOS/*
echo "UPDATE MODULES FROM magos REPOSITORY IT IS EXECUTED"



Скрипт /root/bin/testig2magos_all.sh
#!/bin/bash

# обновить целиком весь репозиторий magos
# из репозитория testing, включая каталог с исходным дистрибутивом iso

MAGOS="/var/www/magos"
TESTING="/var/www/testing"
MAGOSGROUP="magos"

echo "!!! UPDATE ALL MAGOS REPOSITORY magos FROM testing REPOSITORY"
echo "                                ====="
echo
echo "Pres Rnter to continue, or Ctrl+C to abort..."
read junk
clear

cp -ruv $TESTING/AltLinux/iso/ $MAGOS/AltLinux/iso/
cp -ruv $TESTING/AltLinux/kernel/i586/*.xzm $MAGOS/AltLinux/kernel/i586/
cp -ruv $TESTING/AltLinux/modules/i586/*.xzm $MAGOS/AltLinux/modules/i586/
find $MAGOS -type f -exec chmod 664 {} +
find $MAGOS -type d -exec chmod 775 {} +
chown -R :$MAGOSGROUP $MAGOS/*
echo "UPDATE magos REPOSITORY IT IS EXECUTED"



Пользовательские модули


Общие принципы создания пользовательских модулей
Что нужно знать
При создании модулей в MagOS приходится учитывать одну важную особенность, связанную с созданием пользователей и групп. При создании модуля в нем сохраняются измененные файлы passwd, group, shadow и т.д. Но, для того, чтобы следующий создаваемый модуль их «видел» скриптом epm2xzm, нужно, чтобы название модуля соответствовало шаблону «NN-». Если названия модулей не будут соответствовать этому шаблону, то каждый последующий создаваемый модуль так же, как и первый, будут создаваться на основе только базовых модулей MagOS. Больнее всего это ударит по файлам аутентификации: программы создающие системных пользователей и устанавливаемые в разные модули получают одинаковые UID и GID, а файлы типа passwd, созданные в разных модулях переписываются последующими слоями. В результате установленные в нижележащих модулях программы оказываются неработоспособными.

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

Скрипты создающие модули написаны так, что в качестве имени модуля используют собственное название. Скрипт, названный 99-u30-example.sh будет создавать модуль с названием 99-u30-example.xzm.

Сколько модулей делать
Порядок подключения базовых модулей не имеет значения, поскольку в них нет никаких перекрывающихся файлов и каталогов. Но имеет значение порядок подключения пользовательских модулей. Если в пользовательских модулях имеются исправления файлов базовых модулей, а в случае с адаптацией MagOS для дистрибутива AltLinux такая ситуация наблюдается, то они должны располагаться в верхних слоях aufs и подключаться после системных. Модули подключаются в систему, будучи отсортированными по названию, поэтому название модуля имеет важное значение. Поскольку название последнего системного модуля начинается с символов «99-», рекомендуется использовать названия пользовательских модулей, начинающееся с символов «99?-» таким образом, чтобы при сортировке каталога по названию они оказывались после системных модулей.Модули специального назначения
Рекомендуется выделить два модуля имеющих особое назначение: модуль, в котором располагается текущее обновление операционной системы. Его рекомендуется устанавливать первым, поэтому его рекомендованное название «99-u10-update». И модуль, содержащий адаптированные файлы настроек операционной системы и ее программ. Его рекомендуется устанавливать последним. При создании модуля с настройками нужно соблюсти несколько правил:

  • в этот модуль нельзя ставить программы.
  • в этом модуле не должно быть файлов, ответственных за назначение прав (passwd, group и т.п.)


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

Вторым ограничением, но уже с другой стороны, выступают требования к ресурсам компьютера, на котором выполняется пересборка модулей. Во время установки программ в модуль файловая система, по-умолчанию, располагается в оперативной памяти, поэтому количество устанавливаемых программ напрямую связано с размером требуемой оперативной памяти. Так, для установки Libreoffice требуется, чтобы на компьютере было около 3 Гигабайт свободной оперативной памяти. Для того, чтобы устранить это ограничение требуется специальным образом подготовить директорию для размещения временных файлов для создания модулей.

Таким образом минимальное количество модулей, с которыми придется работать может быть 3, а оптимальное количество 4 модуля.

Инструкция по созданию модулей
Процедура сборки модуля выглядит следующим образом:

  1. Загрузить средства обновления /root/bin/loadupdate.sh.
  2. Отключить обновление системы при пер

    © Habrahabr.ru