-
Notifications
You must be signed in to change notification settings - Fork 624
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
As more and more people are using VSCode on a non linux machine we would like to make it easier to start developing on openvas as a whole. With this and an extension `Dev Container` a developer can work within an already setup environment. Additionally it is designed so that someone on a linux machine can also use it with Distrobox or with a direct mounted docker command. For that the GID as well as UID can be set via build parameter for convenience there is a Makefile creating the image with shared UID and GID gatherred from `id`. To build a new image for those purposes run `make build`. Inside the container there a multiple helper integrated, run: - start_redis -- to start a redis instance for openvas-scanner - greenbone-nvt-sync -- to get a community feed - build-openvas -- to rebuild openvas-scanner - build-gvm-libs -- to rebuild gvm-libs Additionally there are github specialized clone helper scripts, for an example executing: - github-clone greenbone/openvas-scanner - github-clone greenbone/gvm-libs will clone the openvas-scanner into /workspaces/greenbone/openvas-scanner and /workspaces/greenbone/gvm-libs respectively so that they can be immediately found by the build- scripts.
- Loading branch information
1 parent
95fd30e
commit 628b510
Showing
8 changed files
with
181 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
|
||
FROM rust:latest | ||
ARG UID=1000 | ||
ARG GID=1000 | ||
|
||
RUN apt-get update && apt-get install -y sudo git rsync pipx redis-server | ||
# Add prepare-user-dirs.sh and execcute it | ||
COPY prepare-user-dirs.sh /prepare-user-dirs.sh | ||
COPY build-cmake-project.sh /usr/local/bin/build-cmake-project.sh | ||
RUN chmod +x /usr/local/bin/build-cmake-project.sh | ||
COPY build-openvas /usr/local/bin/build-openvas | ||
RUN chmod +x /usr/local/bin/build-openvas | ||
COPY build-gvm-libs /usr/local/bin/build-gvm-libs | ||
RUN chmod +x /usr/local/bin/build-gvm-libs | ||
COPY github-clone.sh /usr/local/bin/github-clone | ||
RUN chmod +x /usr/local/bin/github-clone | ||
|
||
RUN bash /prepare-user-dirs.sh && rm /prepare-user-dirs.sh | ||
USER user | ||
RUN python3 -m pipx install greenbone-feed-sync | ||
# installing gvm-libs and openvas-scanner | ||
RUN github-clone greenbone/gvm-libs | ||
RUN github-clone greenbone/openvas-scanner | ||
RUN sudo sh /workspaces/greenbone/gvm-libs/.github/install-dependencies.sh | ||
RUN sudo sh /workspaces/greenbone/openvas-scanner/.github/install-openvas-dependencies.sh | ||
|
||
RUN build-gvm-libs | ||
RUN build-openvas | ||
# Currently we don't install scannerctl and openvasd as they don't have dependencies | ||
# that must be preloaded in order to function. | ||
# WORKDIR /workspaces/openvas/rust/scannerctl | ||
# RUN cargo install --path . | ||
# WORKDIR /workspaces/openvas/rust/openvasd | ||
# RUN cargo install --path . | ||
USER redis | ||
RUN sed 's/redis-openvas/redis/' /workspaces/greenbone/openvas-scanner/config/redis-openvas.conf | tee /etc/redis/redis.conf | ||
USER user | ||
# We clean up the cloned repositories as they are usually mounted into the container | ||
RUN rm -r /workspaces/greenbone | ||
|
||
|
||
# RUN sudo apt-get clean && sudo rm -rf /var/lib/apt/lists/* | ||
|
||
SHELL ["/bin/bash", "-c"] | ||
|
||
RUN rustup component add rust-analyzer rust-src | ||
ENV PATH="/home/user/.cargo/bin:${PATH}" | ||
ENV PATH="/home/user/.local/bin:${PATH}" | ||
RUN echo "alias start_redis='redis-server /etc/redis/redis.conf'" >> /home/user/.bashrc | ||
ENV start_redis="redis-server /etc/redis/redis.conf" | ||
WORKDIR /workspaces | ||
CMD ["/bin/bash"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# Get the UID and GID of the user those will be used within the Dockerfile to share the same id between host and container. | ||
UID := $(shell id -u) | ||
GID := $(shell id -g) | ||
|
||
.PHONY: build | ||
|
||
build: | ||
docker build \ | ||
--build-arg UID=$(UID) \ | ||
--build-arg GID=$(GID) \ | ||
-t openvas-dev:latest \ | ||
. | ||
|
||
run-tmp: | ||
docker run -it --rm \ | ||
-v $(HOME)/.ssh:/home/user/.ssh\ | ||
-v $(HOME)/.config:/home/user/.config\ | ||
-v $(HOME)/src:/home/user/src \ | ||
openvas-dev:latest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#/bin/sh | ||
[ -d "$1" ] && WORKD_DIR="$1" || ( | ||
echo "Usage: $0 <project-dir>" | ||
exit 1 | ||
) | ||
cd $WORKD_DIR | ||
set -ex | ||
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
cmake --build build --target install | ||
sudo ldconfig |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/bin/bash | ||
owner=${1:-greenbone} | ||
if [ -d "/workspaces/$owner" ]; then | ||
target_dir="/workspaces/$owner/gvm-libs" | ||
else | ||
target_dir="/workspaces/gvm-libs" | ||
fi | ||
/usr/local/bin/build-cmake-project.sh "$target_dir" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/bash | ||
owner=${1:-greenbone} | ||
if [ -d "/workspaces/$owner" ]; then | ||
target_dir="/workspaces/$owner/openvas-scanner" | ||
else | ||
target_dir="/workspaces/openvas-scanner" | ||
fi | ||
|
||
/usr/local/bin/build-cmake-project.sh "$target_dir" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"build": { "dockerfile": "Dockerfile" }, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#!/bin/bash | ||
|
||
if [ -z "$1" ]; then | ||
echo "Error: Repository name is not provided." | ||
exit 1 | ||
fi | ||
|
||
IFS='/' read -r owner repo <<< "$1" | ||
|
||
parent_dir="/workspaces" | ||
if [ ! -d "$parent_dir" ]; then | ||
echo "Parent directory '$parent_dir' does not exist. Creating it." | ||
mkdir -p "$parent_dir" | ||
fi | ||
|
||
owner_dir="$parent_dir/$owner" | ||
if [ ! -d "$owner_dir" ]; then | ||
echo "Owner directory '$owner_dir' does not exist. Creating it." | ||
mkdir -p "$owner_dir" | ||
fi | ||
|
||
target_dir="/workspaces/$1" | ||
|
||
if [ -d "$target_dir" ]; then | ||
echo "Error: Target directory '$target_dir' already exists." | ||
exit 1 | ||
fi | ||
|
||
if ls id_* &>/dev/null; then | ||
if git clone git@github.com:$1.git "$target_dir"; then | ||
echo "Cloning with SSH URL successful." | ||
else | ||
echo "Warning: Cloning with SSH URL failed. Falling back to HTTPS URL." | ||
git clone https://github.com/$1.git "$target_dir" | ||
fi | ||
else | ||
git clone https://github.com/$1.git "$target_dir" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#!/bin/sh | ||
# This scripts creates the dirs defined in dirs and sets the rights to the given user and id. | ||
# This script creates a user with a $UID as well as a group with $GID | ||
# afterwards it creates set of directories, assigns ownership to a newly created user and group, and configures sudo permissions for the user. | ||
# This is done to allow cmake --build build --target install to work without permission issues. | ||
|
||
dirs=" | ||
/workspaces | ||
/run/gvm | ||
/var/log/gvm | ||
/etc/openvas | ||
/var/lib/openvas | ||
/usr/local/lib | ||
/usr/local/share/man/man1/ | ||
/usr/local/share/man/man8/ | ||
/usr/local/include/gvm | ||
/usr/local/share/openvas | ||
/usr/local/bin | ||
/usr/local/sbin | ||
/var/lib/openvas | ||
/var/lib/notus | ||
/var/lib/gvm | ||
/run/redis | ||
" | ||
|
||
set -ex | ||
groupadd --gid "$GID" "developer" || true | ||
# for the case that the GID already existed when we tried to create developer | ||
# this can happen when we reuse staff from a mac os host | ||
group_name=$(getent group "$GID" | cut -d: -f1) | ||
|
||
useradd --uid "$UID" --gid "$group_name" --shell /bin/bash --groups redis --create-home user | ||
|
||
for dir in ${dirs[@]}; do | ||
if [ ! -d $dir ]; then | ||
mkdir -p $dir | ||
fi | ||
chown -R user:$group_name $dir | ||
done | ||
# allow user to run sudo without password since it is intented as development | ||
# container it is assumed that the user wants to install or manipulate the container | ||
echo "user ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/user |