dotzero

↑ ↑ ↓ ↓ ← → ← → B A Start

Особенности работы Docker контейнеров MySQL и Nginx на OSX

В ожидании релиза Docker for mac приходится использовать Docker Machine и решать проблемы которые он создает при работе с Data Volumes. О решении проблем в MySQL и Nginx я бы и хотел рассказать.

Официальный контейнер MySQL работает как и ожидаешь, пока в файле docker-compose.yml не добавлено хранение /var/lib/mysql на Data Volume:

mysql:
  image: mysql:5.7
  volumes:
    - ./data/mysql:/var/lib/mysql

После таких манипуляций демон MySQL откажется загружаться будет сыпать проклятиями:

InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.

Для исправления этого необходимо создать небольшой скрипт, который возьмет UID и GID директории /var/lib/mysql и присвоит их пользователю и группе mysql. Пример такого скрипта mysql-entrypoint.sh:

#!/bin/bash
set -e
echo '* Working around permission errors locally by making sure that "mysql" uses the same uid and gid as the host volume'
TARGET_UID=$(stat -c "%u" /var/lib/mysql)
echo '-- Setting mysql user to use uid '$TARGET_UID
usermod -o -u $TARGET_UID mysql || true
TARGET_GID=$(stat -c "%g" /var/lib/mysql)
echo '-- Setting mysql group to use gid '$TARGET_GID
groupmod -o -g $TARGET_GID mysql || true
echo
echo '* Starting MySQL'
chown -R mysql:root /var/run/mysqld/
/entrypoint.sh mysqld --user=mysql --console

Далее монтируем этот скрипт внутрь контейнера и заменяем им оригинальный entrypoint MySQL:

mysql:
  image: mysql:5.7
  command: "/mysql-entrypoint.sh"
  volumes:
    - ./data/mysql-entrypoint.sh:/mysql-entrypoint.sh
    - ./data/mysql:/var/lib/mysql

На этом проблемы с MySQL закончились и время поговорить о контейнере Nginx. При работе со статикой из Data Volume он жеcтко кеширует файлы и реал тайм редактирование css или js превращается в пытку.

http {
  ...
  sendfile off;
  tcp_nopush off;
  tcp_nodelay off;
  ...
}

Если такое произошло, то в nginx.conf можно добавить эти три параметра в секцию http, после чего сделать рестарт контейнера и проблема решена.

Как записать ISO на USB из терминала OSX

Перед записью .iso или .img через консоль на USB лучше всего поставить pv, для отображения прогресс бара записи. При наличии Homebrew это просто сделать командой brew install pv. Приступаем к записи:

  1. Вставить USB флешку;
  2. Через терминал вывести список доступных дисков, выполнив команду:

    diskutil list
    
  3. Найти в списке USB флешку, обычно что-то вроде /dev/disk1;

  4. Отмонтировать все разделы на ней, выполнив команду:

    diskutil unmountDisk /dev/disk1
    
  5. Теперь время прожечь .iso или .img используя dd и pv, для этого к названию диска, из предыдущего шага, прибавляем в начале букву r (например disk1 → rdisk1) и выполняем команду:

    pv -ptre /path/to/image.iso | sudo dd bs=1m of=/dev/rdisk1
    
  6. После завершения необходимо извлечь USB флешку используя команду:

    diskutil eject /dev/disk1
    

Как я готовлю Sublime Text 2 на OSX

Поводом к написанию этой статьи послужила вынужденная переустановка операционный системы с последующей ее настройкой. Все настройки моего любимого редактора Sublime Text 2 были потеряны безвозвратно.

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

Dev Build

Тут все просто. Первым делом стоит забыть про стабильную версию этого редактора и перейти на версию из dev канала. Изменения в этом канале появляются значительно чаще чем в стабильной версии, а значит и новый функционал можно посмотреть за пару недель до стабильного релиза. Для отчаянных экспериментаторов есть nightly build, который обновляется практически каждые несколько дней.

OS X Command Line

Не один редактор не может быть полноценным без cli. Для использования Sublime Text 2 из консоли на официальном сайте есть небольшая инструкция. У меня стоит Homebrew и поэтому не надо создавать лишнюю папку, а достаточно изменить симлинк путь ~/bin/subl на /usr/local/bin/subl полностью команда:

ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Теперь можно наслаждаться всеми прелестями cli, посмотреть список поддерживаемых команд можно набрав subl --help.

Replacement Icon

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

https://github.com/dmatarazzo/Sublime-Text-2-Icon

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

#!/bin/bash

# The direction this script is running in
THIS_DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cp "$THIS_DIR/Sublime Text 2.icns" "/Applications/Sublime Text 2.app/Contents/Resources/"
cp $THIS_DIR/Document\ Icons/*.icns "/Applications/Sublime Text 2.app/Contents/Resources/"

# Trickery to force icon replace
sudo find /private/var/folders/ -name com.apple.dock.iconcache -exec rm {} \; 2>/dev/null
killall -KILL Finder
killall -KILL Dock

Soda Theme

В дополнение к предыдущему пункту, я бы порекомендовал использовать альтернативную тему оформления окна - Soda Theme, она поставляется как в светлом так и в темном варианте. Все инструкции по установке можно найти в репозитории на Github.

https://github.com/buymeasoda/soda-theme

Plugins

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

Для установки большинства плагинов можно воспользоваться прекрасным плагином Sublime Package Control. Который позволяет автоматически устанавливать плагины и поддерживать их в актуальном состоянии.

Кроме того на Github можно обратить внимание на организацию Sublime Text Packages включающую в себя обширны список репозиториев с плагинами и сниппетами.

Spell check

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

  1. Скачиваем словарь для русского языка c сайта OpenOffice
  2. Меняем расширение с .oxt на .zip и распаковываем полученный архив. Нас интересуют только 2 файла, для русского словаря это ru_RU.dic и ru_RU.aff
  3. В меню Sublime Text нажимаем Preferences → Browse Packages, создаем там папку Language - Russian и копируем файлы словарей в нее.
  4. Теперь словари необходимо сконвертировать в UTF-8. Открываем файл c расширением .aff и смотрим на первую строку, там будет что-то вроде SET KOI8-R. Значит словарь в кодировке KOI8-R, конвертируем любым удобным способом, я воспользовался утилитой iconv. После конвертирования необходимо открыть файл ru_RU.aff и заменить строку с кодировкой на SET UTF-8.
  5. Готовую UTF-8 версию русского словаря можно скачать по ссылке и просто установить.
  6. После всех этих манипуляций проверка русской орфографии появится соответствующим пунктов в меню View → Dictonary → Language - Russian.

Preferences.sublime-settings

Не секрет что Sublime Text 2 имеет много предустановленных настроек которые можно посмотреть в меню Preferences → Settings - Default, редактировать данный файл не рекомендуется в связи с тем что он будет перезаписан при следующем обновлении. Все свои настройки необходимо вынести в отдельный файл, Preferences → Settings - User. Напоследок я решил выложить свои настройки которые установлены у меня в этом файле.

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true,
    "detect_indentation": false,
    "trim_trailing_white_space_on_save": true,
    "highlight_line": true,
    "ensure_newline_at_eof_on_save": true,
    "fallback_encoding": "Cyrillic (Windows 1251)",
    "highlight_modified_tabs": true,
    "open_files_in_new_window": false,
    "theme": "Soda Dark.sublime-theme"
}

Как установить OS X 10.7 Lion с USB

Купив Льва сразу захотелось сделать себе бэкап флешку, на случай если что-то поломается. Оказалось что хоть Lion и устанавливается через App Store но из него можно вполне изготовить установочную флешку, для этого надо:

  1. Купив льва не запускать установку, а зайти в папку /Программы/
  2. Найти там Install Mac OS X Lion.app (Установка Mac OS X Lion)
  3. Нажать правой кнопкой и выбрать Показать содержимое пакета
  4. В открывшемся окне заходим в Contents/SharedSupport
  5. Копируем файл InstallESD.dmg это и есть имидж со Львом
  6. Вставляем флешку
  7. Открываем /Программы/Утилиты/Дисковая утилита
  8. Выбираем флешку в списке слева
  9. А в списке справа выбираем вкладку Восстановить
  10. Источник тот самый InstallESD.dmg
  11. Восстановить

Для того чтобы установить с нее надо во время загрузки Mac’а зажать Alt