Amazon Linux2にLinuxbrewをいれて環境構築してみる


はじめに

皆さん、どうもです。k.s.ロジャースのやすもんです。
今回は、今までcurlとかbuildとかで頑張って構築していたDockerのwebアプリケーションコンテナをLinuxbrewを使ってやろうと思います!
弊社ではPHPのフレームワークにphalconを採用しているのですが、現状ソースからのbuildなのでこれらをbrewで入れれると楽だなーという感じです
では、早速いってみましょう!

前提

dockerなどの環境構築は完了している想定です!

amzn2イメージの取得

$ docker pull amazonlinux:2

Linuxbrewを入れる

amzn2のコンテナを起動し、環境構築開始です!

$ docker run -it --name test amazonlinux:2 /bin/bash

以降はコンテナ内の作業です

Linuxbrewを入れる準備(公式のコマンド)

$ yum groupinstall -y 'Development Tools' && yum install -y curl file git curl-devel

amzn2イメージは軽量構成なので、各種神器たちを入れていきます

$ yum -y install gcc make autoconf sudo diffutils vi wget tar which

brewはrootだと入らないので、ユーザを作成します

$ adduser brew 
$ echo 'brew:hoge' |chpasswd
$ usermod -G wheel brew
$ su - brew

Linuxbrewをインストール

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

途中でパスワードを求められたら入力します
warning吐いて終了しますが、一旦OK

PATH周り設定

test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile

brew doctorしてみる

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: The following directories do not exist:
/home/linuxbrew/.linuxbrew/var/homebrew/linked

You should create these directories and change their ownership to your account.
  sudo mkdir -p /home/linuxbrew/.linuxbrew/var/homebrew/linked
  sudo chown -R $(whoami) /home/linuxbrew/.linuxbrew/var/homebrew/linked

ディレクトリ作ってchownしろと言われるので仰せのままに

$ sudo mkdir -p /home/linuxbrew/.linuxbrew/var/homebrew/linked
$ sudo chown -R brew /home/linuxbrew/.linuxbrew/var/homebrew/linked

再度brew doctorしてみる

$ brew doctor
Your system is ready to brew.

よさそうだ

PHPの環境を構築

PHP7.2とPhalcon3.4.2の環境を作っていきます

php7.2のインストール
まぁamazon-linux-extrasで入れれるのでこれはそこまでありがたみがないですが。。。

$ brew install php72

$ echo 'export PATH="/home/linuxbrew/.linuxbrew/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
$ echo 'export PATH="/home/linuxbrew/.linuxbrew/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile

$ exit
$ su - brew

$ php -v
PHP 7.2.17 (cli) (built: Apr 12 2019 06:04:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.17, Copyright (c) 1999-2018, by Zend Technologies

$ which php
/home/linuxbrew/.linuxbrew/opt/[email protected]/bin/php

よさそうだ
続いて、phalconをインストールしていく(公式のコマンド)

$ brew tap tigerstrikemedia/homebrew-phalconphp
$ brew install php72-phalcon

php.iniにphalcon.soのpathを通す

$ vi /home/linuxbrew/.linuxbrew/etc/php/7.2/php.ini

(最下部に以下を追加)
extension=/home/linuxbrew/.linuxbrew/Cellar/php72-phalcon/3.4.2/phalcon.so

確認

$ php -i "(command-line 'phpinfo()')" | grep phalcon
phalcon
phalcon => enabled
phalcon.db.escape_identifiers => On => On
phalcon.db.force_casting => Off => Off
phalcon.orm.cast_on_hydrate => Off => Off
phalcon.orm.column_renaming => On => On
phalcon.orm.disable_assign_setters => Off => Off
phalcon.orm.enable_implicit_joins => On => On
phalcon.orm.enable_literals => On => On
phalcon.orm.events => On => On
phalcon.orm.exception_on_failed_save => Off => Off
phalcon.orm.ignore_unknown_columns => Off => Off
phalcon.orm.late_state_binding => Off => Off
phalcon.orm.not_null_validations => On => On
phalcon.orm.update_snapshot_on_save => On => On
phalcon.orm.virtual_foreign_keys => On => On

うむ、うまく動いてそうだ

$ php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
phalcon
Phar
phpdbg_webhelper
posix
pspell
readline
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

モジュール一覧にも出てきているし、よさそう

以前はソースからビルドしていたので、これで結構楽だ
後方互換がないのでgit clone git://github.com/phalcon/cphalcon.git -b "3.4.x"みたいな感じでブランチのバージョン指定したり割とめんどくさかったんだよね。。。

さいごに

いじってみた感想ですが、Docker上のamznlinux2構築はちょと癖がありましたね
Dockerはデフォルトのユーザがrootユーザなので一般ユーザを追加しないといけなかったり。。。

しかし、上記の問題をクリアすればbrew自体のインストールはすごく簡単にできました
また、brew使ってphpやモジュール周りのインストールも楽でした!

一点気をつけなければいけないのはpath周りですね
通常PHPなどをインストールすれば/etc配下にphpディレクトリが作成され、php.iniもそこに作成されますが、brewの場合は/home/linuxbrew/.linuxbrew/etc/配下になるので注意が必要だと思いました
最初/etc配下にphpディレクトリがなく、php.iniが見つけられずちょと困惑しましたw

pathの考慮ができれば、環境構築が捗るのでおすすめです!
是非試してみてください!

Wantedlyでもブログ投稿してます

Techブログに加えて会社ブログなどもやっているので、気になった方はぜひ覗いてみてください。
https://www.wantedly.com/companies/ks-rogers