Подробный гайд по установке шрифтов Puppet в Astra Linux - Часть 3
9. Установка шрифтов через Puppet
Если под фразой «установка шрифтов puppet» вы имеете в виду автоматизированную установку через систему управления конфигурациями Puppet, ниже приведён рабочий вариант для Astra Linux.
9.1. Общая идея
Puppet должен:
- Убедиться, что установлен
fontconfig. - Создать каталог для шрифтов.
- Скопировать файлы шрифтов из модуля.
- Выставить права.
- Обновить кэш шрифтов.
9.2. Где хранить модули
Обычно каталог модулей можно посмотреть так:
puppet config print modulepath
Например:
/etc/puppetlabs/code/environments/production/modules
или в некоторых вариантах:
/etc/puppet/modules
Дальше для примера будем использовать:
/etc/puppetlabs/code/environments/production/modules
9.3. Структура модуля
Создадим модуль profile.
Структура:
/etc/puppetlabs/code/environments/production/modules/profile/
├── manifests/
│ └── fonts/
│ └── puppet.pp
└── files/
└── fonts/
└── puppet/
├── Puppet-Regular.ttf
├── Puppet-Bold.ttf
└── Puppet-Italic.ttf
Создать каталоги:
sudo mkdir -p /etc/puppetlabs/code/environments/production/modules/profile/manifests/fonts
sudo mkdir -p /etc/puppetlabs/code/environments/production/modules/profile/files/fonts/puppet
Скопируйте файлы шрифтов:
sudo cp ~/puppet-fonts/*.ttf /etc/puppetlabs/code/environments/production/modules/profile/files/fonts/puppet/
Или, если нужно скопировать .ttf, .otf, .ttc:
sudo find ~/puppet-fonts -type f \( -iname '*.ttf' -o -iname '*.otf' -o -iname '*.ttc' \) \
-exec cp {} /etc/puppetlabs/code/environments/production/modules/profile/files/fonts/puppet/ \;
9.4. Манифест установки шрифтов
Создайте файл:
sudo nano /etc/puppetlabs/code/environments/production/modules/profile/manifests/fonts/puppet.pp
Вставьте содержимое:
class profile::fonts::puppet (
String $font_dir = '/usr/local/share/fonts/puppet',
) {
package { 'fontconfig':
ensure => installed,
}
file { $font_dir:
ensure => directory,
source => 'puppet:///modules/profile/fonts/puppet',
recurse => true,
purge => true,
force => true,
owner => 'root',
group => 'root',
mode => '0644',
directory_mode => '0755',
require => Package['fontconfig'],
notify => Exec['profile_fonts_puppet_fc_cache'],
}
exec { 'profile_fonts_puppet_fc_cache':
command => "/usr/bin/fc-cache -f ${font_dir} && /usr/bin/fc-cache -f",
path => ['/usr/bin', '/bin'],
refreshonly => true,
}
}
Сохраните файл.
9.5. Что делает этот манифест
Параметр font_dir
String $font_dir = '/usr/local/share/fonts/puppet',
Задаёт каталог установки шрифтов.
Установка fontconfig
package { 'fontconfig':
ensure => installed,
}
Гарантирует, что пакет fontconfig установлен.
Копирование шрифтов
file { $font_dir:
ensure => directory,
source => 'puppet:///modules/profile/fonts/puppet',
recurse => true,
purge => true,
force => true,
owner => 'root',
group => 'root',
mode => '0644',
directory_mode => '0755',
require => Package['fontconfig'],
notify => Exec['profile_fonts_puppet_fc_cache'],
}
Этот блок:
- создаёт каталог
/usr/local/share/fonts/puppet; - копирует содержимое из каталога модуля
profile/files/fonts/puppet; - рекурсивно обходит файлы;
- удаляет файлы, которых нет в источнике, из-за
purge => true; - выставляет права;
- после изменения файлов вызывает обновление кэша шрифтов.
Если вы не хотите, чтобы Puppet удалял лишние файлы в каталоге, уберите строки:
purge => true,
force => true,
Обновление кэша шрифтов
exec { 'profile_fonts_puppet_fc_cache':
command => "/usr/bin/fc-cache -f ${font_dir} && /usr/bin/fc-cache -f",
path => ['/usr/bin', '/bin'],
refreshonly => true,
}
Команда выполняется только если ресурс file { $font_dir: ... } сообщил об изменениях.
9.6. Проверка синтаксиса манифеста
Выполните:
sudo puppet parser validate /etc/puppetlabs/code/environments/production/modules/profile/manifests/fonts/puppet.pp
Если вывод пустой — синтаксис корректный.
9.7. Пробное применение
Сначала можно выполнить проверку без реальных изменений:
sudo puppet apply --noop -e 'include profile::fonts::puppet' \
--modulepath /etc/puppetlabs/code/environments/production/modules
Затем применить реально:
sudo puppet apply -e 'include profile::fonts::puppet' \
--modulepath /etc/puppetlabs/code/environments/production/modules
Если у вас несколько каталогов в modulepath, укажите нужный вручную.
9.8. Применение через агент
Если у вас есть Puppet-сервер и агент настроен:
sudo puppet agent -t
После этого проверьте:
ls -l /usr/local/share/fonts/puppet
fc-list | grep -i puppet
9.9. Более простой вариант: копировать конкретные файлы
Если не нужно синхронизировать весь каталог, а нужно только несколько файлов, можно использовать список файлов.
Пример:
class profile::fonts::puppet (
String $font_dir = '/usr/local/share/fonts/puppet',
) {
$fonts = [
'Puppet-Regular.ttf',
'Puppet-Bold.ttf',
'Puppet-Italic.ttf',
]
package { 'fontconfig':
ensure => installed,
}
file { $font_dir:
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
require => Package['fontconfig'],
}
$fonts.each |String $font_name| {
file { "${font_dir}/${font_name}":
ensure => file,
source => "puppet:///modules/profile/fonts/puppet/${font_name}",
owner => 'root',
group => 'root',
mode => '0644',
require => File[$font_dir],
notify => Exec['profile_fonts_puppet_fc_cache'],
}
}
exec { 'profile_fonts_puppet_fc_cache':
command => "/usr/bin/fc-cache -f ${font_dir} && /usr/bin/fc-cache -f",
path => ['/usr/bin', '/bin'],
refreshonly => true,
}
}
Этот вариант удобнее, если вы хотите явно контролировать каждый файл.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.