私ランド簡単な開発環境仮想ランプアプリケーション、私の習慣をテストする方法としてランドプラグイン(支店で働くconsole
)。 (LandoはVagrantと同様の目標を持ってローカル開発環境を実行するためのツールですが、Docker Composeに基づいて構築されました。)
時々 - まだパターンを識別できませんでした - 私のアプリケーションディレクトリ内でlando start
、lando info
または実行などのlandoコマンドを実行すると、その作業ディレクトリの所有者とグループがに設定されます。これが発生すると、同じ所有権/グループがLandoのユーザーゾーン構成およびデータファイルディレクトリにも適用されます。マイコンピュータにはそのようなユーザーやグループはありません。lando stop
~/workspace/lamp
82
~/.lando
~/workspace/lamp $ ls -la
total 64
drwxrwxr-x 5 82 82 4096 Dec 10 19:14 .
drwxr-xr-x 36 ctamayo ctamayo 4096 Dec 13 12:11 ..
-rw-r--r-- 1 82 82 289 Nov 3 17:45 composer.json
-rw-r--r-- 1 82 82 4064 Nov 3 17:45 composer.lock
-rw-rw-r-- 1 82 82 45 Nov 3 17:58 .env
drwxrwxr-x 8 82 82 4096 Dec 10 19:14 .git
-rw-rw-r-- 1 82 82 35 Nov 3 17:46 .gitignore
-rw-rw-r-- 1 82 82 284 Dec 8 16:52 .lando.yml
-rw-rw-r-- 1 82 82 22770 Dec 15 09:51 stderr.log
drwxr-xr-x 5 82 82 4096 Nov 3 17:45 vendor
drwxrwxr-x 2 82 82 4096 Nov 3 18:09 www
~/workspace/lamp $ cd ~/.lando
~/.lando $ ls -la
total 52
drwxrwxr-x 10 82 82 4096 Dec 8 16:57 .
drwx------ 79 82 82 4096 Dec 15 10:49 ..
-rw-rw-r-- 1 82 82 670 Dec 8 16:05 appRegistry.json
drwxrwxr-x 2 82 82 4096 Nov 27 20:53 cache
-rw-rw-r-- 1 82 82 171 Dec 8 16:57 config.yml
-rw-rw-r-- 1 82 82 36 Oct 24 10:59 .instance.id
drwxr-xr-x 3 82 82 4096 Oct 24 13:15 keys
drwxrwxr-x 2 82 82 4096 Oct 24 11:55 logs
drwxrwxr-x 2 82 82 4096 Dec 1 09:57 plugins
drwxrwxr-x 2 82 82 4096 Oct 24 11:04 proxy
drwxrwxr-x 3 82 82 4096 Oct 24 10:59 services
drwxrwxr-x 17 82 82 4096 Nov 21 10:38 tmp
drwxrwxr-x 2 82 82 4096 Oct 24 12:55 util
~/.lando $ sudo grep 82 /etc/passwd
~/.lando $ groups
ctamayo adm cdrom sudo dip plugdev lpadmin sambashare docker
~/.lando $ sudo groups
root
~/.lando $
トラブルシューティング、v1.0
。strace
私はstrace
n00bなので間違っているかもしれませんが、これまでのデバッグ技術は次のとおりです。
このヘルパースクリプトを自分のパスに配置すると、lando
コマンドが失敗するまでコマンドが実行され続けます。 (まだパターンを認識していません。)どのくらい失敗するのに必要な時間または失敗したコマンド):
#!/bin/bash
set -e
while :
do
echo starting lando
lando start
echo lando info
lando info
echo stopping lando
lando stop
done
私はこれを実行し、stderrをファイルにパイプしますstderr.log
...
~/workspace/lamp $ strace 2>stderr.log testlando.bash
...このファイルを追跡している間、82
またはchown
別のウィンドウで見つけます。
~/workspace/lamp $ tail -f tail -f stderr.log | egrep '\b82\b|chown'
# .........wait forever........
tail
驚いたことに、私のbashスクリプトは最終的に失敗し、両方のディレクトリに所有権とグループを設定しましたが(上記のように)、コマンドは実際に出力を生成しませんでした(^ 1)。
(私が見た唯一の例外はこの出力です。考える純粋な偶然の一致--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9941, si_uid=1000, si_status=0, si_utime=82, si_stime=6} ---
:)
bashスクリプトの出力(lando
私のLandoプラグインの多くのデバッグ出力を含む)は常に次のようになります。
starting lando
BOOMSHAKALAKA!!!
Your app has started up correctly.
Here are some vitals:
NAME lamp
LOCATION /home/ctamayo/workspace/lamp
SERVICES appserver, database, cache, queue, console
APPSERVER URLS https://localhost:32788
http://localhost:32789
http://lamp.lndo.site:8000
https://lamp.lndo.site
CONSOLE URLS http://beanstalk.lamp.lndo.site:8000
https://beanstalk.lamp.lndo.site
lando info
beanstalkd info
{ image: 'schickling/beanstalkd:latest',
ports: [ '11333:11300' ],
command: 'beanstalkd -p 11300',
entrypoint: '/lando-entrypoint.sh',
volumes:
[ '$LANDO_ENGINE_SCRIPTS_DIR/lando-entrypoint.sh:/lando-entrypoint.sh',
'$LANDO_APP_ROOT_BIND:/app',
'$LANDO_ENGINE_HOME:/user',
'$LANDO_ENGINE_SCRIPTS_DIR/user-perms.sh:/user-perms.sh',
'/home/ctamayo/.lando/services/config/scripts/load-keys.sh:/scripts/load-keys.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-import.sh:/helpers/mysql-import.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-export.sh:/helpers/mysql-export.sh' ],
environment:
{ LANDO_SERVICE_NAME: 'queue',
LANDO_SERVICE_TYPE: 'beanstalkd',
LANDO_MOUNT: '/app',
LANDO: 'ON',
LANDO_HOST_OS: 'linux',
LANDO_HOST_UID: '1000',
LANDO_HOST_GID: '1000',
LANDO_HOST_IP: '10.0.10.20',
LANDO_APP_ROOT: '/home/ctamayo/workspace/lamp',
LANDO_APP_NAME: 'lamp',
LANDO_WEBROOT_USER: 'www-data', '$LANDO_ENGINE_SCRIPTS_DIR/user-perms.sh:/user-perms.sh',
'/home/ctamayo/.lando/services/config/scripts/load-keys.sh:/scripts/load-keys.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-import.sh:/helpers/mysql-import.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-export.sh:/helpers/mysql-export.sh' ],
environment:
{ LANDO_SERVICE_NAME: 'console',
LANDO_SERVICE_TYPE: 'beanstalkd_console',
LANDO_MOUNT: '/app',
LANDO: 'ON',
LANDO_HOST_OS: 'linux',
LANDO_HOST_UID: '1000',
LANDO_HOST_GID: '1000',
LANDO_HOST_IP: '10.0.10.20',
LANDO_APP_ROOT: '/home/ctamayo/workspace/lamp',
LANDO_APP_NAME: 'lamp',
LANDO_WEBROOT_USER: 'www-data',
LANDO_WEBROOT_GROUP: 'www-data',
LANDO_WEBROOT_UID: '33',
LANDO_WEBROOT_GID: '33',
LANDO_LOAD_PP_KEYS: 'false',
COLUMNS: 256,
FOO: 'barrrrr',
REDIS_HOST: 'cache',
REDIS_PORT: '6379' },
labels: { 'io.lando.container': 'TRUE' },
LANDO_WEBROOT_GROUP: 'www-data',
LANDO_WEBROOT_UID: '33',
LANDO_WEBROOT_GID: '33',
LANDO_LOAD_PP_KEYS: 'false',
COLUMNS: 256,
FOO: 'barrrrr',
REDIS_HOST: 'cache',
REDIS_PORT: '6379' },
labels: { 'io.lando.container': 'TRUE' },
type: 'beanstalkd',
portforward: 11333,
_app: 'lamp',
_root: '/home/ctamayo/workspace/lamp',
_mount: '/app',
version: 'latest' }
console info
{ image: 'schickling/beanstalkd-console:latest',
ports: [ 2080 ],
command: 'php -S 0.0.0.0:2080 -t /source/public',
entrypoint: '/lando-entrypoint.sh',
volumes:
[ '$LANDO_ENGINE_SCRIPTS_DIR/lando-entrypoint.sh:/lando-entrypoint.sh',
'$LANDO_APP_ROOT_BIND:/app',
'$LANDO_ENGINE_HOME:/user',
'$LANDO_ENGINE_SCRIPTS_DIR/user-perms.sh:/user-perms.sh',
'/home/ctamayo/.lando/services/config/scripts/load-keys.sh:/scripts/load-keys.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-import.sh:/helpers/mysql-import.sh',
'/home/ctamayo/.lando/services/config/helpers/mysql-export.sh:/helpers/mysql-export.sh' ],
environment:
{ LANDO_SERVICE_NAME: 'console',
LANDO_SERVICE_TYPE: 'beanstalkd_console',
LANDO_MOUNT: '/app',
LANDO: 'ON',
LANDO_HOST_OS: 'linux',
LANDO_HOST_UID: '1000',
LANDO_HOST_GID: '1000',
LANDO_HOST_IP: '10.0.10.20',
LANDO_APP_ROOT: '/home/ctamayo/workspace/lamp',
LANDO_APP_NAME: 'lamp',
LANDO_WEBROOT_USER: 'www-data',
LANDO_WEBROOT_GROUP: 'www-data',
LANDO_WEBROOT_UID: '33',
LANDO_WEBROOT_GID: '33',
LANDO_LOAD_PP_KEYS: 'false',
COLUMNS: 256,
FOO: 'barrrrr',
REDIS_HOST: 'cache',
REDIS_PORT: '6379' },
labels: { 'io.lando.container': 'TRUE' },
type: 'beanstalkd_console',
_app: 'lamp',
_root: '/home/ctamayo/workspace/lamp',
_mount: '/app',
version: 'latest' }
undefined
{
"appserver": {
"type": "php",
"version": "7.1",
"via": "apache",
"webroot": "www",
"urls": [
"https://localhost:32788",
"http://localhost:32789",
"http://lamp.lndo.site:8000",
"https://lamp.lndo.site"
]
},
"database": {
"type": "mysql",
"version": "latest",
"creds": {
"user": "lamp",
"password": "lamp",
"database": "lamp"
},
"internal_connection": {
"host": "database",
"port": 3306
},
"external_connection": {
"host": "localhost",
"port": "32773"
}
},
"cache": {
"type": "redis",
"version": "latest",
"internal_connection": {
"host": "cache",
"port": 6379
},
"external_connection": {
"host": "localhost",
"port": "not forwarded"
}
},
"queue": {
"type": "beanstalkd",
"version": "latest",
"internal_connection": {
"host": "queue",
"port": 11300
},
"external_connection": {
"host": "localhost",
"port": "11333"
}
},
"console": {
"type": "beanstalkd_console",
"version": "latest",
"internal_connection": {
"host": "console",
"port": 2080
},
"external_connection": {
"host": "localhost",
"port": 2080
},
"urls": [
"http://beanstalk.lamp.lndo.site:8000",
"https://beanstalk.lamp.lndo.site"
]
}
}
stopping lando
App stopped!
starting lando
BOOMSHAKALAKA!!!
Your app has started up correctly.
Here are some vitals:
NAME lamp
LOCATION /home/ctamayo/workspace/lamp
SERVICES appserver, database, cache, queue, console
APPSERVER URLS https://localhost:32797
http://localhost:32798
http://lamp.lndo.site:8000
https://lamp.lndo.site
CONSOLE URLS http://beanstalk.lamp.lndo.site:8000
https://beanstalk.lamp.lndo.site
lando info
これには直接的なエラーメッセージはなく、単に失敗して停止します。再実行すると、次のlando start
ような結果が得られます。
error: Error: EACCES: permission denied, open '/home/ctamayo/.lando/services/config/scripts/add-cert.sh'
at Error (native)
at Object.fs.openSync (fs.js:642:18)
at copyFileSync (/usr/lib/lando/node_modules/fs-extra/lib/copy.js:16:16)
at copySync (/usr/lib/lando/node_modules/fs-extra/lib/copy.js:85:7)
at /usr/lib/lando/node_modules/fs-extra/lib/copy.js:91:7
at Array.forEach (native)
at Object.copySync (/usr/lib/lando/node_modules/fs-extra/lib/copy.js:90:14)
at moveConfig (/usr/lib/lando/plugins/lando-services/lib/services.js:65:10)
at module.exports (/usr/lib/lando/plugins/lando-services/lib/services.js:134:16)
at AsyncEvents.<anonymous> (/usr/lib/lando/plugins/lando-services/lib/bootstrap.js:21:43)
at AsyncEvents.handle (/usr/lib/lando/lib/events.js:109:19)
at /usr/lib/lando/lib/events.js:170:19
at tryCatcher (/usr/lib/lando/node_modules/bluebird/js/release/util.js:16:23)
at Object.gotValue (/usr/lib/lando/node_modules/bluebird/js/release/reduce.js:155:18)
at Object.gotAccum (/usr/lib/lando/node_modules/bluebird/js/release/reduce.js:144:25)
at Object.tryCatcher (/usr/lib/lando/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/usr/lib/lando/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/usr/lib/lando/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/usr/lib/lando/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/usr/lib/lando/node_modules/bluebird/js/release/promise.js:693:18)
at Async._drainQueue (/usr/lib/lando/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/usr/lib/lando/node_modules/bluebird/js/release/async.js:143:10)
~/.lando/config.yml
注:この問題は、Landoに次のようにプラグインを実行するように指示した場合にのみ発生します(以下を参照)。プラグインが参照されない場合、bashスクリプトは数時間実行され続けます。
問題が多い
さらにデバッグするにはどうすればよいですか?strace
Bashスクリプトから呼び出す必要がありますか?友達に加えて、これを行うことができる他のシステムコールはありますかchown
?ポイントは何ですか82
?
(全ての魚について) よろしくお願いします。
Lando 構成内容
これがどれほど関連性があるかはわかりませんが、以下は私のLAMPアプリケーションのランド構成です。
# ~/workspace/lamp/.lando.yml
name: lamp
recipe: lamp
config:
webroot: www
services:
cache:
type: redis
persist: true
queue:
type: beanstalkd
portforward: 11333
console:
type: beanstalkd_console
proxy:
console:
- beanstalk.lamp.lndo.site
tooling:
redis-cli:
service: cache
そしてlandoに私のカスタムプラグインをロードするように指示する〜/ .lando / configファイルlando-beanstalkd
(場所~/.lando/plugins/lando-beanstalkd
:
plugins:
- lando-core
- lando-events
- lando-proxy
- lando-recipes
- lando-services
- lando-tooling
- lando-beanstalkd
logLevelConsole: warn
logLevel: debug
アップデート:v2.0のトラブルシューティング
だから。プロットがより複雑になります。~/.ssh
また、私のディレクトリの所有権も変更されました。
total 44
drwxr-xr-x 2 82 82 4096 Nov 28 14:40 .
drwx------ 79 ctamayo ctamayo 4096 Dec 15 15:06 ..
-rw------- 1 82 82 472 Nov 28 14:40 config
-rw------- 1 82 82 1766 Jun 19 13:20 id_rsa
-rw-r--r-- 1 82 82 410 Jun 19 13:20 id_rsa.pub
-rw-r--r-- 1 82 82 14600 Nov 28 14:40 known_hosts
-rwx------ 1 82 82 3239 Oct 24 12:31 lando_rsa
-rw-r--r-- 1 82 82 750 Oct 24 12:31 lando_rsa.pub
まあ、WTF。
とにかく、これを捨てるために私のプラグインコードにはchown
、chmod
またはへの参照がありません。chgrp
持つLando自体にはいくつかあります。。最初のいくつかのGitHub検索結果は関連性があるように見えたので、関連するsh
スクリプト(load-keys.shとuser-perms.sh)にこのコードを追加しました。
if [ $LANDO_WEBROOT_USER = 82 ]; then
echo '$LANDO_WEBROOT_USER is 82! Bailing...'
exit 1
fi
if [ $LANDO_WEBROOT_GROUP = 82 ]; then
echo '$LANDO_WEBROOT_GROUP is 82! Bailing...'
exit 1
fi
bashスクリプトを再実行すると、同じ出力が生成されます。$LANDO_WEBROOT_USER
またはへの言及はありません$LANDO_WEBROOT_GROUP
。ただし、これらのスクリプトはコンテナ内で実行されているように見えるため、出力が表示されない可能性があります...詳細については、ご覧ください。