Category Archives: Linux/Unix
Игрался сегодня с strace. Запускал в нём ping. Но пинг, запущенный таким образом, почему-то отказывался работать, возвращая ошибку:
elwood@elwood:~$ strace -o out ping ya.ru ping: icmp open socket: Operation not permitted
При этом просто пинг (без strace) вполне себе работал.
Почему так ?..
Выяснилось, что дело в особых правах на ping. Прикол в том, что для пинга установлен бит setuid:
elwood@elwood:~$ ls -l `which ping` -rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
И при запуске он по сути работает от рута. А strace такими правами не обладает, и запуская ping через него, я получал ошибку. Если убрать setuid бит с /bin/ping, то при запуске ping я тоже буду получать ошибку:
elwood@elwood:~$ sudo chmod u-s `which ping` elwood@elwood:~$ ls -l `which ping` -rwxr-xr-x 1 root root 44168 May 7 2014 /bin/ping elwood@elwood:~$ ping ya.ru ping: icmp open socket: Operation not permitted
Решить проблему можно либо добавив setuid бит для strace (chmod u+s `which strace`
), либо запуская strace через sudo.
Прочитал статью про новый .NET Core. Очень впечатлило то, что можно будет создавать нативные приложуньки так, как это делается в Go. То есть командуешь тупа
dotnet build --native
и на выходе – микроскопический (ну, может, не совсем микроскопический) бинарник, не требующий толстого .NET-рантайма. И это – со всеми плюшками языка C# и развитого туллинга (хотя бы отладчик есть, в отличие от того же Go) ! В общем, я загорелся попробовать на нём собрать свою любимую поделку.
Но не срослось. На крайней команде из гайда хелло-ворлд отказался приветствовать мир:
$ dotnet run Compiling dotnet for DNXCore,Version=v5.0 Compilation succeeded. 0 Warning(s) 0 Error(s) Time elapsed 00:00:01.4364181 Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
В общем, решил, что пока рановато пробовать, завёл им issue и приготовился ждать. Очень надеюсь, что эта штука заработает хотя бы в течение года.
Волею судеб моей миссией стала подготовка deb-пакета. Ну, я его собираю-ставлю-пробую-удаляю-снова ставлю-удаляю и так далее. На каком-то шаге после удаления пакета обратил внимание на то, что конфиги (которые были записаны в /etc/blablabla
) не удаляются. Ну удалил руками их и дело с концом. Но при переустановке пакета они не появились. Вот тут-то и начались мытарства.
Штирлиц постучал в дверь. Никто не ответил. Штирлиц постучал сильнее. Реакции не последовало. Штирлиц начал пинать дверь кованым сапогом. Дверь не поддавалась. «Закрыто» – подумал Штирлиц.
Так и я, через час бессмысленных проб и ошибок понял, что скорее всего конфиги я удалил зря, и вообще при переустановке они, похоже, не обновляются.
Оказалось, для того, чтобы удалить конфиги пакета, нужно выполнить
dpkg --purge <имя пакета>
После этого менеджер пакетов поставит где-то в своей базе флажок «конфигов для этого пакета больше нет», и при переустановке они будут заново разложены по директориям.
0