Merge pull request #1089 from crazy-max/docker-install-diag
docker(install): lima install diagnostics for Docker provisioning failures
This commit is contained in:
@@ -231,6 +231,7 @@ provision:
|
||||
script: |
|
||||
#!/bin/bash
|
||||
set -eux -o pipefail
|
||||
archiveInstallLog=/var/log/docker-actions-toolkit-archive-install.log
|
||||
command -v docker >/dev/null 2>&1 && exit 0
|
||||
if [ ! -e /etc/systemd/system/docker.socket.d/override.conf ]; then
|
||||
mkdir -p /etc/systemd/system/docker.socket.d
|
||||
@@ -248,12 +249,14 @@ provision:
|
||||
fi
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
if [ "{{srcType}}" == "archive" ]; then
|
||||
curl -fsSL https://get.docker.com | sh -s -- --channel {{srcArchiveChannel}} --version {{srcArchiveVersion}}
|
||||
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/dockerd -H fd://{{#if localTCPPort}} -H tcp://0.0.0.0:2375{{/if}} --containerd=/run/containerd/containerd.sock|' /usr/lib/systemd/system/docker.service
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
systemctl status docker.socket || true
|
||||
systemctl status docker.service || true
|
||||
{
|
||||
curl -fsSL https://get.docker.com | sh -s -- --channel {{srcArchiveChannel}} --version {{srcArchiveVersion}}
|
||||
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/dockerd -H fd://{{#if localTCPPort}} -H tcp://0.0.0.0:2375{{/if}} --containerd=/run/containerd/containerd.sock|' /usr/lib/systemd/system/docker.service
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
systemctl status docker.socket || true
|
||||
systemctl status docker.service || true
|
||||
} 2>&1 | tee "$archiveInstallLog"
|
||||
elif [ "{{srcType}}" == "image" ]; then
|
||||
arch=$(uname -m)
|
||||
case $arch in
|
||||
|
||||
@@ -326,6 +326,7 @@ export class Install {
|
||||
try {
|
||||
await Exec.exec(`limactl ${limaStartArgs.join(' ')}`, [], {env: envs});
|
||||
} catch (e) {
|
||||
await this.printDarwinDiagnostics();
|
||||
fsp
|
||||
.readdir(limaDir)
|
||||
.then(files => {
|
||||
@@ -539,11 +540,7 @@ EOF`,
|
||||
}
|
||||
|
||||
private async tearDownDarwin(): Promise<void> {
|
||||
await core.group('Docker daemon logs', async () => {
|
||||
await Exec.exec('limactl', ['shell', '--tty=false', this.limaInstanceName, 'sudo', 'journalctl', '-u', 'docker.service', '-l', '--no-pager']).catch(() => {
|
||||
core.warning(`Failed to get Docker daemon logs`);
|
||||
});
|
||||
});
|
||||
await this.printDarwinDiagnostics();
|
||||
await core.group('Stopping lima instance', async () => {
|
||||
await Exec.exec('limactl', ['stop', '--tty=false', this.limaInstanceName, '--force']);
|
||||
});
|
||||
@@ -558,6 +555,36 @@ EOF`,
|
||||
});
|
||||
}
|
||||
|
||||
private async printDarwinDiagnostics(): Promise<void> {
|
||||
await this.printDarwinGuestCommandOutput('Cloud-init output log', ['sudo', 'cat', '/var/log/cloud-init-output.log']);
|
||||
await this.printDarwinGuestCommandOutput('Cloud-init status', ['sudo', 'timeout', '300s', 'cloud-init', 'status', '--wait']);
|
||||
await this.printDarwinGuestCommandOutput('Docker unit file', ['sudo', 'systemctl', 'cat', 'docker.service']);
|
||||
await this.printDarwinGuestCommandOutput('Docker service status', ['sudo', 'systemctl', 'status', 'docker.service', 'docker.socket', '-l', '--no-pager']);
|
||||
await this.printDarwinGuestCommandOutput('Archive install script log', ['sudo', 'cat', '/var/log/docker-actions-toolkit-archive-install.log']);
|
||||
await this.printDarwinGuestCommandOutput('Docker daemon logs', ['sudo', 'journalctl', '-u', 'docker.service', '-l', '--no-pager']);
|
||||
}
|
||||
|
||||
private async printDarwinGuestCommandOutput(title: string, args: string[]): Promise<void> {
|
||||
await core.group(title, async () => {
|
||||
const res = await Exec.getExecOutput('limactl', ['shell', '--tty=false', this.limaInstanceName, ...args], {
|
||||
ignoreReturnCode: true,
|
||||
silent: true
|
||||
}).catch(error => {
|
||||
core.info(`Failed to get ${title}: ${error}`);
|
||||
return undefined;
|
||||
});
|
||||
if (!res) {
|
||||
return;
|
||||
}
|
||||
const output = [res.stdout.trim(), res.stderr.trim()].filter(Boolean).join('\n');
|
||||
if (output.length > 0) {
|
||||
core.info(output);
|
||||
} else if (res.exitCode !== 0) {
|
||||
core.info(`${title} exited with code ${res.exitCode}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private async tearDownLinux(): Promise<void> {
|
||||
await core.group('Docker daemon logs', async () => {
|
||||
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));
|
||||
|
||||
Reference in New Issue
Block a user