Подробный гайд по установке шрифтов Puppet в Astra Linux - Часть 3

Подробный гайд по установке шрифтов Puppet в Astra Linux: ручная настройка через fontconfig и автоматизация развертывания с помощью Puppet-манифестов.

2026.11.04                  


Подробный гайд по установке шрифтов Puppet в Astra Linux - Часть 3Подробный гайд по установке шрифтов Puppet в Astra Linux - Часть 3

9. Установка шрифтов через Puppet

Если под фразой «установка шрифтов puppet» вы имеете в виду автоматизированную установку через систему управления конфигурациями Puppet, ниже приведён рабочий вариант для Astra Linux.


9.1. Общая идея

Puppet должен:

  1. Убедиться, что установлен fontconfig.
  2. Создать каталог для шрифтов.
  3. Скопировать файлы шрифтов из модуля.
  4. Выставить права.
  5. Обновить кэш шрифтов.

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,
  }
}

Этот вариант удобнее, если вы хотите явно контролировать каждый файл.


Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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