LINUX.ORG.RU

Сообщения kulti

 

Linux сервер на usb-флэшке

Всем привет!

В интернете много мануалов о том, как правильно поставить линукс на флэшку, чтобы она не померла (отключить журнал, noatime, ramfs etc). Но неужели нет готового образа, где все уже настроено?

Что у меня сейчас:

  • Сервер HP MicroServer Gen8.
  • В нем есть один жесткий диск (btrfs).
  • На флэшке стоит Rockstor.

Что не нравится:

  • После перезагрузки rockstor не всегда поднимается корректно (не монтирует разделы, не запускает некоторые docker-контейнеры).
  • Демо-лицензия на ilo закончилась, а если система с флэшки ip не получила, то нет ssh - приходится помучиться, чтобы все оживить.

Что хочется:

  • Простую систему, которая получает ip по dhcp поднимает ssh.
  • ФС флэшки вообще можно ro монтировать, когда она в сервер воткнута, чтобы не думать о ее скорой кончине. Если нужны какие-то доп-настройки - переткнул в комп и поправил.
  • Система на фэлешке монтирует btrfs разделы с основного жесткого диска и запускает docker-контейнеры (можно будет bash-скриптами запилить).

Пока писал, подумал: а CoreOS мне не подойдет?.. (UPD: СoreOS больше 4 гигов весит, слишком жирный).

 ,

kulti
()

Целостность бинарных данных при использовании Ceph

Всем привет!

Появилась задача модицифицировать и читать одни и теже бинарные данные на разных машинах. Смотрю в сторону распределенных файловых систем.

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

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

Если для моей задачи Ceph не подходит, то какие есть варианты? Раз это у меня что-то вроде nosql БД, то логично написать своего демона репликации, но не хочется изобретать велосипед.

 

kulti
()

Репликация в PostgreSQL

Всем привет!

Пытаюсь запустить репликацию в PostgreSQL, используя BDR.

Две ноды поднял без особых проблем, поразбирался с мониторингом и прочим. Вроде все понятно.

Сейчас экспериментирую с большим числом нод (пока четыре). Если перезапускать одну из нод, то начианются проблемы.

В pg_replication_slots некоторые slot'ы перестают быть active. При этом в логах сначала пишутся ошибки, а потом тишина.

could not send replication command "START_REPLICATION SLOT "bdr_16385_6228493615195607060_1_16385__" LOGICAL 0/187CA80 (pg_
version '90405', pg_catversion '201409291', bdr_version '903', bdr_variant 'BDR', min_bdr_version '700', sizeof_int '4', sizeof_long '8', sizeof_datum '8', maxalign '8', 
float4_byval '1', float8_byval '1', integer_datetimes '1', bigendian '0', db_encoding 'UTF8', replication_sets '"default"', db_encoding 'UTF8')": ERROR:  replication slot
 "bdr_16385_6228493615195607060_1_16385__" is already active

Не могу создать схему, и не понимаю, что делать с этой ситуацией.

LOG:  Declining remote DDL lock request, this node is already locked
ERROR:  could not acquire DDL lock - another node has declined our lock request
HINT:  Likely the other node is acquiring the DDL lock itself.
STATEMENT:  CREATE SCHEMA IF NOT EXISTS appuser AUTHORIZATION appuser;
WARNING:  Did not find local DDL lock entry for a remotely released global DDL lock
DETAIL:  node (bdr (6228493615195607060,1,16385,)) sent a release message but the lock isn't held locally

 ,

kulti
()

Простой event loop для STM32

Всем привет!

Изучаю разработку под STM32. Более-менее понял базовые вещи про прерывания и работу с периферией. Задумался над тем, как бы организовать простенький event-loop, типа libev.

Одна из идей завести битовую маску событий, которые выставляются в прерываниях, а внутри event-loop'a анализируются и вызывают соответсвующие колбеки. Но хочется, чтобы event-loop «спал», пока в эту битовую маску что-нибудь не запишут - пока не нашел, как это сделать.

Другая идея - использовать низкоприоритетное прерывания для event-loop'a. Т.е., когда срабатывает какое-то прерывание - оно пишет бит-событие и генерирует низко-приоритетное прерывание. Даже нашел вроде бы такую штуку - PendSV называется.

Но может уже существуют готовые event-loop'ы для большинства случаев или из которых можно сделать то, что нужно? А может это вообще неверный подход при работе с STM32?

 

kulti
()

Назначение сменных насадок для массажера

Всем привет,

купили китайский массажер, к которому нет описания сменных насадок. Максимум, что удалось нарыть - вот эту картинку. На ней нет описания для четырех насадок, а для одной я не понимаю, что за «cuppy parts».

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

Спасибо.

 

kulti
()

DIR-300 как свитч

Всем привет!

Понадобился мне тут на стол свитч, и, чтобы не покупать, решил намутить его из того, что было. Взял со шкафа DIR-300, почитал в интернетах ииии что-то оно не очень работает. Один раз всего сработало, но я так и не понял почему.

А теперь обо всем по порядку.

Как я понял, родная прошивка от dlink'a умеет только в режиме маршрутизатора работать. Но в этот DIR-300 я уже когда-то зашивал dd-wrt, так что сбросил его в дефолт и настроил по статье из их вики http://www.dd-wrt.com/wiki/index.php/Switch

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

В общем, я в настройке сети ноль полный, подскажите чего-нибудь люди добрые =)

Целевая конфигурация сети такая Интернет-маршрутизатор-свитч-компьютер

 ,

kulti
()

Есть ли в андроиде полноценная поддержка prepared statement?

Почему в анроиде нет(или я не нашел?) поддержки prepared statement для select'ов, возвращающих больше одной колонки?

Где-то даже видел комментарий, что «prepared statement не дают особого выиграша по скорости - используйте rawQuery»

 , prepared statement,

kulti
()

Быстрое выполнение команд на удаленном сервере

Стандартный способ - это запустить через ssh. Но это медленно, по понятным причинам.

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

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

telnet работает быстрее, но с ним не очень удобно работать из python'a. Приходится закрывать соединение, иногда в ответе обрезается один символ...

На коленке слабали простенький tcp-север, который принимает команду и выполняет ее. Работает в десятки раз быстрее, чем через ssh, что было ожидаемо.

Возможно, существуют готовые решения для такой задачи и нет смысла велосипедить?

 

kulti
()

Помогите вспомнить кино

Начиналось примерно так:

1. Два парня в магазине купили еды и случайно забыли заплатить за банку оливок или чего-то подобного (она в кармане куртки лежала).

2. Возле магазина стояли менты, которые увидели их машину, которая была похожа по приметам на ту, которая в розыске была

3. Менты поехали за ними, включили серену и задержали

4. Ребята во всем сознались, не подозревая, что дело не в баночке, «украденной» из магазина

Может это и не начало было, может и кино плохое, но что-то в башке этот сюжет сидит, а что за фильм вспомнить не могу...

 

kulti
()

Как грамотно организовать процесс перевода книги?

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

Наверняка уже существуют программы и/или онлайн сервисы, упрощающие процесс перевода.

Например, я сходу задумался о таких «плюшках»:

  • Словарь терминов - который может автоматически найти все вхождения конкретного слова из словаря + его же можно использовать в качестве подсказок при переводе
  • Комментарии/обсуждения - когда люди могу предлагать/обсуждать переводы, либо просить помощи в переводе трудных моментов

Переводами никогда не занимался, слышал только про нотабеноид, но его закрыли.

 ,

kulti
()

git-2 перенести один комит в другую ветку

Всем привет, и в особенности адекватным гуру git'a.

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

В интернетах в таких случаях рекомендуют cherry-pick, но эти советы достаточно старые, и в git'e версии 2.1 cherry-pick тянет кучу коммитов вместо одного, как будно это merge. Пробовал разобраться по ману, но как-то не срослось у нас.

Еще нашел команды format-patch и apply, но хотелось бы обойтись одной командой.

 ,

kulti
()

Не могу смонтировать гостевой nfs (no route to host)

Всем привет,

есть виртуальная машина с centos 6.5. На ней поднят nfs. Конфиг nfs не трогал (только пробовал порты раскоментировать, как где-то в инете советовали, хотя, по моему, это глупость какая-то).

/etc/exports:

/mnt/work 192.168.100.1(rw,sync,no_subtree_check,no_root_squash)

Сеть с виртуалкой настраивал, как здесь.

SSH на виртуалку работает, интернетик из виртуалки тоже.

Когда пытаюсь на хосте смонтировать гостевой nfs, получаю такие сообщения об ошибке:

localhost ~ # mount -v -t nfs 192.168.100.2:/mnt/work /home/kulti/work
mount.nfs: timeout set for Thu Oct 23 07:22:55 2014
mount.nfs: trying text-based options 'vers=4,addr=192.168.100.2,clientaddr=192.168.100.1'
mount.nfs: mount(2): No route to host
mount.nfs: trying text-based options 'vers=4,addr=192.168.100.2,clientaddr=192.168.100.1'
mount.nfs: mount(2): No route to host 
^C

 ,

kulti
()

Как проще всего разворачивать свои приложения?

Всю жизнь делал приложения под «целевую платформу». Т.е. знал, что должно работать на центосе или дебиане и разворачивал соответсвующую виртуалку. Мучался со сборкой более свежих и необходимых версий библиотек, etc

Сейчас существуют такие штуки, как docker. Хочется понять, если я создам контейнер под, скажем, уютной генточкой, то он так же легко развернется на любой системе, где работает docker?

Вроде бы так. Тогда еще вопрос, нужны специальные настройки ядра, lvm и прочее, чтобы создавать контейнеры? Или они нужны только для запуска этих контейнеров, и просто так ебилд написан?

Так же прочитал, что неофициальный (а другого и нет) начальный образ для гентоконтейнера полная фигня, т.к. это просто stage3 и он быстро протухает. Т.е. придется каждый раз заново создавать контейнер, если захочется что-то посвежее. Вообще я не очень понимаю, как контейнеры на других дистрибутивах обновляются?

А если какая-то дыра в безопасности, то нужно все свои контейнеры обновлять?

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

 

kulti
()

Увеличение размера замапленой shm на лету

Стандартная последовательность работы с shm

  • shm_open
  • ftruncate
  • mmap

Несколько вопросов:
1. Почему я могу работать с данными за пределами замапленного размера и ничего не падает? По идее SIGBUS должен был случиться. Valgrind тоже ничего подозрительного в этом не заметил. Предполагаю, что shm_open создает объект размером со страницу, например. И поэтому все «хорошо», пока я за этот размер не вылезу.

2. Что реально делает ftruncate? Изменяет размер shm объекта, или только размер файла в /dev/shm? Я провел несколько экспериментов - судя по всему, второе.

3. Если описаное в пункте 1 не нормально, т.е. SIGBUS может выстрелить в самый неожиданный момент, то можно ли как-то перемапить с другим размером? Я вижу два варианта: замапить на тот же адресс, но с большим размером(MAP_FIXED вроде как заставляет использовать переданный адресс) ИЛИ выделять безумно большой размер, например, с оперативу, и надеятся что больше не понадобится, а если и понадобится, то нужно добавить оперативки, ибо все равно работать не будет.

 ,

kulti
()

Не работает Alt после добавления в startup одного приложения

Есть такой эмулятор терминала - qterminal. Если я его добавляю в startup fluxbox'a, то после запуска системы перестает работать Alt, пока я не закрою qterminal. Если запустить qterminal уже после запуска fluxbox'a, то все работает нормально.

Куда копать?

Пробовал смотреть на вывод xev - клавишу Alt он получает, и отличий в выводе при работающем Alt не наблюдается.

PS. Если что, то запуск fluxbox'a выглядит примерно так: в .xinirc дергается скрипт, который в итоге дергает скрипт со следующим содержимым

qterminal &> /dev/null
exec fluxbox

 

kulti
()

Процесс подвисает на epoll'e, при попытке его остановить

Всем привет!

Проблема воспроизводится только на виртуальных машинах (VMware ESX 4). Мы грешим на то, что на виртуалках тайминги не очень хорошо работают. Возможно, ntpd немножко откатил время назад и epoll'у приплохело, но останавливать его не вариант (т.к. гоняются кластерные тесты).

Пока писал - родилась идея, как проверить, виноват ntpd или нет: останавливать его перед остановкой нашего процесса и запускать снова на старте.

Может у кого еще какие мысли есть? Backtrace вот такой:

#0  0x0000003cb3ed3453 in __epoll_wait_nocancel () from /lib64/libc.so.6
#1  0x0000000000428573 in ngx_epoll_process_events (cycle=0x15541c10, 
    timer=100, flags=1) at src/event/modules/ngx_epoll_module.c:572
#2  0x0000000000420088 in ngx_process_events_and_timers (cycle=0x15541c10)
    at src/event/ngx_event.c:245
#3  0x0000000000427013 in ngx_worker_process_cycle (cycle=0x15541c10, 
    data=<value optimized out>) at src/os/unix/ngx_process_cycle.c:819
#4  0x0000000000425777 in ngx_spawn_process (cycle=0x15541c10, 
    proc=0x426f28 <ngx_worker_process_cycle>, data=0x0, 
    name=0x6a9b79 worker

 , ,

kulti
()

На сколько сложно писать плагины к vim?

В первую очередь интересуют языки и скорость работы. Я нашел, что можно писать на vimscript, python, scheme и lua. А также, что python раз в 20 быстрее vimscript, а luajit чуть ли не в 1000 (правда там не говорилось, в какой момент этот lua компилируется, но я почти уверен, что на старте vim'a). Про схему пока не искал, да и не очень хочется экспериментировать с малознакомым языком.

Во-вторых, интересуют подводные камни разработки плагинов под vim. Как я понимаю, функции должны быть очень быстрыми, чтобы интерфейс не подвисал. Поэтому я хочу вынести всю тяжелую работу в отдельный процесс, который взаимодействует с плагином через, например, shm. В плагине, соответственно, будет только чтение данных. Нет данных - нет автодополения, подсветки etc.

Теперь о самой задаче. Мне нужен редактор кода, который умеет работать с cmake-проектом. Из того, что я использовал, ближе всего к моему идеалу KDevelop, но уже давно хочется большего. Что-то близкое по функционалу, обычно имеет схожие проблемы, но не имеет шикарной подсветки и не менее шикарного частичного автодополнения по tab'у (+ многое еще и на Java).

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

Сейчас еще попытаюсь заставить qtcreator работать с существующим cmake-проектом. А пока поделитесь опытом написания плагинов к vim на lua и/или python.

 ,

kulti
()

Репликация shared memory

Есть приложение из множеста процессов, которые общаются между собой и хранят всякие данные в shm. Возникла задача обеспечить high availability. Задумались над тем, как реплицировать наше хранилище.

Первый вариант: каким-то образом снять мгновенный snapshot.

Глобальный лок, естественно, не подходит, т.к. все надолго встанет (shm занимает не один Гиг).

Хотелось бы открыть shm на чтение так, чтобы страницы, измененные другими процессами, не менялись. Типа такой copy-on-write только «наоборот».

Второй вариант: подумать над записью дифов наших структур.

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

kulti
()

Как сделать разметку на маркерной доске?

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

Какие еще есть варианты?

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

PPS. Оттирание перманентного маркера спиртом и прочим не поможет, если надписи несколько месяцев.

 

kulti
()

Как без лишних переживаний запустить skype?

О причинах умолчу. Считайте, что паранойя. Нужно запустить skype в песочнице.

Гуглёж выдает всякие selinux'ы и apparmor'ы. Мне кажется это перебор, т.к. закрывать от скайпа что-то кроме фс не вижу смысла. Если есть, то прошу разъяснений.

Так вот, есть в генте такая тулза sandbox. Как сделать что-то вроде такого?

SANDBOX_DENY="${HOME}"
SANDBOX_WRITE="${HOME}/.skype"
чтобы скайп не смог в моем хомяке ничего прочитать, кроме своей папки?

 , ,

kulti
()

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