나는랜도간단한 개발 환경가상 램프 애플리케이션, 내 습관을 테스트하는 방법으로랜도 플러그인(지점에서 근무 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 애플리케이션에 대한 Lando 구성입니다.
# ~/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
. 그러나 이러한 스크립트는 컨테이너 내에서 실행되는 것으로 나타나므로 출력이 표시되지 않을 수 있습니다... 자세한 내용은 계속 지켜봐 주시기 바랍니다...