[macOS] Установка .dmg через командную строку

MacOS представляет элегантный способ установки приложений, путем простого копирования приложения в папку /Applications. Однако в некоторых случаях все еще возникает необходимость установки .dmg через командную строку. Сделать это можно четырьмя простыми командами.

Все, что необходимо, это смонтировать образ .dmg, и скопировать его содержимое в директорию, а затем размонтировать .dmg файл.

Монтируем образ:

sudo hdiutil attach [disk-image-name].dmg

Переходим в смонтированный образ:

cd /Volumes/[disk-image-name]

Копируем нужное нам приложение в папку /Applications:

sudo cp -rf [app-name].app /Applications

Размонтируем образ:

sudo hdiutil detach /Volumes/[disk-image-name]

[macOS] com.apple.DiskManagement error 0

Все же решил обновить свой iMac 2012 до High Sierra. Как и при обновлении MacBook, здесь также случился ахтунг – обновление завершалось ошибкой «com.apple.DiskManagement error 0».

Вся эта лабуда с ошибками при обновлении так или иначе связана с новой файловой системой APFS, которая, по идее, должна ставится только на компьютеры с SSD, и игнорить, как в моем случае, HDD. Видимо, Apple все же допустила ошибку в механизме обновления, из-за чего установка при использовании HFS+ приводит к сбою.

Решение проблемы:

  1. Загружаем компьютер в режиме восстановления (Command + R)
  2. Открываем дисковую утилиту, выбираем рабочий том, и конвертируем его в APFS (данные не удаляются)
  3. Если операция конвертирования в APFS прошла успешно, то перезагружаем компьютер и продолжаем установку обновления

[macOS] Проблемы при обновлении до High Sierra

На днях стала общедоступна новая версия операционной системы macOS, которая получила название High Sierra.

Произвести обновление решил сначала на рабочем MacBook Pro 2011 года, благо Apple еще продолжает поддерживать эти устройства. Штатным способом через App Store загрузил установщик High Sierra, и запустил обновление. Т.к. процесс установки всегда занимает много времени, и дело было уже под вечер, то решил уйти, не дожидаясь окончания.

На утро обнаружил, что процесс установки не завершился (!), и на установочном экране отображается надпись «Подсчет времени окончания установки…». Похоже, в процессе установки явно «что-то пошло не так». Выключил ноутбук, запускаю… И тут такое:

macOS High Sierra – проблемы при обновлении

Далее ноутбук уходит в бесконечный ребут (пытается загрузиться -> ошибка -> перезагрузка -> пытается загрузиться -> ошибка…).

Ок, загружаюсь в режиме восстановления через Command + R. При выборе Reinstall macOS уже предлагается поставить High Sierra, отлично. Однако в процессе накатки ОС процесс опять зависает.

Опять загружаюсь в режиме восстановления, пробую еще раз Reinstall macOS – и тут наконец-то все пошло-поехало, как и должно быть. Спустя минут сорок система обновилась. Фухххх…

[Решение] Let’s Encrypt, Nginx и 403 ошибка

При ручном получении / продлении сертификата для домена на сервере с Ngnix может возникнуть ошибка 403 Forbidden при обращении к проверочному файлу:

Make sure your web server displays the following content at
http://site.com/.well-known/acme-challenge/xOtn064NspTWyHkbp6EOM140COWK82PW3v7sOf87kM8 before continuing:

xOtn064NspTWyHkbp6EOM140COWK82PW3v7sOf87kM8.wDLw7SyOVXqZ6Ky635Vc9rgUXobw2uLFgM5S9AukTrk

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s"xOtn064NspTWyHkbp6EOM140COWK82PW3v7sOf87kM8.wDLw7SyOVXqZ6Ky635Vc9rgUXobw2uLFgM5S9AukTrk > .well-known/acme-challenge/xOtn064NspTWyHkbp6EOM140COWK82PW3v7sOf87kM8
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
-------------------------------------------------------------------------------
Press Enter to Continue

Waiting for verification...
Cleaning up challenges
Failed authorization procedure. site.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://site.com/.well-known/acme-challenge/xOtn064NspTWyHkbp6EOM140COWK82PW3v7sOf87kM8: "<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>"

В этом случае в конфиге Nginx необходимо прописать следующий location:

location ^~ /.well-known/acme-challenge/ {
allow all;
default_type "text/plain";
}

После перезапуска Nginx (/etc/init.d/nginx restart) ошибки доступа к проверочному файлу уже не будет.

[macOS] Отключаем Spotlight

Spotlight удобная штука, но только для тех, кто ею пользуется. Я, к примеру, за все годы использования Мак’а так и не проникся философией Spotlight в виду того, что ничего такого искать и не приходится. Либо у меня данные структурированы по директориям, либо, если что-то часто используемое, лежит на рабочем столе.

И даже если мы не используем Spotlight, он все равно время от времени проводит индексацию данных, чтобы увеличить скорость поиска. В процессе индексации компьютер начинает весьма сильно подтормаживать, особенно если используется HDD.

Если Spotlight не используется в работе, то фоновую индексацию лучше отключить:

sudo mdutil -a -i off

Команда выдаст:

Password:
/:
2016-11-19 19:20:55.792 mdutil[52944:33144066] mdutil disabling Spotlight: / -> kMDConfigSearchLevelFSSearchOnly
Indexing disabled.
/Volumes/oly_updater_mac:
2016-11-19 19:21:01.944 mdutil[52944:33144066] mdutil disabling Spotlight: /Volumes/oly_updater_mac -> kMDConfigSearchLevelFSSearchOnly
Indexing disabled.

[macOS] Настройка режима гибернации

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

Проблема заключалось в том, что находясь в режиме сна, компьютер через 4 часа самопроизвольно включался. 4 часа – непростая цифра. Оказалось, что по истечении этого времени происходит выгрузка содержимого из памяти на жесткий диск и выключение питания компьютера (таковы настройки по умолчанию для энергосбережения). Т.е. если в период 4 часов «разбудить» компьютер, то он включится мгновенно, отобразив рабочий стол. Через 4 часа сначала будет отображен индикатор выхода компьютера из гибернации, а этот процесс, естественно, дольше, т.к. сохраненные данные необходимо заново загрузить в память.

Так а почему же в моем случае компьютер самопроизвольно включался через 4 часа? Дело в том, что опция hibernatemode была 0 (все данные сохраняются в оперативной памяти), что блокировало сохранение данных на жесткий диск. Из-за этого конфликта iMac и просыпался.

В качестве решения проблемы установил режим 25, когда все данные сохраняются на диске:

sudo pmset -a hibernatemode 25

Также подкорректировал значения, чтобы электропитание выключалось не через 4 часа, а через 10 минут:

sudo pmset -a autopoweroffdelay 600
sudo pmset -a standbydelay 300

[macOS] Определяем, что блокирует переход в гибернацию

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

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

pmset -g assertions

Команда выведет:

Assertion status system-wide:
   BackgroundTask                 0
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  0
   PreventUserIdleSystemSleep     1
   NetworkClientActive            0
Listed by owning process:
   pid 368(ForkLift): [0x000068d400018e23] 02:41:27 PreventUserIdleSystemSleep named: "File Transfer"
   pid 124(hidd): [0x000087d300099104] 00:29:12 UserIsActive named: "com.apple.iohideventsystem.queue.tickle"
	Timeout will fire in 178 secs Action=TimeoutActionRelease
   pid 17513(AddressBookSourceSync): [0x00008ea80001923b] 00:00:03 PreventUserIdleSystemSleep named: "Address Book Source Sync"
   pid 27(configd): [0x000133e700071257] 02:41:28 DenySystemSleep named: "InternetSharingPreferencePlugin"
	Timeout will fire in 1797 secs Action=TimeoutActionTurnOff
Kernel Assertions: 0x8=BT-HID
   id=502  level=255 0x8=BT-HID mod=01/01/1970, 03:00 description=com.apple.driver.IOBluetoothHIDDriver owner=AppleBluetoothHIDKeyboard
   id=507  level=255 0x8=BT-HID mod=01/01/1970, 03:00 description=com.apple.driver.IOBluetoothHIDDriver owner=BNBMouseDevice
Idle sleep preventers: IODisplayWrangler

Из лога видно, что причиной запрета перехода в гибернацию (DenySystemSleep) в моем случае является включенная настройка Internet Sharing в панели System Preferences -> Sharing. Данную настройку я включал для создания внутренней сети по Wi-Fi, и потом забыл выключить. Снимаем галочку с Internet Sharing, после чего уже ни что не мешает компьютеру переходить в режим гибернации.

[macOS] Принудительное закрытие зависшего приложения

Допустим, что вы запустили приложение / игру в полноэкранном режиме, которое зависло. Комбинация клавиш Command + Tab не работает для переключения списка запущенных программ. Необходим аналог завершения через Alt + F4, как в Windows. В MacOS такой комбинацией является Command + Q, но он может не сработать. В этом случае следует попробовать комбинацию Command + Option + Esc.

[macOS] Cочетания клавиш для ввода популярных символов

  • — (длинное тире) — Shift + Alt +
  • … (многоточие) — Alt + ;
  • « (открывающаяся елочка) — Alt + \
  • » (закрывающаяся елочка) — Shift + Alt + \
  • ® (зарегистрированная торговая марка) — Alt + R
  • © (копирайт) — Alt + G
  • ∞ (бесконечность) — Alt + 5
  • ƒ (функция) — Alt + F
  • ≈ (приблизительно равно) — Alt + X
  • ≠ (не равно) — Alt + =
  • √ (квадратный корень) — Alt + V
  • ± (плюс/минус) — Shift + Alt + =
  • ° (градус) — Shift + Alt + 8
  • € — Shift + Alt + 2
  •  (логотип Apple) — Shift + Alt + K

[macOS] Обновление драйвера для геймпада Xbox 360

Ранее я писал, что для работы геймпада Xbox 360 на компьютерах Mac нужен специальный драйвер. С выходом OS X 10.11 этот драйвер перестал работать, а сам автор уже не обновлял свой проект более трех лет.

Однако у того проекта есть форк, который сейчас очень активно развивается. Так что скачать работающий драйвер геймпада Xbox 360 можно теперь здесь.