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

2019年12月17日 星期二

使用 Homebrew 安裝 PHP


移除使用 Homebrew/PHP Tap 安裝的舊版本 PHP


自 2018 年 3 月 31 日起,原屬於 Main Taps 的 Homebrew/PHP 版本庫被封存;所有的 Formulae 會被遷移至主要版本庫 Homebrew/core 中或是被刪除。因為 Homebrew 不再支援舊的 Homebrew/PHP Tap,如果之前有使用 Homebrew/PHP Tap 安裝過 PHP,需要先將其完整的移除。如果是新安裝或是使用  Homebrew/core 安裝 PHP,可以跳過本小節。

首先,需要更新所有的 Formulae、升級已安裝的軟體、以及移除所有舊的 Formulae:
brew update
brew upgrade
brew cleanup


(Homebrew 的簡介請參考。)


檢查目前安裝的套件中有那些跟 PHP 有關聯:
brew list | grep php


找到已安裝的 PHP 以及相關的套件後,使用 brew uninstall 將它們解除安裝;例如,之前安裝了 PHP 5.6 以及延伸套件 xdebug:
brew uninstall --force php56 php56-xdebug
brew cleanup


可以再次檢查是否完整的移除相關的 PHP 套件:
brew list | grep php


最後,清除 PHP 設定檔:
rm -Rf /usr/local/etc/php/*



安裝 PHP


PHP 有多個發行分支 (Release Branch),分屬於不同的主要版本 (Major Version)。每一個發行分支都會有兩年的完整支援,再加上一年的關鍵安全問題支援。PHP 5 的最後一個發行分支 PHP 5.6 在 2018 年 12 月 31 日停止了所有的支援,使得目前仍有支援的主要版本只剩下了 PHP 7。下表列出了 PHP 目前支援的發行分支(參考自):


分支 初始發行日 完整支援到 安全問題支援到
7.2 2017 年 11 月 30 日 2019 年 11 月 30 日 2020 年 11 月 30 日
7.3 2018 年 12 月 6 日 2020  年 12 月 6 日 2021 年 12 月 6 日
7.4 2019 年 11 月 28 日 2021 年 11 月 28 日 2022 年 11 月 28 日


因為 PHP 7.2 的完整支援已經在 2019 年 11 月 30 日到期,所以目前 Homebrew/core 只提供 PHP 7.3 以及 PHP 7.4 的安裝。下列令可以安裝 Homebrew/core 上的 PHP 7.4:
brew update
brew upgrade
brew install php@7.41


註1. Homebrew 現在改用 "php@發行分支" (例如 PHP@7.3) 取代原來的 "PHP發行分支無句點" (例如 PHP74);如果不指定要安裝的發行分支,預設會安裝最新的發行分支。


使用 PHP 的 Apache 2 Handler 模組


在 "PHP 與伺服器之間的應用程式介面" 一文中,介紹了 PHP 共有 4 種不同 SAPIs。針對不同的開發環境,可以選擇適合的SAPI。如果是做為個人網頁開發,建議可以選擇設定上較為簡便的 Apache 2 Handler 模組


1. 設定 httpd.conf


根據 PHP 手冊,使用 PHP 的 Apache 2 Handler 模組,不建議 httpd 使用執行緒類型的 MPM (請參考);而且使用 Homebrew/core 安裝的 PHP 也不再支援執行緒安全 (Thread Safty) 選項2。因此,httpd 的 MPM 模組3使用預設的 Prefork 模組即可。


確認 httpd.conf 載入的是 Prefork 模組:
LoadModule mpm_prefork_module lib/httpd/modules/mod_mpm_prefork.so


要讓 httpd 能夠處理 php 文件,需要:
1) 在啟動時就戴入 Apache 2 Handler (libphp) 模組,
2) 讓 httpd 知道副檔名為 php 的檔案要交由 php 模組處理,
3) 執行完 php 後生成的文件的內容類型 (Content Type) 是 text/html。


在 IfModule mpm_prefork_module 區塊加上下列的設定4
<IfModule mpm_prefork_module>
    LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so
    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>
    AddType text/html .php
</IfModule>



最後,確認 httpd 在尋找目錄首頁的順序與類別:
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>


重新啟動 HTTP Server:
sudo apachectl -k stop
sudo apachectl start



2. 測試 PHP 網頁是否正常

在文件根目錄檔案夾新增 index.php,內容如下:
<?php

phpinfo();


在瀏覽器的網址列輸入:
http://localhost/info.php


應該可以看到系統和 PHP 的相關資訊。

(如果網站要提供服務給其他人,在測試完後記得要將 index.php 刪除。)


註2. 之前的 Homebrew/php tap 可以使用 --with-thread-safety 或是 --enable-maintainer-zts 選項,讓 Apache 2 Handler 模組可以在多執行緒環境下執行。

註3. 在 "Apache HTTP Server 的多程序處理模組 (Multi-Processing Module, MPM)" 一文中介紹了 httpd 在 unix 系統的 3 種 MPM。在不同的 MPM 模組下,要使用不同的 SAPI。

註4. 考量安全因素,建議使用 SetHandler 取代 AddHandler;因為使用 AddHandler 時只要檔案名稱中有 .php (例如 test.php.png),就會被送到 PHP 解析器執行。這讓惡意的使用者可以利用這個方式上傳惡意的程式碼,並且加以執行。

2019年12月13日 星期五

在 macOS 安裝 Apache HTTP Server


Apache HTTP Server (httpd) 是一款常見的開源網頁伺服器軟體。近年來面對 Nginx、IIS 等網頁伺服器軟體的競爭,仍然具有很高的市佔率。是不少的網頁開發套件 (例如,XAMPP) 內建的網頁伺服器。httpd 的設定問題容易在網路上找到相關的解決方法,適合做為小型開發專案或是輕量服務需求的網頁伺服器。

卸載 macOS 內建的 httpd


檢查 macOS 是否內建 Apache HTTP Server (httpd)1,並且已經將其載入到 Launchd:
sudo launchctl list | grep httpd


如果 macOS 有內建 httpd,並且已經將其載入到 Launchd 時;必須先將其從 Launchd 中卸載:
sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null


(launchctl 以及 Launchd 的簡介請參考。)


註1:配合 macOS Server 5.7 以後不再支援來自開源軟體的圖形化管理介面,從 macOS 10.14 開始,已不再內建 httpd (請參考 macOS Server 的前世今生)。


使用 Homebrew 安裝 httpd

安裝 httpd 最簡單的方式是使用網頁開發套件。但是,使用套件會有下列的缺點:打包好的軟體不一定包含需要的軟體、軟體的版本受到限制、更新的速度較慢等。為了安裝與管理應用程式,套件管理工具被廣為使用。其中 Homebrew 是 macOS 使用者最常使用的套件管理工具 (Homebrew 的簡介請參考)。


使用 Homebrew 安裝 httpd 只需要執行下列的命令:
brew update
brew upgrade
brew install httpd


Homebrew 會執行下列的安裝工作:
1. 安裝檔案夾在 /usr/local/Cellar/httpd/2.24.xx (xx為版本號碼),
2. 執行程式 (例如,apachectl、httpd 等) 會被符號連結 (symlink) 到 /usr/local/bin,
3. 設定檔則是放在 /usr/local/etc/httpd,
4. /usr/local/opt 檔案夾中的 apache-httpd、apache2、以及 httpd 是安裝檔案夾的符號連結。


我們可以透過執行 echo $PATH 檢查 PATH 環境變數的設定,確認在使用 apachectl 等命令時,會優先執行使用 Homebrew 安裝的 httpd:
echo $PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin


因為 /usr/local/bin 在路徑設定的最前面,所以被 symlink 到該檔案夾的命令會被優先執行。


安裝完成後可以執行下列的命令來啟動 httpd:
apachectl start


開啟瀏覽器,連線到 http://localhost:8080/,可以看到 It works! 的網頁。

注意:存取記錄 (Access Log) 跟錯誤記錄 (Error Log) 預設是記錄在 /usr/local/var/log/httpd/ 檔案夾,並且對應到 /private/var/log/apache2/ 檔案夾。如果之前已經使用過 root 啟動過 httpd,命令前面需要加上 sudo,不然執行 apachectl start 時會出現需要 root 權限的提示,執行 httpd -k start 時會出現 AH00091: httpd: could not open error log file /private/var/log/apache2/error_log.
解決的方法為使用 root 權限刪除記錄檔。

設定 httpd (修改 httpd.conf)


/usr/local/etc/httpd/httpd.conf 是 httpd 的主要設定檔。為了使用上的需求,我們需要修改某些設定。下面列出幾個常見的設定。


監聽埠

安裝完後的預設監聽埠是 8080,而不是常用的 80 埠;我們需要找到 httpd.conf 中的 Listen 設定,更改為監聽 80 埠:
Listen 80


伺服器名稱

當沒有在 httpd.conf 設定伺服器名稱時,在啟動或關閉 httpd 時會出現下列的訊息:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using MacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message


找到 ServerName 設定,取消註解並且改為下列的設定:
ServerName localhost


文件根目錄

做為個人開發平台,預設的文件根目錄 /usr/local/var/www,在文件的相關操作上會比較不方便。將文件根目錄改設為使用者家目錄下的 www 檔案夾,可以方便文件的編修以及檢視。找到 httpd.conf 中的 DocumentRoot 設定,指定文件根目錄到使用者家目錄下的檔案夾:

DocumentRoot "/Usrs/user_name/www"
<directory "/usr/local/www></directory>


在文件根目錄設定的下方會有一個針對該檔案夾的設定,我們需要改為新的文件根目錄:
<Directory "/Usrs/user_name/www">


注意:因為 macOS 的系統完整保護 (System Integrity Protection, SIP)機制,建議文件根目錄設定為使用者家目錄下的檔案夾,或是使用預設值。


在使用者家目錄建立文件根目錄檔案夾並且新增一個 index.html 檔案:
mkdir ~/www
echo "<h1>My Page</h1>" > ~/www/index.html



重新啟動 httpd:
sudo apachectl -k restart


注意:因為使用了 80 埠,此時命令要加上 sudo。


開啟瀏覽器,連線到 http://localhost/,可以看到 My Page 的網頁。



將 httpd 設定為開機時啟動的守護行程 (Daemon)


要讓 httpd 能夠在開機自動執行,可以執行下列的命令:
sudo brew services start httpd


brew services 的簡介可以參考這裡

安裝 Homebrew-services 後,也可以使用它將 httpd 從  Launchd 移除:
sudo brew services stop httpd


或是重新加入 Launchd:
sudo brew services restart httpd


將 httpd 設定為登入時啟動的任務項 (Agent)


要讓 httpd 能夠在登入後自動執行 (注意,此時 httpd.conf 中的監聽埠不可以小於 1024,LOG 檔的擁有者要是使用者),可以執行下列的命令:
brew services start httpd


安裝 Homebrew-services 後,也可以使用它將 httpd 從任務項中移除:
brew services stop httpd


或是重新加入任務項:
sudo brew services restart httpd


僅啟動 httpd


Homebrew-services 也可以只用來啟動 httpd:
brew services run httpd


brew services run 使用目前使用者的權限執行,所以要注意監聽埠、檔案夾權限等設定問題。



2019年10月14日 星期一

Homebrew 簡介


Homebrew 簡介


要在 macOS 上安裝應用程式可以透過:Mac App Store (MAS)、應用程式的官網、或是下載原始碼等方式。MAS 提供了簡便的應用程式安裝方式,只要在 App Store 搜尋到需要的應用程式,再點選「取得」即可安裝。但是,有許多的應用程式(特別是許多系統開發工具),並沒有在 MAS 上架,無法藉由 MAS 取得。而由較具規模的組織或公司所開發的應用程式,大多有設有官網可以下載應用程式,安裝過程也十分簡單1。但是某些透過進階安裝的應用程式,較不容易控管其版本與安裝內容,而且在移除時需要注意是否有殘留的檔案或資料夾。下載原始碼安裝,雖可以讓使用者量身打造自己的應用程式。但是應用程式彼此之間的相依性問題以及未來的升級管理,都會對使用者造成困擾。

為了安裝與管理應用程式,不少的作業系統、伺服端執行環境、程式語言等,都提供了套件管理工具。例如,Debian 的 APT、openSUSE 的 Zypper、Fedora 及 CentOS 的 YUM 、node.js 的 NPM、或是 Python 的 PIP 等。而在 macOS,Homebrew 就是最被廣為使用的套件管理工具。

Homebrew 是 macOS 缺少套件的管理工具 (The missing package manager for macOS)2,官網為 https://brew.sh/。Brew 通常可以指 "釀造啤酒",Homebrew 是在家裡釀造啤酒;套件管理工具 Homebrew,代表使用者需要 "自行"(home) "下載並安裝" 套件(brew)。因為借用了釀造啤酒一詞,所以在相關的術語中,使用了配方 (Formula)、酒桶 (Keg)、酒瓶 (Bottle)、出酒閥 (Tap)、酒窖 (Cellar) 等許多和釀造啤酒有關的名詞。相關術語的介紹請參考下一小節。

Homebrew 是以 Ruby 語言寫成的命令列套件管理 (command line package manager) 程式 ,它提供了一個統一的方法讓使用者可以輕易地在 macOS 上進行安裝、升級與移除軟體。它的功能有 git 版本庫訪問 (Repository Access)、相依性處理 (Dependency Solving)、以及套件安裝 (Package Installation) 等。

註1. 雙擊下載的 DMG 檔會自動掛載虛擬磁碟機,並且開啟一個 Finder 視窗:1)視窗內如果有一個 APP 檔和指向 "應用程式" 資料夾的捷徑,只需要將 APP 檔拖拉至 "應用程式" 資料夾捷徑即可完成安裝。2)視窗內如果沒有 "應用程式" 資料夾捷徑,通常代表需要雙擊 APP 檔或是 PKG 檔,進行進階安裝。
註2. Homebrew 現在也可以用於 Linux 以及 Windows Subsystem for Linux(WSL),所以英文版的首頁已經改為 The missing package manager for macOS (or Linux)。


Homebrew 相關術語


釀造啤酒需要 Formula、Keg、Bottle、Tap、Cellar 等器具或場所。Homebrew 借用了這些詞語做為相關的術語。首先,釀造啤酒需要有 Formula 來決定需要使用那些材料以及其使用量。在 Homebrew 中,Formula 是一種特定領域語言 (Domain-specific language, DSL),是由 Ruby 指令碼集所構成的套件定義檔,用來管理軟體間的相依性、原始碼的下載、以及進行軟體的配置與編譯等。在使用 Homebrew 時,會先從 Git 版本庫 (Homebrew 預設使用的是 GitHub 提供的版本庫) 中下載 Formulae。

當釀好酒後,需要 Keg 來存放成品,並且需要 Cellar 來存放的 Kegs。在 Homebrew 中,Keg 為套件的安裝前綴,通常包含了套件名稱以及版本,而 Cellar 則為 存放 Kegs 的目錄。預設 Cellar 路徑為 /usr/local/Cellar,完整的套件安裝路徑預設為:
/usr/local/Cellar/套件名稱/版本

要將 Keg 中的啤酒倒出來,通常會在 Keg 上加上 Tap(Tap a keg);Tap 當名詞時是指出酒閥,當動詞時是指在 Keg 加上 TAP 的動作。在 Homebrew,Tap 當名詞時是指由 formulae 所形成的 Git 版本庫3,當動詞時是指在本機建立這些 Git 版本庫的複本。

啤酒除了可以裝在 Keg 中之外,也可以分裝在小酒瓶(Bottle)中。在 Homebrew 中, Bottle 是依照預設參數編譯好的套件 (通常為 .tar.gz 檔),會依照打包時的路徑進行安裝。Homebrew 的目標是希望所有的套件都是利用 Bottle 安裝(We aim to bottle everything.)。


下表參考自:https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md#homebrew-terminology

名稱描述範例
Formula套件定義/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/foo.rb
KegFormula 的安裝前綴預設為 /usr/local/Cellar/套件名稱/版本
opt prefixKeg 現行安裝版本的 symlink/usr/local/opt/套件名稱
Cellar所有的 Kegs 將被安裝在此/usr/local/Cellar
TapFormulae (以及/或是命令) 的 Git 版本庫homebrew/core 在本機會存放在 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
Bottle預建的 Keg (預先編譯好的套件)在 .tar.gz 前會有 bottle 關鍵字,例如qt-4.8.4.mavericks.bottle.tar.gz
Cask用來安裝 macOS 原生 Apps 的 homebrew 擴充/Applications/MacDown.app/Contents/SharedSupport/bin/macdown
Brew Bundle用來描述相依性的 homebrew 擴充brew 'myservice', restart_service: true


註3. Taps 之前被分類為:
1) 主要版本庫 (Main repository),通常指的是 homebrew/core;
2) 主要 Taps (Main taps),包含了 homebrew/nginx、homebrew/php、homebrew/science 等;
3) 其他有趣的 Taps (Other interesting taps) 或是第三方版本庫 (Third-party repositories),格式為 <user/repo> 的 Taps。
但是從 2018 年(Homebrew 1.5.0)開始,大部份的 Main taps 已經被移入 Main repository,Tap 也被更名為第三方版本庫(請參考這裡這裡以及這裡)。


安裝以及移除 Homebrew



安裝 Xcode 命令列工具 (Command Line Tools)4
xcode-select --install


要安裝 Homebrew 只需要在終端機命令列提示貼上下列的指令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


要移除 Homebrew 只需要在終端機命令列提示貼上下列的指令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"


註4. Command Line Tools 為 Xcode 的子集,是一個獨立套件。能在 macOS 終端機介面提供 clang、cpp、GCC、git、make、perl 等許多常用的工具,實用程序和編譯器。

軟體安裝簡易流程


1. 找到軟體所屬的 Tap(如果套件不屬於 Homebrew/core)。

2. 更新所有的 Formulae、升級已安裝的軟體、以及移除所有舊的 formulae
brew update
brew upgrade
brew cleanup


3. 下載軟體所屬的 Tap (不屬於主要版本庫的套件)
brew tap <user/repo>


4. 查詢軟體的安裝選項 (如果需要的話)
brew info <formula>


5. 安裝套件5, 6, 7
brew install <formula> [--with-參數]


6. 將已安裝套件的服務加入 Launchd,設定為開機啟動的守護行程 (daemon),brew services 的介紹請參考
brew services start <formula>


註5. 如果沒有使用安裝選項,預設是使用 bottled 版本。
註6. Homebrew 預設會將套件安裝在 /usr/local/Cellar,執行檔則會 symlink 到 /usr/local/bin,設定檔會在 /usr/local/etc,而 /usr/local/opt 則是套件現行版本的 symlink。
註7. 在安裝完套件後,如果顯示套件為 keg-only,表示套件將僅安裝在 Cellar,而不會被連結到 /usr/local;通常的原因是因為電腦中已經相同名稱的套件。如果要手動符號連結到 /usr/local/ 可以使用 brew link 指令。


指令簡易介紹


顯示 Homebrew 版本
brew -v


檢查 Homebrew 狀態
brew doctor


使用說明
brew help


顯示 Homebrew 安裝路徑
brew --prefix


更新電腦上全部的 Formulae
brew update


更新所有已安裝的套件
brew upgrade


更新指定的套件
brew upgrade <formula>


列出過時 (需要更新) 的套件
brew outdated


列出目前電腦上所有版本庫的名稱
brew tap


下載或更新指定的 Tap
brew tap <homebrew/homebrew-repo>
brew tap <user/repo>


移除指定的 Tap
brew untap <homebrew/homebrew-repo>
brew untap <user/repo>


查詢套件的資訊  (可以用來查詢套件有那些安裝參數可以使用)
brew info <formula>


安裝套件
brew install <formula> [--with-參數]


移除套件
brew uninstall <formula>


將套件符號連結至 /usr/local
brew link <formula>


移除已安裝套件的 symlink,但是不移除套件
brew unlink <formula>


將已安裝套件的服務加入 Launchd,設定為開機啟動的守護行程(brew services 的介紹請參考
brew services start <formula>


顯示已安裝的套件清單
brew list


顯示已安裝的特定套件的安裝內容(檔案夾以及檔案)
brew list <formula>


顯示全部可安裝的套件清單
brew search


搜尋特定的套件
brew search <formula>


列出指定軟體的依賴關係
brew deps <formula>


顯示特定套件的安裝路徑
brew --prefix <formula>


移除所有舊的 formulae
brew cleanup


移除舊的 formula
brew cleanup <formula>


固定第三方版本庫
brew tap-pin <username/repo>


停止對套件進行 update/upgrade
brew pin <formula>


恢復對套件進行 update/upgrade
brew unpin <formula>



補充說明:


1. 安裝套件前一定要先執行 brew update,並建議執行 brew upgrade。

2. 在安裝軟體時,如果有多個版本庫所提供的套件 (配方) 名稱重複,brew 會依照下列的順序來決定要使用那一個 formula:(1) 使用 tap-pin 固定的版本庫 (pinned taps)、(2) 核心配方 (core formulae,在 homebrew/core 的 formulae)、(3) 其它的版本庫 (other taps)。

3. 其他的操作可以參考 https://docs.brew.sh/FAQ.html


2019年10月9日 星期三

使用 Homebrew 安裝 MariaDB


MariaDB 簡介


MariaDB 是一個關聯式資料庫管理系統(Relational Database Management System, RDBMS),是一個主要由開源社群維護、採用 GPL v2 授權的 MySQL 分叉(Fork)。MariaDB 由 MySQL 的主要創始人 Ulf Michael Widenius 所主導開發,會建立這個分支的原因之一是原本收購了 MySQL AB 的 Sun Microsystems 被資料庫巨擘 Oracle 給收購了,使得 MySQL 有被閉源的風險。和 MySQL 的名稱來自 Widenius 女兒 My 一樣,MariaDB 的名稱來自 Widenius 女兒的名字 Maria。

要選擇 MySQL 或是 MariaDB 並不是一件容易的事,因為兩者之間的差異逐漸擴大。本文將僅介紹 MariaDB 的安裝以及簡易的使用方式。

安裝 MariaDB

要在 macOS 上安裝 MariaDB 十分簡單,只需要執行下列的命令:

brew update
brew upgrade
brew install mariadb


(Homebrew 的簡介請參考。)


啟動與連線 MariaDB Server


為了要保持跟 MySQL 的操作相容性,MariaDB 大部份的操作命令沿用了 MySQL 的命令。要啟動 MariaDB server 需要執行下列的命令:
mysql.server start

mysql.server 是 MariaDB 用來啟動、停止、重新啟動、以及檢查狀態的腳本 (Script)。


要停止 MariaDB server 需要執行下列的命令:
mysql.server stop --user=[my_current_user]


因為是使用目前的使用者啟動,所以在停止時需要加上使用者名稱 --user=[my_current_user]。如果沒有加上使用者名稱,會出現下列的錯誤訊息:
ERROR! MariaDB server process #Pro_ID is not running!


若是使用下列的命令檢查伺服器的狀態:
mysql.server status


則會出現下列的錯誤訊息
ERROR! MariaDB is not running, but PID file exists


解決的方式,一樣是在命令中加入 --user 這個參數。


在啟動 MariaDB 後,可以使用下列的命令連線 MariaDB:
sudo mysql -uroot


剛安裝完 MariaDB 時,root 帳號是沒有密碼的。在之前的版本,只要使用本機使用者帳號即可連線 MariaDB,這樣的機制會有資訊安全的疑慮。因此,從 MariaDB 10.4.3 開始,在未設定 root 帳號密碼前,MariaDB 會使用 unix_socket 插件 (Plugin)保護 root@localhost,需要透過系統用戶憑證來連線。如果沒有使用 sudo,會出現下列的錯誤:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'


設定 root 密碼


傳統設定密碼的方式為使用 mysqladmin 命令:
sudo mysqladmin -uroot password your_password


在設定好 root 的密碼後,可以使用傳統的認證方式 (mysql_native_password) 連線到 MariaDB:
mysql -uroot -pyour_password


MariaDB 也提供了 mysql_secure_installation 這個設定腳本,來進行密碼以及伺服器的相關設定,並且建議在上線服務前需要先執行該腳本。在設定完密碼後,可以直接執行該命令 (未設定 root 密碼時,要加上 sudo):
mysql_secure_installation


該腳本會進行下列的設定:

1. 是否更換為 unix_socket 認證:建議選擇 N,保留目前的認證方式1

2. 設定 MariaDB 的 root 密碼:密碼已經設定好了,可以選擇 N,否則選 Y 進行密碼設定;

3. 移除匿名使用者:建議選擇 Y;

4. 禁止 root 遠端登入:建議選擇 Y;

5. 移除 test 資料庫:建議選擇 Y;

6. 重新載入權限表格:建議選擇 Y,讓上面的設定生效。


註1:在選擇 Y 後,目前的 mysql_native_password 密碼會失效,在不是使用 sudo 命令時,將無法繼續執行腳本。

將 mysqld 設定為守護行程 (daemon)


brew services start mysql



brew services 的簡介可以參考這裡

使用 Homebrew-services 設定守護行程或是任務項


前情提要:在 macOS 的啟動守護行程一文中介紹了 macOS 的守護行程 (Daemon) 以及任務項 (Agent),在 Homebrew 簡介一文中,介紹了如何使用 Homebrew 安裝套件。

本文將以 Apache HTTP Server 為例,介紹如何將安裝好的套件設定為守護行程或是任務項。

將 httpd 設定為 Daemon


要讓 httpd 能夠在開機自動執行,可以執行下列的指令:
sudo brew services start httpd


上面的指令包含了下面的動作:

1. 自動安裝 homebrew-services(用來整合 Homebrew 跟 macOS 的 launchctl 管理器)。


2. 將 httpd 的 plist 檔案(homebrew.mxcl.httpd.plist)複製到 /Library/LaunchDaemons (加入到 Launchd) :
sudo cp /usr/local/opt/httpd/homebrew.mxcl.httpd.plist /Library/LaunchDaemons
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
sudo chmod 644 /Library/LaunchDaemons/homebrew.mxcl.httpd.plist


3. 將下列的檔案夾或是檔案的擁有者更改為 root:
/usr/local/opt/httpd
/usr/local/opt/httpd/bin
/usr/local/opt/httpd/bin/httpd
/usr/local/var/homebrew/linked/httpd


注意:我們在執行 Homebrew 時,使用的是目前登入的使用者權限,因此在升級、移除或是重新安裝 httpd 時,要使用 'sudo rm' 指令手動移除 httpd 舊版本的 Keg 檔案夾。直接使用 brew uninstall httpd 會出現下列的錯誤:
Error: Could not remove httpd keg! Do so manually:
  sudo rm -rf /usr/local/Cellar/httpd/2.4.41_1



4. 執行 sudo launchctl load 將 httpd 加入 launchd:
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd.plist



在使用 Homebrew 安裝軟體時,plist 檔案預設會安裝在 Keg 檔案夾中,若要讓服務在開機時使用 root 權限自動執行 (成為守護行程),就要使用上述的 brew services 指令進行設定,或是以手動的方式執行上面的步驟 2、3、以及 4。


我們可以使用 launchctl list 指令檢查 httpd 是否已經被加入 launchd 中:
sudo launchctl list | grep httpd



將 httpd 從 Launchd 中移除或是重新加入


要將 httpd 從 Launchd 中移除,可以執行下列的指令:
sudo brew services stop httpd


在修改過 plist 檔案,或是要重新加入 Launchd,可以使用下列的指令:
sudo brew services restart httpd


將 httpd 設定為 Agent


要讓 httpd 能夠在登入後自動執行,可以執行下列的指令:
brew services start httpd



上面的指令包含了下面的動作:

1. 自動安裝 homebrew-services(如果之前沒有安裝過的話)。


2. 將 Keg 檔案夾中的 plist 檔案複製到 ~/Library/LaunchAgents:
cp /usr/local/opt/httpd/homebrew.mxcl.httpd.plist ~/Library/LaunchAgents


3. 執行 launchctl load,啟動 httpd:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist



注意:使用 brew services 讓服務 (例如本文中的 httpd) 成為 Daemon 或是 Agent,主要的差異在於是否使用 sudo 指令。

將 httpd 從守護行程中移除或是重新加入


安裝 Homebrew-services 後,也可以使用它將 httpd 從任務項中移除:
brew services stop httpd


或是重新加入任務項 (在修改 homebrew.mxcl.httpd.plist 之後):
sudo brew services restart httpd


僅啟動 httpd


Homebrew-services 也可以只用來啟動 httpd:
brew services run httpd



列出可以被管理的服務


使用下列的指令可以列出所有可以被 brew services 管理的套件:
brew services list


或是簡單的使用:
brew services


如果先前執行過:
brew services start httpd


會輸出下列的資訊:
Name    Status  User  Plist
httpd   started userName /Users/userName/Library/LaunchAgents/homebrew.mxcl.httpd.plist
php     stopped       
redis   stopped  


顯示目前 httpd 是登入啟動的任務項 (plist 檔在 ~/Library/LaunchAgents/)。

如果使用 sudo 執行:
sudo brew services start httpd


再一次執行 brew services 則會列出:
Name    Status  User  Plist
httpd   started root  /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
php     stopped       
redis   stopped  


顯示目前 httpd 是守護行程 (plist 檔在 /Library/LaunchDaemons/)。


注意:當把 httpd 設定為守護行程後,雖然在執行 sudo brew services stop httpd 後,會將 httpd 的 plist 檔從  /Library/LaunchDaemons/ 中移除,httpd 的 plist 檔仍然存在於  ~/Library/LaunchAgents/ 中。


提醒:因為 Mac 大部份是用來做為開發用,因此建議將服務設為任務項,在登入時啟動即可。

附記

在 2020/02/03 曾出現過 brew services - Unknown command 的問題,雖然問題很快就被解決,但是使用者要執行 brew update 才能夠再使用 brew services。