Я пытаюсь выполнить программу на смонтированном разделе CIFS в SUSE 11.1. Всякий раз, когда я пытаюсь запустить его, я получаю сообщение об ошибке «Не удалось выполнить двоичный файл». Используя strace, я смог определить, что оболочка выдает ошибку ENOEXEC при execve (). Я проверил, что у двоичного файла действительно есть правильный магический номер ELF. На каждом разделе также достаточно места на диске, так что это тоже не проблема.
Я могу скопировать файл из общего ресурса в свой домашний каталог и запустить исполняемый файл, и я могу запустить его удаленно из RHEL 6.2, но по какой-то причине он не работает в SUSE. Я также убедился, что недавно скомпилированный hello world не будет работать на удаленном разделе.
Я убедился, что файлы не повреждаются при их переносе в удаленный раздел, и что у меня есть разрешения на выполнение для общего ресурса. Раздел не смонтирован как noexec, так что проблема не в этом. Я даже пробовал запустить программу в SUSE, используя среду RHEL.
У меня нет доступа к удаленной машине.
Я полностью озадачен, поэтому любая помощь будет принята с благодарностью.
редактировать
Я также пробовал запустить ldd для исполняемого файла в удаленном разделе, и он ответил «не динамическим исполняемым файлом». Опять же, это отлично работает с локальным разделом и перечисляет допустимые общие библиотеки.
Редактировать 2
По-видимому, проблема в том, что общий ресурс монтируется с опцией directio. Наконец-то получил доступ к ним, так что, может быть, теперь я смогу понять, почему.
Что файловая утилита говорит об исполняемом файле? Другими словами, что делает file PATH
print, где PATH - путь к исполняемому файлу?
Звучит, конечно, как будто лапа установлена noexec, даже если его нет в списке. Лемех установлен с пользователь или пользователи вариант? Эти параметры неявно включают noexec.