docker(install): lima install diagnostics for Docker provisioning failures
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -231,6 +231,7 @@ provision:
|
|||||||
script: |
|
script: |
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eux -o pipefail
|
set -eux -o pipefail
|
||||||
|
archiveInstallLog=/var/log/docker-actions-toolkit-archive-install.log
|
||||||
command -v docker >/dev/null 2>&1 && exit 0
|
command -v docker >/dev/null 2>&1 && exit 0
|
||||||
if [ ! -e /etc/systemd/system/docker.socket.d/override.conf ]; then
|
if [ ! -e /etc/systemd/system/docker.socket.d/override.conf ]; then
|
||||||
mkdir -p /etc/systemd/system/docker.socket.d
|
mkdir -p /etc/systemd/system/docker.socket.d
|
||||||
@@ -248,12 +249,14 @@ provision:
|
|||||||
fi
|
fi
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
if [ "{{srcType}}" == "archive" ]; then
|
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
|
curl -fsSL https://get.docker.com | sh -s -- --channel {{srcArchiveChannel}} --version {{srcArchiveVersion}}
|
||||||
systemctl daemon-reload
|
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 restart docker
|
systemctl daemon-reload
|
||||||
systemctl status docker.socket || true
|
systemctl restart docker
|
||||||
systemctl status docker.service || true
|
systemctl status docker.socket || true
|
||||||
|
systemctl status docker.service || true
|
||||||
|
} 2>&1 | tee "$archiveInstallLog"
|
||||||
elif [ "{{srcType}}" == "image" ]; then
|
elif [ "{{srcType}}" == "image" ]; then
|
||||||
arch=$(uname -m)
|
arch=$(uname -m)
|
||||||
case $arch in
|
case $arch in
|
||||||
|
|||||||
@@ -326,6 +326,7 @@ export class Install {
|
|||||||
try {
|
try {
|
||||||
await Exec.exec(`limactl ${limaStartArgs.join(' ')}`, [], {env: envs});
|
await Exec.exec(`limactl ${limaStartArgs.join(' ')}`, [], {env: envs});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
await this.printDarwinDiagnostics();
|
||||||
fsp
|
fsp
|
||||||
.readdir(limaDir)
|
.readdir(limaDir)
|
||||||
.then(files => {
|
.then(files => {
|
||||||
@@ -539,11 +540,7 @@ EOF`,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async tearDownDarwin(): Promise<void> {
|
private async tearDownDarwin(): Promise<void> {
|
||||||
await core.group('Docker daemon logs', async () => {
|
await this.printDarwinDiagnostics();
|
||||||
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 core.group('Stopping lima instance', async () => {
|
await core.group('Stopping lima instance', async () => {
|
||||||
await Exec.exec('limactl', ['stop', '--tty=false', this.limaInstanceName, '--force']);
|
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> {
|
private async tearDownLinux(): Promise<void> {
|
||||||
await core.group('Docker daemon logs', async () => {
|
await core.group('Docker daemon logs', async () => {
|
||||||
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));
|
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));
|
||||||
|
|||||||
Reference in New Issue
Block a user