понедельник, 26 декабря 2016 г.

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

Очень часто размер правок в пределах одной строки очень незначительный и если строка достаточно длинна - можно при выполнении git diff пропустить ошибку, в этом случае я рекомендую использовать специальный флаг для git diff --color-words, который приедет к тому, что git подсветит цветом конкретные изменения в пределах одной строки вместо отображения оригинальной строки и новой :) 

воскресенье, 4 декабря 2016 г.

Правка файла на удаленном сервере

Как часть проекта FastNetMon мне часто приходится редактировать файлы на машине, которая не может собрать проект (при всем моем желании!).

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

Как же жить в данной ситуации? Выручает, конечно, vim. Но он не так удобен, когда приходится проводить массовый рефакторинг кода и копировать / переносить очень большие блоки по куче файлов.

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

Что же делать? Использовать Sublime плагин: https://wbond.net/sublime_packages/sftp

Он дает огромную гибкость и удобство! Для его установки Вам нужно сначала установить Package Control плагин для Sublime, а потом поставить сам  плагин SFTP.

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

В этом случае настройка очень проста, создайте папку (в нее будет скопирован по sftp удаленный проект), откройте её, по меню правой кнопки маши выберите map to remote и далее укажите реквизиты для удаленной машины и путь, где размещается проект, после этого выбирайте Download и ждите, пока проект сольется на вашу машину.

После этого после правки файла достаточно тыкнуть Upload в контекстном меню и все, иcправленный файл зальется на удаленную машину! :)

воскресенье, 6 ноября 2016 г.

Немного о провайдерах в Англии

Всем привет!

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

В Англии довольно интересная ситуация, для де-монополизации рынка некоторое время назад гос-во де-монополизировало рынок и разбило крупного местного монополиста BT на оператора сети и непосредственно компанию, которая продает интернет.

Первая стала называться https://www.openreach.co.uk и её суть в том, что любой другой провайдер может получить доступ к клиенту (т.н. последняя миля) не прокладывая своих каналов, а арендую их у BT.

Например для моего района список провайдеров, которые я могу подключить через этот самый Open Reach - вот такой:

Кроме этого, есть еще более продвинутые ребята,  https://www.ifnl.net идея та же самая, но технология уже немного серьезнее - современный FTTH - оптика до квартиры! :)

Список провайдеров около десятка-полтора, большая часть - это провайдера для бизнеса, из провайдеров. Вот их список: https://www.ifnl.net/availableisps Сам я использую: seethelight.co.uk

Если говорить о тарифах, то у меня тариф 25 фунтов в месяц (смотрите по курсу ЦБ) за 60 мегабит без каких-либо ограничений в принципе. 

Еще стоит отметить, что по отзывам друзей и моему личному впечатлению, это 60 правда гарантированных мегабит.

Я реально вижу эту скорость например на 2ip.ru и при скачивании файлов. 

вторник, 27 сентября 2016 г.

Рабочая виза TIER-2 в Англию / Соединенное Королевство / Великобританию

Итак, пожалуй настало время написать статью, как же получить эту самую визу.

Мне помогали с оформлением этой визы юристы Osborne Clarke, но тем не менее процесс довольно тернист и многое зависит от Вас.

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

Итак, мы предполагаем, что я гражданин РФ, а моя компания спонсор имеет A-grade при UKVI. Если у Вас это НЕ так - условия для вас будут совершенно иные.

Итак, у вас имеются определенные отношения с работодателем выявляющиеся в подписанный offer.

Что можно сделать заранее:

  1. Сдать экзамен IELTS for UKVI General (именно FOR UKVI, и никакой иначе! На сайте тестового центра очень легко выбрать неверный, БУДЬТЕ ВНИМАТЕЛЬНЫ)! Нужно иметь по крайне мере 4-5 баллов за каждый блок. Сам по себе этот экзамен ничем не отличается от IELTS General, кроме некоторых моментов в проведении - видеосъемка, съем отпечатков пальцев, двойное фотографирование.  Кроме того, экзамен проводится раз в 4 недели и часто записи на него нету - я бронировал последнее оставшееся место!  Результаты теста действительны 2 года, так что можно сдать сильно заранее.
  2. Получить сертификат об отсутствии туберкулеза в Американском Медицинском Центре: http://amclinic.ru/ В Питере можно уложиться за 1 день, но я читал, что в Москве запись на недели - будьте внимательны.  Сертификат действителен полгода. 
Пока Вы не сдали экзамен работодатель не будет делать Certificate of sponsorship (CoS), потому что... а вдруг не сдадите? Итак, если Вы все сдали (поздравляю!) Ваш работодатель (его юристы) начинают его готовить.

Если вы замужем / женаты, он делается и на Вас и на жену. Если работодатель A-grade, Вам не нужно доказывать наличие средств на проживание у жены, считается, что работодатель покрывает этот случай. Если иначе - у вас должно быть не менее 3 тысяч долларов на протяжении 3х месяцев (сумма на счету в банке ни разу не должна падать ниже этой суммы). Точную сумму уточняйте на сайте.

Итак, после того как CoS оформлен и заполнены анкеты на сайте UK VISAS, Вам нужно будет подготовить перевод свидетельства о браке (не надо делать это самим, отдайте в Единый Центр Документов), важно, чтобы на переводе было написаны все данные автора перевода!

После этого либо Вы либо Ваш работодатель (если он это сделает - цените его! Это очень круто!) оплатит сборы за оформление визы (около $1000) и медицинскую страховку (тоже около $1000) на каждого члена вашей семьи Вы можете идти подавать документы. На семью из 2х человек это около $4000, весьма и весьма не мало. При отказе в визе мед страховку вернут, но сбор за визу - нет.

После того, как сертификат о спонсорстве (CoS), IELTS for UKVI (для основного заявителя только, супругу/супруге он не требуется). справка об отсуствии туберкулеза будут у Вас на руках, Вы самолично либо юристы помогающие с визой запишут вас на прием и Вы подадите документы (все что перечислены выше + оригинал свидетельства о браке).

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

Также если Вы увидели "Priority Service" и думаете, что он поможет - не поможет, он неприменим к TIER-2 визам, это информация от визового центра в Питере.



Срок ожидания - около 15 дней + несколько дней на доставку документов из Шеффилда (да, они все рассматриваются там).

Далее Вы можете оплатить доставку документов куда Вам требуется - это удобно.

После того, как документы придут вы узнаете получили вы визу или нет. Если нет - будет приложен документ "Administrative review", который можно заполнить (со знанием дела и помощью юристов!!! НЕ пытайтесь сами!) и отправить по заданному Email. И если произойдет чудо - UKVI извинится и выдаст Вам визу. При этом попросят оплатить повторно медицинскую страховку. Потому что сразу при отказе вам сделают refund на карту.

А если вы счастливый обладатель визы - тщательно и слово за словом читайте приложенный документ! В нем содержится то, что Вам требуется СДЕЛАТЬ СРАЗУ ЖЕ по приезду в Англию.

Каждый случай индивидуален, у меня там было два требования:
  • Забрать BRP (ваше удостоверение личности)
  • Зарегистрироваться в полиции 
Поймите, если вы этого не сделаете в указанный срок - будут проблемы, штрафы, БОЛЬШИЕ проблемы! Приложите все усилия и сделайте это в срок.

Регистрироватся в полиции можно до получения BRP, так и после.  Очередность неважна, но если ДО могут попросить прийти еще раз и повторно уточнить номер полученного BRP.

После этого как бюрократическая работа закончена - рекомендую приступить к списку, который облегчит выживание в Англии :) В одной из следующих статей! 

Что обязательно нужно сделать, если Вы уезжаете из страны?

Данный вопрос напрямую связан с серией статей на тему поиска работы заграницей.

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

Итак, нужно расслабиться, остановиться и выбрать по меньшей мере 1 неделю на следующие вопросы:

  • Уведомление налоговой службы о наличии счета за рубежом. Это можно сделать с помощью портала Гос Услуги, через него можно залогинится на nalog.ru, а потом выбрать требуемую форму. Для этого Вам потребуются все реквизиты банковского аккаунта в новой стране.  Неисполнение этого требования - чревато штрафом. Вы же не хотите получить штраф приехав навестить родителей? Скорее всего, счет Вы будете открывать после отъезда, поэтому наличие аккаунта на Гос Услугах - категорически обязательно. Кроме как удовлетворения бюрократов этот момент несет позитивный аспект - это даст вам возможность переводить деньги между вашими счетами в разных странах без проблем.
  • Уведомление ФМС о наличии двойного гражданства. Это делается либо по почте либо в органе УФМС. Штраф за неисполнение этого вплоть до уголовной отвественности - отнеситесь к этому ответственно.
  • Оплатите все задолженности, если не хотите узнать о них в следующий раз покидая страну на границе. Это можно сделать через множество сервисов "оплата налогов по ИНН".
Пожалуй, пока все, возможно, что-то в голову придет еще - допишу :)

Визовый вопрос в поиске работы заграницей

Итак, Вы ищите работу заграницей. Где? Почему? Как сложно сделать визу?

Итак, у меня есть более-менее реальное понимание этого вопроса для следующих стран:
США
ЕС (исключая Англию и Ирландию)
Англия
Ирландия
Европа

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

США

США, тут возможно два варианта, H1B и L виза. L виза во всем лучше, но она подразумевает, что перед переходом в США Вы работали в филиале той же компании хотя бы 1 год. Виза хороша тем, что дает право работы супругу/супруге заявителя. Также хороша тем, что Вас подают с пачкой коллег в так называемом blanket petition и рассматривают всех сообща, а не только вас. И с большой вероятностью дают визы всем, кроме этого, данная виза не квотируется.

H1B, притча во языцах, обычная рабочая виза в США. Недостатки - не дает права работы жене, не дает права смены работодателя довольно долго. Кроме того, она квотируется очень сильно - ограничено число заявок в год. А если заявок больше, чем квота позволяет включается "лотерея", кого выбрал господин случай и госпожа удача - дают визу, а кого не выбрал - ждет еще год (весьма неприятный расклад, согласитесь). Также есть лимит на число таких виз на компанию, например, с этим связан факт, что Facebook перестал нанимать россиян в США, а нанимает теперь в Лондон, ибо квоты по визам сильно исчерпаны.

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

Ирландия

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

Жена также может работать на полную ставку, виза этого не ограничивает :)

Англия

Виза называется TIER-2.  Этот случай я могу рассказать в подробностях, так как получал эту визу сам, можете спрашивать в комментариях, если что-то интересно.

Виза дает право работы супругу/супруге. Требуется подтверждения владения языком, для этого нужно сдать IELTF for UKVI по меньшей мере на 4-5 баллов каждый блок. А также сдать анализ на туберкулез в специализированной клинике. Кроме того, для супруга/супруги нужно доказательство наличия денежных средств (3 тысячи долларов на счету на срок не менее 3х месяцев), если Ваш спонсор не имеет так называемого A-grade рейтинга при UKVI.

Виза обычно оформляется за несколько недель, если не возникает проблем.

Кроме этого, стоит упомянуть, что многие компании из США используют Англию и Ирландию как промежуточный плацдарм и потом все равно переводят сотрудников (при их желании, а иногда и без) в Штаты по L blanket petition.

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

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

Собеседования в западных компаниях - onsite интервью

Эта статья - продолжение предыдущей.

Итак, вы прошли телефонный этап собеседования и показали себя отличным специалистом, на которого стоит раскошелиться и пригласить его в офис.

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

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

Итак, у Вас есть виза, Вы согласовали дату поездки! Все прекрасно, сразу уточните вашу "policy" относительно трат в поездке, обычно сумма в районе 70 долларов в день, алкоголь не возмещается, бизнес-класс не возмещается. В общем можете есть, пить соки и ни в чем себе не отказывать в пределах суммы. Гостиницу также компания обычно оплачивает самостоятельно.

Собеседования "onsite" последнее время в топовых компаниях довольно стандартны. Они занимают ВЕСЬ день. Обычно включают в себя 4-6 блоков с различными инженерами. Изредка также включается ланч.

Мои собеседования выглядели примерно так:
  • System design
  • Development / programming
  • Linux
  • Management / Cultural fit
  • Networking 
В Вашем случае все будет иначе :) Готовиться ОБЯЗАТЕЛЬНО к каждому. В особенности внимания заслуживает "management / cultural fit", потому что тут от вас ожидают довольно конкретных ответов и без подготовки отвечать сложно, поэтому книжку по прохождению интервью прочесть обязательно. Также рекомендую послушать записи реальных интервью - это очень помогает. 

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

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

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

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

При этом будьте готовы сообщить реквизиты для международного (SWIFT) перевода Вам из-за границы. Здесь Вам поможет банк, я вполне доволен Альфа-Банком, у них можно бесплатно открыть долларовый счет в дополнение к рублевому.

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

После возвращения на родину нужно ждать. Если вы даже на 100% уверены в результате - не считайте, что окажетесь правы. Я проходил интервью, когда был на 100% уверен, что их провалил. И проваливал, когда был уверен, что всех сделал :) Будьте скептиком и хладно ждите своей участи :)

После этого обычно стоит ждать ответа от 2 до 4х недели и опять же, на 3-4 неделе ожидания можно подергать рекрутера на предмет решения.

После onsite интервью с вами скорее всего опять по телефону (Скайп! Скайп!) свяжется рекрутер либо Ваш будущий начальник и сообщит результаты. Вариантов два - вы прошли либо вы не прошли. В случае, если Вы молодец и сделали всех сразу же будьте готовы к "salary negotiation" (вы уже гуглите эту фразу, да? Поздравляю, идете верной дорогой!), Вы должны четко знать, сколько Вы стоите и сколько Вам нужно чтобы устроиться в эту компанию. Компании нередко берут таймаут на подумать, поэтому не пугайтесь. Но перегибать палку и просить $200 тысяч в год тоже не стоит :)

Плохой расклад - отказ.

Итак, спокойствие! Если вы провалили собеседование - это тоже победа, потому что Вы стали опытнее в прохождении собеседований и в следующий раз сделаете это намного лучше! :) Ну а ваще вы без ущерба для бюджета съездили в дивную страну и посмотрели на самого ну скажем... Цукурберга :) Кроме того, например, Facebook имеет практику приглашать "не безнадежных" (ну например запороли вы связанные списки, ну бывает же...) на повторные собеседования через год :) Я так собеседовался ТРИЖДЫ :) Так что будьте готовы и улучшайте свои навыки! 

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

После этого Вам нужно подписать "job offer" и с этого момента Вы во что бы то ни стало обязаны выйти в срок :) Ах, да, срок! Вас обязательно спросят, когда Вы готовы выйти на работу! Дj того, как вышлют оффер, поэтому будьте во всеоружии и изучите, сколько времени Вам потребуется на визу (в худшем случае), сбор вещей и прочие формальности, после этого умножьте на два (вы все равно половину факторов не учли, не льстите себе!) и сообщите этот срок работодателю. Обычно, с этим не возникает проблем, но в любом случае вопрос решается в каждом случае конкретно :)

Итак, дальше будет вопрос с визой, в моем случае Англии: https://www.stableit.ru/2016/09/tier-2.html

Собеседования в западных компаниях - offsite, до поездки в офис

Довольно объемный вопрос и я не берусь считать себя экспертом в этой области, но тем не менее хотел бы поделиться опытом.

Мой опыт основывается на собеседованиях в таких компаниях как Google, Facebook, Amazon. Собеседования были на такие роли как SRE, Production Engineer, System Engineer, Software Developer.

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

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

После обмена резюме скорее всего Вас попросят выбрать время для телефонного звонка. Сугубо по моему опыту, телефон - худший из возможных способов проведения интервью, потому что во-первых, собеседование на чужом языке и во-вторых, качество связи очень плохое. Я всегда выбирал Skype, если такая возможность была либо Hangouts. Рекомендую воспользоваться этим советом.

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

После этого, если все идет нормально и все вопросы вас устроили. Вас интересует зарплата? Можете расслабиться, никто ее никогда не скажет до момента пока Вы не получите offer :) На западе так не принято, а ориентировочные границы Вы можете найти на GlassDoor.com.

Итак, Вы прошли первичное интервью с рекрутером ("screening"). После этого, надеюсь, Вас обрадуют и предложат запланировать от 1го до 3х телефонных (читаете телефон - держите в голове Скайп!) интервью либо с инженерами либо с менеджерами.

Обычно такие интервью идут на конкретную тему, у Google, например, это было System (Linux) и Software (программирование). Поэтому к чему готовится довольно ясно, но всегда об этом можно спросить рекрутера. Например, рекрутеры Facebook Вас сами вышлют много документации о том, как и к чему готовиться. Если они этого не сделали - попросите.

Вероятность того, что в документах, кто даст рекрутер будет вопрос который обязательно зададут - очень высокая. Дальше сайты, которые вы должны изучить это GlassDoor, Quora, а также Google по запросу "interview at Company name for XXX role".

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

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

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

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

Если звезды сошлись - следующий этап onsite interview, а именно личное собеседование либо в филиале либо в головном офисе компании. Об этом отдельно :)

Продолжение

Поиск работы заграницей для ИТ специалиста

Здесь я бы хотел поделиться свои опытом в этом откровенно сложном вопросе.

Вне зависимости где Вы хотите / планируете искать работу - во-первых, заведите аккаунт в LinkedIn, он сейчас стал де-факто и де-юро сайтом, где могут найти друг друга рекрутеры и соискатели.

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

Кроме этого, есть отличный сайт Indeed.com, на котором даже можно искать по всем вакансиям заданного региона.

Кроме этого, будет очень полезно изучить сайт glassdoor.com, где собраны как реальные зарплаты работодателей, отзывы сотрудников (настоящие!), так и сами вакансии.

Разумеется, также не стоит забывать про сайт компаний и посылать резюме, если у Вас есть присмотренная компания можно и нужно напрямую.

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

Далеко не все компании берутся оформлять документы своим сотрудникам, так как в случае многих стран (например, США, Сингапур) - это ОЧЕНЬ сложный, долгий и затратный процесс. Этот вопрос нужно уточнять отдельно.

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

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

Если Вы внимательный читатель и дочитали до этого момента, у меня Вам подарок. По моей информации (верьте мне!) около 40% найма новых специалистов в топовые компании идет по рекомендации. И если у вас есть хороший друг либо знакомый, который уверен в ваших знаниях и может порекомендовать Вас рекрутеру компании - считайте Вам повезло, потому что получить шанс пройти собеседование, так и саму работу повышается многократно! Цените друзей! В поиске работы это актуально как никогда!)

Куда сбыть металлические монеты / мелочь в Питере?

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

В процессе разбора вещей обнаружилось примерно 1 килограмм мелочи в рублях и около 100 грамм в евро и долларах.

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

Как показал беглый опрос банков - задача обмена мелочи в валюте отличающейся от рубля в России неосуществимая, банки для вас этого не сделают (исключения есть, но они исчезающе малы!).

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

С иностранными деньгами все чуточку сложнее, евро я обменял в кофейном аппарате аэропорта Франкфурта используя читерскую кнопку "возврат" :) Почти все автоматы на 20 5 центовых монет скорее всего сделают возврат монетой в 1 евро :)

Как вариант, можно попробовать сходить к скупщикам монет, где у вас возможно даже немного больше курса ЦБ выкупят эти монеты либо попробовать на Авито.

воскресенье, 28 августа 2016 г.

Как приручить трафик или traffic engineering в деталях

Как приручить трафик?

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

Как известно, Internet traffic engineering включает в себя множество задач управления трафиком главной целью которых является обеспечение надежной и эффективной работы каналов сети Интернет.

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

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

Существует по меньшей мере три типа автономных систем интернета - генераторы трафика (отношение исходящего трафика к входящему превышает 2), потребители трафика (отношение входящего трафика ко входящему превышает 2) и магистральные провайдеры ( отношение входящего ко входящему равно).

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

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

При использовании full bgp view, со стороны всех провайдеров мы получаем маршруты до всего интернета и мы должны выбрать лучший. Выбор лучшего осуществляется на основании ASPATH - числа автономных систем между нами и получателем трафика. Этот метод довольно эффективен и требует минимальный уровень контроля со стороны администратора.

Если же по тем или иным причинам у нас трафик распределился по провайдерам неравномерно, то мы должны прибегнуть к local preference , выбрать наиболее нагруженные направления, куда отправляется трафик и сделать путь до перегруженного провайдера хуже. Данный подход довольно эффективен. Как его альтернатива, может быть использовать policy based роутинг, чтобы в зависимости адреса от сети клиента в нашей сети направить его в тот или иной канал.

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

В случае потребителей трафика ситуация становится намного сложнее, так как арсенал средств балансировки входящего трафика все также основывается на методах выбора лучшего пути в bgp. А именно длине выше упомянутого ASPATH, а также на основании предпочтения к префиксам наименьшей длины. Поэтому все, что мы здесь можем - это использовать ASPATH prepend, чтобы сделать путь заведомо хуже через определенного провайдера. Либо же мы можем раздробить сети на более мелкие (тем самым увеличив full view, что тоже очень плохо) и увеличить поток трафика на выделенную сеть через определенного провайдера. Кроме этого, может быть использован параметр MED, чтобы выдать больший приоритет тому или иному каналу, но в этом случае нужно убедиться, принимает ли вышестоящий оператор этот параметр от вас, так как многие его обнуляют и не пропускают дальше.

Как вы можете заметить, если в случае генератора трафика мы имеем высоко автоматизированное или вовсе полностью автоматическое управление трафиком, то методы озвученные в разделе про потребителя трафика просто не будут действовать по той причине, что ожидается роутинг на основании логики алгоритма bgp, а мы её частично или даже вовсе отключили пытаясь добиться более надежной и стабильной работы своей автономной системы.

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

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

Дата написания: 26 ноября 2015 г., 12:06

четверг, 25 августа 2016 г.

вторник, 23 августа 2016 г.

Крайне неприятная фича Google Groups

Вот столкнулся с такой фишкой Google Groups, что все, кто подписывается на твою группу на самом деле не получают из нее писем, если не сделают это явно в настройках!

Несколько ласковых слов в эту сторону: https://productforums.google.com/forum/#!topic/apps/3OUlPmzKCi8

суббота, 9 июля 2016 г.

Как заставить Nginx использовать и SPDY и HTTP/2 одновременно?

Вот этим чудесным патчем от CloudFlare: https://blog.cloudflare.com/open-sourcing-our-nginx-http-2-spdy-code/

В чем суть? Суть в том, что в актуальном Nginx есть только HTTP/2, а у кучи пользователей старые браузеры и  имеется поддержка только SPDY. Патч от CF добавляет возможность выбора либо HTTP/2 либо SPDY и за счет этого серьезно увеличивает число пользователей, которые могут использовать все преимущества HTTP/2.

воскресенье, 26 июня 2016 г.

Оптимизация работы блога силами CloudFlare :)

Всем привет!

Провел большую работу по оптимизации работы блога путем подключения облачной защиты от DDoS, CDN и DNS от CloudFlare.

Что было сделано:

  • Перенос DNS на CloudFlare, он базируется на Anycast и работает очень быстро из любой точки планеты
  • Подключен протокол SSL и TLS для защиты трафика от прослушивания и подмены
  • Активирована поддержка HTTP/2 и SPDY.
  • Добавлена поддержка IPv6, теперь блог полностью доступен по данному протоколу!
  • Добавлены DNS серверы поддерживающие IPv6, теперь блог будет работать даже с IPv6-only машин.
  • Добавлены CloudFlare Page Rules для перенаправления с http на https версию, так как сам движок Google Blogger такое не умеет.

В FireFox могут наблюдаться небольшие уведомления по поводу небезопасности отдачи контента, но надеюсь, Google скоро это исправит. Также возникла проблема с Navbar (полоска в самом верху, где был поиск), ее также отрепортил в Google.

Не удалось добиться работы DNSSEC, так как регистратор моего домена REG.RU не поддерживает этот протокол несмотря на свои обещания еще из 2012го года его добавить.

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

Работать сайт стал ощутимо быстрее, рекомендую всем :)

понедельник, 20 июня 2016 г.

Руководство по уходу за дисковой подсистемой выделенного сервера

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

Профилактических мероприятий тут два: RAID массивы (с резервированием - raid - 1, 5, 6 10, raid-0 и его производные защиты от потери данные не дает) и самостоятельное слежение за здоровьем дисков посредством различных средств.

Защита данных посредством RAID

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

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

Контроль состояния soft raid

Состояние soft-raid можно посмотреть командой:
cat /proc/mdstat
если все хорошо, то выдано там будет примерно следующее:
cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md2 : active raid1 sda3[0] sdb3[1]
20972736 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
2104448 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
4200896 blocks [2/2] [UU]

Если же один из дисков откажет, то вместо [UU] будет [U_] либо [_U], это означает, что нужно написать в поддержку и указать на отказ одного из дисков и проблемы с RAID массивом. Вам должны будут заменить диск и, возможно, еще собрать массив.

Как же это автоматизировать? Не каждый же день дергать эту команду! Вообще, лучше каждый день. Потеря 1 секунды в сутки намного менее фатальна, чем отказ диска с информацией за годы. Конечно, есть способы автоматизации в виде mdadm monitor, но они упираются в электронную почту, которая никогда ни гарантией получения уведомления не отличалась. Так что если у Вас есть соответствующие знания, то пожалуйста, иначе - лучше руками.

Дает ли RAID гарантию от потери данных по механическим причинам?

Если же за RAID массивом следят и он всегда в состоянии ACTIVE, то я могу быть совершенно спокоен за данные? Да вот совершенно нет, кстати. Почему же? Во-первых, отказать могут сразу два диска (случай почти нереальный, но тем не менее согласно теории надежности имеющий место быть), может отказать электроника на одном из дисков, которая перестанет диагностировать ошибки чтения / записи (ввода-вывода) и на рабочий диск будет сдублирован мусор в итоге в лучшем случае немного повредится файловая система (обычно, лечится fsck), а в худшем будут потеряны данные. В своей практике я сталкивался с таким случаем и что-либо сделать в этом случае было нельзя.

Как защититься от форс-мажорных проблем c RAID

Для защиты от такого рода ошибок существует механизм само-тестирования массива. Когда система (по крону) раз в неделю запускает посекторное сравнение дисков массива и если находит отличия, сразу сообщает о них. Более подробно, об этом можно прочесть здесь: http://phpsuxx.blogspot.com/2010/04/warning-mismatchcnt-is-not-0-on-devmd2.html


Теперь немного о самих жестких дисках.

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

S.M.A.R.T мониторинг жестких дисков

С мониторингом SMART посложнее, для его контроля используется пакет smartmontools (в CentOS его ставить: yum install -y smartmontools, в Debian: apt-get install -y smartmontools), в составе которого идет утилита smartctl, которая позволяет получить информацию от SMART подсистемы жестких дисков следующим образом:
smartctl --all /dev/sdX
Где sdX имя интересующего Вас жесткого диска (список имеющихся жестких дисков при использовании soft-raid можно посмотреть в команде cat /proc/mdstat). Тут в первую очередь стоит обращать внимание на параметр reallocated sectors, если он больше 20-30, то значит диск, скорее всего, скоро выйдет из строя и таже нужно написать в поддержку с просьбой его заменить.

Также в самом низу выдачи есть блоки "SMART Error Log Version: 1" - там могут быть большие записи (с кучей 16-ричных адресов), повествующие об отказе какой-либо из частей диска; если же диск в норме - там все должно быть пусто - "No Errors Logged". Кроме него, есть еще блок "SMART Self-test log structure revision number 1", в который пишутся результаты диагностических само-тестов диска. В нормальных условиях он выглядит так:
# 1  Short offline       Completed without error       00%     26274         -# 2  Short offline       Completed without error       00%     26248         -# 3  Short offline       Completed without error       00%     26226         -# 4  Short offline       Completed without error       00%     26200         -# 5  Short offline       Completed without error       00%     26178         -# 6  Short offline       Completed without error       00%     26151         -# 7  Short offline       Completed without error       00%     26127         -# 8  Extended offline    Completed without error       00%     26062         -

Но эти самые тесты нужно запускать либо вручную либо силами того же smartmontools'а (путем правки  /etc/smartd.conf).

Вручную запуск ускоренного теста осуществляется вот так:
smartctl -t short /dev/sdX
Запуск расширенного теста:
smartctl -t long /dev/sdX
Через некоторое время после запуска (несколько минут для короткого и до получаса-часа для длинного) поле "SMART Self-test log structure revision number 1" будет заполнено и будет добавлена информация о завершении теста.

Если какой-либо из тестов FAILED, то это повод идти к оператору Дата Центра и запрашивать замену сбойного диска.

Косвенный мониторинг состояния жесткого диска

Самый очевидный вариант - когда жесткий диск был выброшен из RAID массива по причине FAULTY (то есть возникла ошика ввода вывода и диск был отключен). Также косвенным показателем отказа дисков являются разнообразные ошибки (например I/O error) в выдаче команды dmesg.

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

Если с RAID и SMART все в порядке, могу ли я быть спокоен за данные?

И снова нет. Для полной защиты необходим последний штрих - бэкапы на внешнем носителе.

Бэкапы

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

Руководство новобранца по OpenVZ

Если Вам в руки неожиданно попадается OpenVZ ранее установленный кем-либо то этот гайд как раз для вас! Подразумевается, что OpenVZ у Вас стоит на базе CentOS 6. Про чудо-юду на базе CentOS 7 я писать отказываюсь наотрез :)

Итак, начнем. Что такое OpenVZ - это технология позволяющая запустить несколько копий операционной системы Linux в пределах одного физического сервера.

Итак, получить список всех имеющихся на сервере виртуальных окружений (также будет использоваться термин "контейнеры") можно командой: vzlist

Выдача которой имеет примерно такой вид:
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
      1001        182 running   xx.xx.xx.xx  domain.ru
      1002          - stopped   xx.xx.xx.xx  second.domain.ru
Для идентификации контейнеров используется так называемый идентификатор контейнера - CTID. Его требуется использовать, если нужно что-либо сделать с контейнером.

Что с ним можно сделать?

Выключить (но если настроена его автозагрузка после нее он запуститься вновь):
vzctl stop 1001
Запустить:
vzctl start 1001
Отключить загрузку при запуске сервера (параметр --save необходим):
vzctl set 1001 --onboot no --save
Как искушенный системный администратор, явно вы будете использовать программы ps, lsof, top, netstat, ss и прочие на физическом сервере, где работает OpenVZ. Спешу Вас расстроить - эти утилиты не изолированы и будут показывать все процессы и все соединения принадлежащие всем виртуальным контейнерам на заданном сервере поэтому толку от этих программ не будет вовсе.

Итак, мы поняли как производить базовые операции с контейнерами.

Пройдемся по конфигам, стандартно конфигурации контейнеров хранятся по адресу /etc/vz/conf/CTID.conf, где CTID - идентификатор заданного контейнера. Конфиги довольно легки к пониманию и поддаются правке. После правки обычно требуется перезапуск: vzctl restart CTID.

Итак, но где же данные? Внимание! Сейчас они появятся. У OpenVZ используется две схемы размещения данных виртуального контейнера - ploop и simfs. Если у Вас ploop - это все усложняет и выходит за рамки статьи. В ploop данные хранятся в отдельном диске-образе и чтобы до них добраться нужно немного магии (магия простая - vzctl mount).

В случае же simfs данные доступны по адресу: /vz/private/CTID. Причем, вне зависимости от того, запущен контейнер или нет, все содержимое его жестких дисков находится там.

Теперь о том, как войти на контейнер OpenVZ. Тут два пути: обычный, силами ssh запущенного в виртуальном окружении и необычный - силами специальной команды.

Итак, необычный способ входа в OpenVZ контейнере следующий:
vzctl enter CTID
После этого Вам будет предоставлен доступ с root полномочиями в заднное виртуальное окружение так, как будто вы сидите напротив сервера и сидите с локальной консоли, разве что у Вас не будет запрошен никакой пароль. Выйти из этой консоли можно командой exit либо сочетание CTRL+D.

Теперь пару слов о багхантинге. Если Вы нашли эту статью, то явно с Вашим OpenVZ что-то не так!

Основные пути проверки проблем - это dmesg, в случае чего-то фатального о проблемах сообщит ядро. Второй частый историк проблем - исчерпание ресурсов внутри контейнера. Это можно зафиксировать стандартными утилитами free/top, но даже если они говорят, что все в порядке, Вам на помощь приходит файлик:  /proc/bc/CTID/resources, в котором можно найти вот такое содержимое:
            kmemsize                414620051            591908864  9223372036854775807  9223372036854775807                    0
            lockedpages                  4033                 7339              8388608              8388608                    0
            privvmpages               1809462              3191128  9223372036854775807  9223372036854775807                    0
            shmpages                    13839                15135  9223372036854775807  9223372036854775807                    0
            numproc                       179                  453  9223372036854775807  9223372036854775807                    0
            physpages                 6182653              6479824                    0              8388608                    0
            vmguarpages                     0                    0              8650752  9223372036854775807                    0
            oomguarpages              1344550              1532976              8388608  9223372036854775807                    0
            numtcpsock                    852                13014  9223372036854775807  9223372036854775807                    0
            numflock                        7                   43  9223372036854775807  9223372036854775807                    0
            numpty                          2                   31  9223372036854775807  9223372036854775807                    0
            numsiginfo                      0                  639  9223372036854775807  9223372036854775807                    0
            tcpsndbuf                35976592            382477672  9223372036854775807  9223372036854775807                    0
            tcprcvbuf                29720624            287987552  9223372036854775807  9223372036854775807                    0
            othersockbuf               210392              6495528  9223372036854775807  9223372036854775807                    0
            dgramrcvbuf                     0               661240  9223372036854775807  9223372036854775807                    0
            numothersock                  144                  957  9223372036854775807  9223372036854775807                    0
            dcachesize              309714841            310094288  9223372036854775807  9223372036854775807                    0
            numfile                      5474                11610  9223372036854775807  9223372036854775807                    0
            numiptent                      30                   30  9223372036854775807  9223372036854775807                    0
            swappages                    2372                 2967                    0               262144                    0
Обращайте внимание на последний столбец, если в нем не нули, значит контейнер упирается в заданный ресурс. И нужно разобраться - почему и решить проблему либо же увеличить лимит заданного ресурса путем правки конфигурации контейнера.

Ну вот, пожалуй, и все, что нужно знать про OpenVZ :)

воскресенье, 19 июня 2016 г.

Отключить IPv6 в Mac OS El Capitan

Из стандартного интерфейса не получится.

Используем магию:

networksetup -setv6off Wi-Fi
networksetup -setv6off Ethernet

Чтобы включить заново:
-setv6automatic
Причем, в интерфейсе будет корректно отображено "выкл" напротив IPv6.

Источник: https://louisville.edu/it/departments/communications/wireless/wireless-connection-problems-how-to-disable-ipv6 


суббота, 18 июня 2016 г.

Отсортировать размеры файлов в человеко-понятной форме

Очень часто встречаются данные вот в таком формате:
2,6G3,8G789M3,1G3,3G699M43M103M1,9G3,9G115M2,9G326M25M
И не менее часто нужно иметь возможность их отсортировать.

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

На самом деле просто - использовать sort с ключем -h и на выходе получаем сортированные данные:
cat example.dat | sort -h

Выдача:
cat /tmp/example.dat |sort -h 25M43M103M115M326M699M789M1,9G2,6G2,9G3,1G3,3G3,8G3,9G
Но стоит отметить, что требуется довольно новый sort, в старых версиях этой фишки не было.  Например, в Убунту 16/04 такой вариант точно работать будет!

пятница, 17 июня 2016 г.

Конфигурирование сетевых интерфейсов в Ubuntu 16.04 удобно как никогда!

Удобное создание конфигов в отдельных файлах:
vim /etc/network/interfaces.d/eno1
Вот пример статической конфигурации:
auto eno1
iface eno1 inet static
address xxx
netmask 24
gateway yyyy
dns-nameservers  zz.zz.zz.zz aa.bb.bb.cc
Как же давно я этого ждал :)

Передернуть конфиг можно так:
sudo systemctl restart networking  

четверг, 16 июня 2016 г.

Продаются книги по ИТ не не только - только Питер

Всем привет!

Продаются следующие книжки, только Питер, географически - север синей ветки, метро пионерская:

  1. 100 Легендарных самолетов 250
  2. Cockpit confidential Patrick Smith 350
  3. Left behind Лахей и Дженкинс Жатва человеков: 150
  4. Sudents International гид по зарубежному образованию 200
  5. О Мексика - Люси Невилл: 250
  6. Веб аналитика Яковлев Довжиков: 150 р
  7. Ядро Линукс - Бювет Чезатти 850
  8. Ставь Цели - Ицхак Пинтосевич: 150 р
  9. Артур Хейли Отель 100р
  10. Книга начинающего инвестора Антон Монин 200
  11. Волчьи стаи - подводные асы гитлера - 200
  12. Научные теории за 30 секунд 150
  13. Мексика Потенциал Экономического развития Школяр: 300
  14. Оптимизация и продваижение Ашманов и Иванов: 350
  15. Контекстная реклама Seopult: 350 рублей
  16. Контекстная реклама Яковлев Довижиков: 200 рублей
  17. Конституция Эстонии: 100 рублей
  18. ПДД РФ + Экзамен ГИББ АБСД + Безопасность дорожного движения + Экзаменационные билеты АБ с комментариями: 500 рублей
ИТ:
  1. Junos for Dummies - Goralskiy 1000 р
  2. Linux азбука ядра Родригез и Фишер - 500
  3. Linux руководство программиста Фуско 350
  4. Linux программирование в примерах Роббинс 200
  5. STL спарвочное руководство Мюссер 1000
  6. Сеть Эндрю Блам 150
  7. Основы работы с Линукс Войтов - 200
  8. Тайм менеджмент для системных администраторов Томас Лимончелли 350

Если есть интерес, пишите конаткты в комментариях либо звоните: +79516808811.

воскресенье, 12 июня 2016 г.

пятница, 10 июня 2016 г.

11 reasons why you should avoid OpenVZ and Virtuozzo in any cases!


I want to share few words about me. I'm CTO of FastVPS Eesti OU with ~8 years of overall experience with containers and OpenVZ. I'm author of following tools for OpenVZ:

  1. Ploop userspace (user mode implementation of ploop filesystem)
  2. Fast incremental difference algorithm for ploop images.
  3. Author of script for TC based shaper for OpenVZ
And also, I'm author of 175 bug and feature requests at OpenVZ bug tracker.

From the operational side we have about few hundreds of physical servers with OpenVZ (VZ6 based) with pretty huge density and I'm trying to keep my hands dirty and dig into details of any issues.

What you should expect following technical issues when you are working with OpenVZ:

  1. Very often and repetitive kernel faults for different reasons even on top of top-notch hardware with ECC, redundant power and battery backed RAID's
  2. Huge disk space (up 30-40% in some cases) overuse if you decide to use ploop filesystem (that's true for VZ7 too). 
  3. Pretty often storage faults with complete data corruption if you are using ploop. You could read more details about it here.
  4. If you want to get security updates in timely manner you should not rely on OpenVZ team. You should use some external toolkit for applying patches to running kernel (Ksplice, Kpatch or Kernel Care).
  5. You should expect a lot of issues already fixed in recent kernels because OpenVZ project are relying on already outdated RHEL 6 or RHEL7 (based on top of 3.10 but current version is 4.6) kernel. You definitely know about huge backport work of Red Hat but these kernels are really outdated and you could get significant speedup with update to recent vanilla kernel (as Oracle or Ubuntu already doing). But please keep in mind if you are running OpenVZ (VZ7) you are running already outdated toolkit.
  6. You should expect significant changes without backward compatibility in next major release of OpenVZ (for more details please read more details about prlctl and vzctl). In some nice moment you should rewrite all your integration code from billing, configuration management and support control subsystems.
  7. Very poor QA and issues with pretty obvious things.
  8. Almost each upcoming systemd update in container may require new kernel from OpenVZ / Virtuozzo team. Actually, this updates could break your running kernel. 


If we are speaking about overall experience about project I could share my ten cents below:

  • You should not expect any openness in the decision making of OpenVZ project development. That's still true for day-to-day issues (bug priority) and for helicopter view (strategic planning). That's still commercial company and they will not discuss roadmaps with the community. If they decide to do something they will do it even if community hate their decisions. You should check "simfs deprecation" conversation in OpenVZ Users maillist for details.
  • You should have very experienced system administrator who should dig into details of each issue and system instability. 
We are discussed a lot of issues about OpenVZ project. But I want to highlight few issues abut container aware isolation technologies. We have two options if we want to isolate applications in containers:

  • OpenVZ (VZ6, VZ7)
  • Linux upstream containers (managed by LXC or Docker)

Unfortunately, Linux upstream containers could not run whole OS properly they are pretty insecure in compare with OpenVZ. But if you want to isolate your own applications I want to recommend to use Docker because they have a lot of benefits and haven't almost all OpenVZ issues.

But if you want to isolate whole operating systems (for making VPS service) I want to recommend KVM technology. But KVM has significant overhead in compare with containers! Actually, it's true only partially because Intel have been doing a lot of things for improving performance of hardware based isolation and recent CPU's (Xeon E3, E5) has lightning fast KVM implementation! But please be careful and do not use RHEL 7 (do you remember? It's already outdated and you could host more VM's per host with recent kernel!) and look at vanilla kernel, Oracle kernel or some other project which offer recent and stable kernel.

Finally, I really like container isolation and I will be happy when all mentioned issues will be fixed ;)

Thanks for attention! 

понедельник, 6 июня 2016 г.

Debian, KVM and PCI-E passthrough for Intel 82599 / Intel X-540 NIC's

First of all, please enable hardware virtualization and VT-d (I/O virtualization) in BIOS. It's mandatory!

Install KVM tools and distro install tools on the Debian:
apt-get install -y qemu-kvm  libvirt-daemon libvirt-clients libvirt-daemon-system virtinst
Enable libvirt and libvirt.guests services:
systemctl restart libvirtd.service
systemctl restart libvirt-guests.service 
Run default network:
virsh net-autostart default
virsh net-start default
Install Debian Jessie:
virt-install --location http://ftp.us.debian.org/debian/dists/stable/main/installer-amd64/ --ram 16000 --file  /var/lib/libvirt/images/fastnetmonvm.fastvps.ru.disk  --file-size 20 --name fastnetmonvm.fastvps.ru -x console=ttyS0 
Switch on autostart for VM:
virsh autostart fastnetmonvm.fastvps.ru 
Well, we should pass whole NIC to VM.

List all available NIC's on the server:
lspci |grep Ether
03:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
03:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
07:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
We will pass two NICs (it's two port NIC card):
03:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
03:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
Get PCI device names in virsh format (03_00_0 created from 03:00.0 with changing ':' by '_'):
virsh nodedev-list | grep pci |grep 03_00_0
pci_0000_03_00_0
pci_0000_03_00_1
Get XML descriptions for both PCI devices:
virsh nodedev-dumpxml pci_0000_03_00_0
virsh nodedev-dumpxml pci_0000_03_00_1 
Switch off drivers for this NIC's on server:
ifconfig ethX down
rmmod ixgbe
Detach both NIC from the Linux:
virsh nodedev-dettach pci_0000_03_00_0
virsh nodedev-dettach pci_0000_03_00_1
If you got: "error: Operation not supported: neither VFIO nor KVM device assignment is currently supported on this system".

Well, we should enable IOMMU for fixing this issue:
vim /etc/default/grub
Change following line to:
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
Apply grub settings:
update-grub
And reboot server:
shutdown -r now
Then repeat last steps.

List devices from virsh:
virsh nodedev-dumpxml pci_0000_03_00_0 |grep address
   <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
   <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/> 
Then please build something like this using data above:
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
      <address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
  </source>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
      <address domain='0x0000' bus='0x0a' slot='0x00' function='0x1'/>
  </source>
</hostdev>
Then open VM edit and insert this block to "devices" block:
virsh edit fastnetmonvm.fastvps.ru
Then you could try to run VM:
virsh start fastnetmonvm.fastvps.ru
You could get error similar to this:
error: Failed to start domain fastnetmonvm.fastvps.ru
error: internal error: early end of file from monitor: possible problem:
2015-05-13T13:12:39.353614Z qemu-system-x86_64: -device vfio-pci,host=0a:00.0,id=hostdev0,bus=pci.0,addr=0x6: vfio: failed to set iommu for container: Operation not permitted
2015-05-13T13:12:39.353761Z qemu-system-x86_64: -device vfio-pci,host=0a:00.0,id=hostdev0,bus=pci.0,addr=0x6: vfio: failed to setup container for group 23
2015-05-13T13:12:39.353780Z qemu-system-x86_64: -device vfio-pci,host=0a:00.0,id=hostdev0,bus=pci.0,addr=0x6: vfio: failed to get group 23
2015-05-13T13:12:39.353804Z qemu-system-x86_64: -device vfio-pci,host=0a:00.0,id=hostdev0,bus=pci.0,addr=0x6: Device initialization failed.
2015-05-13T13:12:39.353827Z qemu-system-x86_64: -device vfio-pci,host=0a:00.0,id=hostdev0,bus=pci.0,addr=0x6: Device 'vfio-pci' could not be initialized
If you have something like " vfio-pci 0000:0a:00.0: Device is ineligible for IOMMU domain attach due to platform RMRR requirement.  Contact your platform vendor." in dmesg that's not a good news for you. You could not use IOMMU for your server and need to buy another.

For fix issue "vfio_iommu_type1_attach_group: No interrupt remapping support" please use:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio_iommu_type1.conf
And reboot again.

Sources:   https://www.paloaltonetworks.com/content/dam/paloaltonetworks-com/en_US/assets/pdf/framemaker/61/pan-os/NewFeaturesGuide/section_7.pdf and http://h20564.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c03645796

 

четверг, 2 июня 2016 г.

Почему для DDoS защитных туннелей лучше L2TP?

We strongly recommend to use l2tp instead gre because of the MTU issues.
On GRE fragmentation does not exist, fragmentation occurs at IP level (it send ICMP-need-to-frag on packets larger than MTU and packet itself gets dropped).

TCP MSS adjustment (is applied before tunnel) means that you can mangle MSS of TCP SYN packets leaving your network in order that incoming packets do not exceed your maximum MTU (of the tunnel). Adjusting MSS works only for TCP.

L2TP does not need MSS clamp and works for any packet that it need to transport (TCP,UDP, etc.) by fragmenting packets inside the tunnel.
By fragmenting packets inside the tunnel, no ICMP-need-to-frag nor TCP MSS mangling is required.
I think we can use 2 IP addresses, our provisioning team will come back with an answer.

(c) ответ саппорта Voxility.com

Полностью подтверждаю такое положение вещей, L2TP намного более удобен и безгеморроен, чем GRE.

пятница, 27 мая 2016 г.

Механические диски must die! SSD рулез!

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

Потом провел замеры на своем тест сервере с SATA / 7200 механика и получил 17 минут на обработку где-то 2х гб данных в формате Graphite / whisper:
2016-05-27 10:29:58,170 [INFO] Start max calculation for all elements
2016-05-27 10:46:47,079 [INFO] Finished max calculation for all elements
После двух дней оптимизации кода улучшить этот параметр не удалось.

А вот такой результат удалось получить перенеся данные с SATA на SSD KINGSTON SV300S37A60G:
2016-05-27 18:18:20,877 [INFO] Start max calculation for all elements
2016-05-27 18:18:27,772 [INFO] Finished max calculation for all elements
Да, 7 секунду. Именно так! После 17 минут мы получили 7 секунд на обработку того же объема данных :)

Разумеется, страничный кэш в обоих случаях сбрасывался. Вот так-то. Конечно, оно очевидно, что SSD быстры и хороши во всем, но чтобы НАСТОЛЬКО быстрее, я искреннее удивлен, правда. 

четверг, 26 мая 2016 г.

Реверс трафик инжиниринг

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


четверг, 19 мая 2016 г.

Сегодня (19го мая) иду на 2016: Конференцию «Российский день IPv6» в Центральном музее связи им. А.С. Попова

Всем привет!

Всем привет! Сегодня иду на 2016: Конференцию «Российский день IPv6» в Центральном музее связи им. А.С. Попова по адресу: г. Санкт-Петербург, Почтамтский переулок, д. 4. Начало мероприятия в 13.00.
Кто хочет поболтать за кофе - милости прошу ловить меня там :) Кому нужен - пишите контакты в комментах. 

понедельник, 11 апреля 2016 г.

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

Так как я ярый адепт технологии flow spec, то просто обязан сделать этот пост. В нем буду перечислять магистральных провайдеров выдающих услугу BGP Flow Spec (RFC 5575) конечным пользователям. За что им огромное спасибо :)

Итак, начнем:

  1. RETN, http://retn.net/
  2. Rascom, http://www.rascom.ru/
  3. Комфортел, http://comfortel.pro
Условия предоставления услуги варируются для различных клиентов, поэтому обращайтесь к своим менеджерам по работе с клиентами :)

Кто также предоставляет данную услугу, пишите мне почтой либо в комментарии, добавляю в список :)

среда, 16 марта 2016 г.

Возгорание в ДЦ Selectel

Волею судеб у нас на этой площадке находится оборудование: http://www.fontanka.ru/2016/03/16/116/

Да, оно резервировано на другую площадку - поэтому никакой угрозы дорогим клиентам нету :)

Но вот что нас убило, так это то, что было в первую очередь эвакуировано из Дата Центра.

Оставляю фотографию без комментариев:

Да, это Динозавр. 

понедельник, 14 марта 2016 г.

Активация kernel dump's на Ununtu 14.04

Создаем папку для дампов памяти падающих программ:
mkdir -p /var/log/dumps
chmod -R 755 /var/log/dumps
Указываем путь для сохранения дампов явно:
echo 'kernel.core_pattern = /var/log/dumps/core.%e.%p' > /etc/sysctl.d/10-coredump.conf
sysctl --system
Также если существует файл /etc/default/apport в него нужно вписать:
enabled=0

Иначе при ребуте он пропишет свою программу вместо обычного сбора дампов на диск.

Далее нам нужно для конкретного приложения, которое мы собираемся отлаживать задать актвиацию дампов памяти:

Стандартно дампы отключены:
# ulimit -a|grep core
core file size          (blocks, -c) 0

# ulimit -c unlimited
# ulimit -a|grep core
core file size          (blocks, -c) unlimited

Много советов в сети, что активировать дампы "правильно" нужно через /etc/security/limits.conf, но это не так, это будет работать лишь в случае, если сервис использует PAM, а это очень часто НЕ так.

Так что нужно в блоке start init.d скрипта, который запускает интересующую Вас программу добавить строку: 
ulimit -c unlimited
После того, как прописали это для сервиса, перезапускаем его и убвеждаемся, что дампы включены (18829 - здесь PID процесса, дамп памяти которого Вы хотите в результате получить):
cat /proc/18829/limits |grep core
Max core file size        unlimited            unlimited            bytes  

Отладка Upstart

Довольно просто :)

Открываем конфиг:
vim /etc/default/grub
Там правим:
GRUB_CMDLINE_LINUX_DEFAULT="--verbose"
После этого апаем grub:
update-grub2 
И ребутимся :) После этого логи будут писаться прямо в dmesg, где можно проверить корректность и последовательность запуска сервисов.  

В gcc 5.3 сломали бинарную совместимость с clang (и всеми прочими компиляторами) :(

В "фиче" виноваты разработчики gcc: https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-3.6/+bug/1488254

По мотивам бага есть бага в трекере clang, где его авторы пытаются вернуть поддержку совместимости: http://reviews.llvm.org/D12834

А пока же попытка слинковатся силами clang с библиотекой (с поддержкой С++11), собранной силами gcc 5.3 обречена на провал.

Ошибочки будут вот такие:

/root/fastnetmon/src/fastnetmon.pb.cc:(.text+0x16e6): undefined reference to `google::protobuf::internal::empty_string_'

понедельник, 7 марта 2016 г.

Установка модуля testcookie для Nginx без рекомпиляции Nginx

Мы обсуждаем, что берем Nginx и ставим его на Debian 7 или 8, на котором уже работает nginx из пакетов с сайта nginx.org.

Ставим Nginx из репозитория с офсайта.

Проверяем его версию:
nginx -V 2>&1|grep "nginx version"
nginx version: nginx/1.9.12

Потом там же берем опции компиляции:
nginx -V

Стягиваем модуль:
cd /usr/src
git clone https://github.com/kyprizel/testcookie-nginx-module.git

Ставим зависимости:
apt-get install -y libxml2-dev libxslt-dev libgd2-xpm-dev libgeoip-dev 
Собираем модуль:

cd /usr/src
wget 'http://nginx.org/download/nginx-1.9.12.tar.gz'
tar -xzvf nginx-1.9.12.tar.gz
cd nginx-1.9.12/
# configure параметры берем из выдачи nginx -V выше
./configure --add-dynamic-module=/usr/src/testcookie-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6
Собираем:
make

Потом берем бинарик:
mkdir /etc/nginx/modules
cp ./objs/ngx_http_testcookie_access_module.so /etc/nginx/modules

И добавляем в nginx.conf в самом верху:
load_module "modules/ngx_http_testcookie_access_module.so";

Если мы собирали не под ту версию, то в ответ получаем (и идем собирать под нужную):
[....] Restarting nginx: nginxnginx: [emerg] module "/etc/nginx/modules/ngx_http_testcookie_access_module.so" version 1009011 instead of 1009012 in /etc/nginx/nginx.conf:8

Получаем облом, если использованные параметры будут отличаться от тех, с которыми собран наш nginx:
[....] Restarting nginx: nginxnginx: [emerg] module "/etc/nginx/modules/ngx_http_testcookie_access_module.so" is not binary compatible in /etc/nginx/nginx.conf:8


Перезагружаем:
service nginx restart

Убеждаемся, что все загрузилось:
cat  /proc/5731/smaps |grep test
7f18c8441000-7f18c8448000 r-xp 00000000 09:02 6035144                    /usr/lib/nginx/modules/ngx_http_testcookie_access_module.so

суббота, 5 марта 2016 г.

Монтирование папки с удаленного сервера силами SSH на Mac OS X El Capitan

Сначала стягиваем и ставим Fuse For OS X 3ю версию:
https://sourceforge.net/projects/osxfuse/files/osxfuse-3.x/

При установке явно ставим флажок MacFux Compatibility Layer!

Потом стягиваем и ставим актуальную версию файла sshfs-X.pkg отсюда: https://github.com/osxfuse/sshfs/releases 

Монтируем:
mkdir remote
sshfs [email protected]: remote
Предыдущий способ был бесконечно медленный, поэтому полез в интернеты за рецептами и нашел, что помогло мне:
sshfs [email protected]:/root remote -o auto_cache,reconnect,defer_permissions,noappledouble
Отмонтировать можно как обычный диск через Finder, но у меня этот способ не сработал!

Поэтому для отмонтирования используем:

umount -f remote
Источник: сайт 

четверг, 25 февраля 2016 г.

вторник, 9 февраля 2016 г.

Фильтрация по номеру vlan в tshark - почему не работает?

Итак, Вы изучили все дебри фильтров Wireshark и смогли написать фильтр для отображения только трафика с тегом vlan.

Итак, он выглядит примерно так:

tshark -n -i eth4 -c 1000 -Y "vlan"
Но он упорно не работает, хотя Вы четко уверены - vlan трафика там куча!

Вот решение:

ethtool -K eth4 rxvlan off
Вот так вот :) 

Как отключить относительные номера seq для tshark/wireshark

Всем, кто занимается глубокой работой с TCP, уверен, знакома проблема, что tshark/wireshark вместо реальных номеров seq (длиннющих чисел) отображает относительные (начинающиеся с нуля при старте сессии).

Это далеко не всегда нужно, поэтому будем отключать!

Было вот так:
tshark -r ../raw_packets_data/ip_packet_with_telnet_to_22_port_with_dropbear_from_mac_os_el_capitan.pcap -V |grep Seq    Sequence number: 0    (relative sequence number)


Стало:
tshark -r ../raw_packets_data/ip_packet_with_telnet_to_22_port_with_dropbear_from_mac_os_el_capitan.pcap -V -o "tcp.relative_sequence_numbers: FALSE" |grep seq -iTransmission Control Protocol, Src Port: 52500 (52500), Dst Port: ssh (22), Seq: 1133079759, Len: 0    Sequence number: 1133079759
Как можно видеть, помог нам флаг:  -o "tcp.relative_sequence_numbers: FALSE"

понедельник, 8 февраля 2016 г.

Проблемы при использовании union и bit fields в C++

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

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

Вот пример проблемного кода, который выглядит на первый взгляд нормально и корректно: https://gist.github.com/pavel-odintsov/71538a198a0ba53ea156

Для удобства привожу основную структуру данных здесь:
typedef union __attribute__((__packed__)) {
    uint16_t reserved_flag : 1, dont_fragment_flag : 1, more_fragments_flag : 1, fragment_offset : 13;
    uint16_t fragmentation_details_as_integer;
} fragmentation_details_t;

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

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

Как выглядит верное решение данной задачи?

Выглядит оно так - нужно внести дополнительную структур:
typedef union __attribute__((__packed__)) {
     struct { uint16_t fragment_offset : 13, more_fragments_flag : 1, dont_fragment_flag : 1, reserved_flag : 1;
    } fragmentation_details_pretty;

    uint16_t fragmentation_details_as_integer;
} fragmentation_details_t;

Такой подход не так красив, как задуманный ранее, потому что С и С++ не позволяют делать анонимные структуры и добавляется отдельный уровень вложенности. Но вот задачу данный подход решает на отлично! 

Update: как подсказал Andrew Stromnov, можно сделать намного круче - использовать GCC расширение и сделать анонимную структуру:

typedef union __attribute__((__packed__)) {
  struct {
    uint16_t fragment_offset : 13, more_fragments_flag : 1, dont_fragment_flag : 1, reserved_flag : 1; };
    uint16_t fragmentation_details_as_integer
} fragmentation_details_t;

В таком случае при доступе к полям нам не нужно будет добавлять вложенную структуру! НА мой взгляд, это серьезное удобство и ради него я согласен пойти на использование расширений стандарта :) Хотя, вроде бы в С11 эта фича в стандарте! Но не в С++, увы, пока такой фичи в С++ нету.

Учтите, в режиме pedantic будут жалобы "../isolated_example.cpp:13:5: warning: ISO C++ prohibits anonymous structs [-Wpedantic]" и "warning: anonymous structs are a GNU extension [-Wgnu-anonymous-struct]".




пятница, 5 февраля 2016 г.

Запуск tshark без root привилегий

Почти каждый, кто пользовался tshark сталкивался со следующей штукой при запуске:
tshark: Lua: Error during loading:
 [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user.
Running as user "root" and group "root". This could be dangerous.
Почти всегда можно было обойтись без этой lua обвязки, но не тогда, когда Вам нужно сделать нечто поистине необычное с трафиком!

Но тут есть фишка, Wireshark (и tshark) используют отдельную программу для запуска захвата трафика и особые capabilities нужно навешивать не на /usr/bin/tshark, а на /usr/bin/dumpcap.

Итак, попробуем научить tshark работать не от root:
sudo groupadd wireshark
sudo usermod -a -G wireshark имя_вашего_юзера
# This command should be called without sudo!
newgrp wireshark
Выставляем заданные права на спец файл, используемый для запуск захвата трафика:
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750   /usr/bin/dumpcap
Наконец, выставляем полномочия для использования фичи захвата трафика:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
Запускаемся:
tshark -i sflow1 -n  -c 1 Capturing on 'sflow1'  1   0.000000 xxx -> yyy TCP 64 34426 > 80 [ACK] Seq=1 Ack=1 Win=8712 Len=0