Bug 39761

Summary: Генерирует слишком длинное имя хоста
Product: Sisyphus Reporter: Sergey V Turchin <zerg>
Component: installer-common-stage2Assignee: Anton V. Boyarshinov <boyarsh>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, arbich, boyarsh, iv, klark, mike, rider, sem, sin, vitty, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=39758
https://bugzilla.altlinux.org/show_bug.cgi?id=41234

Description Sergey V Turchin 2021-03-05 15:10:33 MSK
Генерируемое имя хоста может вызывать проблему у Smaba из-за чрезмерной длины.
См. ошибка#39758 

Например "comp-" можно смело убирать и "-" по возможности тоже.
Comment 1 Ivan A. Melnikov 2021-03-06 11:30:08 MSK
Вообще генерацией занимается preinstall.d/40-autohostname.sh из пакета installer, так что перевешу ка я это на правильный компонент.
Comment 2 Ivan A. Melnikov 2021-03-06 11:33:15 MSK
В #39758 говорят об ограничении в 13 символов. Это прям вообще мало для чего-то автосгенерённого: если мы используем 6 последних символов на кусок мак-адреса для уникальности, то остаётся всего 7 символов на что-то человекоориентированное.

Интересно, какие ещё оганичения на hostname (помимо соответствующих RFC) существуют.
Comment 3 Michael Shigorin 2021-03-06 20:20:52 MSK
Как вариант, можно где-то уже в net-eth (бишь stage3) смотреть и если по умолчанию выходит слишком длинное имя -- обрезать (в случае соответствия шаблону автогенерата) или предупреждать, что с такими-то компонентами будут грабли.
Comment 4 Michael Shigorin 2021-03-06 21:11:36 MSK
(Ответ для Арбичев Игорь на комментарий #0)
>  It may be because your hostname is longer than 13 and samba default
> 'netbios name' defaults to 'hostname-W', here: "comp-core2-duo-4e3cb5-W" 
Можно, кстати, ещё и прогонять при генерации через горстку регулярных выражений для расхожих вариантов вроде s/core2-duo/c2d/;s/core2-quad/c2q/;s/core-// (чтобы мой core-i7-3517u потерял пять лишних букв, например).
Comment 5 Evgeny Sinelnikov 2021-03-07 03:20:23 MSK
Ну, я бы не сводил вопрос генерации к вопросу о предупреждении. Предупреждение - это задача инструмента применения настройки. И, в данном случае, это alterator-net-eth, который умеет менять имя хоста.

А вот вопрос слишком длинного имени, предполагает "улучшить" генератор имён.
Comment 6 Anton V. Boyarshinov 2021-03-09 12:01:07 MSK
Насколько я понимаю, кто самбу настраивает, тот и должен позаботиться о том, чтоб netbios имя было подходящей длины. Человек или софт. А на hostname как таковой эти ограничения распространяться не должны.
Comment 7 Sergey V Turchin 2021-03-09 13:47:08 MSK
(Ответ для Anton V. Boyarshinov на комментарий #6)
> Насколько я понимаю, кто самбу настраивает, тот и должен позаботиться о том,
> чтоб netbios имя было подходящей длины.
Согласен, что в 1-ю очередь должно быть https://bugzilla.altlinux.org/show_bug.cgi?id=39758#c1
Comment 8 Sergey V Turchin 2021-03-09 13:51:54 MSK
(Ответ для Anton V. Boyarshinov на комментарий #6)
> Насколько я понимаю, кто самбу настраивает, тот и должен позаботиться о том,
> чтоб netbios имя было подходящей длины. Человек или софт.
Софт: samba должна мочь повлиять на выбор имени хоста, а это маловероятно.
Человек: можно его как-то заставить, но он переведёт стрелки на генератор.
Comment 9 Sergey V Turchin 2021-03-10 11:24:34 MSK
Возможно, есть смысл сделать плашку с предупреждением под именем хоста в alterator-net-eth в дополнение к генератору, чтоб до упора его не ужимать и в генераторе максимально возможное убрать.
Comment 10 Sergey V Turchin 2021-03-10 11:29:59 MSK
Ещё можно(наверняка) настройку сети сдвинуть после создания пользователя и тогда генератор сможет это использовать. Будет вполне вменяемо получаться, как маздае, типа "pupkin-comp".
Comment 11 Anton Farygin 2021-03-10 13:47:40 MSK
сдвинуть настойку отличная идея, мне нравится.
Comment 12 Антон Мидюков 2021-03-17 07:52:56 MSK
(Ответ для Sergey V Turchin на комментарий #10)
> Ещё можно(наверняка) настройку сети сдвинуть после создания пользователя и
> тогда генератор сможет это использовать. Будет вполне вменяемо получаться,
> как маздае, типа "pupkin-comp".

Имя хоста генерируется preinstall.d/40-autohostname.sh на шаге preinstall. Этот шаг передвинуть не можем, а передвигать шаг настройки сети смысла не имеет.
Comment 13 Sergey V Turchin 2021-03-17 10:24:11 MSK
Значит, остаётся только сделать галку "Совместмость с различными сервисами" https://bugzilla.altlinux.org/show_bug.cgi?id=39758#c22 и в рамках её мудрить.
Comment 14 Sergey V Turchin 2021-03-17 10:27:21 MSK
А лучше всего без всяких галок тупо ограничивать до необходимого для всего подряд сразу.
Comment 15 Антон Мидюков 2021-03-17 11:58:00 MSK
(Ответ для Sergey V Turchin на комментарий #14)
> А лучше всего без всяких галок тупо ограничивать до необходимого для всего
> подряд сразу.

Так в скрипте preinstall.d/40-autohostname.sh это сделать и нужно.

Предлагайте алгоритм формирования имени. Сейчас это comp + Модель_процессора_если _есть_из_/proc/cpuinfo + вторая_половина_mac-адреса_первого_ethernet_интерфейса_если_такой_есть
Comment 16 Sergey V Turchin 2021-03-17 12:25:44 MSK
(Ответ для Антон Мидюков на комментарий #15)
> Так в скрипте preinstall.d/40-autohostname.sh это сделать и нужно.
Ок.
 
> Предлагайте алгоритм формирования имени. Сейчас это comp +
3. Если итог > 13и символов, не добавлять "-comp" вообще.

> Модель_процессора_если _есть_из_/proc/cpuinfo +
1. Сократить по максимуму, убирая всякие "core-", чтоб только модель осталась, типа "i7-7500u". Тут, видимо, сложнее всего.

> вторая_половина_mac-адреса_первого_ethernet_интерфейса_если_такой_есть
2. Если итог > 13и символов, сократить напополам.

4. Если итог > 13и символов, убрать минусы.
Comment 17 Sergey V Turchin 2021-03-17 12:27:14 MSK
(Ответ для Sergey V Turchin на комментарий #16)
> > вторая_половина_mac-адреса_первого_ethernet_интерфейса_если_такой_есть
> 2. Если итог > 13и символов, сократить напополам.
Последнюю часть оставлять, соответственно.
Comment 18 Anton Farygin 2021-03-17 12:29:45 MSK
+ считать 64-битный хэш от имени + макадреса + random и писать его в конец.
Comment 19 Sergey V Turchin 2021-03-17 13:24:51 MSK
(Ответ для Anton Farygin на комментарий #18)
> + считать 64-битный хэш от имени + макадреса + random и писать его в конец.
Мы сокращаем, а не удлинняем.
Comment 20 Anton V. Boyarshinov 2021-03-17 14:11:22 MSK
(Ответ для Anton Farygin на комментарий #18)
> + считать 64-битный хэш от имени + макадреса + random и писать его в конец.

Идея была в том, чтоб имя было хоть каким-то разумным образом связано с компьютером.
Comment 21 Anton Farygin 2021-03-17 14:19:27 MSK
от процессора можно оставить i7
Т.е. - я думаю что идеальным hostname должно быть что-то вроде i7-<8 байт>
Comment 22 Sergey V Turchin 2021-03-17 14:21:14 MSK
(Ответ для Anton V. Boyarshinov на комментарий #20)
> Идея была в том, чтоб имя было хоть каким-то разумным образом связано с компьютером.
При этом закодировано, чтоб никто не догадался. ;-)
Comment 23 Sergey V Turchin 2021-03-17 14:23:00 MSK
(Ответ для Anton Farygin на комментарий #21)
> Т.е. - я думаю что идеальным hostname должно быть что-то вроде i7-<8 байт>
Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?
Comment 24 Sergey V Turchin 2021-03-17 14:27:02 MSK
> Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
> а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?
Мой вариант в этих случаях: "a15-107" и "i6-142".
1-я буква из "model name", число из "cpu family", число из "model".
Comment 25 Ivan A. Melnikov 2021-03-17 15:21:40 MSK
(In reply to Sergey V Turchin from comment #24)
> > Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
> > а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?
> Мой вариант в этих случаях: "a15-107" и "i6-142".
> 1-я буква из "model name", число из "cpu family", число из "model".

Главное, не забудте, что всего этого может вообще не быть, а в "model" может быть и не число. Некоторые архитектуры странные)
Comment 26 Антон Мидюков 2021-03-17 15:40:24 MSK
(Ответ для Ivan A. Melnikov на комментарий #25)
> (In reply to Sergey V Turchin from comment #24)
> > > Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
> > > а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?
> > Мой вариант в этих случаях: "a15-107" и "i6-142".
> > 1-я буква из "model name", число из "cpu family", число из "model".
> 
> Главное, не забудте, что всего этого может вообще не быть, а в "model" может
> быть и не число. Некоторые архитектуры странные)

Так может просто comp-<MAC-адрес>, если сетевого интерфейса нет, то comp-<RANDOM>?(Ответ для Ivan A. Melnikov на комментарий #25)
> (In reply to Sergey V Turchin from comment #24)
> > > Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
> > > а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?
> > Мой вариант в этих случаях: "a15-107" и "i6-142".
> > 1-я буква из "model name", число из "cpu family", число из "model".
> 
> Главное, не забудте, что всего этого может вообще не быть, а в "model" может
> быть и не число. Некоторые архитектуры странные)

Кстати, что Таволга и bfk3 выдают?
Comment 27 Anton Farygin 2021-03-17 16:27:17 MSK
(Ответ для Sergey V Turchin на комментарий #23)
> (Ответ для Anton Farygin на комментарий #21)
> > Т.е. - я думаю что идеальным hostname должно быть что-то вроде i7-<8 байт>
> Это когда "Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz", 
> а как быть с "AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, например"?

AMD-<8 байт>
Во многих организациях стоят сотни одинаковых машин. Пытаться сделать уникальное имя для них нет никакого смысла.

Вот брать последние 2 байта мак-адреса в имя, наверное, можно.
Comment 28 Sergey V Turchin 2021-03-17 16:30:00 MSK
(Ответ для Anton Farygin на комментарий #27)
> > > hostname должно быть что-то вроде i7-<8 байт>
> AMD-<8 байт>
Думаю, заманаешься выпарсивать.
Comment 29 Anton Farygin 2021-03-17 16:31:09 MSK
(Ответ для Sergey V Turchin на комментарий #28)
> (Ответ для Anton Farygin на комментарий #27)
> > > > hostname должно быть что-то вроде i7-<8 байт>
> > AMD-<8 байт>
> Думаю, заманаешься выпарсивать.

Откуда выпарсивать ?
Слово AMD ?
Comment 30 Sergey V Turchin 2021-03-17 16:36:09 MSK
(Ответ для Anton Farygin на комментарий #29)
> Слово AMD ?
Только, не "AMD", а "amd".
Нет. Слова "amd", "i7","e2k" и остальные. Проще 1-ю букву от "model name" взять.
Comment 31 Sergey V Turchin 2021-03-17 16:36:50 MSK
> в "model" может быть и не число
Да не суть.
Comment 32 Anton V. Boyarshinov 2021-03-17 16:50:07 MSK
(Ответ для Anton Farygin на комментарий #27)
 
> AMD-<8 байт>
> Во многих организациях стоят сотни одинаковых машин. Пытаться сделать
> уникальное имя для них нет никакого смысла.

На всякий случай обращаю внимания на то, что этот алгоритм работает только в ситуации, когда машине не дали адреса по DHCP. Если дали и он ресолвится в имя -- будет это имя. Если дали, но не ресолвится в имя -- будет host-последний_байт_ip

А comp-.... это последний рубеж.
Comment 33 Anton Farygin 2021-03-17 16:55:31 MSK
Идеальное имя хоста. Найдено в сети.
perl -e 'open IN, "</usr/share/dict/words";rand($.) < 1 && ($n=$_) while <IN>;$n=~s/'\''//g;print lc($n)'
Comment 34 Anton Farygin 2021-03-17 17:04:31 MSK
А ещё есть файл /etc/machine-id первые/последние байты которого можно использовать для генерации имени хоста
Comment 35 Ivan A. Melnikov 2021-03-17 17:16:26 MSK
(In reply to Anton Farygin from comment #33)
> Идеальное имя хоста. Найдено в сети.
> perl -e 'open IN, "</usr/share/dict/words";rand($.) < 1 && ($n=$_) while
> <IN>;$n=~s/'\''//g;print lc($n)'

$ perl -e 'open IN, "</usr/share/dict/words";rand($.) < 1 && ($n=$_) while <IN>;$n=~s/'\''//g;print lc($n)'
bitimen
$ perl -e 'open IN, "</usr/share/dict/words";rand($.) < 1 && ($n=$_) while <IN>;$n=~s/'\''//g;print lc($n)'
peristatic
$ perl -e 'open IN, "</usr/share/dict/words";rand($.) < 1 && ($n=$_) while <IN>;$n=~s/'\''//g;print lc($n)'
biorthonormalization


Но идея хорошая. Я думал предложить какой-нибудь такой список за основу: https://github.com/technosophos/moniker/blob/master/animals.txt
Comment 36 Sergey V Turchin 2021-03-17 17:38:10 MSK
Там же есть генератор красивых паролей. Надо его и использовать.
Comment 37 Anton Farygin 2021-03-17 18:11:40 MSK
Для уникальности предлагаю составить список российских городов, штук 800 и с помощью random выбирать из них случайное имя и делать его именем хоста.

Можно поизвращаться, составив список не городов, а рек и выбирать только 8-ми буквенные и добавлять к ним номер с мак-адреса.
Comment 38 Sergey V Turchin 2021-03-18 10:34:05 MSK
В установщике уже есть pwqgen со своим словарём. Достаточно подсунуть ему нужный конфиг.
Comment 39 Арбичев Игорь 2021-03-18 19:15:03 MSK
В openSUSE последние полгода вообще перестали заморачиваться с генерацией рандомного имени и всем назначают типа "admin@localhost:~>". Зато заведомо короче 15 символов.
Comment 40 Sergey V Turchin 2021-03-19 09:52:03 MSK
(Ответ для Арбичев Игорь на комментарий #39)
> admin@localhost
У нас это повод для шутки. ;-)
Comment 41 Арбичев Игорь 2021-04-05 18:11:36 MSK
А мне вот не до шуток. Я хотел бы узнать, собираетесь ли вы решать эту проблему в установщике?
Comment 42 Ivan A. Melnikov 2021-04-05 18:13:53 MSK
(In reply to Арбичев Игорь from comment #41)
> А мне вот не до шуток. Я хотел бы узнать, собираетесь ли вы решать эту
> проблему в установщике?

Собираемся.
Comment 43 Sergey V Turchin 2021-04-06 10:04:42 MSK
(Ответ для Арбичев Игорь на комментарий #41)
> А мне вот не до шуток.
Мне тоже, поэтому этот пример не рассматривается.
Comment 44 Repository Robot 2021-04-15 16:06:10 MSK
installer-1.10.10-alt1 -> sisyphus:

 Fri Apr 09 2021 Oleg Solovyov <mcpain@altlinux> 1.10.10-alt1
 - generate hostname via pwqgen, if it's longer than 13 chars (Closes: 39761)