LINUX.ORG.RU

Сообщения vitalyisaev2

 

Go: особенности работы рантайма во время вызова дорогих syscall

Форум — Development

Всем привет. Буду благодарен, если кто-то сможет прояснить, как именно ведёт себя рантайм Go при выполнении медленных сисколлов. Представим, что есть приложение, которое выполняет интенсивную работу с ФС (создаёт, пишет, синкает файлы). По очевидным причинам вызов syscall.Fsync достаточно дорогой: на какое-то время вызывающая горутина будет заблокирована. Вопрос в том, продолжат ли остальные горутины работать? Или любое переключение в контекст ядра останавливает весь рантайм?

Иными словами, имеет ли смысл применять многопоточность для ввода на диск? Пример:

package main

import (
	"log"
	"os"
	"sync"
)

var data = []byte("Some big data")

func worker(filenameChan chan string, wg *sync.WaitGroup) {
	defer wg.Done()
	for {
		filename, ok := <-filenameChan
		if !ok {
			return
		}

		f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY, os.FileMode(0644))
		if err != nil {
			log.Fatal(err)
			continue
		}

		if _, err := f.Write(data); err != nil {
			log.Fatal(err)
			continue
		}

		if err := f.Sync(); err != nil {
			log.Fatal(err)
			continue
		}

		if err := f.Close(); err != nil {
			log.Fatal(err)
		}
	}
}

func main() {

	// Launch workers
	filenameChan := make(chan string)
	wg := &sync.WaitGroup{}
	for i := 0; i < 2; i++ {
		wg.Add(1)
		go worker(filenameChan, wg)
	}

	// Send tasks to workers
	filenames := []string{
		"1.txt",
		"2.txt",
		"3.txt",
		"4.txt",
		"5.txt",
	}
	for i := range filenames {
		filenameChan <- filenames[i]
	}
	close(filenameChan)

	wg.Wait()
}

Спасибо всем за помощь.

 ,

vitalyisaev2
()

nslookup ресолвит хост, а ping - нет

Форум — Admin

Всем привет. Я пытался настроить локалхост (Ubuntu 14.10) на работу с одним из сервисов оркестрации, работающих по протоколу DNS (в моём случае это Consul на 10.241.232.14:8600). Для этого добавил в уже имеющийся dnsmasq дополнительную настройку, после чего перезапустил сервис:

$ cat /etc/dnsmasq.d/10-consul 
server=/service.search.km./10.241.232.14#8600

Пытаюсь подсоединиться к jenkins-deb-builder.service.search.km - это сервис, который ресолвится DNS'ом, установленным на Consul. В результате столкнулся с неожиданной ситуацией, когда dns работает:

$ host jenkins-deb-builder.service.search.km
jenkins-deb-builder.service.search.km is an alias for mailtest-4.dev.search.km.

$ nslookup jenkins-deb-builder.service.search.km
Server:		127.0.0.1
Address:	127.0.0.1#53

jenkins-deb-builder.service.search.km	canonical name = mailtest-4.dev.search.km.

$ dig @localhost jenkins-deb-builder.service.search.km

; <<>> DiG 9.9.5-4.3ubuntu0.2-Ubuntu <<>> @localhost jenkins-deb-builder.service.search.km
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32618
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;jenkins-deb-builder.service.search.km. IN A

;; ANSWER SECTION:
jenkins-deb-builder.service.search.km. 0 IN CNAME mailtest-4.dev.search.km.

;; Query time: 25 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 23 19:49:45 MSK 2015
;; MSG SIZE  rcvd: 130

А пинг и вообще любые другие сетевые обращения - нет:

$ ping jenkins-deb-builder.service.search.km
ping: unknown host jenkins-deb-builder.service.search.km

$ curl http://jenkins-deb-builder.service.search.km:8082
curl: (6) Could not resolve host: jenkins-deb-builder.service.search.km

Ниже привожу свои конфиги (nsswitch немного исправлял, поскольку гугл указывал на возможные проблемы с avahi):

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search int.pv.km srv.pv.km dev.ix.km search.km ix.km srv.search.km

$ cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Для пущей полноты картины - фрагмент трассировки пинга, где видно, что он почему-то пишет в дескриптор неполное имя хоста...

$ strace ping jenkins-deb-builder.service.consul 
...
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=239, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\364\25\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 52, MSG_NOSIGNAL, NULL, 0) = 52
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [127])               = 0
recvfrom(3, "\364\25\201\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 127
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\220P\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\220P\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\354\274\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [118])               = 0
recvfrom(3, "\354\274\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 118
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\211\222\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\211\222\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\2077\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 62, MSG_NOSIGNAL, NULL, 0) = 62
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [112])               = 0
recvfrom(3, "\2077\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 112
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\257b\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 58, MSG_NOSIGNAL, NULL, 0) = 58
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [108])               = 0
recvfrom(3, "\257b\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 108
close(3)                                = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0)    = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "L5\1\0\0\1\0\0\0\0\0\0\23jenkins-deb-builder"..., 66, MSG_NOSIGNAL, NULL, 0) = 66
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [116])               = 0
recvfrom(3, "L5\205\203\0\1\0\0\0\1\0\0\23jenkins-deb-builder"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 116
close(3)                                = 0
write(2, "ping: unknown host jenkins-deb-b"..., 54ping: unknown host jenkins-deb-builder.service.consul
) = 54
exit_group(2)                           = ?
+++ exited with 2 +++

Я не могу понять, как вообще устроен ping, как он ресолвит имена? Nscd на машине не установлен. Если кто может что подсказать, буду благодарен.

 ,

vitalyisaev2
()

Архитектура веб-приложения - фронтенда к системе сборки

Форум — Web-development

Я занимался ИБ, машинным обучением и немного бэкенд-разработкой, неплохо знаю Python, а вот в Javascript знания нулевые. Сейчас пришла задача из новой для меня области - сделать полноценный веб-интерфейс к самописной системе сборки (в состав системы входят репозитории с исходниками и бинарными пакетами, lxc контейнеры и другие элементы).

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

  • кнопка запуска сборки;
  • некоторый элемент интерфейса, отражающий этап процесса (текстовое окно с логами, прогресс бар, индикатор состояния);

Особенность процесса сборки пакетов и контейнеров - длительность вплоть до 10-20 минут, запуск и ветвление подпроцессов, частые изменения состояний (создать контейнер -> git clone -> установка зависимостей -> make -> создать пакет -> создать контейнер).

Хотел бы спросить у знатоков, как пишутся такие приложения? Какие функции надо переложить на фронтенд? Как хранить в бэкенде и передавать в браузер информацию об изменении состояния процессов. Какие выбрать фреймворки (c бэкендом всё ясно - Django или Flask), особенно в JS? Спасибо...

 , , ,

vitalyisaev2
()

Можно ли одновременно использовать планки RAM разных производителей

Форум — Linux-hardware

Докупил для домашнего компьютера (Fedora 20, ядро 3.16.2, материнская плата Gigabyte GA-H77-D3H) оперативную память: старая была Kingston HyperX KHX16C9B1BK2/8X 2х4 Гб, а новая - Corsair Vengeance CMZ16GX3M2A1600C10R 2х8 Гб.

Поскольку плата поддерживает до 32Гб в 4 слота, хотелось бы оставить и то, и другое. Формально основные характеристики у обоих изделий одинаковые - частота 1600 Мгц. Однако терзают смутные сомнения, можно ли их держать вместе? После покупки сделал бенчмарк памяти pmbw, особой разницы не увидел, кроме того, что Corsair в тестах по latency обгоняет Kingston где-то на 10%.

Результаты тестов:

Спасибо.

vitalyisaev2
()

Fedora 20 перестала загружаться

Форум — General

Внезапно на десктопе перестала загружаться Fedora 20 (ядро 3.16.2-200). Нормально грузится до момента появления окна логина, но в последний момент мониторы неожиданно переходят в спящий режим. В этом состоянии система продолжает работать, но зайти на неё нельзя никак - не работают комбинации Ctrl+Alt+F? для вызова виртуальной консоли и не работает ssh (спрашивает пароль, печатает сообщение о последнем логине и зависает).

Вчера произвел апгрейд компа, после которого ВСЕ РАБОТАЛО (как минимум две успешные загрузки):

  • Поменял оперативную память на CORSAIR Vengeance CMZ16GX3M2A1600C10R DDR3-2x 8Гб 1600 (материнская плата GIGABYTE GA-H77-D3H);
  • Поставил второй монитор;
  • Беспроводная клавиатура Genius;

В безопасном режиме консоль загружается. Подскажите, как диагностировать проблему? Спасибо

 

vitalyisaev2
()

Как организовать тестирование и сборку ПО

Форум — Development

Всем привет. Прошу совета по организации процесса тестирования и сборки пакетов для небольшого клиент-серверного приложения на Python.

У нас небольшая группа (3 человека), параллельно разрабатываются 3-4 ветки. Разработка и тестирование организована на виртуалках в системе oVirt, дистрибутив - производный от RHEL 6. Репозиторий кода организован на Git в Redmine, репозиторий пакетов - ftp-сервер на одной из машин.

Процесс разработки организован следующим образом:

  • Разработчик вносит изменения в код;
  • Собирает локально на своей машине пакет со своей веткой и обновляет репозиторий пакетов;
  • Откатывает тестовые ВМ до «чистых» снепшотов и перезагружает их;
  • Устанавливает на соответствующие ВМ клиентский и серверный пакеты;
    yum clean all
    yum install <package>-<ver>-<release>.<branch>.noarch.rpm
    
  • Запускает программы;
  • На ВМ заранее клонирован репозиторий с кодом, поэтому, если возникают ошибки, разработчик-тестер делает:
    cd ~/<проект>
    git fetch origin
    git checkout <нужная ветка>
    cd /usr/lib/python2.6/site-packages/<проект>
    rm -rf <проблемный модуль>.py*
    ln -s ~/<проект>/<проблемный модуль>
    vim ~/<проект>/<проблемный модуль>
    
  • Начинает редактировать исходники на тестовой машине и снова всё перепроверять, если ошибка найдена - коммитить;

Так повторяется до 4-5 раз в день, в зависимости от фазы цикла (написание кода или отладка кода). На каждую итерацию тратится до 15 минут - накладные расходы.

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

 

vitalyisaev2
()

Выбор структуры данных для матрицы принятия решений

Форум — Development

Всех приветствую, прошу совета в выборе оптимальной структуры данных для хранения, выбора и вызова определённых callback-функций (в соответсвии с поступающими аргументами).

В частности, в программу подаются строки, которые сопоставляются с регулярными выражениями, в случае совпадения строки с регулярным выражением вызывается функция. В линейном случае (одного аргумента - паттерна boost::regex) напрашивается структура типа key-value, например так:

typedef std::map<boost::regex, boost::function<void(void)> > regex_callback;

void SuOpenedCallback()
{
}

void SuClosedCallback()
{
}


int main(int argc, char** argv)
{
    //Регулярные выражения для сопоставления
    boost::regex su_opened  ("some_regexp_1"); 
    boost::regex su_closed  ("some_regexp_2"); 

    //Структура данных, хранящая коллбеки
    regex_callback resolver = boost::assign::map_list_of
        (su_opened, boost::bind(&SuOpenedCallback))
        (su_closed, boost::bind(&SuClosedCallback));

    std::string line("some_part_of_/var/log/secure");
    boost::smatch result; 
    
    BOOST_FOREACH(const auto& pair, resolver)
    {
        if(boost::regex_match(line, result, pair.first)
        {
             pair.second();
             break;
        } 
    } 
}

Мой вопрос относительно случая, когда аргументов будет много (не только один boost::regex):

  • Существует ли в С++ типовое решение для структуры типа multiple_keys-value и как там осуществляется перебор ключей? Или же надо писать свой класс, состоящий из нескольких аргументов, и подставлять его в key?
  • Есть ли вообще какие-то шаблоны для такой «многофакторной» матрицы решений?

Благодарю.

 , ,

vitalyisaev2
()

Как не дать пользователю запускать свои программы?

Форум — Security

Я изучил соответствующий раздел FAQ, однако возникает ряд вопросов.

В частности, что делать, когда пользователь подключает флешку? У меня в RHEL 6 почему-то все файлы, находящиеся на флешке (FAТ), имеют бит на исполнение. Причем монтирование флешки осуществляется не в $HOME. Как монтировать внешние носители с noexec по умолчанию?

И таких тупиков проглядывается довольно много.

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

 ,

vitalyisaev2
()

Не могу зайти из Москвы на американский правительственный сайт

Форум — General

Для диссертации нужно скачать американские статистические сборники с сайта http://censtats.census.gov/. Но почему-то из Москвы на сайт не могу попасть, хотя точно знаю, что из Финляндии он в данный момент доступен (друзья только что проверяли).

Трассировка прекращается на сервере 129.250.8.158, который принадлежит компании NTT America (видимо, это крупнейший американский провайдер) и расположен в штате Колорадо:

traceroute to 148.129.75.154 (148.129.75.154), 30 hops max, 60 byte packets
 1  192.168.0.1 (192.168.0.1)  1.094 ms  1.355 ms  2.375 ms
 2  inside.yaol.ru (10.10.173.1)  10.554 ms  10.908 ms  11.093 ms
 3  inside.yaol.ru (172.17.17.75)  11.023 ms  10.528 ms  11.084 ms
 4  inside.yaol.ru (94.158.162.1)  11.235 ms  11.193 ms  11.328 ms
 5  yaol-uni-lgw.cen.medi-a.ru (77.246.97.9)  11.471 ms  12.285 ms  11.366 ms
 6  ae6-290.RT.M9.MSK.RU.retn.net (87.245.255.109)  12.391 ms  3.674 ms  11.328 ms
 7  * ae6-3.RT.IRX.FKT.DE.retn.net (87.245.233.198)  55.612 ms  57.298 ms
 8  213.198.77.213 (213.198.77.213)  57.675 ms  59.552 ms  59.668 ms
 9  * * ae-5.r21.frnkge03.de.bb.gin.ntt.net (129.250.4.162)  62.284 ms
10  ae-3.r23.nycmny01.us.bb.gin.ntt.net (129.250.3.180)  146.943 ms  147.020 ms *
11  ae-13.r05.nycmny01.us.bb.gin.ntt.net (129.250.4.166)  152.661 ms ae-1.r05.nycmny01.us.bb.gin.ntt.net (129.250.4.69)  147.317 ms  155.068 ms
12  ae-0.centurylink.nycmny01.us.bb.gin.ntt.net (129.250.8.158)  144.404 ms  162.644 ms  143.947 ms
13  * * *
14  * * *
15  * * *

Слабо знаком с сетевыми технологиями, не подскажете, есть ли в таких случаях какой-нибудь обходной путь? Спасибо

 ,

vitalyisaev2
()

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

Форум — Development

Всем привет... мучают два вопроса, по которым Гугл сходу не дал ответа.

1. Существует ли в RHEL дистрибутивах нормальный инструмент для определения пакетов, в которых нуждается бинарник? yum-builddeps требует src.rpm, а у меня есть только скомпилированный и слинкованный из проекта на моей (разработчика) машине исполняемый файл;

2. Как я могу узнать, какие библиотеки требуются для компиляции проекта? В первую очередь, я имею ввиду *-devel.rpm.

Всё это нужно мне, чтобы заполнить Required и BuildRequired поля в spec.

Для первой проблемы написал скрипт, построенный на парсинге команд ldd и rpm -q --whatprovides. По второй проблеме - непонятно.

Может, есть какие-то цивилизованные инструменты? Спасибо

 , , ,

vitalyisaev2
()

Газета.ру: «Вирус скорости»(с)

Форум — Talks

http://www.gazeta.ru/auto/2014/01/13_a_5845877.shtml

По данным «Газеты.Ru», ни одна из установленных в Подмосковье камер ГИБДД «Стрелка-СТ» не работает. Более 100 комплексов вывел из строя загадочный вирус, парализовавший работу всей системы в ночь с 9 на 10 января.

...

«После углубленной диагностики термостатированных компьютеров комплекса «Стрелка-СТ» было установлено:

— в результате намеренного взлома системы была повреждена файловая система блоков обработки и управления комплексов «Стрелка-СТ», что делает невозможным запуск операционной системы Windows XP и специализированного программного обеспечения комплексов;

— повреждены системные журналы операционной системы; на системном диске С:

— найден инородный вредоносный пакетный файл 222.bat, настроенный для автоматического изменения пароля операционной системы и запуска исполняемого файла 1.exe;

— изменены пароли на доступ в операционную систему с правами администратора.

Причиной неработоспособности комплексов является умышленный взлом операционной системы неизвестными лицами».

vitalyisaev2
()

Проблемы c clvmd при разворачивании RHEV Cluster

Форум — Admin

Настраиваем HA-LVM Failover (CLVM). Успешно проходим все стадии:


1. vgchange -cy RHEVMVolGroup

2. lvmconf --enable-cluster

3. dracut...

4. reboot

Однако служба clvmd не стартует:

5. service clvmd restart

Вот что сыпется в /var/log/messages:

clvmd could not connect to cluster manager
Can't open cluster manager socket: No such file or directory

Команда strace -f clvmd показывает, что служба не может подцепить какие-то сокеты:

connect(.../var/run/cman_client...) (No such file or directory)
corosync.ipc (Connection refused)

Наконец, pvs выдаёт следующее:

connect () failed on local socket:
internal cluster lockage initialization failed

Никто с подобным не сталкивался? Спасибо

 , ,

vitalyisaev2
()

Централизованный сбор логов auditd + RPC

Форум — Development

Привет, ЛОР. Посоветуйте, как можно было бы спроектировать приложение для сети из 10 - 100 АРМ с ОС Linux, которое собирало бы логи auditd с машин и кидало их на один сервер?

Проблема в том, что логов этих очень много. Правило будет что-то вроде:

auditctl -a exit,always -F arch=b64 -S open -S execve -S fchmodat -S fchownat -S exit -S exit_group 
В стандартной конфигурации auditd набегает около 100 Мб логов в час или около 1Гб за рабочий день.

Поэтому нужно сделать:

1. Клиентскую часть, которая будет парсить логи и вытаскивать из них нужную информацию (приблизительно около 25% от исходного объёма лога);

2. Серверную часть, которая способна держать такую нагрузку с указанного количества машин;

3. SSL-шифрование;

4. Элементарный RPC, подразумевающий определённую реакцию сервера на приход тех или иных событий из локальных логов, в том числе - возможность ответа сервера клиенту по такому же каналу.

Требование заказчика - только С или С++. Вопрос - какие существует подходы для разработки таких программ? Может быть, есть что-то готовое? Если нет, то какие применяются обычно либы/фреймфорки? Какой выбрать протокол сообщений? (protobuf пробовал, не подходит)

Спасибо

 , , ,

vitalyisaev2
()

Astra Linux Special Edition - выпилены интерпретируемые языки? языки с JIT-компиляцией?

Форум — Security

Смутило следующее сообщение на сайте сабжа:

Обновленная система ALD (Astra Linux Directory) более не использует сценариев на языке Perl. Реализована модульная расширяемая архитектура на языке C++, предоставляющая программный интерфейс для разработки потребителями для своих расширений.

Получается, что в лицензированной ФСБ версии системы нет интерпретируемых языков? На сайте не упоминается bash, Python и Java. Perl выпилили из службы каталогов. Если кто-то с ней работал, скажите, это так или нет?

 , ,

vitalyisaev2
()

Как добавить скрипт в initramfs RedHat 6.4?

Форум — Admin

Возможно, я косноязычно выражусь, но мне надо заставить auditd работать во время загрузки ОС RedHat, чтобы понять, какие вообще файлы используются системой в процессы загрузки Здесь - обсуждение вопроса

Мне посоветовали на уровне initramfs выполнить следующую команду:

auditctl -a exit,always -S open,openat,creat,execve

И вот я распаковал файл /boot/initramfs-2.6.32-358.el6.x86_64.img (кстати, здесь же рядом - какой-то /boot/initrd-2.6.32-358.el6.x86_64kdump.img - какой из них именно используется для загрузки?). На выходе получил папку с некоей файловой системой, в корне лежит shell файл init. Куда именно мне можно добавить приведённую выше строчку? Спасибо.

 , ,

vitalyisaev2
()

Две версии библиотек qt на одной системе

Форум — General

Уважаемые коллеги, как заставить библиотеки qt двух разных версий (4.6 и 4.8) ужиться на одной ОС?

Мы вынуждены использовать RHEL 6.4. По умолчанию с ним идёт Qt 4.6.2. Необходимо поставить на него софт, слинкованный с Qt 4.8.x. Проблема в том, что софт проприетарный, ставится из пакетов. Исходников для него, чтобы попытаться скомпилироваться с 4.6.2, нет. Соответственно нет возможности изучить вопрос о совместимости этого софта и старой библиотеки.

Если сделать objdump любого бинарника, использующего Qt, то в разделе Dynamic Section будут записи библиотек без указания версий... Типа:

...
NEEDED     libQtGui.so.4
...

Поэтому, я так понимаю, разведение одноименных библиотек с разными версиями по разным папкам не поможет? Это были мысли вслух Спасибо...

vitalyisaev2
()

Как узнать username или uid по IP удалённого хоста?

Форум — Admin

Здравствуйте.

У нас сеть состоит из множества тонких клиентов с файловой системой read only. Пользователи работают на виртуальных машинах. Аутентификация двойная - сначала на тонком клиенте, затем в системе виртуализации. IP статические. ОС - RHEL 6.4. Задача - отображать IP тонких клиентов в username залогинившегося пользователя и наоборот. И периодически обновлять матрицу соответствия.

Есть некоторые идеи...

1. Попытаться заставить терминальный сервер (раздаёт образы ОС и поддерживает DHCP) вести логи с указанием username/uid. Написать демон, который будет отслеживать обновление лога и обновлять матрицу.

2. Смонтировать образ OC так, чтобы на все клиенты ушёл один и тот же публичный ключ, затем опять же написать демон, который будет заходит по SSH на все клиенты и там вызывать who.

3. Периодически опрашивать клиенты по SNMP. Якобы версия SNMPv3 позволяет запросить username (или это не тот username? :)

Как обычно, хотелось бы выбрать наименее трудоёмкий путь. Из языков лучше Python, менее предпочтительны C++, bash. Спасибо.

 , ,

vitalyisaev2
()

gtk_message_dialog: некорректное закрытие

Форум — Development

Здравствуйте! Ниже приведён фрагмент кода, выводящего окошко gtk_message_dialog:

#include <gtk/gtk.h>

int main(int argc, char** argv)
{
  gtk_init(&argc, &argv);

  GtkWidget* dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, 
                                     GTK_MESSAGE_ERROR, 
                                     GTK_BUTTONS_CLOSE, 
                                     "Error loading file", NULL);
  g_signal_connect(dialog, "response", G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(GTK_WIDGET(dialog));

  gtk_main();
  gtk_widget_destroy(dialog);

  return 0;
}

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

Gtk-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed
Ошибка не исчезает при попытке повесить ещё один обработчик типа
g_signal_connect(dialog, "destroy", G_CALLBACK(gtk_main_quit), NULL);

Как сделать корректное закрытие по крестику?

vitalyisaev2
()

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