Skip to content

Commit 538e8dd

Browse files
committedNov 5, 2024·
compile lapdev-guest-agent with musl
1 parent 30a07c3 commit 538e8dd

File tree

16 files changed

+116
-47
lines changed

16 files changed

+116
-47
lines changed
 

Diff for: ‎.devcontainer/devcontainer.json

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
{
22
"dockerComposeFile": "docker-compose.yml",
33
"service": "lapdev",
4+
"portsAttributes": {
5+
"8080": {
6+
"label": "dashboard",
7+
}
8+
}
49
}

Diff for: ‎lapdev-common/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ pub struct WorkspaceService {
357357
#[derive(Serialize, Deserialize, Debug, Clone)]
358358
pub struct HostWorkspace {
359359
pub id: Uuid,
360+
pub name: String,
361+
pub osuser: String,
360362
pub ssh_port: Option<i32>,
361363
pub ide_port: Option<i32>,
362364
pub last_inactivity: Option<DateTime<FixedOffset>>,

Diff for: ‎lapdev-conductor/src/rpc.rs

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ impl ConductorService for ConductorRpc {
8383
.into_iter()
8484
.map(|ws| HostWorkspace {
8585
id: ws.id,
86+
name: ws.name,
87+
osuser: ws.osuser,
8688
ssh_port: ws.ssh_port,
8789
ide_port: ws.ide_port,
8890
last_inactivity: ws.last_inactivity,

Diff for: ‎lapdev-conductor/src/server.rs

+1
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ impl Conductor {
481481

482482
let _ = rpc_future.await;
483483
tracing::debug!("workspace host connection ended");
484+
abort_handle.abort();
484485
}
485486

486487
Ok(())

Diff for: ‎lapdev-dashboard/src/workspace.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ fn WorkspaceControl(
410410
href="#"
411411
class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white"
412412
on:click=stop_workspace
413-
class:hidden=move || workspace_status != WorkspaceStatus::Running && workspace_status != WorkspaceStatus::Stopping
413+
class:hidden=move || workspace_status == WorkspaceStatus::Stopped
414414
>
415415
Stop
416416
</a>

Diff for: ‎lapdev-ws/src/server.rs

+80-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ use lapdev_common::{
2020
devcontainer::{
2121
DevContainerCmd, DevContainerConfig, DevContainerCwd, DevContainerLifeCycleCmd,
2222
},
23-
utils, BuildTarget, ContainerImageInfo, CpuCore, GitBranch, HostWorkspace, ProjectRequest,
24-
RepoBuildInfo, RepoBuildOutput, RepoBuildResult, RepoComposeService, RepobuildError,
23+
utils, BuildTarget, ContainerImageInfo, ContainerInfo, CpuCore, GitBranch, HostWorkspace,
24+
ProjectRequest, RepoBuildInfo, RepoBuildOutput, RepoBuildResult, RepoComposeService,
25+
RepobuildError, StartWorkspaceRequest,
2526
};
2627
use lapdev_rpc::{
2728
error::ApiError, spawn_twoway, ConductorServiceClient, InterWorkspaceService, WorkspaceService,
@@ -48,7 +49,8 @@ use crate::{
4849

4950
pub const LAPDEV_WS_VERSION: &str = env!("CARGO_PKG_VERSION");
5051
const INSTALL_SCRIPT: &[u8] = include_bytes!("../scripts/install_guest_agent.sh");
51-
const LAPDEV_GUEST_AGENT: &[u8] = include_bytes!("../../target/release/lapdev-guest-agent");
52+
const LAPDEV_GUEST_AGENT: &[u8] =
53+
include_bytes!("../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent");
5254

5355
#[derive(Clone, Deserialize, Default)]
5456
#[serde(rename_all = "kebab-case")]
@@ -175,6 +177,7 @@ impl WorkspaceServer {
175177
});
176178
}
177179

180+
let mut startup_task_run = false;
178181
while let Some(conn) = listener.next().await {
179182
if let Ok(conn) = conn {
180183
let peer_addr = conn.peer_addr();
@@ -203,6 +206,16 @@ impl WorkspaceServer {
203206
tracing::info!("incoming conductor connection {peer_addr:?} stopped");
204207
rpcs.write().await.retain(|rpc| rpc.id != id);
205208
});
209+
210+
if !startup_task_run {
211+
startup_task_run = true;
212+
let server = self.clone();
213+
tokio::spawn(async move {
214+
if let Err(e) = server.run_startup_task().await {
215+
tracing::error!("run start up task error: {e:?}");
216+
}
217+
});
218+
}
206219
}
207220
}
208221

@@ -233,6 +246,29 @@ impl WorkspaceServer {
233246
}
234247
}
235248

249+
async fn run_startup_task(&self) -> Result<(), ApiError> {
250+
tracing::info!("run startup task");
251+
let rpc = { self.rpcs.read().await.first().cloned() };
252+
let rpc = rpc.ok_or_else(|| anyhow!("don't have any conductor connections"))?;
253+
let workspaces = rpc
254+
.conductor_client
255+
.running_workspaces_on_host(current())
256+
.await??;
257+
for ws in workspaces {
258+
if let Err(e) = self
259+
.start_workspace(StartWorkspaceRequest {
260+
osuser: ws.osuser,
261+
workspace_name: ws.name.clone(),
262+
})
263+
.await
264+
{
265+
tracing::error!("on startup task, start workspace {} error: {e:?}", ws.name);
266+
}
267+
}
268+
269+
Ok(())
270+
}
271+
236272
async fn run_auto_stop_delete_task(&self) -> Result<(), ApiError> {
237273
let rpc = { self.rpcs.read().await.first().cloned() };
238274
let rpc = rpc.ok_or_else(|| anyhow!("don't have any conductor connections"))?;
@@ -1458,6 +1494,47 @@ driver = "overlay"
14581494

14591495
Ok(branches)
14601496
}
1497+
1498+
pub async fn start_workspace(
1499+
&self,
1500+
ws_req: StartWorkspaceRequest,
1501+
) -> Result<ContainerInfo, ApiError> {
1502+
let socket = self.get_podman_socket(&ws_req.osuser).await?;
1503+
let client = unix_client();
1504+
let url = Uri::new(
1505+
&socket,
1506+
&format!("/containers/{}/start", ws_req.workspace_name),
1507+
);
1508+
let req = hyper::Request::builder()
1509+
.method(hyper::Method::POST)
1510+
.uri(url)
1511+
.body(Full::<Bytes>::new(Bytes::new()))?;
1512+
let resp = client.request(req).await?;
1513+
let status = resp.status();
1514+
let body = resp.collect().await?.to_bytes();
1515+
if status != 204 && status != 304 {
1516+
let err = String::from_utf8(body.to_vec())?;
1517+
return Err(anyhow!("start container error: {err}").into());
1518+
}
1519+
1520+
let url = Uri::new(
1521+
&socket,
1522+
&format!("/containers/{}/json", ws_req.workspace_name),
1523+
);
1524+
let req = hyper::Request::builder()
1525+
.method(hyper::Method::GET)
1526+
.uri(url)
1527+
.body(Full::<Bytes>::new(Bytes::new()))?;
1528+
let resp = client.request(req).await?;
1529+
let status = resp.status();
1530+
let body = resp.collect().await?.to_bytes();
1531+
if status != 200 {
1532+
let err = String::from_utf8(body.to_vec())?;
1533+
return Err(anyhow!("get container info error: {err}").into());
1534+
}
1535+
let info: ContainerInfo = serde_json::from_slice(&body)?;
1536+
Ok(info)
1537+
}
14611538
}
14621539

14631540
async fn spawn(fut: impl futures::Future<Output = ()> + Send + 'static) {

Diff for: ‎lapdev-ws/src/service.rs

+1-35
Original file line numberDiff line numberDiff line change
@@ -265,41 +265,7 @@ impl WorkspaceService for WorkspaceRpcService {
265265
_context: context::Context,
266266
ws_req: StartWorkspaceRequest,
267267
) -> Result<ContainerInfo, ApiError> {
268-
let socket = self.server.get_podman_socket(&ws_req.osuser).await?;
269-
let client = unix_client();
270-
let url = Uri::new(
271-
&socket,
272-
&format!("/containers/{}/start", ws_req.workspace_name),
273-
);
274-
let req = hyper::Request::builder()
275-
.method(hyper::Method::POST)
276-
.uri(url)
277-
.body(Full::<Bytes>::new(Bytes::new()))?;
278-
let resp = client.request(req).await?;
279-
let status = resp.status();
280-
let body = resp.collect().await?.to_bytes();
281-
if status != 204 {
282-
let err = String::from_utf8(body.to_vec())?;
283-
return Err(anyhow!("start container error: {err}").into());
284-
}
285-
286-
let url = Uri::new(
287-
&socket,
288-
&format!("/containers/{}/json", ws_req.workspace_name),
289-
);
290-
let req = hyper::Request::builder()
291-
.method(hyper::Method::GET)
292-
.uri(url)
293-
.body(Full::<Bytes>::new(Bytes::new()))?;
294-
let resp = client.request(req).await?;
295-
let status = resp.status();
296-
let body = resp.collect().await?.to_bytes();
297-
if status != 200 {
298-
let err = String::from_utf8(body.to_vec())?;
299-
return Err(anyhow!("get container info error: {err}").into());
300-
}
301-
let info: ContainerInfo = serde_json::from_slice(&body)?;
302-
Ok(info)
268+
self.server.start_workspace(ws_req).await
303269
}
304270

305271
async fn delete_workspace(

Diff for: ‎pkg/image/fluxbox/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM debian:12
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/gnome/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ RUN apt-get update && \
5454
/cleanup
5555

5656
USER root
57-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
57+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
5858
RUN chmod +x /lapdev-guest-agent
5959
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
6060
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/go/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/go:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/javascript/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/javascript-node:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/lapdev/Dockerfile

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FROM debian:12
2+
3+
RUN apt update
4+
RUN apt install -y curl build-essential git vim podman pkg-config libssl-dev libz-dev fuse-overlayfs s3cmd
5+
6+
RUN curl https://sh.rustup.rs -sSf | bash -s -- -y
7+
RUN $HOME/.cargo/bin/rustup target add wasm32-unknown-unknown
8+
RUN $HOME/.cargo/bin/rustup target add x86_64-unknown-linux-musl
9+
RUN $HOME/.cargo/bin/cargo install trunk && rm -rf $HOME/.cargo/registry/
10+
11+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
12+
RUN chmod +x /lapdev-guest-agent
13+
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
14+
RUN sh /install_guest_agent.sh && rm /install_guest_agent.sh
15+
16+
EXPOSE 8080

Diff for: ‎pkg/image/python/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/python:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/rust/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/rust:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/typescript/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/typescript-node:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

Diff for: ‎pkg/image/universal/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM mcr.microsoft.com/devcontainers/universal:latest
22

33
USER root
4-
COPY ../../../target/release/lapdev-guest-agent /lapdev-guest-agent
4+
COPY ../../../target/x86_64-unknown-linux-musl/release/lapdev-guest-agent /lapdev-guest-agent
55
RUN chmod +x /lapdev-guest-agent
66
COPY ../../../lapdev-ws/scripts/install_guest_agent.sh /install_guest_agent.sh
77
RUN sh /install_guest_agent.sh

0 commit comments

Comments
 (0)
Please sign in to comment.