Aqui está um verdadeiro estranho para você. : D
Estou executando um ambiente de desenvolvimento Lando em um simples aplicativo LAMP fictício , como uma forma de testar meu plug-in Lando a> (trabalhando fora da ramificação console
). (Lando é uma ferramenta para executar ambientes dev locais, com objetivos semelhantes ao Vagrant, mas construídos sobre o Docker Compose.)
De vez em quando - ainda não percebi um padrão - executar um comando lando, como lando start
, lando info
ou lando stop
no diretório do meu aplicativo, ~/workspace/lamp
, definirá o proprietário e grupo desse diretório de trabalho para 82
. Quando isso acontece, também aplica a mesma propriedade / grupo a ~/.lando
, o diretório de Lando para arquivos de dados e configurações de userland. Não existe tal usuário ou grupo na minha máquina.
~/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 $
Usando strace
, tentei identificar com precisão a chamada do sistema que faz essas alterações. Eu sou um strace
n00b, então posso estar fazendo errado, mas aqui está minha técnica de depuração até agora ...
Eu coloquei este script auxiliar no meu caminho que apenas executa os comandos lando
várias vezes até eles falharem (eu também ainda não percebi um padrão em quanto tempo leva para falhar, ou qual comando ele falha):
#!/bin/bash
set -e
while :
do
echo starting lando
lando start
echo lando info
lando info
echo stopping lando
lando stop
done
Eu corro isso e canso stderr no arquivo stderr.log
...
~/workspace/lamp $ strace 2>stderr.log testlando.bash
... enquanto segue esse arquivo procurando por 82
ou chown
em outra janela:
~/workspace/lamp $ tail -f tail -f stderr.log | egrep '\b82\b|chown'
# .........wait forever........
Surpreendentemente, não há literalmente nenhuma saída do comando tail
(^ 1), apesar do fato de meu script bash falhar e a propriedade e o grupo serem definidos nos dois diretórios conforme descrito acima.
(A única exceção que eu vi é essa saída, que eu acho é mera coincidência: --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9941, si_uid=1000, si_status=0, si_utime=82, si_stime=6} ---
)
A saída do script bash (originado dos comandos lando
dentro - incluindo toneladas de saída de depuração do meu plugin Lando) é sempre algo como:
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
Nenhuma mensagem de erro diretamente aqui, apenas falha e pára. Quando eu executo lando start
de novo, recebo:
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)
NOTA: Isso só acontece quando digo ao Lando para executar o plugin via ~/.lando/config.yml
(veja abaixo). Sem esse plugin referenciado, o script bash é executado por horas sem parar.
Como faço para depurar mais coisas? Preciso chamar strace
do meu script bash? Existe alguma outra chamada de sistema além de chown
e amigos que possam estar fazendo isso? E qual é o significado de 82
?
Obrigado antecipadamente (por todos os peixes).
Não tenho certeza de quão relevante isso vai acabar sendo, mas aqui está a configuração de Lando do meu aplicativo 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
E meu arquivo ~ / .lando / config, que diz ao lando para carregar o meu plugin personalizado lando-beanstalkd
(que vive em ~/.lando/plugins/lando-beanstalkd
):
plugins:
- lando-core
- lando-events
- lando-proxy
- lando-recipes
- lando-services
- lando-tooling
- lando-beanstalkd
logLevelConsole: warn
logLevel: debug
O enredo engrossa. Ele também está mudando a propriedade do meu diretório ~/.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
Como, WTF.
De qualquer forma, apenas para divulgar isso, não há referências a chown
, chmod
ou chgrp
no código do meu plug-in. Existem alguns alguns no próprio Lando . Aqueles primeiros resultados de pesquisa do GitHub pareceram relevantes, então eu adicionei este código ao sh
scripts (load-keys.sh e user-perms.sh) em questão:
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
Executar meu script bash novamente produz a mesma saída. Nenhuma menção de $LANDO_WEBROOT_USER
ou $LANDO_WEBROOT_GROUP
. Esses scripts parecem rodar dentro de um contêiner, portanto, sua saída pode ser suprimida ... fique ligado para mais ...