не могу запустить tftpd-hpa, recvfrom: Socket operation on non-socket

Если посмотреть вызов setsockopt(0, SOL_IP, IP_MTU_DISCOVER, [0], 4) = -1 ENOTSOCK (Socket operation on non-socket)
то видно что первым аргументом идёт 0. Разве дескриптор сокета может быть нулевым?
чтож. Вычитал что можно дополнительные параметры задать.
Добавил, но получил другие ошибки

# /usr/lib/systemd/system/tftpd.service
[Unit]
Description=hpa's original TFTP daemon
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/conf.d/tftpd
ExecStart=/usr/bin/in.tftpd --listen $TFTPD_ARGS
[b]StandardInput=socket
StandardOutput=inherit
StandardError=journal[/b]

[Install]
WantedBy=multi-user.target


journalctl -xe

апр 30 13:59:55 ArchServer systemd[1]: Listening on hpa's original TFTP daemon.
-- Subject: Запуск юнита tftpd.socket завершен
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс запуска юнита tftpd.socket был завершен.
--
-- Результат: done.
апр 30 13:59:55 ArchServer systemd[1]: Closed hpa's original TFTP daemon.
-- Subject: Завершена остановка юнита tftpd.socket.
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс остановки юнита tftpd.socket был завершен.
апр 30 13:59:55 ArchServer systemd[1]: tftpd.service: Got more than one socket.
апр 30 13:59:55 ArchServer systemd[1]: tftpd.service: Failed to run 'start' task: Invalid argument
апр 30 13:59:55 ArchServer systemd[1]: Failed to start hpa's original TFTP daemon.
-- Subject: Ошибка юнита tftpd.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Произошел сбой юнита tftpd.service.
--
-- Результат: failed.
апр 30 13:59:55 ArchServer systemd[1]: tftpd.service: Failed with result 'resources'.
.
.
.
////// заменил цитирование на cоde. vadik////
bitrixbiz
то видно что первым аргументом идёт 0. Разве дескриптор сокета может быть нулевым?
Это то же заметил и насколько понимаю, иметь значение ноль дескриптор не может..... так как вызов socket возвращает описатель/дескриптор , ссылающийся на сокет...., но в данном случае (согласно ошибке ENOTSOCK) аргументом sockfd является файл, а не сокет.....а потому указывать нечего и приведен 0......но это мое мнение и возможно ошибочное...
Насчет приведенных выводов strace — ничего криминального не вижу, команда отработала нормально и завершилась без затыков....... + к этому не видно системных вызовов, имеющих отношение к сети. Можно предположить, что команда для трейса выбрана неудачно и ничего не дает …...
В подробности самой задачи не вникал и по указанной ссылке не ходил, а потому смысла поставленной задачи не представляю............ а значит и рекомендовать какие то команды для трейса не могу, да это и не правильно будет ..........так как я в практике сети большой чайник и мне очень, очень далеко до такого спеца, как kurych....
Могу только посоветовать , если искать затык методом трейса, то нужно использовать нужные команды для запуска и для начала применить фильты - для сетевых операций -e trace=network , для файловых операций -e trace=file ….. возможно можно вклинить и -e trace=process …. в зависимости от ситуации и анализа....
Ошибки не исчезают с опытом - они просто умнеют
vadik
////// заменил цитирование на cоde. vadik////
Спасибо за заботу.
Но понимаешь, в code не действует выделение значимых мест в листинге, чтобы было за что взгляду зацепиться. В диалоге это очень важно. Портянки конечно никому не нравятся, но вот нельзя цитирование под спойлер завернуть или прокрутку сделать.
Надеюсь не пошлёшь меня опять исходники форума править ;)
bitrixbiz
Но понимаешь, в code не действует выделение значимых мест в листинге, чтобы было за что взгляду зацепиться.
Это потдверждаю....... такое имеется, но, возможно, не умеем пользоваться..... тогда просьба подсказать как это делать ....
Ошибки не исчезают с опытом - они просто умнеют
vasek
мне очень, очень далеко до такого спеца, как kurych....
Да, одна надежда на него, да ещё может кто пройдёт поможет, или может что дельное придумает.
Как я только эти конфигурационные файлы не крутил, замучился уже, вот только добился что новой ошибки:
апр 30 13:59:55 ArchServer systemd[1]: tftpd.service: Got more than one socket.
апр 30 13:59:55 ArchServer systemd[1]: tftpd.service: Failed to run 'start' task: Invalid argument

Это когда добавил
StandardInput=socket
StandardOutput=inherit
StandardError=journal


Сейчас так:
1. сделал на всякий ещё раз systemctl enable tftpd.socket
2. хук tftpd.service.d вообще убрал из /etc/systemd/system/
3. в файле /etc/conf.d/tftpd только одна строка TFTPD_ARGS="--secure /srv/nfs/diskless/boot/"
4. в файле /usr/lib/systemd/system/tftpd.service теперь прописано только это:
[Unit]
Description=hpa's original TFTP daemon
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/conf.d/tftpd
ExecStart=/usr/bin/in.tftpd $TFTPD_ARGS

[Install]
WantedBy=multi-user.target

ошибка та же
май 01 14:42:07 ArchServer in.tftpd[576]: recvfrom: Socket operation on non-socket
май 01 14:42:07 ArchServer systemd[1]: tftpd.service: Control process exited, code=exited status=74
май 01 14:42:07 ArchServer systemd[1]: Failed to start hpa's original TFTP daemon.
Значит, как я вижу, привели tftpd.service к исходному виду. Это правильно.
Теперь убедитесь, что запущено что-то одно: или tftpd.service, или tftpd.socket.
Лучше всего сделать
systemctl disable tftpd.service
systemctl stop tftpd.service

systemctl disable tftpd.socket
systemctl stop tftpd.socket
Теперь решите, что будете использовать: service или socket.
Если service, то
systemctl start tftpd.service
Если ошибок не будет, то можно проверять. Можно посмотреть
$ sudo systemctl status tftpd.service
● tftpd.service - hpa's original TFTP daemon
   Loaded: loaded (/usr/lib/systemd/system/tftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Вс 2016-05-01 13:18:35 MSK; 7s ago
  Process: 7426 ExecStart=/usr/bin/in.tftpd --listen $TFTPD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 7428 (in.tftpd)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/tftpd.service
           └─7428 /usr/bin/in.tftpd --listen --secure /srv/tftp/

май 01 13:18:35 ky-x250 systemd[1]: Starting hpa's original TFTP daemon...
май 01 13:18:35 ky-x250 systemd[1]: Started hpa's original TFTP daemon.
Должно быть так. Если нет, начнем сначала. Тогда еще раз покажите systemctl cat tftpd.{service,socket} и systemctl status tftpd.{service,socket}
У мну работает с такими настройками

$ sudo systemctl status tftpd
● tftpd.service - hpa's original TFTP daemon
   Loaded: loaded (/usr/lib/systemd/system/tftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2016-04-29 08:50:30 NOVT; 2 days ago
  Process: 757 ExecStart=/usr/bin/in.tftpd $TFTPD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 820 (in.tftpd)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/tftpd.service
           └─820 /usr/bin/in.tftpd -lc -s /var/tftpboot/data/

Apr 29 08:50:28 xxxxxxx.tomsk.ru systemd[1]: Starting hpa's original TFTP daemon...
Apr 29 08:50:30 xxxxxxx.tomsk.ru systemd[1]: Started hpa's original TFTP daemon.
kurych
Значит, как я вижу, привели tftpd.service к исходному виду.
Velesich
У вас у обоих используется параметр -l (--listen)
у меня в запуске его нет ExecStart=/usr/bin/in.tftpd $TFTPD_ARGS
и вы дружно склоняете меня к его использованию :)

Но дело в другом. Возможно я уже просто запутался.
Раннее у людей и без этого параметра всё работало в связке tftpd.socket tftpd.service

man что говорит?
The server is normally started by inetd, but can also run standalone.
-l, --listen Run the server in standalone (listen) mode, rather than run from inetd.
Значит получается его можно запускать без этого параметра, через inetd.

Ладно, вопрос простой, в чём разница standalone mode и запуском через inetd.
Используются ли сокеты в этих режимах? Зачем раньше работало через systemctl start tftpd.socket tftpd.service, и что означала эта связка?
Зачем тогда все эти приблуды в /usr/lib/systemd/system/tftpd.service: StandardInput=socket??
Зачем в конце концов сам tftpd.socket? Как его можно использовать?
В интернетах как-то гроздью всё рассыпано, всё в один ответ собрать не получается.
ах да,
strace /usr/bin/in.tftpd -l -4 -s /srv/nfs/diskless/boot/

[root@ArchServer ~]# strace /usr/bin/in.tftpd -l -4 -s /srv/nfs/diskless/boot/
execve("/usr/bin/in.tftpd", ["/usr/bin/in.tftpd", "-l", "-4", "-s", "/srv/nfs/diskless/boot/"], [/* 17 vars */]) = 0
brk(NULL)                               = 0x20e4000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=30309, ...}) = 0
mmap(NULL, 30309, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7f1fe28000
close(3)                                = 0
open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\10\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1960896, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7f1fe27000
mmap(NULL, 3803536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7f1f86c000
mprotect(0x7f7f1fa04000, 2093056, PROT_NONE) = 0
mmap(0x7f7f1fc03000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7f7f1fc03000
mmap(0x7f7f1fc09000, 14736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7f1fc09000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7f1fe26000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7f1fe25000
arch_prctl(ARCH_SET_FS, 0x7f7f1fe26700) = 0
mprotect(0x7f7f1fc03000, 16384, PROT_READ) = 0
mprotect(0x608000, 4096, PROT_READ)     = 0
mprotect(0x7f7f1fe30000, 4096, PROT_READ) = 0
munmap(0x7f7f1fe28000, 30309)           = 0
socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_LOCAL, sun_path="/dev/log"}, 110) = 0
getpid()                                = 596
brk(NULL)                               = 0x20e4000
brk(0x2105000)                          = 0x2105000
chdir("/srv/nfs/diskless/boot/")        = 0
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(4)                                = 0
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(4)                                = 0
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=234, ...}) = 0
read(4, "# Begin /etc/nsswitch.conf\n\npass"..., 4096) = 234
read(4, "", 4096)                       = 0
close(4)                                = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=30309, ...}) = 0
mmap(NULL, 30309, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7f7f1fe28000
close(4)                                = 0
open("/usr/lib/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240!\0\0\0\0\0\0"..., 832) = 832
fstat(4, {st_mode=S_IFREG|0755, st_size=47584, ...}) = 0
mmap(NULL, 2168600, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7f1f65a000
mprotect(0x7f7f1f665000, 2093056, PROT_NONE) = 0
mmap(0x7f7f1f864000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0xa000) = 0x7f7f1f864000
mmap(0x7f7f1f866000, 22296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7f1f866000
close(4)                                = 0
mprotect(0x7f7f1f864000, 4096, PROT_READ) = 0
munmap(0x7f7f1fe28000, 30309)           = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=1040, ...}) = 0
read(4, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1040
close(4)                                = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
bind(4, {sa_family=AF_INET, sin_port=htons(69), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7f1fe269d0) = 597
exit_group(0)                           = ?
+++ exited with 0 +++

[root@ArchServer ~]# systemctl status tftpd
● tftpd.service - hpa's original TFTP daemon
   Loaded: loaded (/usr/lib/systemd/system/tftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Вс 2016-05-01 19:18:44 NOVT; 6s ago
  Process: 606 ExecStart=/usr/bin/in.tftpd -listen $TFTPD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 607 (in.tftpd)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/tftpd.service
           └─607 /usr/bin/in.tftpd -listen --secure /srv/nfs/diskless/boot/

май 01 19:18:44 ArchServer systemd[1]: Starting hpa's original TFTP daemon...
май 01 19:18:44 ArchServer in.tftpd[606]: /usr/bin/in.tftpd: invalid option -- 'i'
май 01 19:18:44 ArchServer systemd[1]: Started hpa's original TFTP daemon.

только это listen mode. Как запустить без него? Да и предыдущие вопросы остались.
 
Зарегистрироваться или войдите чтобы оставить сообщение.