Почему getent по умолчанию использует.station, если TLD не указан?

Думаю, у меня есть на это ответ. Резюме, похоже, состоит в том, что произошло изменение имени, хотя мне пока не удалось найти документацию по этому поводу.

Детали:

Заметки Шичао основаны на книге Linux Kernel Development Роберта Лава . Эта книга основана на ядре версии 2.6.34. Фрагменты кода в примечаниях соответствуют коду в файле kernel/workqueue.c для этой версии:

/*
 * The per-CPU workqueue (if single thread, we always use the first
 * possible cpu).
 */
struct cpu_workqueue_struct {

        spinlock_t lock;

        struct list_head worklist;
        wait_queue_head_t more_work;
        struct work_struct *current_work;

        struct workqueue_struct *wq;
        struct task_struct *thread;
} ____cacheline_aligned;

/*
 * The externally visible workqueue abstraction is an array of
 * per-CPU workqueues:
 */
struct workqueue_struct {
        struct cpu_workqueue_struct *cpu_wq;
        struct list_head list;
        const char *name;
        int singlethread;
        int freezeable;         /* Freeze threads during suspend */
        int rt;
#ifdef CONFIG_LOCKDEP
        struct lockdep_map lockdep_map;
#endif
};

Похоже, что эта версия Linux использовала функцию init _workqueues для создания рабочих очередей:

void __init init_workqueues(void)
{
       ...
        keventd_wq = create_workqueue("events");
}

В книге Роберта Лава на странице 154 в разделе «Создание очередей» говорится: «

You create a new work queue and the associated worker threads via a simple function: struct workqueue_struct *create_workqueue(const char *name); The parameter name is used to name the kernel threads

Таким образом, кажется весьма показательным, что приведенный выше код является причиной того, что рабочие потоки были тогда названы «событиями».

Более новый код, относящийся к 4.19, имеет несколько отличий. Во-первых, workqueue _struct намного обширнее, а cpu _workqueue _struct больше не существует. Теперь есть пулы, и создание рабочего потока рабочей очереди выполняется функцией с именем create _worker в пуле. Внутри этой функции создается kthread "kworker/%s", как видно из приведенного ниже фрагмента кода :

.

/**
 * create_worker - create a new workqueue worker
 * @pool: pool the new worker will belong to
 *
 * Create and start a new worker which is attached to @pool.
 *
 * CONTEXT:
 * Might sleep.  Does GFP_KERNEL allocations.
 *
 * Return:
 * Pointer to the newly created worker.
 */
static struct worker *create_worker(struct worker_pool *pool)
{
       ...
        worker->task = kthread_create_on_node(worker_thread, worker, pool->node,
                                              "kworker/%s", id_buf);
       ...
}

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

Что касается окончательной информации об рабочих очередях, то она находится в этом документе ядра

3
03.05.2021, 13:41
2 ответа

getent hostsделает то, что ему говорит строка hostsстроки nsswitch.conf. straceуказывает, что он отправляет одноадресный DNS-запрос на адрес 192.168.0.100.

У вас есть две службы разрешения имен хостов, которые могут использовать одноадресную DNS:resolveи dns. Один или оба из них, вероятно, настроены вашим DHCP-клиентом на использование stationв качестве домена DNS по умолчанию.

Для resolveзапустите resolvectl status. Для dnsзапустите cat /etc/resolv.conf. Это должно сказать вам, для какой из служб разрешения DNS настроен домен station.

(Если resolveне настроен на использование обычного DNS, использование обоих resolveи dnsвместе является чем-то вроде пояса -и -конфигурации подтяжек :, обычно вам потребуется только один или другой.)

Если вы используете NetworkManager для настройки сетевых интерфейсов и используете DHCP, вы можете посмотреть новейший *.leaseфайл (или аналогичный; это может зависеть от того, какой DHCP-клиент NetworkManager настроен на использование )в /var/lib/NetworkManager, чтобы увидеть, какой DHCP-сервер фактически предоставил вам IP-адрес и какие дополнительные параметры DHCP были предоставлены вместе с ним.

Другой способ просмотреть параметры DHCP, заданные DHCP-сервером, — запустить nmcli c show, чтобы получить список настроенных подключений, найти имя активного подключения, а затем использовать nmcli c show <name of active connection> | grep DHCP..OPTION.

Поскольку Vodafone Power Station является вашим маршрутизатором, он, скорее всего, также действует как DHCP-сервер для вашей домашней сети. .station, вероятно, является заводской настройкой по умолчанию для домена DNS, и она распространяется на все DHCP-клиенты. Вероятно, это можно изменить в настройках маршрутизатора.

3
28.07.2021, 11:35

Из-за несвязанной проблемы я проверил /etc/resolv.conf, созданный NetworkManagerна всех дистрибутивах, которые я использую в качестве клиентов.

Согласно предложению @Kusalananda, кажется, что Vodafone Power Station заставляет диспетчер сети добавить параметр search stationв файл и его IP-адрес в качестве DNS-сервера; удаление такой строки приводит к сбою разрешения имени http://vodafone.stationв Firefox (, что само по себе странно, поскольку имя по-прежнему разрешается DNS станции )

.
1
28.07.2021, 11:35

Теги

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