M$-фобия доведена до конца ? Однако...

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 28.11.2013 18:10:38

debi12345 писал(а):1) на требование "А ну-ка включите машину и покажите вашу ось!" загружается Линукс

Либо у Вас еще не было проверок, либо в Узбекистане проверяют только лохи.

При проверке не сколько на ось смотрят, сколько на установленный софт, дистры. Очень любят сейчас смотреть виртуальные машины. Так как на каждый экземпляр ВМ с виндой нужно покупать отдельную лицензию. Например, у Вас на компе стоит 3 ВМ для тестирования, вам нужно купить на каждую по лицензии. Поэтому смотрят, сколько там образов, запускают их. Юзера в момент проверки обычно отстраняют, потом обычно еще изымают диски, флешки, СД и т.п. Если есть дистры без лицензий, то их тоже включат.

За Вашу схему якобы лицензионного очищения Вас банально посадят, т.к. Ваш босс всю вину на Вас свалит, т.к. настолько тонко извратиться он бы не смог приказать Вам (мозгов бы не хватило), а Вы не подавали заявки на приобретение софта. Короче, Деби сносите всю эту кухню, иначе до конца дней будете жить на нарах.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 28.11.2013 18:15:20

то умение законнектиться с БД ни коем образом не является показателем админских знаний в части СУБД. Основные задачи админа СУБД - это повышение производительности,

Любой кто сталкивался снизким перфомасом БД, рано или поздно приходит к настройке БД на перформанс и оптимизации индексов. Сетевым амдинам эта "задача" - раз плюнуть :) И стлакиваются они с ней очень рано - потому что сетевые утиллиты пишут/читают в БД как правило очень часто, по сути в реал-тайме с сетевой задачей. Уж поверьте :)

архивирование, восстановление после аварии сервака, восстановление данных после поднятия с дубликата,

Шелл-скрипты по шедуллеру. Написал, организовал запуск и забыл...

Добавлено спустя 2 минуты 40 секунд:
Очень любят сейчас смотреть виртуальные машины.

??? В натуре что ли ?
Кто-то может подтвердить, что такое само-инициативное вылизывание задницs M$ - не только в Красноярске ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 28.11.2013 18:19:32

debi12345 писал(а):Это из-за трансляции DirectX => OpenGL. В реальнсти задевает только игры

Не только игры, но и САПРы, а также многое другое. Под винду реально быстрее все графические дрова, кодеки и прочее.
debi12345 писал(а):Найти это внутри огромного VHD-файла (образа вирт. машины) может только человек "в курсе" (нужно для начала уметь примонтирвать эти файлы). Те кто "в курсе" у всех проверяющих с тобой как с коллегой как правило заодно - и типа "не замечают"

У Вас реально лохи проверяют. Файлы VHD первые под подозрением, а если там винда, то Вам посчитают каждый экземпляр файла VHD, в т.ч. все копии. У нас проверяющие знают, что проверять. Если Вы договорились или Вы неприкасаемый, то к Вам и не придут. А если уже пришли, то Вы не отмажитесь. Попытки защититься с зашифрованными разделами вообще однозначно против Вас поставят, они за Вас "расшифруют" так, что там и супердорогой платный софт найдут, и детское порно, и террористические инструкции. С таким разделом можно на пожизненное налететь. Потом доказывай, что было на самом деле.

Добавлено спустя 4 минуты 38 секунд:
debi12345 писал(а):CITRIX-услугу предоставляем не мы - мы только ее клиенты Но доводили "солюшен" до ума вместе (ставил у себя 2-й осью "win-2003" + "ферму", и..).

Так лицензия должна быть не на серваке, а у клиента!!! Не путайте ключи активации, и юридический документ (лицензию). Владелец сервака должен иметь только серверные лицензии, а клиентские лицензии должны быть у клиентов. Если Вы арендуете услугу, то должны и арендовать реально существующую клиентскую лицензию, либо иметь свою лицензию. Так что Вы от незнания этого тонкого дела по лицензированию вообще в группе риска. Вас однозначно посадят и еще огромный штраф за "win-2003" + "ферму".

Добавлено спустя 2 минуты:
debi12345 писал(а):На Востоке так бороться с конкурентами и непослушными не принято.

На востоке просто сразу отрубают голову. Конечно это проще.

Добавлено спустя 7 минут 1 секунду:
debi12345 писал(а):Кто-то может подтвердить, что такое само-инициативное вылизывание задницs M$ - не только в Красноярске ?

На МС проверяющим наплевать, они их обычно не ставят в курс дела. Вы видите в новостях сообщения про это? Нет, этого, потому что решается на другом уровне.
Если ты работаешь и не выпендриваешься, не перебегаешь другим дорогу, то никто тебя не проверяет. Если ты нарвался, то тебя прессуют по полной, когда насчитают в "особо крупном", тогда ты становишься сговорчивым. Меня лично не разу не проверяли, но приходилось помогать людям, выручать их из ситуаций.

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

Добавлено спустя 7 минут 15 секунд:
debi12345 писал(а):Шелл-скрипты по шедуллеру. Написал, организовал запуск и забыл...

А как это связано с архивированием и восстановлением? Примитивный бэкап - это просто. А онлайновские копии, распределенные по удаленным офисам?

Если работаете с бэкапом. Ну восстановили вчерашнюю копию. А кто и как будет восстанавливать данные сегодняшнего дня? Причем так, чтобы общий простой был не более 5-15 минут? Посмотрю, как Вы простыми скриптами это решите.

У хорошего админа, настоящие задачи, ответственная работа, высокий заработок и главное есть репутация. У Вас там в Узбекистане, какие-то детские игры.
debi12345 писал(а):Любой кто сталкивался снизким перфомасом БД, рано или поздно приходит к настройке БД на перформанс и оптимизации индексов. Сетевым амдинам эта "задача" - раз плюнуть И стлакиваются они с ней очень рано - потому что сетевые утиллиты пишут/читают в БД как правило очень часто, по сути в реал-тайме с сетевой задачей. Уж поверьте

В сетевых утилитах примитивные БД, с примитивной структурой. Там не нужно мозгов, чтобы оптимизировать индексы. В реальных задачах, где данные не такие простые, там приходится реально думать. Я, лично это не умею делать, но знаю тех, кто на этом живет, и живет очень хорошо.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 28.11.2013 18:45:56

Если Вы арендуете услугу, то должны и арендовать реально существующую клиентскую лицензию, либо иметь свою лицензию

Мы платим за аренду. Клиент у нас линуксовый. Не наша забота что и сколько потратил арендодатель. Да где это видано чтобы арендатор вдавался в эти вопросы ?! Он вообще не обязан знать что такое CITRIX :)

Добавлено спустя 3 минуты 14 секунд:
они за Вас "расшифруют" так, что там и супердорогой платный софт найдут, и детское порно, и террористические инструкции. С таким разделом можно на пожизненное налететь. Потом доказывай, что было на самом деле.

Ну, такое можно "найти" и на линуксовых разделах :) Даже легче в чем в VHD-файлах.

Добавлено спустя 5 минут 58 секунд:
Примитивный бэкап - это просто. А онлайновские копии, распределенные по удаленным офисам?

Ясен перед что с рассылкой :) Через Curlftpfs, SCP,...
Мы применям Curlftpfs (монтирование FTP-каталогов как обычной файловой системы)

Добавлено спустя 3 минуты 50 секунд:
Причем так, чтобы общий простой был не более 5-15 минут?

Зависит от мощи сервака - нсколько быстро он "просадит" бэкап.

Посмотрю, как Вы простыми скриптами это решите.

Ими-то как раз таки безопаснее. Пожалуй только ими это и нужно делать. Иначе делая редко выполняемую операцию (БД "падает" нечасто) рискуешь что-нибудь забыть и напортачить :)

Добавлено спустя 6 минут 32 секунды:
У хорошего админа, настоящие задачи, ответственная работа, высокий заработок и главное есть репутация.

Синекура и понты :) И лапша на ушах начальства :)

Добавлено спустя 4 минуты 53 секунды:
Там не нужно мозгов, чтобы оптимизировать индексы. В реальных задачах, где данные не такие простые, там приходится реально думать. Я

Вы стали жертвой понтов. Хотя напрмер в PostgerSQL "волшебная" (админ ее ЗНАЕТ!) команда "EXPLAIN ALALYZE <query>" дает ВСЮ необходимую инфу, по которой даже ёжик сможет найти узкие места и оптимизировать индексы :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 28.11.2013 19:20:16

debi12345 писал(а):Мы платим за аренду. Клиент у нас линуксовый. Не наша забота что и сколько потратил арендодатель. Да где это видано чтобы арендатор вдавался в эти вопросы ?! Он вообще не обязан знать что такое CITRIX

Какая ОС на Вашем компе никого не волнует. Если Вы через терминальный сервер (любой, хоть от МС, хоть от цитрикса) заходите на МС сервер, то у Вас как у юзера, на руках должна быть лицензия, либо договор, который дает Вам право арендовать чужую лицензию.
Если Вы работаете по договору, то должны знать, что не каждое лицо, имеет право Вам сдавать в аренду лицензию от МС. Поэтому, у Вас скорее всего фиктивный договор, и Вас посадят не только за пиратское использование винды, но и за мошенничество в части договорной деятельности. Т.к. договор признают фиктивным, Вам впаяют уклонение от налогов, за счет создания заведомо фиктивных услуг. Короче на конфискацию имущества Вы тем самым уже заработали.
debi12345 писал(а):Ну, такое можно "найти" и на линуксовых разделах Даже легче в чем в VHD-файлах.

Да, могут найти. Да скорее всего и найдут, чтобы не умничали. Сегодня наша "система" дает нам возможность работать с пиратками, но не со всеми. 1С лучше купить легальную. А винду можно и не покупать. Но если ты попер на систему, то тебя накроют. Если ты наивно думаешь, что сможешь послать систему на 3 буквы, будучи полным лохом, то тебя накажут еще за то, что строил из себя умного.

Добавлено спустя 13 минут 57 секунд:
debi12345 писал(а):Зависит от мощи сервака - нсколько быстро он "просадит" бэкап.

15 минут не на развертывание бэкапа, а на восстановление данных.
Вот Вы делаете бэкап. Как часто? Неужели каждые 5 минут?

Например, Вы делаете бэкап раз в сутки. В 15 часов у Вас произошла авария. В 15-15 Вы должны развернуть вчерашний бэкап, и в него внести все данные, которые не попали в бэкап за текущие сутки с 9-00 до 15-00. Если успел - герой (за это ты получаешь свои 2-3 штуки ежемесячно). Не успел - штрафняк тебе в 5 штук баксов, а лучше в 10 штук.
debi12345 писал(а):Ясен перед что с рассылкой Через Curlftpfs, SCP,...
Мы применям Curlftpfs (монтирование FTP-каталогов как обычной файловой системы)

Вы же не сможете делать бэкапы после каждой транзакции. Поэтому нужно использовать репликации в резервные и удаленные БД. Если с локальной резервной репликацией проблем нет, то с удаленной уже сложнее. база может быть большой (например 1 ТБ), по сети ее не вытянешь обратно. Да и бэкап по сети не сбросишь.

В простых ситуациях админ не нужен. В сложных ситуациях админ нужен, и нужен хороший админ.
debi12345 писал(а):Вы стали жертвой понтов. Хотя напрмер в PostgerSQL "волшебная" (админ ее ЗНАЕТ!) команда "EXPLAIN ALALYZE <query>" дает ВСЮ необходимую инфу, по которой даже ёжик сможет найти узкие места и оптимизировать индексы

Вы судя по всему просто не работали со сложными БД и с большими объемами информации. Да и наверное сложных запросов не видели.

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

Добавлено спустя 5 минут 8 секунд:
debi12345 писал(а):Синекура и понты И лапша на ушах начальства

Какая еще лапша. Хороший админ никогда не сидит в офисе, он вообще ничего не делает для Вас. Он приходит в офис только за зарплатой. Чем меньше админ работает, тем больше он получает. Хороший админ работает, как страховая компания, пока все хорошо, Вы платите ему, как только пошли косяки он платит Вам. Как он обеспечивает надежность - никого не волнует. Даже если админ отмазался от штрафа раз/другой, то на третий раз ему не простят.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 28.11.2013 20:08:19

Вот Вы делаете бэкап. Как часто? Неужели каждые 5 минут?

Такой интервал не забэкапишь - поэтому для этих используется рантаймовая репликация (стримовое копирование WAL-логов) с авто-переключением на нового (исправного) мастера в кластере (вылетевший мастер в это время "чинится"). У нас технология работы (не нужная быстрая "проводка" услуг) позволяет ограничить гранулярность одними сутками (удаленные машины шлют данные для репликации раз в сутки) и поэтому подобная кластеризация не используется. Есть и другие варианты репликации - SQL-запросами по инициативе триггеров...

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

Все элементарно читается :) Индексировать можно даже значения функций - если функция долго вычисляется на множестве записей. Из своего опыта, "обязанности" БД-админа - самые легкие :)

Добавлено спустя 6 минут 57 секунд:
то с удаленной уже сложнее. база может быть большой (например 1 ТБ), по сети ее не вытянешь обратно.

Она передает только те WAL-логи (или результаты SQL-запросов), которые не просажены в восстановленную БД. Каждая серьезная БД имеет для этого встроенные и легко настраиваемые средства.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 28.11.2013 20:21:35

debi12345 писал(а):Такой интервал не забэкапишь - поэтому для этих используется рантаймовая репликация (стримовое копирование WAL-логов) с авто-переключением на нового (исправного) мастера в кластере (вылетевший мастер в это время "чинится"). У нас технология работы (не нужная быстрая "проводка" услуг) позволяет ограничить гранулярность одними сутками (удаленные машины шлют данные для репликации раз в сутки) и поэтому подобная кластеризация не используется. Есть и другие варианты репликации - SQL-запросами по инициативе триггеров...

Да, из этой оперы. Инфраструктуры бывают простыми, бывают сложными. Да и сам вопрос, что мы резервируем? Сервак? Сеть (КИВС)? Офис? Отсюда вытекает и технология резервирования и восстановления. Например, некоторые просят обеспечить такое резервирование, чтобы сохранить работоспособность конторы, даже если пришли проверяющие и изъяли все сервера и компы. Конечно тут восстановление не за 15 минут от начала проверки, а сразу после ее окончания (чтобы не нервировать проверяющих).
debi12345 писал(а):Все элементарно читается Индексировать можно даже значения функций - если функция долго вычисляется на множестве записей. Из своего опыта, "обязанности" БД-админа - самые легкие

Не упрощайте. Если Вы не видели сложного, то это еще не значит, что такого не бывает. Например, многократно вложенные запросы не так уж и легко оптимизировать, особенно если при эксплуатации произошло не ожидаемое разрастание некой части данных. Тут не только и не сколько индексы. Тут запросы приходится переписывать, взаимодействовать с разработчиками. Это по сути есть участие в доработке БД и прикладного софта к ней.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 28.11.2013 21:15:42

Не упрощайте. Если Вы не видели сложного, то это еще не значит, что такого не бывает. Например, многократно вложенные запросы не так уж и легко оптимизировать, особенно если при эксплуатации произошло не ожидаемое разрастание некой части данных.
Видел всякое :) Центральная БД у нас большая - и выборки к ней приходится писать неслабые. И репликация по триггерам пишет сразу в несколько таблиц. И блокировочки записей организовывать приходится. Видел даже как еще недавно полезный индекс при разрастании БД может резко затормозить выборки. Каким образом ? Инициируя интенсивный дисковый ввод-вывод. Пример такого плохого индекса - код оператора если таковых в базе несколько. Или код операции - и прочие со значениями равномерно распыленными по БД. Вообще БД - интересная область администрирования. И легкая по сравнению с прочими :)

Например, некоторые просят обеспечить такое резервирование, чтобы сохранить работоспособность конторы,

Ну это только если все данные хранить на серваке который реплицировать куда-нибудь на Кипр :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 29.11.2013 04:56:02

debi12345 писал(а):Ну это только если все данные хранить на серваке который реплицировать куда-нибудь на Кипр

Зачем на Кипр? Не путайте проверку (с изъятиями) в одном офисе со Сталинградской битвой. Речь не идет о том, что мы помогаем защитить каких-то знаменитых уголовников или политиканов. Речь идет о защите от банальных наездов.
Сохранить данные на резервном серваке где-то незаметно стоящем в другом офисе - это самое простое. Сложное - это быстрое развертывание резервной инфраструктуры, после того, как было изъята основная техника с головного офиса. Головной офис конечно восстанавливается не в полном объеме, т.к. запасные компы каждому сотруднику никто заранее не покупал, но если у кого есть личные ноуты, то они работают. Удаленные офисы работают как и не бывало. Не все так уж и сложно. Просто заранее продуманы сценарии возможных неисправностей, как технических (отказ железа), так и административные (изъятие).

Добавлено спустя 9 минут 13 секунд:
debi12345 писал(а):Вообще БД - интересная область администрирования. И легкая по сравнению с прочими

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

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

Сложность администрирования БД - это нужно понимать, как работает БД, и уметь разбираться в сложных (заковыристых) запросах. Системное понимание этого доступно далеко не каждому (нужен особый склад ума). Это сложнее, чем сетевое администрирование, где вообще очень редко встречаются сложные (комплексные) вопросы. В сетевом администрировании нужно банально запоминать отдельные команды, запоминать как делать конкретные задачи. Ума, как такового, вообще не надо, достаточно хорошей памяти.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 29.11.2013 08:18:31

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

Алекс, это несложно :) И легко поддается таймингу и отлдаке - в отличие от сетевого администрирования. А "заковыристые запросы" пишут как правило программисты,а не БД-админы. Админы как правило модифицируют тормозящие программерские запросы - с целью их оптимизации.

В сетевом администрировании нужно банально запоминать отдельные команды

И-за асинхронности (без ожидания эффекта) выполнения настроечных команд ( "поднятие" интерфейсов, DNS-серверов,..) и трудности налаживания синхронизации - крайне тяжело отлаживается.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 29.11.2013 08:28:46

debi12345 писал(а):Мы платим за аренду. Клиент у нас линуксовый. Не наша забота что и сколько потратил арендодатель. Да где это видано чтобы арендатор вдавался в эти вопросы ?! Он вообще не обязан знать что такое CITRIX

Еще важное дополнение. Возможно, что кому-то это поможет. В свое время была потребность изучения вопросов лицензирования.

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

Если Вы работаете с сессией на терминальном сервере, с БД на СУБД, с файлами на файловом сервере, вне зависимости от способа использования (прямо ли сидите за серваком с клавой и монитором, работаете ли в терминальной сессии, работаете ли по сети иным способом), Вы должны иметь лиценизии, как юзер. Лицензия таким образом - это допуск к использованию сервера.

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

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

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

Практика проверок показывает, что иногда (если заранее известно о проверке) можно скрыть информацию о доступе к терминальному серверу (удалили записи в клиентской программе и все). Особенно если такой сервер, располагается на сторонней площадке. Но практика говорит, что проверяющие поступают о другому. Они как и в классическом ментовском сериале, устраивают индивидуальные допросы юзеров. И там по классическому сценарию, тетеньке оператору говорится, что вот мол по информации ваших коллег (которых мы уже допросили) Вы работаете с сервером, который стоит аж 10 млн. руб., в должностной инструкции у Вас это не записано, и документов (лицензии) у Вас нет, то есть руководство не причем, вы мол самовольно нелегально используете дорогостоящее программное обеспечение. Поэтому мы вам выпишем штраф в 10 млн.руб., вас еще и арестуем, и посадим в тюрьму на 10 лет. Тетенька: ой, ай, как же так, я не знала, я ничего не понимаю. Следователь: ну я все понимаю, но и вы поймите, закон есть закон, и по закону вы должны сидеть в тюрьме. Тетенька: ой, ой, помогите ... Следователь: хорошо, тогда пишите подробно, какими программами и для каких целей вы пользуетесь на работе, описывайте каждый шаг, пишите, кто это вам настроил, к кому вы обращаетесь с вопросами. Имея потом пачку свидетельских показаний, ни админ, ни руководство уже не отмажется. И тот кто хитрее. Если директор умный, то он всю вину свалит на админа, мол я не писал ни одного распоряжения об установке всяких там платных серваков, мол это преступное самоуправство админа. Если админ заранее не подготовился, и никогда не писал служебок на руководство, где просил приобрести лицензии, и подробно описывал бы технологию использования и т.п., то вся вина ложится на админа, т.к. директор еще и взяточку положит, чтобы на него не падала тень. А админ, он же не такой богатый, у него нет денег, ни на взятку, ни на хорошего адвоката, вот и впухает по полной, отдает последнюю рубаху и залазит в кредиты, чтобы откупиться от обвинений.

Так что, Деби и прочие коллеги, будьте аккуратны, в играх с темой обхода лицензии. Руководство не будет вас отмазывать, если вы не родственник им.

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

Добавлено спустя 3 минуты 49 секунд:
debi12345 писал(а):И-за асинхронности (без ожидания эффекта) выполнения настроечных команд ( "поднятие" интерфейсов, DNS-серверов,..) и трудности налаживания синхронизации - крайне тяжело отлаживается.

Это как раз все очень просто, если работать правильно. Просто, если не методом тыка, а заренее знать, как и что делать.
debi12345 писал(а):А "заковыристые запросы" пишут как правило программисты,а не БД-админы. Админы как правило модифицируют тормозящие программерские запросы - с целью их оптимизации.

Чтобы переписать заковыристый запрос, админу нужно суметь его расшифровать. Видя код запроса нужно разгадать смысл запроса, т.к. доки по прикладному смыслу тех или иных запросов никогда нет. Это метод обратного анализа, когда глядя на код, нужно понять, что и для чего этот код предназначен. Это даже сложнее, чем работа программиста, это высший пилотаж.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 29.11.2013 08:52:35

Вот типичный утиллитный модуль для сетевого админинья :
Код: Выделить всё
#!/bin/sh

#========== importing constants ================

source /etc/network/settings/addresses

#========= STARTUP CODE  =======================

ipset create INET4MAC bitmap:ip,mac range $LAN_NET 2>/dev/null
ipset create INET4IP hash:ip  2>/dev/null
ipset create TASIXPRIO hash:net 2>/dev/null
ipset create TASIXREG hash:net 2>/dev/null
ipset create EXT hash:net  2>/dev/null
ipset create AVAST hash:net  2>/dev/null
ipset create ANTIVIR hash:net  2>/dev/null
ipset create TASIXN hash:net  2>/dev/null
ipset create DTN_NOTROUTED hash:net  2>/dev/null
ipset create PRIVATE hash:net,iface  2>/dev/null
## ipset list NODES 2>/dev/null || ipset create NODES hash:ip
ipset create BLOCKED_INET_SRC  hash:net  2>/dev/null
ipset create BLOCKED_TASIX_SRC hash:net  2>/dev/null
ipset create IP_TLG_SERVERS hash:ip  2>/dev/null
ipset create IP_TLG_LAN_CLIENTS hash:ip  2>/dev/null

#ipset create IP_TLG_LAN_TESTERS hash:net  2>/dev/null

#===========================

[ -n "$NETFLOW_COLLECTOR" ] && {
    modinfo ipt_NETFLOW 2>/dev/null >/dev/null || {
   modprobe ipt_NETFLOW destination=$NETFLOW_COLLECTOR
    }
    sysctl -w net.netflow.destination=$NETFLOW_COLLECTOR
}

NO_MARK=" -m state --state NEW-m connmark --mark 0 "

ENABLED_TASIX_SRC=" -m set ! --match-set BLOCKED_TASIX_SRC src"
ENABLED_INET_SRC="  -m set ! --match-set BLOCKED_INET_SRC  src"
ENABLED_EXT_SRC="$ENABLED_TASIX_SRC $ENABLED_INET_SRC"

function mark_cmd() {
    echo -n "-m connmark --mark 0 -j CONNMARK --set-mark $1"
}
function mark_cmd_ovr() {
    echo -n "-j CONNMARK --set-mark $1"
}

function new_mark_cmd() {
    echo -n "-m state --state NEW `mark_cmd $1`"
}
function new_mark_cmd_ovr() {
    echo -n "-m state --state NEW `mark_cmd_ovr $1`"
}

function new_est_mark_cmd() {
    echo -n "-m state --state NEW,ESTABLISHED `mark_cmd $1`"
}
function new_est_mark_cmd_ovr() {
    echo -n "-m state --state NEW,ESTABLISHED `mark_cmd_ovr $1`"
}

function new_dnat_cmd() {
    echo -n "-m state --state NEW -j DNAT --to-destination $1"
}

function local_saddrs() {
    echo -n "-m addrtype --src-type LOCAL"
}

function local_daddrs() {
    echo -n "-m addrtype --dst-type LOCAL"
}


function dmultiport() {
    local PORTS
    [ -n "$1" ] || return 1
    PORTS=
    for port in $1; do
   if [ -n "$PORTS" ]; then
       PORTS="$PORTS,$port"
   else
       PORTS="$port"
   fi
    done
    echo -n "-m multiport --dports $PORTS"
}

function if2realif(){
    # $1: название интерфейса
    # [$2]: in : вернуть IFB-интерфейс
    [ -n "$1" ] || return -1
    local real_if
    if [ "$2" == "in" ]; then
   if   [ "$1" == "$wan_if" ]; then
       real_if=$wan_in_if
   elif [ "$1" == "$lan_if" ]; then
       real_if=$lan_in_if
   elif [ "$1" == "$dtn_if" ]; then
       real_if=$dtn_in_if
   elif [ "$1" == "$dtn_old_if" ]; then
       real_if=$dtn_in_old_if
   elif [ "$1" == "$inet_if" ]; then
       real_if=$inet_in_if
        fi
    else
   real_if=$1
    fi
    echo $real_if
    return 0
}

function if2tcif(){
    # $1: название интерфейса
    # [$2]: in : вернуть IFB-интерфейс
    [ -n "$1" ] || return -1
    local tc_if
    if [ "$2" == "in" ]; then
   if   [ "$1" == "$wan_if" ]; then
       tc_if=$TC_IN_WANIF
   elif [ "$1" == "$lan_if" ]; then
       tc_if=$TC_IN_LANIF
   elif [ "$1" == "$dtn_if" ]; then
       tc_if=$TC_IN_DTNIF
   elif [ "$1" == "$dtn_old_if" ]; then
       tc_if=$TC_IN_DTNIF_OLD
   elif [ "$1" == "$inet_if" ]; then
       tc_if=$TC_IN_INETIF
        fi
    else
   if   [ "$1" == "$wan_if" ]; then
       tc_if=$TC_WANIF
   elif [ "$1" == "$lan_if" ]; then
       tc_if=$TC_LANIF
   elif [ "$1" == "$dtn_if" ]; then
       tc_if=$TC_DTNIF
   elif [ "$1" == "$dtn_old_if" ]; then
       tc_if=$TC_DTNIF_OLD
   elif [ "$1" == "$inet_if" ]; then
       tc_if=$TC_INETIF
        fi
    fi
    echo $tc_if
    return 0
}

function setclasses() {
# $1 : физический/INGRESS итерфейс
# $2 : корневой класс этого интерфейса
# $3 : -A/D
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $AVAST_MARK      -j CLASSIFY --set-class ${2}:${INET_REG_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $STUNNEL_MARK    -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $GIT_MARK        -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $BTCTL_MARK      -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $PENSION_MARK    -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $IPADDR_MARK     -j CLASSIFY --set-class ${2}:${INET_REG_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $MACADDR_MARK    -j CLASSIFY --set-class ${2}:${INET_PRIO_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $ANTIVIR_MARK    -j CLASSIFY --set-class ${2}:${INET_REG_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $EXT_MARK        -j CLASSIFY --set-class ${2}:${INET_PRIO_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $ALOQA_MARK      -j CLASSIFY --set-class ${2}:${TASIX_PRIO_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $UZDTV_MARK      -j CLASSIFY --set-class ${2}:${TASIX_PRIO_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX_PRIO_MARK -j CLASSIFY --set-class ${2}:${TASIX_PRIO_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX_REG_MARK  -j CLASSIFY --set-class ${2}:${TASIX_REG_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX4IP_MARK   -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX4MAC_MARK  -j CLASSIFY --set-class ${2}:${TASIX_REG_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $VPN_MARK        -j CLASSIFY --set-class ${2}:${VPN_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $ICMP_MARK       -j CLASSIFY --set-class ${2}:${ICMP_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $INET_VNC_MARK   -j CLASSIFY --set-class ${2}:${VPN_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $IP_TLG_MARK        -j CLASSIFY --set-class ${2}:${VPN_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $IP_TLG_CHECK_MARK  -j CLASSIFY --set-class ${2}:${VPN_CLS}

    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $P2P_MARK           -j CLASSIFY --set-class ${2}:${INET_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX4IP_P2P_MARK  -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m connmark --mark $TASIX4MAC_P2P_MARK -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}

    iptables $3 POSTROUTING -t mangle -o $1 -m mark --mark $GREEDY_FWMARK           -j CLASSIFY --set-class ${2}:${INET_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m mark --mark $TASIX4IP_GREEDY_FWMARK  -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
    iptables $3 POSTROUTING -t mangle -o $1 -m mark --mark $TASIX4MAC_GREEDY_FWMARK -j CLASSIFY --set-class ${2}:${TASIX_REST_CLS}
}

function classfy() {
# $1: название интерфейса
# $2: IPTABLES-команда
    local tc_if real_if
    tc_if=`if2tcif $1`
    real_if=`if2realif $1`
    setclasses $real_if $tc_if $2
    if [ "$INPUT_SHAPING" == y ]; then
   tc_if="$tc_ifs `if2tcif $1 in`"
   real_if=`if2realif $1 in`
   setclasses $real_if $tc_if $2
    fi
}

function checkdns(){
#   $1 - address of name server to query
#    local SVR
#    SVR=
    isvalidip "$DNS_SVR" && SRV="@${DNS_SVR}"
    [ -f "$DNS_OK_FLAG" ] && rm $DNS_OK_FLAG
    if dig $SVR +time=$DNS_WAITING +tries=1 2>&1 >/dev/null; then
   touch "$DNS_OK_FLAG"
   echo y; return 0
    else
   echo n; return 1
    fi
}

# требует предварительного запуска "checkdns()"
function isdnsok(){
    if [ -f "$DNS_OK_FLAG" ]; then
   echo y; return 0
    else
   echo n; return 1
    fi
}

#================== SIPCALC-based ========================================================

function isvalidip(){
    [ $# -lt 1 ] && return 1
    sipcalc $1 | egrep -e "^-[ERR" 2>&1 >/dev/null && return 1
    return 0
}

function addrinfo() {
# $1 addr[/mask]
# [$2]= y | n : perform name resolution
    local NR AI
    [ $# -lt 1 ] && return 1
    NR=; [ "$2" == "y" ] && NR="-d"
    AI=`sipcalc $NR $1 | awk 'BEGIN{ HA=""; NA=""; NM=""; NMB=""; T=""; }{
   if ( $0 ~ /^Host[ t]+address[ t]*-/ )    {HA=$NF; NA=""; NM=""; NMB=""; T="";}
   if ( $0 ~ /^Network[ t]+address[ t]*-/ ) {NA=$NF; NM=""; NMB=""; T="";}
   if ( $0 ~ /^Network[ t]+mask[ t]*-/ )    {NM=$NF; NMB=""; T="";}
   if ( $0 ~ /^Network[ t]+mask[ t]*(bits)[ t]*-/ )    {NMB=$NF; T="";}
   if ( NMB == 32 ) { T="-host"; } else { T="-net"; }
   if ( (NA != "") && (NM != "") && (NMB != "") && (T != "")) {
       print T"#"NA"#"NMB"#"NM;
       HA=""; NA=""; NM=""; NMB=""; T="";
   }
    }'`
    [ -n "$AI" ] || return 1
    echo $AI
    return 0
}

function flushsetroutegw() {
# $1: - set name of type "hasp:ip|net"
# $2: - gateway address
    if ADDRS=`ipset list $1 | awk -F "," 'BEGIN{FND=0;}{
   if (/Members:/) {FND=1; getline;}
   if (FND) {print $1;}
    }'`; then
   [ -n "$ADDRS" ] || return 0
   for addr in $ADDRS; do
       delroutegws $addr $2 n
   done
   ipset flush $1
   return 0
    else
   return 1
    fi
}

function flushsetroutedev() {
# $1: - set name of type "hasp:ip|net"
# $2: - interface device
    if ADDRS=`ipset list $1 | awk -F "," 'BEGIN{FND=0;}{
   if (/Members:/) {FND=1; getline;}
   if (FND) {print $1;}
    }'`; then
   [ -n "$ADDRS" ] || return 0
   for addr in $ADDRS; do
       delroutedevs $addr $2 n
   done
   ipset flush $1
   return 0
    else
   return 1
    fi
}

function addr2netset(){
# $1: - set name of type "hasp:ip|net"
# $2: - addr[/mask]
# $3: y | n - perform name resolution
# [$4: - ip address of reserve internet gateway, metric =0]
    local cnt AT ADDRS ADDR MASKB MASK FULL_ADDR rc NR ai USE_GW
    USE_GW=0
    [ $# -eq 4 ] && {
   isvalidip $4 || return 1
   USE_GW=1
    }
    NR="n"; [ "$3" == "y" ] && NR="y"
    if ADDRS=`addrinfo "$2" $NR`; then
   for ai in $ADDRS; do
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       MASKB=`echo  $ai | awk -F "#" '{print $3}'`
       FULL_ADDR=${ADDR}/${MASKB}
       ipset add $1 $FULL_ADDR
       if [ $USE_GW -eq 1 ]; then
      AT=`echo     $ai | awk -F "#" '{print $1}'`
      MASK=`echo   $ai | awk -F "#" '{print $4}'`
      echo -ne "..routing via the reserve INTERNET channel"
      cnt=$ROUTE_ATTEMPTS
      echo -ne "ntas ${FULL_ADDR} via GW $4"
      while ! route -n | awk '{print $1" "$2" "$3" "$5}' | grep "$ADDR $4 $MASK 0" >/dev/null;do
          route add $AT $FULL_ADDR metric 0 gw $4
          cnt=$(($cnt - 1))
          [ $cnt -lt 1 ] && {
         rc=1;
         echo "..failed!";
         break
          }
      done
      if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
          echo -n "..already created."
      else
          echo -n "..OK."
      fi
       fi
   done
    fi
    return 0
}

function addrlist2netset(){
# $1: - set name of type "hasp:ip|net"
# $2: - address list (by spaces)
# $3: y | n - perform name resolution
# [$4: - ip address of reserve internet gateway, metric = 0]
    local addr
    [ -n "$2" ] || return 0
    for addr in $2; do
   addr2netset $1 $addr $3 $4
    done
}

function addr2macset(){
# $1: - set name of type "bitmap:ip,mac"
# $2: - addr,mac
# $3: y | n - perform name resolution
# [$4: - ip address of reserve internet gateway, metric =0]
    local cnt AT ADDRS ADDR MASK rc NR ai USE_GW AP MAC
    USE_GW=0
    [ $# -eq 4 ] && {
   isvalidip $4 || return 1
   USE_GW=1
    }
    AP=`echo $2 | awk -F "," '{print $1}'`
    MAC=`echo $2 | awk -F "," '{print $2}'`
    if ! [ -n "$MAC" ]; then
   echo "...no MAC address supplied in $2 for bitmap set $1"
   return 0
    fi
    NR="n"; [ "$3" == "y" ] && NR="y"
    if ADDRS=`addrinfo "$AP" $NR`; then
   for ai in $ADDRS; do
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       ipset add $1 ${AP},${MAC}
       if [ $USE_GW -eq 1 ]; then
      AT=`echo     $ai | awk -F "#" '{print $1}'`
      if ! [ $AT == "-host" ]; then
          echo "...skipping non host-type address $AP for bitmap set $1"
          continue
      fi
      MASK=`echo   $ai | awk -F "#" '{print $4}'`
      echo -ne "..routing via the reserve INTERNET channel"
      cnt=$ROUTE_ATTEMPTS
      echo -ne "ntas ${ADDR} via GW $4"
      while ! route -n | awk '{print $1" "$2" "$3" "$5}' | grep "$ADDR $4 $MASK 0" >/dev/null;do
          route add $AT $ADDR metric 0 gw $4
          cnt=$(($cnt - 1))
          [ $cnt -lt 1 ] && {
         rc=1;
         echo "..failed!";
         break
          }
      done
      if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
          echo -n "..already created."
      else
          echo -n "..OK."
      fi
       fi
   done
    fi
    return 0
}

function addrlist2macset(){
# $1: - set name of type "bitmap:ip,mac"
# $2: - address list (by spaces)
# $3: y | n - perform name resolution
# [$4: - ip address of reserve internet gateway, metric =0 ]
    local addr
    [ -n "$2" ] || return 0
    for addr in $2; do
   addr2macset $1 $addr $3 $4
    done
}

function addrinfoshort() {
# $1 addr[/mask]
# [$2]= y | n : perform name resolution
    local NR AI
    [ $# -lt 1 ] && return 1
    NR=; [ "$2" == "y" ] && NR="-d"
    AI=`sipcalc $NR $1 | awk 'BEGIN{ NA=""; NMB=""; }{
   if ( $0 ~ /^Network[ t]+address[ t]*-/ ) {NA=$NF; NMB="";}
   if ( $0 ~ /^Network[ t]+mask[ t]*(bits)[ t]*-/ )    {NMB=$NF; }
   if ( (NA != "") && (NMB != "") ) {
       print NA"/"NMB;
       NA=""; NMB="";
   }
    }'`
    [ -n "$AI" ] || return 1
    echo $AI
    return 0
}

function delroutedevs() {
# $1 net/mask || host[/32]
# $2 dev
# $3 y | n : perform name resolution
# [$4 metric]
    local cnt AT ADDR MASKB MASK FULL_ADDR rc METRIC METRICM
    METRIC=; METRICM="[0-9]+";
    [ $# -eq 4 ] && {
   METRIC="metric $4"
   METRICM=$4
    }
    rc=0
    echo -ne "...deleting route to ${1} :"
    if ADDRS=`addrinfo $1 $3`; then
   for ai in $ADDRS; do
       AT=`echo     $ai | awk -F "#" '{print $1}'`
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       MASKB=`echo  $ai | awk -F "#" '{print $3}'`
       MASK=`echo   $ai | awk -F "#" '{print $4}'`
       FULL_ADDR=${ADDR}/${MASKB}
       cnt=$ROUTE_ATTEMPTS
       echo -ne "ntas ${FULL_ADDR} via DEV ${2} $METRIC"
       while route -n | awk '{print $1" "$2" "$3" "$5" "$8}' | egrep -e "$ADDR 0.0.0.0 $MASK $METRICM $2" >/dev/null;do
      route del $AT $FULL_ADDR $METRIC dev $2 2>/dev/null || sleep $ROUTE_WAITING
      cnt=$(($cnt - 1))
      [ $cnt -lt 1 ] && {
          rc=1;
          echo "..failed!";
          break
      }
       done
       if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
      echo -n "..already deleted."
       else
      echo -n "..OK."
       fi
   done
   echo
    else
   rc=1;
       echo " failed since the target address is invalid or unresolved!"
    fi
    return $rc
}

function dellistroutedevs() {
# $1 address list
# $2 dev
# $3 y | n : perform name resolution
# [$4 metric]
    local addr
    [ -n "$1" ] || return 1
    for addr in $1; do
   delroutedevs $addr $2 $3 $4
    done
}

function delroutegws() {
# $1 net/mask || host[/32]
# $2 gateway
# $3 y | n : perform name resolution
# [$4 metric]
    local cnt AT ADDR ADDRS MASKB MASK FULL_ADDR rc METRIC METRICM
    METRIC=; METRICM="[0-9]+";
    [ $# -eq 4 ] && {
   METRIC="metric $4"
   METRICM=$4
    }
    rc=0
    echo -ne "...deleting route to ${1} :"
    if ADDRS=`addrinfo $1 $3`; then
   for ai in $ADDRS; do
       AT=`echo     $ai | awk -F "#" '{print $1}'`
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       MASKB=`echo  $ai | awk -F "#" '{print $3}'`
       MASK=`echo   $ai | awk -F "#" '{print $4}'`
       FULL_ADDR=${ADDR}/${MASKB}
       cnt=$ROUTE_ATTEMPTS
       echo -ne "ntas ${FULL_ADDR} via GW ${2} $METRIC"
       while route -n | awk '{print $1" "$2" "$3" "$5}' | egrep -e "$ADDR $2 $MASK $METRICM" >/dev/null;do
      route del $AT $FULL_ADDR $METRIC gw $2 2>/dev/null || sleep $ROUTE_WAITING
      cnt=$(($cnt - 1))
      [ $cnt -lt 1 ] && {
          rc=1;
          echo "..failed!";
          break
      }
       done
       if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
      echo -n "..already deleted."
       else
      echo -n "..OK."
       fi
   done
   echo
    else
   rc=1;
       echo " failed since the target address is invalid or unresolved!"
    fi
    return $rc
}

function dellistroutegws() {
# $1 address list
# $2 gateway
# $3 y | n : perform name resolution
# [$4 metric]
    local addr
    [ -n "$1" ] || return 1
    for addr in $1; do
   delroutegws $addr $2 $3 $4
    done
}


function addroutedevs() {
# $1 net/mask || host[/32]
# $2 dev
# $3 y | n : perform name resolution
# [$4 metric]
    local cnt AT ADDR ADDRS MASKB MASK FULL_ADDR rc METRIC METRICM
    METRIC=; METRICM="[0-9]+";
    [ $# -eq 4 ] && {
   METRIC="metric $4"
   METRICM=$4
    }
    rc=0
    echo -ne "...creating route to ${1} :"
    if ADDRS=`addrinfo $1 $3`; then
   for ai in $ADDRS; do
       AT=`echo     $ai | awk -F "#" '{print $1}'`
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       MASKB=`echo  $ai | awk -F "#" '{print $3}'`
       MASK=`echo   $ai | awk -F "#" '{print $4}'`
       FULL_ADDR=${ADDR}/${MASKB}
       cnt=$ROUTE_ATTEMPTS
       echo -ne "ntas ${FULL_ADDR} via DEV ${2} $METRIC"
       while ! route -n | awk '{print $1" "$2" "$3" "$5" "$8}' | egrep -e "$ADDR 0.0.0.0 $MASK $METRICM $2" >/dev/null;do
      route add $AT $FULL_ADDR $METRIC dev $2 2>/dev/null || sleep $ROUTE_WAITING
      cnt=$(($cnt - 1))
      [ $cnt -lt 1 ] && {
          rc=1;
          echo "..failed!";
          break
      }
       done
       if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
      echo -n "..already created."
       else
      echo -n "..OK."
       fi
   done
   echo
    else
   rc=1;
       echo " failed since the target address is invalid or unresolved!"
    fi
    return $rc
}

function addlistroutedevs() {
# $1 address list
# $2 dev
# $3 y | n : perform name resolution
# [$4 metric]
    local addr
    [ -n "$1" ] || return 1
    for addr in $1; do
   addroutedevs $addr $2 $3 $4
    done
}

function addroutegws() {
# $1 net/mask || host[/32]
# $2 gateway
# $3 y | n : perform name resolution
# [$4 metric]
    local cnt AT ADDR ADDRS MASKB MASK FULL_ADDR rc METRIC METRICM
    METRIC=; METRICM="[0-9]+";
    [ $# -eq 4 ] && {
   METRIC="metric $4"
   METRICM=$4
    }
    rc=0
    echo -ne "...creating route to ${1} :"
    if ADDRS=`addrinfo $1 $3`; then
   for ai in $ADDRS; do
       AT=`echo     $ai | awk -F "#" '{print $1}'`
       ADDR=`echo   $ai | awk -F "#" '{print $2}'`
       MASKB=`echo  $ai | awk -F "#" '{print $3}'`
       MASK=`echo   $ai | awk -F "#" '{print $4}'`
       FULL_ADDR=${ADDR}/${MASKB}
       cnt=$ROUTE_ATTEMPTS
       echo -ne "ntas ${FULL_ADDR} via GW ${2} $METRIC"
       while ! route -n | awk '{print $1" "$2" "$3" "$5}' | egrep -e "$ADDR $2 $MASK $METRICM" >/dev/null;do
      route add $AT $FULL_ADDR $METRIC gw $2 2>/dev/null || sleep $ROUTE_WAITING
      cnt=$(($cnt - 1))
      [ $cnt -lt 1 ] && {
          rc=1;
          echo "..failed!";
          break
      }
       done
       if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
      echo -n "..already created."
       else
      echo -n "..OK."
       fi
   done
   echo
    else
   rc=1;
       echo " failed since the target address is invalid or unresolved!"
    fi
    return $rc
}

function addlistroutegws() {
# $1 address list
# $2 gateway
# $3 y | n : perform name resolution
# [$4 metric]
    local addr
    [ -n "$1" ] || return 1
    for addr in $1; do
   addroutegws $addr $2 $3 $4
    done
}

#==========================================================================================

function cidr2oct () {
    # Convert CIDR netmask to x.x.x.x format.
    local mask bit octs i
    mask=$1
    if grep -q '.' <<<$mask; then
   echo $mask
   return
    fi
    for ((i=$mask; $i>0; i--)); do
   bit="${bit}1"
    done
    i=$((32 - $mask))
    for ((i=$i; $i>0; i--)); do
   bit="${bit}0"
    done
    octs=$(echo 'ibase=2;obase=A;'$(cut -c 1-8 <<<$bit) |bc)
    octs=${octs}.$(echo 'ibase=2;obase=A;'$(cut -c 9-16 <<<$bit) |bc)
    octs=${octs}.$(echo 'ibase=2;obase=A;'$(cut -c 17-24 <<<$bit) |bc)
    octs=${octs}.$(echo 'ibase=2;obase=A;'$(cut -c 25-32 <<<$bit) |bc)
    echo $octs
}

function oct2cidr () {
    # Convert decimal netmask to CIDR.
    local mask bit cidr i
    mask=$1
    if grep -qv '.' <<<$mask; then
   echo $mask
   return
    fi
    for i in 1 2 3 4; do
   bit=${bit}$(printf "%08d" $(echo 'ibase=10;obase=2;'$(cut -d '.' -f $i <<<$mask) |bc))
    done
    cidr=$(echo -n ${bit%%0*} |wc -m)
    echo $cidr
}



function isvalidip2(){
    [ $# -lt 1 ] && return 1
    if ipcalc $1 | egrep "INVALID ADDRESS" 2>&1 >/dev/null; then
   return 1
    else
   return 0
    fi
}

function isvalidip1(){
    [ $# -lt 1 ] && return 1
    echo $1 | egrep -ve "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}($|/[0-9]{1,2}$)" >/dev/null && return 1
    r=`echo $1 | awk -F "." '{
   if (($1>255) || ($2>255) || ($3>255)) {
       print "n";
   } else {
       n=split($4,A,"/");
       if ((A[1]>255) || (A[2]>32)) {
      print "n"
       }
   }
    }'`
    if [ "$r" == "n" ]; then
   return 1
    else
   return 0
    fi
}



function resolv2ip() {
    local IPS
    local SVR
    IPS=
    SVR=
    isvalidip "$DNS_SVR" && SVR="@${DNS_SVR}"
    for ip in `dig $SVR $1 +short +time=$DNS_WAITING +tries=$DNS_TRIES`; do
   [ -n "$ip" ] && IPS="$IPS $ip"
    done
    echo $IPS
    [ -n "$IPS" ] || return 1
    return 0
}

function waitif() {
    local i
    i=0
    while ! ifconfig $1 1>/dev/null 2>/dev/null; do
   [ $i -ge 10 ] && break
   i=`expr $i + 1`
   sleep 1s
    done
}


function delroutedev() {
# $1 net/mask || host[/32]
# $2 dev
# $3 metric
    local NETARG; local ADDR; local MASK; local MASK1; local NET; local cnt; local rc; local IS_HOST; local METRIC; local NET_FIX
    isvalidip $1 || return 1
    if [ $# -lt 3 ]; then
   METRIC=0
    else
   METRIC=$3
    fi
    NETARG=$1
    echo $1 | egrep -e "/[0-9]+$" >/dev/null || NETARG="${NETARG}/32"
    NET_FIX=
    if ! MASK1=`ipcalc -nb $NETARG | grep "Netmask:"`; then
   echo -ne "...deleting route { ${NETARG} via DEV $2 metric $METRIC }"
   echo "..failed since the address '${NETARG}' is invalid!"
   return 1
    fi
    MASK1=`echo $MASK1 | awk '{print $4}'`
    NET=`ipcalc -nb $NETARG   | grep "Network:" | awk '{print $2}'`
    ADDR=`ipcalc -nb $NETARG  | grep "Address:" | awk '{print $2}'`
    if [ -n "$NET" ]; then
   [ "${ADDR}/${MASK1}" == "$NET" ] || NET_FIX="=>${NET}"
   ADDR=`ipcalc -nb $NET | grep "Address:" | awk '{print $2}'`
    fi
    MASK=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $2}'`
    IS_HOST=n
    ipcalc -nb $NETARG | grep "Hostroute:" > /dev/null && IS_HOST=y
    cnt=$ROUTE_ATTEMPTS; rc=0
    echo -ne "...deleting route { ${NETARG}${NET_FIX} via DEV $2 metric $METRIC }"   
    while route -n | awk '{print $1" "$3" "$5" "$8}' | grep "$ADDR $MASK $METRIC $2" >/dev/null;do
   sleep $ROUTE_WAITING
   if [ $IS_HOST == y ]; then
       route del -host $ADDR metric $METRIC dev $2
   else
       route del -net $NET metric $METRIC dev $2
   fi
   cnt=$(($cnt - 1))
   [ $cnt -lt 1 ] && {
       echo "..failed!"
       return 1
   }
    done
    if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
   echo "..already deleted."
    else
   echo "..Ok."
    fi
    return 0
}

function addroutedev() {
# $1 net/mask || host[/32]
# $2 dev
# $3 metric
    local NETARG; local ADDR; local MASK; local MASK1; local NET; local cnt; local rc; local IS_HOST; local METRIC; local NET_FIX
    isvalidip $1 || return 1
    if [ $# -lt 3 ]; then
   METRIC=0
    else
   METRIC=$3
    fi
    NETARG=$1
    echo $1 | egrep -e "/[0-9]+$" >/dev/null || NETARG="${NETARG}/32"
    NET_FIX=
    if ! MASK1=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $4}'`; then
   echo -ne "...adding route { ${NETARG} via DEV $2 metric $METRIC }"
   echo "..failed since the address '${NETARG}' is invalid!"
   return 1
    fi
    NET=`ipcalc -nb $NETARG   | grep "Network:" | awk '{print $2}'`
    ADDR=`ipcalc -nb $NETARG  | grep "Address:" | awk '{print $2}'`
    if [ -n "$NET" ]; then
   [ "${ADDR}/${MASK1}" == "$NET" ] || NET_FIX="=>${NET}"
   ADDR=`ipcalc -nb $NET | grep "Address:" | awk '{print $2}'`
    fi
    MASK=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $2}'`
    IS_HOST=n
    ipcalc -nb $NETARG | grep "Hostroute:" > /dev/null && IS_HOST=y
    cnt=$ROUTE_ATTEMPTS; rc=0
    echo -ne "...adding route { ${NETARG}${NET_FIX} via DEV $2 metric $METRIC }"
    while ! route -n | awk '{print $1" "$3" "$5" "$8}' | grep "$ADDR $MASK $METRIC $2" >/dev/null;do
   sleep $ROUTE_WAITING
   if [ $IS_HOST == y ]; then
       route add -host $ADDR metric $METRIC dev $2
   else
       route add -net $NET metric $METRIC dev $2
   fi
   cnt=$(($cnt - 1))
   [ $cnt -lt 1 ] && {
       echo "..failed!"
       return 1
   }
    done
    if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
   echo "..already added."
    else
   echo "..Ok."
    fi
    return 0
}

function delroutegw() {
# $1 net/mask || host[/32]
# $2 gw
# $3 metric
    local NETARG; local ADDR; local MASK; local MASK1; local NET; local cnt; local rc; local IS_HOST; local METRIC; local NET_FIX
    isvalidip $1 || return 1
    if [ $# -lt 3 ]; then
   METRIC=0
    else
   METRIC=$3
    fi
    NETARG=$1
    echo $1 | egrep -e "/[0-9]+$" >/dev/null || NETARG="${NETARG}/32"
    NET_FIX=
    if ! MASK1=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $4}'`; then
   echo -ne "...deleting route { ${NETARG} via GW $2 metric $METRIC }"
   echo "..failed since the address '${NETARG}' is invalid!"
   return 1
    fi
    NET=`ipcalc -nb $NETARG   | grep "Network:" | awk '{print $2}'`
    ADDR=`ipcalc -nb $NETARG  | grep "Address:" | awk '{print $2}'`
    if [ -n "$NET" ]; then
   [ "${ADDR}/${MASK1}" == "$NET" ] || NET_FIX="=>${NET}"
   ADDR=`ipcalc -nb $NET | grep "Address:" | awk '{print $2}'`
    fi
    MASK=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $2}'`
    IS_HOST=n
    ipcalc -nb $NETARG | grep "Hostroute:" > /dev/null && IS_HOST=y
    cnt=$ROUTE_ATTEMPTS; rc=0;
    echo -ne "...deleting route { ${NETARG}${NET_FIX} via GW $2 metric $METRIC }"
    while route -n | awk '{print $1" "$3" "$5" "$2}' | grep "$ADDR $MASK $METRIC $2" >/dev/null;do
   sleep $ROUTE_WAITING
   if [ $IS_HOST == y ]; then
       route del -host $ADDR metric $METRIC gw $2
   else
       route del -net $NET metric $METRIC gw $2
   fi
   cnt=$(($cnt - 1))
   [ $cnt -lt 1 ] && {
       echo "..failed!"
       return 1
   }
    done
    if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
   echo "..already deleted."
    else
   echo "..Ok."
    fi
    return 0

}

function addroutegw() {
# $1 net/mask || host[/32]
# $2 gw
# $3 metric
    local NETARG; local ADDR; local MASK; local MASK1; local NET; local cnt; local rc; local IS_HOST; local METRIC; local NET_FIX
    isvalidip $1 || return 1
    if [ $# -lt 3 ]; then
   METRIC=0
    else
   METRIC=$3
    fi
    NETARG=$1
    echo $1 | egrep -e "/[0-9]+$" >/dev/null || NETARG="${NETARG}/32"
    NET_FIX=
    if ! MASK1=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $4}'`; then
   echo -ne "...adding route { ${NETARG} via GW $2 metric $METRIC }"
   echo "..failed since the address '${NETARG}' is invalid!"
   return 1
    fi
    NET=`ipcalc -nb $NETARG   | grep "Network:" | awk '{print $2}'`
    ADDR=`ipcalc -nb $NETARG  | grep "Address:" | awk '{print $2}'`
    if [ -n "$NET" ]; then
   [ "${ADDR}/${MASK1}" == "$NET" ] || NET_FIX="=>${NET}"
   ADDR=`ipcalc -nb $NET | grep "Address:" | awk '{print $2}'`
    fi
    MASK=`ipcalc -nb $NETARG | grep "Netmask:" | awk '{print $2}'`
    IS_HOST=n
    ipcalc -nb $NETARG | grep "Hostroute:" > /dev/null && IS_HOST=y
    cnt=$ROUTE_ATTEMPTS; rc=0;
    echo -ne "...adding route { ${NETARG}${NET_FIX} via GW $2 metric $METRIC }"
    while ! route -n | awk '{print $1" "$3" "$5" "$2}' | grep "$ADDR $MASK $METRIC $2" >/dev/null;do
   sleep $ROUTE_WAITING
   if [ $IS_HOST == y ]; then
       route add -host $ADDR metric $METRIC gw $2
   else
       route add -net $NET metric $METRIC gw $2
   fi
   cnt=$(($cnt - 1))
   [ $cnt -lt 1 ] && {
       echo "..failed!"
       return 1
   }
    done
    if [ $cnt -eq $ROUTE_ATTEMPTS ]; then
   echo "..already added."
    else
   echo "..Ok."
    fi
    return 0
}

function refresh_tasix_list() {
    TASIX_PLIST="${TASIX_LIST}.tmp"
    CHANGED=0
    TXADDRS=
#   последний список TASIX-сетей => $TXADDRS
    [ -f $TASIX_LIST ]  || touch $TASIX_LIST
   if checkdns >/dev/null; then
       if ping -w 5 $TASIX_ROUTER_HOSTNAME 2>&1 >/dev/null; then
      [ -f $TASIX_PLIST ] || touch $TASIX_PLIST
      if TXADDRS=`tasix_check | sort -u`; then
          if [ -n "$TXADDRS" ]; then
         echo $TXADDRS | egrep -ve "^[ t]*$" > $TASIX_PLIST
         if ! diff $TASIX_LIST $TASIX_PLIST 1>/dev/null 2>/dev/null; then
             CHANGED=1
             echo "Replacing the TAS-IX list..."
             [ -s $TASIX_PLIST ] && cp -f -- $TASIX_PLIST $TASIX_LIST
         fi
          fi
      fi
       else
      echo "TASIX-шлюз не отвечает !"
       fi
   fi
   rm -f -- $TASIX_PLIST
   TXADDRS=`cat $TASIX_LIST | egrep -ve "^[ t]*$"`
#    к TASIX-зоне добаляем сайты провайдера (персональный кабинет,..)
   TXADDRS="$TXADDRS $ISP_SITES"
#    и загружаем список сетей и сайтов в набор
   addrlist2netset TASIXN "$TXADDRS" `checkdns`
}


function inetif_addr() {
    if ADDR=`ifconfig $1 2>/dev/null | awk '{if (/^[ t]*inet addr:/) {split($2,A,":");print A[2];}}'`; then
   echo -n $ADDR
    fi
}


И это только строительные блоки :)

Чтобы переписать заковыристый запрос, админу нужно суметь его расшифровать. Видя код запроса нужно разгадать смысл запроса, т.к. доки по прикладному смыслу тех или иных запросов никогда нет. Это метод обратного анализа, когда глядя на код, нужно понять, что и для чего этот код предназначен. Это даже сложнее, чем работа программиста, это высший пилотаж.
Никакого волшебства. Также есть профайлеры и таймеры - например "EXPLAIN ANALYZE <запрос>" - с ним не нужно понимания "для чего" - тупо смотришь на ветку в которой крутится долгий "nested loop" - и пробуешь для этой ветки индексы. Или выносишь эту ветку в отдельную функцию и уже ее индексируешь (функциональным индексов). Короче - фигня :)

Добавлено спустя 1 час 59 минут 14 секунд:
Вы должны иметь лиценизии, как юзер. Лицензия таким образом - это допуск к использованию сервера.

Не-а. Арендодатель (серверная сторона) стоимость юзерской лицензии должен включить в стоимость аренды.

Да что говорить ? Вот :
http://www.netdocs.ru/articles/Terminal-Serve-Citrix-Licensing-Models.html
Лицензирование Citrix использует так называемую модель “конкурентного лицензирования”. Лицензии Citrix гораздо более дорогие, однако Вам не нужно иметь большое их количество. Число необходимых лицензий равняется максимальному числу конкурентных пользователей, на Вашей ферме (В версиях MPS 3.0 и более поздних подсчет производится на межфермовой основе). Так, если у Вас есть 100 пользователей, 50% которых конкурентны, Вам необходимо 100 TS CAL и 50 лицензий соединения Citrix.


http://citrix.1th.ru/admin/chap06.html
Предоставление количества лицензий в соответствии с кодом продукта
В MetaFrame XP количество лицензий назначется каждому серверу из общего пула лицензий в пределах фермы. Автоматическое предоставление лицензий означает, что вам не нужно вручную назначать из серверам.
В одном пуле может находиться лицензии разных типов - evaluation, migration, upgrade и full retail. Код продукта, примененный к серверу, определяет тип и количество лицензий, забираемых сервером из пула.
Помимо типов лицензий (evaluation, retail и пр.) разница делается и для лицензий MetaFrame XPs, MetaFrame XPa и MetaFrame XPe. Без правильного кода продукта на сервере (и соответствующего числа лицензий в пуле) программное обеспечение Citrix не будет работать на сервере. Например, если вы установили код продукта MetaFrame XPs, но доступных лицензий MetaFrame XPs нет, сервер не получит лицензии MetaFrame XPa или MetaFrame XPe, если они доступны в пуле.
Если вы инсталлировали MetaFrame XP и Installation Manager на сервере и ввели код лицензии MetaFrame XPs, то сервер возмет из пула лицензию MetaFrame XPs. Даже если лицензия доступна,
Installation Manager не будет разроешен, поскольку он требует наличия лицензи MetaFrame XPs.

то есть покупка лицензий = вопрос серверной стороны.

Добавлено спустя 1 минуту 45 секунд:
Эти операции уж точно не выполняются на клиенте :
Активация лицензий
Для завершения лицензирования вы должны активировать лицензии. До тех пор, пока лицензии не будут активированы, на сервере MetaFrame XP будут появляться напоминающие сообщения. Неверная устаревшая лицензия предотвращает подключение пользователей к серверу MetaFrame. Кроме того, вы не можете назначитьсерверу неактивированные лицензии.
Для активации лицензии вы должны ввести код активации в Citrix Management Console.
Щелкните правой кнопкой мыши на номере лицензии на закладке License Numbers и выберите Activate для инициирования процесса активации.


Добавлено спустя 2 минуты 59 секунд:
Они как и в классическом ментовском сериале, устраивают индивидуальные допросы юзеров. И там по классическому сценарию, тетеньке оператору говорится, что вот мол по информации ваших коллег (которых мы уже допросили) Вы работаете с сервером, который стоит аж 10 млн. руб., в должностной инструкции у Вас это не записано, и документов (лицензии) у Вас нет, то есть руководство не причем, вы мол самовольно нелегально используете дорогостоящее программное обеспечение. Поэтому мы вам выпишем штраф в 10 млн.руб., вас еще и арестуем, и посадим в тюрьму на 10 лет.

В натуре что ли ?! А говорят что "ужасные 90-е" уже закончились. Только теперь "тетенек" рэкетируют :) Только что утюгом не пытают...

Добавлено спустя 9 минут 52 секунды:
Это как раз все очень просто, если работать правильно. Просто, если не методом тыка, а заренее знать, как и что делать.

Асинхронное программирование = аналог многопоточного (с параллелизмом) программирования, но без средств согласования потоков, с невозможностью "сказать" другому процессу "подожди". О-о-очень специфично. Например от блок-схем алгоритмов польза становится невелика :)

Добавлено спустя 18 минут 26 секунд:
Чтобы переписать заковыристый запрос, админу нужно суметь его расшифровать.

Вот еще пример когда БД-админ - ноль без палочки без программиста. Например некая выборка по данным из некого набора выполняется недопустимо долго - потому что БД использует дженерик (не знающий об урезанном наборе значений) функции сравнения. Мы с такой ситуацией столкнулись (при смене системы кодирования - когда стало нужно одновременно учитывать и старую,и новую системы кодирования) - и побороли ее написанием самопальной функции сравнения под урезанный набор. Хотя эта функция компилировалась как модуль сервера БД, поэтому была написана на "С" (ессно программистом), и скомпилирована тоже программистом, а значит БД-админ в этой ситуации - сбоку припеку.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 29.11.2013 14:12:28

debi12345 писал(а):Не-а. Арендодатель (серверная сторона) стоимость юзерской лицензии должен включить в стоимость аренды.

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

Тут точно также как с арендой автомобиля. Если ты сидишь за рулем чужого авто, то у тебя на руках должна быть ПТС, доверенность или договор аренды. Без ПТС договор аренды не дает права управлять автомобилем.
debi12345 писал(а):то есть покупка лицензий = вопрос серверной стороны.

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

Добавлено спустя 13 минут 15 секунд:
debi12345 писал(а):Эти операции уж точно не выполняются на клиенте :

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

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

В 90е годы по разных хозяйственным вопросам использовались технологии "прокладок" (посреднических юр.лиц), через которые проводились всевозможные аферы. "Прокладка" воровала, например, лес (нефть, металл) и тут же продавала уже якобы "честной конторе". Тем самым пытались легализовать ворованное. Эту лавочку в России прикрыли с посадкой Ходорковского, у которого (как и любого другого прихватизатора) весь бизнес был построен на этой схеме. Вы сейчас схемы из бандитских 90х пытаетесь переложить на ИТ-лицензирование. Но в ИТ работают не прихватизаторские законы, а лицензии составляются на основе законодательства страны разработчика. И у америкосов уже лет как 100-150 все эти примитивные схемы легализации ворованного запрещены, поэтому и лицензирование не проканывает по таким схемам.

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

Поэтому Деби забудьте про эти дурацкие схемы. Они пахнут и административной и уголовной ответственностью (если для вашей который Вы их сами разработали). Пока Вас никто не проверял, Вы и думаете, что якобы прикрыты. Но это не так.

Добавлено спустя 2 минуты 56 секунд:
debi12345 писал(а):Никакого волшебства.

Вы просто не видели серьезных БД, говорите как ребенок.
debi12345 писал(а):И это только строительные блоки

А что здесь сложного? В принципе что?
debi12345 писал(а):Асинхронное программирование

Зачем их заново программировать? Все сетевые решения уже типовые, и все шаблоны типовые. Первый разработчик был крут, очень крут. Но сейчас же банальное тиражирование.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: M$-фобия доведена до конца ? Однако...

Сообщение debi12345 » 29.11.2013 14:34:03

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

В сетевых технологиях всегда идет активная гонка за новейшим Линукс-ядром (не просто ради новизны, а реально появляется новый нужный и ожидаемый функционал) и новыми версиями IPTABLES. Поэтому "готовые/типовые" решения как правило всегда устаревшие и внедряются как правило только в провайдерских конторах.

Добавлено спустя 7 минут 30 секунд:
А что здесь сложного? В принципе что?

То, что сетевое администрирование в мало-мальки немелкой сети - это почти всегда программирование. А блоки складывать приходится асинхронно.

Добавлено спустя 2 минуты 50 секунд:
в каком месте и в каком виде нужно вводить код активации.

Код активации вводится на серверной стороне (арендодателем) - для это есть сервер лицензирования. На клиенте лицензии прописываются в реестре автоматом после коннектов :)

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

Ссылки на преценденты вскрытия "виндов" спрятанных в "боксах" можно ? Очень хотелось бы почитать... Ну реально у вас там с середины 80-х годов происходят странные вещи. Сплошь и рядом вдовы зачем-то сами себя высекающие :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: M$-фобия доведена до конца ? Однако...

Сообщение alexey38 » 29.11.2013 16:20:03

debi12345 писал(а):То, что сетевое администрирование в мало-мальки немелкой сети - это почти всегда программирование. А блоки складывать приходится асинхронно.

Это довольно легкое программирование, на которое не требуется большого ума. Немного практики, и любой человек это уже способен делать. Бывают конечно очень сложные сети, с многократным и хитромудрым резервированием, но это редкость.
debi12345 писал(а):В сетевых технологиях всегда идет активная гонка за новейшим Линукс-ядром (не просто ради новизны, а реально появляется новый нужный и ожидаемый функционал) и новыми версиями IPTABLES.

Ну это обычно от лукавого, когда админы от отсутствия мозгов себе набивают цену, создавая себе работу на пустом месте. Если контора не провайдерская, то ИТ и сеть - это вспомогательные системы, к ним довольно низкие функциональные требования. Главное, чтобы работало, а остальное - это лукавство админа.
debi12345 писал(а):Ссылки на преценденты вскрытия "виндов" спрятанных в "боксах" можно ?

Ссылки - это что такое? Вы хотите получить ссылки на внутренний документооборот МВД?

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

Профессиональный уровень "управления К" достаточно высок. Лохам без мозгов там нет смысла работать, и палок не принесут и сами не заработают (если нет великого ума, то лучше идти в ГАИшники или ППС). Поэтому там работают реальные профессионалы, которые, как минимум знают все примитивные технологии сокрытия пиратского софта.

Хотите знать официальную позицию напишите письмо в Микрософт, как насчет виртуальных машин, так и насчет терминальных серверов. Когда мне нужно было сделать публичный (для выставок, конференций, презентаций) демонстрационный стенд (в котором несколько виртуальных машин, иллюстрирующих сетевые взаимодействия), то я сам лично вел переписку с представительством микрософта, и получил все необходимые для себя ответы. В итоге на один физический комп у меня было 7 лицензий на винду, а в стенде несколько компов. Если не верите мне, можете самостоятельно узнать.

Добавлено спустя 4 минуты 34 секунды:
debi12345 писал(а):Код активации вводится на серверной стороне (арендодателем) - для это есть сервер лицензирования. На клиенте лицензии прописываются в реестре автоматом после коннектов

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

Лицензия - это договор публичной (или не публичной) оферты. Активация - это техническое средство, используемое разработчиком, для принуждения пользователей к приобретению лицензий. Кроме того, активация упрощает процесс фиксации легитимных действий, и упрощает выявление нелегитимных установок. Но сама по себе успешная активация ни коем образом не гарантирует, что у вас легальная версия. Собственно ошибка активации еще не означает пиратку.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Пред.След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru