Автор Тема: Как сменить hostname?  (Прочитано 11775 раз)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: Как сменить hostname?
« Ответ #15 : 15.08.2016 12:22:07 »
Действительно, проблема с hostname у Альта на systemd, прошу помощи: https://bugzilla.altlinux.org/show_bug.cgi?id=31326
man hostname в конце концов. Если что-то где-то глючит и не определяет нормально имя, его можно тупо задать посредством утилиты hostname, которую вызвать в каком-нибудь юните, если речь про systemd.

Оффлайн hasculdr

  • Завсегдатай
  • *
  • Сообщений: 672
Re: Как сменить hostname?
« Ответ #16 : 15.08.2016 19:44:14 »
Нифига не помогает #hostname. Дурацкая совместимость systemd и sysv - ни то, ни другое полноценно не работает. Возможно, в альте есть еще переменные кроме hostname и hostid?

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: Как сменить hostname?
« Ответ #17 : 15.08.2016 20:06:23 »
Дурацкая совместимость systemd и sysv - ни то, ни другое полноценно не работает.
А при чём тут systemd, sysv и какие-то переменные ? Речь про прямое изменение значения "/proc/sys/kernel/hostname" утилитой hostname. А /etc/HOSTNAME - это симлинк:
$ ls -l /etc/HOSTNAME
lrwxrwxrwx 1 root root 25 Nov 26  2014 /etc/HOSTNAME -> /proc/sys/kernel/hostname

Оффлайн hasculdr

  • Завсегдатай
  • *
  • Сообщений: 672
Re: Как сменить hostname?
« Ответ #18 : 15.08.2016 21:13:24 »
Мне использование #hostname не помогло, там, вроде, hostid тоже меняется. Я про пакет iouyap, который на системе с sysv работает корректно.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: Как сменить hostname?
« Ответ #19 : 15.08.2016 22:08:52 »
Я про пакет iouyap
А какая разница ? Приложения должны смотреть, по идее, в /proc/sys/kernel/hostname. Старые приложения смотрели в /etc/HOSTNAME. Если приложение пытается узнать имя хоста как-то ещё, это неправильно. Вероятно, что приложение проверяет это значение однократно, при запуске.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Как сменить hostname?
« Ответ #20 : 16.08.2016 00:35:21 »
Нифига не помогает #hostname. Дурацкая совместимость systemd и sysv - ни то, ни другое полноценно не работает. Возможно, в альте есть еще переменные кроме hostname и hostid?

Есть
echo $<Tab><Tab>

Учтите ещё такой момент:
при вызове bash как интерактивной или неинтерактивной оболочки, баш вычитывает и выполняет команды из /etc/profile если он существует, затем он последовательно ищет файлы ~/.bash_profile, ~/.bash_login и ~/.profile, читает и выполняет команды из первого же из них.
Т.о. получить/возвратить новое значение переменной $HOSTNAME можно ТОЛЬКО когда происходит вызов интерпетатора. В других случаях переменная $HOSTNAME возвратит старое значение имени хоста.
См. также --login в man bash

Пример (Х-терминал):
Текущее имя хоста
# hostname
zero.localdomain

Передать ядру новое имя хоста
# hostname blackhole.localdomain

Имя хоста возвращённое из ядра
$ hostname
blackhole.localdomain

Текущее содержимое переменной HOSTNAME
$ echo $HOSTNAME
zero.localdomain

Заставим баш выполнить команды в /etc/profile
$ bash --login

Выполнив команды /etc/profile, баш экспортировал переменную в которой находится имя хоста
$ grep -Hin hostname /etc/profile
/etc/profile:28:HOSTNAME=`/bin/hostname`
/etc/profile:31:export HOSTNAME HISTSIZE HISTFILESIZE
строка 28 -- получить имя хоста из ядра и полученное значение присвоить переменной HOSTNAME
строка 31 -- экспортировать переменные

$ echo $HOSTNAME
blackhole.localdomain

Также см. export в man bash на предмет выполнения export без параметров.

Если переменная экспортирована в окружения (декларирована), вы можете её использовать в окружении пользователя.
Например для быстрого возврата из текущего каталога, в каталог в котором вы находились в последний раз, - глубина вложения не имеет значения.

Например использование декларированной переменной OLDPWD, - этот метод позволяет в shell очень быстро перемещаться между двумя каталогами не используя длинные команды, .bash_history или файловые менеджеры для shell:

Полный путь к каталогу в котором находимся в текущий момент
$ echo $PWD
/home/user/systemd-sysvinit

В каком каталоге находились перед этим
$ export | grep OLDPWD
declare -x OLDPWD="/home/user"

Быстрый переход в каталог в котором находились последний предыдущий раз
$ cd $OLDPWD

Полный путь к каталогу в который вернулись и находимся
$ echo $PWD
/home/user

Теперь переменная OLDPWD содержит полный путь к каталогу в котором находились в последний раз
$ echo $OLDPWD
/home/user/systemd-sysvinit

alias и история команд позволят делать это ещё быстрее.

Алгоритм такой:
$ cd /usr/
$ cd /usr/share
$ export | grep OLDPWD
declare -x OLDPWD="/usr"
$ cd /usr/share/doc/
$ export | grep OLDPWD
declare -x OLDPWD="/usr/share"
$ cd $OLDPWD
$ pwd
/usr/share
$ export | grep OLDPWD
declare -x OLDPWD="/usr/share/doc"
« Последнее редактирование: 16.08.2016 03:50:45 от Speccyfighter »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 253
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Как сменить hostname?
« Ответ #21 : 16.08.2016 07:31:19 »
А какая разница ? Приложения должны смотреть, по идее, в /proc/sys/kernel/hostname. Старые приложения смотрели в /etc/HOSTNAME. Если приложение пытается узнать имя хоста как-то ещё, это неправильно. Вероятно, что приложение проверяет это значение однократно, при запуске.
Так попробуйте сделать:
ln -s  /proc/sys/kernel/hostname  /etc/HOSTNAME
(удалив предварительно /etc/HOSTNAME)
Если проблема в этом, то всё должно заработать.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: Как сменить hostname?
« Ответ #22 : 16.08.2016 08:26:03 »
Так попробуйте сделать:
ln -s  /proc/sys/kernel/hostname  /etc/HOSTNAME(удалив предварительно /etc/HOSTNAME)
Если проблема в этом, то всё должно заработать.
Так оно давно по-умолчанию так в ALT.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 253
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Как сменить hostname?
« Ответ #23 : 16.08.2016 08:42:12 »
Так оно давно по-умолчанию так в ALT.
У меня на компе нет. Причём не на одном.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 253
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Как сменить hostname?
« Ответ #24 : 16.08.2016 08:43:46 »
$ rpm -qf /etc/HOSTNAME
предупреждение: файл /etc/HOSTNAME не принадлежит ни одному из пакетов
Так-что исправлять некому ;-).

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Как сменить hostname?
« Ответ #25 : 16.08.2016 08:51:58 »
$ rpm -qf /etc/HOSTNAME
предупреждение: файл /etc/HOSTNAME не принадлежит ни одному из пакетов
Так-что исправлять некому ;-).

 ;-) А он и не может принадлежать какому-то пакету:
# rpm -qf /sbin/init
sysvinit-2.88-alt5
# grep -rHin 'etc/HOSTNAME' /etc/
/etc/rc.d/rc.sysinit:279: [ "$(readlink /etc/HOSTNAME)" = /proc/sys/kernel/hostname ] ||
/etc/rc.d/rc.sysinit:280: ln -snf /proc/sys/kernel/hostname /etc/HOSTNAME

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
Re: Как сменить hostname?
« Ответ #26 : 16.08.2016 08:59:18 »
У меня тоже не так.
Посмотрел у себя на двух системах (обе на p8, systemd)
# ls -l /etc/HOST*
-rw-r--r-- 1 root root 18 Aug 15 14:49 /etc/HOSTNAME

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Как сменить hostname?
« Ответ #27 : 16.08.2016 09:07:47 »
У меня тоже не так.
Посмотрел у себя на двух системах (обе на p8, systemd)
# ls -l /etc/HOST*
-rw-r--r-- 1 root root 18 Aug 15 14:49 /etc/HOSTNAME

systemd выдаёт бред какой-то - должно быть
$ ls -l /etc/HOSTNAME
lrwxrwxrwx 1 root root 25 май  2 13:43 /etc/HOSTNAME -> /proc/sys/kernel/hostname

Возвращает цель симлинка
$ readlink /etc/HOSTNAME
/proc/sys/kernel/hostname


В системах на sysv
# grep -rHin 'etc/HOSTNAME' /etc/
/etc/rc.d/rc.sysinit:279: [ "$(readlink /etc/HOSTNAME)" = /proc/sys/kernel/hostname ] ||
/etc/rc.d/rc.sysinit:280: ln -snf /proc/sys/kernel/hostname /etc/HOSTNAME
если ЛОЖЬ - выполнить команду
если возвращённая цель не равна  /proc/sys/kernel/hostname, - выполнить команду, иначе, если возвращённая цель равна  /proc/sys/kernel/hostname, команду не выполнять.
На старте системы скрипт sysv исправит как должно быть даже если пользователь с симлинком накуролесил.
« Последнее редактирование: 16.08.2016 09:22:58 от Speccyfighter »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 253
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Как сменить hostname?
« Ответ #28 : 16.08.2016 13:04:27 »
Кстати на флешке c LiveCD TDE 7.x вообще нет /etc/HOSTNAME

drwxr-xr-x  5 root   root     4096 авг  6 22:13 hooks
-rw-r--r--  3 root   root       26 дек 12  2015 host.conf
-rw-r--r--  3 root   root       42 дек 12  2015 hosts
-rw-r--r--  1 root   root      161 окт 12  2010 hosts.allow
-rw-r--r--  1 root   root      347 окт 12  2010 hosts.deny
-rw-r--r--  1 root   root     3580 дек  7  2011 idmapd.conf
drwxr-xr-x  2 root   root     4096 авг  6 22:12 ImageMagick-6
« Последнее редактирование: 16.08.2016 13:06:57 от ruslandh »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
Re: Как сменить hostname?
« Ответ #29 : 16.08.2016 18:39:36 »
Я про пакет iouyap, который на системе с sysv работает корректно.

Проблема не в пакете iouyap, а в образах свитчей CISCO IOU, требующих лицензию, но не могущих определить правильно имя хоста на systemd в Альте. Прошу попытать сии образы, взять можно отсюда: rutracker.org/forum/viewtopic.php?t=4391776
Сделать файл образа исполняемым и запускать из терминала.
В раздаче есть питоновский скрипт, генерирующий лицензионный ключ. Также для работы на 64-битной системе нужно установить пакет i586-libcrypto10. Для всех систем сделать симлинк:
ln -s /lib/libcrypto.so.1.0.2h /lib/libcrypto.so.4