Есть у нас один сервак, давно отправленный на пенсию. Не сказать, что он слабый, но заменить его всё-таки пришлось: не справлялся с нагрузкой. Используем мы его для проверки всякого непонятного дерьма, стебёмся над ним, экспериментируем и прочие пытки устраиваем. В целях экономии сил мы его никогда не выключаем (сделать пару кликов — тоже истраченные калории, между прочим!), при этом используем от силы раз в пару месяцев. Сидит себе в углу, никому не мешает, лишь робко гудит кулерами и подаёт признаки жизни светодиодом питания. К слову, у сервера полный доступ ко всем сетям фирмы, включая и внешнюю. Ну что может пойти не так с сервером, который никто не трогает?
Мы, админы фирмы на постоянной основе, вроде бы как пряморукие, всё у нас работает просто прекрасно. Проблем серьёзных не возникало уже год, обращаются к нам пару раз в день насчёт замены картриджей в принтере и выключения кнопки Caps Lock. Гендир у нас тоже не дурак, понимает, что бездельничаем мы заслуженно.
Чтобы как-то убивать время, мы подсели на Team Fortress 2. После недели беспробудной игры мы нашли отличный игровой сервер: пинг был на удивление низкий. Настроен был грамотно, игралось там весело, люди были хорошие. Всё было понятно, кроме пинга в 1 мс.
Через пару дней игры одногу из наших ребят угораздило случайно кликнуть на вкладку «Локальные сервера» в игровом браузере. У всех полезли глаза на лоб. В этой вкладке значился один-единственный сервер: наш любимый. Как? Откуда? Просмотр свойств сервера и обнаружение там айпишника нашего старого доброго друга заставило нас ущипнуть друг друга. Да-да, наш любимый игровой сервер хостился в полутора метрах от нас.
Судя по логам Radmin, кто-то месяц назад в течение дня брутил пароль известным способом, который мы давно оперативно прикрыли на всех машинах, забыв лишь про героя истории. Затем на нашего дружка поставили Source Dedicated Server, настроили и установили удалённую веб-морду.
Уязвимость мы прикрыли, сменили пароли, поправили настройки игры, теперь играем и админим на свежеконфискованном TF2-сервере. Спасибо тебе, неизвестный человек! У нас бы до такого руки не дотянулись. Как же офигенно играть с нулевым пингом, да ещё и иметь админку с возможностью банить неугодных!
Писал я скрипты для SMS-рассылки (курсы валют, погода и т. п.). Так вот, в процессе тестирования вбил свой номер, чтобы видеть, что и как приходит. Дописываю, с радостным видом запускаю на рассылку и начинаю тихонько офигевать.
При более подробном просмотре кода оказалось, что я просто не там поставил скобочку. На мобильник ушло порядка 600 SMS. После удаления первой полусотни я понял, что так дело не пойдёт. Пришлось звонить оператору и объяснять техсаппорту, что, где, с каких серверов и каким образом почистить очередь.
В основе Google Android лежит Linux — это знают все. Это значит, что и мороки с ним бывает порой столько же. Вот и сейчас перелопатил кучу мануалов из-за своей невнимательности.
Переименовал папку с бэкапами системы, чтобы по ошибке потом вместо одного не восстановить другое. Потом думаю: а верну-ка я пока на свой Galaxy Ace эту альфа-версию CyanogenMod 9 (Android 4.0.4), поковыряюсь в новой «мороженке» от Гугла!
Не тут-то было: перезагрузив телефон, войдя в Recovery и сделав вайп данных на всякий пожарный, я обнаружил, что при попытке восстановить образ мне поступает жалоба на несоответствие хэшей MD5. У меня аж мороз по коже: неужели похерился? Ладно, вернём хотя бы старую инфу, а то после вайпа ставить все программы заново неохота. Выбираю бэкап CyanogenMod 7 (Android 2.3.7) — и у него та же ошибка. Тут мозг зашевелился и выдал мысль: если хэши не совпадают, значит, в файле, что лежит с архивами, зашифрованы пути. Ну и хорошо — по-быстрому гуглю онлайн-генератор хэшей, ввожу путь до бэкапа в обычном формате (/sdcard/…/data.ext4.tar), копирую в nandroid. Считаю md5 от полученных значений, сохраняю, пробую. С замиранием сердца смотрю, как телефон, проверяя хэш, долго сверяет его. «Съел! Сейчас пойдёт!» — уж было обрадовался я, но телефон огорчил меня, выплюнув ту же ошибку.
Ладно, если нельзя справиться с хэшем, значит, нужно искать другой путь восстановить информацию, ведь трафик тратить и заново настраивать телефон в два часа ночи очень неохота. Ведь можно создать зип-файл в виде обновления системы и залить его как это самое обновление. Только зип-то Андроиду не простой нужен, а подписанный, с сертификатами и manifest.mf — привет, Java!
Гуглю мануал по созданию такого архива. Пишу скрипт установки, создаю сертификат и ключ, запаковываю в архив и подписываю. Устанавливаю — и робот версии 2.3.7 шлёт меня лесом за то, что скрипт написан языком, который со времён версии 1.5 уже не использует. Ищу мануал, как переписать под 1.5+, нахожу, переписываю, перезапаковываю, переподписываю, снова пробую. «Еrror in update.zip (status 6)». Что теперь-то не так? Гуглю — либо что-то недописано в скрипте, либо кодировку такую Андроид не ест. Ага, ANSI-то не ест. Перепроверяю — вплоть до буквы всё верно, а не работает. Что, простите? Цитирую: «Note: you should add one extra line at the end of the file». Да, без лишней пустой строки скрипт не хочет запускаться.
Добавляю, провожу все операции снова — и опять, но на сей раз жалоба на update-binary. Ищу, как бороться с этим, и натыкаюсь на совет по перезагрузке Recovery. Пробую — и снова попадаю на ошибку «status 6». По запарке вместо пункта Install нажимаю Backup и наблюдаю, как радостно бегут буковки и прогресс-бар по маленькому экрану смартфона. Отменить процесс нельзя, поэтому, дождавшись завершения, решаю попробовать снова. Вновь подключение карты памяти к компьютеру и внезапное озарение экрана окном о том, что карту не помешало бы проверить на ошибки. Даю «окошкам» добро, жду окончания процесса и отключаю карту, пробую снова, возлагая на это одну из последних надежд, так как два часа плясок с бубном, скриптами и сертификатами на одном месте измотали очень сильно.
В конце концов я плюнул и просто прошил снова, устанавливая всё как обычно. Хоть и потерял многое, но запомнил снова забытое ранее правило: «Работает — не трогай!»
Дизайнерствую-фотошоплю в свободное от основной работы время. Учителя у меня были действительно шарящие, да и у самого руки не из жопы растут.
Звонит знакомая знакомых и просит отредактировать немного фоток, где она с мужем на какой-то выставке. Договорились, слила она мне их на мыло. Работа закипела: малозаметная ретушь с сохранением текстуры кожи, цветокоррекция, кадрирование, удаление ненужных деталей… Дал жене на оценку (незамыленный взгляд и всё такое) — отлично, можно отправлять.
Отправил. Гордый собой, жду реакции. Перезванивает. Достаточно сухо благодарит, внезапно начинает рыдать и бросает трубку.
Жена позже выяснила, что эта знакомая, увидев отретушированные фото, поняла, что она может выглядеть значительно лучше, а сейчас — старуха старухой.
Работал я как-то в системном интеграторе на внедрении западной системы бюджетирования для крупного холдинга. Холдинг имел в своих активах множество разносторонних предприятий от детского парка до мясокомбината. Особо запомнились в местной столовой отбивные по 25 рублей размером больше тарелки, которые даже я с трудом доедал. Но главным бизнесом холдинга было производство сигарет, поэтому пряный запах табака стоял в радиусе квартала, за что всем сотрудникам с утра выдавали бутылку минералки и пакет молока.
До внедрения все бюджеты верстались в эксельном файлике на каждом отдельном предприятии, а потом все файлы собирали вместе. Думаю, этот маразм с точки зрения айтишника, тем не менее, никого не удивит.
При входе на фабрику бдительная охрана изъяла у нас все «носители информации» — штампованные диски с ПО. Наши флешки и КПК их совершенно не заинтересовали. Удалось договориться. чтобы диски с дистрибутивами разрешили пронести в сопровождении начальников охраны и отдела IT.
Внедрение проходило довольно гладко, во многом благодаря качественной документации. Спустя десять лет скажу, что у российских систем такой не встречал.
И вот когда система была отлажена, настало время презентовать. В небольшом актовом зале собрались финансовые руководители всех предприятий и прочие причастные люди. Мой коллега начал презентацию, демонстрируя различные этапы процесса работы. Но когда на экран были выведены списки мéшек табака для различных марок сигарет, главный технолог буквально побледнел и в стремительном порыве попытался закрыть своим телом проекционный экран. Коллега, почувствовав неладное, свернул окно, а технолог с негодованием прошипел, что это великая коммерческая тайна, которую даже у них мало кто знает. Я, похолодев, перебрал в памяти все папки с копиями базы системы на рабочем компе и решил удалить их от греха подальше. А ведь к нам эти мéшки попали благодаря простому импорту по ODBC из старой компанейской базы.
Преодолев момент неловкости, мы презентацию завершили и сдали систему «на руки» начальнику отдела бюджетирования холдинга. А потом к нему подошёл слегка опоздавший финансовый начальник того самого мясокомбината и в светской беседе похвастал свежекупленным учебником «Бюджетирование в Excel 2000», чем вызвал бурный хохот среди присутствующих.
Пусконаладка завода по производству пива. Прибежало руководство: срочно обновить SCADA, переделать кое-что. Ну да ладно, дело лёгкое. Товарищ заливает обновления и…
И обливает гликолем +2 градуса целую бригаду монтажников, которые врезались в трубопровод. Оказывается, клапан охлаждения по умолчанию в SCADA был открыт. Хорошо, что это была не труба CIP, по которой иногда азотная кислота течёт.
Сетевой администратор всё правильно сделал: управляемые свитчи, пропускающие трафик только после успешного получения адреса по DHCP.
Системный архитектор всё правильно сделал, установив в серверной два DHCP-сервера и затребовав ввод электропитания от двух подстанций и автомат включения резерва.
Электрики всё правильно сделали, подключив вместо сгоревшего кабеля на 10 кВ другой кабель от другой подстанции.
Но при работах на подстанции питание пропало на какие-то секунды. Автомат включения резерва переключился на другой ввод, но подсоединился ко второму вводу раньше, чем отключился от первого. Раньше фазы были в одинаковом порядке, так что ничего особенного не случалось. В этот раз они оказались в другом. Тем временем подключился обратно первый ввод. 380 вольт оказались закорочены. Оба 100-амперных автомата вводов выключились, и серверная (в том числе кондиционер) жила на источнике бесперебойного питания, о чём слала слёзные SMS администраторам. Но кто их читает среди ночи?
К утру заряд ИБП кончился, DHCP-серверы отключились. Затем истекло время аренды, и умные свитчи заблокировали все порты. Сеть была парализована полностью.
Если положено копировальной технике стоять в отдельном кабинете, оснащенном силовыми розетками, значит, нечего перемещать оную технику в неприспособленные для этого коридоры. Вот и в этот раз не разбирающиеся в оргтехнике менеджеры распорядились освободить помещение, выставив за дверь огромный копировальный аппарат, за глаза именуемый «комбайном».
Приютился комбайн в коридоре как раз напротив входов в уборные, сузив и без того небольшой проход с 1,4 метра до 0,6. Так как запитываться комбайну от 220 было неоткуда, прокинули удлинитель из соседнего кабинета. Некоторое время народ спотыкался об удлинитель. Потом силами IT-отдела в лице сисадмина (т. е. меня) было решено организовать розетку для комбайна.
За подвесным потолком как раз над местом дислокации монстра обнаружилась распределительная коробка, от которой запитывались кабинетные розетки. Свято веря в принцип цветовой дифференциации разводки проводов по схеме «бело-оранжевый — оранжевый — бело-зеленый - …», предположил, что электрики придерживаются такого же принципа при разводке силовых линий.
Ничтоже сумнящеся, я подключил желто-зеленый к желто-зеленому по схеме «земля», синий к синему по схеме «нуль» и коричневый к коричневому же по схеме «фаза». Воткнул вилку провода от комбайна в розетку.
Бахнуло так, что всё здание офиса обесточилось. Завоняло сгоревшей электроникой.
Первая мысль: «Придется покупать блок питания для комбайна за 26 тысяч наших русских за свои кровные». Стало совсем грустно.
Вторая мысль: «Хорошо хоть серверная, запитанная от „симметры“, не вырубилась». Настроение не изменилось ни на йоту, так как Дамоклов меч, нависший над моим и без того не толстым кошельком, испаряться не желал.
Как показало расследование, в распределительной коробке из ожидаемого оказалось только одно — однофазность. Но как электрики умудрились пустить одну и ту же фазу по «фазному» (коричневому) проводу и по «нулевому» (синему), я до сих пор не понял.
В блоке питания комбайна выгорел варистор и предохранитель. В конечном итоге обошлось поиском варисторов по всему городу, новыми знаниями о типах варисторов, стоимости их поставки в Россию контейнерами ввиду невостребованности данного типа электродетали поштучно, выпаивания аналогичного варистора из старого сломанного блока питания аналогичной модели комбайна силами сервис-центра и припаивания своими силами в родной блок питания.
Замена керамического предохранителя оказалось делом более пустяковым.
После того как комбайн был собран и успешно завелся, дамоклов меч, сутки висевший над головой, растворился в нирване моей везучести.
Как лучше всего избавиться от депрессии, жаления себя любимого и вообще плохого настроения айтишнику? Поиграть в Doom? Мимо. Надраться и поорать песни? Нет. Может быть, устроить истерику с битьём посуды и морды? Тоже нет!
Лучший способ:
1. Обновить версию Убунты на сервере. 2. Зафигачить GRUB на раздел вместо диска. 3. Выругаться, когда не захочет грузиться. 4. Сделать Live USB, войти в терминал, переустановить GRUB. 5. … 6. PROFIT!
В результате имеем свеженькую версию на сервере и хорошее настроение.