LINUX.ORG.RU

Сообщения DRVTiny

 

HAProxy как способ общения с SSL-сервером не-SSL дружественным клиентам?

Форум — Admin

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

Хочу вроде бы простую вещь: чтобы haproxy:

1) Создал SSL-туннель с удалённым сервером, предоставляющим «услугу» (в данном случае - LDAP)

2) Клиенты подключались бы к HAProxy без шифрования, а уже он общался бы с сервером через SSL

С учётом того, что клиенты на самом деле на том же localhost'е, что и haproxy - секьюрность явно не страдает.

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

Как быть? Где описана именно такая, stunnel-подобная конфигурация haproxy?

Спасибо!

Solved:

global
	log	127.0.0.1 local4
	pidfile	/var/run/haproxy/pidfile
	daemon
	stats   socket /var/lib/haproxy/stats
	ssl-server-verify none	
defaults
    	mode tcp
	log global
    	timeout connect 5000ms
    	timeout client 50000ms
    	timeout server 50000ms
frontend FE_ldap
	bind 0.0.0.0:389
	option tcplog
	default_backend BE_ldaps
backend BE_ldaps
	option ssl-hello-chk
	option ldap-check
	option tcpka
	server ldap01 remote.server1.com:636 ssl verify none crt /etc/ssl/certs/thisServer_cert_and_privKey_here.pem check check-ssl fall 1 rise 1 inter 2s
	server ldap02 remote.server2.com:636 ssl verify none crt /etc/ssl/certs/thisServer_cert_and_privKey_here.pem check check-ssl fall 1 rise 1 inter 2s backup

 , ,

DRVTiny
()

Classic Perl-style функция для разыменования неизвестной ссылки в список

Форум — Development

Когда в очередной раз нонадобилось написать что-то вроде «если пользователь передал ссылку на список, то раскрыть в список, если ссылку на хеш - раскрыть в хеш, иначе - вернуть пустой список» - меня внутренне передёрнуло от 100500-й уродливой конструкции с вложенными iif'ами (которые «condition?valIfTrue:valIfFalse») - и я накатал вот это.

Понимаю, что говнокод, но, блин, мне он кажется дико симпатичным :)

sub deref2list {
 ({'ARRAY'=>sub{ @{$_[0]} },'HASH'=>sub { %{$_[0]} } }->{ref $_[0]} || sub {()})->($_[0]) 
}

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

Как-то так:

my $l=[
    {"e"=>"Estonia","f"=>"Finland"},
    ["g"=>"Gvinea-Bissau","h"=>"Holland"],
    "Moonland",
    sub { "MGIMO forever" }
]; 
my %h=("a"=>"Angola",map deref2list($_), @{$l});

 ,

DRVTiny
()

Оффлайн-курсы по R

Форум — Development

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

Спасибо!

 ,

DRVTiny
()

Динамически форма для ввода иерархических данных

Форум — Web-development

Вкратце задача в том, что набить иерархическую структуру данных через обычные «юзер-понятные» формы

Изначально должна быть всего одна кнопка: «Добавить Банк»

При нажатии на «Добавить банк» под кнопкой должна появляться форма «Банка» с именем оного и кнопкой «Добавить площадку».

По нажатию на «Добавить площадку» внутри формы банка должна появиться формы для заполнения свойств площадки, на которой среди прочих будет и кнопка «Убрать площадку».

И т.д.

Т.е. суть в том, что формы: а) должны добавляться динамически; б) должны быть вложенными друг в друга (внутри формы банка можно добавить 10 площадок, в каждой из которых по 3 канала, например).

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

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

Спасибо!

 ,

DRVTiny
()

DBIx::Threaded - кто-нибудь пробовал?

Форум — Development

Собственно, весь вопрос в заголовке.

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

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

Посмотрел на github'е примеры чужого кода с использованием этого модуля - ничего не путного нашёл (просто растиражированный сам этот модуль с его тестовым примером).

При этом сам разработчик, Dean Arnold, явно заслуживает доверия: несколько заумный товарищ, но вещи делает весьма впечатляющие (судя по github'у и беглому гуглению).

В общем, если кто-то имеет опыт работы с данным модулем или знает тех, кто имеет - прошу сообщить координаты себя или знающих людей :)

 , multithreaded,

DRVTiny
()

Скелетон ОО-класса, прячущего данные и автоподгружающего методы

Форум — Development

Раньше писал с использованием Moose, а давеча решил попробовать написать скелет работоспособного класса на чистом Perl.

Получилось так:

use v5.14.1;
use utf8;
use strict;
package FRC::skel;
use Carp qw(croak);
use Data::Dumper;
our $AUTOLOAD;

sub new {
  my ($slfClass, %settings)=@_;
  my %privArea;
  
  my %attrs=(
    'name'=>undef,
  );
  
  sub attrUniAccessor {
    my ($attrName,$attrValue)=@_;
    say scalar($attrValue?'Set':'Get')." $attrName ".scalar($attrValue?'to value: '.$attrValue:'value');
    return undef unless exists($attrs{$attrName});
    my $hndlAttr=$attrs{$attrName};
    unless (ref($hndlAttr) eq 'HASH') {
      if ($attrValue) {
        return $privArea{$attrName}=$attrValue
      } else {
        return $privArea{$attrName}
      }
    } else {
      if ($attrValue) {
        return exists($hndlAttr->{'set'})?$hndlAttr->{'set'}->($attrValue):$privArea{$attrName}=$attrValue
      } else {
        return exists($hndlAttr->{'get'})?$hndlAttr->{'get'}->():$privArea{$attrName}
      }
    }
  }
  
  my (%methods, %cacheMethods);
  %methods=(
    'checkMethodExists'=>sub {
      my $method=shift;
      return [0, $methods{$method}] if exists($methods{$method});
      return [1, \&attrUniAccessor] if exists($attrs{$method});
      undef
    },
    'getMeOut'=>sub {
      say 'Get me out called!';
    },
    'DESTROY'=> sub {
      %methods=();
      %attrs=();
      say 'Ohh... You killed me :(';      
    }
  );
  
  my $obj=bless sub {
    my ($method,@pars)=@_;
    $method=~s%^.*::(.+?)$%$1%;
    printf "You called method %s with [%s]\n", $method, join(','=>@pars);
    return $methods{'checkMethodExists'}->(($pars[0]=~m/(?:^.+::)?(.+)$/)[0]) if $method eq 'checkMethodExists';
    croak "No such method: $method" unless my $realProc=$cacheMethods{$method} || do { $cacheMethods{$method}=$methods{'checkMethodExists'}->($method) };
    $realProc->[1]->(($realProc->[0]?$method:()),@pars);
  };
  while (my ($a,$v)=each %settings) {
    $obj->($a,$v);
  }
  return $obj;
}

sub AUTOLOAD {
  my ($slf)=@_;
  say "You attempted to do: $AUTOLOAD";
  no strict 'refs';
  my $method=$AUTOLOAD;  
  croak sprintf("No such method %s in package %s\n", $method, ref($slf))
   unless $method=~m/::(?:checkMethodExists|DESTROY)$/ or $slf->('checkMethodExists',$method);
  *{$method}=sub { my $slf=shift; $slf->($method,@_) };
  $method->(@_);
}

1;

Вывод «приложения», использующего этот класс, выглядит вот так (для примера)

You called method name with [Eihta Hamminess]
Set name to value: Eihta Hamminess
You attempted to do: FRC::skel::getMeOut
You called method checkMethodExists with [FRC::skel::getMeOut]
You called method getMeOut with []
Get me out called!
You attempted to do: FRC::skel::name
You called method checkMethodExists with [FRC::skel::name]
You called method name with []
Get name value
Eihta Hamminess
You called method getMeOut with []
Get me out called!
You called method name with [Kulvargia Zidatlis]
Set name to value: Kulvargia Zidatlis
You called method name with []
Get name value
My new name is: Kulvargia Zidatlis
You attempted to do: FRC::skel::DESTROY
You called method DESTROY with []
Ohh... You killed me :(

Собственно, от использования замыкания в качестве «сырья» для производства объекта отказываться точно не буду, от полной изоляции всех данных объекта, недоступности их для произвольной модификации извне - тоже.

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

P.S. pastebin.com залочен на работе, так что прошу прощения за эту адскую скатерть прямо в посте.

 ,

DRVTiny
()

Внешняя проверка веб-сайтов: есть ли сервис с поддержкой ssl client certificate?

Форум — Admin

Собственно, нужно проверять доступность веб-портала, закрытого от посторонних глаз HTTP-авторизацией по клиентскому SSL-сертификату.

Обыскал и опросил уже множество провайдеров данной немудрёной услуги - ни один почему-то не предполагает даже о том, что сайт их заказчиков может «не пустить» проверяющих в случае, если те не предоставят на этапе SSL-рукопожатия валидный сертификат. Серверный сертификат проверяют все. А вот предоставлять при этом правильный клиентский сертификат - не умеет никто.

Отсюда вопрос: есть ли «enterprise-ready» сервисы проверки веб-сайтов из множества локаций (обязательно российских), которые умеют работать с предоставленным заказчиком клиентским сертификатом SSL?

 ,

DRVTiny
()

Можно ли создать рекурсивную анонимную функцию?

Форум — Development

Речь не о том, о чём вы подумали.

Нужно вызывать безымянную/анонимную функцию внутри себя самой, при этом не сохраняя её ни в каких переменных.

Это же Perl, Luke, должна быть такая фича.

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

Анонимы на ЛОРе должны знать ;)

 , ,

DRVTiny
()

За какой дефолтный Shell в любимом дистрибутиве Linux проголосовали бы вы?

Голосования — Голосования
  1. BASH: Только BASH! 886 (66%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. ZSH: Почувствуй силу! А ещё он кофе варит по утрам... 269 (20%)

    *************************************************************************************************

  3. "Просто SH": Он очень стандартный, пусть это и безликий симлинк на something 47 (3%)

    ****************

  4. Да мне бы интерпретатор любимого ЯП в качестве дефолта 42 (3%)

    ***************

  5. Другое, которое в комментариях 38 (3%)

    *************

  6. T?CSH: Олдскул и вообще BSD рулят 19 (1%)

    ******

  7. (D)ASH (Busybox): Легковесность наше всё 19 (1%)

    ******

  8. PowerShell: Это когда любимый дистрибутив - CygWin 16 (1%)

    *****

  9. KSH: Самобытный, маленький, быстрый и удобный 8 (1%)

    **

Всего голосов: 1344

 , , , ,

DRVTiny
()

А есть ли «браузер внутри браузера» на JavaScript?

Форум — Talks

На JavaScript даже «операционные системы» пишут, так что наверное должен быть и «браузер внутри браузера». Я хотел бы развернуть у себя дома на белом IP-шнике Apache, закинуть туда исходники «браузера внутри браузера» - и заходить туда из особо анально огороженных мест. Конечно, придётся ограничить scope IP-шников, но это несложно. Так вот, есть ли такое чудесное web2.0-ное приложение как «браузер на JavaScript»?

Спасибо!

 ,

DRVTiny
()

Простой diff есть ли в Ansible? (сравнить local и remote файлы)

Форум — Admin

Нужно чтобы ansible:

  • Получил md5sum локального файла
  • Получил md5sum файла на удалённой системе
  • Сравнил их
  • Установил по результатам сравнения логическую переменную

    Не ахти какая сложная работа для столь мощного инструмента, ведь в результате copy-то он узнаёт, изменился файл или нет. Но дело в том, что мне не нужно ничего копировать, мне только сравнить нужно - и всё!

    Тем не менее, не нашёл я такого. Должна быть diff, ан нету diff'а. Пичаль...

    Что делать, как быть?

 

DRVTiny
()

Samba4: Великолепно, а где клиент?

Форум — Talks

Вопрос до прямолинейности глупый: Samba4 - контроллер домена, очень облегчает построение PDC «за пару сотен кликов по клавиатуре».

ОК. А... Где в Samba4 такая же чудесная клиентская часть? Чтоб пару команд вбил - и вуаля, работает!

По моему скромному ощущению, основанному на собственном же опыте, проект Samba при включении в чужой домен Windows (не ошибусь, если скажё, что это 99% случаев использования Samba в *nix) предлагает нам всё те же пляски с бубном, которые были в 3-й версии.

Да полноте, а не 3-ю ли версию Samba предлагает для включения компа в домен?

Ой да, кажется, то самое глючное бажное г-но и предлагает. То, которое меняло своё поведение в домене даже от простых обновлений. Сегодня работает - завтра обновил дистрибутив и не работает. Великолепно!

В общем, вопрос риторический: никому не кажется, что проект Samba идёт нога в ногу со временем? Когда вы последний раз видели людей, затюканных жизнью и начальством, отчаянно из последних сил пытающихся породнить что-нибудь вроде Exchange, Dynamics CRM или тем паче Sharepoint с PDC на Samba4? Ну да, пара кликов, всё чудесно... пока речь не идёт о софте, глубоко интегрированном с инфраструктурой Microsoft. А как давно вы видели людей, пытающихся составить магический ребус smb.conf, позволяющий открыть Linux'у дверь в мир лесистых трастовых доменов Windows?

Так почему Samba забила на клиентскую часть и пилит какой-то говно-PDC, который даром никому не нужен?

 

DRVTiny
()

Недоумения тред: таблица партиционирована, но файл frm всего один!

Форум — Admin

ОТВЕТ: https://www.packtpub.com/packtlib/book/Application-Development/9781783981540/...

Собственно, сделал кучку alter table'ов, данные в таблице разлились по партициям, что видно в information_schema.partitions. Но при этом файл данных для этой таблицы есть только один (всегда было так, что для каждой партиции - свой файл).

Собственно, почему могло так статься?

 CREATE TABLE `history` (
  `itemid` bigint(20) unsigned NOT NULL,
  `clock` int(11) NOT NULL DEFAULT '0',
  `value` double(16,4) NOT NULL DEFAULT '0.0000',
  `ns` int(11) NOT NULL DEFAULT '0',
  KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p2016_02_21 VALUES LESS THAN (1456002000) ENGINE = InnoDB,
 PARTITION p2016_02_22 VALUES LESS THAN (1456174800) ENGINE = InnoDB,
 PARTITION p2016_02_23 VALUES LESS THAN (1456261200) ENGINE = InnoDB,
 PARTITION p2016_02_24 VALUES LESS THAN (1456347600) ENGINE = InnoDB,
 PARTITION p2016_02_25 VALUES LESS THAN (1456434000) ENGINE = InnoDB,
 PARTITION p2016_02_26 VALUES LESS THAN (1456520400) ENGINE = InnoDB,
 PARTITION p2016_02_27 VALUES LESS THAN (1456606800) ENGINE = InnoDB,
 PARTITION p2016_02_28 VALUES LESS THAN (1456693200) ENGINE = InnoDB,
 PARTITION p2016_02_29 VALUES LESS THAN (1456779600) ENGINE = InnoDB,
 PARTITION p2016_03_01 VALUES LESS THAN (1456866000) ENGINE = InnoDB,
 PARTITION p2016_03_02 VALUES LESS THAN (1456952400) ENGINE = InnoDB,
 PARTITION p2016_03_03 VALUES LESS THAN (1457038800) ENGINE = InnoDB,
 PARTITION p2016_03_04 VALUES LESS THAN (1457125200) ENGINE = InnoDB,
 PARTITION p2016_03_05 VALUES LESS THAN (1457211600) ENGINE = InnoDB) */

И при этом:

$ find /zbxdb/data/zabbix/ -name 'history*'
/zbxdb/data/zabbix/history.frm
/zbxdb/data/zabbix/history_uint.frm
/zbxdb/data/zabbix/history_str.frm
/zbxdb/data/zabbix/history_log.frm
/zbxdb/data/zabbix/history_text.frm
/zbxdb/data/zabbix/history.par
/zbxdb/data/zabbix/history_log.par
/zbxdb/data/zabbix/history_str.par
/zbxdb/data/zabbix/history_text.par
/zbxdb/data/zabbix/history_uint.par

 ,

DRVTiny
()

ZenOSS Core 5: какова реально минимальная конфигурация?

Форум — Admin

Коллеги!

У руководства возникла потребность увидеть Zenoss.

Ресурсов мало, всё на виртуалках.

Дефолтный Appliance 5-й версии настроен на 250Гб диска и 32Гб ОЗУ, что, мягко говоря, жирно.

Почитав документацию официальную и доки от весьма уважаемого в сообществе зеносевиков разработчика скрипта авторазвёртывания, узнал, что помимо кучи странных вещей наподобие XFS для корневого раздела и BTRFS с docker'ом вкупе, оно якобы всё равно хочет минимум 95Гб диска и 10Гб ОЗУ.

Внимание вопрос 1: Кто-нибудь ставил Zenoss Core 5?

Внимание вопрос 2: А какая у вас была при этом конфигурация?

Спасибо!

 , демостенд,

DRVTiny
()

Самый «правильный» join на BASH?

Форум — Development

Довольно часто возникает задача вывести все элементы массива, вставив кастомный разделитель.

Решение в духе:

del=':'
join=${arr[@]}
join=${join//[[:space:]]/$del}

- работает только применительно к массивам, в которых почему-либо (внезапно!) элементы не содержат пробелов.

Решение с перебором элементов циклом:

del=':'
unset join
for ((i=0; i<${#arr[@]}; i++)); do
 join+=${join:+$del}${arr[i]}
done
- после Perl видится громоздким.

Может, я что-то упустил и есть некий аналог IFS для разделения элементов при выводе массивов операцией ${arr[@]} ??

 

DRVTiny
()

Поиск по массиву и x86-инструкция scas. Хочу scas!

Форум — Development

Собственно, в этом примере:

void main () {
	short int a[5]={12,15,1,17,248};
	short int i=0;
	short int b=17;
	for (;i<(sizeof a/sizeof *a);i++) {
		if (a[i]==b) printf("Hello, %d\n",i);
	}
}

GCC упорно не хочет генерировать из этого самый простой и логичный в данном случае машинный код -

repne scasw

Генерируется вместо этого цикл с явным cmp.

Почему и как сделать так, чтобы GCC вспомнил о существовании scas с префиксом repne (повторять пока не установлен zero flag) при поиске по массиву?

Спасибо!

 , ,

DRVTiny
()

Популярность языка R и уровень развития государства/общества

Форум — Talks

У меня есть смутное подозрение, что уровень технической и социальной продвинутости государства прямо коррелирует с уровнем популярности R. Это связано прежде всего с той областью, в которой наиболее интенсивно используется R: математическая статистика. То есть уровень популярности R в первую очередь должен бы коррелировать со степенью «участия» науки в жизни людей той или иной страны, с тем, насколько «интеллектуально ёмкой» явялется её продукция. Ну и в конечном итоге - с индексом развития человека.

Есть ли где-нибудь инфографика на тему популярности R в разных странах мира?

 nowebshit,

DRVTiny
()

Почему df не видит /home в полном выводе?

Форум — Desktop

В полном выводе df нет раздела /home:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7       976M  581M  329M  64% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev             10M  4,0K   10M   1% /dev
none            512M  1,2M  511M   1% /tmp
tmpfs           789M  1,8M  788M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            2,0G     0  2,0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda9       3,1G  1,4G  1,7G  45% /var
/dev/sda10       20G  3,6G   16G  19% /opt
/home/u01       189G  127G   63G  68% /u01
/dev/sda2       242M  100M  131M  44% /boot
/dev/sda8        20G   13G  6,5G  66% /usr
//server/ds     1,6T  762G  839G  48% /home/drvtiny/Shares/Fileserver/ds
//server/trash  2,3T  1,3T  1,1T  55% /home/drvtiny/Shares/Fileserver/trash
shmfs           4,0G  610M  3,5G  15% /dev/shm

Зато можно посмотреть занятое место для /home отдельно:

$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda11      189G  127G   63G  68% /home

Исчезновение /homе из полного вывода не связано с mtab:

$ fgrep sda11 /etc/mtab
/dev/sda11 /home ext4 rw,nodev,noatime 0 0
$ mount | fgrep sda11
/dev/sda11 on /home type ext4 (rw,nodev,noatime)

Разумеется, /home монтируется из fstab:

# /home was on /dev/sda11 during installation
UUID=1f2659fe-8a1d-4035-9d0d-a05d5771b1c5 /home           ext4    noatime,nodev        0       2

И с этим UUID всё ОК - это действительно sda11:

$ blkid -U 1f2659fe-8a1d-4035-9d0d-a05d5771b1c5
/dev/sda11

Уже не первый раз замечаю такой глюк: в полном выводе df видит не все смонтированные разделы.

С чем это может быть связано?

 

DRVTiny
()

Самый лаконичный способ сообщить об ошибке в Mojo?

Форум — Web-development

Как сделать это?

Необходимо вернуть json с кодом и текстом ошибки, при этом завершив всю обработку запроса.

Например, что-то вроде этого:

my %Erc2HTTP=(
  101=>404,
  102=>403,
  103=>401,
  104=>404,
);
$someObj->exception(message=>'No such meteostation', code=>101);
# Обработчик исключения
sub hndlException {
 my ($c,%pars)=@_;
 $c->render(
   json=>{
     'error'=>$pars{'message'}
     'erc'=>$pars{'code'} 
   },
   code=>$Erc2HTTP{$pars{'code'}},
 );
 $c->finish();
}
В результате, после $c->finish вся обработка запроса будет завершена, никакие after_dispatch'и вызываться не будут.

Это возможно в Mojolicious?

 , ,

DRVTiny
()

Какой аккаунт использует Winbind для получения доменной информации?

Форум — Admin

Вопрос возник в связи с практически неработающим назначением прав на вложенные группы: несмотря на прописаные

 
winbind expand groups = 255
winbind nested groups = yes

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

Появились сомнения в том, что машинный аккаунт «Workstation$», который, как я предполагаю, как раз-таки и юзает winbind, почему-либо не имеет полномочий на чтение содержимого пользовательских групп.

Какой аккаунт юзает Samba для чтения всякой полезной информации из домена Active Directory и как бы дать этому аккаунту побольше полномочий?

Спасибо!

 ,

DRVTiny
()

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