顯示具有 Homebrew 標籤的文章。 顯示所有文章
顯示具有 Homebrew 標籤的文章。 顯示所有文章

2017/06/28

解決 homebrew 修正成不用 root 身份執行後,mysql 無法啟動的問題

最近手邊要管的機器太多了,想試試用 Ansible 來處理,查了一下如何安裝,網路上是推薦用 homebrew 來裝最簡單,但是在使用很久以前安裝的 homebrew 時,出現了以下錯誤訊息:

$ sudo brew update
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.

上網查了一下相關討論,大意就是 homebrew 不要讓你用 root 執行了,網路上找到的解決辦法就是,更改 /usr/local 的權限,如下:

sudo chown -R $(whoami) /usr/local

這樣一來,homebrew 就能正常運作了,執行以下指令就不會出錯,再也不需要加上 sudo 指令了:

brew update

但是問題來了,如果原本透過 .pkg 檔案來安裝 MySQL 的話,這時 MySQL 就會無法使用了!

$ mysql -uroot -p
Enter password: 
mysql> show databases;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)

問題確認:

先查看一下 /usr/local 底下的目錄:

$ ls -al /usr/local/
total 80
drwxr-xr-x   29 mayer  wheel   986  6 28 09:55 .
drwxr-xr-x@  13 root   wheel   442  2 24 15:07 ..
drwxr-xr-x   16 mayer  admin   544  6 28 10:19 .git
......
lrwxr-xr-x    1 mayer  wheel    27  1 28  2014 mysql -> mysql-5.1.72-osx10.6-x86_64
drwxr-xr-x   16 mayer  wheel   544 12 17  2014 mysql-5.1.72-osx10.6-x86_64
drwxr-xr-x   10 mayer  admin   340 12  8  2015 opt
......

可以看到,/usr/local/ 底下有 MySQL 的目錄,由於剛剛我們改了 /usr/local 目錄底下所有目錄 owner 的關係,很可能是因為這樣出了問題。

先進入 Mac 的系統偏好設定 -> MySQL,看到正常運作中:

然後點擊 Stop MySQL Server 按鈕,會看到 MySQL 服務停止了,並且出現警告訊息:

/usr/local/mysql/data 目錄的 owner 不是 mysql 或 _mysql,可能會出問題。

問題解決:

先查看機器上,系統上有什麼樣的 mysql 使用者:

grep mysql /etc/passwd
_mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false

這邊發現到,只有一個 _mysql 這個使用者,很顯然的是在安裝 mysql 套件時一併建立的,因此我們將 /usr/local/mysql 相關的目錄更改目錄的 owner:

sudo chown -R _mysql /usr/local/mysql*

之後,在點 Start MySQL Server 按鈕,就能看到 MySQL 正常啟動了。

最後,透過 mysql command line 確認是否能正常讀取 database 了:

$ mysql -uroot -p   
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| ..................  |
| ..................  |
| test                |
+---------------------+
27 rows in set (0.01 sec)

一切又恢復正常了!

2015/01/27

Mac OS X 裡安裝 Docker

最近 Docker 成了當紅炸子雞,公司內部也將開發的測試環境,開始逐漸移轉到 Docker 上,在此介紹一下 Mac OS X 環境安裝 Docker 的程序

Step 1.
首先安裝 Vitual box https://www.virtualbox.org/wiki/Downloads
在下載的網頁裡面可以選擇下載 OS X hosts ,目前是 4.3.20 版
下載後請直接安裝。

Step 2.
用Homebrew 來安裝 docker

$ brew install docker

==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-1.4.1.yosemite.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/docker-1.4.1.yosemite.bottle.tar.gz
==> Pouring docker-1.4.1.yosemite.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions


Step 3.
安裝這次的重點 boot2docker,boot2docker 會用 Virtualbox 建立 Linux VM,在 Linux VM 上開啟 docker daemon 後,就可以直接對 VM 裡的 docker 下控制命令。
我們來繼續安裝 boot2docker

$ brew install boot2docker

==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/boot2docker-1.4.1.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring boot2docker-1.4.1.yosemite.bottle.tar.gz
==> Caveats
To have launchd start boot2docker at login:
    ln -sfv /usr/local/opt/boot2docker/*.plist ~/Library/LaunchAgents
Then to load boot2docker now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.boot2docker.plist

Step 4.
使用 boot2docker init 指令,建立起 VM 的環境
    
$ boot2docker init

Latest release for boot2docker/boot2docker is v1.4.1
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.4.1/boot2docker.iso
    to /Users/martin/.boot2docker/boot2docker.iso
Generating public/private rsa key pair.
Your identification has been saved in /Users/martin/.ssh/id_boot2docker.
Your public key has been saved in /Users/martin/.ssh/id_boot2docker.pub.
The key fingerprint is:
4e:1d:89:54:78:95:e7:f2:10:8c:11:90:a0:02:f1:a6 martin@Martin-MacBook-Pro-2.local
The key's randomart image is:
+--[ RSA 2048]----+
|o.    ..o=+*..   |
| o   . .o.o.+ .  |
|  + .   ..o  +   |
| o .     . .o .  |
|E       S .  +   |
|       o      .  |
|        .        |
|                 |
|                 |
+-----------------+

Step 5.
啟動 boot2docker

$ boot2docker start

Waiting for VM and Docker daemon to start...
..........................................oooooooooooooooooooooooooooooooooo
Started.
Writing /Users/martin/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/martin/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/martin/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/martin/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

Step 6.
記得一一使用 export 來將這些環境變數設定在Mac OS X 裡
PS: 這裡的環境變數請參考 Step 5 啟動 boot2docker 後的顯示說明

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/martin/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

Step 7.
使用 docker version 查看一下是否已經安裝成功並且成功啟用,如果有出現以下訊息,那就確認安裝沒問題。
    
$ docker version

Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.4
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

您現在已經可以開始使用 docker 指令,下載 Image ,操作docker container 。