LINUX.ORG.RU

Сообщения E

 

FasCGI terminated due to uncaught signal 13

Форум — Development

Странная ситуация, есть приложение под Apache/mod_fcgi, которое периодически подвисает на тяжёлых запросах и апач его прибивает с ошибкой:

[:warn] [pid <...>:tid 1] FastCGI: server "<...>" (pid <...>) terminated due to uncaught signal '13' (B
roken pipe)

Но в самом приложении SIGPIPE полностью игнорируется через MSG_NOSIGNAL и даже signal(SIGPIPE, SIG_IGN) (других обработчиков точно нет). Если напрямую послать сигнал запущенному процессу, он игнорирует как положено.

Откуда может взяться этот левый сигнал?

Иногда ещё перед этим в логах проскакивает сообщение:

FastCGI: client stopped connection before send body completed

Но в большинстве случаев после этого сообщения никаких серьёзных последствий, сервер остаётся жить (как и подразумевается), поэтому непонятно, связано оно или нет.

 , ,

E ()

Dotfiles и лицензии

Форум — Talks

Вопрос полуфилософский. С софтом более-менее понятно. А как лицензировать репы с конфигурацией? Или гибридные (конфигурация+скрипты) типа dotfiles.

Вот у меня есть дотфайлы и я хочу поставить лицензию на реп (это самоцель), но в некоторых файлах она уже обозначена, там целый зоопарк: GPL, MPL, MIT. Можно будет указать в своей, что «applied unless stated otherwise», или обязательно приводить все под одну лицензию?

Если всё-таки нужно приводить, как в этом случае поступать с существующей? Некоторые скрипты можно переписать с нуля, избавиться от заимствованных кусков - этого хватит для чистоты перелицензирования?

Или, например, у меня есть древняя цветовая схема для ranger, которую я пицот лет назад скопировал с существующей, заменив все значения, но плашка с GPL осталась. Достаточно будет убрать плашку или нужно заново переделывать схему?

Есть ещё полностью third-party конфигурация типа плагинов, которые хранятся без изменений. Что с ними делать? Выбрасывать или переписывать, избавляясь от оригинального кода?

 , ,

E ()

Адекватная замена python-click

Форум — Development

Да, это оффтопик: python-click 8.0 на винде самостоятельно раскрывает параметры командной строки (glob-паттерны и т.п.), потому что автор хочет эмулировать юниксовый шелл, не спросив пользователя, надо ли это ему. Обратной совместимости нет, отключить эту функциональность пока нельзя.

Поэтому ищется сабж, который не будет за меня решать, как должны работать мои собственные скрипты, а будет выступать как настраиваемый фреймворк (как и должны работать подобные базовые инструменты). Желательно без других идиотских примочек (типа аргументов без хелпов) и прочей религиозной философии авторов click.

inb4 «напиши сам»: уже написал, но желательно что-то более общепринятое или стандартизированное. Возможно, какой-нибудь форк click, но на гитхабе их >1000, перебирать все я не могу. Может быть, у кого-то уже есть положительный опыт с готовыми альтернативами?

 , ,

E ()

Отключить bugsnag на всех сайтах

Форум — General

Заметил недавно, что нечто под названием bugsnag.js жрёт ресурсы на некоторых страницах. Судя по всему, какая-то телеметрия под видом сборки багрепортов.

Отключил в NoScript bugsnag.com, теперь оно засоряет консоль ошибками отправки репортов и продолжает всё так же жрать ресурсы.

Кто-нибудь знает, что это и как это отключить полностью в браузере? Возможно, какой-нибудь юзерскрипт, который находит этот bugsnag на странице и удаляет его объект полностью?

 ,

E ()

xfreerdp не устанавливает %CLIENTNAME%

Форум — Desktop

Хочу сменить %CLIENTNAME% на удалённой виндовой машине, подключаюсь через xfreerdp:

xfreerdp --plugin rdpdr /v:$remote_host /d:$remote_domain /u:$remote_user ...

По умолчанию echo %CLIENTNAME% выводит мой локальный hostname.

Пробовал такие ключи:

  • /client-hostname:$MYCLIENTNAME
  • /client-hostname $MYCLIENTNAME
  • -n $MYCLIENTNAME

Никакого эффекта не дало, %CLIENTNAME% так и показывает настоящий hostname.

Я что-то делаю не так или не понимаю, для чего нужна эта опция? Или этого нельзя сделать через xfreerdp, какие тогда ещё есть способы подменить %CLIENTNAME% на удалённой машине?

$ xfreerdp --version
This is FreeRDP version 1.1.0-beta1 (git n/a)

 , ,

E ()

bash запускает отдельный процесс для под-оболочек в пайпах

Форум — Development

Минимальный скрипт test_pipe_pid:

#!/bin/bash
echo "started PID=$$"
trap 'echo killed PID=$$; exit 1' INT
yes | while read line; do
	trap 'echo killed inner PID=$$; exit 1' INT
	jobs -p
	sleep 1
done

Запускаем и пытаемся убить по основному PID-у:

~$ ./test_pipe_pid &
[1] 2320
started PID=2320
~$ pstree -p 2320
test_pipe_pid(2320)─┬─test_pipe_pid(2326)───sleep(2563)
                    └─yes(2324)
~$ kill -INT 2320
# А он живой:
~$ pstree -p 2320
test_pipe_pid(2320)─┬─test_pipe_pid(2326)───sleep(3021)
                    └─yes(2324)
~$ kill -INT 2326
# И только теперь умер:
~$ killed inner PID=2320
killed PID=2320

[1]+  Выход 1            ./test_pipe_pid

Откуда берётся дополнительный процесс? Его не видно в jobs -p, и он перехватывает обработку сигналов. Как тогда, зная родительский pid, прервать весь скрипт?

При запуске в foreground и посыле Ctrl-C напрямую скрипт убивается целиком, с потрохами. А в чём тогда принципиальная разница?

Как это гуглить? Гугл не знает, что такое «bash pass signal to subshell» в любых комбинациях. В мане есть только заметка «Each command in a pipeline is executed as a separate process (i.e., in a subshell).» Нашёл рецепт делать trap 'kill 0' INT, но ничего не изменилось, сабшелл продолжает жить, пока его не убьёшь прямо.

Зачем это нужно? Есть некий процесс, который запускает разные команды, в т.ч. и такой скрипт. По определённому запросу извне процесс должен закрывать все запущенные команды. Остальные команды закрываются по SIGINT как ожидается, только такой Маклауд с пайпами остаётся.

 , ,

E ()

Простой бинарный классификатор изображений

Форум — General

Ищу готовый сабж для сортировки изображений в две группы а-ля спамфильтры (ок/не ок), чтобы работал из коробки с минимальными настройками. Точность не важна, хватит >70%. В идеале должны быть две команды вроде:

$ image-classifier train good good-image.jpg
$ image-classifier train bad bad-image.jpg
$ image-classifier guess looks-like-good-image.jpg
good: 89%
bad: 12%

Но в принципе можно и с доработкой напильником. Желательно опенсорс, чтобы на досуге поковырять и настроить под себя.

Попробовал гуглить нейронки для этого дела, но гугл у меня нетренированный и предлагает только учебные задания для студентов с захардкожеными значениями, типа: «скопируй и запусти».

Зачем это нужно: у меня скопилось достаточно большое количество фидов (тамблер, твиттер, другие RSS) с картинками, на просмотр их каждый день уходит около часа. Для текстовых фидов давно использую простой байесовский фильтр, крайне полезная штука. Хочется такой же предварительный фильтр и для картинок, чтобы хотя бы в несколько раз уменьшить это время.

Написать самому не предлагать, если бы у меня было для этого время, я бы и не засорял форум.

 , ,

E ()

Более кроссплатформенный скриптинг, чем Python

Форум — Development

Есть у меня набор скриптов, расшаренный между некоторым количеством хостов (разные юниксы, винда), в т.ч. есть крон-файл, который запускает эти скрипты. Сами скрипты написаны на питоне (100% кроссверсионно), кронтаб на винде через python-crontab, команды в кронтабе совместимы и с башем, и с cmd, всё работало как часы.

Недавно один из хостов проапгрейдили до последней версии Oracle Linux, в которой хипстеры удалили исполняемый python, оставив только python с явным указанием версии. В результате у меня начали агриться шебанги /usr/bin/env python. Для пользовательского шелла я сделал кастомную обёртку, которая определяет эту дебильную ситуацию и подставляет какой-нибудь существующий интерепретатор. Но, поскольку в кронтабе нет возможности переносимо указать окружение, хотя бы PATH (например, AIXовый кронтаб этого не умеет), то приходится изворачиваться и делать отдельный крон-файл конкретно для этого хоста.

Пробовал завести отдельный шелл-скрипт с нужным окружением, который можно будет сорсить или запускать с командой в качестве параметра, но что выбрать в качестве языка? Питон и так был самым кроссплатформенным способом.

Повершелл не подходит, он отсутствует на некоторых хостах. Perl тоже не предлагать, у него ещё больше проблем с шебангами.

UPD: Админских прав на этом хосте нет, поэтому в окружение, доступное кронтабу по умолчанию, ничего положить нельзя.

Есть ли более удобные способы решения этой проблемы?

UPD: Пока лучший вариант - bat/sh скрипт из первого коммента:

:<<@exit/b
   @echo Windows stuff
@exit/b
   echo Unix stuff

 , ,

E ()

Подсветка и фильтрация строк на Python

Форум — Development

Ищу консольную утилиту для хитрой подсветки и фильтрации файлов, суть такова:

Есть файл с набором строк (лог файл, выхлоп diff, выхлоп компиляции). Каждую строку нужно распасить, расцветить и назначить какую-то категорию (INFO/WARNING/ERROR, ADDED/REMOVED, COMMENT/COMMAND/WARNING/ERROR). Категорию нужно уметь показывать для каждой строки. Правила (паттерны) должны храниться в отдельных файлах, паттерны могут быть многострочными. Правила должны как-то определять цвет (либо для всей строки, либо для частей).

Обязательно:

  • Должна быть возможность скрывать вывод, пока не встретится определённый паттерн (например, ERROR), после этого включать полный вывод обратно и вываливать всё, что накопилось (все INFO и WARNING, которые были до этого).
  • Должна быть возможность выйти после первого нахождения какой-то категории (например, ERROR).
  • Статистика по всем категориям.

Очень желательно:

  • Библиотека для Python (иногда нужно автоматически прикрепить фильтр к subprocess или stdout отдельной функции). Но в принципе подойдёт и сторонняя утилита под unix и оффтоп (MSYS/Cygwin или хотя бы сорцы).
  • Переписывать строки (заменять какие-то части подстановками, вызывать функции-обработчики), удалять пустые строки, отфильтровывать какие-то категории сообщений с концами, но это не критично.
  • Будет круто, если будет встроенный пейджер (a-la less).
  • Ещё use-case: msbuild выводит строчки с префиксами «порядковый номер проекта> реальная строка». Сейчас мне приходится отдельно собирать выхлоп для каждого проекта отдельно и заменять номер на айдишник проекта, вычитанный другим паттерном выше.

Пока пользуюсь самописным скриптом, пришло время для чего-то нормально отлаженного и протестированного.

Пробовал awk, но получившийся скрипт был ещё менее читаемым.

Сейчас смотрю на pygments, но ещё не все требуемые фичи нашёл.

 , ,

E ()

Apache load balancer не работает на одном хосте

Форум — Web-development

Есть задача от архитектора по балансированию нагрузки между двумя нодами.

MAIN_URL=http://main:port/
AUX_URL=http://aux:port/

Сам балансер запущен на main на том же порту (тот же инстанс апача, это обязательное требование). Идея архитектора была в том, чтобы все запросы шли в нормальном режиме на main, а в случае нагрузки перебрасывались на aux.

Прокси конфиг, выданный архитектором:

<Proxy balancer://mybalancer>
  BalancerMember $MAIN_URL keepalive=On  connectiontimeout=5 retry=180
  BalancerMember $AUX_URL  keepalive=On  connectiontimeout=5 retry=180
  # byrequests для целей тестирования.
  ProxySet lbmethod=byrequests stickysession=ROUTEID
</Proxy>

<IfDefine IS_AUX>
  ProxyPass        /myapp   balancer://mybalancer/myapp
  ProxyPassReverse /myapp   balancer://mybalancer/myapp
</IfDefine>

Вроде бы сделано всё по мануалам (я специально гуглил, чтобы понять, что здесь происходит).

Теперь мне надо это заставить работать. Оба апача на обоих хостах стартуют нормально, все сервисы отзываются и работают. Но балансировка работает как-то странно.

Тестирую с помощью ab. Если запросы посылать на MAIN_URL/myapp, они выполняются только на main, загрузка не распределяется на вторую ноду. Если запросы посылать на AUX_URL/myapp, он перенаправляет все запросы на main. Я так понимаю, это из-за секции IfDefine IS_AUX, т.е. поведение ожидаемое, но при этом тоже не распределяет равномерно между нодами.

У меня есть подозрение, что апач не может держать балансер и мембер на одном и том же хосте+порте, и здесь нужно использовать какой-нибудь отдельный VirtualHost (?) для main ноды. Но я апач и его конфиги вижу второй раз в жизни, поэтому не могу авторитетно возразить архитектору.

Что здесь вообще можно проверить? Как посмотреть, почему апач не распределяет загрузку через балансер? Или действительно на одном хосте нельзя держать балансер и ноду? Я не смог нагуглить подтверждение.

 ,

E ()

git вытянуть часть репозитория как отдельную ветку

Форум — Development

Есть репозиторий с конфигами, который я использую в качестве домашних дот-файлов. Хочу часть из них, относящуюся к разработке, выделить в отдельный бранч, чтобы вытягивать только их, например, на рабочей машине. Но при этом они должны остаться в мастере. Естественно, эти выделенные конфиги должны постоянно синхронизироваться между ветками.

Пока нашёл такой способ: сделать orphan branch и подмержить туда нужные конфиги, а потом периодически синхронизировать с изменениями в мастере. Но мне кажется, я переизобретаю велосипед, потому что не умею в git branching. Есть ли какой-то более простой путь вытянуть некоторое под-дерево из основной ветки под видом отдельной ветки? Для моих целей достаточно и реад-онли ветки, т.к. все коммиты всё равно будут только в мастер.

И посоветуйте, пожалуйста, какой-нибудь туториал по гиту и бранчам. Когда-то натыкался в интернетах на туториал-репозиторий, оформленный в виде квеста (свитчнись в бранч, найди инструкции, следуй дальше и т.п.), но сейчас не могу найти его.

 , ,

E ()

Чем теперь устанавливать пользовательские стили в firefox?

Форум — Desktop

Stylish давно агонизировал и теперь умер полностью, не только как сайт, но и как аддон. После последнего апдейта не может найти свои собственные стили и не даёт загрузить их заново.

Кто чем пользуется на замену? Очень желательно, чтобы была возможность устанавливать глобальные стили. Есть ли какой-нибудь аддон, который может подхватить и распознать базу stylish?

 , ,

E ()

xxkb не запоминает раскладку для mplayer/mpv

Форум — Desktop

Сабж, плееры подхватывают раскладку предыдущего активного окна, при ручном переключении меняется раскладка и для предыдущего окна тоже. Воспроизводится на mplayer/mplayer2/mpv разных версий, --vo дефолтный (xv или opengl, наверное).

xfce 4.12, xxkb 1.11

Может быть, кто-то сталкивался с подобной проблемой? Я подозреваю, что дело в wm_class/свойствах (или их отсутствии), но дебажить очень не хочется, а в гугле забанили.

 , ,

E ()

Рисование ландшафтов/карт

Форум — Desktop

Ищу софт для сабжа. Нужно создавать местность с неровностями, нарисовать дорогу, набросать пару деревьев, зданий, транспортных средств.

Маст хэв:
- текстовые метки для областей и предметов;
- копировать/перемещать/вращать области на карте;
- ландшафты потенциально могут быть сюрными, т.е. здание может висеть в воздухе или поверхность сворачиваться в трубочку, в общем, тайловые редакторы не подойдут.

Большой плюс, если можно рисовать на разных уровнях детализации, т.е. одно здание может быть коробкой, другое может быть детализировано вплоть до интерьеров, но это совсем не критично.

Пока что рисую частично в pinta, частично руками и сканирую, так что подойдёт редактор карт для игр, если такой есть, или даже простой векторный редактор.

UPD: растровые редакторы для этого не подойдут.

 ,

E ()

Добавить в друзяшки модератора

Форум — Linux-org-ru

Не нашёл в профиле такой кнопки и не помню, а была такая вообще возможность? Слишком давно пользовался игнором.

// А если попробовать через свой профиль добавить юзернейм, возвращает 403.

Может быть, кто-то поделится юзерстилем/юзерскриптом для скрытия сообщений отдельного взятого юзера?

inb4: вопрос не о политике модерирования.

 

E ()

Как правильно организовать работу со стартовыми скриптами в терминале/ДЕ?

Форум — Desktop

Есть у меня такая конфигурация: .bashrc и .profile (как я понимаю, он подтягивается, если нет .bash_profile и при этом более универсальный).

.profile загружает .bashrc и больше ничего важного не делает.

В .bashrc есть разные персональные настройки (алиасы, PS1 и т.п.) и есть секция переменных и алиасов для поддержки XDG directories в приложениях, которые этого не умеют сами - вот эта секция меня интересует. Она должна выполняться в любом окружении - tty, эмулятор консоли, ДЕ, запускаемые из ДЕ команды, запускаемые из крона команды.

Я читал, что .profile грузится только для логин-шелла, то есть, в tty после логина будет и загруженный .bashrc. А в графических терминалах загружается только .bashrc. То есть, такой сетап, как у меня, должен работать так, как мне надо. Но он не работает или я не понимаю, как он должен работать.

Я делаю так: логинюсь в tty, проверяю, что XDG переменные подгрузились, запускаю из этой консоли startxfce4, открывается DE. Запускаю по шорткату urxvt, вижу белый дефолтный терминал. Вызов xrdb с нужным Xresources есть в той же секции XDG. В tty он очевидно не сработал, после запуска urxvt он тоже эффекта не произведёт, потому что терминал уже запущен. Следующий терминал уже открывается чёрный и красивый, потому что в предыдущем вызвался .bashrc с нужными настройками. Получается, что команды, выполняемые по горячим клавишам, не используют .profile и .bashrc?

Как правильно организовать эти скрипты, чтобы нужный набор переменных был доступен везде? И желательно, чтобы после изменения этих настроек и tty, и команды по горячим клавишам, и urxvt динамически запускались с обновленными настройками, без рестарта DE/сессии. Пока я вынес эти переменные в отдельный файл и включаю его в оба скрипта через source и в некоторых командах в xfce4-keyboard-settings и кронтабе принудительно, но мне кажется, это как-то неестественно.

Может, кто-то организует стартовые скрипты удобнее?

 , , ,

E ()

Бесплатная онлайн база данных для небольшого количества данных

Форум — Development

А посоветуйте сабж, пожалуйста, нужно хранить+изменять <300 элементов (чисел или булевых переменных), как можно проще в настройке (можно даже тупой набор битов или строку), безопасность/concurrency вообще не важны. Гугл показывает в основном рекламу, или я не знаю, что гуглить.

Для чего нужно: есть некий todo-список с возможностью ставить галочки для нескольких юзеров, нужно как-то сохранять прогресс с возможностью сравнения между юзерами (кто круче). У меня уже есть в dropbox готовый красивый html со списком, раньше я для этих целей использовал browser storage для каждого юзера персонально, теперь понадобилось как-то шарить результаты между юзерами и пользоваться на разных машинах.

 , ,

E ()

Пошаговые инструкции для прошивки android

Форум — Mobile

...такие вообще есть или это до сих пор удел кулхацкеров?

Сломался у меня после рутования play market, обновить не получается. Мне посоветовали перепрошить телефон, иначе проще купить новый. Захотелось сразу какую-нибудь кастомную прошивку типа CyanogenMod, пошёл первый делом на 4pda, но какой-то связной инструкции не нашёл, только набор бессистемных постов с битыми ссылками. На xda-dev инструкция не лучше, а-ля «нарисуйте овал; нарисуйте сову».

Существуют ли подробные мануалы с объяснением каждого шага для человека, который первый раз сталкивается с этим и больше не будет? Не хочется тратить время на изучение терминов и эксперименты. Очень желательно без использования виндовых программ, исключительно из-под линукса.

Если это критично - samsung ace gt-s5803i

 , ,

E ()

Собрать android-проект без сторонних систем сборки

Форум — Development

Есть некий android-репозиторий на гитхабе, разработчики которого тормозят с выкладыванием apk и предлагают собирать самостоятельно, если кому-то не нравится google play.

Я его скачал, нашёл внутри какой-то скрипт gradlew, скрипт выгрузил ~300 метров файлов и вывалился с ошибкой доступа к серверу. Разбираться с мертворождёнными системами сборки желания и времени нет. Это не вопрос.

Вопрос такой: есть исходники, ресурсы, манифест etc, т.е. полноценный проект. Можно как-то его собрать без использования хипстерских приблуд gradle-maven-ant? Я помню, что пару лет назад писал для этих целей makefile, который успешно работал, но похерил его, похоже. Может быть, есть какой-то мануал по сборке?

 , ,

E ()

Подмена имени хоста в who при заходе через ssh

Форум — Admin

Захожу на dev-сервер dev.example.com через putty, в who хостнейм отображается как my-name.example.com, например. Потом с dev-сервера по ssh подключаюсь к продакшн-серверу, там в who у меня хостнейм уже dev.example.com.

Хочу, чтобы меня и в других, вложенных соединениях показывали, как my-name. Как это организовать? HOSTNAME=my-name ssh user@host - первое, что в голову пришло, но не работает. Нагуглил только структуру utmp, но велосипедить не очень хочется, может быть, есть какой-то стандартный способ заставить ssh или who считать, что захожу с некоего другого хоста?

Зачем это нужно: сисадмины пугаются, когда видят в списке who какие-то необычные хосты или айпишники.

Системы - Linux (RH), AIX (если это важно).

 ,

E ()

RSS подписка на новые темы