alpine linuxでSymfony CLIを使う

題名の通りですがdocker、alpine linuxsymfony(4.4.*)の環境にて、Symfony CLIでチェックしようとしたらうまくできなかったので、備忘録的な感じです。

1. Symfony CLIとは

念のため記載しますが、簡潔にまとめると、symfonyのインストール、動作に必要なPHP extensionのチェック、セキュリティのチェックetc...などができるcliツールです。
とはいえ、インストールではcomposerを使用しますので、インストールでは使わないですね。

2. はじめに

今回したかったことは下記の感じです。
https://symfony.com/doc/4.4/setup.html#technical-requirements

インストール方法については以下リンクから。
https://symfony.com/download

コマンドは下記のものを使用します。

wget https://get.symfony.com/cli/installer -O - | bash

今回はalpine linuxですので、bashなんてもちろん入ってません。 従って既存のashで動かせないかな〜と試してみました。

3. 調査

3.1 コマンドの変更

単純にコマンド末尾の「bash」を「sh」で動かしてみる。

/var/www/ # wget https://get.symfony.com/cli/installer -O - | sh
Connecting to get.symfony.com (13.32.52.125:443)
-                    100% |****************************************************|  5537  0:00:00 ETA
sh: builtin: not found

「builtin: not found」とエラーが出ましたので、インストーラシェルスクリプトを確認してみる。

3.2 ソースコードの確認

下記の1行目がashに対応してなかったので、エラーとは関係ありませんでしたが一応修正。

#!/usr/bin/env bash
#! /bin/sh

エラーの箇所を調べてみると下記の「builtin ...」部分でした。

CLI_NAME="Symfony CLI"

function output {
        .
        .
        .
        .

    builtin echo -e "${style_start}${1}${style_end}"         //「Symfony CLI installer」と表示されるはず。
}

output "${CLI_NAME} installer" "heading"

しかし、そもそも表示される文字列が違うし、「not found」なんてどこにもない。

3.3 builtinについて調査

whichコマンドで調べてみましたが、「builtin」が入っていませんでした。 だったらインストールすればいいじゃないかと考えましたが、apkにもありませんでした。

4. 対策

「builtin」を入れる手立てもなさそうなので、不本意ではありますが、軽量が売りのalpine linuxに「bash」を入れることにしました。

5. 手順

dockerの場合は「dokcer exec」なり「docker-compose exec」でログイン(root)した前提で話を進めます。

5.1 bashのインストール

/var/www # apk add --no-cache bash
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/2) Installing readline (8.0.0-r0)
(2/2) Installing bash (5.0.0-r0)
Executing bash-5.0.0-r0.post-install
Executing busybox-1.30.1-r2.trigger
OK: 53 MiB in 45 packages

5.2 Symfony CLIのインストール

ダウンロード方法については以下リンクから。
https://symfony.com/download

/var/www # wget https://get.symfony.com/cli/installer -O - | bash
Connecting to get.symfony.com (13.32.52.86:443)
-                    100% |****************************************************|  5537  0:00:00 ETA
Symfony CLI installer

Environment check
  [*] cURL is installed
  [*] Gzip is installed
  [ ] Warning: Git will be needed.
  [*] You architecture (amd64) is supported

Download
  Finding the latest version (platform: "linux_amd64")...
  Downloading version 4.15.0 (https://github.com/symfony/cli/releases/download/v4.15.0/symfony_linux_amd64.gz)...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   635  100   635    0     0   1591      0 --:--:-- --:--:-- --:--:--  1587
100 7297k  100 7297k    0     0  1665k      0  0:00:04  0:00:04 --:--:-- 2377k
  Uncompress binary...
  Making the binary executable...
  Installing the binary into your home directory...
  The binary was saved to: /root/.symfony/bin/symfony

The Symfony CLI v4.15.0 was installed successfully!

Use it as a local file:
  /root/.symfony/bin/symfony

Or add the following line to your shell configuration file:
  export PATH="$HOME/.symfony/bin:$PATH"

Or install it globally on your system:
  mv /root/.symfony/bin/symfony /usr/local/bin/symfony

Then start a new shell and run 'symfony'

5.3 パスを通す

mv /root/.symfony/bin/symfony /usr/local/bin/symfony

5.4 確認

/var/www/practice_rental_motorcycle # symfony check:requirements
Symfony Requirements Checker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> PHP is using the following php.ini file:
/usr/local/etc/php/php.ini

> Checking Symfony requirements:

.....................WW.........

                                              
 [OK]                                         
 Your system is ready to run Symfony projects 
                                              

Optional recommendations to improve your setup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 * intl extension should be available
   > Install and enable the intl extension (used for validators).

 * a PHP accelerator should be installed
   > Install and/or enable a PHP accelerator (highly recommended).

6. 感想

動くけど足りないよ〜と注意されていますね・・・(笑)
alpineだからashでなんとかしたかったけどしょうがないね。

dockerfileを作成してみた

今更ながら開発環境用にとdockerをインストールしたので、基本となるdockerfileを作ってみた。

設定内容

  1. centosで作成(latest→7.5.1804)
  2. rootパスワード設定
  3. 開発者ユーザ(グループ)の作成
  4. TimezoneをUTC→JTC
  5. localeを日本語へ
  6. ssh設定(sshfsを考え中)
  7. その他使いそうなものを適当にインストール
続きを読む