суббота, 21 июля 2018 г.

Mac OS X Mojave beta и чекбоксы в Google Chrome

Google Chrome пока еще не поддерживает Mac OS Mojave и некорректно отображает чекбоксы (и не только, например некоторые кнопки также не отображаются).

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

До плагина:
После:

Если еще кому-то интересно, то я заметил еще несколько багов, которые пока не поправили:
Dropbox, как-то странно отображается окно:

TextEdit, не всегда закрывается с первого раза.
Был также баг в Finder, при котором нельзя было из бокового меню извлечь внешний носитель, но это поправили.
VirtualBox не работает на Mojave.

понедельник, 16 июля 2018 г.

Как скопировать права роли в PostgreSQL

Все очень просто, у нас есть роль olduser и мы хотим чтобы у нового пользователя newuser были такие же права на таблицы как и у olduser:
CREATE ROLE newuser WITH LOGIN PASSWORD 'password' CREATEDB CREATEROLE;
GRANT olduser TO newuser;

пятница, 13 июля 2018 г.

Обновление версии PostgreSQL в Amazon RDS без даунтайма

Цель: обновить инстанс PostgreSQL, который работает на версии 9.4 до 9.5.

RDS не позволяет обновлять PostgreSQL на несколько мажорных версий, поэтому если нужно обновиться например с 9.4 до 10, то итерацию придется повторять несколько раз.

Также важно то, чтобы были доступы для rds_superuser, без этого не получится настроить репликацию.

Пример как это все работает на тестовом стенде я описал ниже.

воскресенье, 1 июля 2018 г.

Настройка Hashicorp Vault для генерации одноразовых паролей (OTP) для SSH

Vault — это инструмент для управления секретами от компании Hashicorp известной также другими интересными тулами, такими как Consul, Nomad, Terraform, Vagrant, Packer и прочими.

Vault удобен тем, что может хранить различные типы секретов, например одноразовые пароли для SSH, доступы к БД, облачным сервисам и прочие key-value варианты. Получается некий аналог keepass/lastpass и google authenticator pam.

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

В данной заметке я опишу вариант использования One-Time Passwords для логина в SSH, вместо мучений с менеджментом ssh-ключей.

суббота, 16 июня 2018 г.

Разница между su, su -, sudo -i, sudo -s

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

Для получения прав рута на сервере я обычно использую команду sudo -s, почему именно ее — точно не вспомню, просто исторически сложилось и каких-либо проблем по этому поводу не испытывал.

Как оказалось, моя ошибка при настройке Vault была именно в том, что рута я получал именно такой командой.
Вот что пишут в мане:
-s, --shell Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Команда запускает shell из-под рута без смены директории, при этом не импортируются переменные окружения, которые прописаны например в .bash_profile или .login.

В случае sudo -i совсем другая история:
-i, --login Run the shell specified by the target user's password database entry as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The command is run with an environment similar to the one a user would receive at log in. The Command environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.

Тут запускается shell со сменой директории пользователя и импортом переменных окружения.

В случае su и su - тоже есть разница.
su - в этом случае сначала переключается пользователь, а затем вызывается shell, то есть очищая все переменные окружения и запуская чистую сессию рута.
su не очищает переменные окружения, а просто переключает пользователя оставляя переменные окружения старого пользователя.

понедельник, 11 июня 2018 г.

понедельник, 14 мая 2018 г.

Вопросы на собеседовании на позицию DevOps-инженера

Опишу тут некоторые вопросы, которые мне задавали на эту позицию.
Я около месяца проходил собеседования в компании из России, Украины, Европы и некоторые из вопросов я запомнил. Конечно, по большей части вопросы задавали конкретно по моему опыту работы, который я описал в резюме, однако некоторые из них повторялись очень часто и их стоит выделить.

суббота, 5 мая 2018 г.

Работа с памятью в Linux

Одной из наиболее важных и базовых подсистем в любой операционной системе является подсистема работы с оперативной памятью (MMU — Memory Management Unit). Конструкция данной подсистемы является очень сложной, поэтому разработчикам программного обеспечения должны очень хорошо понимать общее устройство как ядра Linux, так и то, как функционируют подобные подсистемы, к счастью все это отлично документировано в исходных кодах ядра.

вторник, 1 мая 2018 г.

Как я могу узнать свой внешний IP-адрес

Для идентификации компьютеров сети используются адреса. На физическом уровне используются MAC-адреса, каждый MAC-адрес является уникальным и устанавливается производителем на этапе производства. Формат MAC-адреса представляет собой набор из шести октетов в шестнадцатиричном формате, примером MAC-адреса является 20:89:84:59:0B:6A

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

пятница, 20 апреля 2018 г.

Быстрая установка стека ELK (Elasticsearch+Logstash+Kibana) на Debian 9

Ставим все необходимые пакеты:
# apt install -y openjdk-9-jre apt-transport-https
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
# apt update && apt install elasticsearch kibana logstash packetbeat metricbeat filebeat heartbeat -y

Запускаем elasticsearch на локалхосте:
# vim /etc/elasticsearch/elasticsearch.yml
network.host: 127.0.0.1

Прописываем конфиг logstash:
# vim /etc/logstash/conf.d/10-syslog.conf
input {
  file {
    type => "syslog"
    path => [ "/var/log/messages", "/var/log/*.log" ]
  }
}
output {
  stdout { 
    codec => rubydebug
    }
    elasticsearch {
      hosts => "localhost"
    }
}

Запускаем сервисы:
# systemctl enable elasticsearch kibana logstash filebeat packetbeat metricbeat heartbeat
# systemctl start elasticsearch kibana logstash filebeat packetbeat metricbeat heartbeat

Идем по адресу: http://localhost:5601