0 votos

No se puede iniciar tftpd porque el puerto ya está en uso por launchd

Habilitación de tftpd

sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist

Comienza:

sudo launchctl start com.apple.tftpd

Ver registros syslog -w

com.apple.xpc.launchd[1] (com.apple.tftpd[30687]) <Warning>: Service exited with abnormal code: 1

O con log stream --process tftp --level debug

Filtering the log data using "process BEGINSWITH[cd] "tftp""
Timestamp                       Thread     Type        Activity             PID    TTL
2020-01-21 12:35:44.903240+0200 0x5292a    Activity    0x6afa0              31479  0    tftpd: (libsystem_info.dylib) Retrieve User by Name
2020-01-21 12:35:44.903949+0200 0x5292a    Default     0x0                  31479  0    tftpd: recvfrom: Resource temporarily unavailable

También he intentado ejecutar tftpd directamente sin launchctl sudo /usr/libexec/tftpd -d -i /private/tftpboot/ con los mismos resultados.

Anteriormente utilicé esta configuración y funcionó bien. Pero después de algunos cambios (puede ser la actualización del sistema operativo) se rompió.
La versión actual de MacOS es 10.14.6 (18G2022)

Cómo arreglar tftpd ?


Anexo .
Archivo de configuración /System/Library/LaunchDaemons/tftp.plist tiene un contenido por defecto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.apple.tftpd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/tftpd</string>
        <string>-i</string>
        <string>/private/tftpboot</string>
    </array>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <true/>
    </dict>
    <key>InitGroups</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockServiceName</key>
            <string>tftp</string>
            <key>SockType</key>
            <string>dgram</string>
        </dict>
    </dict>
</dict>
</plist>

Actualización1
Parece que el puerto está en uso. ¿Por qué? ¿Por qué?

$ sudo lsof -i:69
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd   1 root   23u  IPv6 0x55f5dbd8d897c847      0t0  UDP *:tftp
launchd   1 root   57u  IPv4 0x55f5dbd8d897e687      0t0  UDP *:tftp
launchd   1 root   59u  IPv6 0x55f5dbd8d897c847      0t0  UDP *:tftp
launchd   1 root   60u  IPv4 0x55f5dbd8d897e687      0t0  UDP *:tftp

launchd utiliza el puerto UDP 69. ¿Por qué?

$ ps -ef | grep tftp
501 94727 48073   0  4:16PM ttys007    0:00.00 grep --color=auto tftp

3voto

Ben Puntos 1

Estos pasos resolvieron mi problema

  1. Recargar plist

    sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist
    sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist
  2. (Re)habilitar el servicio

    sudo launchctl disable system/com.apple.tftpd
    sudo launchctl enable system/com.apple.tftpd
  3. Iniciar el servicio (o reiniciar)

    sudo launchctl start com.apple.tftpd

Gracias a todos los que han participado en el debate, especialmente a @Prado

1voto

Jose Chavez Puntos 645

Su pregunta es por qué launchd utiliza el puerto UDP 69. Esto es básicamente porque le has dicho que lo haga en el archivo plist, que has citado en tu pregunta. Si no estás acostumbrado a launchd o a programas similares en sistemas Unix, puede parecer contradictorio - pero así es como se supone que funcionan las cosas.

Básicamente, launchd no inicia el programa del servidor tftpd al arrancar o al iniciar la sesión. En su lugar, abre el puerto 69 y espera a que alguien se ponga en contacto con el servicio tftp - sólo cuando realmente va a ser utilizado por alguien, launchd inicia el programa del servidor tftpd y entrega el tráfico a ese programa.

Por lo tanto, es como se pretende que el puerto 69 esté en uso por launchd.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X