Почему я не люблю Windows и топлю за Linux

Руслан, backend-разработчик Инфомаксимум, кратко о том, почему топит за связку Linux+Git+Docker и почему не любит Windows.

Почему я не люблю Windows и топлю за Linux

Здравствуйте. Сегодня мне бы хотелось поделиться своим опытом использования такого стека технологий как Linux + Git + Docker. Я расскажу:

  • как получить рабочую сборку, где можно начать вести разработку;
  • как поднимать сервис;
  • как посмотреть различия в коммитах и т.д.

Мой опыт говорит, что большинство разработчиков работает в OS Windows. Делают они это не от огромной любви к этой операционной системе, а просто не умеют или не хотят переходить на что-то другое в силу своей инертности и нежелания разбираться с чем-то новым. Однако давно известно, что вести разработку в OS Linux проще, чем в Windows. Эта операционка изначально не позиционировалась как удобная среда для разработки. Да, в ней работает большинство вещей, которые работают и в Linux, но сделано это не от “хорошей жизни”, а в стремлении не потерять часть аудитории, сидящей на этой системе. Ни Git, ни Docker не работают там нативно.

Docker был придуман как инструмент, не потребляющий лишние ресурсы. Однако чтобы Docker можно было использовать в Windows, придётся ставить виртуальную машину и уже в неё - Docker.

Это извращение чистой воды. Git ставится в своей оболочке GitBash и обратиться к нему прямо из системной консоли попросту невозможно, т.к. это не системная утилита, а некая внешняя программа, и для Windows она ничем не отличается от программы Блокнот.

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

Во-первых, идем в великий Google и набираем там слово Linux. Заходим в Wiki и находим там очень интересную картинку с иерархией Linux систем. Приведу кусок этой картинки.

Почему я не люблю Windows и топлю за Linux

Дерево систем на самом деле гораздо больше, посмотрите какое разнообразие. Критериев много, про Linux написаны целые тома, и мы, естественно, не будем говорить об особенностях пакетных менеджеров, графических оболочках и прочем. Я привык работать с Debian, Ubuntu и его форками. Поэтому, сильно не выдумывая, выбираем Elementory OS. Во-первых, это все тот же привычный apt-менеджер, во-вторых он стилизован под Mac, в-третьих репозитории базируются на Ubuntu. Хотите Mac? Пожалуйста, купите ноутбук Apple по цене «чугунного моста», а можете взять бесплатную Elementory OS и получить примерно тоже самое, только в Linux. Выбрали, устанавливаем ее. Это несложно, туториал можно посмотреть в сети или YouTube. Все. У нас есть Mac-подобная операционка, она бесплатная, она классная, она поддерживает кучу крутых технологий нативно, у нее отличная консоль, ну и так далее.

Следующим шагом ставим себе Java (рассматриваем вариант java-программирования, хотя без проблем можно организовать gcc любой версии с кучей бесплатных IDE). Забиваем в Google openjdk 8 или oraclejdk 8 (можно 9, 10, 11, 13, 14, какая необходима). Попадаем либо на сайт Oracle либо на любой сайт и скачиваем архив, чаще всего *.tgz, содержащий необходимую jdk. В Windows, например, вам бы пришлось скачивать exe-шник, инсталлировать его, чтобы система прописала его в PATH. В Linux же можно ничего не устанавливать. Не забываем добавить себя в группу sudo командой usermod -aG sudo user, где user - вы. Необходимо распаковать этот архив в удобную директорию и кинуть пару ссылок куда-нибудь, например в /usr/local/bin. И все. Этот пусть уже изначально находится в PATH. Сделать ссылку очень просто, например, вы распаковали архив в /opt/jdk-8.205. Соответственно командой

sudo ln -s /opt/jdk-8.205/bin/java (javac) /usr/local/bin

вы пробросите необходимые ссылки. Все, java в системе есть, можно начинать работать.

Теперь ставим Git. Делается это также элементарно sudo apt install git. Соглашаемся на установку буквой Y и получаем установленную Git, с которой можно прекрасно работать через консоль, потому что она нативна и никаких GitBash. Кстати, GitBash - это нелепая попытка создать микросреду Linux для Git в «винде». А не лучше ли было сразу в Linux работать=)). Не отвлекаемся. Git установлен. Теперь можно смело идти на ваш GitLab, BitBacket или какой у вас там хостинг и клонировать оттуда нужный проект. Копируем ссылку, можно http, можно ssh, если у вас уже настроены ключи в системе и хостинге (настройку ключей не описываю, не тема поста) и идем в директорию, куда будем клонировать проект. Открываем любимую консоль и пишем git clone ssh://git@.. ваша ссылка. Все, проект у вас. Далее настроим локальную среду.

git config --local user.name... пишем имя, git config --local user.email пишем почту, git config --local core.edit

пишем любимый редактор, например gedit или mousepad, или pluma, или еще что-нибудь, к чему привыкли. Ок, среду настроили. Теперь вы можете уже обновлять ветки, например...

git fetch --all && git merge @{u}

Можно смотреть диффы:

git diff HEAD~1 HEAD

Как пример, если взять два последних коммита. Не нравится смотреть в консоли? Не вопрос. Скачиваем любую мерж утилиту, например, p4Merge, прописываем ее в difftool git'a. Вуаля! У нас графическая оболочка для мержа и диффа. Можете заливать ветки git push -u origin название вашей ветки и так далее и тому подобное.

А вдруг вам нужно создать локальную ветку и настроить ее на удаленную? Один момент, git checkout --track origin/название ветки. Элементарно. Описывать все возможности Git нет никакого смысла. Хотите прокачать Skill по Git, читайте С. Чакон, Б. Штрауб “Git для профессионального программиста”. Как говорится, must have. Ок, с git разобрались.

Допустим, в вашем проекте есть база данных, и вам нужен ее локальный вариант. Можно скачать БД, прописать ее в системе. Возможно, она даже есть в репозитории Linux. Это вероятно, если это MariaDB, например, форк MySQL. Однако зачем это делать? Зачем загрязнять систему ненужными программами, когда есть такое великолепие как система виртуализации Docker? Как ее ставить? Я не помню, потому что это и не нужно. Чтобы поставить самую свежую версию, идем в Google, пишем docker docs, идем на официальный сайт, находим там раздел установки и делаем как просят:

Почему я не люблю Windows и топлю за Linux

далее

Почему я не люблю Windows и топлю за Linux

Вот и все. Не забываем добавить себя в группу docker, как мы это делали с группой sudo. Теперь у нас есть классное средство скачивать образы, разворачивать контейнеры. Например, нужно скачать образ БД ClickHouse, и на его основе поднять контейнер. Как это сделать? Просто идем в Google, пишем там docker clickhouse, переходим на сайт dockerHub, скачиваем необходимый образ. На этой же странице читаем, как поднимать контейнер. Приведем команды:

docker pull yandex/clickhouse-server; скачиваем образ базы данных. Убеждаемся что она у нас теперь есть: docker images;

Видим, что в списке образов есть yandex/clickhouse-server. Отлично, это значит, что мы теперь легко в любой момент может себе сделать контейнер с базой, подключить его и не забивать себе голову тем, что он прописался где-то в системе. Его в системе нет, и это огонь. Поднимаем контейнер командой:

docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 yandex/clickhouseserver;

Один лайфхак по контейнерам докера. Как изменить что-то внутри контейнера той же базы ClickHouse. Элементарно: пишем docker exec -it название контейнера bash. Все, мы внутри рабочего контейнера. А что внутри него? Неужели Windows? Забудьте это слово, там Linux. Делайте там, что угодно, консоль в вашем распоряжении. Хотите изменить в контейнере какой-то конфигурационный файл? Легко. Сначала проверим, что у нас присутствует классный консольный редактор Vim. Пишем

which vim; Если в ответ тишина, не отчаивайтесь, обновляем репозитории apt-get updatе; затем ставим себе vim, пишем apt-get install vim; убеждаемся, что он установился, а он как правило всегда устанавливается, за редким исключением which vim В ответ придет что-то вроде /usr/bin/vim, теперь можете править любые конфиги, например что-то типа vim /etc/clickhouse-server/config.xml;

Откроется ваша xml-ка с красивой подсветкой. Правьте, что угодно. Как пользоваться vim можно прочитать в великом Google.

Комбинацией клавиш ctrl+p+q выходим из контейнера, перезагружаем его командой docker restart clickhouse-server, и все — контейнер снова поднялся с уже измененными конфигами. Можете так быстро и легко это сделать в Windows? При необходимости можно настроить в Docker свою внутреннюю локальную сеть, соединить контейнеры между собой и т.д. Прочитайте Эдриена Моуэта “Использование Docker”, либо читайте информацию на оф. cайте.

Редактировать код можно в любых программах, начиная от обычного блокнота, что неудобно, и заканчивая продвинутыми средами разработки, например Intellij IDEA. Можно Eclipse, она бесплатная, но не такая продвинутая как IDEA. Предвкушая негодование поклонников Windows со словами: “А зачем мне это надо? Я и на Windows хорошо работаю”, сразу огорчу - попробуйте найти в Rancher инстанс своего микросервиса и что-либо там запросить. Ваши познания Windows можете забыть, они там не нужны. Вы не пользуетесь Rancher, и оно вам не пригодится? А вы точно работали когда-нибудь на серьезных коммерческих проектах или до сих пор пишите HelloWorld?

В конце хочется сказать, что в нынешнее время связка Linux+git+docker - это обязательный минимум для успешной разработки.

Читайте мануалы, изучайте документацию. Спасибо за внимание, удачи всем.

1111
14 комментариев

1. elementAry OS

2. и до бесконечности:  100500 дистрибутивов, миллионы WM, DE, форков от форков для форков, зависимость от правой пятки майнтейнера пакета  - которые snap, flatpak, appimage, rpm .... и еще установка из исходников для товарищей с миллиардом минут свободного времени.

Говнодизайн, тормоза, вечные патчинги ядра, установка/откат драйверов, нет в наличии версий под линь программ, которые и так всем известны - и да - GIMP них... не замена фотошопу.
Лин-сообщество живет в своем опакеченном мире, но вокруг деревья, цветы, девушки и не так уж много свободного времени для е.ли с исходниками и "где-то что-то да не работает".
Установите любимому бухгалтеру свободный офис и посмотрите на его реакцию спустя какое-то время.

7
Ответить

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

5
Ответить

Если уж поднял тему, стоило бы упомянуть про wsl/wsl2 на винде. Сам на маке сижу, если что, но и линукс не чужд абсолютно. Знаю лично людей, которые под виндой на wsl отлично работают как бэкендеры.
"Поэтому, сильно не выдумывая, выбираем Elementory OS." - а чего не linux mint или обычную убунту?

А в целом, картинка лучше пояснит суть статьи. 

3
Ответить

 Git ставится в своей оболочке GitBash и обратиться к нему прямо из системной консоли попросту невозможно

Вроде все работало и работает из обычной консоли. Другое дело, а многим ли нужен CLI гит в наше время? Я вот давно его не трогал, все через IDE.

 В Linux же можно ничего не устанавливать. Не забываем добавить себя в группу sudo командой usermod -aG sudo user, где user - вы. Необходимо распаковать этот архив в удобную директорию

Чем это отличается от установки? А, да, геммороем.

 попробуйте найти в Rancher инстанс своего микросервиса и что-либо там запросить

Не совсем понятно что не так с ранчером. Для своих задач он отлично подходит.

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

Само-собой, для некоторых моментов разработки он будет удобнее, но:
1. МС Офис. Если вы работаете с чужими документами, вы не сможете жить в линусе.
2. Фотошоп. Если активно его используете, ваши глаза потекут от гимпа, да и psd вы не все откроете.

Как сказали выше - мак поможет. Правда нативного докера там не будет. Но я вам могу и плюсы от виртуалки привести, так что каждому свое.

2
Ответить

Либо macOS - те же преимущества, но с дружелюбным ui&ux (объявляю старт холиваров)

1
Ответить

да нет тут никаких холиваров.
MAC это и есть лучшая OS ибо UNIX

1
Ответить

Хотите Mac? Пожалуйста, купите ноутбук Apple по цене «чугунного моста», а можете взять бесплатную Elementory OS и получить примерно тоже самое, только в Linux.

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

Впрочем, при просмотре галерей на linux.org.ru возникает впечатление, что типичному пользователю линукса на десктопе от компьютера нужна не какая-то там функциональность, а в первую очередь красивые иконки и нескучные обои :)

1
Ответить