LINUX.ORG.RU

Надоело, мне значит придумывать имена хоста

 


1

1

Написал такой скрипт:

#!/usr/bin/env bash
set -eo pipefail

default_hostname() {
  pc_type=`[ -d /sys/module/battery ] && echo laptop || echo desktop`
  random_chars=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 6 | head -n1`
  echo "${pc_type}-${random_chars}"
}

if [[ $EUID -ne 0 ]]; then
  echo "Please run as root" >&2
  exit 1
fi

new_hostname="${1:-`default_hostname`}"
old_hostname=`hostnamectl hostname`

if [ "$new_hostname" = "$old_hostname" ]; then
  echo "Same hostname" >&2
  exit 1
fi

hostnamectl hostname "$new_hostname"

if grep -q 127.0.1.1 /etc/hosts; then
  sed -ir 's/127\.0\.1\.1.*/127.0.1.1 '"$new_hostname"'/g' /etc/hosts
else
  echo "127.0.1.1 $new_hostname" >> /etc/hosts
fi

# демон, который позволяет найти машину в локальной сети по имени хоста
systemctl restart avahi-daemon

echo "Hostname changed: $old_hostname -> $new_hostname"

Оно работает:

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-i3OP39 -> laptop-RYBuKi

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-RYBuKi -> laptop-TWsYug

~ 
➜ sudo set-hostname.sh
Hostname changed: laptop-TWsYug -> laptop-Aw5d56

~
➜ sudo set-hostname.sh acer-laptop   
Hostname changed: laptop-Aw5d56 -> acer-laptop

~ 
➜ cat /etc/hosts           
127.0.0.1 localhost
127.0.1.1 acer-laptop

Но как победить это?

~ took 2s 
➜ vi ~/bin/set-hostname.sh    
_IceTransSocketUNIXConnect: Cannot connect to non-local host sergeym
_IceTransSocketUNIXConnect: Cannot connect to non-local host sergeym

Финальная версия скрипта с обновлениями

Не забудьте поставить лойс. Как применить новое имя без логаута, я не нашел

★★

Последнее исправление: tz4678 (всего исправлений: 3)

Загляни в этот файл .Xauthority

anonymous
()

Я понимаю, что вопрос топика не в этом, но раз ты по сути генеришь UUID, почему бы не воспользоваться uuidgen?

manntes-live ★★★
()

< /dev/urandom tr -cd [:lower:][:digit:] | head -c 8; echo

anonymous
()

pc_type=`[ -d /sys/module/battery ] && echo laptop || echo desktop`

вендузятнег =)
если ты не регистрируешь hostname в dns, тебе хватит localhost.localdomain

Minona ★★☆
()

Очередные ЛГБТ часовые пояса?

Подсказка на будущее: у ноутбука есть модель, можно ничего не выдумывать, а у десктопа есть как минимум местоположение.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

а у десктопа модель чего? материнки, проца или серийник на корпусе? уникальные имена хостов нужны чтобы в сети на 100-200 машин (допустим, компания этаж занимает) как-то идентифицировать всякие кофеВАрки, принтеры и прочие устройства у которых этот ваш айпи может меняться

tz4678 ★★
() автор топика
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

я думаю, что важно знать ос (винда, unix). возможно, тип устройства. для последнего желательно знать дистр. модель ноута и пр не важно, однако она позволяет отличить принтер от компа (у которых от кояцер ничего нет). у меня же дома два компа, два ноута, роутер, яндекс колонка и все. очевидно что я могу и просто обозвать свое устройство acet-laptop, sergey-laptop, arch-laptop, но если я прийду в офис с десятком других машин, то там оно не будет уникальным

tz4678 ★★
() автор топика

Мой настольник с упсом определается как наколленик. Нихарашо.

mogwai ★★★★★
()
Ответ на: комментарий от anonymous

мне кажется домашние бинарники правильней хранить в ~/.local/bin

С каких это пор?

anonymous
()
Ответ на: комментарий от WitcherGeralt

Как нафига, удачные модели надо пачками брать. Lenovo X220 в момент моддинга на FullHD у меня до трех было, потом распродалось. У родни сейчас одинаковые X1 Carbonы, там семейство ОС и то их лучше дифференцирует, чем модель.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

У родни сейчас одинаковые X1 Carbon

И вся твоя родня вместе одним табором живёт? Думаю, каждый осилит придумать по одному уникальному названию.

WitcherGeralt ★★
()
Ответ на: комментарий от t184256

Я, кстати, всё же притащил желанный ноут с ибея по твоему совету. Вышло по цене ровно как на Авито. Из плюсов только на удивление идеальное состояние (но это просто повезло), нормальная раскладка вместо того, что местные барыги из европы тащат, и в эту сумму я ещё дополнительные 16гб рамы упихнул. Из минусов — отпечатавшийся на матрице трекпоинт при перевозке. Если добесит, поменяю матрицу, потеряю в разнице.

В целом, нельзя сказать, что это того стоило.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от tz4678

галка такая в нетворк менегере есть

tz4678 ★★
() автор топика
Ответ на: комментарий от tz4678

уникальные имена хостов нужны чтобы в сети на 100-200 машин (допустим, компания этаж занимает) как-то идентифицировать всякие кофеВАрки, принтеры и прочие устройства у которых этот ваш айпи может меняться

по имени пользователя, который за ним сидит, очевидно же

Harald ★★★★★
()
Ответ на: комментарий от Harald

ага… чтобы в общественных сетях палиться. че ты своим именем и фамилией не подписываешься?

tz4678 ★★
() автор топика
Ответ на: комментарий от tz4678

Ты так говоришь, будто тебя криптоанархисты заставили тебя это сделать. Но других-то не заставляют, так что уверждение по-прежнему ложное.

Так возвращаясь к теме. Идентификацию в отличие от хардварного мака, прописанного в лизах, хостнейм не обеспечивает. Это просто рандом, который ни о чём не говорит. Ты мог бы туда ещё что-то добавить, но тогда хостнейм получится неоправданно длинным (а он уже такой).

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

мак-адрес - палево, серийник (по которому минимум можно узнать страну, регион и город, а как максимум адрес магазина) - палево, рандомные символы - похер

tz4678 ★★
() автор топика
Ответ на: комментарий от tz4678

Билл, она у тебя была не там! Мы все помним…

anonymous
()
Ответ на: комментарий от manntes-live
cat /etc/machine-id
cat /sys/class/dmi/id/board_serial
cat /sys/class/dmi/id/product_uuid

Это для линусов.

sysctl hw.uuid

А это для obsd, в других *bsd скорее всего также.

beastie ★★★★★
()
Ответ на: комментарий от tz4678

Особенно это актуально «в офисной сети на 200 машин», которые сотрудникам, очевидно, выдали. Будут активно прятаться. 🥷🙈🤡

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

я везде, где работал, сам все ставил… один раз сисадмину написал, мол в инструкции какая-то хрень написана у меня ничего не робит… короче он эникеем оказался, когда посмотрел на гном, спросил «эт че мак?»

tz4678 ★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Дай угадаю, не торговался не караулил выгодного и не пользовался форвардерами? Тогда да, верю в разницу масштаба 16ГБ RAM.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Частный случай. Домой обычно покупают не оптом, а поштучно, кому что нравится. Для меня это работает по крайней мере.

У меня-то зоопарк разных устройств, а в приведённом тобой случае хосты проще назвать аля «ноут Маши», «ноут Саши».

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)

Надо не рандом, а осмысленные имена из словаря. Типа как докер для инстансов генерирует имена. Твою абракадабру хрен запомнишь.

ox55ff ★★★★★
()
Ответ на: комментарий от tz4678

Gnome: Settings -> Wi-Fi -> Cloned Address, выбираешь Random

И как ты dhcp заставляешь давать одинаковый ip?

ox55ff ★★★★★
()
Ответ на: комментарий от tz4678
default_hostname() {
  # e.g. archlinux-XXXXXX
  printf '%s-%s' \
    "$(grep -hoP '(?<=PRETTY_NAME=")[^"]+' /etc/*-release | sed 's/.*/\L&/; s/ //g')"  \
    "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 6 | head -n1)"
}
tz4678 ★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Проще родню переименовать: родитель-i3OP39, родитель-RYBuKi, братилисестра-Aw5d56, двоюродныйплетеньнашемузабору-TWsYug.

anonymous
()
Ответ на: комментарий от anonymous

Вот, вот!

ТС же говорит:

имена не уникальны. всяких александров каждый 10-ый

А родственников как-то идентифицировать надо. Поддерживаю идею.

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.