как правильно установить локаль вручную?

1. )Если ваш дистрибутив Linux использует journaldв полной мере, не будет легко читаемого традиционного файла журнала, как упоминалось @JdeBP . Файл журнала использует двоичный формат и не может быть легко проанализирован традиционными инструментами файла журнала.

2. )Если journalctl -u {service}содержит нужную вам информацию, вы можете использовать journalctl -f -u {service}и направить вывод в программу, которая анализирует журнал и запускает все необходимые реакции. Все остальное, скорее всего, будет зависеть от выбранного вами дистрибутива Linux.

Например, Debian 9 (Stretch )в конфигурации по умолчанию journaldподдерживает традиционный входной сокет системного журнала /dev/log. Но если rsyslogdустановлен, journaldнастроен на пересылку входящих сообщений системного журнала на него.

В других дистрибутивах Linux связь между journaldи традиционным демоном системного журнала может иметь другую структуру.

2
31.12.2020, 21:07
2 ответа

Вы должны добавить локаль в /etc/locale.gen, построить ее, и тогда вы сможете ее использовать:

$ sudo echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
$ sudo locale-gen

Вы можете поместить эти команды в свой файл докера.

1
18.03.2021, 22:39

Проблема, которую вы видите, заключается в том, что по умолчанию в контейнер Docker не встроены никакие локали, кроме C(, также известной какPOSIXC.UTF-8(версии UTF -8 ). Это связано с тем, что glibc поставляется с огромным количеством локалей, которые занимают приличное количество места, а Debian и Ubuntu для экономии места поставляют только сжатые версии в пакете locales, требуя, чтобы в системе были созданы определенные локали.

Если вы просто ищете англоязычную локаль с UTF -8, тогда C.UTF-8может удовлетворить ваши потребности и избежать необходимости создавать новую локаль в вашем контейнере. Вы можете просто использовать LC_ALL=C.UTF-8 docker run -it test.

Однако, если вам нужна англоязычная локаль США специально (, например, потому что вам по какой-то странной причине очень нравится система Avoirdupois и вы хотите использовать ее с LC_MEASUREMENT), самым простым решением будет установка пакета locales-all.. Это обеспечивает предварительно -собранные версии всех локалей.

В качестве альтернативы, если вам не хватает места, вы можете обновить свой Dockerfile, добавив эту строку:

RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen

Это создаст именно ту локаль, которую вы хотите.

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

$ perl -MPOSIX=locale_h -E 'exit !setlocale(LC_ALL, $ARGV[0]);' "$locale" \
  2>/dev/null
3
18.03.2021, 22:39

Теги

Похожие вопросы