Ожидайте интерфейса к поднятому перед UDHCP

Завихрение не загрузит вещи для Вас рекурсивно. Необходимо будет установить wget на Mac. Самый легкий способ сделать это должно установить MacPorts, который предоставляет Вам доступ к большому репозиторию программного обеспечения с открытым исходным кодом и выполнение:

port install wget

... и ожидайте немного. Это установит wget и все его предпосылки.

2
15.03.2013, 14:26
1 ответ

Хорошо. Я нашел решение для меня. Не уверенный, если это - большая часть оптимизированного решения или нет, но здесь является моими причинами.

1) Я не хочу к принесенному, чтобы модуль Ethernet при запуске ядра, избежал ip=dhcp или ip= $ {ipaddr}: $ {serverip}: $ {gatewayip}: $ {сетевая маска}: $ {имя хоста}: eth0:off, так как я не уверен, какова будет установка конечного пользователя.

2) Я записал свой собственный сценарий конфигурации сети который сетевой интерфейс принесенного как показано ниже.

link_up_waittime=60
interface=""
tmpfile="/tmp/cspnetwork"
linkups="Link is Up"

function error_out
{
    exit -1
}
function search_ifc_dev()
{
    for iface in `awk '{print $1}' /proc/net/dev | cut -f1 -d":"`; do
        if [[ ${iface} == eth* ]]; then
            interface=${iface}
        fi
    done
    if [[ ${interface} == "" ]]; then
        echo "Unable to find network interface. Can not continue"
        error_out
    fi
}

function wait_for_link_up()
{
    startsec=`date +%s` 
    endsec=`expr ${startsec} + ${link_up_waittime}`
    while [[ ${startsec} -lt ${endsec} ]]; do
        found=`dmesg | grep "${linkups}"`   
        if [[ ! -z ${found} ]]; then
            break;  
        fi
        # Increment current time
        startsec=`date +%s`
    done

    # We will not continue if interface can not be brought up..."
    if [[ -z ${found} ]]; then
        echo "Unable to bring up interface. Can not continue"
        error_out
    fi
}

function dynamic_ip_assign()
{
    ifconfig ${interface} 0.0.0.0
    wait_for_link_up
    udhcpc -D -s /usr/share/udhcpc/default.script
}

Позволяет изучают этот сценарий. search_ifc_dev будет искать имя устройства, присвоенное интерфейсу ehternet ядром. (У Вас должен быть только один интерфейс для этого для работы).

dynamic_ip_assign присвоит IP-адрес динамично. Я использую ifconfig вместо ifup-a, потому что ifup-a автоматически звонит (см. интерфейсы человека), udhcpc или dhcpclient утилиты (при конфигурировании iface как dhcp в/etc/network/interface), не ожидая интерфейса к принесенному на самом деле. Это вызывает проблему, когда Ваш сервер DHCP отвечает (большинство случаев) медленный, так как Ваш сетевой сценарий выйдет, прежде чем интерфейс на самом деле поднят, и Ваш собственный сценарий запуска приложения запустится, и Ваш интерфейс все еще не. Вы видите выше, я ожидаю ссылки на, прежде чем я продолжу к выходу из моего сценария, поэтому каждый раз, когда я запускаю свое собственное приложение в запуске, я уверен, что интерфейс на самом деле поднят, иначе я могу сделать что-то хорошее в функции error_out.

Обратите внимание, что при использовании ip=dhcp в командной строке ядра драйвер Ethernet не продолжится, непока интерфейс не на самом деле, поэтому каждый раз, когда Вы, сценарий запуска приложения будет вызван, Вы уверены, что интерфейс уже, но поскольку я упомянул, что не хочу обеспечивать IP параметр в командной строке ядра.

Любой обеспечьте обратную связь, если у Вас есть компактное решение этой проблемы. Также обратите внимание, что это - пользовательский встроенный дистрибутив, таким образом, я нуждаюсь в сетевых утилитах кроме busybox. Используя некоторую другую утилиту (как используемый в настольных дистрибутивах) мог бы дать мне компактное решение.

С уважением, Farrukh Arshad.

1
27.01.2020, 22:23

Теги

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