#linux #perl #bash #rhel5
#linux #perl #bash #rhel5
Вопрос:
Многие серверы в нашей среде имеют свою линию обратной связи в /etc/hosts
, настроенную следующим образом:
127.0.0.1 mydevserver.testdomain.com mydevserver localhost.localdomain localhost
Обычно это не проблема. Однако сейчас мы имеем дело с некоторым внешним программным обеспечением от поставщика, которое вызывает gethostbyaddr, и их установщик рассчитан на сбой, если результатом hostname --ip-address
является 127.0.0.1. Это, конечно, приводит к сбою в наших системах, потому что имя хоста сервера находится в строке обратной связи /etc/hosts
.
Мой вопрос в том, если я оберну установщик в скрипт bash или perl, есть ли способ «замаскировать» или временно изменить результаты hostname --ip-address
без изменения файла /etc / hosts?
(Уточнение: они вызывают функцию gethostbyaddr() из своего скомпилированного двоичного установщика. Способ получить аналогичный результат из командной строки hostname --ip-address
)
Комментарии:
1. Подобные вещи являются причиной того, что нередко вместо полного доменного имени сервера используется какой-либо другой
127.*.*.*
адрес, подобный127.0.1.1
. Я знаю, что это не то, что вы спрашивали, поэтому я просто добавляю это как комментарий, а не ответ.
Ответ №1:
Одним из способов может быть написание вашей собственной gethostbyaddr()
функции, компиляция ее в библиотеку (скажем, libmyfunc.so
), затем предварительная загрузка ее в скрипте-оболочке, чтобы установщик поставщика использовал ее, а не систему gethostbyaddr()
:
#!/bin/bash
export LD_PRELOAD=libmyfunc.so
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
/path/to/crappy_vendor_binary $@
Комментарии:
1. Уродливый способ сделать это, но это может быть необходимостью из-за уродства программного обеспечения поставщика.
Ответ №2:
Напишите свою собственную реализацию, hostname
которая выполняет ожидаемую функцию, поместите ее куда-нибудь, перед этим отмените смещение этого каталога $PATH
.
Комментарии:
1. Спасибо, но они вызывают функцию gethostbyaddr() из своего скомпилированного двоичного установщика. Способ получить аналогичный результат из командной строки
hostname --ip-address
.
Ответ №3:
Если действительно вызвать команду hostname, то нет ничего проще: просто замените ее своей собственной версией.
Комментарии:
1. Спасибо, но они вызывают функцию gethostbyaddr() из своего скомпилированного двоичного установщика. Способ получить аналогичный результат из командной строки
hostname --ip-address
.2. @Eli, тогда тебе лучше обновить свой /etc/ hosts. Я почти уверен, что для вашей практики нет рациональной причины, не так ли? Поскольку это установщик, подойдет временная очистка /etc/ hosts.
Ответ №4:
что ж, если это обычный скрипт BASH, добавьте это перед вызовом «hostname»:
function hostname(){ echo -n; }