• Как учиться новому после рабочего дня?

    Godless
    @Godless
    Не удежусь и тоже вставлю свое словцо. Рискую местами побыть кЭпом, но вы же просили мнение... а в двух словах вон и ADollar сказал неплохо.

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

    Мы потихоньку пришли к тому, что важным ресурсом в нашей жизни является время. Я так подозреваю, что у вас семьи и детей пока нет, а значит вы сами вольны распоряжаться каждой своей минутой. ДЕЛАЙТЕ ВСЕ ЧТО МОЖЕТЕ. ВООБЩЕ ВСЕ.

    Спорт или любое увлечение с физическими нагрузками. Походы, рыбалки, DozoR, Encounter - это необходимая часть для поддержания тела. Я не врач, но жизнь без физнагрузок - это плохо.
    Не проводите 18 часов в сутках за компом или экраном монитора. Причина - у вас работа связанная с ПК. Неразрывно. Если вы будете много проводить за мониторами, то как бы вам это не нравилось - это надоест через полгода, год, два. В зависимости от вашего терпения.

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

    ДЕЛАЙТЕ. Найдите хобби. Умный дом. Просто какая-то электроника. Программирование под линукс. Написание драйверов. И под линукс тоже.
    Или поставьте цель - хочу сайт, хочу приложуху для автомобиля, чтоб по китайскому OBD адаптеру в бортовом ПК сбрасывать ошибки. Выше тоже варианты предлагали. Вообще не важно с чего вы начнете. Пусть это будет мелочь, но ЗАКОНЧИТЕ ее. Не стесняйтесь повторять. Т.е. взяли какую-то прогу, и пишем ее клон. Старайтесь выбирать вещи, которые вам интересны. К примеру, любите бегать - попробуйте сделать небольшой блютуз пульсометр. Любите рыбалку - сделайте прогу, усредняющую прогноз по координатам из разных источников. выбирайте интересные и полезные идеи.

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

    При неудачах, пробуйте снова. Настойчивость поможет вам получать удовольствие от успехов, пусть и маленьких.

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

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

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

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

    ЗЫ: А вот когда появится семья и дети, квартира и ремонт, вот тогда вы поймете, что времени действительно нет =)

    ЗЫЫ: А и да, Welcome to real life ;-)
    Ответ написан
    Комментировать
  • Какие книги по администрированию считаются Библией?

    @Lindon_cano
    Таковой считается одна книга «Unix и Linux. Руководство системного администратора» Эви Немет.
    Ответ написан
    Комментировать
  • Какие книги по администрированию считаются Библией?

    Unix и Linux: руководство системного администратора
    Ответ написан
    Комментировать
  • Как правильно комбинировать права доступа к общим папкам?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    имеет.
    Можно для пущей безопасности выставить на сетевые ресурсы не everyone а authenticated users.
    Ответ написан
    Комментировать
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

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

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

    Еще один момент. В домашних условиях можно выучить инструменты на базовом уровне. Но не поварившись в одной кастрюле с реальными разработчиками, смысл всей этой кухни не понять. Так что сразу забейте. Но если хотите, могу описать пошаговый длинный путь как стать RE/CM:

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

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

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • Как грамотно настроить автоматические обновления на боевом Ubuntu Server?

    1. По опыту скажу что на production-серверах обновление лучше делать вручную, если нету зеркального сервера для тестов. Периодичность обновления советую раз в 15-20 дней. Разумеется, в случае экстренных проблем с безопасностью типа heartbleed, как ты упомянул, обновлять надо сразу, при выпуске заплаток.
    2. Если не осиливаешь пока chef и puppet почитай про Ansible. У него порог вхождения существенно ниже чем у вышеупомянутых и поддерживать его в дальнейшем намного проще, а по функционалу, если честно, он не уступает.
    3. Общие советы.
    1. Отключи не используемые службы (rpcbind, nfscommon) к примеру
    2. Заблокируй не используемых пользователей, проверь не имеют ли системные пользователи паролей (в /etc/shadow наличие хеша во втором поле, если имеют а доступ им не нужен ставь '!')
    3. Желательно включить ssh авторизацию только по ключам, включить опцию AllowUsers со списком пользователей которым авторизироваться разрешено. Отключить авторизацию по ssh root и создать системного пользователя с оболочкой sh, без всяких привилегий. Его занести в AllowUsers, при логине выполнять /bin/su - с полным путем.
    4. По возможности все используемые службы контролировать TCP Wrappers (/etc/hosts.{allow,deny})
    5. Установить библиотеку snoopy (snoopy logger) - очень подробное логирование запускаемых процессов.
    6. Соответственно настроить rsyslog/syslog-ng и перенаправлять логи желательно на сторонний сервер. Для логов есть различные веб-морды с различными отчетами и сортировками.
    7. Для контроля версий конфигурационных файлов советую использовать git в /etc либо выносить под различные службы в отдельные репозитарии и, конечно, настроить правильно .gitignore. Тут же присмотрись к подсистеме событий файловой системе inotify и отличному демону incron. Он пригодиться может не только в этом пункте, с ним можно много интересных вещей контролировать.
    8. По возможности настраивай все службы и сервисы в chroot окружении.
    9. Iptables. Можно на нем, а можно к примеру на ipset настраивать правила. Тут все просто. Лучше сначала создай скрипт на тестовой машине. Политики по умолчанию - deny all, а дальше разрешаешь что нужно. Конкретно что то посоветовать не имеет смысла если ты как обезьянка начнешь копировать без понимания. Есть отличная литература по iptables. А дальше ищи в интернете iptables tips, примеры настройки iptables и вникай что там делают и для чего. Но не перемудри. Понимай что пакеты пробегают по всем цепочкам правил. Это нагрузно. Задумайся об использовании ipset.
      Всякие fail2ban-ы советовать не буду. Слишком спорно и не нужно если ты правильно отстроишь любой сервис работающий поверх netfilter. Так же многие хостинги из коробки имеют защиту от DDOS и брута на уровне своего железа типа ASA-к и тд.
      Периодически делай срезы tcpdump-ом (особенно в подозрительных ситуациях) и анализируй wireshark-ом.
    10. Постоянные бэкапы, хоть rsync, fsbackup, unison, bacula и тд - выбор большой


    Вообще это далеко не все, но "настроить и забыть" на production-сервере плохая идея.
    Подключай мониторинг.

    Для этого могу посоветовать 4 системы (это лично мои приоритеты, но их оочень много).
    Zabbix, Nagios, Sensu, Cacti

    Хорошим вариантом будет установка zabbix_agent-а не сервер и удаленный мониторинг с другого сервера. Настроишь свои скрипты + анализ логов syslog и вот уже залог достаточно устойчивой и на мой взгляд хорошо защищенной системы.
    Ответ написан
    6 комментариев