From patchwork Fri Nov 29 13:50:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ayoub Zaki X-Patchwork-Id: 2016469 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=GyDdNkph; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::238; helo=mail-lj1-x238.google.com; envelope-from=swupdate+bncbdbktzhrzujrbrmnu65amgqe7cijgna@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-lj1-x238.google.com (mail-lj1-x238.google.com [IPv6:2a00:1450:4864:20::238]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Y0F2N45QDz1yQp for ; Sat, 30 Nov 2024 00:51:07 +1100 (AEDT) Received: by mail-lj1-x238.google.com with SMTP id 38308e7fff4ca-2ff4e0a2a61sf14484731fa.2 for ; Fri, 29 Nov 2024 05:51:07 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1732888264; cv=pass; d=google.com; s=arc-20240605; b=WU/0e688tm9c1jD6+mnvUZ2zxr0E3qAqiUK3YSK66wJnmlg+quXirLxDnJigL/pLiO kaaFAqn2t5xSUoRP3yPWfojBFiWqp36YkjtjEot+OguResak8chVh3KPV4FXQHIrCfKD l+wqzIUUmIfcq+Ee64SGuQiQxKWFvmQpPTgcOtnh1dB+Hu8CkaA66VC+tD0EYzhsLKHw C+ojMSBRVVBoaomoySenk17GzYEhZPzx4Nbf3d4IvHFQFQep5RQ6WyZhho788uIfQHBx 86T554tuBnBHLoPJtSg08WOxDVxVBw9W9f8p7Rkx3QO5/Tr7LrlFJkbW54MqtXJtcx4t JK6g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:message-id:date :subject:cc:to:from:sender:dkim-signature; bh=yZRw/8oafZwLZ8zAXkpmunciO/y8qCmclZsf+DunkdU=; fh=WhmxwXvTG3WdmdP2rOxGifJ0FbjemVnQivce13UKjmw=; b=ICl1Uo/wF4NU7/aNkL5ff+7RDuCoL7bey6gD04GZjGOh27x7CtNLrbzyUPcYntaDX+ Ex+Ddi2+uncbtvvAXvJLVZ5+zAyQRSaxBNt50aLjirR8xxs8MK46LC7vmu1dS0VrUYGF eh+0jNlcjH7Fi8v+OrmQaUaRZsOwQWX6YP39NdbBdxXi2j5Y1nrujibwVIOtWHgH4fGu RdIKmGOJp4vGeao581FaMu6T3GjXUh+QkeiiOAO/Rl1IZa/IHQawWggHcoGNDyV1jeyU WyRi2bubVxLugkKAfgCfJ8WR1VdyhNaAthhgtCshvykDxEL3PXenpoiBeTPuZ7TVsEPO G7sA==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@embetrix.com header.s=rsa1 header.b=OOCP35sN; dkim=neutral (no key) header.i=@embetrix.com header.s=ed1; spf=none (google.com: ayoub.zaki@embetrix.com does not designate permitted sender hosts) smtp.mailfrom=ayoub.zaki@embetrix.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1732888264; x=1733493064; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :sender:from:to:cc:subject:date:message-id:reply-to; bh=yZRw/8oafZwLZ8zAXkpmunciO/y8qCmclZsf+DunkdU=; b=GyDdNkphrby6vlg51+JZ5qOWWVB0Jo4E5YOThmwa5OC8pVtWIhZWMEEM0+N2f/GtSA +IZLHiF01zkU62niTN5Cenl9BbjMLz3QvK1Ej5es7PmLhN4XfhPnbxgNY4amSFPJ8ikZ aYMTNKtOWH20NcdcrwaJkUQvhnc++RRX0Rd7LvdIdD9jv6vFnsrrXNFO+duOzlPlf7s2 XgAXibUC+s4wf5+7A+CsoRQtRv3OlYrIKkklvUmJIREiHYi+0Tg8VpK/zlwDLJ7/BkhV TkOXGyppDWE/IfP2QGxzwo3gcIoE95woOy+vwz2B3Dd/yDkqKqSSOcTg5qNUO/d4YOz7 Ugqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732888264; x=1733493064; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :sender:from:to:cc:subject:date:message-id:reply-to; bh=yZRw/8oafZwLZ8zAXkpmunciO/y8qCmclZsf+DunkdU=; b=OlGEEDTjt1zRD9yHkoQOb69pztOwtFoRJQc3b/Xh/Nm7Fhzd8zwEV0Zn9Yu5OJz06q pCzCrs4nUuagIbRW56AcADJLiJNhe/bizF0BFJGUcMvcC+8yvkEDYeNxXbgitMdN2q4J PwwO3i8///nnRMgnyr9cdCYeEJ6u84y4lmS+aHwEarpOBSaMrJijdRkBr/kVxoxz6/BG OpCBsLHVp/yWN8+TUe2c5yegrMo+RX88f9ZFfRkfJKAQaVXcIlfoF6+rwMbB+0T+E9Wr JM8gD+bKo1nG5Q9ifDQqsa3nFQdikIa/Tm7NW2JS8WFmYjG9Av+u+VuAV6E0WtIDdRdL 8f1Q== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCXMogK8ArR0Hz+Jky9rV0s9o3VNYojn9Hm/wLbS14NhFVJ3/6RPN3P2qdHFzsZ3wuGGfsa7vTwuYg==@patchwork.ozlabs.org X-Gm-Message-State: AOJu0YxQFIQRENG9yJqpv1BpmAY8e/wBc8EFz63FIqPQa1hC+19LRl94 /8ftjDGR8xi5eh9xUcSwNAXMd0InLy2pP/wAfUv/De+mulotPjGr X-Google-Smtp-Source: AGHT+IGfPiyBp6RuAOZQ4QZUgBjzRdf7471U+KzyUIuLFfTGY1aQVc4iK9L2kk0gBOkBA9nEWoTFLg== X-Received: by 2002:a05:6512:1253:b0:53d:e732:1588 with SMTP id 2adb3069b0e04-53df0106cefmr7514125e87.38.1732888263091; Fri, 29 Nov 2024 05:51:03 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a05:6512:ad3:b0:53d:f1e0:6161 with SMTP id 2adb3069b0e04-53df5113a62ls213624e87.2.-pod-prod-04-eu; Fri, 29 Nov 2024 05:51:00 -0800 (PST) X-Received: by 2002:a2e:a9a4:0:b0:2ff:cc70:1d8c with SMTP id 38308e7fff4ca-2ffd60a50e3mr76558801fa.21.1732888259849; Fri, 29 Nov 2024 05:50:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1732888259; cv=none; d=google.com; s=arc-20240605; b=Dk+eub0SWB9CkT8jYY//wUrkLWZc3Sk+T2b+/Zopoxj4TsSuv1voQ74rws/0ic2/w6 rV8LGPPRdxtO2RnaGYGda92PM7vk5qZHEQi3wm56obG3B+s+rIW7uHyTTMFY8jAgGXTV WGvyAsThsfn2nvDoCKloJClMYmDxUV/vVjti+45Wiu80aXaZz7WCf6bB2K8dVRKiv8Hu G1414erR2AtZlw5xc6mXYcTE/lWBudJC0vB7qPcHtAaUKWxJz2DUpjYTRkDuEZuniMyn ujE+as69eyc3O1jzZeXzzyIqy5Ytn9K5jhEsIV5CPxlx+DsSZmqNrWmaO7gVHOyLpfer Wysw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature:dkim-signature; bh=U/2RxsKt2KS0a9QHTdBJIxn5eq2GQleyMcWlqgNVD2A=; fh=+OJORHqdqTgck03oywGhM24wqLll/i7F/sjzFdEpJxw=; b=lGDs1DShwVkfUQ+nxdRI+C548TaIwb0n2ok4wXSi9F7GLikdkT/QtPD7dOCEvhkD1k DpX3aKAIopXlH4pfYDRQheumjpjFER51Dre82+3/R7DB/4ilQH2aX98WK7feN6TrSX/n bKh+6dvpqIs5mD0YRNSRx4/9fKwyJGGIek7lk8IVIPZxaiQLWK+RgX0D0fRcDuOg/U4j 3hu49YNcnlegyGDY5kIO7EnKsPOe0O6+oBu5KPM8eGCcY2eWIEJcDWR7KFFs1tpbxj1r 2Nztig5qO5sHDzyY2CjR1KsNJChAUA0SAQJaz0t851jcESdoQkjvRNzPgOmVOS+kYsUc ozrA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@embetrix.com header.s=rsa1 header.b=OOCP35sN; dkim=neutral (no key) header.i=@embetrix.com header.s=ed1; spf=none (google.com: ayoub.zaki@embetrix.com does not designate permitted sender hosts) smtp.mailfrom=ayoub.zaki@embetrix.com Received: from mailrelay2-3.pub.mailoutpod2-cph3.one.com (mailrelay2-3.pub.mailoutpod2-cph3.one.com. [2a02:2350:5:501::1]) by gmr-mx.google.com with ESMTPS id 38308e7fff4ca-2ffdfc2b9dfsi703221fa.4.2024.11.29.05.50.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Nov 2024 05:50:59 -0800 (PST) Received-SPF: none (google.com: ayoub.zaki@embetrix.com does not designate permitted sender hosts) client-ip=2a02:2350:5:501::1; X-HalOne-ID: f4db20f5-ae58-11ef-8b29-09b8706f39fe Received: from xps-13.fritz.box (dynamic-2a02-3102-8c10-00a0-2115-61e8-5137-c82e.310.pool.telefonica.de [2a02:3102:8c10:a0:2115:61e8:5137:c82e]) by mailrelay2.pub.mailoutpod2-cph3.one.com (Halon) with ESMTPSA id f4db20f5-ae58-11ef-8b29-09b8706f39fe; Fri, 29 Nov 2024 13:50:58 +0000 (UTC) From: Ayoub Zaki To: swupdate@googlegroups.com Cc: Ayoub Zaki Subject: [swupdate] [PATCH] VSCode : Enable SWUpdate Development inside Docker Container Date: Fri, 29 Nov 2024 14:50:56 +0100 Message-ID: <20241129135056.373492-1-ayoub.zaki@embetrix.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Original-Sender: ayoub.zaki@embetrix.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@embetrix.com header.s=rsa1 header.b=OOCP35sN; dkim=neutral (no key) header.i=@embetrix.com header.s=ed1; spf=none (google.com: ayoub.zaki@embetrix.com does not designate permitted sender hosts) smtp.mailfrom=ayoub.zaki@embetrix.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , This will enable seamless Development of **swupdate** Project with VSCode inside Docker container. The VSCode Container provides: * Automatic Mapping of the host user UID/GID inside the container * GCC Cross-Compilers (armhf/aarch64) * GDB Multiarch for Debugging * Remote SSH on the Target with seamless ssh mapping of the Host inside the container (Linux/Windows WSL) * Git and Git Extensions to work and send Patches * Python modules to work with swupdateclient Note: This require Docker installation for Linux/or Windows : [1] https://docs.docker.com/engine/install VSCode Extensions (extensions.json) will be recommended for the installation For more Information : [2] https://code.visualstudio.com/docs/devcontainers/containers [3] https://www.youtube.com/watch?v=C_5tDWsWSj0 [4] https://www.youtube.com/watch?v=b1RavPr_878 Signed-off-by: Ayoub Zaki --- .devcontainer/Dockerfile | 116 ++++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 29 ++++++++ .gitignore | 4 ++ .vscode/extensions.json | 10 +++ .vscode/tasks.json | 74 ++++++++++++++++++++ 5 files changed, 233 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/tasks.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..0045b850 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,116 @@ +FROM debian:12 + +RUN dpkg --add-architecture armhf && apt-get update +RUN dpkg --add-architecture arm64 && apt-get update +RUN apt-get install -y \ + build-essential \ + crossbuild-essential-armhf \ + crossbuild-essential-arm64 \ + gdb-multiarch \ + cmake \ + ccache \ + qemu-user + +# Install swupdate native dependencies +RUN apt-get install -y \ + libebgenv-dev \ + libmtd-dev \ + libubi-dev \ + libzck-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + libwolfssl-dev \ + libsystemd-dev \ + libjson-c-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libarchive-dev \ + libconfig-dev \ + libz-dev \ + libyaml-dev \ + lua5.2-dev + +# Install swupdate dependencies for armhf +RUN apt-get install -y \ + libebgenv-dev:armhf \ + libmtd-dev:armhf \ + libubi-dev:armhf \ + libzck-dev:armhf \ + libcurl4-openssl-dev:armhf \ + libssl-dev:armhf \ + libwolfssl-dev:armhf \ + libsystemd-dev:armhf \ + libjson-c-dev:armhf \ + libncurses5-dev:armhf \ + libncursesw5-dev:armhf \ + libarchive-dev:armhf \ + libconfig-dev:armhf \ + libz-dev:armhf \ + libyaml-dev:armhf \ + lua5.2-dev:armhf + +# Install swupdate dependencies for arm64 +RUN apt-get install -y \ + libebgenv-dev:arm64 \ + libmtd-dev:arm64 \ + libubi-dev:arm64 \ + libzck-dev:arm64 \ + libcurl4-openssl-dev:arm64 \ + libssl-dev:arm64 \ + libwolfssl-dev:arm64 \ + libsystemd-dev:arm64 \ + libjson-c-dev:arm64 \ + libncurses5-dev:arm64 \ + libncursesw5-dev:arm64 \ + libarchive-dev:arm64 \ + libconfig-dev:arm64 \ + libz-dev:arm64 \ + libyaml-dev:arm64 \ + lua5.2-dev:arm64 + +# Aditional development tools +RUN apt-get install -y \ + git-core \ + git-man \ + git-email \ + sudo \ + nano \ + vim \ + curl \ + openssh-client \ + bash-completion + +# Install libubootenv library (new version not available in debian) +# for native, armhf and arm64 +RUN git clone https://github.com/sbabic/libubootenv.git && \ + cd libubootenv && \ + cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu \ + -DCMAKE_INSTALL_INCLUDEDIR=/usr/include . && \ + make -j && \ + sudo make install && git clean -fdx && \ + cmake -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf \ + -DCMAKE_INSTALL_INCLUDEDIR=/usr/include . && \ + make -j && \ + sudo make install && git clean -fdx && \ + cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib/aarch64-linux-gnu \ + -DCMAKE_INSTALL_INCLUDEDIR=/usr/include . && \ + make -j && \ + sudo make install + +# Install python3 and dependencie required for python swupdateclient +RUN apt-get install -y \ + python3 \ + python3-pip \ + python3-requests \ + python3-websockets \ + python3-termcolor + +# Add swupdate user +RUN useradd -ms /bin/bash swupdate +RUN echo "swupdate ALL=(ALL) NOPASSWD: ALL" | tee -a /etc/sudoers +USER swupdate +WORKDIR /home/swupdate + +CMD ["/bin/bash"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..cb4c5120 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,29 @@ +{ + "name": "swupdate-docker", + "build": { + "dockerfile": "Dockerfile" + }, + + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.profiles.linux": { + "bash": { + "path": "/bin/bash", + "args": ["-l"] + } + }, + "terminal.integrated.defaultProfile.linux": "bash" + }, + "extensions": [ + "ms-vscode.cpptools", + "eamodio.gitlens" + ] + } + }, + + // Map the host .ssh folder into the container for a seamless ssh experience + "mounts": [ + "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/swupdate/.ssh,type=bind,consistency=cached" + ] +} diff --git a/.gitignore b/.gitignore index 4755ff07..68cd2ee3 100644 --- a/.gitignore +++ b/.gitignore @@ -127,6 +127,10 @@ web-app/swupdate-www.tar.gz !.gitlab-ci.yml !.github +# vscode +!.devcontainer +!.vscode + # swupdateclient Pipfile Pipfile.lock diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..4bdb6854 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "ms-vscode-remote.remote-containers", + "ms-vscode-remote.remote-wsl", + "ms-vscode-remote.vscode-remote-extensionpack", + "ms-vscode.cpptools-extension-pack", + "ms-vscode.cpptools", + "eamodio.gitlens", + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..3eec68f5 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,74 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "configure", + "command": "make", + "group": "build", + "problemMatcher": [], + "detail": "Configure Swupdate using menuconfig", + "args": [ + "menuconfig" + ], + }, + { + "type": "shell", + "label": "clean", + "command": "make", + "group": "build", + "problemMatcher": [], + "detail": "Clean Swupdate build", + "args": [ + "clean" + ], + }, + { + "type": "shell", + "label": "compile", + "command": "make", + "group": "build", + "problemMatcher": [], + "detail": "Compile Swupdate (native)", + "args": [ + "-j" + ], + }, + { + "type": "shell", + "label": "cross compile armhf", + "command": "make", + "group": "build", + "problemMatcher": [], + "detail": "Cross-Compile Swupdate for armhf", + "args": [ + "-j" + ], + "options": { + "env": { + "CC": "arm-linux-gnueabihf-gcc", + "LD": "arm-linux-gnueabihf-gcc", + "CROSS_COMPILE": "arm-linux-gnueabihf-" + } + } + }, + { + "type": "shell", + "label": "cross compile aarch64", + "command": "make", + "group": "build", + "problemMatcher": [], + "detail": "Cross-Compile Swupdate for armhf", + "args": [ + "-j" + ], + "options": { + "env": { + "CC": "aarch64-linux-gnu-gcc", + "LD": "aarch64-linux-gnu-gcc", + "CROSS_COMPILE": "aarch64-linux-gnu-" + } + } + } + ] +}